From 36978bab32dbc7ed952fcfd2c7eea7d63b3a532a Mon Sep 17 00:00:00 2001 From: klendathu2k Date: Tue, 31 Oct 2023 13:12:00 -0400 Subject: [PATCH] [g4star] Expose partcile stack for the geant4 application. [g4star] Update stacker and agml extension classes to enable multi engine tracking and user defined hits in the geant4 application. Few additional fixes and cleanups in the code. [g4star] Import the StGeant4Maker into the repository. Builds under root 6.24 (with some additional compilation flags). [g4star] Defer mysql load until StBFChain can do it. [g4star] Add geant4vmc, geant4mk and fastjet chain options. Load libfastjet with stargen package b/c one or more filters depends on it. (Should consider splitting filters into sep chain opt). [g4star] Cleanup commented out includes. [g4star] Reduce compile time warnings... [g4star] ... more reduction of compiler warnings ... and even more reduction of compiler warnings... [g4star] And modify cons to pickup the include paths to geant4 and geant4 vmc libraries --- StRoot/StBFChain/BigFullChain.h | 7 +- StRoot/StGeant4Maker/.includes_for_export.flg | 0 StRoot/StGeant4Maker/AgMLBTofVolumeId.h | 38 + StRoot/StGeant4Maker/AgMLEEmcVolumeId.h | 70 + StRoot/StGeant4Maker/AgMLEmcVolumeId.h | 66 + StRoot/StGeant4Maker/AgMLEpdVolumeId.h | 40 + StRoot/StGeant4Maker/AgMLFstVolumeId.h | 28 + StRoot/StGeant4Maker/AgMLHcaVolumeId.h | 23 + StRoot/StGeant4Maker/AgMLMtdVolumeId.h | 25 + StRoot/StGeant4Maker/AgMLPreVolumeId.h | 23 + StRoot/StGeant4Maker/AgMLStgVolumeId.h | 29 + StRoot/StGeant4Maker/AgMLTpcVolumeId.cxx | 45 + StRoot/StGeant4Maker/AgMLTpcVolumeId.h | 66 + StRoot/StGeant4Maker/AgMLVolumeIdFactory.h | 66 + StRoot/StGeant4Maker/AgMLVpdVolumeId.h | 30 + StRoot/StGeant4Maker/AgMLWcaVolumeId.h | 23 + StRoot/StGeant4Maker/AgStarDummy.cxx | 10 + StRoot/StGeant4Maker/GeometryUtils.cxx | 26 + StRoot/StGeant4Maker/GeometryUtils.h | 11 + StRoot/StGeant4Maker/StGeant4Application.cxx | 1 + StRoot/StGeant4Maker/StGeant4Application.h | 43 + StRoot/StGeant4Maker/StGeant4Maker.cxx | 1539 +++ StRoot/StGeant4Maker/StGeant4Maker.h | 258 + StRoot/StGeant4Maker/StHitCollection.cxx | 449 + StRoot/StGeant4Maker/StHitCollection.h | 94 + StRoot/StGeant4Maker/StMCParticleStack.cxx | 512 + StRoot/StGeant4Maker/StMCParticleStack.h | 274 + StRoot/StGeant4Maker/StSensitiveDetector.cxx | 116 + StRoot/StGeant4Maker/StSensitiveDetector.h | 105 + StRoot/StGeant4Maker/macros/DrawHits.C | 54 + StRoot/StGeant4Maker/macros/gamma.C | 3 + StRoot/StGeant4Maker/macros/geant4star | 14 + .../StGeant4Maker/macros/geant4star-leakcheck | 10 + .../StGeant4Maker/macros/geant4star-memcheck | 9 + StRoot/StGeant4Maker/macros/geant4star.C | 347 + StRoot/StGeant4Maker/macros/initStar.C | 43 + StRoot/StGeant4Maker/macros/initStarG3.C | 149 + StRoot/StGeant4Maker/macros/muon.C | 4 + StRoot/StGeant4Maker/macros/pi0.C | 4 + StRoot/StGeant4Maker/macros/pion.C | 3 + StRoot/StGeant4Maker/macros/pythia6.C | 174 + StRoot/StGeant4Maker/macros/pythia8.C | 108 + .../macros/runGeant4Simulation.xml | 49 + StRoot/StGeant4Maker/macros/test_forward.C | 21 + .../macros/test_particle_decay.C | 47 + StRoot/StGeant4Maker/macros/test_pi0_decay.C | 34 + .../macros/test_stress_acceptance.C | 36 + StRoot/StGeant4Maker/tests/unit-test-summary | 93 + .../StGeant4Maker/tests/unit_test_btof_hits.C | 400 + .../StGeant4Maker/tests/unit_test_eem_hits.C | 295 + .../StGeant4Maker/tests/unit_test_emc_hits.C | 9817 +++++++++++++++++ .../StGeant4Maker/tests/unit_test_epd_hits.C | 203 + .../tests/unit_test_epd_response.C | 103 + .../StGeant4Maker/tests/unit_test_fcs_hits.C | 4220 +++++++ .../tests/unit_test_fcs_sampling.C | 150 + .../StGeant4Maker/tests/unit_test_fst_hits.C | 181 + .../tests/unit_test_fst_timing.C | 173 + .../tests/unit_test_kinematics.C | 183 + .../StGeant4Maker/tests/unit_test_mtd_hits.C | 1748 +++ .../tests/unit_test_mtd_response.C | 89 + .../tests/unit_test_multi_engine_emc.C | 230 + StRoot/StGeant4Maker/tests/unit_test_muons.C | 391 + .../tests/unit_test_single_engine_emc.C | 191 + .../StGeant4Maker/tests/unit_test_stg_hits.C | 190 + .../StGeant4Maker/tests/unit_test_tdm_truth.C | 309 + .../StGeant4Maker/tests/unit_test_tpc_hits.C | 427 + .../tests/unit_test_track_data_model.C | 309 + .../tests/unit_test_track_data_model_ntrack.C | 361 + StRoot/StGeant4Maker/tests/unit_tests.h | 235 + StRoot/StarGenerator/BASE/StarPrimaryMaker.h | 2 + StarVMC/StarAgmlLib/AgBlock.cxx | 1 + StarVMC/StarAgmlLib/AgMLExtension.cxx | 23 +- StarVMC/StarAgmlLib/AgMLExtension.h | 28 +- StarVMC/StarAgmlLib/AgMLStructure.h | 2 +- StarVMC/StarAgmlLib/AgModule.cxx | 21 +- StarVMC/StarAgmlLib/AgModule.h | 4 +- StarVMC/StarAgmlLib/AgPlacement.h | 3 + StarVMC/StarAgmlLib/StarTGeoStacker.cxx | 25 +- mgr/Conscript-standard | 16 + 79 files changed, 25523 insertions(+), 26 deletions(-) create mode 100644 StRoot/StGeant4Maker/.includes_for_export.flg create mode 100644 StRoot/StGeant4Maker/AgMLBTofVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLEEmcVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLEmcVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLEpdVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLFstVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLHcaVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLMtdVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLPreVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLStgVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLTpcVolumeId.cxx create mode 100644 StRoot/StGeant4Maker/AgMLTpcVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLVolumeIdFactory.h create mode 100644 StRoot/StGeant4Maker/AgMLVpdVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgMLWcaVolumeId.h create mode 100644 StRoot/StGeant4Maker/AgStarDummy.cxx create mode 100644 StRoot/StGeant4Maker/GeometryUtils.cxx create mode 100644 StRoot/StGeant4Maker/GeometryUtils.h create mode 100644 StRoot/StGeant4Maker/StGeant4Application.cxx create mode 100644 StRoot/StGeant4Maker/StGeant4Application.h create mode 100644 StRoot/StGeant4Maker/StGeant4Maker.cxx create mode 100644 StRoot/StGeant4Maker/StGeant4Maker.h create mode 100644 StRoot/StGeant4Maker/StHitCollection.cxx create mode 100644 StRoot/StGeant4Maker/StHitCollection.h create mode 100644 StRoot/StGeant4Maker/StMCParticleStack.cxx create mode 100644 StRoot/StGeant4Maker/StMCParticleStack.h create mode 100644 StRoot/StGeant4Maker/StSensitiveDetector.cxx create mode 100644 StRoot/StGeant4Maker/StSensitiveDetector.h create mode 100644 StRoot/StGeant4Maker/macros/DrawHits.C create mode 100644 StRoot/StGeant4Maker/macros/gamma.C create mode 100755 StRoot/StGeant4Maker/macros/geant4star create mode 100755 StRoot/StGeant4Maker/macros/geant4star-leakcheck create mode 100755 StRoot/StGeant4Maker/macros/geant4star-memcheck create mode 100644 StRoot/StGeant4Maker/macros/geant4star.C create mode 100644 StRoot/StGeant4Maker/macros/initStar.C create mode 100644 StRoot/StGeant4Maker/macros/initStarG3.C create mode 100644 StRoot/StGeant4Maker/macros/muon.C create mode 100644 StRoot/StGeant4Maker/macros/pi0.C create mode 100644 StRoot/StGeant4Maker/macros/pion.C create mode 100644 StRoot/StGeant4Maker/macros/pythia6.C create mode 100644 StRoot/StGeant4Maker/macros/pythia8.C create mode 100644 StRoot/StGeant4Maker/macros/runGeant4Simulation.xml create mode 100644 StRoot/StGeant4Maker/macros/test_forward.C create mode 100644 StRoot/StGeant4Maker/macros/test_particle_decay.C create mode 100644 StRoot/StGeant4Maker/macros/test_pi0_decay.C create mode 100644 StRoot/StGeant4Maker/macros/test_stress_acceptance.C create mode 100755 StRoot/StGeant4Maker/tests/unit-test-summary create mode 100644 StRoot/StGeant4Maker/tests/unit_test_btof_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_eem_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_emc_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_epd_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_epd_response.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_fcs_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_fcs_sampling.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_fst_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_fst_timing.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_kinematics.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_mtd_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_mtd_response.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_multi_engine_emc.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_muons.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_single_engine_emc.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_stg_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_tdm_truth.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_tpc_hits.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_track_data_model.C create mode 100644 StRoot/StGeant4Maker/tests/unit_test_track_data_model_ntrack.C create mode 100644 StRoot/StGeant4Maker/tests/unit_tests.h diff --git a/StRoot/StBFChain/BigFullChain.h b/StRoot/StBFChain/BigFullChain.h index 0ce20af62e6..b3c30fa42ac 100644 --- a/StRoot/StBFChain/BigFullChain.h +++ b/StRoot/StBFChain/BigFullChain.h @@ -1275,13 +1275,15 @@ Bfc_st BFC[] = { // standard chains {"------------","-----------","-----------","------------------------------------------","","","",kFALSE}, {"Generators ","-----------","-----------","------------------------------------------","","","",kFALSE}, {"------------","-----------","-----------","------------------------------------------","","","",kFALSE}, - {"stargen", "","", "gen_T,sim_T"/*+++*/, "", "libVMC.so,libStarGeneratorUtil.so,libStarGeneratorEvent.so,libStarGeneratorBase.so,libStarGeneratorFilt.so,libMathMore.so","STAR Generator BASE",false}, + {"stargen", "","", "gen_T,sim_T"/*+++*/, "", "libVMC.so,libfastjet.so,libStarGeneratorUtil.so,libStarGeneratorEvent.so,libStarGeneratorBase.so,libStarGeneratorFilt.so,libMathMore.so","STAR Generator BASE",false}, {"pythia8.1.86","","","stargen", "", "Pythia8_1_86.so", "Load Pythia 8.1.86 generator", false }, {"pythia8.2.35","","","stargen", "", "Pythia8_2_35.so", "Load Pythia 8.1.86 generator", false }, {"hijing1.383" ,"","","stargen", "", "Hijing1_383.so", "Load Hijing 1.383 generator", false }, {"kinematics" ,"","","stargen", "", "Kinematics.so", "Load STAR Particle Gun", false }, {"genreader" ,"","","stargen", "", "StarGenEventReader.so", "Load STAR Gen Event Reader", false }, + {"fastjet" ,"","","" , "", "libfastjet.so", "Load fast jet reconstruction algo", false}, + {"------------","-----------","-----------","------------------------------------------","","","",kFALSE}, {"GEANT4 Libs ","-----------","-----------","------------------------------------------","","","",kFALSE}, @@ -1292,6 +1294,9 @@ Bfc_st BFC[] = { // standard chains {"g4geant3", "", "", "", "", "libG3toG4.so", "Load g3 to g4 support", false }, {"geant4", "", "", "g4physics,g4interfaces","","","Load G4 libs", false}, + {"geant4vmc", "","", "geant4", "", "libVMC.so,libgeant4vmc.so", "Load G4 VMC libs", false}, + {"geant4mk", "","", "stargen,geant4vmc", "", "StGeant4Maker.so,StarMagField.so", "Load G4 VMC libs", false}, + {"------------","-----------","-----------","------------------------------------------","","","",kFALSE}, {"I/O Makers ","-----------","-----------","------------------------------------------","","","",kFALSE}, diff --git a/StRoot/StGeant4Maker/.includes_for_export.flg b/StRoot/StGeant4Maker/.includes_for_export.flg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/StRoot/StGeant4Maker/AgMLBTofVolumeId.h b/StRoot/StGeant4Maker/AgMLBTofVolumeId.h new file mode 100644 index 00000000000..651f0eef368 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLBTofVolumeId.h @@ -0,0 +1,38 @@ +#ifndef __AgMLBtofVolumeId_h__ +#define __AgMLBtofVolumeId_h__ + +#include +#include + +class AgMLBtofVolumeId : public AgMLVolumeId { +public: + + AgMLBtofVolumeId(){} + // Applies to btog.version = 8 with btog.choice =13 (run 13 onwards) + + virtual int id( int* numbv ) const { + + int rileft = numbv[0]; + int sector = numbv[1]; + int module = numbv[2]; + int layer = numbv[3]; + + // Adjust for GMT modules + if ( rileft==1 ) { + if ( sector== 8 ) module += 4; + if ( sector==23 ) module += 4; + } + else if ( rileft==2 ) { + if ( sector == 33 ) module += 4; + if ( sector == 48 ) module += 4; + } + + int _id = layer + 10 * (module + 100 * (sector+100*rileft) ); + + return _id; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLEEmcVolumeId.h b/StRoot/StGeant4Maker/AgMLEEmcVolumeId.h new file mode 100644 index 00000000000..b82ae0425e9 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLEEmcVolumeId.h @@ -0,0 +1,70 @@ +#ifndef __AgMLEEmcVolumeId_h__ +#define __AgMLEEmcVolumeId_h__ + +#include +#include +#include +#include +#include +#include + +#include +#include + +class AgMLEEmcVolumeId : public AgMLVolumeId { + + const int onoff = 1; + const int fillmode = 3; + const int sectormap[2][6] = { + { 4, 5, 6, 7, 8, 9}, + {10,11,12, 1, 2, 3} + }; + + +public: + + AgMLEEmcVolumeId() : AgMLVolumeId() { /* nada */ }; + + virtual int id( int* numbv ) const { + + // cd == ESCI + int rileft = onoff; + int shift = 0; + + int wheel = numbv[0]; + int section = numbv[1]; + int idx = numbv[2]; + int phi30d = sectormap[wheel-1][idx-1]; // sector number + int subsec = numbv[3]; // subsection (i.e. layer) within each section + int sublay = numbv[4]; // ??? + int phi = numbv[5]; // phibin in sector + int eta = numbv[6]; + + int depth = subsec + 3 * ( section - 1 ); + + // int volumeid = 100000*rileft + 1000*(5*(phi30d-1)+phi) + 10*eta + depth; + + int volumeid = 100000 * rileft + + 1000 * ( 5 * ( phi30d-1 ) + phi ) + + 10 * eta + + depth; + + // LOG_INFO << Form("AgML EEmc VolumdId = wheel=%i section=%i idx=%i phi30d=%i subsection=%i %i %i %i %i", + // numbv[0], + // numbv[1], + // numbv[2], + // phi30d, + // numbv[3], + // numbv[4], + // numbv[5], + // numbv[6], + // volumeid ) << endm; + + + return volumeid; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLEmcVolumeId.h b/StRoot/StGeant4Maker/AgMLEmcVolumeId.h new file mode 100644 index 00000000000..70557536977 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLEmcVolumeId.h @@ -0,0 +1,66 @@ +#ifndef __AgMLEmcVolumeId_h__ +#define __AgMLEmcVolumeId_h__ + +#include +#include +#include +#include +#include +#include + +#include +#include + +class AgMLEmcVolumeId : public AgMLVolumeId { + + const int numberOfEtaRings = 20; + +public: + + AgMLEmcVolumeId() : AgMLVolumeId() { /* nada */ }; + + virtual int id( int* numbv ) const { + + + int rileft = numbv[0]; // east barrel vs west barrel + int phi = numbv[1]; // module + int superl = numbv[2]; // before / after SMD layer + + TLorentzVector _direction(0,0,0,0); + TVirtualMC::GetMC()->TrackPosition( _direction ); + + double xg[4], xl[4]; + _direction.GetXYZT( xg ); + double pseudoRapidity = TMath::Abs(_direction.Eta()); + + // Obtain local coordinates from global coordinates + TVirtualMC::GetMC()->Gmtod( xg, xl, 1 ); + + // Calculate the eta ring and submodule + int eta_tow = ( pseudoRapidity * double(numberOfEtaRings) ) + 1.0; + int phi_sub = ( xl[1]>= 0 )? 1 : 0; // (-13,0)=0, (0,13)=1 + + // LOG_INFO << Form("eta=%f xlocal=%f %f %f | phi_sub=%i eta_tow=%i", pseudoRapidity, xl[0], xl[1], xl[2],phi_sub,eta_tow) << endm; + + int volumeid = -999; + + if ( rileft==1 ) { + phi = 60 - phi + 1; + if ( phi_sub==0 ) { + phi_sub=2; + } + } + else { + phi = 60+phi; + phi_sub = phi_sub + 1; + } + + volumeid=10000000*rileft+100000*eta_tow+100*phi+10*phi_sub+superl; + + return volumeid; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLEpdVolumeId.h b/StRoot/StGeant4Maker/AgMLEpdVolumeId.h new file mode 100644 index 00000000000..ff22ae2d18c --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLEpdVolumeId.h @@ -0,0 +1,40 @@ +#ifndef __AgMLEpdVolumeId_h__ +#define __AgMLEpdVolumeId_h__ + +#include +#include + +class AgMLEpdVolumeId : public AgMLVolumeId { +public: + + AgMLEpdVolumeId(){} + + virtual int id( int* numbv ) const { + + int epdm = numbv[0]; // 1=east, 2=west + int epss = numbv[1]; // 1 for PP1, 2 for PP2, PP-postion 1'o,2'o clock etc + int epdt = numbv[2]; // 1:T1 trap, 2:T1 Triangular, 3:T2 Thin, 4:T3 Thick + + /* + + " EPD volume_id " + " 100,000 : east or west " + " 1,000 : Position clock wise, 1 to 12 " + " 10 : Tile number 1 to 31, refer EPD Drupal page" + " 1 : 1 T1 trap or T2 thin; 0 T1 triangular or T2 thick + + */ + + int _id = 0; + _id += 100000 * epdm; + _id += 1000 * epss; + _id += 10 * ( epdt%2 + epdt/2 ); + _id += 1 * ( epdt%2 ); + + return _id; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLFstVolumeId.h b/StRoot/StGeant4Maker/AgMLFstVolumeId.h new file mode 100644 index 00000000000..4f93ddb2eb2 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLFstVolumeId.h @@ -0,0 +1,28 @@ +#ifndef __AgMLFstVolumeId_h__ +#define __AgMLFstVolumeId_h__ + +#include +#include + +class AgMLFstVolumeId : public AgMLVolumeId { +public: + + AgMLFstVolumeId(){} + + virtual int id( int* numbv ) const { + + static const int mapping[] = { 2, 3, 1 }; + + int disk = numbv[0]; + int wedge = numbv[1]; + assert( numbv[2]>0 && numbv[2]<=3 ); + int sensor = mapping[ numbv[2]-1 ]; + + + return 1000*disk + 10*wedge + sensor; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLHcaVolumeId.h b/StRoot/StGeant4Maker/AgMLHcaVolumeId.h new file mode 100644 index 00000000000..c5b5ef409a7 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLHcaVolumeId.h @@ -0,0 +1,23 @@ +#ifndef __AgMLHcaVolumeId_h__ +#define __AgMLHcaVolumeId_h__ + +#include +#include + +class AgMLHcaVolumeId : public AgMLVolumeId { +public: + + AgMLHcaVolumeId(){} + + virtual int id( int* numbv ) const { + + int mod = numbv[0]; // module + int tow = numbv[1]; // tower + + return 1000*mod + tow; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLMtdVolumeId.h b/StRoot/StGeant4Maker/AgMLMtdVolumeId.h new file mode 100644 index 00000000000..af294664b78 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLMtdVolumeId.h @@ -0,0 +1,25 @@ +#ifndef __AgMLMtdVolumeId_h__ +#define __AgMLMtdVolumeId_h__ + +#include +#include + +class AgMLMtdVolumeId : public AgMLVolumeId { +public: + + AgMLMtdVolumeId(){} + // Applies to btog.version = 8 with btog.choice =13 (run 13 onwards) + + virtual int id( int* numbv ) const { + + int sector = numbv[0]; + int module = numbv[1]; + int layer = numbv[2]; + + return 1000 * sector + 100 * module + layer; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLPreVolumeId.h b/StRoot/StGeant4Maker/AgMLPreVolumeId.h new file mode 100644 index 00000000000..87e1026a37b --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLPreVolumeId.h @@ -0,0 +1,23 @@ +#ifndef __AgMLPreVolumeId_h__ +#define __AgMLPreVolumeId_h__ + +#include +#include + +class AgMLPreVolumeId : public AgMLVolumeId { +public: + + AgMLPreVolumeId(){} + + virtual int id( int* numbv ) const { + + int layer = numbv[0]; // layer + int slat = numbv[1]; // slat + + return 1000*layer + slat; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLStgVolumeId.h b/StRoot/StGeant4Maker/AgMLStgVolumeId.h new file mode 100644 index 00000000000..d98d39679be --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLStgVolumeId.h @@ -0,0 +1,29 @@ +#ifndef __AgMLStgVolumeId_h__ +#define __AgMLStgVolumeId_h__ + +#include +#include + +class AgMLStgVolumeId : public AgMLVolumeId { + + static const int version = 2; + +public: + + AgMLStgVolumeId(){} + + virtual int id( int* numbv ) const { + + int station = (numbv[0]-1) / 4 + 1; + int chamber = (numbv[0]-1) % 4 + 1; + + if ( version == 2 ) + return 10*station + chamber; + else + return numbv[0]; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLTpcVolumeId.cxx b/StRoot/StGeant4Maker/AgMLTpcVolumeId.cxx new file mode 100644 index 00000000000..224c3d85db3 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLTpcVolumeId.cxx @@ -0,0 +1,45 @@ +#include +AgMLTpcVolumeId::AgMLTpcVolumeId() : + AgMLVolumeId(), + tpads{ + 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 40, 41, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 72, + 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 40, 41, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 72 + }, + + isdet{ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2 + } +{ + +} + + diff --git a/StRoot/StGeant4Maker/AgMLTpcVolumeId.h b/StRoot/StGeant4Maker/AgMLTpcVolumeId.h new file mode 100644 index 00000000000..6be8d489f20 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLTpcVolumeId.h @@ -0,0 +1,66 @@ +#ifndef __AgMLTpcVolumeId_h__ +#define __AgMLTpcVolumeId_h__ + +#include +#include + +class AgMLTpcVolumeId : public AgMLVolumeId { +public: + + AgMLTpcVolumeId(); + + int tpads[76*2]; + int isdet[76*2]; + + virtual int id( int* numbv ) const { + + int tpgv = numbv[0]; // tpc gas volume 1, 2 + int tpss = numbv[1]; // tpc super sector 1-12 + int tpad = numbv[2]; // tpc padrow + + int sector = tpss + 12 * (tpgv-1); // sector 1-24 + + int det = isdet[tpad-1]; // memcheck flags invalid read of size 4 + int pad = tpads[tpad-1]; + + int volumeid = 100000*det + 100*sector + pad; + + return volumeid; + + }; +}; + +class AgMLTpcVolumeIdTest__ : public AgMLTpcVolumeId { +public: + + AgMLTpcVolumeIdTest__() : AgMLTpcVolumeId(){ }; + + virtual int id( int* numbv ) const { + + int tpgv = numbv[0]; // tpc gas volume 1, 2 + assert(tpgv==1 || tpgv==2 ); + + int tpss = numbv[1]; // tpc super sector 1-12 + assert( tpss>=1 && tpss <=12 ); + + int tpad = numbv[2]; // tpc padrow + assert( tpad>=1 && tpad <= 76*2 ); + + int sector = tpss + 12 * (tpgv-1); // sector 1-24 + assert( sector >= 1 && sector <= 24 ); + + int det = isdet[tpad-1]; // memcheck flags invalid read of size 4 + assert( det>=0 && det<=2 ); + + int pad = tpads[tpad-1]; + assert(pad>=1 && pad<=72 ); + + int volumeid = 100000*det + 100*sector + pad; + + return volumeid; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLVolumeIdFactory.h b/StRoot/StGeant4Maker/AgMLVolumeIdFactory.h new file mode 100644 index 00000000000..eac3b5b6186 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLVolumeIdFactory.h @@ -0,0 +1,66 @@ +#ifndef __AgMLVolumeIdFactory_h__ +#define __AgMLVolumeIdFactory_h__ + +#include "TString.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class AgMLVolumeIdFactory { +public: + + // TODO: Identify what the test flag is for and (probably) remove it + static AgMLVolumeId* Create( TString name, bool test=false ) { + + static std::map VolumeId; + + AgMLVolumeId* id = VolumeId[name]; + if ( 0==id ) { + if ( name == "TPAD" && test==false ) + id = new AgMLTpcVolumeId; + else if ( name == "TPAD" && test==true ) + id = new AgMLTpcVolumeIdTest__; + else if ( name == "FTUS" ) + id = new AgMLFstVolumeId; + else if ( name == "TGCG" ) + id = new AgMLStgVolumeId; + else if ( name == "WSCI" ) + id = new AgMLWcaVolumeId; + else if ( name == "HSCI" ) + id = new AgMLHcaVolumeId; + else if ( name == "PSCI" ) + id = new AgMLPreVolumeId; + else if ( name == "EPDT" ) + id = new AgMLEpdVolumeId; + else if ( name == "CSCI" ) + id = new AgMLEmcVolumeId; + else if ( name == "ESCI" ) + id = new AgMLEEmcVolumeId; + else if ( name == "BRSG" ) + id = new AgMLBtofVolumeId; + else if ( name == "MIGG" ) + id = new AgMLMtdVolumeId; + else if ( name == "VRAD" ) + id = new AgMLVpdVolumeId; + VolumeId[name] = id; + } + + return id; + + }; + +}; + +#endif diff --git a/StRoot/StGeant4Maker/AgMLVpdVolumeId.h b/StRoot/StGeant4Maker/AgMLVpdVolumeId.h new file mode 100644 index 00000000000..c3bd4cdac40 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLVpdVolumeId.h @@ -0,0 +1,30 @@ +#ifndef __AgMLVpdVolumeId_h__ +#define __AgMLVpdVolumeId_h__ + +#include +#include + +class AgMLVpdVolumeId : public AgMLVolumeId { +public: + + AgMLVpdVolumeId(){} + + static const int version = 2; // version is hard coded to the dev2021 geometry + + virtual int id( int* numbv ) const { + + int idx = 0; + + int rileft = numbv[idx++]; + int inout = (1==version) ? numbv[idx++] : 0; + int sector = numbv[idx++]; + + int _id = 1000 * rileft + 100*inout + sector; + + return _id; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgMLWcaVolumeId.h b/StRoot/StGeant4Maker/AgMLWcaVolumeId.h new file mode 100644 index 00000000000..fe80933b500 --- /dev/null +++ b/StRoot/StGeant4Maker/AgMLWcaVolumeId.h @@ -0,0 +1,23 @@ +#ifndef __AgMLWcaVolumeId_h__ +#define __AgMLWcaVolumeId_h__ + +#include +#include + +class AgMLWcaVolumeId : public AgMLVolumeId { +public: + + AgMLWcaVolumeId(){} + + virtual int id( int* numbv ) const { + + int mod = numbv[0]; // module + int tow = numbv[1]; // tower + + return 1000*mod + tow; + + }; +}; + + +#endif diff --git a/StRoot/StGeant4Maker/AgStarDummy.cxx b/StRoot/StGeant4Maker/AgStarDummy.cxx new file mode 100644 index 00000000000..d76514d2d0c --- /dev/null +++ b/StRoot/StGeant4Maker/AgStarDummy.cxx @@ -0,0 +1,10 @@ +// Provide dummy functions expected from starsim +#include "StarCallf77.h" + +extern "C" { + void type_of_call agsvert_( float *vertex, int *nb, int *nt, float *ubuf, int *nu, int *nv ) { } + void type_of_call agskine_( float *plab, int *ip, int *nv, float *ubuf, int *nb, int *nt ) { } + void type_of_call gsvert_( float *, int &, int &, float *, int &, int &){ } + void type_of_call gskine_( float *, int &, int &, float *, int &, int &){ } + // void type_of_call gcomad_(DEFCHARD, int*& DEFCHARL){ } +}; diff --git a/StRoot/StGeant4Maker/GeometryUtils.cxx b/StRoot/StGeant4Maker/GeometryUtils.cxx new file mode 100644 index 00000000000..97ac5fa48c1 --- /dev/null +++ b/StRoot/StGeant4Maker/GeometryUtils.cxx @@ -0,0 +1,26 @@ +#include + +AgMLExtension* getExtension( TGeoNode* n ) { + + // + // Extension classes may be attached to the node or to the volume + // + AgMLExtension* agmlext = dynamic_cast( n->GetUserExtension() ); + if ( 0==agmlext ) agmlext = getExtension ( n->GetVolume() ); + + // + // If the extension is still missing, inherit from the parent volume + // + if ( 0==agmlext ) agmlext = getExtension( n->GetMotherVolume() ); + + + // + // If it is still missing, its the user's problem now + // + return agmlext; + +} + +AgMLExtension* getExtension( TGeoVolume* v ) { + return AgMLExtension::get(v); +} diff --git a/StRoot/StGeant4Maker/GeometryUtils.h b/StRoot/StGeant4Maker/GeometryUtils.h new file mode 100644 index 00000000000..6de7bcdb0ea --- /dev/null +++ b/StRoot/StGeant4Maker/GeometryUtils.h @@ -0,0 +1,11 @@ +#ifndef __GeometryUtils_h__ +#define __GeometryUtils_h__ + +#include +#include +#include + +AgMLExtension* getExtension( TGeoNode* n ); +AgMLExtension* getExtension( TGeoVolume* v ); + +#endif diff --git a/StRoot/StGeant4Maker/StGeant4Application.cxx b/StRoot/StGeant4Maker/StGeant4Application.cxx new file mode 100644 index 00000000000..f38c56264dd --- /dev/null +++ b/StRoot/StGeant4Maker/StGeant4Application.cxx @@ -0,0 +1 @@ +// Really empty... all functionality in StGeant4Maker diff --git a/StRoot/StGeant4Maker/StGeant4Application.h b/StRoot/StGeant4Maker/StGeant4Application.h new file mode 100644 index 00000000000..ae7bdbc5eae --- /dev/null +++ b/StRoot/StGeant4Maker/StGeant4Application.h @@ -0,0 +1,43 @@ +#ifndef __StGeant4Application_h__ +#define __StGeant4Application_h__ + +#include "TVirtualMCApplication.h" + +class StGeant4Application : public TVirtualMCApplication { +public: + StGeant4Application( const char* name="g4application", const char* title="Geant4 Application" ); + virtual ~StGeant4Application(){ /* nada */ }; + + static StGeant4Application* Instance(); + + void InitMC ( const char* macro ); + void RunMC ( const int nevents ); + + virtual void ConstructGeometry(); + virtual void ConstructOpGeometry(); + virtual void InitGeometry(); + virtual void GeneratePrimaries(); + virtual void BeginEvent(); + virtual void BeginPrimary(); + virtual void PreTrack(); + virtual void Stepping(); + virtual void PostTrack(); + virtual void FinishPrimary(); + virtual void FinishEvent(); + + void SetVerboseLevel(int verboseLevel); + + private: + // data members + int fEventNo; ///< Event counter + int fGammaCounter; ///< Optical photons counter + TMCVerbose fVerbose; ///< VMC verbose helper + // Ex03MCStack* fStack; ///< VMC stack + TVirtualMagField* fMagField; ///< The magnetic field + // Ex06DetectorConstruction* fDetConstruction; ///< Dector construction + // Ex06PrimaryGenerator* fPrimaryGenerator;///< Primary generator + // Bool_t fOldGeometry; ///< Option for geometry definition + +}; + +#endif diff --git a/StRoot/StGeant4Maker/StGeant4Maker.cxx b/StRoot/StGeant4Maker/StGeant4Maker.cxx new file mode 100644 index 00000000000..bad2c25de6f --- /dev/null +++ b/StRoot/StGeant4Maker/StGeant4Maker.cxx @@ -0,0 +1,1539 @@ +#include "StGeant4Maker.h" +//________________________________________________________________________________________________ +#include "StMessMgr.h" +//________________________________________________________________________________________________ +#include "StarMagField.h" +#include "StMCParticleStack.h" +#include "TSystem.h" +#include "StBFChain.h" +#include "TInterpreter.h" +#include "TGeoManager.h" +#include "StarVMC/StarAgmlLib/StarAgmlStacker.h" +#include "StarGenerator/BASE/StarPrimaryMaker.h" +#include "StarGenerator/BASE/StarParticleStack.h" +#include "StarGenerator/UTIL/StarParticleData.h" +#include "StarGenerator/UTIL/StarRandom.h" + +#include "TString.h" +#include "StSensitiveDetector.h" + +#include + +#include "StarVMC/StarAgmlLib/AgMLExtension.h" +#include "GeometryUtils.h" +#include "TString.h" + +#include "StChain/StEvtHddr.h" +#include "TH2F.h" + +#include + +//_______________________________________________________________________________________________ +#include +//_______________________________________________________________________________________________ +#include "TMCManager.h" +//________________________________________________________________________________________________ +#include "TGeant4.h" +#include "TG4RunManager.h" +#include "TG4RunConfiguration.h" +#include "TGeant3TGeo.h" +//________________________________________________________________________________________________ +#include "tables/St_g2t_event_Table.h" +#include "tables/St_g2t_vertex_Table.h" +#include "tables/St_g2t_track_Table.h" +//________________________________________________________________________________________________ +#include "g2t/St_g2t_tpc_Module.h" +#include "g2t/St_g2t_hca_Module.h" +#include "g2t/St_g2t_wca_Module.h" +#include "g2t/St_g2t_pre_Module.h" +#include "g2t/St_g2t_fts_Module.h" +#include "g2t/St_g2t_stg_Module.h" +#include "g2t/St_g2t_epd_Module.h" +#include "g2t/St_g2t_tfr_Module.h" +#include "g2t/St_g2t_mtd_Module.h" +#include "g2t/St_g2t_vpd_Module.h" +//________________________________________________________________________________________________ +#include +#include +//________________________________________________________________________________________________ + +// Functors used to copy the hits from the sensitive detector hit collections into the g2t tables. +// There's an explitive-load of boilerplate in these things + +struct SD2Table_TPC { + void operator()( StSensitiveDetector* sd, St_g2t_tpc_hit* table, St_g2t_track* track ) { + // Retrieve the hit collection + StTrackerHitCollection* collection = (StTrackerHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_tpc_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_tpc_hit_st)); + + g2t_hit.id = hit->id; + + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + g2t_hit.ds = hit->ds; + for ( int i=0; i<3; i++ ) { + g2t_hit.p[i] = 0.5 * ( hit->momentum_in[i] + hit->momentum_out[i] ); + g2t_hit.x[i] = 0.5 * ( hit->position_in[i] + hit->position_out[i] ); + } + g2t_hit.tof = 0.5 * ( hit->position_in[3] + hit->position_out[3] ); + g2t_hit.length = hit->length; + g2t_hit.lgam = hit->lgam; + + + + /* + these are used downstream by the slow simulator (and should not be filled here) + + g2t_hit.adc = ...; + g2t_hit.pad = ...; + g2t_hit.timebucket = ...; + g2t_hit.np = ...; // number of primary electrons + + */ + + int idtruth = hit->idtruth; + g2t_track_st* g2t_track = (g2t_track_st*)track->At(idtruth-1); + + g2t_hit.next_tr_hit_p = g2t_track->hit_tpc_p; // store next hit on the linked list + g2t_track->hit_tpc_p = hit->id; // this hit becomes the head of the linked list + + g2t_track->n_tpc_hit++; + + // Add hit to the table + table -> AddAt( &g2t_hit ); + + } + // TODO: increment hit count on track + } +} sd2table_tpc; +struct SD2Table_EPD { + void operator()( StSensitiveDetector* sd, St_g2t_epd_hit* table, St_g2t_track* track ) { + // Retrieve the hit collection + StTrackerHitCollection* collection = (StTrackerHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_epd_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_epd_hit_st)); + + g2t_hit.id = hit->id; + // TODO: add pointer to next hit on the track + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + g2t_hit.ds = hit->ds; + for ( int i=0; i<3; i++ ) { + g2t_hit.p[i] = 0.5 * ( hit->momentum_in[i] + hit->momentum_out[i] ); + g2t_hit.x[i] = 0.5 * ( hit->position_in[i] + hit->position_out[i] ); + } + g2t_hit.tof = 0.5 * ( hit->position_in[3] + hit->position_out[3] ); + + table -> AddAt( &g2t_hit ); + + int idtruth = hit->idtruth; + g2t_track_st* trk = (g2t_track_st*)track->At(idtruth-1); + trk->n_epd_hit++; + + } + + } +} sd2table_epd; +// Copy to sTGC and FST structures +struct SD2Table_STGC { + void operator()( StSensitiveDetector* sd, St_g2t_fts_hit* table, St_g2t_track* track ) { + // Retrieve the hit collection + StTrackerHitCollection* collection = (StTrackerHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_fts_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_fts_hit_st)); + + g2t_hit.id = hit->id; + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + g2t_hit.ds = hit->ds; + for ( int i=0; i<3; i++ ) { + g2t_hit.p[i] = 0.5 * ( hit->momentum_in[i] + hit->momentum_out[i] ); + g2t_hit.x[i] = 0.5 * ( hit->position_in[i] + hit->position_out[i] ); + } + g2t_hit.tof = 0.5 * ( hit->position_in[3] + hit->position_out[3] ); + + int idtruth = hit->idtruth; + g2t_track_st* g2t_track = (g2t_track_st*)track->At(idtruth-1); + + g2t_hit.next_tr_hit_p = g2t_track->hit_stg_p; // store next hit on the linked list + g2t_track->hit_stg_p = hit->id; // this hit becomes the head of the linked list + g2t_track->n_stg_hit++; + + table -> AddAt( &g2t_hit ); + + } + } +} sd2table_stgc; +struct SD2Table_FST { + void operator()( StSensitiveDetector* sd, St_g2t_fts_hit* table, St_g2t_track* track ) { + // Retrieve the hit collection + StTrackerHitCollection* collection = (StTrackerHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_fts_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_fts_hit_st)); + + g2t_hit.id = hit->id; + // TODO: add pointer to next hit on the track + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + g2t_hit.ds = hit->ds; + for ( int i=0; i<3; i++ ) { + g2t_hit.p[i] = 0.5 * ( hit->momentum_in[i] + hit->momentum_out[i] ); + g2t_hit.x[i] = 0.5 * ( hit->position_in[i] + hit->position_out[i] ); + } + g2t_hit.tof = 0.5 * ( hit->position_in[3] + hit->position_out[3] ); + + int idtruth = hit->idtruth; + g2t_track_st* g2t_track = (g2t_track_st*)track->At(idtruth-1); + + g2t_hit.next_tr_hit_p = g2t_track->hit_fts_p; // store next hit on the linked list + g2t_track->hit_fts_p = hit->id; // this hit becomes the head of the linked list + g2t_track->n_fts_hit++; + + table -> AddAt( &g2t_hit ); + + } + } +} sd2table_fst; + +// Generic EMC copy (no increment on track hits) +struct SD2Table_EMC { + void operator()( StSensitiveDetector* sd, St_g2t_emc_hit* table, St_g2t_track* track ) { + + TString sdname = sd->GetName(); + + // Retrieve the hit collection + StCalorimeterHitCollection* collection = (StCalorimeterHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_emc_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_emc_hit_st)); + + g2t_hit.id = hit->id; + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + g2t_hit.x = hit->position_in[0]; + g2t_hit.y = hit->position_in[1]; + g2t_hit.z = hit->position_in[2]; + + table -> AddAt( &g2t_hit ); + + int idtruth = hit->idtruth; + g2t_track_st* trk = (g2t_track_st*)track->At(idtruth-1); + + if ( sdname == "CSCI" ) + trk->n_emc_hit++; + else if ( sdname == "ESCI" ) + trk->n_eem_hit++; + else if ( sdname == "PSCI" ) + trk->n_pre_hit++; + else if ( sdname == "WSCI" ) + trk->n_wca_hit++; + else if ( sdname == "HSCI" ) + trk->n_hca_hit++; + } + } +} sd2table_emc; + +struct SD2Table_HCA { + void operator()( StSensitiveDetector* sd, St_g2t_hca_hit* table, St_g2t_track* track ) { + + TString sdname = sd->GetName(); + + // Retrieve the hit collection + StCalorimeterHitCollection* collection = (StCalorimeterHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_hca_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_hca_hit_st)); + + g2t_hit.id = hit->id; + // TODO: add pointer to next hit on the track + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + if ( hit->user.size()>=1 ) g2t_hit.deA = hit->user[0]; else g2t_hit.deA = -1; + if ( hit->user.size()>=2 ) g2t_hit.deB = hit->user[1]; else g2t_hit.deB = -2; + if ( hit->user.size()>=3 ) g2t_hit.deC = hit->user[2]; else g2t_hit.deC = -3; + if ( hit->user.size()>=4 ) g2t_hit.deD = hit->user[3]; else g2t_hit.deD = -4; + g2t_hit.x = hit->position_in[0]; + g2t_hit.y = hit->position_in[1]; + g2t_hit.z = hit->position_in[2]; + + table -> AddAt( &g2t_hit ); + + int idtruth = hit->idtruth; + g2t_track_st* trk = (g2t_track_st*)track->At(idtruth-1); + + trk->n_hca_hit++; + + } + } +} sd2table_hca; + + +struct SD2Table_CTF { + void operator()( StSensitiveDetector* sd, St_g2t_ctf_hit* table, St_g2t_track* track ) { + + TString sdname = sd->GetName(); + + // Retrieve the hit collection + StTrackerHitCollection* collection = (StTrackerHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_ctf_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_ctf_hit_st)); + + g2t_hit.id = hit->id; + // TODO: add pointer to next hit on the track + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + g2t_hit.ds = hit->ds; + + g2t_hit.x[0] = (hit->position_in[0] + hit->position_out[0]) * 0.5; + g2t_hit.x[1] = (hit->position_in[1] + hit->position_out[1]) * 0.5; + g2t_hit.x[2] = (hit->position_in[2] + hit->position_out[2]) * 0.5; + g2t_hit.tof = (hit->position_in[3] + hit->position_out[3]) * 0.5; + g2t_hit.p[0] = (hit->momentum_in[0] + hit->momentum_out[0]) * 0.5; + g2t_hit.p[1] = (hit->momentum_in[1] + hit->momentum_out[1]) * 0.5; + g2t_hit.p[2] = (hit->momentum_in[2] + hit->momentum_out[2]) * 0.5; + g2t_hit.s_track = hit->length; + + table -> AddAt( &g2t_hit ); + + int idtruth = hit->idtruth; + g2t_track_st* trk = (g2t_track_st*)track->At(idtruth-1); + + trk->n_tof_hit++; + + } + } +} sd2table_ctf; +struct SD2Table_VPD { + void operator()( StSensitiveDetector* sd, St_g2t_vpd_hit* table, St_g2t_track* track ) { + + TString sdname = sd->GetName(); + + // Retrieve the hit collection + StTrackerHitCollection* collection = (StTrackerHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_vpd_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_vpd_hit_st)); + + g2t_hit.id = hit->id; + // TODO: add pointer to next hit on the track + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + g2t_hit.ds = hit->ds; + + g2t_hit.x[0] = (hit->position_in[0] + hit->position_out[0]) * 0.5; + g2t_hit.x[1] = (hit->position_in[1] + hit->position_out[1]) * 0.5; + g2t_hit.x[2] = (hit->position_in[2] + hit->position_out[2]) * 0.5; + g2t_hit.tof = (hit->position_in[3] + hit->position_out[3]) * 0.5; + g2t_hit.p[0] = (hit->momentum_in[0] + hit->momentum_out[0]) * 0.5; + g2t_hit.p[1] = (hit->momentum_in[1] + hit->momentum_out[1]) * 0.5; + g2t_hit.p[2] = (hit->momentum_in[2] + hit->momentum_out[2]) * 0.5; + g2t_hit.s_track = hit->length; + + table -> AddAt( &g2t_hit ); + + int idtruth = hit->idtruth; + g2t_track_st* trk = (g2t_track_st*)track->At(idtruth-1); + + trk->n_vpd_hit++; + + } + } +} sd2table_vpd; +struct SD2Table_MTD { + void operator()( StSensitiveDetector* sd, St_g2t_mtd_hit* table, St_g2t_track* track ) { + + TString sdname = sd->GetName(); + + // Retrieve the hit collection + StTrackerHitCollection* collection = (StTrackerHitCollection *)sd->hits(); + // Iterate over all hits + for ( auto hit : collection->hits() ) { + + g2t_mtd_hit_st g2t_hit; memset(&g2t_hit,0,sizeof(g2t_mtd_hit_st)); + + g2t_hit.id = hit->id; + // TODO: add pointer to next hit on the track + g2t_hit.track_p = hit->idtruth; + g2t_hit.volume_id = hit->volId; + g2t_hit.de = hit->de; + g2t_hit.ds = hit->ds; + + g2t_hit.xglobal[0] = (hit->position_in[0] + hit->position_out[0]) * 0.5; + g2t_hit.xglobal[1] = (hit->position_in[1] + hit->position_out[1]) * 0.5; + g2t_hit.xglobal[2] = (hit->position_in[2] + hit->position_out[2]) * 0.5; + + g2t_hit.tof = (hit->position_in[3] + hit->position_out[3]) * 0.5; + g2t_hit.p[0] = (hit->momentum_in[0] + hit->momentum_out[0]) * 0.5; + g2t_hit.p[1] = (hit->momentum_in[1] + hit->momentum_out[1]) * 0.5; + g2t_hit.p[2] = (hit->momentum_in[2] + hit->momentum_out[2]) * 0.5; + g2t_hit.s_track = hit->length; + + table -> AddAt( &g2t_hit ); + + int idtruth = hit->idtruth; + g2t_track_st* trk = (g2t_track_st*)track->At(idtruth-1); + + trk->n_mtd_hit++; + + } + } +} sd2table_mtd; + +//________________________________________________________________________________________________ +TGeant4* gG4 = 0; +TGeant3TGeo* gG3 = 0; + +// Function to process one event +std::function trigger; + +//________________________________________________________________________________________________ +// Pointer to the maker so we can forward VMC calls there +static StGeant4Maker* _g4maker = 0; +//________________________________________________________________________________________________ +StarParticleData &particleData = StarParticleData::instance(); +//________________________________________________________________________________________________ +StarVMCApplication::StarVMCApplication( const Char_t *name, const Char_t *title, double zmax, double rmax, std::string multi, StMCParticleStack* stack ) : + TVirtualMCApplication(name,title),mZmax(zmax),mRmax(rmax),mMulti( multi=="multi" ) +{ + + mMCStack = stack; + + if ( mMulti && stack ) { + + LOG_INFO << "VMC Application Initialized for Multi-engine Run" << endm; + + RequestMCManager(); + fMCManager->SetUserStack(stack); + + } + +} +//________________________________________________________________________________________________ +void StGeant4Maker::PrintOptions( const char* opts ) { + if ( 0==opts ) { + + std::cout << std::endl << std::endl; + for ( auto o : mCmdOptions ) { + + std::cout << o.name + << " value=" << SAttr(o.name.c_str()) << std::endl + << " " << o.help << std::endl; + + + } + std::cout << std::endl << std::endl; + + } +} +//________________________________________________________________________________________________ +StGeant4Maker::StGeant4Maker( const char* nm ) : + StMaker(nm), + mCmdOptions(), + mVmcApplication ( NULL ), + mGeomPath ( "./StarDb/AgMLGeometry:$STAR/StarDb/AgMLGeometry" ), + mStarField ( NULL ), + mMCStack ( new StMCParticleStack( "MCstack" ) ), + mMagfield ( NULL ), + mRunConfig ( NULL ), + mCurrentNode (0), + mPreviousNode (0), + mCurrentVolume (0), + mPreviousVolume (0), + mCurrentTrackingRegion(2), + mPreviousTrackingRegion(2), + acurr(0),aprev(0), + mEventHeader(0), + mDefaultEngine(0) +{ + + + LOG_INFO << "Geant4Maker configuration" << endm; + LOG_INFO << "Each option can be overridden using --option=value" << endm; + + + // Setup default attributes + // SetAttr( "G4Opt:Nav", "geomRoot" );// Default uses only possibility for us... ROOT geom with ROOT nav. No VGM to convert to G4 geometry. + // Possibilities geomVMCtoGeant4 geomVMCtoRoot geomRoot geomRootToGeant4 geomGeant4 + SetAttr( "G4VmcOpt:Nav", "geomVMCtoRoot" ); + SetAttr( "G4VmcOpt:Name", "Geant4" ); + SetAttr( "G4VmcOpt:Title", "The Geant4 Monte Carlo" ); + AddOption( "G4VmcOpt:Phys", "FTFP_BERT", "Geant 4 physics list" ); // default physics list + // SetAttr( "G4VmcOpt:Process", "stepLimiter+specialCuts" ); // special process + SetAttr( "G4VmcOpt:Process", "stepLimiter+specialControls+specialCuts+stackPopper" ); // special process + // SetAttr( "G4VmcOpt:Process", "stepLimiter+stackPopper" ); // special process + + SetAttr("G3VmcOpt:Name", "GEANT3" ); + SetAttr("G3VmcOpt:nwgeant", 0 ); + + AddOption( "AgMLOpt:TopVolume", "HALL", "Name of the top-level volume" ); + + AddOption( "Stepping:Punchout:Stop", 1, "Punchout action: 0=no action, 1=track stopped, 2=track stopped and re-injected" ); + AddOption( "Stepping:Punchout:Rmin", 223.49, "Min radius applied to punchout logic" ); + AddOption( "Stepping:Punchout:Zmin", 268.75, "Min Z applied to punchout logic" ); + AddOption( "Random:G4", 12345, "Sets the Random number seed"); + AddOption( "field", -5.0, "Sets the STAR magnetic field [kG]" ); + + AddOption( "Application:Zmax", DBL_MAX, "Universe maximum z" ); + AddOption( "Application:Rmax", DBL_MAX, "Universe maximum radius" ); + + SetAttr("Scoring:Transit",0); + AddOption("Scoring:Rmax",450.0, "Maxium secondary production radius to enter truth tables" ); + AddOption("Scoring:Zmax",2000.0, "Maximum secondary production z to enter truth tables"); + AddOption("Scoring:Emin",0.01, "Minimum secondary energy to enter truth tables"); + + AddOption("vertex:x",0.0, "Primary vertex x [cm]"); + AddOption("vertex:y",0.0, "Primary vertex y [cm]"); + AddOption("vertex:z",0.0, "Primary vertex z [cm]"); + AddOption("vertex:sigmax",0.0, "Primary vertex width [cm]"); + AddOption("vertex:sigmay",0.0, "Primary vertex width [cm]"); + AddOption("vertex:sigmaz",0.0, "Primary vertex width [cm]"); + + + AddOption( "runnumber", 1, "Run number" ); + + + // Setup default cuts + AddOption("CUTGAM", 0.001, "Minimum photon energy for track propagation"); + AddOption("CUTELE", 0.001, "Minimum electron energy for track propagation" ); + AddOption("CUTHAD", 0.01, "Minimum charged hadron energy for track propagation"); + AddOption("CUTNEU", 0.01, "Minimum neutral hadron energy for track propagation"); + AddOption("CUTMUO", 0.01, "Minimum muon energy for track propagation"); + AddOption("BCUTE", /* R 'Cut for electron brems.' D=*/ 0.0001, "Cut for electron brem" ); + AddOption("BCUTM", /* R 'Cut for muon brems.' D=-1.*/ 0.0001, "Cut for muon brem" ); + AddOption("DCUTE", /* R 'Cut for electron delta-rays' D=*/ 0.0001, "Cut for electron delta rays" ); + AddOption("DCUTM", /* R 'Cut for muon delta-rays' D=-1.*/ 0.0001, "Cut for muon delta rays" ); + AddOption("PPCUTM", /* R 'Cut for e+e- pairs by muons' D=0.01*/ 0.01, "Cut for e+e- production by muons" ); + AddOption("TOFMAX", /* R 'Time of flight cut' D=*/ 1.E+10, "Maximum time-of-flight for tracks" ); + + // Setup default physics + AddOption("PAIR", 1, "Enable/disable pair production"); + AddOption("COMP", 1, "Enable/disable compton scattering" ); + AddOption("PHOT", 1, "Enable/diable photoelectric effect" ); + AddOption("PFIS", 1, "Enable/disable photo fission" ); + AddOption("DRAY", 1, "Enable/disable delta rays"); + AddOption("ANNI", 1, "Enable/disable positron annihilation"); + AddOption("BREM", 1, "Enable/disable bremstrahlung"); + AddOption("HADR", 1, "Enable/disable hadronic interactions"); + AddOption("MUNU", 1, "Enable/disable muon-nucleus interactions"); + AddOption("DCAY", 1, "Enable/disable decays"); + AddOption("LOSS", 2, "Energy loss mode" ); + AddOption("MULS", 1, "Multiple scattering"); + AddOption("CKOV", 1, "Cherenkov radiation"); + AddOption("RAYL", 1, "Rayleigh scattering"); + AddOption("LABS", 1, "Absorption of ckov photons"); + AddOption("SYNC", 1, "Synchrotron radiation"); + + // Application defaults to single engine mode with Geant4 + AddOption("application:engine","G4","Application mode: G3=GEANT3, G4=Geant4, multi=mixed G3/G4 mode with defaults below"); + + AddOption("all:engine", "G3", "In multi-engine mode, selects the default engine for all subsystems" ); // default engine in multi-engine mode is G3 + AddOption("NAME:engine", "XX", "Specifies the physics engine (XX=G3 or XX=G4) for all volumes defined in NAMEGeo"); + AddOption("wcal:engine", "G4", "Default engine for all volumes defined in WcalGeo" ); // Forward EMC defaults to G4 + AddOption("hcal:engine", "G4", "Default engine for all volumes defined in HcalGeo" ); // Forward hcal defaults to G4 + + + + // Naughty + _g4maker = this; // Provide a global pointer to the G4 maker + + PrintOptions(); + +} +//________________________________________________________________________________________________ +int StGeant4Maker::Init() { + + InitGeom(); + + mVmcApplication = new StarVMCApplication("g4star","STAR G4/VMC",DAttr("Application:Zmax"),DAttr("Application:Rmax"), SAttr("application:engine"), mMCStack ); + + const bool specialStacking = false; + const bool multiThreaded = false; + mRunConfig = new TG4RunConfiguration( SAttr("G4VmcOpt:Nav"), SAttr("G4VmcOpt:Phys" ), SAttr("G4VmcOpt:Process"), specialStacking, multiThreaded ); + + AddObj( mVmcApplication, ".const", 0 ); // Register VMC application + + if ( 0==std::strcmp( SAttr("application:engine"), "G3") || 0==std::strcmp( SAttr("application:engine"), "multi") ) { + gG3 = new TGeant3TGeo(SAttr("G3VmcOpt:Name"), IAttr("G3VmcOpt:nwgeant" ) ); // ID = 0 in multi engine + LOG_INFO << "Created GEANT3 instance" << gG3->GetName() << endm; + } + + if ( 0==std::strcmp( SAttr("application:engine"), "G4") || 0==std::strcmp( SAttr("application:engine"), "multi") ) { + gG4 = new TGeant4(SAttr("G4VmcOpt:Name"), SAttr("G4VmcOpt:Title") ,mRunConfig); // ID = 1 in multi engine + LOG_INFO << "Created Geant 4 instance " << gG4->GetName() << endm; + } + + if ( gG4 ) AddObj( gG4, ".const", 0 ); + if ( gG3 ) AddObj( gG3, ".const", 0 ); + + bool multimode = gG3 && gG4; + + if ( multimode ) { + LOG_INFO << "Application will run both G3 and G4 physics engines, with default as "<< SAttr("all:physics") << endm; + // Verify that G3 and G4 registered themselves with the manager + auto* mgr = TMCManager::Instance(); + if ( mgr ) { + std::vector engines; + mgr->GetEngines(engines); + for ( auto* mc : engines ) { + mc->Print(); + } + } + } + + // + // Create the function which processes a single event + // + + trigger = [](){ std::cout << "StGeant4Maker::trigger warning. No trigger function defined. No events produced." << std::endl; } ; + if ( gG3 || gG4 ) { + if ( 0==std::strcmp( SAttr("application:engine"), "G4" ) ) { + trigger = []() { gG4->ProcessRun(1); } ; + } + + else if ( 0==std::strcmp( SAttr("application:engine"), "G3" ) ) { + trigger = []() { gG3->ProcessRun(1); } ; + } + + else if ( 0==std::strcmp( SAttr("application:engine"), "multi" ) ) { + trigger = [](){ TMCManager::Instance()->Run(1); } ; + } + } + + mMagfield = new StarMagFieldAdaptor(/*nada*/); + + auto SetDefaultCuts = [this](TVirtualMC* mc) { + mc->SetCut( "CUTGAM", DAttr("cutgam") ); + mc->SetCut( "CUTELE", DAttr("cutele") ); + mc->SetCut( "CUTHAD", DAttr("cuthad") ); + mc->SetCut( "CUTNEU", DAttr("cutneu") ); + mc->SetCut( "CUTMUO", DAttr("cutmuo") ); + mc->SetCut( "BCUTE" , DAttr("bcute") ); + mc->SetCut( "DCUTE" , DAttr("dcute") ); + mc->SetCut( "BCUTM" , DAttr("bcutm") ); + mc->SetCut( "DCUTM" , DAttr("dcutm") ); + }; + auto SetDefaultProcesses = [this](TVirtualMC* mc) { + mc->SetProcess("PAIR", IAttr("PAIR")); + mc->SetProcess("COMP", IAttr("COMP")); + mc->SetProcess("PHOT", IAttr("PHOT")); + mc->SetProcess("PFIS", IAttr("PFIS")); + mc->SetProcess("DRAY", IAttr("DRAY")); + mc->SetProcess("ANNI", IAttr("ANNI")); + mc->SetProcess("BREM", IAttr("BREM")); + mc->SetProcess("HADR", IAttr("HADR")); + mc->SetProcess("MUNU", IAttr("MUNU")); + mc->SetProcess("DCAY", IAttr("DCAY")); + mc->SetProcess("LOSS", IAttr("LOSS")); + mc->SetProcess("MULS", IAttr("MULS")); + mc->SetProcess("CKOV", IAttr("CKOV")); + mc->SetProcess("RAYL", IAttr("RAYL")); + mc->SetProcess("LABS", IAttr("LABS")); + mc->SetProcess("SYNC", IAttr("SYNC")); + }; + auto SetFieldAndGeometry = [this](TVirtualMC* mc) { + mc->SetMagField( mMagfield ); + mc->SetRootGeometry(); + }; + auto SetStack = [this,multimode](TVirtualMC* mc) { + if ( 0==multimode ) mc->SetStack(mMCStack); + }; + auto InitializeMC = [SetDefaultCuts,SetDefaultProcesses,SetFieldAndGeometry,SetStack](TVirtualMC* mc) { + SetDefaultCuts(mc); + SetDefaultProcesses(mc); + SetFieldAndGeometry(mc); + SetStack(mc); + mc->Init(); + mc->BuildPhysics(); + }; + + // Multi-engine initialization + if ( 0==std::strcmp( SAttr("application:engine"), "multi") ) { + + LOG_INFO << "Initialize Geant 4 + GEANT3 multiengine run" << endm; + TMCManager::Instance()->Init( InitializeMC ); + + } + + // Geant4 standalone initialization + if ( 0==std::strcmp( SAttr("application:engine"), "G4") ) { + + LOG_INFO << "Initialize Geant 4 standalone" << endm; + + InitializeMC( gG4 ); + + TG4RunManager* runManager = TG4RunManager::Instance(); + runManager->UseRootRandom(false); + + } + + // GEANT3 standalone initialization + if ( 0==std::strcmp( SAttr("application:engine"), "G3") ) { + + LOG_INFO << "Initialize GEANT3 standalone" << endm; + + InitializeMC( gG3 ); + + } + + return StMaker::Init(); +} +//________________________________________________________________________________________________ +int StGeant4Maker::InitRun( int /* run */ ){ + + auto result = kStOK; + + // Get magnetic field scale + double field = DAttr("field"); /* kG */ + + if ( 0 == StarMagField::Instance() ) new StarMagField( StarMagField::kMapped, field / 5.0 ); + + if ( 0.0 == field ) { // TODO: Not sure about the logic here... + // field = St_MagFactorC::instance()->ScaleFactor(); + // if ( TMath::Abs(field)<1E-3 ) field = 1E-3; + StarMagField::Instance()->SetFactor(field); + } + + // Obtain a pointer to the event header + mEventHeader = (StEvtHddr*) ( GetTopChain()->GetDataSet("EvtHddr") ); + + // If it does not exist, create and register + if ( 0 == mEventHeader ) { + mEventHeader = new StEvtHddr(GetConst()); + mEventHeader->SetRunNumber(0); + SetOutput(mEventHeader); // Declare this event header for output + } + + // Obtain pointer to the primary maker + StarPrimaryMaker* primarymk = dynamic_cast (GetMaker("PrimaryMaker")); + if (primarymk) { + primarymk->SetVertex( DAttr("vertex:x"), DAttr("vertex:y"), DAttr("vertex:z") ); + primarymk->SetSigma ( DAttr("vertex:sigmax"), DAttr("vertex:sigmay"), DAttr("vertex:sigmaz") ); + } + else { + LOG_FATAL << "Primary event generator not registered" << endm; + result = kStFatal; + } + + return result; +} +//________________________________________________________________________________________________ +void StarVMCApplication::ConstructGeometry(){ + // Geometry construction is the responsability of the framework and should + // have already occurred. If the geometry is missing, it should be fatal. + if ( 0==gGeoManager ) { + LOG_FATAL << "Geometry manager is not available at StarVMCApplication::ConstructGeometry... this will not go well" << endm; + } + gGeoManager->CloseGeometry(); +} +//________________________________________________________________________________________________ +int StGeant4Maker::InitGeom() { + + const DbAlias_t *DbAlias = GetDbAliases(); + if ( 0==gGeoManager ) { + for (int i = 0; DbAlias[i].tag; i++) // iterate over DB aliases + { + StBFChain *bfc = (StBFChain *)(GetTopChain()); + if ( 0==bfc ) break; // nothing to do in this case... + + // + // Look for BFC option of form y2019x or ry2019x + // + TString rtag = "r"; rtag += DbAlias[i].tag; + TString tag = DbAlias[i].tag; + if ( 0==bfc->GetOption(rtag.Data()) && 0==bfc->GetOption(tag.Data()) ) continue; + // + // Get the geometry generation macro + // + TString geo = "Geometry."; geo += DbAlias[i].tag; geo += ".C"; + Char_t *mac = gSystem->Which( mGeomPath.Data(), geo, kReadPermission ); + if ( 0==mac ) continue; + // + // Load and execute + // + LOG_INFO << "Load geometry file " << mac << endm; + gInterpreter->ProcessLine( Form( ".L %s", mac ) ); + gInterpreter->ProcessLine( "CreateTable();" ); + gInterpreter->ProcessLine( Form( ".U %s", mac ) ); + // + // Cleanup file + // + if (mac) delete [] mac; + } + } + + assert(gGeoManager); + + LOG_INFO << "Geometry constructed." << endm; + TGeoVolume* top = gGeoManager->FindVolumeFast( SAttr("AgMLOpt:TopVolume") ); + gGeoManager->SetTopVolume( top ); + + return kStOK; +} +//________________________________________________________________________________________________ +double StarVMCApplication::TrackingRmax() const { + return mRmax; +} +double StarVMCApplication::TrackingZmax() const { + return mZmax; +} +//________________________________________________________________________________________________ +int StGeant4Maker::InitHits() { + return kStOK; +} +//________________________________________________________________________________________________ +struct A { }; +struct B { }; +int StGeant4Maker::Make() { + + static int eventNumber = 1; + const int runnumber = IAttr("runnumber"); + + // One time initialization + if ( 1 == eventNumber ) { + + mMCStack->SetScoring( DAttr("Scoring:Rmax"), DAttr("Scoring:Zmax"), DAttr("Scoring:Emin") ); + + } + + trigger(); + + // Update event header. Note that event header's SetRunNumber method sets the run number AND updates the previous run number. + + if ( runnumber != mEventHeader->GetRunNumber() ) mEventHeader -> SetRunNumber( runnumber ); + mEventHeader -> SetEventNumber( eventNumber ); + mEventHeader -> SetProdDateTime(); + + // SetDateTime(); + + // Increment event number + eventNumber++; + + // Dump the stack at the end of make + // mMCStack -> StackDump(); + + return kStOK; +} +//________________________________________________________________________________________________ +void StGeant4Maker::Clear( const Option_t* opts ){ + + mMCStack -> Clear(); // Clear the MC stack + acurr = aprev = 0; // zero out pointers to the current and previous agml extensions + + + StMaker::Clear(); +} +//________________________________________________________________________________________________ +void StarVMCApplication::InitGeometry(){ + + _g4maker -> ConfigureGeometry(); + +} +//________________________________________________________________________________________________ +void StarVMCApplication::ConstructSensitiveDetectors() { + + // + // This routine registers sensitive detectors to volumes. Additionally, + // in multi-engine mode, this routine is responsible for associating + // a physics engine to each volume in the geometry. + // + // NOTE: physics engines are assigned at the granularity of geometry + // modules. Users have the ability to specify the physics engine for + // a given module (and all volumes defined within) by using the syntax + // + // --syst:engine=G3 or --syst:engine=G4 + // + // where "syst" denotes the first four letters of the name of the geometry + // module. + // + + assert(gGeoManager); + + // + // Returns the engine enum (kGeant3 or kGeant4) from the command line option + // of the form NAME:engine=G3 or NAME:engine=G4 + // + // NAME = all signifies the default engine + // NAME = modu is the first four letters (lower cased) of the module name. All + // volumes within that module will be assigned to the engine. + // + auto engineFromOption = []( const std::string _option ) -> int { + std::string option = _option; + int result; + // Get the default from the maker + std::string v; + const std::string default_ = _g4maker->SAttr("all:engine"); + + if ( option == "" ) v = default_; + else v = _g4maker->SAttr(option.c_str()); + if ( v == "" ) v = default_; + + // Returns either geant3 or geant4 + if ( v == "G3" ) result = AgMLExtension::Geant3; + else if ( v == "G4" ) result = AgMLExtension::Geant4; + else { assert(0); } // should never fall through + assert( result==0 || result==1 ); + return result; + }; + auto engineFromModule = [engineFromOption]( const std::string _m ) -> int { + // grab the first four characters of the module + std::string m4 = _m.substr(0,4); + // is there an attribute set + std::string option = m4 + ":engine"; + return engineFromOption( option ); + }; + + _g4maker->SetDefaultEngine( engineFromOption("all:engine") ); + + // First collect all AgML extensions with sensitive volumes + // by the family name of the volume + std::map sdmap; + + // Get list of volumes + TObjArray *volumes = gGeoManager->GetListOfVolumes(); + + // Get list of extensions mapped to volume + for ( int i=0; iGetEntries(); i++ ) { + + TGeoVolume* volume = (TGeoVolume *)volumes->At(i); + AgMLExtension* ae = getExtension(volume); + if ( 0==ae ) { + LOG_INFO << "No agml extension on volume = " << volume->GetName() << endm; + continue; // shouldn't happen + } + + // Name of the volume + TString vname=volume->GetName(); + TString fname=ae->GetFamilyName(); + TString mname=ae->GetModuleName(); + + ae->SetEngine( engineFromModule( mname.Data() ) ); + + if ( 0==ae->GetSensitive() ) { + LOG_DEBUG << "Not sensitive = " << volume->GetName() << endm; + continue; + } + + AgMLVolumeId* identifier = AgMLVolumeIdFactory::Create( fname ); + if ( identifier ) { + ae -> SetVolumeIdentifier( identifier ); + } + + // + // Get the sensitive detector. If we don't have one registered + // to this family, create one and register it + // + StSensitiveDetector* sd = sdmap[fname]; + if ( 0==sd ) { + // add sensitive detector to local map + sd = sdmap[fname] = new StSensitiveDetector( fname, mname ); + sd->SetUserStack( mMCStack ); + } + + // Register this volume to the sensitive detector + + auto* mgr = TMCManager::Instance(); + if ( 0 == mgr ) { + + auto* mc = TVirtualMC::GetMC(); // Question: Do we need to obtain pointer through TMCManager here? + if ( nullptr == mc->GetSensitiveDetector( vname ) ) { + mc->SetSensitiveDetector( vname, sd ); + } + + } + else { // multi engine mode + + mgr->Apply( [sd,vname]( TVirtualMC* _mc ) { + _mc->SetSensitiveDetector( vname, sd ); + }); + + } + + // Register this volume with the sensitive detector + sd->addVolume( volume ); + + } + +} +//________________________________________________________________________________________________ +void StGeant4Maker::SetEngineForModule( const char* module_, const int engine ) { + + LOG_INFO << "Remapping all volumes in module " << module_ << " to MC engine " << engine << endm; + + // Get list of volumes + TObjArray *volumes = gGeoManager->GetListOfVolumes(); + + // Get list of extensions mapped to volume + for ( int i=0; iGetEntries(); i++ ) { + + TGeoVolume* volume = (TGeoVolume *)volumes->At(i); + AgMLExtension* ae = getExtension(volume); + if ( 0==ae ) { + LOG_INFO << "No agml extension on volume = " << volume->GetName() << endm; + continue; // shouldn't happen + } + + // Name of the volume + TString vname=volume->GetName(); + TString fname=ae->GetFamilyName(); + TString mname=ae->GetModuleName(); + TString mname_ = module_; + + if ( mname == mname_ ) { + + ae->SetEngine( engine ); + + } + + } + +} +//________________________________________________________________________________________________ +int StGeant4Maker::ConfigureGeometry() { + + auto* mgr = TMCManager::Instance(); + + // Iterate overall volumes and set volume specific tracking cuts + std::map media; + TObjArray* objArray = gGeoManager->GetListOfVolumes(); + for ( int i=0; iGetEntries();i++ ) { + TGeoVolume* volume = (TGeoVolume *)objArray->At(i); + if ( 0==volume ) continue; + TGeoMedium* medium = volume->GetMedium(); + int id = medium->GetId(); + if ( media[id]>0 ) continue; // skip if medium already encountered + AgMLExtension* agmlExt = getExtension(volume); + if ( 0==agmlExt ) continue; + media[id] = id; + for ( auto kv : agmlExt->GetCuts() ) { + if ( 0==mgr ) { + TVirtualMC::GetMC()->Gstpar( id, kv.first, kv.second ); + } + else { + mgr->Apply( [id,kv]( TVirtualMC* mc ) { + mc->Gstpar( id, kv.first, kv.second ); + }); + } + } + } + + + return kStOK; +} +//________________________________________________________________________________________________ +void StarVMCApplication::BeginEvent(){ _g4maker->BeginEvent(); } +void StGeant4Maker::BeginEvent(){ + + +} +//________________________________________________________________________________________________ +void StarVMCApplication::FinishEvent(){ _g4maker -> FinishEvent(); } +void StGeant4Maker::FinishEvent(){ + + // Event information is (for the time being) zeroed out + St_g2t_event* g2t_event = new St_g2t_event("g2t_event",1); AddData(g2t_event); + g2t_event_st event; + event = {0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0}; + g2t_event->AddAt( &event ); + + // TODO: handle multi-engine + StMCParticleStack* stack = mMCStack; // (StMCParticleStack *)TVirtualMC::GetMC()->GetStack(); + auto& vertex = stack->GetVertexTable(); + auto& particle = stack->GetParticleTable(); + unsigned int nvertex = vertex.size(); + unsigned int ntrack = particle.size(); + + St_g2t_vertex* g2t_vertex = new St_g2t_vertex("g2t_vertex",nvertex); AddData(g2t_vertex); + St_g2t_track* g2t_track = new St_g2t_track ("g2t_track", ntrack); AddData(g2t_track); + + // Add tracks and vertices to the data structures... + + std::map truthTrack; + std::map truthVertex; + + // Map vertex and track ID truth to their pointers + + int ivertex = 1; // vertex numbering starts from 1 + for ( auto v : vertex ) { + truthVertex[v] = ivertex; + ivertex++; + } + + int itrack = 1; // track numbering starts from 1 + for ( auto t : particle ) { + truthTrack[t] = itrack; + itrack++; + } + + ivertex = 1; + for ( auto v : vertex ) { + + // partial fill of vertex table ________________________ + g2t_vertex_st myvertex; memset(&myvertex, 0, sizeof(g2t_vertex_st)); + myvertex.id = ivertex; + std::string vname = v->volume(); + std::copy(vname.begin(), vname.end(), myvertex.ge_volume); + myvertex.eg_x[0] = myvertex.ge_x[0] = v->vx(); + myvertex.eg_x[1] = myvertex.ge_x[1] = v->vy(); + myvertex.eg_x[2] = myvertex.ge_x[2] = v->vz(); + myvertex.eg_tof = myvertex.ge_tof = v->tof(); + myvertex.n_daughter = v->daughters().size(); + if ( v->daughters().size() ) { + myvertex.daughter_p = truthTrack[ v->daughters()[0] ]; + } + if ( v->parent() ) { + myvertex.n_parent = 1; // almost by definition + myvertex.parent_p = truthTrack[ v->parent() ]; + } + myvertex.ge_medium = v->medium(); + myvertex.ge_proc = v->process(); + myvertex.is_itrmd = v->intermediate(); + + // TODO: map ROOT mechanism to G3 names + + // An intermediate vertex with no daughters makes no + // sense (daughters must have been ranged out) so + // skip filling + // if ( myvertex.is_itrmd && 0==myvertex.n_daughter ) continue; + + + //__________________________________________ next vertex + g2t_vertex->AddAt( &myvertex ); + ivertex++; + + } + + itrack = 1; // track numbering starts from 1 + for ( auto t : particle ) { + + auto* pdgdata = particleData.GetParticle( t->GetPdg() ); + + // partial fill of track table _______________________ + g2t_track_st mytrack; memset(&mytrack, 0, sizeof(g2t_track_st)); + mytrack.id = itrack; + mytrack.eg_pid = t->GetPdg(); + if ( pdgdata ) { + mytrack.ge_pid = pdgdata->TrackingCode(); + mytrack.charge = pdgdata->Charge()/3.0; + } + else { + LOG_WARN << Form("Particle w/ pdgid = %i has no G3 ID (assign 0 to g2t_track::ge_pid)",t->GetPdg()) << endm; + } + mytrack.p[0] = t->px(); + mytrack.p[1] = t->py(); + mytrack.p[2] = t->pz(); + mytrack.e = t->particle()->Energy(); + mytrack.pt = t->pt(); // NOTE: starsim secondaries have pt = -999 + mytrack.eta = t->particle()->Eta(); + mytrack.rapidity = t->particle()->Y(); + // index of the start and stop vertices. + // TODO: particle stop vertices need to be scored + mytrack.start_vertex_p = truthVertex[ t->start() ]; + mytrack.stop_vertex_p = truthVertex[ t->stop() ]; + // next, track parent + mytrack.next_parent_p = truthTrack[ t->start()->parent() ]; + //__________________________________________ next track + g2t_track->AddAt(&mytrack); + itrack++; + } + + // Copy hits to tables + AddHits( "TPCH", {"TPAD"}, "g2t_tpc_hit", sd2table_tpc ); + AddHits( "CALH", {"CSCI"}, "g2t_emc_hit", sd2table_emc ); + AddHits( "ECAH", {"ESCI"}, "g2t_eem_hit", sd2table_emc ); + + AddHits( "EPDH", {"EPDT"}, "g2t_epd_hit", sd2table_epd ); + AddHits( "FSTH", {"FTUS"}, "g2t_fsi_hit", sd2table_fst ); + AddHits( "STGH", {"TGCG"}, "g2t_stg_hit", sd2table_stgc ); + AddHits( "PREH", {"PSCI"}, "g2t_pre_hit", sd2table_emc ); + AddHits( "WCAH", {"WSCI"}, "g2t_wca_hit", sd2table_emc ); + AddHits( "HCAH", {"HSCI"}, "g2t_hca_hit", sd2table_hca ); // HCA should have its own copier + + AddHits( "BTOH", {"BRSG"}, "g2t_tfr_hit", sd2table_ctf ); + AddHits( "VPDH", {"VRAD"}, "g2t_vpd_hit", sd2table_vpd ); + AddHits( "MUTH", {"MIGG"}, "g2t_mtd_hit", sd2table_mtd ); + + // g2t_track->Print(0,10); + +} +//________________________________________________________________________________________________ +void StarVMCApplication::BeginPrimary(){ _g4maker -> BeginPrimary(); } +void StGeant4Maker::BeginPrimary() +{ + + std::vector& truthTable = mMCStack->GetTruthTable(); + truthTable.clear(); + + +} +//________________________________________________________________________________________________ +void StarVMCApplication::FinishPrimary(){ _g4maker->FinishPrimary(); } +void StGeant4Maker::FinishPrimary() +{ + +} +//________________________________________________________________________________________________ +void StarVMCApplication::PreTrack(){ _g4maker->PreTrack(); } +void StGeant4Maker::PreTrack() +{ + + auto* navigator = gGeoManager->GetCurrentNavigator(); + + // Reset the history (tracks always born in full tracking region) + mPreviousNode = mCurrentNode = 0; + mPreviousVolume = mCurrentVolume = 0; + mCurrentTrackingRegion=2; + mPreviousTrackingRegion=2; + + mCurrentNode = navigator->GetCurrentNode(); + mCurrentVolume = navigator->GetCurrentVolume(); +} +//________________________________________________________________________________________________ +void StarVMCApplication::PostTrack(){ _g4maker->PostTrack(); } +void StGeant4Maker::PostTrack() +{ + +} +//________________________________________________________________________________________________ +void StGeant4Maker::UpdateHistory() { + + static auto* navigator = gGeoManager->GetCurrentNavigator(); + // TODO: handle multi-engine +//static auto* mc = TVirtualMC::GetMC(); + + + mPreviousNode = mCurrentNode; + mPreviousVolume = mCurrentVolume; + mCurrentNode = navigator->GetCurrentNode(); + mCurrentVolume = navigator->GetCurrentVolume(); + + // Obtain the agml extensions, giving priority to anything attached to + // a node. + + aprev = (mPreviousNode ) ? dynamic_cast( mPreviousNode->GetUserExtension() ) : 0; + acurr = (mCurrentNode ) ? dynamic_cast( mCurrentNode->GetUserExtension() ) : 0; + + if ( 0==aprev ) { + aprev = (mPreviousVolume) ? getExtension(mPreviousVolume) : 0; + } + if ( 0==acurr ) { + acurr = (mCurrentVolume) ? getExtension(mCurrentVolume) : 0; + } + + // Possibly inherit from parent volume + if ( 0==aprev && mPreviousNode ) { + aprev = getExtension( mPreviousNode->GetMotherVolume() ); + } + if ( 0==acurr && mCurrentNode ) { + acurr = getExtension( mCurrentNode->GetMotherVolume() ); + } + + // If the previous or current extension is null, there is no change in the tracking state. + + if ( aprev ) { + mPreviousTrackingRegion = aprev->GetTracking(); + // HACK override for CAVE, SCON + if ( aprev->GetVolumeName() == "CAVE" ) mPreviousTrackingRegion = 2; + } + if ( acurr ) { + mCurrentTrackingRegion = acurr->GetTracking(); + // HACK override for CAVE + if ( acurr->GetVolumeName() == "CAVE" ) mCurrentTrackingRegion = 2; + } + +} +//________________________________________________________________________________________________ +int StGeant4Maker::regionTransition( int curr, int prev ) { + TString previous = (mPreviousNode) ? mPreviousNode->GetName() : ""; + int result = 0; + + // TODO: handle multi-engine +//static auto mc = TVirtualMC::GetMC(); + +//static double Rmin = DAttr("Stepping:Punchout:Rmin"); +//static double Zmin = DAttr("Stepping:Punchout:Zmin"); + + // TODO: This is a hack. We need to update the geometry and group these three + // detectors underneath a single integration volume / region. + if ( previous == "PMOD" || + previous == "WMOD" || + previous == "HMOD" ) { + result = 0; + } + else { + result = curr - prev; + } + + // 2 2 0 no transition + // 2 1 1 into tracking from calorimeter + // 1 2 -1 into calorimeter from tracking + // 1 1 0 no transition + + return result; + +} +//________________________________________________________________________________________________ +void StarVMCApplication::Stepping(){ _g4maker -> Stepping(); } +void StGeant4Maker::Stepping(){ + + // At start of user stepping, try to transfer the track between engine + auto* mgr = TMCManager::Instance(); + auto* mc = TVirtualMC::GetMC(); + + if ( mgr ) { + + mc = mgr->GetCurrentEngine(); + + int target = mDefaultEngine; + int current = mc->GetId(); + + auto* ext = getExtension( mCurrentVolume ); + if ( ext ) { + target = ext->GetEngine(); + } + + + if ( current != target ) { + mgr->TransferTrack(target); + } + + } + + auto* stack = mMCStack; + + // Get access to the current track + TParticle* current = stack->GetCurrentTrack(); + + // Get access to the current MC truth + StarMCParticle* truth = stack->GetParticleTable().back(); + + // Update the immediate track history + UpdateHistory(); + + // Check for region transitions + const int transit = regionTransition( mCurrentTrackingRegion, mPreviousTrackingRegion ); + + double vx, vy, vz, tof; + mc->TrackPosition( vx,vy,vz ); + tof = mc->TrackTime(); // because consistent interface ala TrackMomentum is hard... + + bool stopped = false; + + static double Rmin = DAttr("Stepping:Punchout:Rmin"); + static double Zmin = DAttr("Stepping:Punchout:Zmin"); + + // Defines a tracking region which overrides the geometry module region assignment + auto trackingRegion = [=]()->bool { + +// bool result = false; + + double x,y,z,r; + mc->TrackPosition( x, y, z ); + r = TMath::Sqrt( x*x + y*y ); + z = TMath::Abs(z); + + bool tpcFiducial = r < Rmin && z < Zmin; + bool fwdFiducial = r < 90.0; // 90cm is poletip donut hole + + bool fcsFiducial = z > 700 && z < 1000 && TMath::Abs(x) < 150 && TMath::Abs(y) < 101.0; + + + return tpcFiducial || fwdFiducial || fcsFiducial; + + }; + + // Check if option to stop punchout tracks is enabled + if ( IAttr("Stepping:Punchout:Stop") && 1==transit && !trackingRegion() ) { + + if ( 2==IAttr("Stepping:Punchout:Stop") ) { + + assert(truth); + + // Parent track is the ID known to the particle stack + int parent = truth->idStack(); + + assert(current); + + // PDG of the track has not changed + int pdg = current->GetPdgCode(); + // We will use the current momentum of the particle + double px, py, pz, e; + mc->TrackMomentum( px, py, pz, e ); + // ... and its current vertex and TOF from the point where it + // emerges from the calorimeter + + // this is a user process (and I would dearly love to be able to extend the definitions here...) + TMCProcess mech = kPUserDefined; + int ntr; + + stack->PushTrack( 1, parent, pdg, px, py, pz, e, vx, vy, vz, tof, 0., 0., 0., mech, ntr, 1.0, 1 ); + + } + + mc->StopTrack(); + stopped = true; + + } + + // Score interaction vertices on entrance / exit of a tracking region + bool transitCheck = (0!=transit)&&IAttr("Scoring:Transit"); + if ( 2==mCurrentTrackingRegion || transitCheck ) { + + int nsec = mc->NSecondaries(); + + // Track has decayed or otherwise been stopped + if ( mc->IsTrackDisappeared() || + mc->IsTrackStop() || + mc->IsTrackOut() ) { + + const StarMCVertex* vertex_ = truth->stop(); + if ( 0==vertex_ ) { + + auto* vertex = mMCStack->GetVertex( vx, vy, vz, tof, -1 ); + vertex->setParent( truth ); + vertex->setMedium( mc->CurrentMedium() ); + +// int pdgid = 0; + if ( mc->IsTrackDisappeared() ) { + + if ( nsec ) vertex->setProcess( mc->ProdProcess(0) ); + else if ( mc->IsTrackStop() ) vertex->setProcess( kPStop ); + else if ( mc->IsTrackOut() ) vertex->setProcess( kPNull ); + + } + else if ( mc->IsTrackStop() ) vertex->setProcess( kPStop ); + else if ( mc->IsTrackOut() ) vertex->setProcess( kPNull ); + + truth->setStopVertex( vertex ); + } + + } + else if ( nsec > 0 ) { + + + TMCProcess proc = mc->ProdProcess(0); + { + + // interaction which throws off secondaries and track contiues... + auto* vertex = mMCStack->GetVertex(vx,vy,vz,tof,proc); + + vertex->setParent( truth ); + vertex->setMedium( mc->CurrentMedium() ); + vertex->setProcess( mc->ProdProcess(0) ); + vertex->setIntermediate(true); + + // this is an intermediate vertex on the truth track + truth->addIntermediateVertex( vertex ); + + } + + } + + } + + if ( stopped ) { + LOG_DEBUG << Form("track stopped x=%f y=%f z=%f ds=%f transit=%d %d stopped=%s %s", + vx,vy,vz,mc->TrackStep(), mCurrentTrackingRegion, mPreviousTrackingRegion, (stopped)?"T":"F", mc->CurrentVolPath() ) << endm; + } + + // Perform any post stepping actions + for ( auto f : mPostSteppingActions ) f(); + + +} +//________________________________________________________________________________________________ +void StarVMCApplication::GeneratePrimaries() { _g4maker -> PushPrimaries(); } +void StGeant4Maker::PushPrimaries() { + + StMaker *mymaker = GetMaker("PrimaryMaker"); + StarPrimaryMaker *myprimary = (StarPrimaryMaker *)mymaker; + StarParticleStack *mystack = myprimary->stack(); + + int ntrack = mystack -> GetNtrack(); + + int ntr = 0; // set by reference below... + for ( int itrack = 0; itrack < ntrack; itrack++ ) + { + + TParticle *track = mystack->GetParticle(itrack); + int pdg = track -> GetPdgCode(); + TParticlePDG *pdgPart = particleData(pdg); + + if ( 0 == pdgPart ) + { // Protect against unknown particle codes + continue; + } + + int parent = track->GetFirstMother(); +// int kid1 = track->GetFirstDaughter(); +// int kid2 = track->GetLastDaughter(); + double px = track->Px(); + double py = track->Py(); + double pz = track->Pz(); + + double M = pdgPart->Mass(); + + double E = TMath::Sqrt( px * px + py * py + pz * pz + M * M ); + double vx = track->Vx(); + double vy = track->Vy(); + double vz = track->Vz(); + double tof= track->T(); + double weight = 1.0; + TMCProcess proc = kPPrimary; + int stat = track->GetStatusCode(); + + if ( 1 == stat ) + { + + // Push all tracks with parent = -1 to flag as primary + mMCStack->PushTrack( 1, parent=-1, pdg, px, py, pz, E, vx, vy, vz, tof, 0, 0, 0, proc, ntr, weight, stat ); + + } + + + } + + LOG_INFO << "Pushed " << ntr << " tracks from primary event generator" << endm; + +} +//________________________________________________________________________________________________ +int StGeant4Maker::Finish() { + + LOG_INFO << "Energy sums per sensitive volume" << endm; + for ( auto kv : mHitSum ) { + + std::string name = kv.first; + double esum = kv.second; + + LOG_INFO << name.c_str() << " dE sum = " << esum << endm; + + } + + return kStOK; +} + + + +//________________________________________________________________________________________________ + diff --git a/StRoot/StGeant4Maker/StGeant4Maker.h b/StRoot/StGeant4Maker/StGeant4Maker.h new file mode 100644 index 00000000000..d2da9c8eb90 --- /dev/null +++ b/StRoot/StGeant4Maker/StGeant4Maker.h @@ -0,0 +1,258 @@ +#ifndef __StGeant4Maker_h__ +#define __StGeant4Maker_h__ +#include + +#include "StChain.h" + +#include "TVirtualMC.h" +#include "TVirtualMCApplication.h" +#include "TVirtualMagField.h" +#include "StarMagField.h" +#include +#include +#include +#include "StMCParticleStack.h" + +#include + +class StGeant4Maker; + +class AgMLExtension; + +class TGeoNode; +class TGeoVolume; + +class TG4RunConfiguration; + +class St_g2t_track; + +class StEvtHddr; + +//______________________________________________________________________________________ +class StarMagFieldAdaptor : public TVirtualMagField { +public: + void Field( const double *x, double *B ) + { + StarMagField::Instance()->BField(x,B); + } +}; +//______________________________________________________________________________________ +class StarVMCApplication : public TVirtualMCApplication { +public: + StarVMCApplication( const char *name = "starsim", const char *title="STAR VMC simulation", double zmax=DBL_MAX, double rmax=DBL_MAX, std::string engine="geant4", StMCParticleStack* stack = 0 ); + ~StarVMCApplication(){ /* nada */ }; + + /// Geometry construction is the responsability of the STAR chain + virtual void ConstructGeometry(); + virtual void ConstructSensitiveDetectors(); + + /// Misalignment of geometry. Default false. + virtual bool MisalignGeometry(){ return false; } + + /// Define parameters for optical processes (optional) + virtual void ConstructOpGeometry() { LOG_INFO << "VMC APP ConstructOpGeometry()" << endm; } + + /// TODO: Initialize geometry. (Usually used to define sensitive volumes IDs) + virtual void InitGeometry(); + + /// Add user defined particles (optional) + virtual void AddParticles() {LOG_INFO << "VMC APP AddParticles()" << endm; }; + + /// Add user defined ions (optional) + virtual void AddIons() {} + + /// Primary generation is responsability of the STAR framework + virtual void GeneratePrimaries(); + + /// Define actions at the beginning of the event + virtual void BeginEvent(); + + /// Define actions at the beginning of the primary track + virtual void BeginPrimary(); + + /// Define actions at the beginning of each track + virtual void PreTrack(); + + /// Define action at each step + virtual void Stepping(); + + /// Define actions at the end of each track + virtual void PostTrack(); + + /// Define actions at the end of the primary track + virtual void FinishPrimary(); + + /// Define actions at the end of the event + virtual void FinishEvent(); + + /// Define maximum radius for tracking (optional) + virtual double TrackingRmax() const; + + /// Define maximum z for tracking (optional) + virtual double TrackingZmax() const; + + /// Calculate user field \a b at point \a x + virtual void Field(const double* x, double* b) const { StarMagField::Instance()->BField(x,b); } + + /// Define action at each step for Geane + virtual void GeaneStepping() {;} + +private: +protected: + + double mZmax; + double mRmax; + + bool mMulti; + + StMCParticleStack* mMCStack; + + ClassDef(StarVMCApplication, 0); + +}; +//______________________________________________________________________________________ +class StGeant4Maker : public StMaker { + +public: + + StGeant4Maker( const char* nm="geant4star" ); + ~StGeant4Maker(){ /* nada */ }; + + /// Initialize maker + int Init(); + int InitRun( int run ); + int InitGeom(); + int InitHits(); + + /// Perform runtime initialization of per-medium track propagation cuts, processes, etc... + int ConfigureGeometry(); + + /// Process one event + int Make(); + + void BeginEvent(); + void BeginPrimary(); + void PreTrack(); + void PostTrack(); + void FinishPrimary(); + void FinishEvent(); + + // Executed on each tracking step + void Stepping(); + + /// Push primary event out for tracking + void PushPrimaries(); + + /// Clear for the next event + void Clear( const Option_t* opts="" ); + + /// Final end of run actions + int Finish(); + + void SetDefaultEngine( int e ) { mDefaultEngine = e; } + + /// Sets the MC engine for a given module + void SetEngineForModule( const char* module_, const int engine ); + + StMCParticleStack* stack(){ return mMCStack; } + + void AddUserPostSteppingAction( std::function f ) { mPostSteppingActions.push_back(f); } + + /// Registers a command line option + template + void AddOption( const char* opt, T val, const char* help ){ + SetAttr( opt, val ); + mCmdOptions.push_back( { opt, help } ); + } + + void PrintOptions( const char* opts = 0 ); + + +private: +protected: + + struct CmdOption { + std::string name; + std::string help; + }; + std::vector mCmdOptions; + + StarVMCApplication *mVmcApplication; + TString mGeomPath; // Search path for geometry construction + StarMagField *mStarField; + StMCParticleStack *mMCStack; // Monte Carlo stack + StarMagFieldAdaptor *mMagfield; + TG4RunConfiguration* mRunConfig; + // StVMCStepManager* mStepping; + + void UpdateHistory(); + + TGeoNode* mCurrentNode; + TGeoNode* mPreviousNode; + TGeoVolume* mCurrentVolume; + TGeoVolume* mPreviousVolume; + + int mCurrentTrackingRegion; + int mPreviousTrackingRegion; + + AgMLExtension* acurr; + AgMLExtension* aprev; + + StEvtHddr* mEventHeader; + + int regionTransition( int, int ); + + std::map mHitSum; + + /// @param T specifies the type of the table + /// @param F specifies the functor class which retrieves the hits from geant + template + int AddHits( std::string name, std::vector volumes, std::string gname, F sd2table ) { + + int nhits = 0; + StSensitiveDetector* sd = 0; + for ( auto v : volumes ) { + sd = dynamic_cast(TVirtualMC::GetMC()->GetSensitiveDetector( v.c_str() )); + if ( 0==sd ) { LOG_INFO << "no SD for " << v << endm; continue; } + nhits += sd->numberOfHits(); + break; + } + if ( 0==sd ) return 0; + + LOG_INFO << name << " adding number of hits = " << nhits << endm; + auto* table = new T( gname.c_str(), nhits ); + auto* g2t_track = (St_g2t_track*)FindByName("g2t_track"); + + // Copy data from the sensitive detector to the table + sd2table( sd, table, g2t_track ); + + AddData( table ); + double sum = 0.0; + for ( auto hit : (*table) ) { + sum += hit.de; + } + mHitSum[ name ] += sum; + + // Clear the sensitive detector + sd->Clear(); + + return nhits; + } + + int mDefaultEngine; + + std::vector< std::function > mPostSteppingActions; + + ClassDef(StGeant4Maker,0); + +public: + + virtual const char *GetCVS() const + { + static const char cvs[]="Tag $Name:$ $Id:$ built __DATE__ __TIME__ "; + return cvs; + } + +}; +//______________________________________________________________________________________ +#endif diff --git a/StRoot/StGeant4Maker/StHitCollection.cxx b/StRoot/StGeant4Maker/StHitCollection.cxx new file mode 100644 index 00000000000..64700cab0db --- /dev/null +++ b/StRoot/StGeant4Maker/StHitCollection.cxx @@ -0,0 +1,449 @@ +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +//____________________________________________________________________________________________ +ostream& operator<<(ostream& os, const TrackerHit& hit) { + + TString mypath(""); + + int i=0; + int volu=hit.volu[i]; + int copy=hit.copy[i]; + while ( volu>0 ) { + mypath += "/"; mypath += gGeoManager->GetVolume(volu)->GetName(); mypath += "_"; mypath += copy; + i++; + volu=hit.volu[i]; + copy=hit.copy[i]; + } + + TString numbv; + for ( unsigned int iv=0;iv0 ) { + + mypath += "/"; mypath += gGeoManager->GetVolume(volu)->GetName(); mypath += "_"; mypath += copy; + + i++; + + volu=hit.volu[i]; + copy=hit.copy[i]; + + } + + TString numbv; + for ( unsigned int iv=0;ivGetCurrentNavigator(); + TVirtualMC* mc = (TMCManager::Instance()) ? + TMCManager::Instance()->GetCurrentEngine() : + TVirtualMC::GetMC(); + + TGeoVolume* current = navigator->GetCurrentVolume(); + + // Is this a charged particle? If not, skip it... + if ( 0 == mc->TrackCharge() ) return; + + // Energy deposited in this tracking step + double Edep = mc->Edep(); + + // Position and momentum of the hit + double x, y, z, px, py, pz, etot; + mc->TrackPosition( x, y, z ); + mc->TrackMomentum( px, py, pz, etot ); + + TVirtualMCStack* stack = (TVirtualMCStack *)mc->GetStack(); + + // Get list of tracks from particle stack + StMCParticleStack* userstack = (StMCParticleStack*)mUserStack; + std::vector& truthTable = userstack->GetTruthTable(); + std::vector& particleTable = userstack->GetParticleTable(); + + // This should be the current particle truth + StarMCParticle* truth = userstack->GetCurrentPersistentTrack(); + + LOG_DEBUG << "Process hits with track " << truth << " current tn=" << userstack->GetCurrentTrackNumber() << endm; + + bool isNewTrack = mc->IsNewTrack(); + bool isTrackEntering = mc->IsTrackEntering(); + bool isTrackExiting = mc->IsTrackExiting(); + bool isTrackInside = mc->IsTrackInside(); + bool isTrackOut = mc->IsTrackOut(); + bool isTrackStop = mc->IsTrackStop(); + + TrackerHit* hit = 0; + + // Track has entered this volume, create a new hit + if ( isTrackEntering || isNewTrack ) { + + // Make sure that the level is not too deep + if ( navigator->GetLevel() > int(DetectorHit::maxdepth) ) { + LOG_INFO << "Cannot score hits with depth " << navigator->GetLevel() << endm; + return; + } + + mHits.push_back( hit = new TrackerHit ); + truth->addHit( hit ); + + // Get the current path to the sensitive volume + hit->path = mc->CurrentVolPath(); + + // Get the current volume / copy numbers to the sensitive volume. n.b. GetBranchNumbers + // only writes to the current level, so if hit is not new or cleared, need to clear by hand. + gGeoManager->GetBranchNumbers( hit->copy, hit->volu ); + + int inumbv = 0; + AgMLExtension* agmlext = 0; + for ( int ilvl=0; ilvlGetLevel()+1;ilvl++ ) { + TGeoVolume* volume = gGeoManager->GetVolume( hit->volu[ilvl] ); + agmlext = getExtension( volume ); + if ( 0 == agmlext ) continue; // but probably an error + if ( agmlext->GetBranchings() <= 1 ) continue; // skip unique volumes (and HALL) + hit->numbv[ inumbv++ ] = hit->copy[ilvl]; + } + + // Set the volume unique ID + assert(agmlext); + hit->volId = agmlext->GetVolumeId( hit->numbv ); + + // Assign the hit a unqiue ID (index + 1) + hit->id = mHits.size(); + + // Assign the hit the ID truth of the current track (index + 1) + // hit->idtruth = particleTable.size(); + // hit->idtruth = truthTable.size(); + hit->idtruth = userstack->GetIdTruth ( truth ); + + + + // Score entrance momentum and + mc->TrackMomentum( hit->momentum_in[0], hit->momentum_in[1], hit->momentum_in[2], hit->momentum_in[3] ); + mc->TrackPosition( hit->position_in[0], hit->position_in[1], hit->position_in[2] ); + hit->position_in[3] = mc->TrackTime(); + + } + + if ( mHits.size() == 0 ) { + LOG_INFO << "No available hits" << endm; + return; + } + + // Update the final step in this hit + hit = mHits.back(); + + hit -> nsteps += 1; + + // For all other tracking states, update the exit momentum and position + mc->TrackMomentum( hit->momentum_out[0], hit->momentum_out[1], hit->momentum_out[2], hit->momentum_out[3] ); + mc->TrackPosition( hit->position_out[0], hit->position_out[1], hit->position_out[2] ); + hit->position_out[3] = mc->TrackTime(); + + // Increment the energy loss and step sums + hit -> de += mc->Edep(); + hit -> ds += mc->TrackStep(); + + // Total length to this point + hit -> length = mc->TrackLength(); + + double mass = mc->TrackMass(); + double Etot = mc->Etot(); // total energy + + double Ekin = Etot - mass; + if ( mass <= 0 ) hit->lgam = -999; + else if ( Ekin <= 0 ) hit->lgam = -998; + else hit->lgam = TMath::Log10( Ekin/mass ); + + + // Grab the agml extension and evaluate user hits + AgMLExtension* agmlext = getExtension( current ); + if ( 0==agmlext ) return; + + // Score user defined hit quantities + for ( auto score : agmlext->GetUserHits() ) { + hit->user.push_back( score->hit() ); + } + +} +//_____________________________________________________________________________________________ +void StTrackerHitCollection::EndOfEvent() { + // Do nothing +} +//_____________________________________________________________________________________________ +void StTrackerHitCollection::Clear(Option_t*) { + for ( auto h : mHits ) { + if ( h ) delete h; + } + mHits.clear(); +} + + +//_____________________________________________________________________________________________ +void StCalorimeterHitCollection::Initialize() { + +} +//_____________________________________________________________________________________________ +void StCalorimeterHitCollection::ProcessHits() { + + TGeoNavigator* navigator = gGeoManager->GetCurrentNavigator(); + TVirtualMC* mc = TVirtualMC::GetMC(); + TGeoVolume* current = navigator->GetCurrentVolume(); + + // Is this a charged particle? If not, skip it... + if ( 0 == mc->TrackCharge() ) return; + + // Energy deposited in this tracking step + double Edep = mc->Edep(); + + // Correct for Birk's law + // Edep = Edep * mBirk[0] / ( 1.0 + mBirk[1]*Edep + mBirk[2]*Edep*Edep ); + + // Position and momentum of the hit + double x, y, z, px, py, pz, etot; + mc->TrackPosition( x, y, z ); + mc->TrackMomentum( px, py, pz, etot ); + + TVirtualMCStack* stack = (TVirtualMCStack *)mc->GetStack(); + + // Get list of tracks from particle stack + StMCParticleStack* userstack = (StMCParticleStack*)mUserStack; + std::vector& truthTable = userstack->GetTruthTable(); + std::vector& particleTable = userstack->GetParticleTable(); + + // This should be the current particle truth + StarMCParticle* truth = userstack->GetCurrentPersistentTrack(); + + LOG_DEBUG << "Process hits with track " << truth << " current tn=" << userstack->GetCurrentTrackNumber() << endm; + + bool isNewTrack = mc->IsNewTrack(); + bool isTrackEntering = mc->IsTrackEntering(); + bool isTrackExiting = mc->IsTrackExiting(); + bool isTrackInside = mc->IsTrackInside(); + bool isTrackOut = mc->IsTrackOut(); + bool isTrackStop = mc->IsTrackStop(); + + CalorimeterHit* hit = 0; + + // Track has entered this volume, create a new hit + if ( isTrackEntering || isNewTrack ) { + + // Zero out the energy sum + mEsum = 0; + + // Make sure that the level is not too deep + if ( navigator->GetLevel() > int(DetectorHit::maxdepth) ) { + LOG_INFO << "Cannot score hits with depth " << navigator->GetLevel() << endm; + return; + } + + mHits.push_back( hit = new CalorimeterHit ); + truth->addHit( hit ); + + // Get the current path to the sensitive volume + hit->path = mc->CurrentVolPath(); + + // Get the current volume / copy numbers to the sensitive volume. n.b. GetBranchNumbers + // only writes to the current level, so if hit is not new or cleared, need to clear by hand. + gGeoManager->GetBranchNumbers( hit->copy, hit->volu ); + + // Set reduced volume path + int inumbv = 0; + AgMLExtension* agmlext = 0; + for ( int ilvl=0; ilvlGetLevel()+1;ilvl++ ) { + TGeoVolume* volume = gGeoManager->GetVolume( hit->volu[ilvl] ); + agmlext = getExtension(volume); + if ( 0 == agmlext ) continue; // but probably an error + if ( agmlext->GetBranchings() <= 1 ) continue; // skip unique volumes (and HALL) + hit->numbv[ inumbv++ ] = hit->copy[ilvl]; + } + + // Set the volume unique ID + assert(agmlext); + hit->volId = agmlext->GetVolumeId( hit->numbv ); + + // Assign the hit a unqiue ID (index + 1) + hit->id = 1 + mHits.size(); + + // Assign the hit the ID truth of the current track (index + 1) + // hit->idtruth = particleTable.size(); + // hit->idtruth = truthTable.size(); + hit->idtruth = userstack->GetIdTruth ( truth ); + + // Score entrance + mc->TrackPosition( hit->position_in[0], hit->position_in[1], hit->position_in[2] ); + hit->position_in[3] = mc->TrackTime(); + + } + + if ( mHits.size() == 0 ) { + LOG_INFO << "No available hits" << endm; + return; + } + + // Update the final step in this hit + hit = mHits.back(); + + hit -> nsteps += 1; + + // Add current energy deposit to energy sum + mEsum += Edep; + + // Hit energy will be the total energy deposition corrected by Birk's law + hit -> de = mEsum * mBirk[0] / ( 1.0 + mBirk[1]*mEsum + mBirk[2]*mEsum*mEsum ); + + // Grab the agml extension and evaluate user hits + AgMLExtension* agmlext = getExtension( current ); + if ( 0==agmlext ) return; + + // Score user defined hit quantities + for ( auto score : agmlext->GetUserHits() ) { + hit->user.push_back( score->hit() ); + } + + +} +//_____________________________________________________________________________________________ +void StCalorimeterHitCollection::EndOfEvent() { + // Aggregate hits in each calorimeter sensitive volume + int count=0; + int idtruth=0; + double demax=-9E9; + std::map hitsByVolume; + + for ( auto hit : mHits ) { + int volumeId = hit->volId; + auto myhit = hitsByVolume[volumeId]; + + if ( 0==myhit ) { + myhit = hitsByVolume[volumeId] = new CalorimeterHit(); + myhit->id = ++count; + myhit->idtruth=hit->idtruth; + std::copy( hit->volu, hit->volu+DetectorHit::maxdepth, myhit->volu ); + std::copy( hit->copy, hit->copy+DetectorHit::maxdepth, myhit->copy ); + myhit->volId = volumeId; + myhit->path = hit->path; + myhit->user.resize(hit->user.size()); + std::copy(hit->position_in,hit->position_in+4,myhit->position_in); + myhit->idtruth=hit->idtruth; + } + + myhit->idtruth = TMath::Min( hit->idtruth, myhit->idtruth ); + myhit->nsteps += hit->nsteps; + myhit->de += hit->de; + + if ( hit->user.size() == myhit->user.size() ) + { + for ( int i=0;iuser.size();i++ ) { + myhit->user[i]+=hit->user[i]; + } + } + else + { + LOG_INFO << "Size mismatch in user hit vector, skip adding this hit. " << endm; + } + } + + for ( auto h : mHits ) { + if (h) delete h; + } + mHits.clear(); + + for ( auto kv : hitsByVolume ) { + mHits.push_back( kv.second ); + } + +} +//_____________________________________________________________________________________________ + +//_____________________________________________________________________________________________ +void StCalorimeterHitCollection::Clear(Option_t*) { + for ( auto h : mHits ) { + if (h) delete h; + } + mHits.clear(); + mEsum=0; +} diff --git a/StRoot/StGeant4Maker/StHitCollection.h b/StRoot/StGeant4Maker/StHitCollection.h new file mode 100644 index 00000000000..cf1d46cb5b4 --- /dev/null +++ b/StRoot/StGeant4Maker/StHitCollection.h @@ -0,0 +1,94 @@ +#ifndef __StHitCollection_h__ +#define __StHitCollection_h__ + +class DetectorHit; +class TrackerHit; +class CalorimeterHit; + +#include +#include +#include +#include +#include + +class TVirtualMCStack; + +class StHitCollection : public TNamed { + +public: + + StHitCollection( const char* name, const char* title ); + ~StHitCollection(){ /* nada */ }; + + virtual void Initialize() = 0; + virtual void ProcessHits() = 0; + virtual void EndOfEvent() = 0; + virtual void Clear(Option_t* o="") = 0; + + virtual int numberOfHits() = 0; + + void SetUserStack( TVirtualMCStack* stack ) { mUserStack = stack; } + +private: +protected: + + TVirtualMCStack* mUserStack; + + ClassDef(StHitCollection,0); + +}; + +class StTrackerHitCollection : public StHitCollection { + +public: + StTrackerHitCollection( const char* name, const char* title ); + ~StTrackerHitCollection() { /* nada */ }; + + virtual void Initialize(); + virtual void ProcessHits(); + virtual void EndOfEvent(); + virtual void Clear(Option_t* o=""); + + virtual int numberOfHits(){ return mHits.size(); } + + std::vector& hits(){ return mHits; } + +private: +protected: + + std::vector mHits; + + ClassDef(StTrackerHitCollection,0); + +}; + + +class StCalorimeterHitCollection : public StHitCollection { + +public: + StCalorimeterHitCollection( const char* name, const char* title ); + ~StCalorimeterHitCollection() { /* nada */ }; + + virtual void Initialize(); + virtual void ProcessHits(); + virtual void EndOfEvent(); + virtual void Clear(Option_t* o=""); + + virtual int numberOfHits(){ return mHits.size(); } + + std::vector& hits(){ return mHits; } + +private: +protected: + + std::vector mHits; + double mBirk[3]; + double mEsum; + + ClassDef(StCalorimeterHitCollection,0); + +}; + +std::ostream& operator<<(std::ostream& os, const TrackerHit& hit); + +#endif diff --git a/StRoot/StGeant4Maker/StMCParticleStack.cxx b/StRoot/StGeant4Maker/StMCParticleStack.cxx new file mode 100644 index 00000000000..a9d51d73f1a --- /dev/null +++ b/StRoot/StGeant4Maker/StMCParticleStack.cxx @@ -0,0 +1,512 @@ +#include "StMCParticleStack.h" + +#include + +#include "TMCProcess.h" +using namespace std; + +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include +#include + +const int kDefaultStackSize = 400; +const int kDefaultArraySize = 4000; + +ostream& operator<<(ostream& os, const StarMCVertex& vert) { + os << Form("[StMCVertex %p] (%f,%f,%f)", + (void*)&vert, + vert.vx(), + vert.vy(), + vert.vz()); + return os; +} +ostream& operator<<(ostream& os, const StarMCParticle& part) { + os << Form("[StMcParticle %s %p] stat=%i pdg=%i p=(%f,%f,%f;%f) v=(%f,%f,%f)",part.GetName(),(void*)&part, + part.GetStatus(), part.GetPdg(), + part.px(),part.py(),part.pz(),part.E(), + part.vx(),part.vy(),part.vz() + ); + + if ( part.start() ) { + os << std::endl << " [start] " << *part.start(); + } + + for ( auto i : part.intermediate() ) { + os << std::endl << " [inter] " << *i; + } + + if ( part.stop() ) { + os << std::endl << " [stop] " << *part.stop(); + } + + return os; +} +ostream& operator<<(ostream& os, const TParticle& part) { + os << Form("[TParticle %s %p] stat=%i pdg=%i p=(%f,%f,%f;%f) v=(%f,%f,%f) mother=%i daughters=%i %i", + part.GetName(), + (void*)&part, + part.GetStatusCode(),part.GetPdgCode(), + part.Px(),part.Py(),part.Pz(),part.Energy(), + part.Vx(),part.Vy(),part.Vz(), + part.GetFirstMother(), part.GetFirstDaughter(), + part.GetLastDaughter()); + return os; +} + + + + +//___________________________________________________________________________________________________________________ +//___________________________________________________________________________________________________________________ +StMCParticleStack::StMCParticleStack( const Char_t *name ) : + TVirtualMCStack(), + mNumPrimary(0), + mCurrent(-1), + mArraySize(0), + mArray(0), + mPersistentTrack(), + mStackSize(0), + mStack(), + mStackIdx(), + mTruthTable(), + mParticleTable(), + mVertexTable(), + mStackToTable(), + mIdTruthFromParticle(), + mScoringRmax(450.0), + mScoringZmax(2000.0), + mScoringEmin(0.01) +{ + + mArray = new TClonesArray("TParticle", kDefaultArraySize ); + +} +//___________________________________________________________________________________________________________________ +// +//___________________________________________________________________________________________________________________ +StMCParticleStack::~StMCParticleStack() +{ + if ( mArray ) delete mArray; +} +//___________________________________________________________________________________________________________________ +// +//___________________________________________________________________________________________________________________ +void StMCParticleStack::PushTrack( int toDo, int parent, int pdg, + double px, double py, double pz, double energy, + double vx, double vy, double vz, double vt, + double polx, double poly, double polz, + TMCProcess mech, int& ntr, double weight, + int is ) +{ + + // Determine whether we are in a tracking region or calorimeter region + static auto* navigator = gGeoManager->GetCurrentNavigator(); + auto* node = navigator->FindNode( vx, vy, vz ); + auto* volume = (node) ? node->GetVolume() : 0; + + if ( 0 == volume ) { + LOG_INFO << "Attempt to push a track @ v="<< vx << "," << vy << "," << vz << " ... no node found (FindNode)" << endm; + LOG_INFO << "... current path = " << navigator->GetPath() << endm; + return; // drop track on the ground + } + + // NOTE: No early returns allowed from this point + + AgMLExtension* agmlext = getExtension( node ); + + int agmlreg = (agmlext) ? agmlext->GetTracking() : 2; // 1=calorimeter 2=tracking 0=blackhole + + if (0==agmlreg) { + LOG_WARN << "... dropped into a blackhole ..." << endm; + return; // complete drop of particle into blackhole + } + + // + // Add a new particle to the array. Note: VMC standard PushTrack does not specify the children + // (or 2nd parent) of particles. So these are entered with value of -1. + // + TClonesArray &array = (*mArray); + TParticle *particle = new(array[mArraySize]) TParticle( pdg, is, parent, -1, -1, -1, + px, py, pz, energy, vx, vy, vz, vt); + particle->SetPolarisation( polx, poly, polz ); + particle->SetWeight(weight); + particle->SetUniqueID(mech); + + // mArray and mPersistent track should always have same number of entries + mPersistentTrack.push_back(0); + + bool isPrimary = parent<0; + mNumPrimary += isPrimary; + + // Add to the stack of particles + if ( toDo ) { + + mStack.push_back( particle ); + mStackIdx.push_back( mArraySize ); // store stack ID + + } + ntr = mArraySize; // guess this is supposed to be track number (index in array) + + + double Rmax2=mScoringRmax*mScoringRmax; + double vr2 = vx*vx+vy*vy; + + bool tracing = (vr2 mScoringEmin; + + // + // And handle region-based track persistence + // + if ( tracing && (agmlreg == 2 || isPrimary) ) { + + StarMCVertex* vertex = GetVertex( vx, vy, vz, vt, mech ); + + auto* persistent = new StarMCParticle(particle,vertex); + persistent->setIdTruth( mParticleTable.size() ); + persistent->setStartVertex( vertex ); + mParticleTable.push_back(persistent); // mParticleTable owns the pointer + mPersistentTrack[mArraySize] = persistent; + + mIdTruthFromParticle[ persistent ] = mParticleTable.size(); + + // Set corrspondance between stack ID and table ID + mStackToTable[ntr] = mParticleTable.back(); + mStackToTable[ntr]->setIdStack( ntr ); + + // add this particle as a daughter of the vertex + vertex->addDaughter( mParticleTable.back() ); + + auto* navigator = gGeoManager->GetCurrentNavigator(); + auto* volume = navigator->GetCurrentVolume(); + auto* medium = volume->GetMedium(); + int imed = medium->GetId(); + + vertex->setMedium(imed); + vertex->setProcess( mech ); + + } + + // + // Check to see if a persistent track has been assigned. If not, inherit from parent. + // + if ( 0==mPersistentTrack[mArraySize] ) { + int mother = particle->GetFirstMother(); + if ( mother >= 0 ) { + mPersistentTrack[mArraySize] = mPersistentTrack[mother]; + } + } + + // + // Forward to TMCManager if it exists + // + + if ( auto mgr = TMCManager::Instance() ) { + mgr -> ForwardTrack( toDo, ntr, parent, particle ); + } + + + // Increment mArraySize + mArraySize++; + + + + +} +//___________________________________________________________________________________________________________________ +StarMCParticle* StMCParticleStack::GetCurrentPersistentTrack() { + int index = GetCurrentTrackNumber(); + return mPersistentTrack[ index ]; +} +//___________________________________________________________________________________________________________________ +StarMCVertex* StMCParticleStack::GetVertex( double vx, double vy, double vz, double vt, int proc ) { + + StarMCVertex* vertex = 0; + + // TODO: Make eps a class parameter + const double eps=0.0000005; + if ( proc >= 0 ) + for ( auto vtx : mVertexTable ) { + double dist = vtx->distance(vx,vy,vz); + if ( dist < eps ) { + if ( vtx->process() == proc ) { + vertex=vtx; + break; + } + } + } + + if ( 0==vertex ) { + vertex = new StarMCVertex(vx,vy,vz,vt); + auto* navigator = gGeoManager->GetCurrentNavigator(); + auto* volume = navigator->GetCurrentVolume(); + vertex->setVolume( volume->GetName() ); + mVertexTable.push_back( vertex ); // mVertexTable owns pointer + } + + return vertex; + +} +//___________________________________________________________________________________________________________________ +TParticle *StMCParticleStack::PopNextTrack( int &itrack ) +{ + + // Start with invalid track index + itrack = -1; + + // The stack is empty. Signal the end. + if ( mStack.empty() ) + { + return NULL; + } + + // Get the particle on the top of the stack + TParticle *particle = mStack.back(); mStack.pop_back(); + itrack = mStackIdx.back(); mStackIdx.pop_back(); + + // Set the current track number + mCurrent = itrack; + + return particle; + +} +//___________________________________________________________________________________________________________________ +// +//___________________________________________________________________________________________________________________ +TParticle *StMCParticleStack::PopPrimaryForTracking( int i ) +{ + LOG_INFO << "PopPrimaryForTracking array size = " << mArraySize << endm; + + assert(iGetEntriesFast(); +} +//___________________________________________________________________________________________________________________ +// +//___________________________________________________________________________________________________________________ +TParticle *StMCParticleStack::GetCurrentTrack() const +{ + return GetParticle(mCurrent); +} +//___________________________________________________________________________________________________________________ +int StMCParticleStack::GetCurrentTrackNumber() const +{ + return mCurrent; +} +//___________________________________________________________________________________________________________________ +int StMCParticleStack::GetCurrentParentTrackNumber() const +{ + TParticle *current = GetCurrentTrack(); + return (current)? current->GetFirstMother() : -1; +} +//___________________________________________________________________________________________________________________ +TParticle *StMCParticleStack::GetParticle( int idx ) const +{ + return (TParticle *)(*mArray)[idx]; +} +//___________________________________________________________________________________________________________________ +void StMCParticleStack::Clear( const Option_t *opts ) +{ + +#if 0 + LOG_INFO << "TParticle table" << endm; + int index = 0; + for ( auto obj : (*mArray) ) { + + TParticle* part = dynamic_cast( obj ); assert(part); + LOG_INFO << Form("[%04i] ",index++) << *part << endm; + + } + + index = 0; + LOG_INFO << "StarMCParticle table" << endm; + for ( auto p : mParticleTable ) { + LOG_INFO << Form("[%04i] ",index++) << *p << endm; + } + + index = 0; + LOG_INFO << "StarMCVertex table" << endm; + for ( auto v : mVertexTable ) { + LOG_INFO << Form("[%04i] ",index++) << *v << endm; + if ( v->parent() ) { + LOG_INFO << " " << *(v->parent()) << " --> " << endm; + } + for ( auto d : v->daughters() ) { + LOG_INFO << " " << *d << endm; + } + } +#endif + + + mArray->Clear(); mPersistentTrack.clear(); + mStack.clear(); mStackIdx.clear(); + mCurrent = -1; + mArraySize = 0; + mStackSize = 0; + + for ( auto v : mVertexTable ) { if (v) delete v; } + for ( auto p : mParticleTable ) { if (p) delete p; } + + mVertexTable.clear(); + mTruthTable.clear(); + mParticleTable.clear(); + +} +//___________________________________________________________________________________________________________________ + + + + + + + +//___________________________________________________________________________________________________________________ +StarMCParticle::StarMCParticle( TParticle* part, StarMCVertex* vert ) : + mStacked(part), + mStartVertex(vert), + mIntermediateVertices(), + mStopVertex(0), + mIdStack(-1), + mIdTruth(-1), + mNumHits(0), + mHits() +{ + +} +//___________________________________________________________________________________________________________________ +void StarMCParticle::addHit( DetectorHit* hit ) { + mHits.push_back( hit ); +} +//___________________________________________________________________________________________________________________ +StarMCVertex::StarMCVertex() : mVertex{0,0,0,0}, + mParent(0), + mDaughters(), + mMechanism(kPNoProcess), + mMedium(0), + mVolume("unkn"), + mIntermediate(false) +{ + + +} +//___________________________________________________________________________________________________________________ +StarMCVertex::StarMCVertex( double x, double y, double z, double t, StarMCParticle* parent) : mVertex{x,y,z,t}, + mParent(parent), + mDaughters(), + mMechanism(kPNoProcess), + mMedium(0), + mVolume("unkn"), + mIntermediate(false) +{ + + +} +//___________________________________________________________________________________________________________________ +double StarMCParticle::vx() const { assert(mStartVertex); return mStartVertex->vx(); } +double StarMCParticle::vy() const { return mStartVertex->vy(); } +double StarMCParticle::vz() const { return mStartVertex->vz(); } +//___________________________________________________________________________________________________________________ +// Helper struct +struct Particle { + int index; + TParticle* mc; + StarMCParticle* st; +}; +// Printout +ostream& operator<<(ostream& os, const Particle& part ) { + os << Form( "%-5i %-5s %-4i %-6.3f %-6.3f %-6.3f %-6.3f %-6.3f %-6.3f %-6i %-6i %-6i", + part.index, + part.mc->GetName(), + part.mc->GetStatusCode(), + part.mc->Px(), + part.mc->Py(), + part.mc->Pz(), + part.mc->Vx(), + part.mc->Vy(), + part.mc->Vz(), + part.mc->GetFirstMother(), + part.mc->GetFirstDaughter(), + part.mc->GetLastDaughter() + ); + + os << "|"; + + if ( 0==part.st ) { + os << " -null entry- "; + return os; + } + +// auto* stop = part.st->stop(); +// std::string volume = (0==stop)? "none" : stop->volume(); + +//double vx = part.st->vx(); +//double vy = part.st->vy(); +//double vz = part.st->vz(); + + // static auto* navigator = gGeoManager->GetCurrentNavigator(); + // auto* node = navigator->FindNode( vx, vy, vz ); + // //auto* volume = (node) ? node->GetVolume() : 0; + + // std::string volume = navigator->GetPath(); + + // os << Form( "%-5i %-5i %-6.3f %-6.3f %-6.3f %-6.3f %-6.3f %-6.3f %4i %4i %s", + os << Form( "%-5i %-5i %-6.3f %-6.3f %-6.3f %-6.3f %-6.3f %-6.3f %4i %4i", + part.st->GetPdg(), + part.st->GetStatus(), + part.st->px(), part.st->py(), part.st->pz(), + part.st->vx(), part.st->vy(), part.st->vz(), + part.st->idTruth(), + (int)part.st->numberOfHits() + ); + + + return os; +}; +void StMCParticleStack::StackDump( int idtruth ) { + + LOG_INFO << "-----------------------------------------------------------------------------------------" << endm; + LOG_INFO << "StarMCParticleStack::StackDump()" << endm; + LOG_INFO << "-----------------------------------------------------------------------------------------" << endm; + LOG_INFO << "N primary: " << mNumPrimary << endm; + LOG_INFO << "N particles: " << mArraySize << endm; + LOG_INFO << "Stack size: " << mStackSize << endm; + LOG_INFO << "Truth size: " << mParticleTable.size() << endm; + LOG_INFO << "-----------------------------------------------------------------------------------------" << endm; + LOG_INFO << "TParticle | StarMCParticle" << endm; + // 12345 12345 1234 123456 123456 123456 123456 123456 123456 123456 123456 123456|12345 12345 123456 123456 123456 123456 123456 123456 1234 + LOG_INFO << "index name stat px py pz vx vy vz parent daughters pdg stat px py pz vx vy vz true " << endm; + Particle p; + for ( int i=0;i( mArray->At(i) ); + p.st = mPersistentTrack[i]; + + if ( idtruth==-1 || idtruth==p.st->idTruth() ) LOG_INFO << p << endm; + + } + LOG_INFO << "-----------------------------------------------------------------------------------------" << endm; + + +} diff --git a/StRoot/StGeant4Maker/StMCParticleStack.h b/StRoot/StGeant4Maker/StMCParticleStack.h new file mode 100644 index 00000000000..55d7a67616d --- /dev/null +++ b/StRoot/StGeant4Maker/StMCParticleStack.h @@ -0,0 +1,274 @@ +#ifndef __StMCParticleStack_h__ +#define __StMCParticleStack_h__ + +#include "TObjArray.h" +#include "StarCallf77.h" +#include "TVirtualMCStack.h" +#include "TDataSet.h" +#include "TMCProcess.h" +#include "TParticle.h" +#include "TClonesArray.h" +#include +#include +#include +#include + +class DetectorHit; + + +/** + \class StMCParticleStack + \author Jason C. Webb + \brief Implementation of the VMC particle stack for use in STAR + +*/ + +class StarMCParticle; +class StarMCVertex; + +class StarMCParticle { + + // TODO: add primary, secondary flags + +public: + StarMCParticle( TParticle* particle=0, StarMCVertex* start=0 ); +// StarMCParticle( const StarMCParticle& ); +// StarMCParticle( const StarMCParticle&& ) = default; + ~StarMCParticle(){ /* nada */ }; + + const TParticle* particle() const { return mStacked; } + + double px() const { assert(mStacked); return mStacked->Px(); } + double py() const { assert(mStacked); return mStacked->Py(); } + double pz() const { assert(mStacked); return mStacked->Pz(); } + double pt() const { return sqrt( px()*px()+py()*py() ); } + double E() const { assert(mStacked); return mStacked->Energy(); } + + double vx() const; + double vy() const; + double vz() const; + + const char* GetName() const { assert(mStacked); return mStacked->GetName(); } + const int GetPdg() const { assert(mStacked); return mStacked->GetPdgCode(); } + const int GetStatus() const { assert(mStacked); return mStacked->GetStatusCode(); } + + const StarMCVertex* start() const { return mStartVertex; } + const StarMCVertex* stop() const { return mStopVertex; } + + void setStartVertex( StarMCVertex* v ){ mStartVertex = v; } + void addIntermediateVertex( StarMCVertex* v ){ mIntermediateVertices.push_back(v); } + void setStopVertex( StarMCVertex* v ){ mStopVertex = v; } + + std::vector intermediate() const { return mIntermediateVertices; } + + void setIdStack( int id ) { mIdStack = id; } + int idStack() const { return mIdStack; } + + void setIdTruth( int id ) { mIdTruth = id; } + int idTruth() const { return mIdTruth; } + + //const long long numberOfHits(){ return mNumHits; } + //void addHit(){ mNumHits++; } + + const long long numberOfHits(){ return mHits.size(); } + void addHit( DetectorHit* hit );//{ mHits.push_back(hit); } + + std::vector& hits(){ return mHits; } + + +private: +protected: + + TParticle* mStacked; /// Pointer to the stacked particle + StarMCVertex* mStartVertex; /// Pointer to the start vertex + std::vector mIntermediateVertices; /// Pointer to the intermediate vertex + StarMCVertex* mStopVertex; /// Pointer to the stop vertex + + int mIdStack; /// Track identity on stack + int mIdTruth; + long long mNumHits; /// Number of hits registered on the track + + std::vector mHits; /// List of hits on track + +}; + +class StarMCVertex { +public: + StarMCVertex(); + StarMCVertex( double vx, double vy, double vz, double vt, StarMCParticle* parent=0 ); +// StarMCVertex( const StarMCVertex& ); +// StarMCVertex( const StarMCVertex&& ) = default; + ~StarMCVertex(){ /* nada */ }; + + double distance( double vx_, double vy_, double vz_ ){ + double vx2 = (vx_-mVertex[0])*(vx_-mVertex[0]); + double vy2 = (vy_-mVertex[1])*(vy_-mVertex[1]); + double vz2 = (vz_-mVertex[2])*(vz_-mVertex[2]); + return sqrt(vx2+vy2+vz2); + }; + + double vx() const { return mVertex[0]; } + double vy() const { return mVertex[1]; } + double vz() const { return mVertex[2]; } + double tof() const { return mVertex[3]; } + + void setParent ( StarMCParticle* _parent ){ mParent = _parent; } + void addDaughter( StarMCParticle* daughter ){ mDaughters.push_back( daughter ); } + + const StarMCParticle* parent() const { return mParent; } + const std::vector& daughters() const { return mDaughters; } + + void setMedium( const int medium ) { mMedium = medium; } + int medium() const { return mMedium; } + + void setProcess( const TMCProcess p ) { mMechanism=p; } + TMCProcess process() const { return mMechanism; } + + void setVolume( const char* name ){ mVolume = name; } + std::string volume() const { return mVolume; } + + void setIntermediate( bool stat=true ){ mIntermediate=true; } + bool intermediate(){ return mIntermediate; } + +private: +protected: + + double mVertex[4]; /// Position of the vertex + StarMCParticle* mParent; /// Parent particle + std::vector mDaughters; /// Decay daughters / interaction products + TMCProcess mMechanism; /// Creation mechanism + int mMedium; /// Medium ID + std::string mVolume; /// Name of the volume + bool mIntermediate; /// Vertex is an intermediate vtx + +}; + +std::ostream& operator<<(std::ostream& os, const StarMCParticle& p); +std::ostream& operator<<(std::ostream& os, const TParticle& p); +std::ostream& operator<<(std::ostream& os, const StarMCVertex& v); + +class StMCParticleStack : public TVirtualMCStack +{ + public: + + StMCParticleStack( const Char_t *name = "stack" ); + ~StMCParticleStack(); + + + /// + /// ROOT/VMC method to create a new particle and push into stack + /// + /// @param toBeDone - 1 if particles should go to tracking, 0 otherwise + /// @param parent - number of the parent track, -1 if track is primary + /// @param pdg - PDG encoding + /// @param px, py, pz - particle momentum [GeV/c] + /// @param e - total energy [GeV] + /// @param vx, vy, vz - position [cm] + /// @param tof - time of flight [s] + /// @param polx, poly, polz - polarization + /// @param mech - creator process VMC code + /// @param ntr - track number (is filled by the stack + /// @param weight - particle weight + /// @param is - generation status code + virtual void PushTrack(int toBeDone, int parent, int pdg, + double px, double py, double pz, double e, + double vx, double vy, double vz, double tof, + double polx, double poly, double polz, + TMCProcess mech, int& ntr, double weight, + int is); + + + /// The stack has to provide two pop mechanisms: + /// The first pop mechanism required. + /// Pop all particles with toBeDone = 1, both primaries and seconadies. + /// @param itrack is the index of the track in the array of all particles + virtual TParticle* PopNextTrack(int& itrack); + + /// The second pop mechanism required. + /// Pop only primary particles with toBeDone = 1, stacking of secondaries + /// is done by MC + /// @param i is the index of the track to be "popped". Note that "pop" here is a misnomer... no stack is being popped... we are only accessing the track with index i. Nor is there really any distinction between "primary" and "secondary" here... So I'd like to see Alice's actual implementation of this rather than their poorly documented examples. Looks like they use this just to index a track. + virtual TParticle* PopPrimaryForTracking(int i); + + /// Set the current track number + virtual void SetCurrentTrack(int trackNumber); + + /// Total number of tracks + virtual int GetNtrack() const; + + /// Total number of primary tracks + virtual int GetNprimary() const { return mNumPrimary; } + + /// Current track particle + virtual TParticle* GetCurrentTrack() const; + + /// Current track number + virtual int GetCurrentTrackNumber() const; + + /// Number of the parent of the current track + virtual int GetCurrentParentTrackNumber() const; + + /// Retrieve the ith particle in the array + virtual TParticle *GetParticle( const int i ) const; + + /// Clear the stack + virtual void Clear( const Option_t *opts="" ); + + /// Get the current stack size + virtual int GetStackSize(){ return mStack.size(); } + + /// Print out the particle table + void StackDump( int idtruth=-1 ); + + + /// Obtain the current particle truth +// const StarMCParticle* GetCurrentTruth() const { return mParticleTable.back(); } + + std::vector& GetTruthTable() { return mTruthTable; } + std::vector& GetParticleTable(){ return mParticleTable; } + std::vector& GetVertexTable() { return mVertexTable; } + + StarMCVertex* GetVertex( double vx, double vy, double vz, double vt, int proc=-1 ); + + StarMCParticle* GetCurrentPersistentTrack(); + + int GetIdTruth( StarMCParticle* part ){ return mIdTruthFromParticle[part]; } + + void SetScoring( const float rmax, const float zmax, const float emin ){ + mScoringRmax=rmax; + mScoringZmax=zmax; + mScoringEmin=emin; + }; + + private: + protected: + + int mNumPrimary; + int mCurrent; + + int mArraySize; + TClonesArray *mArray; + std::vector mPersistentTrack; + + int mStackSize; + std::list mStack; // note: vector may be faster + std::list mStackIdx; // note: vector may be faster + + + + std::vector mTruthTable; + std::vector mParticleTable; + std::vector mVertexTable; + + std::map mStackToTable; + std::map mIdTruthFromParticle; + + float mScoringRmax; + float mScoringZmax; + float mScoringEmin; + + // ClassDef(StMCParticleStack,0); + +}; + +#endif diff --git a/StRoot/StGeant4Maker/StSensitiveDetector.cxx b/StRoot/StGeant4Maker/StSensitiveDetector.cxx new file mode 100644 index 00000000000..1f83efa83dc --- /dev/null +++ b/StRoot/StGeant4Maker/StSensitiveDetector.cxx @@ -0,0 +1,116 @@ +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include + +//TVirtualMC* mc = 0; +TGeoNavigator* navigator = 0; + +#include +#include + +#include +//____________________________________________________________________________________________ +DetectorHit::DetectorHit() : id(0), idtruth(0), volu{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0}, copy{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0}, numbv{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0}, path(), nsteps(0), user() +{ + /* nada */ +} +TrackerHit::TrackerHit() : DetectorHit(), + position_in{0,0,0,0}, position_out{0,0,0,0}, + momentum_in{0,0,0,0}, momentum_out{0,0,0,0}, + de(0), ds(0), length(0), lgam(0) +{ + /*nada*/ +} +CalorimeterHit::CalorimeterHit() : DetectorHit(), position_in{0,0,0,0}, de(0) { /* nada */ } + +//____________________________________________________________________________________________ +StSensitiveDetector::StSensitiveDetector( const char* name, const char* title ) : TVirtualMCSensitiveDetector(name,title), mVolumes(), mAgMLInfo(0), mCollection(0) { + LOG_DEBUG << "SD created for " << name << " " << title << endm; +} +//____________________________________________________________________________________________ +void StSensitiveDetector::Initialize(){ + navigator = gGeoManager->GetCurrentNavigator(); + +} +//____________________________________________________________________________________________ +void StSensitiveDetector::addVolume( TGeoVolume* volume ) { + if ( 0 == mVolumes.size() ) { + mAgMLInfo = getExtension(volume); + + TString cname = mAgMLInfo->GetFamilyName(); cname += "_hits"; + TString ctitle = mAgMLInfo->GetModuleName(); ctitle += " "; ctitle += cname; + + if ( DetectorType::kTracker == detectorType() ) { + mCollection = new StTrackerHitCollection(cname.Data(),ctitle.Data()); + mCollection->SetUserStack(mUserStack); + LOG_DEBUG << "Setting tracker collection" << endm; + } + if ( DetectorType::kCalorimeter == detectorType() ) { + mCollection = new StCalorimeterHitCollection(cname.Data(),ctitle.Data()); + mCollection->SetUserStack(mUserStack); + LOG_DEBUG << "Setting calorimeter collection" << endm; + } + + } + + mVolumes.push_back( volume ); + +}; +//____________________________________________________________________________________________ +void StSensitiveDetector::ProcessHits(){ + + // Is this a charged particle? If not, skip it... + TVirtualMC* mc = (TMCManager::Instance()) ? + TMCManager::Instance()->GetCurrentEngine() : + TVirtualMC::GetMC(); + if ( 0 == mc->TrackCharge() ) return; + + // The actual hit processing occurs in the collection. + mCollection->ProcessHits(); + + return; + +} +//____________________________________________________________________________________________ +void StSensitiveDetector::EndOfEvent(){ + + mCollection->EndOfEvent(); + +} +//____________________________________________________________________________________________ +void StSensitiveDetector::Clear(Option_t* o) { + mCollection->Clear(); +} +//____________________________________________________________________________________________ +StSensitiveDetector::DetectorType StSensitiveDetector::detectorType() { + + // For the time being, just flag on the name of the module to decide tracker vs calorimeter + if ( 0 == mAgMLInfo ) { + return DetectorType::kUninitialized; + } + + TString module = mAgMLInfo->GetModuleName(); + module.ToLower(); + + if ( module.Contains("cal") ) { + return DetectorType::kCalorimeter; + } + else { + return DetectorType::kTracker; + } + +} +//____________________________________________________________________________________________ +int StSensitiveDetector::numberOfHits(){ return int( mCollection->numberOfHits() ); } +//____________________________________________________________________________________________ +void StSensitiveDetector::SetUserStack( TVirtualMCStack* stack ) { mUserStack = stack; } + diff --git a/StRoot/StGeant4Maker/StSensitiveDetector.h b/StRoot/StGeant4Maker/StSensitiveDetector.h new file mode 100644 index 00000000000..8ae0775273c --- /dev/null +++ b/StRoot/StGeant4Maker/StSensitiveDetector.h @@ -0,0 +1,105 @@ +#ifndef __StSensitiveDetector_h__ +#define __StSensitiveDetector_h__ + +#include +#include +#include +#include +#include +#include + +class TVirtualMCStack; + +class AgMLExtension; +class StHitCollection; + +class DetectorHit { +public: + + DetectorHit(); + virtual ~DetectorHit(){ /* nada */ }; + + static const unsigned int maxdepth = 15; + + unsigned int id; /// unique ID assigned to hit + unsigned int idtruth; /// unique ID of the track + int volu[maxdepth]; /// volume numbers specifying path to hit + int copy[maxdepth]; /// copy numbers specifying path to the hit + int numbv[maxdepth]; /// "Reduced" numbering + int volId; /// Unique volume ID + + TString path; + + unsigned int nsteps; /// number of steps inside volume + + std::vector user; /// user specified hits + +}; + +class TrackerHit : public DetectorHit { +public: + + TrackerHit(); + virtual ~TrackerHit(){ /* nada */ } + + double position_in[4]; /// x,y,z,t position where track entered volume + double position_out[4]; /// x,y,z,t position where track exited volume + + double momentum_in[4]; + double momentum_out[4]; + + double de; + double ds; + + double length; /// total track length to this point + double lgam; /// log10( Ekin / mass ) + +}; + +class CalorimeterHit : public DetectorHit { +public: + + CalorimeterHit(); + virtual ~CalorimeterHit(){ /* nada */ } + + double position_in[4]; /// x,y,z,t position where track entered volume + double de; + +}; + +class StSensitiveDetector : public TVirtualMCSensitiveDetector { +public: + StSensitiveDetector( const char* sdname, const char* title ); + virtual ~StSensitiveDetector(){ /* nada */ } + + void Initialize(); + void ProcessHits(); + void EndOfEvent(); + void Clear(Option_t* o=""); + + void addVolume(TGeoVolume *v); + int numberOfVolumes(){ return mVolumes.size(); } + + int numberOfHits();//{ return int( mCollection->size() ); } + + StHitCollection* hits(){ return mCollection; } + + enum class DetectorType { kUninitialized, kCalorimeter, kTracker }; + + DetectorType detectorType(); + + void SetUserStack( TVirtualMCStack* stack ); + +private: +protected: + + std::vector mVolumes; + + AgMLExtension* mAgMLInfo; + + StHitCollection* mCollection; + TVirtualMCStack* mUserStack; + +}; + +#endif diff --git a/StRoot/StGeant4Maker/macros/DrawHits.C b/StRoot/StGeant4Maker/macros/DrawHits.C new file mode 100644 index 00000000000..49cbc407ce1 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/DrawHits.C @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +TH2F* hYX = 0; +TH2F* vYX = 0; +TCanvas* hcanvas = 0; +TCanvas* vcanvas = 0; +void DrawHits() { + +if ( 0==hYX ) hYX = new TH2F("hYX","Hits ;x [cm]; y [cm]", 601,-300.5,300.6,601,-300.5,300.5 ); +if ( 0==vYX ) vYX = new TH2F("vYX","Vertices;x [cm]; y [cm]", 601,-300.5,300.6,601,-300.5,300.5 ); + +hYX->Reset(); +vYX->Reset(); + +TTable* vertices = (TTable*)chain->FindByName("g2t_vertex"); +TTable* tpchits = (TTable*)chain->FindByName("g2t_tpc_hit"); +TTable* emchits = (TTable*)chain->FindByName("g2t_emc_hit"); + +int nvtx=vertices->GetNRows(); +int ntpc=tpchits->GetNRows(); +int nemc=emchits->GetNRows(); + +for ( int i=0;iAt(i); + double x = v->ge_x[0]; + double y = v->ge_x[1]; + vYX->Fill(x,y); +} + +for ( int i=0;iAt(i); + double x = v->x[0]; + double y = v->x[1]; + hYX->Fill(x,y); +} + +for ( int i=0;iAt(i); + double x = v->x; + double y = v->y; + hYX->Fill(x,y); +} + +hcanvas=new TCanvas("hcanvas","TPC and BEMC hits",500,500); hYX->Draw("colz"); +vcanvas=new TCanvas("vcanvas","Track vertices ",500,500); vYX->Draw("colz"); + +}; diff --git a/StRoot/StGeant4Maker/macros/gamma.C b/StRoot/StGeant4Maker/macros/gamma.C new file mode 100644 index 00000000000..70268d9aa2b --- /dev/null +++ b/StRoot/StGeant4Maker/macros/gamma.C @@ -0,0 +1,3 @@ +void gamma(int n=1, double ptmn=1.0, double ptmx=10.0, double etamn=-.5, double etamx=.5 ) { + particleGun(n,"gamma",ptmn,ptmx,etamn,etamx); +}; diff --git a/StRoot/StGeant4Maker/macros/geant4star b/StRoot/StGeant4Maker/macros/geant4star new file mode 100755 index 00000000000..7a2dfd7c9a0 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/geant4star @@ -0,0 +1,14 @@ +#!/bin/csh -f + +setenv __G4STAR_MYSQL_DIR__ `mysql_config --variable=pkglibdir` + +setenv ROOT_INCLUDE_PATH ${STAR}:${STAR}/StRoot:${STAR}/StRoot/StStarLogger:${STAR}/StRoot/StGeant4Maker:${STAR}:StRoot/StarGenerator/BASE:${STAR}/StarVMC/StarAgmlLib/:${STAR}/.sl73_x8664_gcc485/include/ + +if ( -e ./StRoot/StGeant4Maker/macros/geant4star.C ) then + root.exe -l ./StRoot/StGeant4Maker/macros/initStar.C ./StRoot/StGeant4Maker/macros/geant4star.C $argv +else + root.exe -l $STAR/StRoot/StGeant4Maker/macros/initStar.C $STAR/StRoot/StGeant4Maker/macros/geant4star.C $argv +endif + + + diff --git a/StRoot/StGeant4Maker/macros/geant4star-leakcheck b/StRoot/StGeant4Maker/macros/geant4star-leakcheck new file mode 100755 index 00000000000..abeffee47d5 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/geant4star-leakcheck @@ -0,0 +1,10 @@ +#!/bin/csh -f + +valgrind --tool=memcheck \ + --error-limit=no \ + --suppressions=$ROOTSYS/etc/valgrind-root.supp \ + --leak-check=yes \ + --show-leak-kinds=all \ +root.exe -l macros/initStar.C macros/geant4star.C $argv + + diff --git a/StRoot/StGeant4Maker/macros/geant4star-memcheck b/StRoot/StGeant4Maker/macros/geant4star-memcheck new file mode 100755 index 00000000000..02c0cbc355b --- /dev/null +++ b/StRoot/StGeant4Maker/macros/geant4star-memcheck @@ -0,0 +1,9 @@ +#!/bin/csh -f + +valgrind --tool=memcheck \ + --error-limit=no \ + --suppressions=$ROOTSYS/etc/valgrind-root.supp \ + --leak-check=no \ +root.exe -l macros/initStar.C macros/geant4star.C $argv + + diff --git a/StRoot/StGeant4Maker/macros/geant4star.C b/StRoot/StGeant4Maker/macros/geant4star.C new file mode 100644 index 00000000000..0ab6508f35e --- /dev/null +++ b/StRoot/StGeant4Maker/macros/geant4star.C @@ -0,0 +1,347 @@ +class StBFChain; +StBFChain* chain = 0; + +#include +#include +#include + +extern "C" { + void Load( const char* lib ); +} + +// Random number generator seed +int __rngSeed = 12345; +bool __export = false; +TString __rngName = ""; +TString __geometry_tag="dev2021"; + +// Add a new maker to the chain +void addMaker( const char* name, const char* maker ) { + LOG_INFO << "// Adding maker " << maker << endm; + LOG_INFO << "auto* _" << name << " = new " << maker << endm; + gROOT->ProcessLine( Form( "auto* _%s = new %s;", name, maker ) ); +} + +// Add a new event generator to the primary event generator +void addGenerator( const char* name, const char* maker ) { + LOG_INFO << "auto* _" << name << " = new " << maker << endm; + gROOT->ProcessLine( Form( "auto* _%s = new %s;", name, maker ) ); + gROOT->ProcessLine( Form( "_primary->AddGenerator( _%s );", name ) ); +} + +// Add a filter to the primary event generator +void addFilter( const char* name ) { + + TString myname = name; myname.ToLower(); + LOG_INFO << "auto* _" << myname.Data() << " = new " << name << endm; + gROOT->ProcessLine( Form( "auto* _%s = new %s;", myname.Data(), name ) ); + gROOT->ProcessLine( Form( "_primary->AddFilter( _%s );", myname.Data() ) ); + +} + +std::map _generatorMap = { + { "genreader", "StarGenEventReader" } +}; + +// Hack to make sure finish is called on the chain +struct __Fini { + ~__Fini() { + gROOT->ProcessLine("chain->Finish();"); + } +} __fini__; + +bool hasRuntimeArg( const char* arg_ ) { + bool result = false; + for ( int i=0; iArgc();i++ ) { + TString arg = gApplication->Argv(i); + arg.ReplaceAll("--",""); + if ( arg.Contains(arg_) ) { + result = true; + break; + } + } + return result; +} + +void loadStar(TString mytag="dev2021", Bool_t agml = true ) +{ + + gROOT->ProcessLine("chain = new StBFChain();"); + gROOT->ProcessLine("chain->cd();"); + gROOT->ProcessLine("chain->SetDebug(1);"); + + TString chainOpts = "agml geant4 geant4vmc stargen geant4mk kinematics -emc_t -ftpcT mysql nodefault "; + + // pickup command line options ala "--" and add them as a chain option + + for ( int i=0; iArgc();i++ ) { + TString arg = gApplication->Argv(i); + if ( arg.Contains("--web") || arg.Contains("notebook") ) continue; + if ( arg=="--export" ) { __export = true; continue; } // exports geometry + // Parse "--" style options for ourselves + if ( arg.Contains("--") ) { + arg.ReplaceAll("--"," "); // n.b. the space pads out the chain options + // If the option matches key=value, treat this as an attribute to be + // set on the G4 maker... + if ( arg.Contains("=") ) { + // Generally skip, but output triggers geantout chain option + if ( arg.Contains("output") ) { + chainOpts += " geantout "; + } + // By specifying a filter, load the stargeneratorfilt package + if ( arg.Contains("filter") ) { + chainOpts += " stargen.filt"; + } + } + else { + chainOpts += arg; + } + } + } + + // Set the chain options + gROOT->ProcessLine(Form("chain->SetFlags(\"%s\");",chainOpts.Data())); + + TString output = ""; + std::vector< std::string > filters; + for ( int i=0; iArgc();i++ ) { + TString arg = gApplication->Argv(i); + if ( arg.Contains("--") ) { + gMessMgr->Info() << arg.Data() << endm; + arg.ReplaceAll("--",""); + // If the option matches key=value, treat this as an attribute to be + // set on the G4 maker... + if ( arg.Contains("=") ) { + TString key = arg.Tokenize("=")->At(0)->GetName(); + TString val = arg.Tokenize("=")->At(1)->GetName(); + // std::cout << " key = [" << key.Data() << "] value = " << val.Data() << std::endl; + // Find the output filename, if given, and set as the output + if ( key=="output" ){ + output = val; + gROOT->ProcessLine(Form("chain->Set_IO_Files(\"\",\"%s\");",output.Data())); + //break; + } + if ( key=="geometry" ) { + mytag = val; + } + if ( key=="filter" ) { + filters.push_back( val.Data() ); + } + } + } + } + + + // Load shared libraries + gROOT->ProcessLine("chain->Load();"); + + // Add in star mag field + gSystem->Load("libStarMagFieldNoDict.so"); + + gROOT->ProcessLine( "int __result = chain->Instantiate();" ); + + // Now add makers... + addMaker( "primary", "StarPrimaryMaker()" ); + addMaker( "geant4", "StGeant4Maker()" ); + + // Attach filters to the primary maker... + for ( auto s : filters ) { + addFilter( s.c_str() ); + } + + + // addMaker( "pythia8", "StarPythia8()" ); + // gROOT->ProcessLine("_primary->AddGenerator( _pythia8 );"); + + // Always add the kinematic generator + addMaker( "kine", "StarKinematics()" ); + gROOT->ProcessLine("_primary->AddGenerator( _kine );"); + + + // Loop on the chain options and add in other generators which have been called for + for ( auto _s : *chainOpts.Tokenize(" ") ) { + auto s = ( dynamic_cast( _s ) ) -> String() ; // annoying + if ( _generatorMap[s] != "" ) { + addGenerator( s, _generatorMap[s] ); + } + } + + + + + + // Move outputStream after the geant maker + gROOT->ProcessLine("StMaker* __outputStream = chain->GetMaker(\"outputStream\");"); + // gROOT->ProcessLine("LOG_INFO << " + // "\"outputStream = \" << __outputStream << endm;") + + gROOT->ProcessLine("chain->AddAfter( _geant4->GetName(), __outputStream ); "); + + + + + // gROOT->ProcessLine("auto* __outputStream = chain->GetMaker(\"outputStream\"\); + + + gROOT->ProcessLine("StMaker::lsMakers(chain);"); + + + // set attributes for arguements matching --x=y + for ( int i=0; iArgc();i++ ) { + + TString arg = gApplication->Argv(i); + if ( arg.Contains("--web") || arg.Contains("notebook") ) continue; + + // Parse "--" style options for ourselves + if ( arg.Contains("--") ) { + arg.ReplaceAll("--",""); + + // If the option matches key=value, treat this as an attribute to be + // set on the G4 maker... + if ( arg.Contains("=") ) { + + TString key = arg.Tokenize("=")->At(0)->GetName(); + TString val = arg.Tokenize("=")->At(1)->GetName(); + + if ( key=="geometry" ) continue; // action already taken + if ( key=="output" ) continue; // ... ditto + if ( key=="filter" ) continue; // ... ditto + + // std::cout << "geant4star commandline option " << key.Data() << " = " << val.Data() << std::endl; + + // Process RNG seed + if ( key=="seed" ) { + __rngSeed = val.Atoi(); + gMessMgr->Info() << "Setting RNG seed --seed=" << __rngSeed << endm; + continue; + } + + if ( key=="rng" ) { + __rngName = val; + gMessMgr->Info() << "Setting RNG --rng=" << __rngName.Data() << endm; + continue; + } + + // All other variables pass through to G4 maker + if ( val.IsFloat() ) gROOT->ProcessLine(Form("_geant4->SetAttr(\"%s\",%s);", key.Data(), val.Data() )); + else gROOT->ProcessLine(Form("_geant4->SetAttr(\"%s\",\"%s\");", key.Data(), val.Data() )); + + + } + } + } + + + // + // ROOT6 command line processing + // + const char* cmds[] = { + + // Geometry instantiation + //"TString __geometry_tag = \"dev2021\";" + "AgModule::SetStacker( new StarTGeoStacker() );" + "StarGeometry::Construct(__geometry_tag);" + // "gGeoManager->Export(\"y2014x.root\");" + // "gGeoManager->Export(\"y2014x.C\");" + + }; + + //gROOT->ProcessLine( Form("TString __geometry_tag = \"%s\";", mytag.Data() ) ); + for ( auto cmd : cmds ) { + gROOT->ProcessLine( cmd ); + } + + if ( __export ) { + gROOT->ProcessLine(Form( "gGeoManager->Export(\"%s.root\");", mytag.Data() )); + } + + + + +} + +bool __initialized = false; + +bool initChain( std::vector _cmds={ "std::cout << \"Chain has been initialized.\" << std::endl;" } ) { + std::cout << "initChain is called seed = " << __rngSeed << std::endl; + if ( !__initialized ) { + + if ( __rngSeed > -1 ) { + gROOT->ProcessLine(Form("chain->SetAttr(\"Random:G4\",%i)",__rngSeed)); + // Setup RNG seed and map all ROOT TRandom here + gROOT->ProcessLine(Form("StarRandom::seed( %i );",__rngSeed)); + gROOT->ProcessLine("StarRandom::capture();"); + gMessMgr->Info() << "RNG seed set to " << __rngSeed << endm; + } + + gROOT->ProcessLine("chain->Init();"); + for ( auto cmd : _cmds ) { + gROOT->ProcessLine( cmd.c_str() ); + } + __initialized = true; + } + return true; +} + +void particleGun( const int ntrack=1, const char* particles="pi+,pi-", double ptmn=1.0,double ptmx=10.0, double etamn=-1, double etamx=2 ) { + + initChain(); + + const char* _cmds[] = { + + // Clear the chain from the previous event + "chain->Clear();", + Form("_kine->Kine(%i,\"%s\",%f,%f,%f,%f);",ntrack,particles,ptmn,ptmx,etamn,etamx), + "chain->Make();" + }; + + for ( auto cmd : _cmds ) { + gROOT->ProcessLine( cmd ); + } + +}; + + +void particleGun( const char* particle="mu+", double px=1.0/sqrt(2), double py=1.0/sqrt(2), double pz=0.0, double vx=0., double vy=0., double vz=0. ) { + + initChain(); + + const char* _cmds[] = { + "chain->Clear();", + "{", + Form("double _px=%f",px), + Form("double _py=%f",py), + Form("double _pz=%f",pz), + Form("auto _part=_kine->AddParticle(\"%s\");",particle), + "double _mass = _part->GetMass();", + "double _energy = sqrt( _px*_px+_py*_py+_pz*_pz+_mass*_mass );", + "_part->SetPx(_px);", + "_part->SetPy(_py);", + "_part->SetPz(_pz);", + "_part->SetEnergy(_energy);", + "_part->SetVx(_vx);", + "_part->SetVy(_vy);", + "_part->SetVz(_vz);", + "_part->SetTof(0);", + "chain->Make();", + "}" + }; + + for ( auto cmd : _cmds ) { + gROOT->ProcessLine( cmd ); + } + +}; + + + + +void geant4star(){ + TString cmdline="geant4star:"; + for ( int i=0;iArgc();i++ ) { + cmdline+=" "; + cmdline+=gApplication->Argv(i); + } + std::cout << cmdline.Data() << std::endl; + loadStar(); +} diff --git a/StRoot/StGeant4Maker/macros/initStar.C b/StRoot/StGeant4Maker/macros/initStar.C new file mode 100644 index 00000000000..059f4415d7f --- /dev/null +++ b/StRoot/StGeant4Maker/macros/initStar.C @@ -0,0 +1,43 @@ +#include +#include +#include + +void Load( const char* lib ) { + std::cout << "Loading shared library " << lib << std::endl; + gSystem->Load( lib ); +} + +// +// Add include paths and preload the shared libraries which are required for the geant4star.C +// macro to instantiate StBFChain. +// +void initStar() { + + for (int sig = 0; sig < kMAXSIGNALS; sig++) gSystem->ResetSignal((ESignals)sig); + + // Add a few things to the include path + gSystem->AddIncludePath(" -I$STAR/StRoot -I$STAR/StarVMC "); + gSystem->AddIncludePath(" -IStRoot -Igeom -IStarVMC -IStarVMC/Geometry/macros -I.${STAR_HOST_SYS}/include "); + gEnv->SetValue("Logger.Colors","YES"); + + gSystem->SetAclicMode(TSystem::kDebug); + + // ADdress sanitizer + // Load("/usr/lib64/libasan.so.0"); + + // Preload a few libraries + Load("libGeom.so"); + + Load("libPhysics.so"); + Load("libTable.so"); + + Load("StarRoot.so"); + Load("St_base.so"); + Load("StStarLogger.so"); + + gROOT->ProcessLine("StLoggerManager::StarLoggerInit();"); + + Load("StChain.so"); + Load("StBFChain.so"); + +}; diff --git a/StRoot/StGeant4Maker/macros/initStarG3.C b/StRoot/StGeant4Maker/macros/initStarG3.C new file mode 100644 index 00000000000..094486a666f --- /dev/null +++ b/StRoot/StGeant4Maker/macros/initStarG3.C @@ -0,0 +1,149 @@ +// macro to instantiate the Geant3 from within +// STAR C++ framework and get the starsim prompt +// To use it do +// root4star starsim.C + +class St_geant_Maker; +St_geant_Maker *geant_maker = 0; + +class StarGenEvent; +StarGenEvent *event = 0; + +class StarPrimaryMaker; +StarPrimaryMaker *_primary = 0; + +class StarKinematics; +StarKinematics *kinematics = 0; + +TF1 *ptDist = 0; +TF1 *etaDist = 0; + +void initChain(){ /* nada */ } + +// ---------------------------------------------------------------------------- +void geometry( TString tag, Bool_t agml=true ) +{ + TString cmd = "DETP GEOM "; cmd += tag; + if ( !geant_maker ) geant_maker = (St_geant_Maker *)chain->GetMaker("geant"); + geant_maker -> LoadGeometry(cmd); + // if ( agml ) command("gexec $STAR_LIB/libxgeometry.so"); +} +// ---------------------------------------------------------------------------- +void command( TString cmd ) +{ + if ( !geant_maker ) geant_maker = (St_geant_Maker *)chain->GetMaker("geant"); + geant_maker -> Do( cmd ); +} +// ---------------------------------------------------------------------------- +void trig( Int_t n=1 ) +{ + for ( Int_t i=0; iClear(); + + // Generate 1 mu minus at high pT + kinematics->Kine( 1, "mu-", 10.0, 50.0, -2.0, 2.0 ); + + + // Generate the event + chain->Make(); + + // Print the event + _primary->event()->Print(); + } +} +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +void Kinematics() +{ + + // gSystem->Load( "libStarGeneratorPoolPythia6_4_23.so" ); + gSystem->Load( "libKinematics.so"); + kinematics = new StarKinematics(); + + _primary->AddGenerator(kinematics); +} +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +void initStarG3( const char* tag="dev2021", Int_t nevents=0, Int_t rngSeed=1234 ) +{ + + // Add a few things to the include path + gSystem->AddIncludePath(" -IStRoot -I${STAR}/StRoot -Igeom -IStarVMC -I${STAR}/StarVMC -IStarVMC/Geometry/macros -I.${STAR_HOST_SYS}/include "); + gEnv->SetValue("Logger.Colors","YES"); + + gSystem->SetAclicMode(TSystem::kDebug); + + gROOT->ProcessLine(".L bfc.C"); + { + TString simple = tag; simple += " geant gstar usexgeom agml "; + bfc(0, simple ); + } + + gSystem->SetFlagsDebug("-g -std=c++0x"); + gSystem->SetFlagsOpt("-g -std=c++0x"); + + gSystem->Load( "libVMC.so"); + + gSystem->Load( "StarGeneratorUtil.so" ); + gSystem->Load( "StarGeneratorEvent.so" ); + gSystem->Load( "StarGeneratorBase.so" ); + + gSystem->Load( "libMathMore.so" ); + gSystem->Load( "xgeometry.so" ); + + gSystem->Load( "StEpdUtil.so" ); + + // Setup RNG seed and map all ROOT TRandom here + StarRandom::seed( rngSeed ); + StarRandom::capture(); + + // + // Create the primary event generator and insert it + // before the geant maker + // + // StarPrimaryMaker * + _primary = new StarPrimaryMaker(); + { + _primary -> SetFileName( "kinematics.starsim.root"); + chain -> AddBefore( "geant", _primary ); + } + + Kinematics(); + + // + // Initialize primary event generator and all sub makers + // + _primary -> Init(); + + // + // Setup geometry and set starsim to use agusread for input + // + //geometry("y2012"); + command("gkine -4 0"); + command("gfile o kinematics.starsim.fzd"); + + + // + // Setup PT and ETA distributions + // + + // Double_t pt0 = 3.0; + // ptDist = new TF1("ptDist","(x/[0])/(1+(x/[0])^2)^6",0.0,10.0); + // ptDist->SetParameter(0, pt0); + // ptDist->Draw(); + + // etaDist = new TF1("etaDist","-TMath::Erf(x+2.6)*TMath::Erf(x-2.6)",-0.8,+0.8); + + // + // Trigger on nevents + // + trig( nevents ); + + +} +// ---------------------------------------------------------------------------- + diff --git a/StRoot/StGeant4Maker/macros/muon.C b/StRoot/StGeant4Maker/macros/muon.C new file mode 100644 index 00000000000..6d856224407 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/muon.C @@ -0,0 +1,4 @@ +void muon(int n=1) { + particleGun(n,"mu+,mu-",9.9,10.1,-0.5,-0.25); + gROOT->ProcessLine("chain->Clear();"); +}; diff --git a/StRoot/StGeant4Maker/macros/pi0.C b/StRoot/StGeant4Maker/macros/pi0.C new file mode 100644 index 00000000000..d9a90ccd632 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/pi0.C @@ -0,0 +1,4 @@ +void pi0(int n=1, double ptmn=1.0, double ptmx=10.0, double etamn=-1.0, double etamx=2.0 ) { + particleGun(n,"pi0",ptmn,ptmx,etamn,etamx); +gROOT->ProcessLine("chain->Clear();"); +}; diff --git a/StRoot/StGeant4Maker/macros/pion.C b/StRoot/StGeant4Maker/macros/pion.C new file mode 100644 index 00000000000..545c9bbdc73 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/pion.C @@ -0,0 +1,3 @@ +void pion( int n=10, double ptmn=0.2, double ptmx=5.0, double etamn=2.5, double etamx=4.0 ) { + particleGun(n,"pi+,pi-",ptmn,ptmx,etamn,etamx); +}; diff --git a/StRoot/StGeant4Maker/macros/pythia6.C b/StRoot/StGeant4Maker/macros/pythia6.C new file mode 100644 index 00000000000..0dd2d499cdc --- /dev/null +++ b/StRoot/StGeant4Maker/macros/pythia6.C @@ -0,0 +1,174 @@ +#include "StChain/StMaker.h" + +#include "StarGenerator/BASE/StarPrimaryMaker.h" +#include "StarGenerator/UTIL/StarParticleData.h" + +#include "StarGenerator/Pythia6_4_28/StarPythia6.h" + +#include "StMessMgr.h" +#include "TList.h" +#include "TAttr.h" +#include "TString.h" +#include + +#include + +StarParticleData& particleData = StarParticleData::instance(); +StarPrimaryMaker* primaryMk = 0; +StarPythia6* pythia6mk = 0; + +int nevents = 0; + +extern "C" { + + // Interface to the pythia configuration command + void pygive_( const char* give, int ngive ); + +}; + +void PyGive( std::string give ) { + pygive_( give.c_str(), give.size() ); +} + +//___________________________________________________________________ +void init(); // initialize the chain +void eventloop(); +void drellyan(); +//___________________________________________________________________ +void pythia6() +{ + + init(); + eventloop(); + +} +//___________________________________________________________________ +void init() { + + primaryMk = dynamic_cast( chain->GetMaker("PrimaryMaker") ); assert(primaryMk); + auto* geant4mk = dynamic_cast (chain->GetMaker("geant4star") ); assert(geant4mk); + + assert(&particleData); + + nevents = geant4mk->IAttr("nevents"); + LOG_INFO << "Number of events to process" << nevents << endm; + LOG_INFO << "Create and register pythia6 maker to primaryMk = " << primaryMk << endm; + + std::string blue = geant4mk->SAttr("blue"); if ( blue == "" ) blue="proton"; + std::string yell = geant4mk->SAttr("yell"); if ( yell == "" ) yell="proton"; + double Ecms = geant4mk->DAttr("Ecms"); if ( Ecms <= 0.0 ) Ecms = 510.0; + + LOG_INFO << "Blue beam " << blue.c_str() << endm; + LOG_INFO << "Yellow beam " << yell.c_str() << endm; + LOG_INFO << "Ecms = " << Ecms << " GeV " << endm; + + pythia6mk = new StarPythia6(); + pythia6mk->SetFrame("CMS", Ecms ); + pythia6mk->SetBlue( blue.c_str() ); + pythia6mk->SetYell( yell.c_str() ); + + int setcount = 0; + auto* setlist = dynamic_cast(geant4mk->GetAttr()); + setlist->Print(); + TIter Next(setlist); + TNamed* obj = 0; + // ROOT's interface is a bit annoying here. It has reveresed the order of the + // arguements stuffed into the TList. And I don't see an easy (read syntatically + // clear and concise) way to reverse iterate over a TList... so... + std::vector mylist; + std::vector closeDecays; + std::vector openDecays; + while (( obj = dynamic_cast(Next()) )) { + TString str = obj->GetName(); + TString tit = obj->GetTitle(); + if ( str.Contains("pythia6:set:") ) { + str.ReplaceAll("pythia6:set:",""); + TString cmd = str + "="; + if ( tit.IsDigit() ) { // integer digits + cmd += tit; + } + else if ( tit.IsFloat() ) { // floating point + // keep to five decimal places + cmd += Form( "%.5f", tit.Atof() ); + } + else { + cmd += tit; + } + mylist.push_back(cmd); + } + if ( str.Contains("pythia6:tune") ) { + int tune = pythia6mk->IAttr("pythia6:tune"); + pythia6mk->PyTune(tune); // set tune + } + // if ( str.Contains("pythia6:drellyan:ee") ) { + // // initialize DY --> ee + // drellyan(); + // } + if ( str.Contains("pythia6:closedecay") ) { + TString ex = Form("pythia6mk->CloseDecays(%s);", tit.Data()); + //LOG_INFO<< ex.Data() << endm; + //gROOT->ProcessLine(ex.Data()); + closeDecays.push_back(ex); + + } + if ( str.Contains("pythia6:opendecay") ) { + TString ex = Form("pythia6mk->OpenDecay(%s);", tit.Data()); + // LOG_INFO<< ex.Data() << endm; + // gROOT->ProcessLine(ex.Data()); + openDecays.push_back(ex); + } + } + + for ( auto iter=mylist.rbegin(); iter!=mylist.rend(); iter++ ) { + // TString cmd=*iter; + std::string cmd = (*iter).Data(); + LOG_INFO << "execute pythia6 command " << cmd.c_str() << endm; + // pythia6mk->PyGive(cmd.Data()); + PyGive(cmd); + setcount++; + } + + for ( auto iter=closeDecays.begin(); iter != closeDecays.end();iter++ ) { + gROOT->ProcessLine( (*iter) ); + } + for ( auto iter=openDecays.begin(); iter!= openDecays.end();iter++ ) { + gROOT->ProcessLine( (*iter) ); + } + + // Always default to nondiffractive (i.e. as-close-to-minbias-as-documented) + primaryMk->AddGenerator(pythia6mk); + + chain->Init(); + +} +//___________________________________________________________________ +void eventloop() { + + for ( int event = 0; event < nevents; event++ ) { + LOG_INFO << "[geant4star running event " << event << "/" << nevents << "]" << endm; + chain->Clear(); + chain->Make(); + primaryMk->event()->Print(); + } + +} +//___________________________________________________________________ +void drellyan() { + + auto& pyjets = pythia6mk->pyjets(); + auto& pysubs = pythia6mk->pysubs(); + auto& pydat3 = pythia6mk->pydat3(); + auto& pypars = pythia6mk->pypars(); + auto& pyint5 = pythia6mk->pyint5(); + + LOG_INFO << "DRELL YAN Z0/GAMMA* e+e-" << endm; + + pysubs.msel = 0; // select specific processes + pysubs.msub(1) = 1; // ffbar --> Z0/gamma* + // others?? 15? 19? + + // close decays for the Z (and I believe the gamma* as well) + pythia6mk->CloseDecays(23); + pythia6mk->OpenDecay( 23, 182, 2 ); // limit decay to electrons + +} diff --git a/StRoot/StGeant4Maker/macros/pythia8.C b/StRoot/StGeant4Maker/macros/pythia8.C new file mode 100644 index 00000000000..a27e0d90f3c --- /dev/null +++ b/StRoot/StGeant4Maker/macros/pythia8.C @@ -0,0 +1,108 @@ +#include "StChain/StMaker.h" + +#include "StarGenerator/BASE/StarPrimaryMaker.h" +#include "StarGenerator/UTIL/StarParticleData.h" + +#include "StarGenerator/Pythia8_1_86/StarPythia8.h" + +#include "StMessMgr.h" +#include "TList.h" +#include "TAttr.h" +#include "TString.h" +#include + +#include + +StarParticleData& particleData = StarParticleData::instance(); +StarPrimaryMaker* primaryMk = 0; + +int nevents = 0; + +//___________________________________________________________________ +void init(); // initialize the chain +void eventloop(); + +//___________________________________________________________________ +void pythia8() +{ + + init(); + eventloop(); + + // Finish ... chain has been finished... so wtf? + chain->Finish(); + +} +//___________________________________________________________________ +void init() { + + primaryMk = dynamic_cast( chain->GetMaker("PrimaryMaker") ); assert(primaryMk); + auto* geant4mk = dynamic_cast (chain->GetMaker("geant4star") ); assert(geant4mk); + + assert(&particleData); + + nevents = geant4mk->IAttr("nevents"); + LOG_INFO << "Number of events to process" << nevents << endm; + LOG_INFO << "Create and register pythia8 maker to primaryMk = " << primaryMk << endm; + + std::string blue = geant4mk->SAttr("blue"); if ( blue == "" ) blue="proton"; + std::string yell = geant4mk->SAttr("yell"); if ( yell == "" ) yell="proton"; + double Ecms = geant4mk->DAttr("cms"); if ( Ecms <= 0.0 ) Ecms = 510.0; + + LOG_INFO << "Blue beam " << blue.c_str() << endm; + LOG_INFO << "Yellow beam " << yell.c_str() << endm; + LOG_INFO << "Ecms = " << Ecms << " GeV " << endm; + + StarPythia8* pythia8 = new StarPythia8(); + pythia8->SetFrame("CMS", Ecms ); + pythia8->SetBlue( blue.c_str() ); + pythia8->SetYell( yell.c_str() ); + + int setcount = 0; + auto* setlist = dynamic_cast(geant4mk->GetAttr()); + setlist->Print(); + TIter Next(setlist); + TNamed* obj = 0; + // ROOT's interface is a bit annoying here. It has reveresed the order of the + // arguements stuffed into the TList. And I don't see an easy (read syntatically + // clear and concise) way to reverse iterate over a TList... so... + std::vector mylist; + while (( obj = dynamic_cast(Next()) )) { + TString str = obj->GetName(); + TString tit = obj->GetTitle(); + if ( str.Contains("pythia8:set:") ) { + str.ReplaceAll("pythia8:set:",""); + TString cmd = str + "=" + tit; + mylist.push_back(cmd); + } + } + + for ( auto iter=mylist.rbegin(); iter!=mylist.rend(); iter++ ) { + TString cmd=*iter; + LOG_INFO << cmd.Data() << endm; + pythia8->Set(cmd.Data()); + setcount++; + } + + + + + // Always default to nondiffractive (i.e. as-close-to-minbias-as-documented) + if ( 0==setcount ) pythia8->Set("SoftQCD:nonDiffractive=on"); + + primaryMk->AddGenerator(pythia8); + + chain->Init(); + +} +//___________________________________________________________________ +void eventloop() { + + for ( int event = 0; event < nevents; event++ ) { + LOG_INFO << "[geant4star running event " << event << "/" << nevents << "]" << endm; + chain->Clear(); + chain->Make(); + primaryMk->event()->Print(); + } + +} diff --git a/StRoot/StGeant4Maker/macros/runGeant4Simulation.xml b/StRoot/StGeant4Maker/macros/runGeant4Simulation.xml new file mode 100644 index 00000000000..5801558dab0 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/runGeant4Simulation.xml @@ -0,0 +1,49 @@ + + + + + + + + + +]> + + + + + + setup 64b + stardev + source /star/simu/simu/root6.16.00/bin/thisroot.csh + source /star/simu/simu/geant4.10.3.3/bin/geant4.csh /star/simu/simu/geant4.10.3.3/bin/ + + which root + which root.exe + + setenv ASAN_OPTIONS abort_on_error=true + + cp &WORKINGDIR;/geant4star . + cp -R &WORKINGDIR;/macros . + cp -R &WORKINGDIR;/macros . + cp -R &WORKINGDIR;/StRoot . + cp -R &WORKINGDIR;/StarVMC . + cp -R &WORKINGDIR;/StDb . + cp -R &WORKINGDIR;/mgr . + cp -R &WORKINGDIR;/.$STAR_HOST_SYS . + cp &WORKINGDIR;/fini.C . + ls -la + + geant4star -q -b --stepping:punchout:stop=2 --seed=${JOBINDEX} macros/test_stress_acceptance.C\(&NEVENT;,&NTRACK;\) >& stress-&NEVENT;-&NTRACK;.${JOBINDEX}.log + mv *.log &OUTDIR; + + + + + + + + &JOBDIR; + + diff --git a/StRoot/StGeant4Maker/macros/test_forward.C b/StRoot/StGeant4Maker/macros/test_forward.C new file mode 100644 index 00000000000..0d283b3cc92 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/test_forward.C @@ -0,0 +1,21 @@ +#include +#include +#include +#include +#include + +void test_forward(int n=1,const char* particles="pi+,pi-") { + + double ptmn = 1.0; + double ptmx = 10.0; + double etamn= -2.8; + double etamx= 3.8; + + // Configure G4 maker + StMaker* _geant4 = chain->GetMaker("geant4"); + + // Run particle gun simulation + particleGun(n,particles,ptmn,ptmx,etamn,etamx); + + +}; diff --git a/StRoot/StGeant4Maker/macros/test_particle_decay.C b/StRoot/StGeant4Maker/macros/test_particle_decay.C new file mode 100644 index 00000000000..2af5be00660 --- /dev/null +++ b/StRoot/StGeant4Maker/macros/test_particle_decay.C @@ -0,0 +1,47 @@ +#include +#include +#include +#include +#include + +void test_particle_decay(int n=1,const char* particles="pi0") { + + double ptmn = 1.0; + double ptmx = 10.0; + double etamn= -1.0; + double etamx= 2.0; + + // Configure G4 maker + StMaker* _geant4 = chain->GetMaker("geant4"); + + // Run particle gun simulation + particleGun(n,particles,ptmn,ptmx,etamn,etamx); + + // gROOT->ProcessLine("chain->Clear();"); +#if 0 + StMCParticleStack* stack = (StMCParticleStack *)TVirtualMC::GetMC()->GetStack(); + + LOG_INFO << "Stack: ntrack = " << stack->GetNtrack() << endm; + LOG_INFO << "Stack: nprimary = " << stack->GetNprimary() << endm; + + int index = 0; + LOG_INFO << "StarMCParticle table" << endm; + for ( auto p : stack->GetParticleTable() ) { + LOG_INFO << Form("[%04i] ",index++) << *p << " nhits=" << p->numberOfHits() << endm; + } + + index = 0; + LOG_INFO << "StarMCVertex table" << endm; + for ( auto v : stack -> GetVertexTable() ) { + LOG_INFO << Form("[%04i] ",index++) << *v << endm; + if ( v->parent() ) { + LOG_INFO << " " << *(v->parent()) << " --> " << endm; + //LOG_INFO << Form(" %p", v->parent()) << endm; + } + for ( auto d : v->daughters() ) { + LOG_INFO << " " << *d << endm; + } + } +#endif + +}; diff --git a/StRoot/StGeant4Maker/macros/test_pi0_decay.C b/StRoot/StGeant4Maker/macros/test_pi0_decay.C new file mode 100644 index 00000000000..d68582f298c --- /dev/null +++ b/StRoot/StGeant4Maker/macros/test_pi0_decay.C @@ -0,0 +1,34 @@ +#include +#include + +void test_pi0_decay() { + + double ptmn=1.0; + double ptmx=10.0; + double etamn=-1.0; + double etamx=2.0; + + double cutgam = 999.0; + double cutele = 999.0; + double dcute = 999.0; + double dcutm = 999.0; + double bcute = 999.0; + double bcutm = 999.0; + + StMaker* _geant4 = chain->GetMaker("geant4"); + + _geant4 -> SetAttr("CUTGAM",cutgam); + _geant4 -> SetAttr("CUTELE",cutele); + _geant4 -> SetAttr("DCUTE",dcute); + _geant4 -> SetAttr("DCUTM",dcutm); + _geant4 -> SetAttr("BCUTE",bcute); + _geant4 -> SetAttr("BCUTM",bcutm); + + int number[] = { 1, 10, 100, 1000, 10000 }; + + for ( auto n : number ) { + particleGun(n,"pi0",ptmn,ptmx,etamn,etamx); + gROOT->ProcessLine("chain->Clear();"); + } + +}; diff --git a/StRoot/StGeant4Maker/macros/test_stress_acceptance.C b/StRoot/StGeant4Maker/macros/test_stress_acceptance.C new file mode 100644 index 00000000000..84a06f97d5a --- /dev/null +++ b/StRoot/StGeant4Maker/macros/test_stress_acceptance.C @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include + +void test_stress_acceptance(int nevents=10, int ntracks=10,const char* particles="pi+,pi-,K+,K-,mu+,mu-,e+,e-,proton,antiproton,pi0,gamma", const bool verbose=false ) { + + double ptmn = 0.100; + double ptmx = 10.000; + double etamn= -2.0; + double etamx= +4.0; + + StMaker* _geant4 = chain->GetMaker("geant4star"); + + // Run particle gun simulation + for ( int i=0;iGetStack(); + + for ( auto vert : _stack->GetVertexTable() ) { + LOG_INFO << *vert << endm; + } + + for ( auto part : _stack->GetParticleTable() ) { + LOG_INFO << *part << endm; + } + + } + + +}; diff --git a/StRoot/StGeant4Maker/tests/unit-test-summary b/StRoot/StGeant4Maker/tests/unit-test-summary new file mode 100755 index 00000000000..b9d34164026 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit-test-summary @@ -0,0 +1,93 @@ +#!/usr/bin/env python + +import re +import sys +import argparse +import subprocess + +ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') + +TEST_REPORT = re.compile( '.*\[(.*)\].*-(.*)-' ) + +TEST_PASS = {} +TEST_FAIL = {} +TEST_TOTAL = {} +TEST_KEYS = [] + +count = 0 + +p = argparse.ArgumentParser() +p.add_argument('input', nargs='?', + type=argparse.FileType(), default=sys.stdin) +args = p.parse_args() + +# Number of test lines with passes and failures +npass_line = 0 +nfail_line = 0 + +# Number of test lines which completely pass / fail +npass_complete = 0 +nfail_complete = 0 + +for line in args.input.readlines(): + line = line.replace(' | ','') + line = ansi_escape.sub('',line) + m = TEST_REPORT.match(line) + if m: + group1 = m.group(1) + group2 = m.group(2) + + count = count + 1 + + try: + TEST_TOTAL[group1] = TEST_TOTAL[group1] + 1 + except KeyError: + TEST_TOTAL[group1] = 1 + TEST_PASS[group1] = 0 + TEST_FAIL[group1] = 0 + TEST_KEYS.append(group1) + + + if 'passed' == group2: + TEST_PASS[group1] = TEST_PASS[group1] + 1 + + if 'failed' == group2: + TEST_FAIL[group1] = TEST_FAIL[group1] + 1 + + +print "" +print "Summary of tests" +print "----------------------------------------------------------------------" +print "pass | fail | total | test" +print "----------------------------------------------------------------------" + +for key in TEST_KEYS: + + npass = TEST_PASS[key] + nfail = TEST_FAIL[key] + count = TEST_TOTAL[key] + + if ( npass == count ): + npass_complete = npass_complete + 1 + if ( nfail == count ): + nfail_complete = nfail_complete + 1 + if ( npass != 0 ): + npass_line = npass_line + 1 + if ( nfail != 0 ): + nfail_line = nfail_line + 1 + + + if ( nfail == 0 ): + print "%4i | %4i | %4i %s"%(npass,nfail,count,key) + else: + print "%4i | %4i | %4i [!] %s"%(npass,nfail,count,key) + +print "----------------------------------------------------------------------" +print "N tests w/ passes = " + str(npass_line) +print "N tests w/ failures = " + str(nfail_line) +print "N tests w/ complete passes = " + str(npass_complete) +print "N tests w/ complete failures = " + str(nfail_complete) + + + + diff --git a/StRoot/StGeant4Maker/tests/unit_test_btof_hits.C b/StRoot/StGeant4Maker/tests/unit_test_btof_hits.C new file mode 100644 index 00000000000..950d872cd45 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_btof_hits.C @@ -0,0 +1,400 @@ +#include "tests/unit_tests.h" +#include + +// TODO: Implement test of prompt-hits + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set +>>; +#endif + +#include + + + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +void throw_muon_in_tpc_sector( int sectorid, int charge = 1 ) { + assert(sectorid>0 && sectorid <= 24); + const double sectors[] = { + 60.0, 30.0, 0.0, 330.0, 300.0, 270., 240.0, 210.0, 180.0, 150.0, 120.0, 90.0, + 120.0, 150.0, 180.0, 210.0, 240.0, 270.0, 300.0, 330.0, 0.0, 30.0, 60.0, 90.0 + }; + double eta = (sectorid<=12) ? 0.5 : -0.5; + _eta = eta; + double phid = sectors[sectorid-1]; + _phid = phid; + throw_muon( eta, phid, 500.0, charge ); // energetic + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_tfr_hit") ) ; + + assert(vertex_table); + +} +//______________________________________________________________________ +void unit_test_btof_hits( int longtest=0 ) { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and TPC hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + Accumulator_t edep; // Energy deposition + Accumulator_t step; // Step size + Accumulator_t time; // Time per throw + + for ( int sector=1; sector<=24; sector++ ) { + + timer.Start(); + throw_muon_in_tpc_sector( sector ); + time( timer.CpuTime() ); + timer.Reset(); + + LOG_TEST << "======================================================================================" << std::endl; + LOG_TEST << GIVEN << "A muon thrown down the center of TPC sector " << sector << std::endl; + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + std::string result = Form("sector=%i ", sector); + return result+PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the TPC", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* v = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( 0==v ) + result = PASS; + else { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 208.0 || xx2 > 208.0 ) + result = PASS; + result = Form(" r=%f ",TMath::Max(xx1,xx2)) + result; + } + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( Form("The track should have an eta=%f",_eta), [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + return TMath::Abs(t->eta-_eta)<1E-5 ?PASS:FAIL; + }); + check_track( "Expect 6 hits in the BTOF (dev2021 geometry)", [=](const g2t_track_st* t){ + int n = t->n_tof_hit; + std::string result = FAIL; + if ( n==6 ) result = PASS; + result = Form(" n=%i ",n) + result; + return result; + }); + + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + if ( 1!=hit->track_p ) continue; // not interested in secondaries + + LOG_TEST << "------------------------------------------------------------------" << std::endl; + LOG_TEST << GIVEN << "A hit on that track" << std::endl; + + edep( TMath::Abs(hit->de) * 1E6 ); // GeV MeV keV + step( hit->ds ); + + check_ctf_hit( "The hit should have a nonzero volume_id", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + if ( h->volume_id > 0 ) result = PASS; + result = Form("id=%i vid=%i de=%f ds=%f ",h->id,h->volume_id,h->de,h->ds) + result; + return result; + }); + check_ctf_hit( "The hit should have an energy deposit > 0", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; // undetermined + if ( h->de > 0 ) result = PASS; + return result; + }); + check_ctf_hit( "The hit should have a step size > 0", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + if ( h->ds > 0 ) result = PASS; + return result; + }); + check_ctf_hit( "The hit should have a path length > 0", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + if ( h->s_track > 0 ) result = PASS; + return result; + }); + check_ctf_hit( "The hit should have time-of-flight > 0", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + if ( h->tof > 0 ) result = PASS; + result = Form(" tof=%f ",h->tof) + result; + return result; + }); + check_ctf_hit( "The hit should have a nonzero momentum", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + if ( h->p[0] != 0 ) result = PASS; + if ( h->p[1] != 0 ) result = PASS; + if ( h->p[2] != 0 ) result = PASS; + return result; + }); + check_ctf_hit( "The hit should have a length > 0", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + if ( h->s_track > 0 ) result = PASS; + return result; + }); + check_ctf_hit( "The track length and tof*c agree to w/in 0.15 mm ", hit,[=](const g2t_ctf_hit_st* h) { + // There should be some tolerance on this, b/c of roundoff error at each tracking step + std::string result = FAIL; + double c_tof = 2.99792458E10 /* cm/s */ * h->tof; + double s_trk = h->s_track; + double diff = TMath::Abs(c_tof-s_trk); + if ( diff < 0.015 ) result = PASS; + result = Form("c_tof=%f cm strack=%f cm diff=%f cm ",c_tof,s_trk,diff) + result; + return result; + }); + check_ctf_hit( "The hit be at a radius > 207.8", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + double R2 = h->x[0]*h->x[0] + h->x[1]*h->x[1]; + if ( R2 > 207.8*207.8 ) result = PASS; + result = Form(" R=%f ",sqrt(R2)) + result; + return result; + }); + check_ctf_hit( "The hit be at a radius < 221.0", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + double R2 = h->x[0]*h->x[0] + h->x[1]*h->x[1]; + if ( R2 < 221.0*221.0 ) result = PASS; + result = Form(" R=%f ",sqrt(R2)) + result; + return result; + }); + check_ctf_hit( "The track length at the hit should be >= radius at the hit", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + double R2 = h->x[0]*h->x[0] + h->x[1]*h->x[1]; + double L2 = h->s_track * h->s_track; + if ( R2 <= L2 ) result = PASS; + result = Form(" R=%f L=%f",sqrt(R2),sqrt(L2)) + result; + return result; + }); + check_ctf_hit( "Track's momentum at hit should be < initial value", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + double px = h->p[0]; + double py = h->p[1]; + double pz = h->p[2]; + double p2 = px*px + py*py + pz*pz; + if ( p2 < _pmom*_pmom ) result = PASS; + return result; + }); + check_ctf_hit( "BTOF half should decode as 1..2", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + int half = h->volume_id / 100000; + if ( half == 1 || half == 2) result = PASS; + return result; + }); + check_ctf_hit( "BTOF sector/tray should decode as 1..60", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + int sector = h->volume_id % 100000 / 1000; + if ( sector >= 1 && sector <= 60 ) result = PASS; + return result; + }); + check_ctf_hit( "BTOF module should decode as 1..33", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + int module = h->volume_id % 1000 / 10; + if ( module >= 1 && module <= 33 ) result = PASS; + return result; + }); + check_ctf_hit( "BTOF layer should decode as 1..6", hit,[=](const g2t_ctf_hit_st* h) { + std::string result = FAIL; + int layer = h->volume_id % 10; + if ( layer >=1 && layer <= 6 ) result = PASS; + return result; + }); + } + + } + + std::cout << std::endl << std::endl; + + // Print out energy deposition + { + + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + LOG_TEST << Form( "energy deposition: mean = %f keV", _mean ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f keV", _median ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f keV", _min ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f keV", _max ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f keV", _error_of_mean ) << std::endl; + + } + + // Print out step sizes + if ( 1 ){ + + double _mean = boost::accumulators::mean(step); + double _median = boost::accumulators::median(step); + double _min = boost::accumulators::min(step); + double _max = boost::accumulators::max(step); + // double _error_of_mean = boost::accumulators::error_of(step); + LOG_TEST << Form( "step size: mean = %f cm", _mean ) << std::endl; + LOG_TEST << Form( "step size: median = %f cm", _median ) << std::endl; + LOG_TEST << Form( "step size: min = %f cm", _min ) << std::endl; + LOG_TEST << Form( "step size: max = %f cm", _max ) << std::endl; + // LOG_TEST << Form( "step size: error of mean = %f cm", _error_of_mean ) << std::endl; + + } + + // Print out time per track + { + + double _mean = boost::accumulators::mean(time); + double _median = boost::accumulators::median(time); + double _min = boost::accumulators::min(time); + double _max = boost::accumulators::max(time); + double _error_of_mean = boost::accumulators::error_of(time); + LOG_TEST << Form( "time / muon: mean = %f s", _mean ) << std::endl; + LOG_TEST << Form( "time / muon: median = %f s", _median ) << std::endl; + LOG_TEST << Form( "time / muon: min = %f s", _min ) << std::endl; + LOG_TEST << Form( "time / muon: max = %f s", _max ) << std::endl; + LOG_TEST << Form( "time / muon: error of mean = %f s", _error_of_mean ) << std::endl; + + } + + // Reset accumulators + edep = step = time = {}; + + if ( longtest > 1 ) { + + std::cout << "-/ running long test with N pi+/pi- =" << longtest << " /-" << std::endl; + + throw_particle( longtest, "pi+,pi-", 0.200, 20.0, -1.0, 1.0, 0.0, TMath::TwoPi() ); + + auto* chain = StMaker::GetChain(); + hit_table = dynamic_cast( chain->GetDataSet("g2t_ctf_hit") ) ; + + // Accumulate + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + // std::cout << *hit << std::endl; + + edep( TMath::Abs(hit->de) * 1E6 ); // GeV MeV keV + step( hit->ds ); + + } + + // Print out energy deposition + { + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + LOG_TEST << Form( "energy deposition: mean = %f keV", _mean ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f keV", _median ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f keV", _min ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f keV", _max ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f keV", _error_of_mean ) << std::endl; + + } + + // Print out step sizes + { + + double _mean = boost::accumulators::mean(step); + double _median = boost::accumulators::median(step); + double _min = boost::accumulators::min(step); + double _max = boost::accumulators::max(step); + // double _error_of_mean = boost::accumulators::error_of(step); + LOG_TEST << Form( "step size: mean = %f cm", _mean ) << std::endl; + LOG_TEST << Form( "step size: median = %f cm", _median ) << std::endl; + LOG_TEST << Form( "step size: min = %f cm", _min ) << std::endl; + LOG_TEST << Form( "step size: max = %f cm", _max ) << std::endl; + // LOG_TEST << Form( "step size: error of mean = %f cm", _error_of_mean ) << std::endl; + + } + + } + + +} +//___________________________________________________________________ diff --git a/StRoot/StGeant4Maker/tests/unit_test_eem_hits.C b/StRoot/StGeant4Maker/tests/unit_test_eem_hits.C new file mode 100644 index 00000000000..b1b68d2dc56 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_eem_hits.C @@ -0,0 +1,295 @@ +#include "tests/unit_tests.h" + +#include "StEEmcUtil/EEmcGeom/EEmcGeomSimple.h" + +namespace eemcgeom { + +const int kEEmcNumDepths = 5; +const int kEEmcNumSectors = 12; +const int kEEmcNumSubSectors = 5; +const int kEEmcNumEtas = 12; +const int kEEmcNumSmdPlanes = 3; +const int kEEmcNumStrips =288; +const int kEEmcNumEdgeStrips =283; +const int kEEmcNumSmdUVs = 2; + + + + // for Tower +const int kEEmcTowerHalfId = 100000; +const int kEEmcTowerPhiId = 1000; +const int kEEmcTowerEtaId = 10; +const int kEEmcTowerDepId = 1; + + // for SMDs +const int kEEmcSmdHalfId = 1000000; +const int kEEmcSmdPhiId = 10000; +const int kEEmcSmdPlaneId = 1000; +const int kEEmcSmdStripId = 1; + + + +const double etabounds[] = { 2.0000 , + 1.9008 , 1.8065 , 1.7168 , 1.6317 , 1.5507 , 1.4738 , + 1.4007 , 1.3312 , 1.2651 , 1.2023 , 1.1427 , 1.086 +}; + +} + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ +void throw_muon_in_eemc_tower( double eta, double phid, int charge = 1 ) { + + throw_muon( eta, phid, 10.0, charge ); // energetic + _eta = eta; + _phid = phid; + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_eem_hit") ); + chain->ls(10); + assert(track_table); + track_table->Print(0,10); + +} +//___________________________________________________________________ +struct EEmcVolumeId { + int half; + int sector; + int subsector; + int phibin; + int etabin; + int depth; +}; +//___________________________________________________________________ +EEmcVolumeId decode_eemc_volume_id( const int _volumeId ) { + EEmcVolumeId result = {0}; + int halfId = _volumeId / eemcgeom::kEEmcTowerHalfId; + int volumeId = _volumeId % eemcgeom::kEEmcTowerHalfId; + result.half = halfId; + result.phibin = volumeId / eemcgeom::kEEmcTowerPhiId; volumeId%=eemcgeom::kEEmcTowerPhiId; + result.etabin = volumeId / eemcgeom::kEEmcTowerEtaId; volumeId%=eemcgeom::kEEmcTowerEtaId; + result.depth = volumeId / eemcgeom::kEEmcTowerDepId; volumeId%=eemcgeom::kEEmcTowerDepId; + result.subsector = ( result.phibin - 1 )%5 + 1; + result.sector = ( result.phibin - 1 )/5 + 1; + return result; +} + +//___________________________________________________________________ +void unit_test_eem_hits() { + + gROOT->ProcessLine("initChain();"); + + if ( 0 == hasRuntimeArg("eemcutil") ) { + std::cout << "Please re-run with --eemcutil option" << std::endl; + assert(0); + } + + const EEmcGeomSimple& eemc = EEmcGeomSimple::Instance(); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and EEMC hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + // double eta = 0.5 * ( etabounds[3]+etabounds[4] ); + // double phid = 6.0 * 5; + + + TVector3 direction; + + for ( int i=0;i<12;i++ ) { // loop on eta bin + for ( int j=0;j<60;j++ ) { // loop on phi bin + + double eta=0.5*(eemcgeom::etabounds[i]+eemcgeom::etabounds[i+1]); + double phid = 6.0*j; + + int etabin = i + 1; + int phibin = j + 1; // maybe maybe not + int sector = j / 5 + 1; + int subsector = j % 5 + 1; + + LOG_TEST << "------------------------------------------------------------------" << std::endl; + LOG_TEST << "Throwing muon at tower center eta=" << eta << " phi=" << phid << std::endl; + LOG_TEST << "sector = " << j / 5 << " subsector = " << j % 5 << " etabin = " << i << std::endl; + LOG_TEST << "------------------------------------------------------------------" << std::endl; + + direction = eemc.getTowerCenter( sector - 1, subsector - 1, etabin - 1 ); + + throw_muon_in_eemc_tower( direction.Eta(), direction.Phi()*180.0/TMath::Pi() ); + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + assert(t); + return PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the EEMC", [=](const g2t_track_st* t){ + std::string result = TODO; + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( Form("The track should have an eta=%f",_eta), [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + return TMath::Abs(t->eta-_eta)<1E-5 ?PASS:FAIL; + }); + check_track( "Expect 5 hits in the dev2021 geometry", [=](const g2t_track_st* t){ + int n = t->n_eem_hit; + std::string result = FAIL; + if ( n==5 ) result = PASS; + result = Form(" n=%i ",n) + result; + return result; + }); + + + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + if ( 1!=hit->track_p ) continue; // not interested in secondaries + + check_emc_hit( "Print the hit...", hit, [=](const g2t_emc_hit_st* h) { + LOG_TEST << "id=" << h->id + << " track_p=" << h->track_p + << " volume_id=" << h->volume_id + << " de=" << h->de + << std::endl; + return PASS; + }); + check_emc_hit( "The hit should have a nonzero volume_id",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + if ( h->volume_id > 0 ) result = PASS; + result = Form(" volumeId=%i ", h->volume_id ) + result; + return result; + }); + check_emc_hit( "The hit's volume_id should be < 2*100000",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + if ( h->volume_id < 200000 ) result = PASS; + result = Form(" volumeId=%i ", h->volume_id ) + result; + return result; + }); + check_emc_hit( "The hit should be in half 1 or half 2",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + int volumeId = h->volume_id; + EEmcVolumeId id = decode_eemc_volume_id( volumeId ); + int half = id.half; + if ( half>=1 && half <=2 ) result = PASS; + result = Form(" ... half=%i ", half ) + result; + return result; + }); + check_emc_hit( "The sector of the hit should be 1-12",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + int volumeId = h->volume_id; + EEmcVolumeId id = decode_eemc_volume_id( volumeId ); + int sector = id.sector; + if ( sector >= 1 && sector <= 12 ) result = PASS; + result = Form(" ... sector=%i ", sector ) + result; + return result; + }); + check_emc_hit( "The hit has the expected sector",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + int volumeId = h->volume_id; + EEmcVolumeId id = decode_eemc_volume_id( volumeId ); + if ( sector ==id.sector ) result = PASS; + result = Form(" expect %i actual %i ", id.sector,sector ) + result; + return result; + }); + check_emc_hit( "The hit has the expected subsector",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + int volumeId = h->volume_id; + EEmcVolumeId id = decode_eemc_volume_id( volumeId ); + if ( id.subsector == subsector ) result = PASS; + result = Form(" expect %i actual %i ", id.subsector,subsector ) + result; + return result; + }); + check_emc_hit( "The hit has the expected phibin",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + int volumeId = h->volume_id; + EEmcVolumeId id = decode_eemc_volume_id( volumeId ); + if ( id.phibin == phibin ) result = PASS; + result = Form(" expect %i actual %i ", id.phibin, phibin ) + result; + return result; + }); + check_emc_hit( "The hit has the expected eta bin",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + int volumeId = h->volume_id; + EEmcVolumeId id = decode_eemc_volume_id( volumeId ); + if ( etabin == id.etabin ) result = PASS; + result = Form(" expect %i actual %i ", id.etabin, etabin ) + result; + return result; + }); + check_emc_hit( "The depth of the hit should be 1-5",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + int volumeId = h->volume_id; + EEmcVolumeId id = decode_eemc_volume_id( volumeId ); + int depth = id.depth; + + if ( depth >= 1 && depth <= 5 ) result = PASS; + result = Form(" ... depth=%i ", depth ) + result; + return result; + }); + check_emc_hit( "The hit should have an energy deposit > 0",hit,[=](const g2t_emc_hit_st* h) { + std::string result = FAIL; + if ( h->de > 0 ) result = PASS; + return result; + }); + + } + + } + } + + +} diff --git a/StRoot/StGeant4Maker/tests/unit_test_emc_hits.C b/StRoot/StGeant4Maker/tests/unit_test_emc_hits.C new file mode 100644 index 00000000000..2a9e43c78fb --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_emc_hits.C @@ -0,0 +1,9817 @@ +#include "tests/unit_tests.h" + +#include +//___________________________________________________________________ +const int neta = 40; +const int nphi = 120; +const double dphi = 3.0; +const double phi0 = 0.0; // not really... + +void init_cells(); + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; + +struct Cell { + int volumeId; + int softId; + int m; + int e; + int s; + int d; + float eta; + float phi; +}; +std::vector cells; +//___________________________________________________________________ +void throw_muon_in_bemc_tower( double eta, double phid, int charge = 1 ) { + + throw_muon( eta, phid, 10.0, charge ); // energetic + _eta = eta; + _phid = phid; + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_emc_hit") ); + +} +//___________________________________________________________________ +void unit_test_emc_hits() { + + gROOT->ProcessLine("initChain();"); + + init_cells(); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and BEMC hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + for ( auto cell : cells ) { + + double eta = cell.eta; _eta = eta; + double phi = cell.phi; + double phid = phi * 180.0 / TMath::Pi(); + int volId = cell.volumeId; + if ( volId % 10 == 2 ) continue; // skip superlayer = 2 + + LOG_TEST << "------------------------------------------------------------------" << std::endl; + LOG_TEST << "Throwing muon at tower center eta=" << eta << " phi=" << phid << std::endl; + LOG_TEST << "------------------------------------------------------------------" << std::endl; + + throw_muon_in_bemc_tower( eta, phid ); + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + // Failure is tested by check_track when it tests for a valid track pointer + return PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0 && istart <= vertex_table->GetNRows()) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the BEMC", [=](const g2t_track_st* t){ + std::string result = TODO; + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 && istart <= vertex_table->GetNRows() ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( "The track should has the expected eta", [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + std::string result = FAIL; + if ( TMath::Abs(t->eta-_eta)<1E-5 ) + result = PASS; + result = Form(" expect %f got %f ", _eta, t->eta ) + result; + return result; + }); + // check_track( "The track should has the expected phi", [=](const g2t_track_st* t){ + // double delta = TMath::Abs(t->phi-_phi); + // return delta<1E-5 ?PASS:FAIL; + // }); + check_track( "Expect 2 hits in the dev2021 geometry", [=](const g2t_track_st* t){ + int n = t->n_emc_hit; + std::string result = FAIL; + if ( n==2 ) result = PASS; + result = Form(" n=%i ",n) + result; + return result; + }); + + for ( int i=0;iGetNRows();i++ ) { + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + if ( 1!=hit->track_p ) continue; // not interested in secondaries + check_emc_hit( "Energy deposition is positive", hit, [=]( const g2t_emc_hit_st* hit ) { + std::string result = FAIL; + if ( hit->de > 0 ) result = PASS; + return result; + }); + check_emc_hit( "Half barrel is 1 or 2 from volume ID", hit, [=](const g2t_emc_hit_st* h) { + int volId = h->volume_id; + int half = h->volume_id / 10000000; + std::string result = FAIL; + if ( 1==half || 2==half ) result = PASS; + result = Form("half=%i ",half) + result; + return result; + }); + check_emc_hit( "Eta bin is in 1..20", hit, [=](const g2t_emc_hit_st* h) { + int volId = h->volume_id; + int tow = (h->volume_id % 10000000)/100000; + std::string result = FAIL; + if ( tow>=1 && tow<= 40 ) result = PASS; + result = Form("etabin=%i ",tow) + result; + return result; + }); + check_emc_hit( "Phi module is in 1..60", hit, [=](const g2t_emc_hit_st* h) { + int volId = h->volume_id; + int tow = (h->volume_id % 100000) / 100; + std::string result = FAIL; + if ( tow>=1 && tow<= 60 ) result = PASS; + result = Form("phibin=%i ",tow) + result; + return result; + }); + check_emc_hit( "Phi sub-module is in 1..2", hit, [=](const g2t_emc_hit_st* h) { + int volId = h->volume_id; + int tow = (h->volume_id % 100)/10; + std::string result = FAIL; + if ( tow>=1 && tow<= 40 ) result = PASS; + result = Form("phi submodule=%i ",tow) + result; + return result; + }); + check_emc_hit( "Superlayer is 1..2", hit, [=](const g2t_emc_hit_st* h) { + int volId = h->volume_id; + int tow = (h->volume_id % 10); + std::string result = FAIL; + if ( tow>=1 && tow<= 40 ) result = PASS; + result = Form("super layer=%i ",tow) + result; + return result; + }); + std::string side = (eta>0)?"west":"east"; + check_emc_hit( Form("Hit has the expected volume ID %s",side.c_str()), hit, [=]( const g2t_emc_hit_st* h) { + std::string result = FAIL; + if ( cell.volumeId == h->volume_id || cell.volumeId+1 == h->volume_id ) result = PASS; + result = Form(" got volume id %i expect %i or %i ",h->volume_id,cell.volumeId,cell.volumeId+1) + result; + return result; + }); + + }; + + + } + + // } + // } + +} + + + +void init_cells() { + cells.push_back( {10100111,1,1,1,1,2,0.02675,1.28142 } ); + cells.push_back( {10100121,21,1,1,2,2,0.02675,1.23186 } ); + cells.push_back( {10200111,2,1,2,1,2,0.075,1.28142 } ); + cells.push_back( {10200121,22,1,2,2,2,0.075,1.23186 } ); + cells.push_back( {10300111,3,1,3,1,2,0.125,1.28142 } ); + cells.push_back( {10300121,23,1,3,2,2,0.125,1.23186 } ); + cells.push_back( {10400111,4,1,4,1,2,0.175,1.28142 } ); +cells.push_back( {10400121,24,1,4,2,2,0.175,1.23186 } ); +cells.push_back( {10500111,5,1,5,1,2,0.225,1.28142 } ); +cells.push_back( {10500121,25,1,5,2,2,0.225,1.23186 } ); +cells.push_back( {10600111,6,1,6,1,2,0.275,1.28142 } ); +cells.push_back( {10600121,26,1,6,2,2,0.275,1.23186 } ); +cells.push_back( {10700111,7,1,7,1,2,0.325,1.28142 } ); +cells.push_back( {10700121,27,1,7,2,2,0.325,1.23186 } ); +cells.push_back( {10800111,8,1,8,1,2,0.375,1.28142 } ); +cells.push_back( {10800121,28,1,8,2,2,0.375,1.23186 } ); +cells.push_back( {10900111,9,1,9,1,2,0.425,1.28142 } ); +cells.push_back( {10900121,29,1,9,2,2,0.425,1.23186 } ); +cells.push_back( {11000111,10,1,10,1,2,0.475,1.28142 } ); +cells.push_back( {11000121,30,1,10,2,2,0.475,1.23186 } ); +cells.push_back( {11100111,11,1,11,1,2,0.525,1.28142 } ); +cells.push_back( {11100121,31,1,11,2,2,0.525,1.23186 } ); +cells.push_back( {11200111,12,1,12,1,2,0.575,1.28142 } ); +cells.push_back( {11200121,32,1,12,2,2,0.575,1.23186 } ); +cells.push_back( {11300111,13,1,13,1,2,0.625,1.28142 } ); +cells.push_back( {11300121,33,1,13,2,2,0.625,1.23186 } ); +cells.push_back( {11400111,14,1,14,1,2,0.675,1.28142 } ); +cells.push_back( {11400121,34,1,14,2,2,0.675,1.23186 } ); +cells.push_back( {11500111,15,1,15,1,2,0.725,1.28142 } ); +cells.push_back( {11500121,35,1,15,2,2,0.725,1.23186 } ); +cells.push_back( {11600111,16,1,16,1,2,0.775,1.28142 } ); +cells.push_back( {11600121,36,1,16,2,2,0.775,1.23186 } ); +cells.push_back( {11700111,17,1,17,1,2,0.825,1.28142 } ); +cells.push_back( {11700121,37,1,17,2,2,0.825,1.23186 } ); +cells.push_back( {11800111,18,1,18,1,2,0.875,1.28142 } ); +cells.push_back( {11800121,38,1,18,2,2,0.875,1.23186 } ); +cells.push_back( {11900111,19,1,19,1,2,0.925,1.28142 } ); +cells.push_back( {11900121,39,1,19,2,2,0.925,1.23186 } ); +cells.push_back( {12000111,20,1,20,1,2,0.967,1.28142 } ); +cells.push_back( {12000121,40,1,20,2,2,0.967,1.23186 } ); +cells.push_back( {10100112,1,1,1,1,1,0.02675,1.28142 } ); +cells.push_back( {10100122,21,1,1,2,1,0.02675,1.23186 } ); +cells.push_back( {10200112,2,1,2,1,1,0.075,1.28142 } ); +cells.push_back( {10200122,22,1,2,2,1,0.075,1.23186 } ); +cells.push_back( {10300112,3,1,3,1,1,0.125,1.28142 } ); +cells.push_back( {10300122,23,1,3,2,1,0.125,1.23186 } ); +cells.push_back( {10400112,4,1,4,1,1,0.175,1.28142 } ); +cells.push_back( {10400122,24,1,4,2,1,0.175,1.23186 } ); +cells.push_back( {10500112,5,1,5,1,1,0.225,1.28142 } ); +cells.push_back( {10500122,25,1,5,2,1,0.225,1.23186 } ); +cells.push_back( {10600112,6,1,6,1,1,0.275,1.28142 } ); +cells.push_back( {10600122,26,1,6,2,1,0.275,1.23186 } ); +cells.push_back( {10700112,7,1,7,1,1,0.325,1.28142 } ); +cells.push_back( {10700122,27,1,7,2,1,0.325,1.23186 } ); +cells.push_back( {10800112,8,1,8,1,1,0.375,1.28142 } ); +cells.push_back( {10800122,28,1,8,2,1,0.375,1.23186 } ); +cells.push_back( {10900112,9,1,9,1,1,0.425,1.28142 } ); +cells.push_back( {10900122,29,1,9,2,1,0.425,1.23186 } ); +cells.push_back( {11000112,10,1,10,1,1,0.475,1.28142 } ); +cells.push_back( {11000122,30,1,10,2,1,0.475,1.23186 } ); +cells.push_back( {11100112,11,1,11,1,1,0.525,1.28142 } ); +cells.push_back( {11100122,31,1,11,2,1,0.525,1.23186 } ); +cells.push_back( {11200112,12,1,12,1,1,0.575,1.28142 } ); +cells.push_back( {11200122,32,1,12,2,1,0.575,1.23186 } ); +cells.push_back( {11300112,13,1,13,1,1,0.625,1.28142 } ); +cells.push_back( {11300122,33,1,13,2,1,0.625,1.23186 } ); +cells.push_back( {11400112,14,1,14,1,1,0.675,1.28142 } ); +cells.push_back( {11400122,34,1,14,2,1,0.675,1.23186 } ); +cells.push_back( {11500112,15,1,15,1,1,0.725,1.28142 } ); +cells.push_back( {11500122,35,1,15,2,1,0.725,1.23186 } ); +cells.push_back( {11600112,16,1,16,1,1,0.775,1.28142 } ); +cells.push_back( {11600122,36,1,16,2,1,0.775,1.23186 } ); +cells.push_back( {11700112,17,1,17,1,1,0.825,1.28142 } ); +cells.push_back( {11700122,37,1,17,2,1,0.825,1.23186 } ); +cells.push_back( {11800112,18,1,18,1,1,0.875,1.28142 } ); +cells.push_back( {11800122,38,1,18,2,1,0.875,1.23186 } ); +cells.push_back( {11900112,19,1,19,1,1,0.925,1.28142 } ); +cells.push_back( {11900122,39,1,19,2,1,0.925,1.23186 } ); +cells.push_back( {12000112,20,1,20,1,1,0.967,1.28142 } ); +cells.push_back( {12000122,40,1,20,2,1,0.967,1.23186 } ); +cells.push_back( {10100211,41,2,1,1,2,0.02675,1.1767 } ); +cells.push_back( {10100221,61,2,1,2,2,0.02675,1.12714 } ); +cells.push_back( {10200211,42,2,2,1,2,0.075,1.1767 } ); +cells.push_back( {10200221,62,2,2,2,2,0.075,1.12714 } ); +cells.push_back( {10300211,43,2,3,1,2,0.125,1.1767 } ); +cells.push_back( {10300221,63,2,3,2,2,0.125,1.12714 } ); +cells.push_back( {10400211,44,2,4,1,2,0.175,1.1767 } ); +cells.push_back( {10400221,64,2,4,2,2,0.175,1.12714 } ); +cells.push_back( {10500211,45,2,5,1,2,0.225,1.1767 } ); +cells.push_back( {10500221,65,2,5,2,2,0.225,1.12714 } ); +cells.push_back( {10600211,46,2,6,1,2,0.275,1.1767 } ); +cells.push_back( {10600221,66,2,6,2,2,0.275,1.12714 } ); +cells.push_back( {10700211,47,2,7,1,2,0.325,1.1767 } ); +cells.push_back( {10700221,67,2,7,2,2,0.325,1.12714 } ); +cells.push_back( {10800211,48,2,8,1,2,0.375,1.1767 } ); +cells.push_back( {10800221,68,2,8,2,2,0.375,1.12714 } ); +cells.push_back( {10900211,49,2,9,1,2,0.425,1.1767 } ); +cells.push_back( {10900221,69,2,9,2,2,0.425,1.12714 } ); +cells.push_back( {11000211,50,2,10,1,2,0.475,1.1767 } ); +cells.push_back( {11000221,70,2,10,2,2,0.475,1.12714 } ); +cells.push_back( {11100211,51,2,11,1,2,0.525,1.1767 } ); +cells.push_back( {11100221,71,2,11,2,2,0.525,1.12714 } ); +cells.push_back( {11200211,52,2,12,1,2,0.575,1.1767 } ); +cells.push_back( {11200221,72,2,12,2,2,0.575,1.12714 } ); +cells.push_back( {11300211,53,2,13,1,2,0.625,1.1767 } ); +cells.push_back( {11300221,73,2,13,2,2,0.625,1.12714 } ); +cells.push_back( {11400211,54,2,14,1,2,0.675,1.1767 } ); +cells.push_back( {11400221,74,2,14,2,2,0.675,1.12714 } ); +cells.push_back( {11500211,55,2,15,1,2,0.725,1.1767 } ); +cells.push_back( {11500221,75,2,15,2,2,0.725,1.12714 } ); +cells.push_back( {11600211,56,2,16,1,2,0.775,1.1767 } ); +cells.push_back( {11600221,76,2,16,2,2,0.775,1.12714 } ); +cells.push_back( {11700211,57,2,17,1,2,0.825,1.1767 } ); +cells.push_back( {11700221,77,2,17,2,2,0.825,1.12714 } ); +cells.push_back( {11800211,58,2,18,1,2,0.875,1.1767 } ); +cells.push_back( {11800221,78,2,18,2,2,0.875,1.12714 } ); +cells.push_back( {11900211,59,2,19,1,2,0.925,1.1767 } ); +cells.push_back( {11900221,79,2,19,2,2,0.925,1.12714 } ); +cells.push_back( {12000211,60,2,20,1,2,0.967,1.1767 } ); +cells.push_back( {12000221,80,2,20,2,2,0.967,1.12714 } ); +cells.push_back( {10100212,41,2,1,1,1,0.02675,1.1767 } ); +cells.push_back( {10100222,61,2,1,2,1,0.02675,1.12714 } ); +cells.push_back( {10200212,42,2,2,1,1,0.075,1.1767 } ); +cells.push_back( {10200222,62,2,2,2,1,0.075,1.12714 } ); +cells.push_back( {10300212,43,2,3,1,1,0.125,1.1767 } ); +cells.push_back( {10300222,63,2,3,2,1,0.125,1.12714 } ); +cells.push_back( {10400212,44,2,4,1,1,0.175,1.1767 } ); +cells.push_back( {10400222,64,2,4,2,1,0.175,1.12714 } ); +cells.push_back( {10500212,45,2,5,1,1,0.225,1.1767 } ); +cells.push_back( {10500222,65,2,5,2,1,0.225,1.12714 } ); +cells.push_back( {10600212,46,2,6,1,1,0.275,1.1767 } ); +cells.push_back( {10600222,66,2,6,2,1,0.275,1.12714 } ); +cells.push_back( {10700212,47,2,7,1,1,0.325,1.1767 } ); +cells.push_back( {10700222,67,2,7,2,1,0.325,1.12714 } ); +cells.push_back( {10800212,48,2,8,1,1,0.375,1.1767 } ); +cells.push_back( {10800222,68,2,8,2,1,0.375,1.12714 } ); +cells.push_back( {10900212,49,2,9,1,1,0.425,1.1767 } ); +cells.push_back( {10900222,69,2,9,2,1,0.425,1.12714 } ); +cells.push_back( {11000212,50,2,10,1,1,0.475,1.1767 } ); +cells.push_back( {11000222,70,2,10,2,1,0.475,1.12714 } ); +cells.push_back( {11100212,51,2,11,1,1,0.525,1.1767 } ); +cells.push_back( {11100222,71,2,11,2,1,0.525,1.12714 } ); +cells.push_back( {11200212,52,2,12,1,1,0.575,1.1767 } ); +cells.push_back( {11200222,72,2,12,2,1,0.575,1.12714 } ); +cells.push_back( {11300212,53,2,13,1,1,0.625,1.1767 } ); +cells.push_back( {11300222,73,2,13,2,1,0.625,1.12714 } ); +cells.push_back( {11400212,54,2,14,1,1,0.675,1.1767 } ); +cells.push_back( {11400222,74,2,14,2,1,0.675,1.12714 } ); +cells.push_back( {11500212,55,2,15,1,1,0.725,1.1767 } ); +cells.push_back( {11500222,75,2,15,2,1,0.725,1.12714 } ); +cells.push_back( {11600212,56,2,16,1,1,0.775,1.1767 } ); +cells.push_back( {11600222,76,2,16,2,1,0.775,1.12714 } ); +cells.push_back( {11700212,57,2,17,1,1,0.825,1.1767 } ); +cells.push_back( {11700222,77,2,17,2,1,0.825,1.12714 } ); +cells.push_back( {11800212,58,2,18,1,1,0.875,1.1767 } ); +cells.push_back( {11800222,78,2,18,2,1,0.875,1.12714 } ); +cells.push_back( {11900212,59,2,19,1,1,0.925,1.1767 } ); +cells.push_back( {11900222,79,2,19,2,1,0.925,1.12714 } ); +cells.push_back( {12000212,60,2,20,1,1,0.967,1.1767 } ); +cells.push_back( {12000222,80,2,20,2,1,0.967,1.12714 } ); +cells.push_back( {10100311,81,3,1,1,2,0.02675,1.07198 } ); +cells.push_back( {10100321,101,3,1,2,2,0.02675,1.02242 } ); +cells.push_back( {10200311,82,3,2,1,2,0.075,1.07198 } ); +cells.push_back( {10200321,102,3,2,2,2,0.075,1.02242 } ); +cells.push_back( {10300311,83,3,3,1,2,0.125,1.07198 } ); +cells.push_back( {10300321,103,3,3,2,2,0.125,1.02242 } ); +cells.push_back( {10400311,84,3,4,1,2,0.175,1.07198 } ); +cells.push_back( {10400321,104,3,4,2,2,0.175,1.02242 } ); +cells.push_back( {10500311,85,3,5,1,2,0.225,1.07198 } ); +cells.push_back( {10500321,105,3,5,2,2,0.225,1.02242 } ); +cells.push_back( {10600311,86,3,6,1,2,0.275,1.07198 } ); +cells.push_back( {10600321,106,3,6,2,2,0.275,1.02242 } ); +cells.push_back( {10700311,87,3,7,1,2,0.325,1.07198 } ); +cells.push_back( {10700321,107,3,7,2,2,0.325,1.02242 } ); +cells.push_back( {10800311,88,3,8,1,2,0.375,1.07198 } ); +cells.push_back( {10800321,108,3,8,2,2,0.375,1.02242 } ); +cells.push_back( {10900311,89,3,9,1,2,0.425,1.07198 } ); +cells.push_back( {10900321,109,3,9,2,2,0.425,1.02242 } ); +cells.push_back( {11000311,90,3,10,1,2,0.475,1.07198 } ); +cells.push_back( {11000321,110,3,10,2,2,0.475,1.02242 } ); +cells.push_back( {11100311,91,3,11,1,2,0.525,1.07198 } ); +cells.push_back( {11100321,111,3,11,2,2,0.525,1.02242 } ); +cells.push_back( {11200311,92,3,12,1,2,0.575,1.07198 } ); +cells.push_back( {11200321,112,3,12,2,2,0.575,1.02242 } ); +cells.push_back( {11300311,93,3,13,1,2,0.625,1.07198 } ); +cells.push_back( {11300321,113,3,13,2,2,0.625,1.02242 } ); +cells.push_back( {11400311,94,3,14,1,2,0.675,1.07198 } ); +cells.push_back( {11400321,114,3,14,2,2,0.675,1.02242 } ); +cells.push_back( {11500311,95,3,15,1,2,0.725,1.07198 } ); +cells.push_back( {11500321,115,3,15,2,2,0.725,1.02242 } ); +cells.push_back( {11600311,96,3,16,1,2,0.775,1.07198 } ); +cells.push_back( {11600321,116,3,16,2,2,0.775,1.02242 } ); +cells.push_back( {11700311,97,3,17,1,2,0.825,1.07198 } ); +cells.push_back( {11700321,117,3,17,2,2,0.825,1.02242 } ); +cells.push_back( {11800311,98,3,18,1,2,0.875,1.07198 } ); +cells.push_back( {11800321,118,3,18,2,2,0.875,1.02242 } ); +cells.push_back( {11900311,99,3,19,1,2,0.925,1.07198 } ); +cells.push_back( {11900321,119,3,19,2,2,0.925,1.02242 } ); +cells.push_back( {12000311,100,3,20,1,2,0.967,1.07198 } ); +cells.push_back( {12000321,120,3,20,2,2,0.967,1.02242 } ); +cells.push_back( {10100312,81,3,1,1,1,0.02675,1.07198 } ); +cells.push_back( {10100322,101,3,1,2,1,0.02675,1.02242 } ); +cells.push_back( {10200312,82,3,2,1,1,0.075,1.07198 } ); +cells.push_back( {10200322,102,3,2,2,1,0.075,1.02242 } ); +cells.push_back( {10300312,83,3,3,1,1,0.125,1.07198 } ); +cells.push_back( {10300322,103,3,3,2,1,0.125,1.02242 } ); +cells.push_back( {10400312,84,3,4,1,1,0.175,1.07198 } ); +cells.push_back( {10400322,104,3,4,2,1,0.175,1.02242 } ); +cells.push_back( {10500312,85,3,5,1,1,0.225,1.07198 } ); +cells.push_back( {10500322,105,3,5,2,1,0.225,1.02242 } ); +cells.push_back( {10600312,86,3,6,1,1,0.275,1.07198 } ); +cells.push_back( {10600322,106,3,6,2,1,0.275,1.02242 } ); +cells.push_back( {10700312,87,3,7,1,1,0.325,1.07198 } ); +cells.push_back( {10700322,107,3,7,2,1,0.325,1.02242 } ); +cells.push_back( {10800312,88,3,8,1,1,0.375,1.07198 } ); +cells.push_back( {10800322,108,3,8,2,1,0.375,1.02242 } ); +cells.push_back( {10900312,89,3,9,1,1,0.425,1.07198 } ); +cells.push_back( {10900322,109,3,9,2,1,0.425,1.02242 } ); +cells.push_back( {11000312,90,3,10,1,1,0.475,1.07198 } ); +cells.push_back( {11000322,110,3,10,2,1,0.475,1.02242 } ); +cells.push_back( {11100312,91,3,11,1,1,0.525,1.07198 } ); +cells.push_back( {11100322,111,3,11,2,1,0.525,1.02242 } ); +cells.push_back( {11200312,92,3,12,1,1,0.575,1.07198 } ); +cells.push_back( {11200322,112,3,12,2,1,0.575,1.02242 } ); +cells.push_back( {11300312,93,3,13,1,1,0.625,1.07198 } ); +cells.push_back( {11300322,113,3,13,2,1,0.625,1.02242 } ); +cells.push_back( {11400312,94,3,14,1,1,0.675,1.07198 } ); +cells.push_back( {11400322,114,3,14,2,1,0.675,1.02242 } ); +cells.push_back( {11500312,95,3,15,1,1,0.725,1.07198 } ); +cells.push_back( {11500322,115,3,15,2,1,0.725,1.02242 } ); +cells.push_back( {11600312,96,3,16,1,1,0.775,1.07198 } ); +cells.push_back( {11600322,116,3,16,2,1,0.775,1.02242 } ); +cells.push_back( {11700312,97,3,17,1,1,0.825,1.07198 } ); +cells.push_back( {11700322,117,3,17,2,1,0.825,1.02242 } ); +cells.push_back( {11800312,98,3,18,1,1,0.875,1.07198 } ); +cells.push_back( {11800322,118,3,18,2,1,0.875,1.02242 } ); +cells.push_back( {11900312,99,3,19,1,1,0.925,1.07198 } ); +cells.push_back( {11900322,119,3,19,2,1,0.925,1.02242 } ); +cells.push_back( {12000312,100,3,20,1,1,0.967,1.07198 } ); +cells.push_back( {12000322,120,3,20,2,1,0.967,1.02242 } ); +cells.push_back( {10100411,121,4,1,1,2,0.02675,0.967259 } ); +cells.push_back( {10100421,141,4,1,2,2,0.02675,0.917696 } ); +cells.push_back( {10200411,122,4,2,1,2,0.075,0.967259 } ); +cells.push_back( {10200421,142,4,2,2,2,0.075,0.917696 } ); +cells.push_back( {10300411,123,4,3,1,2,0.125,0.967259 } ); +cells.push_back( {10300421,143,4,3,2,2,0.125,0.917696 } ); +cells.push_back( {10400411,124,4,4,1,2,0.175,0.967259 } ); +cells.push_back( {10400421,144,4,4,2,2,0.175,0.917696 } ); +cells.push_back( {10500411,125,4,5,1,2,0.225,0.967259 } ); +cells.push_back( {10500421,145,4,5,2,2,0.225,0.917696 } ); +cells.push_back( {10600411,126,4,6,1,2,0.275,0.967259 } ); +cells.push_back( {10600421,146,4,6,2,2,0.275,0.917696 } ); +cells.push_back( {10700411,127,4,7,1,2,0.325,0.967259 } ); +cells.push_back( {10700421,147,4,7,2,2,0.325,0.917696 } ); +cells.push_back( {10800411,128,4,8,1,2,0.375,0.967259 } ); +cells.push_back( {10800421,148,4,8,2,2,0.375,0.917696 } ); +cells.push_back( {10900411,129,4,9,1,2,0.425,0.967259 } ); +cells.push_back( {10900421,149,4,9,2,2,0.425,0.917696 } ); +cells.push_back( {11000411,130,4,10,1,2,0.475,0.967259 } ); +cells.push_back( {11000421,150,4,10,2,2,0.475,0.917696 } ); +cells.push_back( {11100411,131,4,11,1,2,0.525,0.967259 } ); +cells.push_back( {11100421,151,4,11,2,2,0.525,0.917696 } ); +cells.push_back( {11200411,132,4,12,1,2,0.575,0.967259 } ); +cells.push_back( {11200421,152,4,12,2,2,0.575,0.917696 } ); +cells.push_back( {11300411,133,4,13,1,2,0.625,0.967259 } ); +cells.push_back( {11300421,153,4,13,2,2,0.625,0.917696 } ); +cells.push_back( {11400411,134,4,14,1,2,0.675,0.967259 } ); +cells.push_back( {11400421,154,4,14,2,2,0.675,0.917696 } ); +cells.push_back( {11500411,135,4,15,1,2,0.725,0.967259 } ); +cells.push_back( {11500421,155,4,15,2,2,0.725,0.917696 } ); +cells.push_back( {11600411,136,4,16,1,2,0.775,0.967259 } ); +cells.push_back( {11600421,156,4,16,2,2,0.775,0.917696 } ); +cells.push_back( {11700411,137,4,17,1,2,0.825,0.967259 } ); +cells.push_back( {11700421,157,4,17,2,2,0.825,0.917696 } ); +cells.push_back( {11800411,138,4,18,1,2,0.875,0.967259 } ); +cells.push_back( {11800421,158,4,18,2,2,0.875,0.917696 } ); +cells.push_back( {11900411,139,4,19,1,2,0.925,0.967259 } ); +cells.push_back( {11900421,159,4,19,2,2,0.925,0.917696 } ); +cells.push_back( {12000411,140,4,20,1,2,0.967,0.967259 } ); +cells.push_back( {12000421,160,4,20,2,2,0.967,0.917696 } ); +cells.push_back( {10100412,121,4,1,1,1,0.02675,0.967259 } ); +cells.push_back( {10100422,141,4,1,2,1,0.02675,0.917696 } ); +cells.push_back( {10200412,122,4,2,1,1,0.075,0.967259 } ); +cells.push_back( {10200422,142,4,2,2,1,0.075,0.917696 } ); +cells.push_back( {10300412,123,4,3,1,1,0.125,0.967259 } ); +cells.push_back( {10300422,143,4,3,2,1,0.125,0.917696 } ); +cells.push_back( {10400412,124,4,4,1,1,0.175,0.967259 } ); +cells.push_back( {10400422,144,4,4,2,1,0.175,0.917696 } ); +cells.push_back( {10500412,125,4,5,1,1,0.225,0.967259 } ); +cells.push_back( {10500422,145,4,5,2,1,0.225,0.917696 } ); +cells.push_back( {10600412,126,4,6,1,1,0.275,0.967259 } ); +cells.push_back( {10600422,146,4,6,2,1,0.275,0.917696 } ); +cells.push_back( {10700412,127,4,7,1,1,0.325,0.967259 } ); +cells.push_back( {10700422,147,4,7,2,1,0.325,0.917696 } ); +cells.push_back( {10800412,128,4,8,1,1,0.375,0.967259 } ); +cells.push_back( {10800422,148,4,8,2,1,0.375,0.917696 } ); +cells.push_back( {10900412,129,4,9,1,1,0.425,0.967259 } ); +cells.push_back( {10900422,149,4,9,2,1,0.425,0.917696 } ); +cells.push_back( {11000412,130,4,10,1,1,0.475,0.967259 } ); +cells.push_back( {11000422,150,4,10,2,1,0.475,0.917696 } ); +cells.push_back( {11100412,131,4,11,1,1,0.525,0.967259 } ); +cells.push_back( {11100422,151,4,11,2,1,0.525,0.917696 } ); +cells.push_back( {11200412,132,4,12,1,1,0.575,0.967259 } ); +cells.push_back( {11200422,152,4,12,2,1,0.575,0.917696 } ); +cells.push_back( {11300412,133,4,13,1,1,0.625,0.967259 } ); +cells.push_back( {11300422,153,4,13,2,1,0.625,0.917696 } ); +cells.push_back( {11400412,134,4,14,1,1,0.675,0.967259 } ); +cells.push_back( {11400422,154,4,14,2,1,0.675,0.917696 } ); +cells.push_back( {11500412,135,4,15,1,1,0.725,0.967259 } ); +cells.push_back( {11500422,155,4,15,2,1,0.725,0.917696 } ); +cells.push_back( {11600412,136,4,16,1,1,0.775,0.967259 } ); +cells.push_back( {11600422,156,4,16,2,1,0.775,0.917696 } ); +cells.push_back( {11700412,137,4,17,1,1,0.825,0.967259 } ); +cells.push_back( {11700422,157,4,17,2,1,0.825,0.917696 } ); +cells.push_back( {11800412,138,4,18,1,1,0.875,0.967259 } ); +cells.push_back( {11800422,158,4,18,2,1,0.875,0.917696 } ); +cells.push_back( {11900412,139,4,19,1,1,0.925,0.967259 } ); +cells.push_back( {11900422,159,4,19,2,1,0.925,0.917696 } ); +cells.push_back( {12000412,140,4,20,1,1,0.967,0.967259 } ); +cells.push_back( {12000422,160,4,20,2,1,0.967,0.917696 } ); +cells.push_back( {10100511,161,5,1,1,2,0.02675,0.862539 } ); +cells.push_back( {10100521,181,5,1,2,2,0.02675,0.812977 } ); +cells.push_back( {10200511,162,5,2,1,2,0.075,0.862539 } ); +cells.push_back( {10200521,182,5,2,2,2,0.075,0.812977 } ); +cells.push_back( {10300511,163,5,3,1,2,0.125,0.862539 } ); +cells.push_back( {10300521,183,5,3,2,2,0.125,0.812977 } ); +cells.push_back( {10400511,164,5,4,1,2,0.175,0.862539 } ); +cells.push_back( {10400521,184,5,4,2,2,0.175,0.812977 } ); +cells.push_back( {10500511,165,5,5,1,2,0.225,0.862539 } ); +cells.push_back( {10500521,185,5,5,2,2,0.225,0.812977 } ); +cells.push_back( {10600511,166,5,6,1,2,0.275,0.862539 } ); +cells.push_back( {10600521,186,5,6,2,2,0.275,0.812977 } ); +cells.push_back( {10700511,167,5,7,1,2,0.325,0.862539 } ); +cells.push_back( {10700521,187,5,7,2,2,0.325,0.812977 } ); +cells.push_back( {10800511,168,5,8,1,2,0.375,0.862539 } ); +cells.push_back( {10800521,188,5,8,2,2,0.375,0.812977 } ); +cells.push_back( {10900511,169,5,9,1,2,0.425,0.862539 } ); +cells.push_back( {10900521,189,5,9,2,2,0.425,0.812977 } ); +cells.push_back( {11000511,170,5,10,1,2,0.475,0.862539 } ); +cells.push_back( {11000521,190,5,10,2,2,0.475,0.812977 } ); +cells.push_back( {11100511,171,5,11,1,2,0.525,0.862539 } ); +cells.push_back( {11100521,191,5,11,2,2,0.525,0.812977 } ); +cells.push_back( {11200511,172,5,12,1,2,0.575,0.862539 } ); +cells.push_back( {11200521,192,5,12,2,2,0.575,0.812977 } ); +cells.push_back( {11300511,173,5,13,1,2,0.625,0.862539 } ); +cells.push_back( {11300521,193,5,13,2,2,0.625,0.812977 } ); +cells.push_back( {11400511,174,5,14,1,2,0.675,0.862539 } ); +cells.push_back( {11400521,194,5,14,2,2,0.675,0.812977 } ); +cells.push_back( {11500511,175,5,15,1,2,0.725,0.862539 } ); +cells.push_back( {11500521,195,5,15,2,2,0.725,0.812977 } ); +cells.push_back( {11600511,176,5,16,1,2,0.775,0.862539 } ); +cells.push_back( {11600521,196,5,16,2,2,0.775,0.812977 } ); +cells.push_back( {11700511,177,5,17,1,2,0.825,0.862539 } ); +cells.push_back( {11700521,197,5,17,2,2,0.825,0.812977 } ); +cells.push_back( {11800511,178,5,18,1,2,0.875,0.862539 } ); +cells.push_back( {11800521,198,5,18,2,2,0.875,0.812977 } ); +cells.push_back( {11900511,179,5,19,1,2,0.925,0.862539 } ); +cells.push_back( {11900521,199,5,19,2,2,0.925,0.812977 } ); +cells.push_back( {12000511,180,5,20,1,2,0.967,0.862539 } ); +cells.push_back( {12000521,200,5,20,2,2,0.967,0.812977 } ); +cells.push_back( {10100512,161,5,1,1,1,0.02675,0.862539 } ); +cells.push_back( {10100522,181,5,1,2,1,0.02675,0.812977 } ); +cells.push_back( {10200512,162,5,2,1,1,0.075,0.862539 } ); +cells.push_back( {10200522,182,5,2,2,1,0.075,0.812977 } ); +cells.push_back( {10300512,163,5,3,1,1,0.125,0.862539 } ); +cells.push_back( {10300522,183,5,3,2,1,0.125,0.812977 } ); +cells.push_back( {10400512,164,5,4,1,1,0.175,0.862539 } ); +cells.push_back( {10400522,184,5,4,2,1,0.175,0.812977 } ); +cells.push_back( {10500512,165,5,5,1,1,0.225,0.862539 } ); +cells.push_back( {10500522,185,5,5,2,1,0.225,0.812977 } ); +cells.push_back( {10600512,166,5,6,1,1,0.275,0.862539 } ); +cells.push_back( {10600522,186,5,6,2,1,0.275,0.812977 } ); +cells.push_back( {10700512,167,5,7,1,1,0.325,0.862539 } ); +cells.push_back( {10700522,187,5,7,2,1,0.325,0.812977 } ); +cells.push_back( {10800512,168,5,8,1,1,0.375,0.862539 } ); +cells.push_back( {10800522,188,5,8,2,1,0.375,0.812977 } ); +cells.push_back( {10900512,169,5,9,1,1,0.425,0.862539 } ); +cells.push_back( {10900522,189,5,9,2,1,0.425,0.812977 } ); +cells.push_back( {11000512,170,5,10,1,1,0.475,0.862539 } ); +cells.push_back( {11000522,190,5,10,2,1,0.475,0.812977 } ); +cells.push_back( {11100512,171,5,11,1,1,0.525,0.862539 } ); +cells.push_back( {11100522,191,5,11,2,1,0.525,0.812977 } ); +cells.push_back( {11200512,172,5,12,1,1,0.575,0.862539 } ); +cells.push_back( {11200522,192,5,12,2,1,0.575,0.812977 } ); +cells.push_back( {11300512,173,5,13,1,1,0.625,0.862539 } ); +cells.push_back( {11300522,193,5,13,2,1,0.625,0.812977 } ); +cells.push_back( {11400512,174,5,14,1,1,0.675,0.862539 } ); +cells.push_back( {11400522,194,5,14,2,1,0.675,0.812977 } ); +cells.push_back( {11500512,175,5,15,1,1,0.725,0.862539 } ); +cells.push_back( {11500522,195,5,15,2,1,0.725,0.812977 } ); +cells.push_back( {11600512,176,5,16,1,1,0.775,0.862539 } ); +cells.push_back( {11600522,196,5,16,2,1,0.775,0.812977 } ); +cells.push_back( {11700512,177,5,17,1,1,0.825,0.862539 } ); +cells.push_back( {11700522,197,5,17,2,1,0.825,0.812977 } ); +cells.push_back( {11800512,178,5,18,1,1,0.875,0.862539 } ); +cells.push_back( {11800522,198,5,18,2,1,0.875,0.812977 } ); +cells.push_back( {11900512,179,5,19,1,1,0.925,0.862539 } ); +cells.push_back( {11900522,199,5,19,2,1,0.925,0.812977 } ); +cells.push_back( {12000512,180,5,20,1,1,0.967,0.862539 } ); +cells.push_back( {12000522,200,5,20,2,1,0.967,0.812977 } ); +cells.push_back( {10100611,201,6,1,1,2,0.02675,0.75782 } ); +cells.push_back( {10100621,221,6,1,2,2,0.02675,0.708257 } ); +cells.push_back( {10200611,202,6,2,1,2,0.075,0.75782 } ); +cells.push_back( {10200621,222,6,2,2,2,0.075,0.708257 } ); +cells.push_back( {10300611,203,6,3,1,2,0.125,0.75782 } ); +cells.push_back( {10300621,223,6,3,2,2,0.125,0.708257 } ); +cells.push_back( {10400611,204,6,4,1,2,0.175,0.75782 } ); +cells.push_back( {10400621,224,6,4,2,2,0.175,0.708257 } ); +cells.push_back( {10500611,205,6,5,1,2,0.225,0.75782 } ); +cells.push_back( {10500621,225,6,5,2,2,0.225,0.708257 } ); +cells.push_back( {10600611,206,6,6,1,2,0.275,0.75782 } ); +cells.push_back( {10600621,226,6,6,2,2,0.275,0.708257 } ); +cells.push_back( {10700611,207,6,7,1,2,0.325,0.75782 } ); +cells.push_back( {10700621,227,6,7,2,2,0.325,0.708257 } ); +cells.push_back( {10800611,208,6,8,1,2,0.375,0.75782 } ); +cells.push_back( {10800621,228,6,8,2,2,0.375,0.708257 } ); +cells.push_back( {10900611,209,6,9,1,2,0.425,0.75782 } ); +cells.push_back( {10900621,229,6,9,2,2,0.425,0.708257 } ); +cells.push_back( {11000611,210,6,10,1,2,0.475,0.75782 } ); +cells.push_back( {11000621,230,6,10,2,2,0.475,0.708257 } ); +cells.push_back( {11100611,211,6,11,1,2,0.525,0.75782 } ); +cells.push_back( {11100621,231,6,11,2,2,0.525,0.708257 } ); +cells.push_back( {11200611,212,6,12,1,2,0.575,0.75782 } ); +cells.push_back( {11200621,232,6,12,2,2,0.575,0.708257 } ); +cells.push_back( {11300611,213,6,13,1,2,0.625,0.75782 } ); +cells.push_back( {11300621,233,6,13,2,2,0.625,0.708257 } ); +cells.push_back( {11400611,214,6,14,1,2,0.675,0.75782 } ); +cells.push_back( {11400621,234,6,14,2,2,0.675,0.708257 } ); +cells.push_back( {11500611,215,6,15,1,2,0.725,0.75782 } ); +cells.push_back( {11500621,235,6,15,2,2,0.725,0.708257 } ); +cells.push_back( {11600611,216,6,16,1,2,0.775,0.75782 } ); +cells.push_back( {11600621,236,6,16,2,2,0.775,0.708257 } ); +cells.push_back( {11700611,217,6,17,1,2,0.825,0.75782 } ); +cells.push_back( {11700621,237,6,17,2,2,0.825,0.708257 } ); +cells.push_back( {11800611,218,6,18,1,2,0.875,0.75782 } ); +cells.push_back( {11800621,238,6,18,2,2,0.875,0.708257 } ); +cells.push_back( {11900611,219,6,19,1,2,0.925,0.75782 } ); +cells.push_back( {11900621,239,6,19,2,2,0.925,0.708257 } ); +cells.push_back( {12000611,220,6,20,1,2,0.967,0.75782 } ); +cells.push_back( {12000621,240,6,20,2,2,0.967,0.708257 } ); +cells.push_back( {10100612,201,6,1,1,1,0.02675,0.75782 } ); +cells.push_back( {10100622,221,6,1,2,1,0.02675,0.708257 } ); +cells.push_back( {10200612,202,6,2,1,1,0.075,0.75782 } ); +cells.push_back( {10200622,222,6,2,2,1,0.075,0.708257 } ); +cells.push_back( {10300612,203,6,3,1,1,0.125,0.75782 } ); +cells.push_back( {10300622,223,6,3,2,1,0.125,0.708257 } ); +cells.push_back( {10400612,204,6,4,1,1,0.175,0.75782 } ); +cells.push_back( {10400622,224,6,4,2,1,0.175,0.708257 } ); +cells.push_back( {10500612,205,6,5,1,1,0.225,0.75782 } ); +cells.push_back( {10500622,225,6,5,2,1,0.225,0.708257 } ); +cells.push_back( {10600612,206,6,6,1,1,0.275,0.75782 } ); +cells.push_back( {10600622,226,6,6,2,1,0.275,0.708257 } ); +cells.push_back( {10700612,207,6,7,1,1,0.325,0.75782 } ); +cells.push_back( {10700622,227,6,7,2,1,0.325,0.708257 } ); +cells.push_back( {10800612,208,6,8,1,1,0.375,0.75782 } ); +cells.push_back( {10800622,228,6,8,2,1,0.375,0.708257 } ); +cells.push_back( {10900612,209,6,9,1,1,0.425,0.75782 } ); +cells.push_back( {10900622,229,6,9,2,1,0.425,0.708257 } ); +cells.push_back( {11000612,210,6,10,1,1,0.475,0.75782 } ); +cells.push_back( {11000622,230,6,10,2,1,0.475,0.708257 } ); +cells.push_back( {11100612,211,6,11,1,1,0.525,0.75782 } ); +cells.push_back( {11100622,231,6,11,2,1,0.525,0.708257 } ); +cells.push_back( {11200612,212,6,12,1,1,0.575,0.75782 } ); +cells.push_back( {11200622,232,6,12,2,1,0.575,0.708257 } ); +cells.push_back( {11300612,213,6,13,1,1,0.625,0.75782 } ); +cells.push_back( {11300622,233,6,13,2,1,0.625,0.708257 } ); +cells.push_back( {11400612,214,6,14,1,1,0.675,0.75782 } ); +cells.push_back( {11400622,234,6,14,2,1,0.675,0.708257 } ); +cells.push_back( {11500612,215,6,15,1,1,0.725,0.75782 } ); +cells.push_back( {11500622,235,6,15,2,1,0.725,0.708257 } ); +cells.push_back( {11600612,216,6,16,1,1,0.775,0.75782 } ); +cells.push_back( {11600622,236,6,16,2,1,0.775,0.708257 } ); +cells.push_back( {11700612,217,6,17,1,1,0.825,0.75782 } ); +cells.push_back( {11700622,237,6,17,2,1,0.825,0.708257 } ); +cells.push_back( {11800612,218,6,18,1,1,0.875,0.75782 } ); +cells.push_back( {11800622,238,6,18,2,1,0.875,0.708257 } ); +cells.push_back( {11900612,219,6,19,1,1,0.925,0.75782 } ); +cells.push_back( {11900622,239,6,19,2,1,0.925,0.708257 } ); +cells.push_back( {12000612,220,6,20,1,1,0.967,0.75782 } ); +cells.push_back( {12000622,240,6,20,2,1,0.967,0.708257 } ); +cells.push_back( {10100711,241,7,1,1,2,0.02675,0.6531 } ); +cells.push_back( {10100721,261,7,1,2,2,0.02675,0.603537 } ); +cells.push_back( {10200711,242,7,2,1,2,0.075,0.6531 } ); +cells.push_back( {10200721,262,7,2,2,2,0.075,0.603537 } ); +cells.push_back( {10300711,243,7,3,1,2,0.125,0.6531 } ); +cells.push_back( {10300721,263,7,3,2,2,0.125,0.603537 } ); +cells.push_back( {10400711,244,7,4,1,2,0.175,0.6531 } ); +cells.push_back( {10400721,264,7,4,2,2,0.175,0.603537 } ); +cells.push_back( {10500711,245,7,5,1,2,0.225,0.6531 } ); +cells.push_back( {10500721,265,7,5,2,2,0.225,0.603537 } ); +cells.push_back( {10600711,246,7,6,1,2,0.275,0.6531 } ); +cells.push_back( {10600721,266,7,6,2,2,0.275,0.603537 } ); +cells.push_back( {10700711,247,7,7,1,2,0.325,0.6531 } ); +cells.push_back( {10700721,267,7,7,2,2,0.325,0.603537 } ); +cells.push_back( {10800711,248,7,8,1,2,0.375,0.6531 } ); +cells.push_back( {10800721,268,7,8,2,2,0.375,0.603537 } ); +cells.push_back( {10900711,249,7,9,1,2,0.425,0.6531 } ); +cells.push_back( {10900721,269,7,9,2,2,0.425,0.603537 } ); +cells.push_back( {11000711,250,7,10,1,2,0.475,0.6531 } ); +cells.push_back( {11000721,270,7,10,2,2,0.475,0.603537 } ); +cells.push_back( {11100711,251,7,11,1,2,0.525,0.6531 } ); +cells.push_back( {11100721,271,7,11,2,2,0.525,0.603537 } ); +cells.push_back( {11200711,252,7,12,1,2,0.575,0.6531 } ); +cells.push_back( {11200721,272,7,12,2,2,0.575,0.603537 } ); +cells.push_back( {11300711,253,7,13,1,2,0.625,0.6531 } ); +cells.push_back( {11300721,273,7,13,2,2,0.625,0.603537 } ); +cells.push_back( {11400711,254,7,14,1,2,0.675,0.6531 } ); +cells.push_back( {11400721,274,7,14,2,2,0.675,0.603537 } ); +cells.push_back( {11500711,255,7,15,1,2,0.725,0.6531 } ); +cells.push_back( {11500721,275,7,15,2,2,0.725,0.603537 } ); +cells.push_back( {11600711,256,7,16,1,2,0.775,0.6531 } ); +cells.push_back( {11600721,276,7,16,2,2,0.775,0.603537 } ); +cells.push_back( {11700711,257,7,17,1,2,0.825,0.6531 } ); +cells.push_back( {11700721,277,7,17,2,2,0.825,0.603537 } ); +cells.push_back( {11800711,258,7,18,1,2,0.875,0.6531 } ); +cells.push_back( {11800721,278,7,18,2,2,0.875,0.603537 } ); +cells.push_back( {11900711,259,7,19,1,2,0.925,0.6531 } ); +cells.push_back( {11900721,279,7,19,2,2,0.925,0.603537 } ); +cells.push_back( {12000711,260,7,20,1,2,0.967,0.6531 } ); +cells.push_back( {12000721,280,7,20,2,2,0.967,0.603537 } ); +cells.push_back( {10100712,241,7,1,1,1,0.02675,0.6531 } ); +cells.push_back( {10100722,261,7,1,2,1,0.02675,0.603537 } ); +cells.push_back( {10200712,242,7,2,1,1,0.075,0.6531 } ); +cells.push_back( {10200722,262,7,2,2,1,0.075,0.603537 } ); +cells.push_back( {10300712,243,7,3,1,1,0.125,0.6531 } ); +cells.push_back( {10300722,263,7,3,2,1,0.125,0.603537 } ); +cells.push_back( {10400712,244,7,4,1,1,0.175,0.6531 } ); +cells.push_back( {10400722,264,7,4,2,1,0.175,0.603537 } ); +cells.push_back( {10500712,245,7,5,1,1,0.225,0.6531 } ); +cells.push_back( {10500722,265,7,5,2,1,0.225,0.603537 } ); +cells.push_back( {10600712,246,7,6,1,1,0.275,0.6531 } ); +cells.push_back( {10600722,266,7,6,2,1,0.275,0.603537 } ); +cells.push_back( {10700712,247,7,7,1,1,0.325,0.6531 } ); +cells.push_back( {10700722,267,7,7,2,1,0.325,0.603537 } ); +cells.push_back( {10800712,248,7,8,1,1,0.375,0.6531 } ); +cells.push_back( {10800722,268,7,8,2,1,0.375,0.603537 } ); +cells.push_back( {10900712,249,7,9,1,1,0.425,0.6531 } ); +cells.push_back( {10900722,269,7,9,2,1,0.425,0.603537 } ); +cells.push_back( {11000712,250,7,10,1,1,0.475,0.6531 } ); +cells.push_back( {11000722,270,7,10,2,1,0.475,0.603537 } ); +cells.push_back( {11100712,251,7,11,1,1,0.525,0.6531 } ); +cells.push_back( {11100722,271,7,11,2,1,0.525,0.603537 } ); +cells.push_back( {11200712,252,7,12,1,1,0.575,0.6531 } ); +cells.push_back( {11200722,272,7,12,2,1,0.575,0.603537 } ); +cells.push_back( {11300712,253,7,13,1,1,0.625,0.6531 } ); +cells.push_back( {11300722,273,7,13,2,1,0.625,0.603537 } ); +cells.push_back( {11400712,254,7,14,1,1,0.675,0.6531 } ); +cells.push_back( {11400722,274,7,14,2,1,0.675,0.603537 } ); +cells.push_back( {11500712,255,7,15,1,1,0.725,0.6531 } ); +cells.push_back( {11500722,275,7,15,2,1,0.725,0.603537 } ); +cells.push_back( {11600712,256,7,16,1,1,0.775,0.6531 } ); +cells.push_back( {11600722,276,7,16,2,1,0.775,0.603537 } ); +cells.push_back( {11700712,257,7,17,1,1,0.825,0.6531 } ); +cells.push_back( {11700722,277,7,17,2,1,0.825,0.603537 } ); +cells.push_back( {11800712,258,7,18,1,1,0.875,0.6531 } ); +cells.push_back( {11800722,278,7,18,2,1,0.875,0.603537 } ); +cells.push_back( {11900712,259,7,19,1,1,0.925,0.6531 } ); +cells.push_back( {11900722,279,7,19,2,1,0.925,0.603537 } ); +cells.push_back( {12000712,260,7,20,1,1,0.967,0.6531 } ); +cells.push_back( {12000722,280,7,20,2,1,0.967,0.603537 } ); +cells.push_back( {10100811,281,8,1,1,2,0.02675,0.54838 } ); +cells.push_back( {10100821,301,8,1,2,2,0.02675,0.498817 } ); +cells.push_back( {10200811,282,8,2,1,2,0.075,0.54838 } ); +cells.push_back( {10200821,302,8,2,2,2,0.075,0.498817 } ); +cells.push_back( {10300811,283,8,3,1,2,0.125,0.54838 } ); +cells.push_back( {10300821,303,8,3,2,2,0.125,0.498817 } ); +cells.push_back( {10400811,284,8,4,1,2,0.175,0.54838 } ); +cells.push_back( {10400821,304,8,4,2,2,0.175,0.498817 } ); +cells.push_back( {10500811,285,8,5,1,2,0.225,0.54838 } ); +cells.push_back( {10500821,305,8,5,2,2,0.225,0.498817 } ); +cells.push_back( {10600811,286,8,6,1,2,0.275,0.54838 } ); +cells.push_back( {10600821,306,8,6,2,2,0.275,0.498817 } ); +cells.push_back( {10700811,287,8,7,1,2,0.325,0.54838 } ); +cells.push_back( {10700821,307,8,7,2,2,0.325,0.498817 } ); +cells.push_back( {10800811,288,8,8,1,2,0.375,0.54838 } ); +cells.push_back( {10800821,308,8,8,2,2,0.375,0.498817 } ); +cells.push_back( {10900811,289,8,9,1,2,0.425,0.54838 } ); +cells.push_back( {10900821,309,8,9,2,2,0.425,0.498817 } ); +cells.push_back( {11000811,290,8,10,1,2,0.475,0.54838 } ); +cells.push_back( {11000821,310,8,10,2,2,0.475,0.498817 } ); +cells.push_back( {11100811,291,8,11,1,2,0.525,0.54838 } ); +cells.push_back( {11100821,311,8,11,2,2,0.525,0.498817 } ); +cells.push_back( {11200811,292,8,12,1,2,0.575,0.54838 } ); +cells.push_back( {11200821,312,8,12,2,2,0.575,0.498817 } ); +cells.push_back( {11300811,293,8,13,1,2,0.625,0.54838 } ); +cells.push_back( {11300821,313,8,13,2,2,0.625,0.498817 } ); +cells.push_back( {11400811,294,8,14,1,2,0.675,0.54838 } ); +cells.push_back( {11400821,314,8,14,2,2,0.675,0.498817 } ); +cells.push_back( {11500811,295,8,15,1,2,0.725,0.54838 } ); +cells.push_back( {11500821,315,8,15,2,2,0.725,0.498817 } ); +cells.push_back( {11600811,296,8,16,1,2,0.775,0.54838 } ); +cells.push_back( {11600821,316,8,16,2,2,0.775,0.498817 } ); +cells.push_back( {11700811,297,8,17,1,2,0.825,0.54838 } ); +cells.push_back( {11700821,317,8,17,2,2,0.825,0.498817 } ); +cells.push_back( {11800811,298,8,18,1,2,0.875,0.54838 } ); +cells.push_back( {11800821,318,8,18,2,2,0.875,0.498817 } ); +cells.push_back( {11900811,299,8,19,1,2,0.925,0.54838 } ); +cells.push_back( {11900821,319,8,19,2,2,0.925,0.498817 } ); +cells.push_back( {12000811,300,8,20,1,2,0.967,0.54838 } ); +cells.push_back( {12000821,320,8,20,2,2,0.967,0.498817 } ); +cells.push_back( {10100812,281,8,1,1,1,0.02675,0.54838 } ); +cells.push_back( {10100822,301,8,1,2,1,0.02675,0.498817 } ); +cells.push_back( {10200812,282,8,2,1,1,0.075,0.54838 } ); +cells.push_back( {10200822,302,8,2,2,1,0.075,0.498817 } ); +cells.push_back( {10300812,283,8,3,1,1,0.125,0.54838 } ); +cells.push_back( {10300822,303,8,3,2,1,0.125,0.498817 } ); +cells.push_back( {10400812,284,8,4,1,1,0.175,0.54838 } ); +cells.push_back( {10400822,304,8,4,2,1,0.175,0.498817 } ); +cells.push_back( {10500812,285,8,5,1,1,0.225,0.54838 } ); +cells.push_back( {10500822,305,8,5,2,1,0.225,0.498817 } ); +cells.push_back( {10600812,286,8,6,1,1,0.275,0.54838 } ); +cells.push_back( {10600822,306,8,6,2,1,0.275,0.498817 } ); +cells.push_back( {10700812,287,8,7,1,1,0.325,0.54838 } ); +cells.push_back( {10700822,307,8,7,2,1,0.325,0.498817 } ); +cells.push_back( {10800812,288,8,8,1,1,0.375,0.54838 } ); +cells.push_back( {10800822,308,8,8,2,1,0.375,0.498817 } ); +cells.push_back( {10900812,289,8,9,1,1,0.425,0.54838 } ); +cells.push_back( {10900822,309,8,9,2,1,0.425,0.498817 } ); +cells.push_back( {11000812,290,8,10,1,1,0.475,0.54838 } ); +cells.push_back( {11000822,310,8,10,2,1,0.475,0.498817 } ); +cells.push_back( {11100812,291,8,11,1,1,0.525,0.54838 } ); +cells.push_back( {11100822,311,8,11,2,1,0.525,0.498817 } ); +cells.push_back( {11200812,292,8,12,1,1,0.575,0.54838 } ); +cells.push_back( {11200822,312,8,12,2,1,0.575,0.498817 } ); +cells.push_back( {11300812,293,8,13,1,1,0.625,0.54838 } ); +cells.push_back( {11300822,313,8,13,2,1,0.625,0.498817 } ); +cells.push_back( {11400812,294,8,14,1,1,0.675,0.54838 } ); +cells.push_back( {11400822,314,8,14,2,1,0.675,0.498817 } ); +cells.push_back( {11500812,295,8,15,1,1,0.725,0.54838 } ); +cells.push_back( {11500822,315,8,15,2,1,0.725,0.498817 } ); +cells.push_back( {11600812,296,8,16,1,1,0.775,0.54838 } ); +cells.push_back( {11600822,316,8,16,2,1,0.775,0.498817 } ); +cells.push_back( {11700812,297,8,17,1,1,0.825,0.54838 } ); +cells.push_back( {11700822,317,8,17,2,1,0.825,0.498817 } ); +cells.push_back( {11800812,298,8,18,1,1,0.875,0.54838 } ); +cells.push_back( {11800822,318,8,18,2,1,0.875,0.498817 } ); +cells.push_back( {11900812,299,8,19,1,1,0.925,0.54838 } ); +cells.push_back( {11900822,319,8,19,2,1,0.925,0.498817 } ); +cells.push_back( {12000812,300,8,20,1,1,0.967,0.54838 } ); +cells.push_back( {12000822,320,8,20,2,1,0.967,0.498817 } ); +cells.push_back( {10100911,321,9,1,1,2,0.02675,0.44366 } ); +cells.push_back( {10100921,341,9,1,2,2,0.02675,0.394098 } ); +cells.push_back( {10200911,322,9,2,1,2,0.075,0.44366 } ); +cells.push_back( {10200921,342,9,2,2,2,0.075,0.394098 } ); +cells.push_back( {10300911,323,9,3,1,2,0.125,0.44366 } ); +cells.push_back( {10300921,343,9,3,2,2,0.125,0.394098 } ); +cells.push_back( {10400911,324,9,4,1,2,0.175,0.44366 } ); +cells.push_back( {10400921,344,9,4,2,2,0.175,0.394098 } ); +cells.push_back( {10500911,325,9,5,1,2,0.225,0.44366 } ); +cells.push_back( {10500921,345,9,5,2,2,0.225,0.394098 } ); +cells.push_back( {10600911,326,9,6,1,2,0.275,0.44366 } ); +cells.push_back( {10600921,346,9,6,2,2,0.275,0.394098 } ); +cells.push_back( {10700911,327,9,7,1,2,0.325,0.44366 } ); +cells.push_back( {10700921,347,9,7,2,2,0.325,0.394098 } ); +cells.push_back( {10800911,328,9,8,1,2,0.375,0.44366 } ); +cells.push_back( {10800921,348,9,8,2,2,0.375,0.394098 } ); +cells.push_back( {10900911,329,9,9,1,2,0.425,0.44366 } ); +cells.push_back( {10900921,349,9,9,2,2,0.425,0.394098 } ); +cells.push_back( {11000911,330,9,10,1,2,0.475,0.44366 } ); +cells.push_back( {11000921,350,9,10,2,2,0.475,0.394098 } ); +cells.push_back( {11100911,331,9,11,1,2,0.525,0.44366 } ); +cells.push_back( {11100921,351,9,11,2,2,0.525,0.394098 } ); +cells.push_back( {11200911,332,9,12,1,2,0.575,0.44366 } ); +cells.push_back( {11200921,352,9,12,2,2,0.575,0.394098 } ); +cells.push_back( {11300911,333,9,13,1,2,0.625,0.44366 } ); +cells.push_back( {11300921,353,9,13,2,2,0.625,0.394098 } ); +cells.push_back( {11400911,334,9,14,1,2,0.675,0.44366 } ); +cells.push_back( {11400921,354,9,14,2,2,0.675,0.394098 } ); +cells.push_back( {11500911,335,9,15,1,2,0.725,0.44366 } ); +cells.push_back( {11500921,355,9,15,2,2,0.725,0.394098 } ); +cells.push_back( {11600911,336,9,16,1,2,0.775,0.44366 } ); +cells.push_back( {11600921,356,9,16,2,2,0.775,0.394098 } ); +cells.push_back( {11700911,337,9,17,1,2,0.825,0.44366 } ); +cells.push_back( {11700921,357,9,17,2,2,0.825,0.394098 } ); +cells.push_back( {11800911,338,9,18,1,2,0.875,0.44366 } ); +cells.push_back( {11800921,358,9,18,2,2,0.875,0.394098 } ); +cells.push_back( {11900911,339,9,19,1,2,0.925,0.44366 } ); +cells.push_back( {11900921,359,9,19,2,2,0.925,0.394098 } ); +cells.push_back( {12000911,340,9,20,1,2,0.967,0.44366 } ); +cells.push_back( {12000921,360,9,20,2,2,0.967,0.394098 } ); +cells.push_back( {10100912,321,9,1,1,1,0.02675,0.44366 } ); +cells.push_back( {10100922,341,9,1,2,1,0.02675,0.394098 } ); +cells.push_back( {10200912,322,9,2,1,1,0.075,0.44366 } ); +cells.push_back( {10200922,342,9,2,2,1,0.075,0.394098 } ); +cells.push_back( {10300912,323,9,3,1,1,0.125,0.44366 } ); +cells.push_back( {10300922,343,9,3,2,1,0.125,0.394098 } ); +cells.push_back( {10400912,324,9,4,1,1,0.175,0.44366 } ); +cells.push_back( {10400922,344,9,4,2,1,0.175,0.394098 } ); +cells.push_back( {10500912,325,9,5,1,1,0.225,0.44366 } ); +cells.push_back( {10500922,345,9,5,2,1,0.225,0.394098 } ); +cells.push_back( {10600912,326,9,6,1,1,0.275,0.44366 } ); +cells.push_back( {10600922,346,9,6,2,1,0.275,0.394098 } ); +cells.push_back( {10700912,327,9,7,1,1,0.325,0.44366 } ); +cells.push_back( {10700922,347,9,7,2,1,0.325,0.394098 } ); +cells.push_back( {10800912,328,9,8,1,1,0.375,0.44366 } ); +cells.push_back( {10800922,348,9,8,2,1,0.375,0.394098 } ); +cells.push_back( {10900912,329,9,9,1,1,0.425,0.44366 } ); +cells.push_back( {10900922,349,9,9,2,1,0.425,0.394098 } ); +cells.push_back( {11000912,330,9,10,1,1,0.475,0.44366 } ); +cells.push_back( {11000922,350,9,10,2,1,0.475,0.394098 } ); +cells.push_back( {11100912,331,9,11,1,1,0.525,0.44366 } ); +cells.push_back( {11100922,351,9,11,2,1,0.525,0.394098 } ); +cells.push_back( {11200912,332,9,12,1,1,0.575,0.44366 } ); +cells.push_back( {11200922,352,9,12,2,1,0.575,0.394098 } ); +cells.push_back( {11300912,333,9,13,1,1,0.625,0.44366 } ); +cells.push_back( {11300922,353,9,13,2,1,0.625,0.394098 } ); +cells.push_back( {11400912,334,9,14,1,1,0.675,0.44366 } ); +cells.push_back( {11400922,354,9,14,2,1,0.675,0.394098 } ); +cells.push_back( {11500912,335,9,15,1,1,0.725,0.44366 } ); +cells.push_back( {11500922,355,9,15,2,1,0.725,0.394098 } ); +cells.push_back( {11600912,336,9,16,1,1,0.775,0.44366 } ); +cells.push_back( {11600922,356,9,16,2,1,0.775,0.394098 } ); +cells.push_back( {11700912,337,9,17,1,1,0.825,0.44366 } ); +cells.push_back( {11700922,357,9,17,2,1,0.825,0.394098 } ); +cells.push_back( {11800912,338,9,18,1,1,0.875,0.44366 } ); +cells.push_back( {11800922,358,9,18,2,1,0.875,0.394098 } ); +cells.push_back( {11900912,339,9,19,1,1,0.925,0.44366 } ); +cells.push_back( {11900922,359,9,19,2,1,0.925,0.394098 } ); +cells.push_back( {12000912,340,9,20,1,1,0.967,0.44366 } ); +cells.push_back( {12000922,360,9,20,2,1,0.967,0.394098 } ); +cells.push_back( {10101011,361,10,1,1,2,0.02675,0.338941 } ); +cells.push_back( {10101021,381,10,1,2,2,0.02675,0.289378 } ); +cells.push_back( {10201011,362,10,2,1,2,0.075,0.338941 } ); +cells.push_back( {10201021,382,10,2,2,2,0.075,0.289378 } ); +cells.push_back( {10301011,363,10,3,1,2,0.125,0.338941 } ); +cells.push_back( {10301021,383,10,3,2,2,0.125,0.289378 } ); +cells.push_back( {10401011,364,10,4,1,2,0.175,0.338941 } ); +cells.push_back( {10401021,384,10,4,2,2,0.175,0.289378 } ); +cells.push_back( {10501011,365,10,5,1,2,0.225,0.338941 } ); +cells.push_back( {10501021,385,10,5,2,2,0.225,0.289378 } ); +cells.push_back( {10601011,366,10,6,1,2,0.275,0.338941 } ); +cells.push_back( {10601021,386,10,6,2,2,0.275,0.289378 } ); +cells.push_back( {10701011,367,10,7,1,2,0.325,0.338941 } ); +cells.push_back( {10701021,387,10,7,2,2,0.325,0.289378 } ); +cells.push_back( {10801011,368,10,8,1,2,0.375,0.338941 } ); +cells.push_back( {10801021,388,10,8,2,2,0.375,0.289378 } ); +cells.push_back( {10901011,369,10,9,1,2,0.425,0.338941 } ); +cells.push_back( {10901021,389,10,9,2,2,0.425,0.289378 } ); +cells.push_back( {11001011,370,10,10,1,2,0.475,0.338941 } ); +cells.push_back( {11001021,390,10,10,2,2,0.475,0.289378 } ); +cells.push_back( {11101011,371,10,11,1,2,0.525,0.338941 } ); +cells.push_back( {11101021,391,10,11,2,2,0.525,0.289378 } ); +cells.push_back( {11201011,372,10,12,1,2,0.575,0.338941 } ); +cells.push_back( {11201021,392,10,12,2,2,0.575,0.289378 } ); +cells.push_back( {11301011,373,10,13,1,2,0.625,0.338941 } ); +cells.push_back( {11301021,393,10,13,2,2,0.625,0.289378 } ); +cells.push_back( {11401011,374,10,14,1,2,0.675,0.338941 } ); +cells.push_back( {11401021,394,10,14,2,2,0.675,0.289378 } ); +cells.push_back( {11501011,375,10,15,1,2,0.725,0.338941 } ); +cells.push_back( {11501021,395,10,15,2,2,0.725,0.289378 } ); +cells.push_back( {11601011,376,10,16,1,2,0.775,0.338941 } ); +cells.push_back( {11601021,396,10,16,2,2,0.775,0.289378 } ); +cells.push_back( {11701011,377,10,17,1,2,0.825,0.338941 } ); +cells.push_back( {11701021,397,10,17,2,2,0.825,0.289378 } ); +cells.push_back( {11801011,378,10,18,1,2,0.875,0.338941 } ); +cells.push_back( {11801021,398,10,18,2,2,0.875,0.289378 } ); +cells.push_back( {11901011,379,10,19,1,2,0.925,0.338941 } ); +cells.push_back( {11901021,399,10,19,2,2,0.925,0.289378 } ); +cells.push_back( {12001011,380,10,20,1,2,0.967,0.338941 } ); +cells.push_back( {12001021,400,10,20,2,2,0.967,0.289378 } ); +cells.push_back( {10101012,361,10,1,1,1,0.02675,0.338941 } ); +cells.push_back( {10101022,381,10,1,2,1,0.02675,0.289378 } ); +cells.push_back( {10201012,362,10,2,1,1,0.075,0.338941 } ); +cells.push_back( {10201022,382,10,2,2,1,0.075,0.289378 } ); +cells.push_back( {10301012,363,10,3,1,1,0.125,0.338941 } ); +cells.push_back( {10301022,383,10,3,2,1,0.125,0.289378 } ); +cells.push_back( {10401012,364,10,4,1,1,0.175,0.338941 } ); +cells.push_back( {10401022,384,10,4,2,1,0.175,0.289378 } ); +cells.push_back( {10501012,365,10,5,1,1,0.225,0.338941 } ); +cells.push_back( {10501022,385,10,5,2,1,0.225,0.289378 } ); +cells.push_back( {10601012,366,10,6,1,1,0.275,0.338941 } ); +cells.push_back( {10601022,386,10,6,2,1,0.275,0.289378 } ); +cells.push_back( {10701012,367,10,7,1,1,0.325,0.338941 } ); +cells.push_back( {10701022,387,10,7,2,1,0.325,0.289378 } ); +cells.push_back( {10801012,368,10,8,1,1,0.375,0.338941 } ); +cells.push_back( {10801022,388,10,8,2,1,0.375,0.289378 } ); +cells.push_back( {10901012,369,10,9,1,1,0.425,0.338941 } ); +cells.push_back( {10901022,389,10,9,2,1,0.425,0.289378 } ); +cells.push_back( {11001012,370,10,10,1,1,0.475,0.338941 } ); +cells.push_back( {11001022,390,10,10,2,1,0.475,0.289378 } ); +cells.push_back( {11101012,371,10,11,1,1,0.525,0.338941 } ); +cells.push_back( {11101022,391,10,11,2,1,0.525,0.289378 } ); +cells.push_back( {11201012,372,10,12,1,1,0.575,0.338941 } ); +cells.push_back( {11201022,392,10,12,2,1,0.575,0.289378 } ); +cells.push_back( {11301012,373,10,13,1,1,0.625,0.338941 } ); +cells.push_back( {11301022,393,10,13,2,1,0.625,0.289378 } ); +cells.push_back( {11401012,374,10,14,1,1,0.675,0.338941 } ); +cells.push_back( {11401022,394,10,14,2,1,0.675,0.289378 } ); +cells.push_back( {11501012,375,10,15,1,1,0.725,0.338941 } ); +cells.push_back( {11501022,395,10,15,2,1,0.725,0.289378 } ); +cells.push_back( {11601012,376,10,16,1,1,0.775,0.338941 } ); +cells.push_back( {11601022,396,10,16,2,1,0.775,0.289378 } ); +cells.push_back( {11701012,377,10,17,1,1,0.825,0.338941 } ); +cells.push_back( {11701022,397,10,17,2,1,0.825,0.289378 } ); +cells.push_back( {11801012,378,10,18,1,1,0.875,0.338941 } ); +cells.push_back( {11801022,398,10,18,2,1,0.875,0.289378 } ); +cells.push_back( {11901012,379,10,19,1,1,0.925,0.338941 } ); +cells.push_back( {11901022,399,10,19,2,1,0.925,0.289378 } ); +cells.push_back( {12001012,380,10,20,1,1,0.967,0.338941 } ); +cells.push_back( {12001022,400,10,20,2,1,0.967,0.289378 } ); +cells.push_back( {10101111,401,11,1,1,2,0.02675,0.234221 } ); +cells.push_back( {10101121,421,11,1,2,2,0.02675,0.184658 } ); +cells.push_back( {10201111,402,11,2,1,2,0.075,0.234221 } ); +cells.push_back( {10201121,422,11,2,2,2,0.075,0.184658 } ); +cells.push_back( {10301111,403,11,3,1,2,0.125,0.234221 } ); +cells.push_back( {10301121,423,11,3,2,2,0.125,0.184658 } ); +cells.push_back( {10401111,404,11,4,1,2,0.175,0.234221 } ); +cells.push_back( {10401121,424,11,4,2,2,0.175,0.184658 } ); +cells.push_back( {10501111,405,11,5,1,2,0.225,0.234221 } ); +cells.push_back( {10501121,425,11,5,2,2,0.225,0.184658 } ); +cells.push_back( {10601111,406,11,6,1,2,0.275,0.234221 } ); +cells.push_back( {10601121,426,11,6,2,2,0.275,0.184658 } ); +cells.push_back( {10701111,407,11,7,1,2,0.325,0.234221 } ); +cells.push_back( {10701121,427,11,7,2,2,0.325,0.184658 } ); +cells.push_back( {10801111,408,11,8,1,2,0.375,0.234221 } ); +cells.push_back( {10801121,428,11,8,2,2,0.375,0.184658 } ); +cells.push_back( {10901111,409,11,9,1,2,0.425,0.234221 } ); +cells.push_back( {10901121,429,11,9,2,2,0.425,0.184658 } ); +cells.push_back( {11001111,410,11,10,1,2,0.475,0.234221 } ); +cells.push_back( {11001121,430,11,10,2,2,0.475,0.184658 } ); +cells.push_back( {11101111,411,11,11,1,2,0.525,0.234221 } ); +cells.push_back( {11101121,431,11,11,2,2,0.525,0.184658 } ); +cells.push_back( {11201111,412,11,12,1,2,0.575,0.234221 } ); +cells.push_back( {11201121,432,11,12,2,2,0.575,0.184658 } ); +cells.push_back( {11301111,413,11,13,1,2,0.625,0.234221 } ); +cells.push_back( {11301121,433,11,13,2,2,0.625,0.184658 } ); +cells.push_back( {11401111,414,11,14,1,2,0.675,0.234221 } ); +cells.push_back( {11401121,434,11,14,2,2,0.675,0.184658 } ); +cells.push_back( {11501111,415,11,15,1,2,0.725,0.234221 } ); +cells.push_back( {11501121,435,11,15,2,2,0.725,0.184658 } ); +cells.push_back( {11601111,416,11,16,1,2,0.775,0.234221 } ); +cells.push_back( {11601121,436,11,16,2,2,0.775,0.184658 } ); +cells.push_back( {11701111,417,11,17,1,2,0.825,0.234221 } ); +cells.push_back( {11701121,437,11,17,2,2,0.825,0.184658 } ); +cells.push_back( {11801111,418,11,18,1,2,0.875,0.234221 } ); +cells.push_back( {11801121,438,11,18,2,2,0.875,0.184658 } ); +cells.push_back( {11901111,419,11,19,1,2,0.925,0.234221 } ); +cells.push_back( {11901121,439,11,19,2,2,0.925,0.184658 } ); +cells.push_back( {12001111,420,11,20,1,2,0.967,0.234221 } ); +cells.push_back( {12001121,440,11,20,2,2,0.967,0.184658 } ); +cells.push_back( {10101112,401,11,1,1,1,0.02675,0.234221 } ); +cells.push_back( {10101122,421,11,1,2,1,0.02675,0.184658 } ); +cells.push_back( {10201112,402,11,2,1,1,0.075,0.234221 } ); +cells.push_back( {10201122,422,11,2,2,1,0.075,0.184658 } ); +cells.push_back( {10301112,403,11,3,1,1,0.125,0.234221 } ); +cells.push_back( {10301122,423,11,3,2,1,0.125,0.184658 } ); +cells.push_back( {10401112,404,11,4,1,1,0.175,0.234221 } ); +cells.push_back( {10401122,424,11,4,2,1,0.175,0.184658 } ); +cells.push_back( {10501112,405,11,5,1,1,0.225,0.234221 } ); +cells.push_back( {10501122,425,11,5,2,1,0.225,0.184658 } ); +cells.push_back( {10601112,406,11,6,1,1,0.275,0.234221 } ); +cells.push_back( {10601122,426,11,6,2,1,0.275,0.184658 } ); +cells.push_back( {10701112,407,11,7,1,1,0.325,0.234221 } ); +cells.push_back( {10701122,427,11,7,2,1,0.325,0.184658 } ); +cells.push_back( {10801112,408,11,8,1,1,0.375,0.234221 } ); +cells.push_back( {10801122,428,11,8,2,1,0.375,0.184658 } ); +cells.push_back( {10901112,409,11,9,1,1,0.425,0.234221 } ); +cells.push_back( {10901122,429,11,9,2,1,0.425,0.184658 } ); +cells.push_back( {11001112,410,11,10,1,1,0.475,0.234221 } ); +cells.push_back( {11001122,430,11,10,2,1,0.475,0.184658 } ); +cells.push_back( {11101112,411,11,11,1,1,0.525,0.234221 } ); +cells.push_back( {11101122,431,11,11,2,1,0.525,0.184658 } ); +cells.push_back( {11201112,412,11,12,1,1,0.575,0.234221 } ); +cells.push_back( {11201122,432,11,12,2,1,0.575,0.184658 } ); +cells.push_back( {11301112,413,11,13,1,1,0.625,0.234221 } ); +cells.push_back( {11301122,433,11,13,2,1,0.625,0.184658 } ); +cells.push_back( {11401112,414,11,14,1,1,0.675,0.234221 } ); +cells.push_back( {11401122,434,11,14,2,1,0.675,0.184658 } ); +cells.push_back( {11501112,415,11,15,1,1,0.725,0.234221 } ); +cells.push_back( {11501122,435,11,15,2,1,0.725,0.184658 } ); +cells.push_back( {11601112,416,11,16,1,1,0.775,0.234221 } ); +cells.push_back( {11601122,436,11,16,2,1,0.775,0.184658 } ); +cells.push_back( {11701112,417,11,17,1,1,0.825,0.234221 } ); +cells.push_back( {11701122,437,11,17,2,1,0.825,0.184658 } ); +cells.push_back( {11801112,418,11,18,1,1,0.875,0.234221 } ); +cells.push_back( {11801122,438,11,18,2,1,0.875,0.184658 } ); +cells.push_back( {11901112,419,11,19,1,1,0.925,0.234221 } ); +cells.push_back( {11901122,439,11,19,2,1,0.925,0.184658 } ); +cells.push_back( {12001112,420,11,20,1,1,0.967,0.234221 } ); +cells.push_back( {12001122,440,11,20,2,1,0.967,0.184658 } ); +cells.push_back( {10101211,441,12,1,1,2,0.02675,0.129501 } ); +cells.push_back( {10101221,461,12,1,2,2,0.02675,0.0799383 } ); +cells.push_back( {10201211,442,12,2,1,2,0.075,0.129501 } ); +cells.push_back( {10201221,462,12,2,2,2,0.075,0.0799383 } ); +cells.push_back( {10301211,443,12,3,1,2,0.125,0.129501 } ); +cells.push_back( {10301221,463,12,3,2,2,0.125,0.0799383 } ); +cells.push_back( {10401211,444,12,4,1,2,0.175,0.129501 } ); +cells.push_back( {10401221,464,12,4,2,2,0.175,0.0799383 } ); +cells.push_back( {10501211,445,12,5,1,2,0.225,0.129501 } ); +cells.push_back( {10501221,465,12,5,2,2,0.225,0.0799383 } ); +cells.push_back( {10601211,446,12,6,1,2,0.275,0.129501 } ); +cells.push_back( {10601221,466,12,6,2,2,0.275,0.0799383 } ); +cells.push_back( {10701211,447,12,7,1,2,0.325,0.129501 } ); +cells.push_back( {10701221,467,12,7,2,2,0.325,0.0799383 } ); +cells.push_back( {10801211,448,12,8,1,2,0.375,0.129501 } ); +cells.push_back( {10801221,468,12,8,2,2,0.375,0.0799383 } ); +cells.push_back( {10901211,449,12,9,1,2,0.425,0.129501 } ); +cells.push_back( {10901221,469,12,9,2,2,0.425,0.0799383 } ); +cells.push_back( {11001211,450,12,10,1,2,0.475,0.129501 } ); +cells.push_back( {11001221,470,12,10,2,2,0.475,0.0799383 } ); +cells.push_back( {11101211,451,12,11,1,2,0.525,0.129501 } ); +cells.push_back( {11101221,471,12,11,2,2,0.525,0.0799383 } ); +cells.push_back( {11201211,452,12,12,1,2,0.575,0.129501 } ); +cells.push_back( {11201221,472,12,12,2,2,0.575,0.0799383 } ); +cells.push_back( {11301211,453,12,13,1,2,0.625,0.129501 } ); +cells.push_back( {11301221,473,12,13,2,2,0.625,0.0799383 } ); +cells.push_back( {11401211,454,12,14,1,2,0.675,0.129501 } ); +cells.push_back( {11401221,474,12,14,2,2,0.675,0.0799383 } ); +cells.push_back( {11501211,455,12,15,1,2,0.725,0.129501 } ); +cells.push_back( {11501221,475,12,15,2,2,0.725,0.0799383 } ); +cells.push_back( {11601211,456,12,16,1,2,0.775,0.129501 } ); +cells.push_back( {11601221,476,12,16,2,2,0.775,0.0799383 } ); +cells.push_back( {11701211,457,12,17,1,2,0.825,0.129501 } ); +cells.push_back( {11701221,477,12,17,2,2,0.825,0.0799383 } ); +cells.push_back( {11801211,458,12,18,1,2,0.875,0.129501 } ); +cells.push_back( {11801221,478,12,18,2,2,0.875,0.0799383 } ); +cells.push_back( {11901211,459,12,19,1,2,0.925,0.129501 } ); +cells.push_back( {11901221,479,12,19,2,2,0.925,0.0799383 } ); +cells.push_back( {12001211,460,12,20,1,2,0.967,0.129501 } ); +cells.push_back( {12001221,480,12,20,2,2,0.967,0.0799383 } ); +cells.push_back( {10101212,441,12,1,1,1,0.02675,0.129501 } ); +cells.push_back( {10101222,461,12,1,2,1,0.02675,0.0799383 } ); +cells.push_back( {10201212,442,12,2,1,1,0.075,0.129501 } ); +cells.push_back( {10201222,462,12,2,2,1,0.075,0.0799383 } ); +cells.push_back( {10301212,443,12,3,1,1,0.125,0.129501 } ); +cells.push_back( {10301222,463,12,3,2,1,0.125,0.0799383 } ); +cells.push_back( {10401212,444,12,4,1,1,0.175,0.129501 } ); +cells.push_back( {10401222,464,12,4,2,1,0.175,0.0799383 } ); +cells.push_back( {10501212,445,12,5,1,1,0.225,0.129501 } ); +cells.push_back( {10501222,465,12,5,2,1,0.225,0.0799383 } ); +cells.push_back( {10601212,446,12,6,1,1,0.275,0.129501 } ); +cells.push_back( {10601222,466,12,6,2,1,0.275,0.0799383 } ); +cells.push_back( {10701212,447,12,7,1,1,0.325,0.129501 } ); +cells.push_back( {10701222,467,12,7,2,1,0.325,0.0799383 } ); +cells.push_back( {10801212,448,12,8,1,1,0.375,0.129501 } ); +cells.push_back( {10801222,468,12,8,2,1,0.375,0.0799383 } ); +cells.push_back( {10901212,449,12,9,1,1,0.425,0.129501 } ); +cells.push_back( {10901222,469,12,9,2,1,0.425,0.0799383 } ); +cells.push_back( {11001212,450,12,10,1,1,0.475,0.129501 } ); +cells.push_back( {11001222,470,12,10,2,1,0.475,0.0799383 } ); +cells.push_back( {11101212,451,12,11,1,1,0.525,0.129501 } ); +cells.push_back( {11101222,471,12,11,2,1,0.525,0.0799383 } ); +cells.push_back( {11201212,452,12,12,1,1,0.575,0.129501 } ); +cells.push_back( {11201222,472,12,12,2,1,0.575,0.0799383 } ); +cells.push_back( {11301212,453,12,13,1,1,0.625,0.129501 } ); +cells.push_back( {11301222,473,12,13,2,1,0.625,0.0799383 } ); +cells.push_back( {11401212,454,12,14,1,1,0.675,0.129501 } ); +cells.push_back( {11401222,474,12,14,2,1,0.675,0.0799383 } ); +cells.push_back( {11501212,455,12,15,1,1,0.725,0.129501 } ); +cells.push_back( {11501222,475,12,15,2,1,0.725,0.0799383 } ); +cells.push_back( {11601212,456,12,16,1,1,0.775,0.129501 } ); +cells.push_back( {11601222,476,12,16,2,1,0.775,0.0799383 } ); +cells.push_back( {11701212,457,12,17,1,1,0.825,0.129501 } ); +cells.push_back( {11701222,477,12,17,2,1,0.825,0.0799383 } ); +cells.push_back( {11801212,458,12,18,1,1,0.875,0.129501 } ); +cells.push_back( {11801222,478,12,18,2,1,0.875,0.0799383 } ); +cells.push_back( {11901212,459,12,19,1,1,0.925,0.129501 } ); +cells.push_back( {11901222,479,12,19,2,1,0.925,0.0799383 } ); +cells.push_back( {12001212,460,12,20,1,1,0.967,0.129501 } ); +cells.push_back( {12001222,480,12,20,2,1,0.967,0.0799383 } ); +cells.push_back( {10101311,481,13,1,1,2,0.02675,0.0247814 } ); +cells.push_back( {10101321,501,13,1,2,2,0.02675,-0.0247814 } ); +cells.push_back( {10201311,482,13,2,1,2,0.075,0.0247814 } ); +cells.push_back( {10201321,502,13,2,2,2,0.075,-0.0247814 } ); +cells.push_back( {10301311,483,13,3,1,2,0.125,0.0247814 } ); +cells.push_back( {10301321,503,13,3,2,2,0.125,-0.0247814 } ); +cells.push_back( {10401311,484,13,4,1,2,0.175,0.0247814 } ); +cells.push_back( {10401321,504,13,4,2,2,0.175,-0.0247814 } ); +cells.push_back( {10501311,485,13,5,1,2,0.225,0.0247814 } ); +cells.push_back( {10501321,505,13,5,2,2,0.225,-0.0247814 } ); +cells.push_back( {10601311,486,13,6,1,2,0.275,0.0247814 } ); +cells.push_back( {10601321,506,13,6,2,2,0.275,-0.0247814 } ); +cells.push_back( {10701311,487,13,7,1,2,0.325,0.0247814 } ); +cells.push_back( {10701321,507,13,7,2,2,0.325,-0.0247814 } ); +cells.push_back( {10801311,488,13,8,1,2,0.375,0.0247814 } ); +cells.push_back( {10801321,508,13,8,2,2,0.375,-0.0247814 } ); +cells.push_back( {10901311,489,13,9,1,2,0.425,0.0247814 } ); +cells.push_back( {10901321,509,13,9,2,2,0.425,-0.0247814 } ); +cells.push_back( {11001311,490,13,10,1,2,0.475,0.0247814 } ); +cells.push_back( {11001321,510,13,10,2,2,0.475,-0.0247814 } ); +cells.push_back( {11101311,491,13,11,1,2,0.525,0.0247814 } ); +cells.push_back( {11101321,511,13,11,2,2,0.525,-0.0247814 } ); +cells.push_back( {11201311,492,13,12,1,2,0.575,0.0247814 } ); +cells.push_back( {11201321,512,13,12,2,2,0.575,-0.0247814 } ); +cells.push_back( {11301311,493,13,13,1,2,0.625,0.0247814 } ); +cells.push_back( {11301321,513,13,13,2,2,0.625,-0.0247814 } ); +cells.push_back( {11401311,494,13,14,1,2,0.675,0.0247814 } ); +cells.push_back( {11401321,514,13,14,2,2,0.675,-0.0247814 } ); +cells.push_back( {11501311,495,13,15,1,2,0.725,0.0247814 } ); +cells.push_back( {11501321,515,13,15,2,2,0.725,-0.0247814 } ); +cells.push_back( {11601311,496,13,16,1,2,0.775,0.0247814 } ); +cells.push_back( {11601321,516,13,16,2,2,0.775,-0.0247814 } ); +cells.push_back( {11701311,497,13,17,1,2,0.825,0.0247814 } ); +cells.push_back( {11701321,517,13,17,2,2,0.825,-0.0247814 } ); +cells.push_back( {11801311,498,13,18,1,2,0.875,0.0247814 } ); +cells.push_back( {11801321,518,13,18,2,2,0.875,-0.0247814 } ); +cells.push_back( {11901311,499,13,19,1,2,0.925,0.0247814 } ); +cells.push_back( {11901321,519,13,19,2,2,0.925,-0.0247814 } ); +cells.push_back( {12001311,500,13,20,1,2,0.967,0.0247814 } ); +cells.push_back( {12001321,520,13,20,2,2,0.967,-0.0247814 } ); +cells.push_back( {10101312,481,13,1,1,1,0.02675,0.0247814 } ); +cells.push_back( {10101322,501,13,1,2,1,0.02675,-0.0247814 } ); +cells.push_back( {10201312,482,13,2,1,1,0.075,0.0247814 } ); +cells.push_back( {10201322,502,13,2,2,1,0.075,-0.0247814 } ); +cells.push_back( {10301312,483,13,3,1,1,0.125,0.0247814 } ); +cells.push_back( {10301322,503,13,3,2,1,0.125,-0.0247814 } ); +cells.push_back( {10401312,484,13,4,1,1,0.175,0.0247814 } ); +cells.push_back( {10401322,504,13,4,2,1,0.175,-0.0247814 } ); +cells.push_back( {10501312,485,13,5,1,1,0.225,0.0247814 } ); +cells.push_back( {10501322,505,13,5,2,1,0.225,-0.0247814 } ); +cells.push_back( {10601312,486,13,6,1,1,0.275,0.0247814 } ); +cells.push_back( {10601322,506,13,6,2,1,0.275,-0.0247814 } ); +cells.push_back( {10701312,487,13,7,1,1,0.325,0.0247814 } ); +cells.push_back( {10701322,507,13,7,2,1,0.325,-0.0247814 } ); +cells.push_back( {10801312,488,13,8,1,1,0.375,0.0247814 } ); +cells.push_back( {10801322,508,13,8,2,1,0.375,-0.0247814 } ); +cells.push_back( {10901312,489,13,9,1,1,0.425,0.0247814 } ); +cells.push_back( {10901322,509,13,9,2,1,0.425,-0.0247814 } ); +cells.push_back( {11001312,490,13,10,1,1,0.475,0.0247814 } ); +cells.push_back( {11001322,510,13,10,2,1,0.475,-0.0247814 } ); +cells.push_back( {11101312,491,13,11,1,1,0.525,0.0247814 } ); +cells.push_back( {11101322,511,13,11,2,1,0.525,-0.0247814 } ); +cells.push_back( {11201312,492,13,12,1,1,0.575,0.0247814 } ); +cells.push_back( {11201322,512,13,12,2,1,0.575,-0.0247814 } ); +cells.push_back( {11301312,493,13,13,1,1,0.625,0.0247814 } ); +cells.push_back( {11301322,513,13,13,2,1,0.625,-0.0247814 } ); +cells.push_back( {11401312,494,13,14,1,1,0.675,0.0247814 } ); +cells.push_back( {11401322,514,13,14,2,1,0.675,-0.0247814 } ); +cells.push_back( {11501312,495,13,15,1,1,0.725,0.0247814 } ); +cells.push_back( {11501322,515,13,15,2,1,0.725,-0.0247814 } ); +cells.push_back( {11601312,496,13,16,1,1,0.775,0.0247814 } ); +cells.push_back( {11601322,516,13,16,2,1,0.775,-0.0247814 } ); +cells.push_back( {11701312,497,13,17,1,1,0.825,0.0247814 } ); +cells.push_back( {11701322,517,13,17,2,1,0.825,-0.0247814 } ); +cells.push_back( {11801312,498,13,18,1,1,0.875,0.0247814 } ); +cells.push_back( {11801322,518,13,18,2,1,0.875,-0.0247814 } ); +cells.push_back( {11901312,499,13,19,1,1,0.925,0.0247814 } ); +cells.push_back( {11901322,519,13,19,2,1,0.925,-0.0247814 } ); +cells.push_back( {12001312,500,13,20,1,1,0.967,0.0247814 } ); +cells.push_back( {12001322,520,13,20,2,1,0.967,-0.0247814 } ); +cells.push_back( {10101411,521,14,1,1,2,0.02675,-0.0799383 } ); +cells.push_back( {10101421,541,14,1,2,2,0.02675,-0.129501 } ); +cells.push_back( {10201411,522,14,2,1,2,0.075,-0.0799383 } ); +cells.push_back( {10201421,542,14,2,2,2,0.075,-0.129501 } ); +cells.push_back( {10301411,523,14,3,1,2,0.125,-0.0799383 } ); +cells.push_back( {10301421,543,14,3,2,2,0.125,-0.129501 } ); +cells.push_back( {10401411,524,14,4,1,2,0.175,-0.0799383 } ); +cells.push_back( {10401421,544,14,4,2,2,0.175,-0.129501 } ); +cells.push_back( {10501411,525,14,5,1,2,0.225,-0.0799383 } ); +cells.push_back( {10501421,545,14,5,2,2,0.225,-0.129501 } ); +cells.push_back( {10601411,526,14,6,1,2,0.275,-0.0799383 } ); +cells.push_back( {10601421,546,14,6,2,2,0.275,-0.129501 } ); +cells.push_back( {10701411,527,14,7,1,2,0.325,-0.0799383 } ); +cells.push_back( {10701421,547,14,7,2,2,0.325,-0.129501 } ); +cells.push_back( {10801411,528,14,8,1,2,0.375,-0.0799383 } ); +cells.push_back( {10801421,548,14,8,2,2,0.375,-0.129501 } ); +cells.push_back( {10901411,529,14,9,1,2,0.425,-0.0799383 } ); +cells.push_back( {10901421,549,14,9,2,2,0.425,-0.129501 } ); +cells.push_back( {11001411,530,14,10,1,2,0.475,-0.0799383 } ); +cells.push_back( {11001421,550,14,10,2,2,0.475,-0.129501 } ); +cells.push_back( {11101411,531,14,11,1,2,0.525,-0.0799383 } ); +cells.push_back( {11101421,551,14,11,2,2,0.525,-0.129501 } ); +cells.push_back( {11201411,532,14,12,1,2,0.575,-0.0799383 } ); +cells.push_back( {11201421,552,14,12,2,2,0.575,-0.129501 } ); +cells.push_back( {11301411,533,14,13,1,2,0.625,-0.0799383 } ); +cells.push_back( {11301421,553,14,13,2,2,0.625,-0.129501 } ); +cells.push_back( {11401411,534,14,14,1,2,0.675,-0.0799383 } ); +cells.push_back( {11401421,554,14,14,2,2,0.675,-0.129501 } ); +cells.push_back( {11501411,535,14,15,1,2,0.725,-0.0799383 } ); +cells.push_back( {11501421,555,14,15,2,2,0.725,-0.129501 } ); +cells.push_back( {11601411,536,14,16,1,2,0.775,-0.0799383 } ); +cells.push_back( {11601421,556,14,16,2,2,0.775,-0.129501 } ); +cells.push_back( {11701411,537,14,17,1,2,0.825,-0.0799383 } ); +cells.push_back( {11701421,557,14,17,2,2,0.825,-0.129501 } ); +cells.push_back( {11801411,538,14,18,1,2,0.875,-0.0799383 } ); +cells.push_back( {11801421,558,14,18,2,2,0.875,-0.129501 } ); +cells.push_back( {11901411,539,14,19,1,2,0.925,-0.0799383 } ); +cells.push_back( {11901421,559,14,19,2,2,0.925,-0.129501 } ); +cells.push_back( {12001411,540,14,20,1,2,0.967,-0.0799383 } ); +cells.push_back( {12001421,560,14,20,2,2,0.967,-0.129501 } ); +cells.push_back( {10101412,521,14,1,1,1,0.02675,-0.0799383 } ); +cells.push_back( {10101422,541,14,1,2,1,0.02675,-0.129501 } ); +cells.push_back( {10201412,522,14,2,1,1,0.075,-0.0799383 } ); +cells.push_back( {10201422,542,14,2,2,1,0.075,-0.129501 } ); +cells.push_back( {10301412,523,14,3,1,1,0.125,-0.0799383 } ); +cells.push_back( {10301422,543,14,3,2,1,0.125,-0.129501 } ); +cells.push_back( {10401412,524,14,4,1,1,0.175,-0.0799383 } ); +cells.push_back( {10401422,544,14,4,2,1,0.175,-0.129501 } ); +cells.push_back( {10501412,525,14,5,1,1,0.225,-0.0799383 } ); +cells.push_back( {10501422,545,14,5,2,1,0.225,-0.129501 } ); +cells.push_back( {10601412,526,14,6,1,1,0.275,-0.0799383 } ); +cells.push_back( {10601422,546,14,6,2,1,0.275,-0.129501 } ); +cells.push_back( {10701412,527,14,7,1,1,0.325,-0.0799383 } ); +cells.push_back( {10701422,547,14,7,2,1,0.325,-0.129501 } ); +cells.push_back( {10801412,528,14,8,1,1,0.375,-0.0799383 } ); +cells.push_back( {10801422,548,14,8,2,1,0.375,-0.129501 } ); +cells.push_back( {10901412,529,14,9,1,1,0.425,-0.0799383 } ); +cells.push_back( {10901422,549,14,9,2,1,0.425,-0.129501 } ); +cells.push_back( {11001412,530,14,10,1,1,0.475,-0.0799383 } ); +cells.push_back( {11001422,550,14,10,2,1,0.475,-0.129501 } ); +cells.push_back( {11101412,531,14,11,1,1,0.525,-0.0799383 } ); +cells.push_back( {11101422,551,14,11,2,1,0.525,-0.129501 } ); +cells.push_back( {11201412,532,14,12,1,1,0.575,-0.0799383 } ); +cells.push_back( {11201422,552,14,12,2,1,0.575,-0.129501 } ); +cells.push_back( {11301412,533,14,13,1,1,0.625,-0.0799383 } ); +cells.push_back( {11301422,553,14,13,2,1,0.625,-0.129501 } ); +cells.push_back( {11401412,534,14,14,1,1,0.675,-0.0799383 } ); +cells.push_back( {11401422,554,14,14,2,1,0.675,-0.129501 } ); +cells.push_back( {11501412,535,14,15,1,1,0.725,-0.0799383 } ); +cells.push_back( {11501422,555,14,15,2,1,0.725,-0.129501 } ); +cells.push_back( {11601412,536,14,16,1,1,0.775,-0.0799383 } ); +cells.push_back( {11601422,556,14,16,2,1,0.775,-0.129501 } ); +cells.push_back( {11701412,537,14,17,1,1,0.825,-0.0799383 } ); +cells.push_back( {11701422,557,14,17,2,1,0.825,-0.129501 } ); +cells.push_back( {11801412,538,14,18,1,1,0.875,-0.0799383 } ); +cells.push_back( {11801422,558,14,18,2,1,0.875,-0.129501 } ); +cells.push_back( {11901412,539,14,19,1,1,0.925,-0.0799383 } ); +cells.push_back( {11901422,559,14,19,2,1,0.925,-0.129501 } ); +cells.push_back( {12001412,540,14,20,1,1,0.967,-0.0799383 } ); +cells.push_back( {12001422,560,14,20,2,1,0.967,-0.129501 } ); +cells.push_back( {10101511,561,15,1,1,2,0.02675,-0.184658 } ); +cells.push_back( {10101521,581,15,1,2,2,0.02675,-0.234221 } ); +cells.push_back( {10201511,562,15,2,1,2,0.075,-0.184658 } ); +cells.push_back( {10201521,582,15,2,2,2,0.075,-0.234221 } ); +cells.push_back( {10301511,563,15,3,1,2,0.125,-0.184658 } ); +cells.push_back( {10301521,583,15,3,2,2,0.125,-0.234221 } ); +cells.push_back( {10401511,564,15,4,1,2,0.175,-0.184658 } ); +cells.push_back( {10401521,584,15,4,2,2,0.175,-0.234221 } ); +cells.push_back( {10501511,565,15,5,1,2,0.225,-0.184658 } ); +cells.push_back( {10501521,585,15,5,2,2,0.225,-0.234221 } ); +cells.push_back( {10601511,566,15,6,1,2,0.275,-0.184658 } ); +cells.push_back( {10601521,586,15,6,2,2,0.275,-0.234221 } ); +cells.push_back( {10701511,567,15,7,1,2,0.325,-0.184658 } ); +cells.push_back( {10701521,587,15,7,2,2,0.325,-0.234221 } ); +cells.push_back( {10801511,568,15,8,1,2,0.375,-0.184658 } ); +cells.push_back( {10801521,588,15,8,2,2,0.375,-0.234221 } ); +cells.push_back( {10901511,569,15,9,1,2,0.425,-0.184658 } ); +cells.push_back( {10901521,589,15,9,2,2,0.425,-0.234221 } ); +cells.push_back( {11001511,570,15,10,1,2,0.475,-0.184658 } ); +cells.push_back( {11001521,590,15,10,2,2,0.475,-0.234221 } ); +cells.push_back( {11101511,571,15,11,1,2,0.525,-0.184658 } ); +cells.push_back( {11101521,591,15,11,2,2,0.525,-0.234221 } ); +cells.push_back( {11201511,572,15,12,1,2,0.575,-0.184658 } ); +cells.push_back( {11201521,592,15,12,2,2,0.575,-0.234221 } ); +cells.push_back( {11301511,573,15,13,1,2,0.625,-0.184658 } ); +cells.push_back( {11301521,593,15,13,2,2,0.625,-0.234221 } ); +cells.push_back( {11401511,574,15,14,1,2,0.675,-0.184658 } ); +cells.push_back( {11401521,594,15,14,2,2,0.675,-0.234221 } ); +cells.push_back( {11501511,575,15,15,1,2,0.725,-0.184658 } ); +cells.push_back( {11501521,595,15,15,2,2,0.725,-0.234221 } ); +cells.push_back( {11601511,576,15,16,1,2,0.775,-0.184658 } ); +cells.push_back( {11601521,596,15,16,2,2,0.775,-0.234221 } ); +cells.push_back( {11701511,577,15,17,1,2,0.825,-0.184658 } ); +cells.push_back( {11701521,597,15,17,2,2,0.825,-0.234221 } ); +cells.push_back( {11801511,578,15,18,1,2,0.875,-0.184658 } ); +cells.push_back( {11801521,598,15,18,2,2,0.875,-0.234221 } ); +cells.push_back( {11901511,579,15,19,1,2,0.925,-0.184658 } ); +cells.push_back( {11901521,599,15,19,2,2,0.925,-0.234221 } ); +cells.push_back( {12001511,580,15,20,1,2,0.967,-0.184658 } ); +cells.push_back( {12001521,600,15,20,2,2,0.967,-0.234221 } ); +cells.push_back( {10101512,561,15,1,1,1,0.02675,-0.184658 } ); +cells.push_back( {10101522,581,15,1,2,1,0.02675,-0.234221 } ); +cells.push_back( {10201512,562,15,2,1,1,0.075,-0.184658 } ); +cells.push_back( {10201522,582,15,2,2,1,0.075,-0.234221 } ); +cells.push_back( {10301512,563,15,3,1,1,0.125,-0.184658 } ); +cells.push_back( {10301522,583,15,3,2,1,0.125,-0.234221 } ); +cells.push_back( {10401512,564,15,4,1,1,0.175,-0.184658 } ); +cells.push_back( {10401522,584,15,4,2,1,0.175,-0.234221 } ); +cells.push_back( {10501512,565,15,5,1,1,0.225,-0.184658 } ); +cells.push_back( {10501522,585,15,5,2,1,0.225,-0.234221 } ); +cells.push_back( {10601512,566,15,6,1,1,0.275,-0.184658 } ); +cells.push_back( {10601522,586,15,6,2,1,0.275,-0.234221 } ); +cells.push_back( {10701512,567,15,7,1,1,0.325,-0.184658 } ); +cells.push_back( {10701522,587,15,7,2,1,0.325,-0.234221 } ); +cells.push_back( {10801512,568,15,8,1,1,0.375,-0.184658 } ); +cells.push_back( {10801522,588,15,8,2,1,0.375,-0.234221 } ); +cells.push_back( {10901512,569,15,9,1,1,0.425,-0.184658 } ); +cells.push_back( {10901522,589,15,9,2,1,0.425,-0.234221 } ); +cells.push_back( {11001512,570,15,10,1,1,0.475,-0.184658 } ); +cells.push_back( {11001522,590,15,10,2,1,0.475,-0.234221 } ); +cells.push_back( {11101512,571,15,11,1,1,0.525,-0.184658 } ); +cells.push_back( {11101522,591,15,11,2,1,0.525,-0.234221 } ); +cells.push_back( {11201512,572,15,12,1,1,0.575,-0.184658 } ); +cells.push_back( {11201522,592,15,12,2,1,0.575,-0.234221 } ); +cells.push_back( {11301512,573,15,13,1,1,0.625,-0.184658 } ); +cells.push_back( {11301522,593,15,13,2,1,0.625,-0.234221 } ); +cells.push_back( {11401512,574,15,14,1,1,0.675,-0.184658 } ); +cells.push_back( {11401522,594,15,14,2,1,0.675,-0.234221 } ); +cells.push_back( {11501512,575,15,15,1,1,0.725,-0.184658 } ); +cells.push_back( {11501522,595,15,15,2,1,0.725,-0.234221 } ); +cells.push_back( {11601512,576,15,16,1,1,0.775,-0.184658 } ); +cells.push_back( {11601522,596,15,16,2,1,0.775,-0.234221 } ); +cells.push_back( {11701512,577,15,17,1,1,0.825,-0.184658 } ); +cells.push_back( {11701522,597,15,17,2,1,0.825,-0.234221 } ); +cells.push_back( {11801512,578,15,18,1,1,0.875,-0.184658 } ); +cells.push_back( {11801522,598,15,18,2,1,0.875,-0.234221 } ); +cells.push_back( {11901512,579,15,19,1,1,0.925,-0.184658 } ); +cells.push_back( {11901522,599,15,19,2,1,0.925,-0.234221 } ); +cells.push_back( {12001512,580,15,20,1,1,0.967,-0.184658 } ); +cells.push_back( {12001522,600,15,20,2,1,0.967,-0.234221 } ); +cells.push_back( {10101611,601,16,1,1,2,0.02675,-0.289378 } ); +cells.push_back( {10101621,621,16,1,2,2,0.02675,-0.338941 } ); +cells.push_back( {10201611,602,16,2,1,2,0.075,-0.289378 } ); +cells.push_back( {10201621,622,16,2,2,2,0.075,-0.338941 } ); +cells.push_back( {10301611,603,16,3,1,2,0.125,-0.289378 } ); +cells.push_back( {10301621,623,16,3,2,2,0.125,-0.338941 } ); +cells.push_back( {10401611,604,16,4,1,2,0.175,-0.289378 } ); +cells.push_back( {10401621,624,16,4,2,2,0.175,-0.338941 } ); +cells.push_back( {10501611,605,16,5,1,2,0.225,-0.289378 } ); +cells.push_back( {10501621,625,16,5,2,2,0.225,-0.338941 } ); +cells.push_back( {10601611,606,16,6,1,2,0.275,-0.289378 } ); +cells.push_back( {10601621,626,16,6,2,2,0.275,-0.338941 } ); +cells.push_back( {10701611,607,16,7,1,2,0.325,-0.289378 } ); +cells.push_back( {10701621,627,16,7,2,2,0.325,-0.338941 } ); +cells.push_back( {10801611,608,16,8,1,2,0.375,-0.289378 } ); +cells.push_back( {10801621,628,16,8,2,2,0.375,-0.338941 } ); +cells.push_back( {10901611,609,16,9,1,2,0.425,-0.289378 } ); +cells.push_back( {10901621,629,16,9,2,2,0.425,-0.338941 } ); +cells.push_back( {11001611,610,16,10,1,2,0.475,-0.289378 } ); +cells.push_back( {11001621,630,16,10,2,2,0.475,-0.338941 } ); +cells.push_back( {11101611,611,16,11,1,2,0.525,-0.289378 } ); +cells.push_back( {11101621,631,16,11,2,2,0.525,-0.338941 } ); +cells.push_back( {11201611,612,16,12,1,2,0.575,-0.289378 } ); +cells.push_back( {11201621,632,16,12,2,2,0.575,-0.338941 } ); +cells.push_back( {11301611,613,16,13,1,2,0.625,-0.289378 } ); +cells.push_back( {11301621,633,16,13,2,2,0.625,-0.338941 } ); +cells.push_back( {11401611,614,16,14,1,2,0.675,-0.289378 } ); +cells.push_back( {11401621,634,16,14,2,2,0.675,-0.338941 } ); +cells.push_back( {11501611,615,16,15,1,2,0.725,-0.289378 } ); +cells.push_back( {11501621,635,16,15,2,2,0.725,-0.338941 } ); +cells.push_back( {11601611,616,16,16,1,2,0.775,-0.289378 } ); +cells.push_back( {11601621,636,16,16,2,2,0.775,-0.338941 } ); +cells.push_back( {11701611,617,16,17,1,2,0.825,-0.289378 } ); +cells.push_back( {11701621,637,16,17,2,2,0.825,-0.338941 } ); +cells.push_back( {11801611,618,16,18,1,2,0.875,-0.289378 } ); +cells.push_back( {11801621,638,16,18,2,2,0.875,-0.338941 } ); +cells.push_back( {11901611,619,16,19,1,2,0.925,-0.289378 } ); +cells.push_back( {11901621,639,16,19,2,2,0.925,-0.338941 } ); +cells.push_back( {12001611,620,16,20,1,2,0.967,-0.289378 } ); +cells.push_back( {12001621,640,16,20,2,2,0.967,-0.338941 } ); +cells.push_back( {10101612,601,16,1,1,1,0.02675,-0.289378 } ); +cells.push_back( {10101622,621,16,1,2,1,0.02675,-0.338941 } ); +cells.push_back( {10201612,602,16,2,1,1,0.075,-0.289378 } ); +cells.push_back( {10201622,622,16,2,2,1,0.075,-0.338941 } ); +cells.push_back( {10301612,603,16,3,1,1,0.125,-0.289378 } ); +cells.push_back( {10301622,623,16,3,2,1,0.125,-0.338941 } ); +cells.push_back( {10401612,604,16,4,1,1,0.175,-0.289378 } ); +cells.push_back( {10401622,624,16,4,2,1,0.175,-0.338941 } ); +cells.push_back( {10501612,605,16,5,1,1,0.225,-0.289378 } ); +cells.push_back( {10501622,625,16,5,2,1,0.225,-0.338941 } ); +cells.push_back( {10601612,606,16,6,1,1,0.275,-0.289378 } ); +cells.push_back( {10601622,626,16,6,2,1,0.275,-0.338941 } ); +cells.push_back( {10701612,607,16,7,1,1,0.325,-0.289378 } ); +cells.push_back( {10701622,627,16,7,2,1,0.325,-0.338941 } ); +cells.push_back( {10801612,608,16,8,1,1,0.375,-0.289378 } ); +cells.push_back( {10801622,628,16,8,2,1,0.375,-0.338941 } ); +cells.push_back( {10901612,609,16,9,1,1,0.425,-0.289378 } ); +cells.push_back( {10901622,629,16,9,2,1,0.425,-0.338941 } ); +cells.push_back( {11001612,610,16,10,1,1,0.475,-0.289378 } ); +cells.push_back( {11001622,630,16,10,2,1,0.475,-0.338941 } ); +cells.push_back( {11101612,611,16,11,1,1,0.525,-0.289378 } ); +cells.push_back( {11101622,631,16,11,2,1,0.525,-0.338941 } ); +cells.push_back( {11201612,612,16,12,1,1,0.575,-0.289378 } ); +cells.push_back( {11201622,632,16,12,2,1,0.575,-0.338941 } ); +cells.push_back( {11301612,613,16,13,1,1,0.625,-0.289378 } ); +cells.push_back( {11301622,633,16,13,2,1,0.625,-0.338941 } ); +cells.push_back( {11401612,614,16,14,1,1,0.675,-0.289378 } ); +cells.push_back( {11401622,634,16,14,2,1,0.675,-0.338941 } ); +cells.push_back( {11501612,615,16,15,1,1,0.725,-0.289378 } ); +cells.push_back( {11501622,635,16,15,2,1,0.725,-0.338941 } ); +cells.push_back( {11601612,616,16,16,1,1,0.775,-0.289378 } ); +cells.push_back( {11601622,636,16,16,2,1,0.775,-0.338941 } ); +cells.push_back( {11701612,617,16,17,1,1,0.825,-0.289378 } ); +cells.push_back( {11701622,637,16,17,2,1,0.825,-0.338941 } ); +cells.push_back( {11801612,618,16,18,1,1,0.875,-0.289378 } ); +cells.push_back( {11801622,638,16,18,2,1,0.875,-0.338941 } ); +cells.push_back( {11901612,619,16,19,1,1,0.925,-0.289378 } ); +cells.push_back( {11901622,639,16,19,2,1,0.925,-0.338941 } ); +cells.push_back( {12001612,620,16,20,1,1,0.967,-0.289378 } ); +cells.push_back( {12001622,640,16,20,2,1,0.967,-0.338941 } ); +cells.push_back( {10101711,641,17,1,1,2,0.02675,-0.394098 } ); +cells.push_back( {10101721,661,17,1,2,2,0.02675,-0.44366 } ); +cells.push_back( {10201711,642,17,2,1,2,0.075,-0.394098 } ); +cells.push_back( {10201721,662,17,2,2,2,0.075,-0.44366 } ); +cells.push_back( {10301711,643,17,3,1,2,0.125,-0.394098 } ); +cells.push_back( {10301721,663,17,3,2,2,0.125,-0.44366 } ); +cells.push_back( {10401711,644,17,4,1,2,0.175,-0.394098 } ); +cells.push_back( {10401721,664,17,4,2,2,0.175,-0.44366 } ); +cells.push_back( {10501711,645,17,5,1,2,0.225,-0.394098 } ); +cells.push_back( {10501721,665,17,5,2,2,0.225,-0.44366 } ); +cells.push_back( {10601711,646,17,6,1,2,0.275,-0.394098 } ); +cells.push_back( {10601721,666,17,6,2,2,0.275,-0.44366 } ); +cells.push_back( {10701711,647,17,7,1,2,0.325,-0.394098 } ); +cells.push_back( {10701721,667,17,7,2,2,0.325,-0.44366 } ); +cells.push_back( {10801711,648,17,8,1,2,0.375,-0.394098 } ); +cells.push_back( {10801721,668,17,8,2,2,0.375,-0.44366 } ); +cells.push_back( {10901711,649,17,9,1,2,0.425,-0.394098 } ); +cells.push_back( {10901721,669,17,9,2,2,0.425,-0.44366 } ); +cells.push_back( {11001711,650,17,10,1,2,0.475,-0.394098 } ); +cells.push_back( {11001721,670,17,10,2,2,0.475,-0.44366 } ); +cells.push_back( {11101711,651,17,11,1,2,0.525,-0.394098 } ); +cells.push_back( {11101721,671,17,11,2,2,0.525,-0.44366 } ); +cells.push_back( {11201711,652,17,12,1,2,0.575,-0.394098 } ); +cells.push_back( {11201721,672,17,12,2,2,0.575,-0.44366 } ); +cells.push_back( {11301711,653,17,13,1,2,0.625,-0.394098 } ); +cells.push_back( {11301721,673,17,13,2,2,0.625,-0.44366 } ); +cells.push_back( {11401711,654,17,14,1,2,0.675,-0.394098 } ); +cells.push_back( {11401721,674,17,14,2,2,0.675,-0.44366 } ); +cells.push_back( {11501711,655,17,15,1,2,0.725,-0.394098 } ); +cells.push_back( {11501721,675,17,15,2,2,0.725,-0.44366 } ); +cells.push_back( {11601711,656,17,16,1,2,0.775,-0.394098 } ); +cells.push_back( {11601721,676,17,16,2,2,0.775,-0.44366 } ); +cells.push_back( {11701711,657,17,17,1,2,0.825,-0.394098 } ); +cells.push_back( {11701721,677,17,17,2,2,0.825,-0.44366 } ); +cells.push_back( {11801711,658,17,18,1,2,0.875,-0.394098 } ); +cells.push_back( {11801721,678,17,18,2,2,0.875,-0.44366 } ); +cells.push_back( {11901711,659,17,19,1,2,0.925,-0.394098 } ); +cells.push_back( {11901721,679,17,19,2,2,0.925,-0.44366 } ); +cells.push_back( {12001711,660,17,20,1,2,0.967,-0.394098 } ); +cells.push_back( {12001721,680,17,20,2,2,0.967,-0.44366 } ); +cells.push_back( {10101712,641,17,1,1,1,0.02675,-0.394098 } ); +cells.push_back( {10101722,661,17,1,2,1,0.02675,-0.44366 } ); +cells.push_back( {10201712,642,17,2,1,1,0.075,-0.394098 } ); +cells.push_back( {10201722,662,17,2,2,1,0.075,-0.44366 } ); +cells.push_back( {10301712,643,17,3,1,1,0.125,-0.394098 } ); +cells.push_back( {10301722,663,17,3,2,1,0.125,-0.44366 } ); +cells.push_back( {10401712,644,17,4,1,1,0.175,-0.394098 } ); +cells.push_back( {10401722,664,17,4,2,1,0.175,-0.44366 } ); +cells.push_back( {10501712,645,17,5,1,1,0.225,-0.394098 } ); +cells.push_back( {10501722,665,17,5,2,1,0.225,-0.44366 } ); +cells.push_back( {10601712,646,17,6,1,1,0.275,-0.394098 } ); +cells.push_back( {10601722,666,17,6,2,1,0.275,-0.44366 } ); +cells.push_back( {10701712,647,17,7,1,1,0.325,-0.394098 } ); +cells.push_back( {10701722,667,17,7,2,1,0.325,-0.44366 } ); +cells.push_back( {10801712,648,17,8,1,1,0.375,-0.394098 } ); +cells.push_back( {10801722,668,17,8,2,1,0.375,-0.44366 } ); +cells.push_back( {10901712,649,17,9,1,1,0.425,-0.394098 } ); +cells.push_back( {10901722,669,17,9,2,1,0.425,-0.44366 } ); +cells.push_back( {11001712,650,17,10,1,1,0.475,-0.394098 } ); +cells.push_back( {11001722,670,17,10,2,1,0.475,-0.44366 } ); +cells.push_back( {11101712,651,17,11,1,1,0.525,-0.394098 } ); +cells.push_back( {11101722,671,17,11,2,1,0.525,-0.44366 } ); +cells.push_back( {11201712,652,17,12,1,1,0.575,-0.394098 } ); +cells.push_back( {11201722,672,17,12,2,1,0.575,-0.44366 } ); +cells.push_back( {11301712,653,17,13,1,1,0.625,-0.394098 } ); +cells.push_back( {11301722,673,17,13,2,1,0.625,-0.44366 } ); +cells.push_back( {11401712,654,17,14,1,1,0.675,-0.394098 } ); +cells.push_back( {11401722,674,17,14,2,1,0.675,-0.44366 } ); +cells.push_back( {11501712,655,17,15,1,1,0.725,-0.394098 } ); +cells.push_back( {11501722,675,17,15,2,1,0.725,-0.44366 } ); +cells.push_back( {11601712,656,17,16,1,1,0.775,-0.394098 } ); +cells.push_back( {11601722,676,17,16,2,1,0.775,-0.44366 } ); +cells.push_back( {11701712,657,17,17,1,1,0.825,-0.394098 } ); +cells.push_back( {11701722,677,17,17,2,1,0.825,-0.44366 } ); +cells.push_back( {11801712,658,17,18,1,1,0.875,-0.394098 } ); +cells.push_back( {11801722,678,17,18,2,1,0.875,-0.44366 } ); +cells.push_back( {11901712,659,17,19,1,1,0.925,-0.394098 } ); +cells.push_back( {11901722,679,17,19,2,1,0.925,-0.44366 } ); +cells.push_back( {12001712,660,17,20,1,1,0.967,-0.394098 } ); +cells.push_back( {12001722,680,17,20,2,1,0.967,-0.44366 } ); +cells.push_back( {10101811,681,18,1,1,2,0.02675,-0.498817 } ); +cells.push_back( {10101821,701,18,1,2,2,0.02675,-0.54838 } ); +cells.push_back( {10201811,682,18,2,1,2,0.075,-0.498817 } ); +cells.push_back( {10201821,702,18,2,2,2,0.075,-0.54838 } ); +cells.push_back( {10301811,683,18,3,1,2,0.125,-0.498817 } ); +cells.push_back( {10301821,703,18,3,2,2,0.125,-0.54838 } ); +cells.push_back( {10401811,684,18,4,1,2,0.175,-0.498817 } ); +cells.push_back( {10401821,704,18,4,2,2,0.175,-0.54838 } ); +cells.push_back( {10501811,685,18,5,1,2,0.225,-0.498817 } ); +cells.push_back( {10501821,705,18,5,2,2,0.225,-0.54838 } ); +cells.push_back( {10601811,686,18,6,1,2,0.275,-0.498817 } ); +cells.push_back( {10601821,706,18,6,2,2,0.275,-0.54838 } ); +cells.push_back( {10701811,687,18,7,1,2,0.325,-0.498817 } ); +cells.push_back( {10701821,707,18,7,2,2,0.325,-0.54838 } ); +cells.push_back( {10801811,688,18,8,1,2,0.375,-0.498817 } ); +cells.push_back( {10801821,708,18,8,2,2,0.375,-0.54838 } ); +cells.push_back( {10901811,689,18,9,1,2,0.425,-0.498817 } ); +cells.push_back( {10901821,709,18,9,2,2,0.425,-0.54838 } ); +cells.push_back( {11001811,690,18,10,1,2,0.475,-0.498817 } ); +cells.push_back( {11001821,710,18,10,2,2,0.475,-0.54838 } ); +cells.push_back( {11101811,691,18,11,1,2,0.525,-0.498817 } ); +cells.push_back( {11101821,711,18,11,2,2,0.525,-0.54838 } ); +cells.push_back( {11201811,692,18,12,1,2,0.575,-0.498817 } ); +cells.push_back( {11201821,712,18,12,2,2,0.575,-0.54838 } ); +cells.push_back( {11301811,693,18,13,1,2,0.625,-0.498817 } ); +cells.push_back( {11301821,713,18,13,2,2,0.625,-0.54838 } ); +cells.push_back( {11401811,694,18,14,1,2,0.675,-0.498817 } ); +cells.push_back( {11401821,714,18,14,2,2,0.675,-0.54838 } ); +cells.push_back( {11501811,695,18,15,1,2,0.725,-0.498817 } ); +cells.push_back( {11501821,715,18,15,2,2,0.725,-0.54838 } ); +cells.push_back( {11601811,696,18,16,1,2,0.775,-0.498817 } ); +cells.push_back( {11601821,716,18,16,2,2,0.775,-0.54838 } ); +cells.push_back( {11701811,697,18,17,1,2,0.825,-0.498817 } ); +cells.push_back( {11701821,717,18,17,2,2,0.825,-0.54838 } ); +cells.push_back( {11801811,698,18,18,1,2,0.875,-0.498817 } ); +cells.push_back( {11801821,718,18,18,2,2,0.875,-0.54838 } ); +cells.push_back( {11901811,699,18,19,1,2,0.925,-0.498817 } ); +cells.push_back( {11901821,719,18,19,2,2,0.925,-0.54838 } ); +cells.push_back( {12001811,700,18,20,1,2,0.967,-0.498817 } ); +cells.push_back( {12001821,720,18,20,2,2,0.967,-0.54838 } ); +cells.push_back( {10101812,681,18,1,1,1,0.02675,-0.498817 } ); +cells.push_back( {10101822,701,18,1,2,1,0.02675,-0.54838 } ); +cells.push_back( {10201812,682,18,2,1,1,0.075,-0.498817 } ); +cells.push_back( {10201822,702,18,2,2,1,0.075,-0.54838 } ); +cells.push_back( {10301812,683,18,3,1,1,0.125,-0.498817 } ); +cells.push_back( {10301822,703,18,3,2,1,0.125,-0.54838 } ); +cells.push_back( {10401812,684,18,4,1,1,0.175,-0.498817 } ); +cells.push_back( {10401822,704,18,4,2,1,0.175,-0.54838 } ); +cells.push_back( {10501812,685,18,5,1,1,0.225,-0.498817 } ); +cells.push_back( {10501822,705,18,5,2,1,0.225,-0.54838 } ); +cells.push_back( {10601812,686,18,6,1,1,0.275,-0.498817 } ); +cells.push_back( {10601822,706,18,6,2,1,0.275,-0.54838 } ); +cells.push_back( {10701812,687,18,7,1,1,0.325,-0.498817 } ); +cells.push_back( {10701822,707,18,7,2,1,0.325,-0.54838 } ); +cells.push_back( {10801812,688,18,8,1,1,0.375,-0.498817 } ); +cells.push_back( {10801822,708,18,8,2,1,0.375,-0.54838 } ); +cells.push_back( {10901812,689,18,9,1,1,0.425,-0.498817 } ); +cells.push_back( {10901822,709,18,9,2,1,0.425,-0.54838 } ); +cells.push_back( {11001812,690,18,10,1,1,0.475,-0.498817 } ); +cells.push_back( {11001822,710,18,10,2,1,0.475,-0.54838 } ); +cells.push_back( {11101812,691,18,11,1,1,0.525,-0.498817 } ); +cells.push_back( {11101822,711,18,11,2,1,0.525,-0.54838 } ); +cells.push_back( {11201812,692,18,12,1,1,0.575,-0.498817 } ); +cells.push_back( {11201822,712,18,12,2,1,0.575,-0.54838 } ); +cells.push_back( {11301812,693,18,13,1,1,0.625,-0.498817 } ); +cells.push_back( {11301822,713,18,13,2,1,0.625,-0.54838 } ); +cells.push_back( {11401812,694,18,14,1,1,0.675,-0.498817 } ); +cells.push_back( {11401822,714,18,14,2,1,0.675,-0.54838 } ); +cells.push_back( {11501812,695,18,15,1,1,0.725,-0.498817 } ); +cells.push_back( {11501822,715,18,15,2,1,0.725,-0.54838 } ); +cells.push_back( {11601812,696,18,16,1,1,0.775,-0.498817 } ); +cells.push_back( {11601822,716,18,16,2,1,0.775,-0.54838 } ); +cells.push_back( {11701812,697,18,17,1,1,0.825,-0.498817 } ); +cells.push_back( {11701822,717,18,17,2,1,0.825,-0.54838 } ); +cells.push_back( {11801812,698,18,18,1,1,0.875,-0.498817 } ); +cells.push_back( {11801822,718,18,18,2,1,0.875,-0.54838 } ); +cells.push_back( {11901812,699,18,19,1,1,0.925,-0.498817 } ); +cells.push_back( {11901822,719,18,19,2,1,0.925,-0.54838 } ); +cells.push_back( {12001812,700,18,20,1,1,0.967,-0.498817 } ); +cells.push_back( {12001822,720,18,20,2,1,0.967,-0.54838 } ); +cells.push_back( {10101911,721,19,1,1,2,0.02675,-0.603537 } ); +cells.push_back( {10101921,741,19,1,2,2,0.02675,-0.6531 } ); +cells.push_back( {10201911,722,19,2,1,2,0.075,-0.603537 } ); +cells.push_back( {10201921,742,19,2,2,2,0.075,-0.6531 } ); +cells.push_back( {10301911,723,19,3,1,2,0.125,-0.603537 } ); +cells.push_back( {10301921,743,19,3,2,2,0.125,-0.6531 } ); +cells.push_back( {10401911,724,19,4,1,2,0.175,-0.603537 } ); +cells.push_back( {10401921,744,19,4,2,2,0.175,-0.6531 } ); +cells.push_back( {10501911,725,19,5,1,2,0.225,-0.603537 } ); +cells.push_back( {10501921,745,19,5,2,2,0.225,-0.6531 } ); +cells.push_back( {10601911,726,19,6,1,2,0.275,-0.603537 } ); +cells.push_back( {10601921,746,19,6,2,2,0.275,-0.6531 } ); +cells.push_back( {10701911,727,19,7,1,2,0.325,-0.603537 } ); +cells.push_back( {10701921,747,19,7,2,2,0.325,-0.6531 } ); +cells.push_back( {10801911,728,19,8,1,2,0.375,-0.603537 } ); +cells.push_back( {10801921,748,19,8,2,2,0.375,-0.6531 } ); +cells.push_back( {10901911,729,19,9,1,2,0.425,-0.603537 } ); +cells.push_back( {10901921,749,19,9,2,2,0.425,-0.6531 } ); +cells.push_back( {11001911,730,19,10,1,2,0.475,-0.603537 } ); +cells.push_back( {11001921,750,19,10,2,2,0.475,-0.6531 } ); +cells.push_back( {11101911,731,19,11,1,2,0.525,-0.603537 } ); +cells.push_back( {11101921,751,19,11,2,2,0.525,-0.6531 } ); +cells.push_back( {11201911,732,19,12,1,2,0.575,-0.603537 } ); +cells.push_back( {11201921,752,19,12,2,2,0.575,-0.6531 } ); +cells.push_back( {11301911,733,19,13,1,2,0.625,-0.603537 } ); +cells.push_back( {11301921,753,19,13,2,2,0.625,-0.6531 } ); +cells.push_back( {11401911,734,19,14,1,2,0.675,-0.603537 } ); +cells.push_back( {11401921,754,19,14,2,2,0.675,-0.6531 } ); +cells.push_back( {11501911,735,19,15,1,2,0.725,-0.603537 } ); +cells.push_back( {11501921,755,19,15,2,2,0.725,-0.6531 } ); +cells.push_back( {11601911,736,19,16,1,2,0.775,-0.603537 } ); +cells.push_back( {11601921,756,19,16,2,2,0.775,-0.6531 } ); +cells.push_back( {11701911,737,19,17,1,2,0.825,-0.603537 } ); +cells.push_back( {11701921,757,19,17,2,2,0.825,-0.6531 } ); +cells.push_back( {11801911,738,19,18,1,2,0.875,-0.603537 } ); +cells.push_back( {11801921,758,19,18,2,2,0.875,-0.6531 } ); +cells.push_back( {11901911,739,19,19,1,2,0.925,-0.603537 } ); +cells.push_back( {11901921,759,19,19,2,2,0.925,-0.6531 } ); +cells.push_back( {12001911,740,19,20,1,2,0.967,-0.603537 } ); +cells.push_back( {12001921,760,19,20,2,2,0.967,-0.6531 } ); +cells.push_back( {10101912,721,19,1,1,1,0.02675,-0.603537 } ); +cells.push_back( {10101922,741,19,1,2,1,0.02675,-0.6531 } ); +cells.push_back( {10201912,722,19,2,1,1,0.075,-0.603537 } ); +cells.push_back( {10201922,742,19,2,2,1,0.075,-0.6531 } ); +cells.push_back( {10301912,723,19,3,1,1,0.125,-0.603537 } ); +cells.push_back( {10301922,743,19,3,2,1,0.125,-0.6531 } ); +cells.push_back( {10401912,724,19,4,1,1,0.175,-0.603537 } ); +cells.push_back( {10401922,744,19,4,2,1,0.175,-0.6531 } ); +cells.push_back( {10501912,725,19,5,1,1,0.225,-0.603537 } ); +cells.push_back( {10501922,745,19,5,2,1,0.225,-0.6531 } ); +cells.push_back( {10601912,726,19,6,1,1,0.275,-0.603537 } ); +cells.push_back( {10601922,746,19,6,2,1,0.275,-0.6531 } ); +cells.push_back( {10701912,727,19,7,1,1,0.325,-0.603537 } ); +cells.push_back( {10701922,747,19,7,2,1,0.325,-0.6531 } ); +cells.push_back( {10801912,728,19,8,1,1,0.375,-0.603537 } ); +cells.push_back( {10801922,748,19,8,2,1,0.375,-0.6531 } ); +cells.push_back( {10901912,729,19,9,1,1,0.425,-0.603537 } ); +cells.push_back( {10901922,749,19,9,2,1,0.425,-0.6531 } ); +cells.push_back( {11001912,730,19,10,1,1,0.475,-0.603537 } ); +cells.push_back( {11001922,750,19,10,2,1,0.475,-0.6531 } ); +cells.push_back( {11101912,731,19,11,1,1,0.525,-0.603537 } ); +cells.push_back( {11101922,751,19,11,2,1,0.525,-0.6531 } ); +cells.push_back( {11201912,732,19,12,1,1,0.575,-0.603537 } ); +cells.push_back( {11201922,752,19,12,2,1,0.575,-0.6531 } ); +cells.push_back( {11301912,733,19,13,1,1,0.625,-0.603537 } ); +cells.push_back( {11301922,753,19,13,2,1,0.625,-0.6531 } ); +cells.push_back( {11401912,734,19,14,1,1,0.675,-0.603537 } ); +cells.push_back( {11401922,754,19,14,2,1,0.675,-0.6531 } ); +cells.push_back( {11501912,735,19,15,1,1,0.725,-0.603537 } ); +cells.push_back( {11501922,755,19,15,2,1,0.725,-0.6531 } ); +cells.push_back( {11601912,736,19,16,1,1,0.775,-0.603537 } ); +cells.push_back( {11601922,756,19,16,2,1,0.775,-0.6531 } ); +cells.push_back( {11701912,737,19,17,1,1,0.825,-0.603537 } ); +cells.push_back( {11701922,757,19,17,2,1,0.825,-0.6531 } ); +cells.push_back( {11801912,738,19,18,1,1,0.875,-0.603537 } ); +cells.push_back( {11801922,758,19,18,2,1,0.875,-0.6531 } ); +cells.push_back( {11901912,739,19,19,1,1,0.925,-0.603537 } ); +cells.push_back( {11901922,759,19,19,2,1,0.925,-0.6531 } ); +cells.push_back( {12001912,740,19,20,1,1,0.967,-0.603537 } ); +cells.push_back( {12001922,760,19,20,2,1,0.967,-0.6531 } ); +cells.push_back( {10102011,761,20,1,1,2,0.02675,-0.708257 } ); +cells.push_back( {10102021,781,20,1,2,2,0.02675,-0.75782 } ); +cells.push_back( {10202011,762,20,2,1,2,0.075,-0.708257 } ); +cells.push_back( {10202021,782,20,2,2,2,0.075,-0.75782 } ); +cells.push_back( {10302011,763,20,3,1,2,0.125,-0.708257 } ); +cells.push_back( {10302021,783,20,3,2,2,0.125,-0.75782 } ); +cells.push_back( {10402011,764,20,4,1,2,0.175,-0.708257 } ); +cells.push_back( {10402021,784,20,4,2,2,0.175,-0.75782 } ); +cells.push_back( {10502011,765,20,5,1,2,0.225,-0.708257 } ); +cells.push_back( {10502021,785,20,5,2,2,0.225,-0.75782 } ); +cells.push_back( {10602011,766,20,6,1,2,0.275,-0.708257 } ); +cells.push_back( {10602021,786,20,6,2,2,0.275,-0.75782 } ); +cells.push_back( {10702011,767,20,7,1,2,0.325,-0.708257 } ); +cells.push_back( {10702021,787,20,7,2,2,0.325,-0.75782 } ); +cells.push_back( {10802011,768,20,8,1,2,0.375,-0.708257 } ); +cells.push_back( {10802021,788,20,8,2,2,0.375,-0.75782 } ); +cells.push_back( {10902011,769,20,9,1,2,0.425,-0.708257 } ); +cells.push_back( {10902021,789,20,9,2,2,0.425,-0.75782 } ); +cells.push_back( {11002011,770,20,10,1,2,0.475,-0.708257 } ); +cells.push_back( {11002021,790,20,10,2,2,0.475,-0.75782 } ); +cells.push_back( {11102011,771,20,11,1,2,0.525,-0.708257 } ); +cells.push_back( {11102021,791,20,11,2,2,0.525,-0.75782 } ); +cells.push_back( {11202011,772,20,12,1,2,0.575,-0.708257 } ); +cells.push_back( {11202021,792,20,12,2,2,0.575,-0.75782 } ); +cells.push_back( {11302011,773,20,13,1,2,0.625,-0.708257 } ); +cells.push_back( {11302021,793,20,13,2,2,0.625,-0.75782 } ); +cells.push_back( {11402011,774,20,14,1,2,0.675,-0.708257 } ); +cells.push_back( {11402021,794,20,14,2,2,0.675,-0.75782 } ); +cells.push_back( {11502011,775,20,15,1,2,0.725,-0.708257 } ); +cells.push_back( {11502021,795,20,15,2,2,0.725,-0.75782 } ); +cells.push_back( {11602011,776,20,16,1,2,0.775,-0.708257 } ); +cells.push_back( {11602021,796,20,16,2,2,0.775,-0.75782 } ); +cells.push_back( {11702011,777,20,17,1,2,0.825,-0.708257 } ); +cells.push_back( {11702021,797,20,17,2,2,0.825,-0.75782 } ); +cells.push_back( {11802011,778,20,18,1,2,0.875,-0.708257 } ); +cells.push_back( {11802021,798,20,18,2,2,0.875,-0.75782 } ); +cells.push_back( {11902011,779,20,19,1,2,0.925,-0.708257 } ); +cells.push_back( {11902021,799,20,19,2,2,0.925,-0.75782 } ); +cells.push_back( {12002011,780,20,20,1,2,0.967,-0.708257 } ); +cells.push_back( {12002021,800,20,20,2,2,0.967,-0.75782 } ); +cells.push_back( {10102012,761,20,1,1,1,0.02675,-0.708257 } ); +cells.push_back( {10102022,781,20,1,2,1,0.02675,-0.75782 } ); +cells.push_back( {10202012,762,20,2,1,1,0.075,-0.708257 } ); +cells.push_back( {10202022,782,20,2,2,1,0.075,-0.75782 } ); +cells.push_back( {10302012,763,20,3,1,1,0.125,-0.708257 } ); +cells.push_back( {10302022,783,20,3,2,1,0.125,-0.75782 } ); +cells.push_back( {10402012,764,20,4,1,1,0.175,-0.708257 } ); +cells.push_back( {10402022,784,20,4,2,1,0.175,-0.75782 } ); +cells.push_back( {10502012,765,20,5,1,1,0.225,-0.708257 } ); +cells.push_back( {10502022,785,20,5,2,1,0.225,-0.75782 } ); +cells.push_back( {10602012,766,20,6,1,1,0.275,-0.708257 } ); +cells.push_back( {10602022,786,20,6,2,1,0.275,-0.75782 } ); +cells.push_back( {10702012,767,20,7,1,1,0.325,-0.708257 } ); +cells.push_back( {10702022,787,20,7,2,1,0.325,-0.75782 } ); +cells.push_back( {10802012,768,20,8,1,1,0.375,-0.708257 } ); +cells.push_back( {10802022,788,20,8,2,1,0.375,-0.75782 } ); +cells.push_back( {10902012,769,20,9,1,1,0.425,-0.708257 } ); +cells.push_back( {10902022,789,20,9,2,1,0.425,-0.75782 } ); +cells.push_back( {11002012,770,20,10,1,1,0.475,-0.708257 } ); +cells.push_back( {11002022,790,20,10,2,1,0.475,-0.75782 } ); +cells.push_back( {11102012,771,20,11,1,1,0.525,-0.708257 } ); +cells.push_back( {11102022,791,20,11,2,1,0.525,-0.75782 } ); +cells.push_back( {11202012,772,20,12,1,1,0.575,-0.708257 } ); +cells.push_back( {11202022,792,20,12,2,1,0.575,-0.75782 } ); +cells.push_back( {11302012,773,20,13,1,1,0.625,-0.708257 } ); +cells.push_back( {11302022,793,20,13,2,1,0.625,-0.75782 } ); +cells.push_back( {11402012,774,20,14,1,1,0.675,-0.708257 } ); +cells.push_back( {11402022,794,20,14,2,1,0.675,-0.75782 } ); +cells.push_back( {11502012,775,20,15,1,1,0.725,-0.708257 } ); +cells.push_back( {11502022,795,20,15,2,1,0.725,-0.75782 } ); +cells.push_back( {11602012,776,20,16,1,1,0.775,-0.708257 } ); +cells.push_back( {11602022,796,20,16,2,1,0.775,-0.75782 } ); +cells.push_back( {11702012,777,20,17,1,1,0.825,-0.708257 } ); +cells.push_back( {11702022,797,20,17,2,1,0.825,-0.75782 } ); +cells.push_back( {11802012,778,20,18,1,1,0.875,-0.708257 } ); +cells.push_back( {11802022,798,20,18,2,1,0.875,-0.75782 } ); +cells.push_back( {11902012,779,20,19,1,1,0.925,-0.708257 } ); +cells.push_back( {11902022,799,20,19,2,1,0.925,-0.75782 } ); +cells.push_back( {12002012,780,20,20,1,1,0.967,-0.708257 } ); +cells.push_back( {12002022,800,20,20,2,1,0.967,-0.75782 } ); +cells.push_back( {10102111,801,21,1,1,2,0.02675,-0.812977 } ); +cells.push_back( {10102121,821,21,1,2,2,0.02675,-0.862539 } ); +cells.push_back( {10202111,802,21,2,1,2,0.075,-0.812977 } ); +cells.push_back( {10202121,822,21,2,2,2,0.075,-0.862539 } ); +cells.push_back( {10302111,803,21,3,1,2,0.125,-0.812977 } ); +cells.push_back( {10302121,823,21,3,2,2,0.125,-0.862539 } ); +cells.push_back( {10402111,804,21,4,1,2,0.175,-0.812977 } ); +cells.push_back( {10402121,824,21,4,2,2,0.175,-0.862539 } ); +cells.push_back( {10502111,805,21,5,1,2,0.225,-0.812977 } ); +cells.push_back( {10502121,825,21,5,2,2,0.225,-0.862539 } ); +cells.push_back( {10602111,806,21,6,1,2,0.275,-0.812977 } ); +cells.push_back( {10602121,826,21,6,2,2,0.275,-0.862539 } ); +cells.push_back( {10702111,807,21,7,1,2,0.325,-0.812977 } ); +cells.push_back( {10702121,827,21,7,2,2,0.325,-0.862539 } ); +cells.push_back( {10802111,808,21,8,1,2,0.375,-0.812977 } ); +cells.push_back( {10802121,828,21,8,2,2,0.375,-0.862539 } ); +cells.push_back( {10902111,809,21,9,1,2,0.425,-0.812977 } ); +cells.push_back( {10902121,829,21,9,2,2,0.425,-0.862539 } ); +cells.push_back( {11002111,810,21,10,1,2,0.475,-0.812977 } ); +cells.push_back( {11002121,830,21,10,2,2,0.475,-0.862539 } ); +cells.push_back( {11102111,811,21,11,1,2,0.525,-0.812977 } ); +cells.push_back( {11102121,831,21,11,2,2,0.525,-0.862539 } ); +cells.push_back( {11202111,812,21,12,1,2,0.575,-0.812977 } ); +cells.push_back( {11202121,832,21,12,2,2,0.575,-0.862539 } ); +cells.push_back( {11302111,813,21,13,1,2,0.625,-0.812977 } ); +cells.push_back( {11302121,833,21,13,2,2,0.625,-0.862539 } ); +cells.push_back( {11402111,814,21,14,1,2,0.675,-0.812977 } ); +cells.push_back( {11402121,834,21,14,2,2,0.675,-0.862539 } ); +cells.push_back( {11502111,815,21,15,1,2,0.725,-0.812977 } ); +cells.push_back( {11502121,835,21,15,2,2,0.725,-0.862539 } ); +cells.push_back( {11602111,816,21,16,1,2,0.775,-0.812977 } ); +cells.push_back( {11602121,836,21,16,2,2,0.775,-0.862539 } ); +cells.push_back( {11702111,817,21,17,1,2,0.825,-0.812977 } ); +cells.push_back( {11702121,837,21,17,2,2,0.825,-0.862539 } ); +cells.push_back( {11802111,818,21,18,1,2,0.875,-0.812977 } ); +cells.push_back( {11802121,838,21,18,2,2,0.875,-0.862539 } ); +cells.push_back( {11902111,819,21,19,1,2,0.925,-0.812977 } ); +cells.push_back( {11902121,839,21,19,2,2,0.925,-0.862539 } ); +cells.push_back( {12002111,820,21,20,1,2,0.967,-0.812977 } ); +cells.push_back( {12002121,840,21,20,2,2,0.967,-0.862539 } ); +cells.push_back( {10102112,801,21,1,1,1,0.02675,-0.812977 } ); +cells.push_back( {10102122,821,21,1,2,1,0.02675,-0.862539 } ); +cells.push_back( {10202112,802,21,2,1,1,0.075,-0.812977 } ); +cells.push_back( {10202122,822,21,2,2,1,0.075,-0.862539 } ); +cells.push_back( {10302112,803,21,3,1,1,0.125,-0.812977 } ); +cells.push_back( {10302122,823,21,3,2,1,0.125,-0.862539 } ); +cells.push_back( {10402112,804,21,4,1,1,0.175,-0.812977 } ); +cells.push_back( {10402122,824,21,4,2,1,0.175,-0.862539 } ); +cells.push_back( {10502112,805,21,5,1,1,0.225,-0.812977 } ); +cells.push_back( {10502122,825,21,5,2,1,0.225,-0.862539 } ); +cells.push_back( {10602112,806,21,6,1,1,0.275,-0.812977 } ); +cells.push_back( {10602122,826,21,6,2,1,0.275,-0.862539 } ); +cells.push_back( {10702112,807,21,7,1,1,0.325,-0.812977 } ); +cells.push_back( {10702122,827,21,7,2,1,0.325,-0.862539 } ); +cells.push_back( {10802112,808,21,8,1,1,0.375,-0.812977 } ); +cells.push_back( {10802122,828,21,8,2,1,0.375,-0.862539 } ); +cells.push_back( {10902112,809,21,9,1,1,0.425,-0.812977 } ); +cells.push_back( {10902122,829,21,9,2,1,0.425,-0.862539 } ); +cells.push_back( {11002112,810,21,10,1,1,0.475,-0.812977 } ); +cells.push_back( {11002122,830,21,10,2,1,0.475,-0.862539 } ); +cells.push_back( {11102112,811,21,11,1,1,0.525,-0.812977 } ); +cells.push_back( {11102122,831,21,11,2,1,0.525,-0.862539 } ); +cells.push_back( {11202112,812,21,12,1,1,0.575,-0.812977 } ); +cells.push_back( {11202122,832,21,12,2,1,0.575,-0.862539 } ); +cells.push_back( {11302112,813,21,13,1,1,0.625,-0.812977 } ); +cells.push_back( {11302122,833,21,13,2,1,0.625,-0.862539 } ); +cells.push_back( {11402112,814,21,14,1,1,0.675,-0.812977 } ); +cells.push_back( {11402122,834,21,14,2,1,0.675,-0.862539 } ); +cells.push_back( {11502112,815,21,15,1,1,0.725,-0.812977 } ); +cells.push_back( {11502122,835,21,15,2,1,0.725,-0.862539 } ); +cells.push_back( {11602112,816,21,16,1,1,0.775,-0.812977 } ); +cells.push_back( {11602122,836,21,16,2,1,0.775,-0.862539 } ); +cells.push_back( {11702112,817,21,17,1,1,0.825,-0.812977 } ); +cells.push_back( {11702122,837,21,17,2,1,0.825,-0.862539 } ); +cells.push_back( {11802112,818,21,18,1,1,0.875,-0.812977 } ); +cells.push_back( {11802122,838,21,18,2,1,0.875,-0.862539 } ); +cells.push_back( {11902112,819,21,19,1,1,0.925,-0.812977 } ); +cells.push_back( {11902122,839,21,19,2,1,0.925,-0.862539 } ); +cells.push_back( {12002112,820,21,20,1,1,0.967,-0.812977 } ); +cells.push_back( {12002122,840,21,20,2,1,0.967,-0.862539 } ); +cells.push_back( {10102211,841,22,1,1,2,0.02675,-0.917696 } ); +cells.push_back( {10102221,861,22,1,2,2,0.02675,-0.967259 } ); +cells.push_back( {10202211,842,22,2,1,2,0.075,-0.917696 } ); +cells.push_back( {10202221,862,22,2,2,2,0.075,-0.967259 } ); +cells.push_back( {10302211,843,22,3,1,2,0.125,-0.917696 } ); +cells.push_back( {10302221,863,22,3,2,2,0.125,-0.967259 } ); +cells.push_back( {10402211,844,22,4,1,2,0.175,-0.917696 } ); +cells.push_back( {10402221,864,22,4,2,2,0.175,-0.967259 } ); +cells.push_back( {10502211,845,22,5,1,2,0.225,-0.917696 } ); +cells.push_back( {10502221,865,22,5,2,2,0.225,-0.967259 } ); +cells.push_back( {10602211,846,22,6,1,2,0.275,-0.917696 } ); +cells.push_back( {10602221,866,22,6,2,2,0.275,-0.967259 } ); +cells.push_back( {10702211,847,22,7,1,2,0.325,-0.917696 } ); +cells.push_back( {10702221,867,22,7,2,2,0.325,-0.967259 } ); +cells.push_back( {10802211,848,22,8,1,2,0.375,-0.917696 } ); +cells.push_back( {10802221,868,22,8,2,2,0.375,-0.967259 } ); +cells.push_back( {10902211,849,22,9,1,2,0.425,-0.917696 } ); +cells.push_back( {10902221,869,22,9,2,2,0.425,-0.967259 } ); +cells.push_back( {11002211,850,22,10,1,2,0.475,-0.917696 } ); +cells.push_back( {11002221,870,22,10,2,2,0.475,-0.967259 } ); +cells.push_back( {11102211,851,22,11,1,2,0.525,-0.917696 } ); +cells.push_back( {11102221,871,22,11,2,2,0.525,-0.967259 } ); +cells.push_back( {11202211,852,22,12,1,2,0.575,-0.917696 } ); +cells.push_back( {11202221,872,22,12,2,2,0.575,-0.967259 } ); +cells.push_back( {11302211,853,22,13,1,2,0.625,-0.917696 } ); +cells.push_back( {11302221,873,22,13,2,2,0.625,-0.967259 } ); +cells.push_back( {11402211,854,22,14,1,2,0.675,-0.917696 } ); +cells.push_back( {11402221,874,22,14,2,2,0.675,-0.967259 } ); +cells.push_back( {11502211,855,22,15,1,2,0.725,-0.917696 } ); +cells.push_back( {11502221,875,22,15,2,2,0.725,-0.967259 } ); +cells.push_back( {11602211,856,22,16,1,2,0.775,-0.917696 } ); +cells.push_back( {11602221,876,22,16,2,2,0.775,-0.967259 } ); +cells.push_back( {11702211,857,22,17,1,2,0.825,-0.917696 } ); +cells.push_back( {11702221,877,22,17,2,2,0.825,-0.967259 } ); +cells.push_back( {11802211,858,22,18,1,2,0.875,-0.917696 } ); +cells.push_back( {11802221,878,22,18,2,2,0.875,-0.967259 } ); +cells.push_back( {11902211,859,22,19,1,2,0.925,-0.917696 } ); +cells.push_back( {11902221,879,22,19,2,2,0.925,-0.967259 } ); +cells.push_back( {12002211,860,22,20,1,2,0.967,-0.917696 } ); +cells.push_back( {12002221,880,22,20,2,2,0.967,-0.967259 } ); +cells.push_back( {10102212,841,22,1,1,1,0.02675,-0.917696 } ); +cells.push_back( {10102222,861,22,1,2,1,0.02675,-0.967259 } ); +cells.push_back( {10202212,842,22,2,1,1,0.075,-0.917696 } ); +cells.push_back( {10202222,862,22,2,2,1,0.075,-0.967259 } ); +cells.push_back( {10302212,843,22,3,1,1,0.125,-0.917696 } ); +cells.push_back( {10302222,863,22,3,2,1,0.125,-0.967259 } ); +cells.push_back( {10402212,844,22,4,1,1,0.175,-0.917696 } ); +cells.push_back( {10402222,864,22,4,2,1,0.175,-0.967259 } ); +cells.push_back( {10502212,845,22,5,1,1,0.225,-0.917696 } ); +cells.push_back( {10502222,865,22,5,2,1,0.225,-0.967259 } ); +cells.push_back( {10602212,846,22,6,1,1,0.275,-0.917696 } ); +cells.push_back( {10602222,866,22,6,2,1,0.275,-0.967259 } ); +cells.push_back( {10702212,847,22,7,1,1,0.325,-0.917696 } ); +cells.push_back( {10702222,867,22,7,2,1,0.325,-0.967259 } ); +cells.push_back( {10802212,848,22,8,1,1,0.375,-0.917696 } ); +cells.push_back( {10802222,868,22,8,2,1,0.375,-0.967259 } ); +cells.push_back( {10902212,849,22,9,1,1,0.425,-0.917696 } ); +cells.push_back( {10902222,869,22,9,2,1,0.425,-0.967259 } ); +cells.push_back( {11002212,850,22,10,1,1,0.475,-0.917696 } ); +cells.push_back( {11002222,870,22,10,2,1,0.475,-0.967259 } ); +cells.push_back( {11102212,851,22,11,1,1,0.525,-0.917696 } ); +cells.push_back( {11102222,871,22,11,2,1,0.525,-0.967259 } ); +cells.push_back( {11202212,852,22,12,1,1,0.575,-0.917696 } ); +cells.push_back( {11202222,872,22,12,2,1,0.575,-0.967259 } ); +cells.push_back( {11302212,853,22,13,1,1,0.625,-0.917696 } ); +cells.push_back( {11302222,873,22,13,2,1,0.625,-0.967259 } ); +cells.push_back( {11402212,854,22,14,1,1,0.675,-0.917696 } ); +cells.push_back( {11402222,874,22,14,2,1,0.675,-0.967259 } ); +cells.push_back( {11502212,855,22,15,1,1,0.725,-0.917696 } ); +cells.push_back( {11502222,875,22,15,2,1,0.725,-0.967259 } ); +cells.push_back( {11602212,856,22,16,1,1,0.775,-0.917696 } ); +cells.push_back( {11602222,876,22,16,2,1,0.775,-0.967259 } ); +cells.push_back( {11702212,857,22,17,1,1,0.825,-0.917696 } ); +cells.push_back( {11702222,877,22,17,2,1,0.825,-0.967259 } ); +cells.push_back( {11802212,858,22,18,1,1,0.875,-0.917696 } ); +cells.push_back( {11802222,878,22,18,2,1,0.875,-0.967259 } ); +cells.push_back( {11902212,859,22,19,1,1,0.925,-0.917696 } ); +cells.push_back( {11902222,879,22,19,2,1,0.925,-0.967259 } ); +cells.push_back( {12002212,860,22,20,1,1,0.967,-0.917696 } ); +cells.push_back( {12002222,880,22,20,2,1,0.967,-0.967259 } ); +cells.push_back( {10102311,881,23,1,1,2,0.02675,-1.02242 } ); +cells.push_back( {10102321,901,23,1,2,2,0.02675,-1.07198 } ); +cells.push_back( {10202311,882,23,2,1,2,0.075,-1.02242 } ); +cells.push_back( {10202321,902,23,2,2,2,0.075,-1.07198 } ); +cells.push_back( {10302311,883,23,3,1,2,0.125,-1.02242 } ); +cells.push_back( {10302321,903,23,3,2,2,0.125,-1.07198 } ); +cells.push_back( {10402311,884,23,4,1,2,0.175,-1.02242 } ); +cells.push_back( {10402321,904,23,4,2,2,0.175,-1.07198 } ); +cells.push_back( {10502311,885,23,5,1,2,0.225,-1.02242 } ); +cells.push_back( {10502321,905,23,5,2,2,0.225,-1.07198 } ); +cells.push_back( {10602311,886,23,6,1,2,0.275,-1.02242 } ); +cells.push_back( {10602321,906,23,6,2,2,0.275,-1.07198 } ); +cells.push_back( {10702311,887,23,7,1,2,0.325,-1.02242 } ); +cells.push_back( {10702321,907,23,7,2,2,0.325,-1.07198 } ); +cells.push_back( {10802311,888,23,8,1,2,0.375,-1.02242 } ); +cells.push_back( {10802321,908,23,8,2,2,0.375,-1.07198 } ); +cells.push_back( {10902311,889,23,9,1,2,0.425,-1.02242 } ); +cells.push_back( {10902321,909,23,9,2,2,0.425,-1.07198 } ); +cells.push_back( {11002311,890,23,10,1,2,0.475,-1.02242 } ); +cells.push_back( {11002321,910,23,10,2,2,0.475,-1.07198 } ); +cells.push_back( {11102311,891,23,11,1,2,0.525,-1.02242 } ); +cells.push_back( {11102321,911,23,11,2,2,0.525,-1.07198 } ); +cells.push_back( {11202311,892,23,12,1,2,0.575,-1.02242 } ); +cells.push_back( {11202321,912,23,12,2,2,0.575,-1.07198 } ); +cells.push_back( {11302311,893,23,13,1,2,0.625,-1.02242 } ); +cells.push_back( {11302321,913,23,13,2,2,0.625,-1.07198 } ); +cells.push_back( {11402311,894,23,14,1,2,0.675,-1.02242 } ); +cells.push_back( {11402321,914,23,14,2,2,0.675,-1.07198 } ); +cells.push_back( {11502311,895,23,15,1,2,0.725,-1.02242 } ); +cells.push_back( {11502321,915,23,15,2,2,0.725,-1.07198 } ); +cells.push_back( {11602311,896,23,16,1,2,0.775,-1.02242 } ); +cells.push_back( {11602321,916,23,16,2,2,0.775,-1.07198 } ); +cells.push_back( {11702311,897,23,17,1,2,0.825,-1.02242 } ); +cells.push_back( {11702321,917,23,17,2,2,0.825,-1.07198 } ); +cells.push_back( {11802311,898,23,18,1,2,0.875,-1.02242 } ); +cells.push_back( {11802321,918,23,18,2,2,0.875,-1.07198 } ); +cells.push_back( {11902311,899,23,19,1,2,0.925,-1.02242 } ); +cells.push_back( {11902321,919,23,19,2,2,0.925,-1.07198 } ); +cells.push_back( {12002311,900,23,20,1,2,0.967,-1.02242 } ); +cells.push_back( {12002321,920,23,20,2,2,0.967,-1.07198 } ); +cells.push_back( {10102312,881,23,1,1,1,0.02675,-1.02242 } ); +cells.push_back( {10102322,901,23,1,2,1,0.02675,-1.07198 } ); +cells.push_back( {10202312,882,23,2,1,1,0.075,-1.02242 } ); +cells.push_back( {10202322,902,23,2,2,1,0.075,-1.07198 } ); +cells.push_back( {10302312,883,23,3,1,1,0.125,-1.02242 } ); +cells.push_back( {10302322,903,23,3,2,1,0.125,-1.07198 } ); +cells.push_back( {10402312,884,23,4,1,1,0.175,-1.02242 } ); +cells.push_back( {10402322,904,23,4,2,1,0.175,-1.07198 } ); +cells.push_back( {10502312,885,23,5,1,1,0.225,-1.02242 } ); +cells.push_back( {10502322,905,23,5,2,1,0.225,-1.07198 } ); +cells.push_back( {10602312,886,23,6,1,1,0.275,-1.02242 } ); +cells.push_back( {10602322,906,23,6,2,1,0.275,-1.07198 } ); +cells.push_back( {10702312,887,23,7,1,1,0.325,-1.02242 } ); +cells.push_back( {10702322,907,23,7,2,1,0.325,-1.07198 } ); +cells.push_back( {10802312,888,23,8,1,1,0.375,-1.02242 } ); +cells.push_back( {10802322,908,23,8,2,1,0.375,-1.07198 } ); +cells.push_back( {10902312,889,23,9,1,1,0.425,-1.02242 } ); +cells.push_back( {10902322,909,23,9,2,1,0.425,-1.07198 } ); +cells.push_back( {11002312,890,23,10,1,1,0.475,-1.02242 } ); +cells.push_back( {11002322,910,23,10,2,1,0.475,-1.07198 } ); +cells.push_back( {11102312,891,23,11,1,1,0.525,-1.02242 } ); +cells.push_back( {11102322,911,23,11,2,1,0.525,-1.07198 } ); +cells.push_back( {11202312,892,23,12,1,1,0.575,-1.02242 } ); +cells.push_back( {11202322,912,23,12,2,1,0.575,-1.07198 } ); +cells.push_back( {11302312,893,23,13,1,1,0.625,-1.02242 } ); +cells.push_back( {11302322,913,23,13,2,1,0.625,-1.07198 } ); +cells.push_back( {11402312,894,23,14,1,1,0.675,-1.02242 } ); +cells.push_back( {11402322,914,23,14,2,1,0.675,-1.07198 } ); +cells.push_back( {11502312,895,23,15,1,1,0.725,-1.02242 } ); +cells.push_back( {11502322,915,23,15,2,1,0.725,-1.07198 } ); +cells.push_back( {11602312,896,23,16,1,1,0.775,-1.02242 } ); +cells.push_back( {11602322,916,23,16,2,1,0.775,-1.07198 } ); +cells.push_back( {11702312,897,23,17,1,1,0.825,-1.02242 } ); +cells.push_back( {11702322,917,23,17,2,1,0.825,-1.07198 } ); +cells.push_back( {11802312,898,23,18,1,1,0.875,-1.02242 } ); +cells.push_back( {11802322,918,23,18,2,1,0.875,-1.07198 } ); +cells.push_back( {11902312,899,23,19,1,1,0.925,-1.02242 } ); +cells.push_back( {11902322,919,23,19,2,1,0.925,-1.07198 } ); +cells.push_back( {12002312,900,23,20,1,1,0.967,-1.02242 } ); +cells.push_back( {12002322,920,23,20,2,1,0.967,-1.07198 } ); +cells.push_back( {10102411,921,24,1,1,2,0.02675,-1.12714 } ); +cells.push_back( {10102421,941,24,1,2,2,0.02675,-1.1767 } ); +cells.push_back( {10202411,922,24,2,1,2,0.075,-1.12714 } ); +cells.push_back( {10202421,942,24,2,2,2,0.075,-1.1767 } ); +cells.push_back( {10302411,923,24,3,1,2,0.125,-1.12714 } ); +cells.push_back( {10302421,943,24,3,2,2,0.125,-1.1767 } ); +cells.push_back( {10402411,924,24,4,1,2,0.175,-1.12714 } ); +cells.push_back( {10402421,944,24,4,2,2,0.175,-1.1767 } ); +cells.push_back( {10502411,925,24,5,1,2,0.225,-1.12714 } ); +cells.push_back( {10502421,945,24,5,2,2,0.225,-1.1767 } ); +cells.push_back( {10602411,926,24,6,1,2,0.275,-1.12714 } ); +cells.push_back( {10602421,946,24,6,2,2,0.275,-1.1767 } ); +cells.push_back( {10702411,927,24,7,1,2,0.325,-1.12714 } ); +cells.push_back( {10702421,947,24,7,2,2,0.325,-1.1767 } ); +cells.push_back( {10802411,928,24,8,1,2,0.375,-1.12714 } ); +cells.push_back( {10802421,948,24,8,2,2,0.375,-1.1767 } ); +cells.push_back( {10902411,929,24,9,1,2,0.425,-1.12714 } ); +cells.push_back( {10902421,949,24,9,2,2,0.425,-1.1767 } ); +cells.push_back( {11002411,930,24,10,1,2,0.475,-1.12714 } ); +cells.push_back( {11002421,950,24,10,2,2,0.475,-1.1767 } ); +cells.push_back( {11102411,931,24,11,1,2,0.525,-1.12714 } ); +cells.push_back( {11102421,951,24,11,2,2,0.525,-1.1767 } ); +cells.push_back( {11202411,932,24,12,1,2,0.575,-1.12714 } ); +cells.push_back( {11202421,952,24,12,2,2,0.575,-1.1767 } ); +cells.push_back( {11302411,933,24,13,1,2,0.625,-1.12714 } ); +cells.push_back( {11302421,953,24,13,2,2,0.625,-1.1767 } ); +cells.push_back( {11402411,934,24,14,1,2,0.675,-1.12714 } ); +cells.push_back( {11402421,954,24,14,2,2,0.675,-1.1767 } ); +cells.push_back( {11502411,935,24,15,1,2,0.725,-1.12714 } ); +cells.push_back( {11502421,955,24,15,2,2,0.725,-1.1767 } ); +cells.push_back( {11602411,936,24,16,1,2,0.775,-1.12714 } ); +cells.push_back( {11602421,956,24,16,2,2,0.775,-1.1767 } ); +cells.push_back( {11702411,937,24,17,1,2,0.825,-1.12714 } ); +cells.push_back( {11702421,957,24,17,2,2,0.825,-1.1767 } ); +cells.push_back( {11802411,938,24,18,1,2,0.875,-1.12714 } ); +cells.push_back( {11802421,958,24,18,2,2,0.875,-1.1767 } ); +cells.push_back( {11902411,939,24,19,1,2,0.925,-1.12714 } ); +cells.push_back( {11902421,959,24,19,2,2,0.925,-1.1767 } ); +cells.push_back( {12002411,940,24,20,1,2,0.967,-1.12714 } ); +cells.push_back( {12002421,960,24,20,2,2,0.967,-1.1767 } ); +cells.push_back( {10102412,921,24,1,1,1,0.02675,-1.12714 } ); +cells.push_back( {10102422,941,24,1,2,1,0.02675,-1.1767 } ); +cells.push_back( {10202412,922,24,2,1,1,0.075,-1.12714 } ); +cells.push_back( {10202422,942,24,2,2,1,0.075,-1.1767 } ); +cells.push_back( {10302412,923,24,3,1,1,0.125,-1.12714 } ); +cells.push_back( {10302422,943,24,3,2,1,0.125,-1.1767 } ); +cells.push_back( {10402412,924,24,4,1,1,0.175,-1.12714 } ); +cells.push_back( {10402422,944,24,4,2,1,0.175,-1.1767 } ); +cells.push_back( {10502412,925,24,5,1,1,0.225,-1.12714 } ); +cells.push_back( {10502422,945,24,5,2,1,0.225,-1.1767 } ); +cells.push_back( {10602412,926,24,6,1,1,0.275,-1.12714 } ); +cells.push_back( {10602422,946,24,6,2,1,0.275,-1.1767 } ); +cells.push_back( {10702412,927,24,7,1,1,0.325,-1.12714 } ); +cells.push_back( {10702422,947,24,7,2,1,0.325,-1.1767 } ); +cells.push_back( {10802412,928,24,8,1,1,0.375,-1.12714 } ); +cells.push_back( {10802422,948,24,8,2,1,0.375,-1.1767 } ); +cells.push_back( {10902412,929,24,9,1,1,0.425,-1.12714 } ); +cells.push_back( {10902422,949,24,9,2,1,0.425,-1.1767 } ); +cells.push_back( {11002412,930,24,10,1,1,0.475,-1.12714 } ); +cells.push_back( {11002422,950,24,10,2,1,0.475,-1.1767 } ); +cells.push_back( {11102412,931,24,11,1,1,0.525,-1.12714 } ); +cells.push_back( {11102422,951,24,11,2,1,0.525,-1.1767 } ); +cells.push_back( {11202412,932,24,12,1,1,0.575,-1.12714 } ); +cells.push_back( {11202422,952,24,12,2,1,0.575,-1.1767 } ); +cells.push_back( {11302412,933,24,13,1,1,0.625,-1.12714 } ); +cells.push_back( {11302422,953,24,13,2,1,0.625,-1.1767 } ); +cells.push_back( {11402412,934,24,14,1,1,0.675,-1.12714 } ); +cells.push_back( {11402422,954,24,14,2,1,0.675,-1.1767 } ); +cells.push_back( {11502412,935,24,15,1,1,0.725,-1.12714 } ); +cells.push_back( {11502422,955,24,15,2,1,0.725,-1.1767 } ); +cells.push_back( {11602412,936,24,16,1,1,0.775,-1.12714 } ); +cells.push_back( {11602422,956,24,16,2,1,0.775,-1.1767 } ); +cells.push_back( {11702412,937,24,17,1,1,0.825,-1.12714 } ); +cells.push_back( {11702422,957,24,17,2,1,0.825,-1.1767 } ); +cells.push_back( {11802412,938,24,18,1,1,0.875,-1.12714 } ); +cells.push_back( {11802422,958,24,18,2,1,0.875,-1.1767 } ); +cells.push_back( {11902412,939,24,19,1,1,0.925,-1.12714 } ); +cells.push_back( {11902422,959,24,19,2,1,0.925,-1.1767 } ); +cells.push_back( {12002412,940,24,20,1,1,0.967,-1.12714 } ); +cells.push_back( {12002422,960,24,20,2,1,0.967,-1.1767 } ); +cells.push_back( {10102511,961,25,1,1,2,0.02675,-1.23186 } ); +cells.push_back( {10102521,981,25,1,2,2,0.02675,-1.28142 } ); +cells.push_back( {10202511,962,25,2,1,2,0.075,-1.23186 } ); +cells.push_back( {10202521,982,25,2,2,2,0.075,-1.28142 } ); +cells.push_back( {10302511,963,25,3,1,2,0.125,-1.23186 } ); +cells.push_back( {10302521,983,25,3,2,2,0.125,-1.28142 } ); +cells.push_back( {10402511,964,25,4,1,2,0.175,-1.23186 } ); +cells.push_back( {10402521,984,25,4,2,2,0.175,-1.28142 } ); +cells.push_back( {10502511,965,25,5,1,2,0.225,-1.23186 } ); +cells.push_back( {10502521,985,25,5,2,2,0.225,-1.28142 } ); +cells.push_back( {10602511,966,25,6,1,2,0.275,-1.23186 } ); +cells.push_back( {10602521,986,25,6,2,2,0.275,-1.28142 } ); +cells.push_back( {10702511,967,25,7,1,2,0.325,-1.23186 } ); +cells.push_back( {10702521,987,25,7,2,2,0.325,-1.28142 } ); +cells.push_back( {10802511,968,25,8,1,2,0.375,-1.23186 } ); +cells.push_back( {10802521,988,25,8,2,2,0.375,-1.28142 } ); +cells.push_back( {10902511,969,25,9,1,2,0.425,-1.23186 } ); +cells.push_back( {10902521,989,25,9,2,2,0.425,-1.28142 } ); +cells.push_back( {11002511,970,25,10,1,2,0.475,-1.23186 } ); +cells.push_back( {11002521,990,25,10,2,2,0.475,-1.28142 } ); +cells.push_back( {11102511,971,25,11,1,2,0.525,-1.23186 } ); +cells.push_back( {11102521,991,25,11,2,2,0.525,-1.28142 } ); +cells.push_back( {11202511,972,25,12,1,2,0.575,-1.23186 } ); +cells.push_back( {11202521,992,25,12,2,2,0.575,-1.28142 } ); +cells.push_back( {11302511,973,25,13,1,2,0.625,-1.23186 } ); +cells.push_back( {11302521,993,25,13,2,2,0.625,-1.28142 } ); +cells.push_back( {11402511,974,25,14,1,2,0.675,-1.23186 } ); +cells.push_back( {11402521,994,25,14,2,2,0.675,-1.28142 } ); +cells.push_back( {11502511,975,25,15,1,2,0.725,-1.23186 } ); +cells.push_back( {11502521,995,25,15,2,2,0.725,-1.28142 } ); +cells.push_back( {11602511,976,25,16,1,2,0.775,-1.23186 } ); +cells.push_back( {11602521,996,25,16,2,2,0.775,-1.28142 } ); +cells.push_back( {11702511,977,25,17,1,2,0.825,-1.23186 } ); +cells.push_back( {11702521,997,25,17,2,2,0.825,-1.28142 } ); +cells.push_back( {11802511,978,25,18,1,2,0.875,-1.23186 } ); +cells.push_back( {11802521,998,25,18,2,2,0.875,-1.28142 } ); +cells.push_back( {11902511,979,25,19,1,2,0.925,-1.23186 } ); +cells.push_back( {11902521,999,25,19,2,2,0.925,-1.28142 } ); +cells.push_back( {12002511,980,25,20,1,2,0.967,-1.23186 } ); +cells.push_back( {12002521,1000,25,20,2,2,0.967,-1.28142 } ); +cells.push_back( {10102512,961,25,1,1,1,0.02675,-1.23186 } ); +cells.push_back( {10102522,981,25,1,2,1,0.02675,-1.28142 } ); +cells.push_back( {10202512,962,25,2,1,1,0.075,-1.23186 } ); +cells.push_back( {10202522,982,25,2,2,1,0.075,-1.28142 } ); +cells.push_back( {10302512,963,25,3,1,1,0.125,-1.23186 } ); +cells.push_back( {10302522,983,25,3,2,1,0.125,-1.28142 } ); +cells.push_back( {10402512,964,25,4,1,1,0.175,-1.23186 } ); +cells.push_back( {10402522,984,25,4,2,1,0.175,-1.28142 } ); +cells.push_back( {10502512,965,25,5,1,1,0.225,-1.23186 } ); +cells.push_back( {10502522,985,25,5,2,1,0.225,-1.28142 } ); +cells.push_back( {10602512,966,25,6,1,1,0.275,-1.23186 } ); +cells.push_back( {10602522,986,25,6,2,1,0.275,-1.28142 } ); +cells.push_back( {10702512,967,25,7,1,1,0.325,-1.23186 } ); +cells.push_back( {10702522,987,25,7,2,1,0.325,-1.28142 } ); +cells.push_back( {10802512,968,25,8,1,1,0.375,-1.23186 } ); +cells.push_back( {10802522,988,25,8,2,1,0.375,-1.28142 } ); +cells.push_back( {10902512,969,25,9,1,1,0.425,-1.23186 } ); +cells.push_back( {10902522,989,25,9,2,1,0.425,-1.28142 } ); +cells.push_back( {11002512,970,25,10,1,1,0.475,-1.23186 } ); +cells.push_back( {11002522,990,25,10,2,1,0.475,-1.28142 } ); +cells.push_back( {11102512,971,25,11,1,1,0.525,-1.23186 } ); +cells.push_back( {11102522,991,25,11,2,1,0.525,-1.28142 } ); +cells.push_back( {11202512,972,25,12,1,1,0.575,-1.23186 } ); +cells.push_back( {11202522,992,25,12,2,1,0.575,-1.28142 } ); +cells.push_back( {11302512,973,25,13,1,1,0.625,-1.23186 } ); +cells.push_back( {11302522,993,25,13,2,1,0.625,-1.28142 } ); +cells.push_back( {11402512,974,25,14,1,1,0.675,-1.23186 } ); +cells.push_back( {11402522,994,25,14,2,1,0.675,-1.28142 } ); +cells.push_back( {11502512,975,25,15,1,1,0.725,-1.23186 } ); +cells.push_back( {11502522,995,25,15,2,1,0.725,-1.28142 } ); +cells.push_back( {11602512,976,25,16,1,1,0.775,-1.23186 } ); +cells.push_back( {11602522,996,25,16,2,1,0.775,-1.28142 } ); +cells.push_back( {11702512,977,25,17,1,1,0.825,-1.23186 } ); +cells.push_back( {11702522,997,25,17,2,1,0.825,-1.28142 } ); +cells.push_back( {11802512,978,25,18,1,1,0.875,-1.23186 } ); +cells.push_back( {11802522,998,25,18,2,1,0.875,-1.28142 } ); +cells.push_back( {11902512,979,25,19,1,1,0.925,-1.23186 } ); +cells.push_back( {11902522,999,25,19,2,1,0.925,-1.28142 } ); +cells.push_back( {12002512,980,25,20,1,1,0.967,-1.23186 } ); +cells.push_back( {12002522,1000,25,20,2,1,0.967,-1.28142 } ); +cells.push_back( {10102611,1001,26,1,1,2,0.02675,-1.33658 } ); +cells.push_back( {10102621,1021,26,1,2,2,0.02675,-1.38614 } ); +cells.push_back( {10202611,1002,26,2,1,2,0.075,-1.33658 } ); +cells.push_back( {10202621,1022,26,2,2,2,0.075,-1.38614 } ); +cells.push_back( {10302611,1003,26,3,1,2,0.125,-1.33658 } ); +cells.push_back( {10302621,1023,26,3,2,2,0.125,-1.38614 } ); +cells.push_back( {10402611,1004,26,4,1,2,0.175,-1.33658 } ); +cells.push_back( {10402621,1024,26,4,2,2,0.175,-1.38614 } ); +cells.push_back( {10502611,1005,26,5,1,2,0.225,-1.33658 } ); +cells.push_back( {10502621,1025,26,5,2,2,0.225,-1.38614 } ); +cells.push_back( {10602611,1006,26,6,1,2,0.275,-1.33658 } ); +cells.push_back( {10602621,1026,26,6,2,2,0.275,-1.38614 } ); +cells.push_back( {10702611,1007,26,7,1,2,0.325,-1.33658 } ); +cells.push_back( {10702621,1027,26,7,2,2,0.325,-1.38614 } ); +cells.push_back( {10802611,1008,26,8,1,2,0.375,-1.33658 } ); +cells.push_back( {10802621,1028,26,8,2,2,0.375,-1.38614 } ); +cells.push_back( {10902611,1009,26,9,1,2,0.425,-1.33658 } ); +cells.push_back( {10902621,1029,26,9,2,2,0.425,-1.38614 } ); +cells.push_back( {11002611,1010,26,10,1,2,0.475,-1.33658 } ); +cells.push_back( {11002621,1030,26,10,2,2,0.475,-1.38614 } ); +cells.push_back( {11102611,1011,26,11,1,2,0.525,-1.33658 } ); +cells.push_back( {11102621,1031,26,11,2,2,0.525,-1.38614 } ); +cells.push_back( {11202611,1012,26,12,1,2,0.575,-1.33658 } ); +cells.push_back( {11202621,1032,26,12,2,2,0.575,-1.38614 } ); +cells.push_back( {11302611,1013,26,13,1,2,0.625,-1.33658 } ); +cells.push_back( {11302621,1033,26,13,2,2,0.625,-1.38614 } ); +cells.push_back( {11402611,1014,26,14,1,2,0.675,-1.33658 } ); +cells.push_back( {11402621,1034,26,14,2,2,0.675,-1.38614 } ); +cells.push_back( {11502611,1015,26,15,1,2,0.725,-1.33658 } ); +cells.push_back( {11502621,1035,26,15,2,2,0.725,-1.38614 } ); +cells.push_back( {11602611,1016,26,16,1,2,0.775,-1.33658 } ); +cells.push_back( {11602621,1036,26,16,2,2,0.775,-1.38614 } ); +cells.push_back( {11702611,1017,26,17,1,2,0.825,-1.33658 } ); +cells.push_back( {11702621,1037,26,17,2,2,0.825,-1.38614 } ); +cells.push_back( {11802611,1018,26,18,1,2,0.875,-1.33658 } ); +cells.push_back( {11802621,1038,26,18,2,2,0.875,-1.38614 } ); +cells.push_back( {11902611,1019,26,19,1,2,0.925,-1.33658 } ); +cells.push_back( {11902621,1039,26,19,2,2,0.925,-1.38614 } ); +cells.push_back( {12002611,1020,26,20,1,2,0.967,-1.33658 } ); +cells.push_back( {12002621,1040,26,20,2,2,0.967,-1.38614 } ); +cells.push_back( {10102612,1001,26,1,1,1,0.02675,-1.33658 } ); +cells.push_back( {10102622,1021,26,1,2,1,0.02675,-1.38614 } ); +cells.push_back( {10202612,1002,26,2,1,1,0.075,-1.33658 } ); +cells.push_back( {10202622,1022,26,2,2,1,0.075,-1.38614 } ); +cells.push_back( {10302612,1003,26,3,1,1,0.125,-1.33658 } ); +cells.push_back( {10302622,1023,26,3,2,1,0.125,-1.38614 } ); +cells.push_back( {10402612,1004,26,4,1,1,0.175,-1.33658 } ); +cells.push_back( {10402622,1024,26,4,2,1,0.175,-1.38614 } ); +cells.push_back( {10502612,1005,26,5,1,1,0.225,-1.33658 } ); +cells.push_back( {10502622,1025,26,5,2,1,0.225,-1.38614 } ); +cells.push_back( {10602612,1006,26,6,1,1,0.275,-1.33658 } ); +cells.push_back( {10602622,1026,26,6,2,1,0.275,-1.38614 } ); +cells.push_back( {10702612,1007,26,7,1,1,0.325,-1.33658 } ); +cells.push_back( {10702622,1027,26,7,2,1,0.325,-1.38614 } ); +cells.push_back( {10802612,1008,26,8,1,1,0.375,-1.33658 } ); +cells.push_back( {10802622,1028,26,8,2,1,0.375,-1.38614 } ); +cells.push_back( {10902612,1009,26,9,1,1,0.425,-1.33658 } ); +cells.push_back( {10902622,1029,26,9,2,1,0.425,-1.38614 } ); +cells.push_back( {11002612,1010,26,10,1,1,0.475,-1.33658 } ); +cells.push_back( {11002622,1030,26,10,2,1,0.475,-1.38614 } ); +cells.push_back( {11102612,1011,26,11,1,1,0.525,-1.33658 } ); +cells.push_back( {11102622,1031,26,11,2,1,0.525,-1.38614 } ); +cells.push_back( {11202612,1012,26,12,1,1,0.575,-1.33658 } ); +cells.push_back( {11202622,1032,26,12,2,1,0.575,-1.38614 } ); +cells.push_back( {11302612,1013,26,13,1,1,0.625,-1.33658 } ); +cells.push_back( {11302622,1033,26,13,2,1,0.625,-1.38614 } ); +cells.push_back( {11402612,1014,26,14,1,1,0.675,-1.33658 } ); +cells.push_back( {11402622,1034,26,14,2,1,0.675,-1.38614 } ); +cells.push_back( {11502612,1015,26,15,1,1,0.725,-1.33658 } ); +cells.push_back( {11502622,1035,26,15,2,1,0.725,-1.38614 } ); +cells.push_back( {11602612,1016,26,16,1,1,0.775,-1.33658 } ); +cells.push_back( {11602622,1036,26,16,2,1,0.775,-1.38614 } ); +cells.push_back( {11702612,1017,26,17,1,1,0.825,-1.33658 } ); +cells.push_back( {11702622,1037,26,17,2,1,0.825,-1.38614 } ); +cells.push_back( {11802612,1018,26,18,1,1,0.875,-1.33658 } ); +cells.push_back( {11802622,1038,26,18,2,1,0.875,-1.38614 } ); +cells.push_back( {11902612,1019,26,19,1,1,0.925,-1.33658 } ); +cells.push_back( {11902622,1039,26,19,2,1,0.925,-1.38614 } ); +cells.push_back( {12002612,1020,26,20,1,1,0.967,-1.33658 } ); +cells.push_back( {12002622,1040,26,20,2,1,0.967,-1.38614 } ); +cells.push_back( {10102711,1041,27,1,1,2,0.02675,-1.4413 } ); +cells.push_back( {10102721,1061,27,1,2,2,0.02675,-1.49086 } ); +cells.push_back( {10202711,1042,27,2,1,2,0.075,-1.4413 } ); +cells.push_back( {10202721,1062,27,2,2,2,0.075,-1.49086 } ); +cells.push_back( {10302711,1043,27,3,1,2,0.125,-1.4413 } ); +cells.push_back( {10302721,1063,27,3,2,2,0.125,-1.49086 } ); +cells.push_back( {10402711,1044,27,4,1,2,0.175,-1.4413 } ); +cells.push_back( {10402721,1064,27,4,2,2,0.175,-1.49086 } ); +cells.push_back( {10502711,1045,27,5,1,2,0.225,-1.4413 } ); +cells.push_back( {10502721,1065,27,5,2,2,0.225,-1.49086 } ); +cells.push_back( {10602711,1046,27,6,1,2,0.275,-1.4413 } ); +cells.push_back( {10602721,1066,27,6,2,2,0.275,-1.49086 } ); +cells.push_back( {10702711,1047,27,7,1,2,0.325,-1.4413 } ); +cells.push_back( {10702721,1067,27,7,2,2,0.325,-1.49086 } ); +cells.push_back( {10802711,1048,27,8,1,2,0.375,-1.4413 } ); +cells.push_back( {10802721,1068,27,8,2,2,0.375,-1.49086 } ); +cells.push_back( {10902711,1049,27,9,1,2,0.425,-1.4413 } ); +cells.push_back( {10902721,1069,27,9,2,2,0.425,-1.49086 } ); +cells.push_back( {11002711,1050,27,10,1,2,0.475,-1.4413 } ); +cells.push_back( {11002721,1070,27,10,2,2,0.475,-1.49086 } ); +cells.push_back( {11102711,1051,27,11,1,2,0.525,-1.4413 } ); +cells.push_back( {11102721,1071,27,11,2,2,0.525,-1.49086 } ); +cells.push_back( {11202711,1052,27,12,1,2,0.575,-1.4413 } ); +cells.push_back( {11202721,1072,27,12,2,2,0.575,-1.49086 } ); +cells.push_back( {11302711,1053,27,13,1,2,0.625,-1.4413 } ); +cells.push_back( {11302721,1073,27,13,2,2,0.625,-1.49086 } ); +cells.push_back( {11402711,1054,27,14,1,2,0.675,-1.4413 } ); +cells.push_back( {11402721,1074,27,14,2,2,0.675,-1.49086 } ); +cells.push_back( {11502711,1055,27,15,1,2,0.725,-1.4413 } ); +cells.push_back( {11502721,1075,27,15,2,2,0.725,-1.49086 } ); +cells.push_back( {11602711,1056,27,16,1,2,0.775,-1.4413 } ); +cells.push_back( {11602721,1076,27,16,2,2,0.775,-1.49086 } ); +cells.push_back( {11702711,1057,27,17,1,2,0.825,-1.4413 } ); +cells.push_back( {11702721,1077,27,17,2,2,0.825,-1.49086 } ); +cells.push_back( {11802711,1058,27,18,1,2,0.875,-1.4413 } ); +cells.push_back( {11802721,1078,27,18,2,2,0.875,-1.49086 } ); +cells.push_back( {11902711,1059,27,19,1,2,0.925,-1.4413 } ); +cells.push_back( {11902721,1079,27,19,2,2,0.925,-1.49086 } ); +cells.push_back( {12002711,1060,27,20,1,2,0.967,-1.4413 } ); +cells.push_back( {12002721,1080,27,20,2,2,0.967,-1.49086 } ); +cells.push_back( {10102712,1041,27,1,1,1,0.02675,-1.4413 } ); +cells.push_back( {10102722,1061,27,1,2,1,0.02675,-1.49086 } ); +cells.push_back( {10202712,1042,27,2,1,1,0.075,-1.4413 } ); +cells.push_back( {10202722,1062,27,2,2,1,0.075,-1.49086 } ); +cells.push_back( {10302712,1043,27,3,1,1,0.125,-1.4413 } ); +cells.push_back( {10302722,1063,27,3,2,1,0.125,-1.49086 } ); +cells.push_back( {10402712,1044,27,4,1,1,0.175,-1.4413 } ); +cells.push_back( {10402722,1064,27,4,2,1,0.175,-1.49086 } ); +cells.push_back( {10502712,1045,27,5,1,1,0.225,-1.4413 } ); +cells.push_back( {10502722,1065,27,5,2,1,0.225,-1.49086 } ); +cells.push_back( {10602712,1046,27,6,1,1,0.275,-1.4413 } ); +cells.push_back( {10602722,1066,27,6,2,1,0.275,-1.49086 } ); +cells.push_back( {10702712,1047,27,7,1,1,0.325,-1.4413 } ); +cells.push_back( {10702722,1067,27,7,2,1,0.325,-1.49086 } ); +cells.push_back( {10802712,1048,27,8,1,1,0.375,-1.4413 } ); +cells.push_back( {10802722,1068,27,8,2,1,0.375,-1.49086 } ); +cells.push_back( {10902712,1049,27,9,1,1,0.425,-1.4413 } ); +cells.push_back( {10902722,1069,27,9,2,1,0.425,-1.49086 } ); +cells.push_back( {11002712,1050,27,10,1,1,0.475,-1.4413 } ); +cells.push_back( {11002722,1070,27,10,2,1,0.475,-1.49086 } ); +cells.push_back( {11102712,1051,27,11,1,1,0.525,-1.4413 } ); +cells.push_back( {11102722,1071,27,11,2,1,0.525,-1.49086 } ); +cells.push_back( {11202712,1052,27,12,1,1,0.575,-1.4413 } ); +cells.push_back( {11202722,1072,27,12,2,1,0.575,-1.49086 } ); +cells.push_back( {11302712,1053,27,13,1,1,0.625,-1.4413 } ); +cells.push_back( {11302722,1073,27,13,2,1,0.625,-1.49086 } ); +cells.push_back( {11402712,1054,27,14,1,1,0.675,-1.4413 } ); +cells.push_back( {11402722,1074,27,14,2,1,0.675,-1.49086 } ); +cells.push_back( {11502712,1055,27,15,1,1,0.725,-1.4413 } ); +cells.push_back( {11502722,1075,27,15,2,1,0.725,-1.49086 } ); +cells.push_back( {11602712,1056,27,16,1,1,0.775,-1.4413 } ); +cells.push_back( {11602722,1076,27,16,2,1,0.775,-1.49086 } ); +cells.push_back( {11702712,1057,27,17,1,1,0.825,-1.4413 } ); +cells.push_back( {11702722,1077,27,17,2,1,0.825,-1.49086 } ); +cells.push_back( {11802712,1058,27,18,1,1,0.875,-1.4413 } ); +cells.push_back( {11802722,1078,27,18,2,1,0.875,-1.49086 } ); +cells.push_back( {11902712,1059,27,19,1,1,0.925,-1.4413 } ); +cells.push_back( {11902722,1079,27,19,2,1,0.925,-1.49086 } ); +cells.push_back( {12002712,1060,27,20,1,1,0.967,-1.4413 } ); +cells.push_back( {12002722,1080,27,20,2,1,0.967,-1.49086 } ); +cells.push_back( {10102811,1081,28,1,1,2,0.02675,-1.54601 } ); +cells.push_back( {10102821,1101,28,1,2,2,0.02675,-1.59558 } ); +cells.push_back( {10202811,1082,28,2,1,2,0.075,-1.54601 } ); +cells.push_back( {10202821,1102,28,2,2,2,0.075,-1.59558 } ); +cells.push_back( {10302811,1083,28,3,1,2,0.125,-1.54601 } ); +cells.push_back( {10302821,1103,28,3,2,2,0.125,-1.59558 } ); +cells.push_back( {10402811,1084,28,4,1,2,0.175,-1.54601 } ); +cells.push_back( {10402821,1104,28,4,2,2,0.175,-1.59558 } ); +cells.push_back( {10502811,1085,28,5,1,2,0.225,-1.54601 } ); +cells.push_back( {10502821,1105,28,5,2,2,0.225,-1.59558 } ); +cells.push_back( {10602811,1086,28,6,1,2,0.275,-1.54601 } ); +cells.push_back( {10602821,1106,28,6,2,2,0.275,-1.59558 } ); +cells.push_back( {10702811,1087,28,7,1,2,0.325,-1.54601 } ); +cells.push_back( {10702821,1107,28,7,2,2,0.325,-1.59558 } ); +cells.push_back( {10802811,1088,28,8,1,2,0.375,-1.54601 } ); +cells.push_back( {10802821,1108,28,8,2,2,0.375,-1.59558 } ); +cells.push_back( {10902811,1089,28,9,1,2,0.425,-1.54601 } ); +cells.push_back( {10902821,1109,28,9,2,2,0.425,-1.59558 } ); +cells.push_back( {11002811,1090,28,10,1,2,0.475,-1.54601 } ); +cells.push_back( {11002821,1110,28,10,2,2,0.475,-1.59558 } ); +cells.push_back( {11102811,1091,28,11,1,2,0.525,-1.54601 } ); +cells.push_back( {11102821,1111,28,11,2,2,0.525,-1.59558 } ); +cells.push_back( {11202811,1092,28,12,1,2,0.575,-1.54601 } ); +cells.push_back( {11202821,1112,28,12,2,2,0.575,-1.59558 } ); +cells.push_back( {11302811,1093,28,13,1,2,0.625,-1.54601 } ); +cells.push_back( {11302821,1113,28,13,2,2,0.625,-1.59558 } ); +cells.push_back( {11402811,1094,28,14,1,2,0.675,-1.54601 } ); +cells.push_back( {11402821,1114,28,14,2,2,0.675,-1.59558 } ); +cells.push_back( {11502811,1095,28,15,1,2,0.725,-1.54601 } ); +cells.push_back( {11502821,1115,28,15,2,2,0.725,-1.59558 } ); +cells.push_back( {11602811,1096,28,16,1,2,0.775,-1.54601 } ); +cells.push_back( {11602821,1116,28,16,2,2,0.775,-1.59558 } ); +cells.push_back( {11702811,1097,28,17,1,2,0.825,-1.54601 } ); +cells.push_back( {11702821,1117,28,17,2,2,0.825,-1.59558 } ); +cells.push_back( {11802811,1098,28,18,1,2,0.875,-1.54601 } ); +cells.push_back( {11802821,1118,28,18,2,2,0.875,-1.59558 } ); +cells.push_back( {11902811,1099,28,19,1,2,0.925,-1.54601 } ); +cells.push_back( {11902821,1119,28,19,2,2,0.925,-1.59558 } ); +cells.push_back( {12002811,1100,28,20,1,2,0.967,-1.54601 } ); +cells.push_back( {12002821,1120,28,20,2,2,0.967,-1.59558 } ); +cells.push_back( {10102812,1081,28,1,1,1,0.02675,-1.54601 } ); +cells.push_back( {10102822,1101,28,1,2,1,0.02675,-1.59558 } ); +cells.push_back( {10202812,1082,28,2,1,1,0.075,-1.54601 } ); +cells.push_back( {10202822,1102,28,2,2,1,0.075,-1.59558 } ); +cells.push_back( {10302812,1083,28,3,1,1,0.125,-1.54601 } ); +cells.push_back( {10302822,1103,28,3,2,1,0.125,-1.59558 } ); +cells.push_back( {10402812,1084,28,4,1,1,0.175,-1.54601 } ); +cells.push_back( {10402822,1104,28,4,2,1,0.175,-1.59558 } ); +cells.push_back( {10502812,1085,28,5,1,1,0.225,-1.54601 } ); +cells.push_back( {10502822,1105,28,5,2,1,0.225,-1.59558 } ); +cells.push_back( {10602812,1086,28,6,1,1,0.275,-1.54601 } ); +cells.push_back( {10602822,1106,28,6,2,1,0.275,-1.59558 } ); +cells.push_back( {10702812,1087,28,7,1,1,0.325,-1.54601 } ); +cells.push_back( {10702822,1107,28,7,2,1,0.325,-1.59558 } ); +cells.push_back( {10802812,1088,28,8,1,1,0.375,-1.54601 } ); +cells.push_back( {10802822,1108,28,8,2,1,0.375,-1.59558 } ); +cells.push_back( {10902812,1089,28,9,1,1,0.425,-1.54601 } ); +cells.push_back( {10902822,1109,28,9,2,1,0.425,-1.59558 } ); +cells.push_back( {11002812,1090,28,10,1,1,0.475,-1.54601 } ); +cells.push_back( {11002822,1110,28,10,2,1,0.475,-1.59558 } ); +cells.push_back( {11102812,1091,28,11,1,1,0.525,-1.54601 } ); +cells.push_back( {11102822,1111,28,11,2,1,0.525,-1.59558 } ); +cells.push_back( {11202812,1092,28,12,1,1,0.575,-1.54601 } ); +cells.push_back( {11202822,1112,28,12,2,1,0.575,-1.59558 } ); +cells.push_back( {11302812,1093,28,13,1,1,0.625,-1.54601 } ); +cells.push_back( {11302822,1113,28,13,2,1,0.625,-1.59558 } ); +cells.push_back( {11402812,1094,28,14,1,1,0.675,-1.54601 } ); +cells.push_back( {11402822,1114,28,14,2,1,0.675,-1.59558 } ); +cells.push_back( {11502812,1095,28,15,1,1,0.725,-1.54601 } ); +cells.push_back( {11502822,1115,28,15,2,1,0.725,-1.59558 } ); +cells.push_back( {11602812,1096,28,16,1,1,0.775,-1.54601 } ); +cells.push_back( {11602822,1116,28,16,2,1,0.775,-1.59558 } ); +cells.push_back( {11702812,1097,28,17,1,1,0.825,-1.54601 } ); +cells.push_back( {11702822,1117,28,17,2,1,0.825,-1.59558 } ); +cells.push_back( {11802812,1098,28,18,1,1,0.875,-1.54601 } ); +cells.push_back( {11802822,1118,28,18,2,1,0.875,-1.59558 } ); +cells.push_back( {11902812,1099,28,19,1,1,0.925,-1.54601 } ); +cells.push_back( {11902822,1119,28,19,2,1,0.925,-1.59558 } ); +cells.push_back( {12002812,1100,28,20,1,1,0.967,-1.54601 } ); +cells.push_back( {12002822,1120,28,20,2,1,0.967,-1.59558 } ); +cells.push_back( {10102911,1121,29,1,1,2,0.02675,-1.65073 } ); +cells.push_back( {10102921,1141,29,1,2,2,0.02675,-1.7003 } ); +cells.push_back( {10202911,1122,29,2,1,2,0.075,-1.65073 } ); +cells.push_back( {10202921,1142,29,2,2,2,0.075,-1.7003 } ); +cells.push_back( {10302911,1123,29,3,1,2,0.125,-1.65073 } ); +cells.push_back( {10302921,1143,29,3,2,2,0.125,-1.7003 } ); +cells.push_back( {10402911,1124,29,4,1,2,0.175,-1.65073 } ); +cells.push_back( {10402921,1144,29,4,2,2,0.175,-1.7003 } ); +cells.push_back( {10502911,1125,29,5,1,2,0.225,-1.65073 } ); +cells.push_back( {10502921,1145,29,5,2,2,0.225,-1.7003 } ); +cells.push_back( {10602911,1126,29,6,1,2,0.275,-1.65073 } ); +cells.push_back( {10602921,1146,29,6,2,2,0.275,-1.7003 } ); +cells.push_back( {10702911,1127,29,7,1,2,0.325,-1.65073 } ); +cells.push_back( {10702921,1147,29,7,2,2,0.325,-1.7003 } ); +cells.push_back( {10802911,1128,29,8,1,2,0.375,-1.65073 } ); +cells.push_back( {10802921,1148,29,8,2,2,0.375,-1.7003 } ); +cells.push_back( {10902911,1129,29,9,1,2,0.425,-1.65073 } ); +cells.push_back( {10902921,1149,29,9,2,2,0.425,-1.7003 } ); +cells.push_back( {11002911,1130,29,10,1,2,0.475,-1.65073 } ); +cells.push_back( {11002921,1150,29,10,2,2,0.475,-1.7003 } ); +cells.push_back( {11102911,1131,29,11,1,2,0.525,-1.65073 } ); +cells.push_back( {11102921,1151,29,11,2,2,0.525,-1.7003 } ); +cells.push_back( {11202911,1132,29,12,1,2,0.575,-1.65073 } ); +cells.push_back( {11202921,1152,29,12,2,2,0.575,-1.7003 } ); +cells.push_back( {11302911,1133,29,13,1,2,0.625,-1.65073 } ); +cells.push_back( {11302921,1153,29,13,2,2,0.625,-1.7003 } ); +cells.push_back( {11402911,1134,29,14,1,2,0.675,-1.65073 } ); +cells.push_back( {11402921,1154,29,14,2,2,0.675,-1.7003 } ); +cells.push_back( {11502911,1135,29,15,1,2,0.725,-1.65073 } ); +cells.push_back( {11502921,1155,29,15,2,2,0.725,-1.7003 } ); +cells.push_back( {11602911,1136,29,16,1,2,0.775,-1.65073 } ); +cells.push_back( {11602921,1156,29,16,2,2,0.775,-1.7003 } ); +cells.push_back( {11702911,1137,29,17,1,2,0.825,-1.65073 } ); +cells.push_back( {11702921,1157,29,17,2,2,0.825,-1.7003 } ); +cells.push_back( {11802911,1138,29,18,1,2,0.875,-1.65073 } ); +cells.push_back( {11802921,1158,29,18,2,2,0.875,-1.7003 } ); +cells.push_back( {11902911,1139,29,19,1,2,0.925,-1.65073 } ); +cells.push_back( {11902921,1159,29,19,2,2,0.925,-1.7003 } ); +cells.push_back( {12002911,1140,29,20,1,2,0.967,-1.65073 } ); +cells.push_back( {12002921,1160,29,20,2,2,0.967,-1.7003 } ); +cells.push_back( {10102912,1121,29,1,1,1,0.02675,-1.65073 } ); +cells.push_back( {10102922,1141,29,1,2,1,0.02675,-1.7003 } ); +cells.push_back( {10202912,1122,29,2,1,1,0.075,-1.65073 } ); +cells.push_back( {10202922,1142,29,2,2,1,0.075,-1.7003 } ); +cells.push_back( {10302912,1123,29,3,1,1,0.125,-1.65073 } ); +cells.push_back( {10302922,1143,29,3,2,1,0.125,-1.7003 } ); +cells.push_back( {10402912,1124,29,4,1,1,0.175,-1.65073 } ); +cells.push_back( {10402922,1144,29,4,2,1,0.175,-1.7003 } ); +cells.push_back( {10502912,1125,29,5,1,1,0.225,-1.65073 } ); +cells.push_back( {10502922,1145,29,5,2,1,0.225,-1.7003 } ); +cells.push_back( {10602912,1126,29,6,1,1,0.275,-1.65073 } ); +cells.push_back( {10602922,1146,29,6,2,1,0.275,-1.7003 } ); +cells.push_back( {10702912,1127,29,7,1,1,0.325,-1.65073 } ); +cells.push_back( {10702922,1147,29,7,2,1,0.325,-1.7003 } ); +cells.push_back( {10802912,1128,29,8,1,1,0.375,-1.65073 } ); +cells.push_back( {10802922,1148,29,8,2,1,0.375,-1.7003 } ); +cells.push_back( {10902912,1129,29,9,1,1,0.425,-1.65073 } ); +cells.push_back( {10902922,1149,29,9,2,1,0.425,-1.7003 } ); +cells.push_back( {11002912,1130,29,10,1,1,0.475,-1.65073 } ); +cells.push_back( {11002922,1150,29,10,2,1,0.475,-1.7003 } ); +cells.push_back( {11102912,1131,29,11,1,1,0.525,-1.65073 } ); +cells.push_back( {11102922,1151,29,11,2,1,0.525,-1.7003 } ); +cells.push_back( {11202912,1132,29,12,1,1,0.575,-1.65073 } ); +cells.push_back( {11202922,1152,29,12,2,1,0.575,-1.7003 } ); +cells.push_back( {11302912,1133,29,13,1,1,0.625,-1.65073 } ); +cells.push_back( {11302922,1153,29,13,2,1,0.625,-1.7003 } ); +cells.push_back( {11402912,1134,29,14,1,1,0.675,-1.65073 } ); +cells.push_back( {11402922,1154,29,14,2,1,0.675,-1.7003 } ); +cells.push_back( {11502912,1135,29,15,1,1,0.725,-1.65073 } ); +cells.push_back( {11502922,1155,29,15,2,1,0.725,-1.7003 } ); +cells.push_back( {11602912,1136,29,16,1,1,0.775,-1.65073 } ); +cells.push_back( {11602922,1156,29,16,2,1,0.775,-1.7003 } ); +cells.push_back( {11702912,1137,29,17,1,1,0.825,-1.65073 } ); +cells.push_back( {11702922,1157,29,17,2,1,0.825,-1.7003 } ); +cells.push_back( {11802912,1138,29,18,1,1,0.875,-1.65073 } ); +cells.push_back( {11802922,1158,29,18,2,1,0.875,-1.7003 } ); +cells.push_back( {11902912,1139,29,19,1,1,0.925,-1.65073 } ); +cells.push_back( {11902922,1159,29,19,2,1,0.925,-1.7003 } ); +cells.push_back( {12002912,1140,29,20,1,1,0.967,-1.65073 } ); +cells.push_back( {12002922,1160,29,20,2,1,0.967,-1.7003 } ); +cells.push_back( {10103011,1161,30,1,1,2,0.02675,-1.75545 } ); +cells.push_back( {10103021,1181,30,1,2,2,0.02675,-1.80502 } ); +cells.push_back( {10203011,1162,30,2,1,2,0.075,-1.75545 } ); +cells.push_back( {10203021,1182,30,2,2,2,0.075,-1.80502 } ); +cells.push_back( {10303011,1163,30,3,1,2,0.125,-1.75545 } ); +cells.push_back( {10303021,1183,30,3,2,2,0.125,-1.80502 } ); +cells.push_back( {10403011,1164,30,4,1,2,0.175,-1.75545 } ); +cells.push_back( {10403021,1184,30,4,2,2,0.175,-1.80502 } ); +cells.push_back( {10503011,1165,30,5,1,2,0.225,-1.75545 } ); +cells.push_back( {10503021,1185,30,5,2,2,0.225,-1.80502 } ); +cells.push_back( {10603011,1166,30,6,1,2,0.275,-1.75545 } ); +cells.push_back( {10603021,1186,30,6,2,2,0.275,-1.80502 } ); +cells.push_back( {10703011,1167,30,7,1,2,0.325,-1.75545 } ); +cells.push_back( {10703021,1187,30,7,2,2,0.325,-1.80502 } ); +cells.push_back( {10803011,1168,30,8,1,2,0.375,-1.75545 } ); +cells.push_back( {10803021,1188,30,8,2,2,0.375,-1.80502 } ); +cells.push_back( {10903011,1169,30,9,1,2,0.425,-1.75545 } ); +cells.push_back( {10903021,1189,30,9,2,2,0.425,-1.80502 } ); +cells.push_back( {11003011,1170,30,10,1,2,0.475,-1.75545 } ); +cells.push_back( {11003021,1190,30,10,2,2,0.475,-1.80502 } ); +cells.push_back( {11103011,1171,30,11,1,2,0.525,-1.75545 } ); +cells.push_back( {11103021,1191,30,11,2,2,0.525,-1.80502 } ); +cells.push_back( {11203011,1172,30,12,1,2,0.575,-1.75545 } ); +cells.push_back( {11203021,1192,30,12,2,2,0.575,-1.80502 } ); +cells.push_back( {11303011,1173,30,13,1,2,0.625,-1.75545 } ); +cells.push_back( {11303021,1193,30,13,2,2,0.625,-1.80502 } ); +cells.push_back( {11403011,1174,30,14,1,2,0.675,-1.75545 } ); +cells.push_back( {11403021,1194,30,14,2,2,0.675,-1.80502 } ); +cells.push_back( {11503011,1175,30,15,1,2,0.725,-1.75545 } ); +cells.push_back( {11503021,1195,30,15,2,2,0.725,-1.80502 } ); +cells.push_back( {11603011,1176,30,16,1,2,0.775,-1.75545 } ); +cells.push_back( {11603021,1196,30,16,2,2,0.775,-1.80502 } ); +cells.push_back( {11703011,1177,30,17,1,2,0.825,-1.75545 } ); +cells.push_back( {11703021,1197,30,17,2,2,0.825,-1.80502 } ); +cells.push_back( {11803011,1178,30,18,1,2,0.875,-1.75545 } ); +cells.push_back( {11803021,1198,30,18,2,2,0.875,-1.80502 } ); +cells.push_back( {11903011,1179,30,19,1,2,0.925,-1.75545 } ); +cells.push_back( {11903021,1199,30,19,2,2,0.925,-1.80502 } ); +cells.push_back( {12003011,1180,30,20,1,2,0.967,-1.75545 } ); +cells.push_back( {12003021,1200,30,20,2,2,0.967,-1.80502 } ); +cells.push_back( {10103012,1161,30,1,1,1,0.02675,-1.75545 } ); +cells.push_back( {10103022,1181,30,1,2,1,0.02675,-1.80502 } ); +cells.push_back( {10203012,1162,30,2,1,1,0.075,-1.75545 } ); +cells.push_back( {10203022,1182,30,2,2,1,0.075,-1.80502 } ); +cells.push_back( {10303012,1163,30,3,1,1,0.125,-1.75545 } ); +cells.push_back( {10303022,1183,30,3,2,1,0.125,-1.80502 } ); +cells.push_back( {10403012,1164,30,4,1,1,0.175,-1.75545 } ); +cells.push_back( {10403022,1184,30,4,2,1,0.175,-1.80502 } ); +cells.push_back( {10503012,1165,30,5,1,1,0.225,-1.75545 } ); +cells.push_back( {10503022,1185,30,5,2,1,0.225,-1.80502 } ); +cells.push_back( {10603012,1166,30,6,1,1,0.275,-1.75545 } ); +cells.push_back( {10603022,1186,30,6,2,1,0.275,-1.80502 } ); +cells.push_back( {10703012,1167,30,7,1,1,0.325,-1.75545 } ); +cells.push_back( {10703022,1187,30,7,2,1,0.325,-1.80502 } ); +cells.push_back( {10803012,1168,30,8,1,1,0.375,-1.75545 } ); +cells.push_back( {10803022,1188,30,8,2,1,0.375,-1.80502 } ); +cells.push_back( {10903012,1169,30,9,1,1,0.425,-1.75545 } ); +cells.push_back( {10903022,1189,30,9,2,1,0.425,-1.80502 } ); +cells.push_back( {11003012,1170,30,10,1,1,0.475,-1.75545 } ); +cells.push_back( {11003022,1190,30,10,2,1,0.475,-1.80502 } ); +cells.push_back( {11103012,1171,30,11,1,1,0.525,-1.75545 } ); +cells.push_back( {11103022,1191,30,11,2,1,0.525,-1.80502 } ); +cells.push_back( {11203012,1172,30,12,1,1,0.575,-1.75545 } ); +cells.push_back( {11203022,1192,30,12,2,1,0.575,-1.80502 } ); +cells.push_back( {11303012,1173,30,13,1,1,0.625,-1.75545 } ); +cells.push_back( {11303022,1193,30,13,2,1,0.625,-1.80502 } ); +cells.push_back( {11403012,1174,30,14,1,1,0.675,-1.75545 } ); +cells.push_back( {11403022,1194,30,14,2,1,0.675,-1.80502 } ); +cells.push_back( {11503012,1175,30,15,1,1,0.725,-1.75545 } ); +cells.push_back( {11503022,1195,30,15,2,1,0.725,-1.80502 } ); +cells.push_back( {11603012,1176,30,16,1,1,0.775,-1.75545 } ); +cells.push_back( {11603022,1196,30,16,2,1,0.775,-1.80502 } ); +cells.push_back( {11703012,1177,30,17,1,1,0.825,-1.75545 } ); +cells.push_back( {11703022,1197,30,17,2,1,0.825,-1.80502 } ); +cells.push_back( {11803012,1178,30,18,1,1,0.875,-1.75545 } ); +cells.push_back( {11803022,1198,30,18,2,1,0.875,-1.80502 } ); +cells.push_back( {11903012,1179,30,19,1,1,0.925,-1.75545 } ); +cells.push_back( {11903022,1199,30,19,2,1,0.925,-1.80502 } ); +cells.push_back( {12003012,1180,30,20,1,1,0.967,-1.75545 } ); +cells.push_back( {12003022,1200,30,20,2,1,0.967,-1.80502 } ); +cells.push_back( {10103111,1201,31,1,1,2,0.02675,-1.86017 } ); +cells.push_back( {10103121,1221,31,1,2,2,0.02675,-1.90974 } ); +cells.push_back( {10203111,1202,31,2,1,2,0.075,-1.86017 } ); +cells.push_back( {10203121,1222,31,2,2,2,0.075,-1.90974 } ); +cells.push_back( {10303111,1203,31,3,1,2,0.125,-1.86017 } ); +cells.push_back( {10303121,1223,31,3,2,2,0.125,-1.90974 } ); +cells.push_back( {10403111,1204,31,4,1,2,0.175,-1.86017 } ); +cells.push_back( {10403121,1224,31,4,2,2,0.175,-1.90974 } ); +cells.push_back( {10503111,1205,31,5,1,2,0.225,-1.86017 } ); +cells.push_back( {10503121,1225,31,5,2,2,0.225,-1.90974 } ); +cells.push_back( {10603111,1206,31,6,1,2,0.275,-1.86017 } ); +cells.push_back( {10603121,1226,31,6,2,2,0.275,-1.90974 } ); +cells.push_back( {10703111,1207,31,7,1,2,0.325,-1.86017 } ); +cells.push_back( {10703121,1227,31,7,2,2,0.325,-1.90974 } ); +cells.push_back( {10803111,1208,31,8,1,2,0.375,-1.86017 } ); +cells.push_back( {10803121,1228,31,8,2,2,0.375,-1.90974 } ); +cells.push_back( {10903111,1209,31,9,1,2,0.425,-1.86017 } ); +cells.push_back( {10903121,1229,31,9,2,2,0.425,-1.90974 } ); +cells.push_back( {11003111,1210,31,10,1,2,0.475,-1.86017 } ); +cells.push_back( {11003121,1230,31,10,2,2,0.475,-1.90974 } ); +cells.push_back( {11103111,1211,31,11,1,2,0.525,-1.86017 } ); +cells.push_back( {11103121,1231,31,11,2,2,0.525,-1.90974 } ); +cells.push_back( {11203111,1212,31,12,1,2,0.575,-1.86017 } ); +cells.push_back( {11203121,1232,31,12,2,2,0.575,-1.90974 } ); +cells.push_back( {11303111,1213,31,13,1,2,0.625,-1.86017 } ); +cells.push_back( {11303121,1233,31,13,2,2,0.625,-1.90974 } ); +cells.push_back( {11403111,1214,31,14,1,2,0.675,-1.86017 } ); +cells.push_back( {11403121,1234,31,14,2,2,0.675,-1.90974 } ); +cells.push_back( {11503111,1215,31,15,1,2,0.725,-1.86017 } ); +cells.push_back( {11503121,1235,31,15,2,2,0.725,-1.90974 } ); +cells.push_back( {11603111,1216,31,16,1,2,0.775,-1.86017 } ); +cells.push_back( {11603121,1236,31,16,2,2,0.775,-1.90974 } ); +cells.push_back( {11703111,1217,31,17,1,2,0.825,-1.86017 } ); +cells.push_back( {11703121,1237,31,17,2,2,0.825,-1.90974 } ); +cells.push_back( {11803111,1218,31,18,1,2,0.875,-1.86017 } ); +cells.push_back( {11803121,1238,31,18,2,2,0.875,-1.90974 } ); +cells.push_back( {11903111,1219,31,19,1,2,0.925,-1.86017 } ); +cells.push_back( {11903121,1239,31,19,2,2,0.925,-1.90974 } ); +cells.push_back( {12003111,1220,31,20,1,2,0.967,-1.86017 } ); +cells.push_back( {12003121,1240,31,20,2,2,0.967,-1.90974 } ); +cells.push_back( {10103112,1201,31,1,1,1,0.02675,-1.86017 } ); +cells.push_back( {10103122,1221,31,1,2,1,0.02675,-1.90974 } ); +cells.push_back( {10203112,1202,31,2,1,1,0.075,-1.86017 } ); +cells.push_back( {10203122,1222,31,2,2,1,0.075,-1.90974 } ); +cells.push_back( {10303112,1203,31,3,1,1,0.125,-1.86017 } ); +cells.push_back( {10303122,1223,31,3,2,1,0.125,-1.90974 } ); +cells.push_back( {10403112,1204,31,4,1,1,0.175,-1.86017 } ); +cells.push_back( {10403122,1224,31,4,2,1,0.175,-1.90974 } ); +cells.push_back( {10503112,1205,31,5,1,1,0.225,-1.86017 } ); +cells.push_back( {10503122,1225,31,5,2,1,0.225,-1.90974 } ); +cells.push_back( {10603112,1206,31,6,1,1,0.275,-1.86017 } ); +cells.push_back( {10603122,1226,31,6,2,1,0.275,-1.90974 } ); +cells.push_back( {10703112,1207,31,7,1,1,0.325,-1.86017 } ); +cells.push_back( {10703122,1227,31,7,2,1,0.325,-1.90974 } ); +cells.push_back( {10803112,1208,31,8,1,1,0.375,-1.86017 } ); +cells.push_back( {10803122,1228,31,8,2,1,0.375,-1.90974 } ); +cells.push_back( {10903112,1209,31,9,1,1,0.425,-1.86017 } ); +cells.push_back( {10903122,1229,31,9,2,1,0.425,-1.90974 } ); +cells.push_back( {11003112,1210,31,10,1,1,0.475,-1.86017 } ); +cells.push_back( {11003122,1230,31,10,2,1,0.475,-1.90974 } ); +cells.push_back( {11103112,1211,31,11,1,1,0.525,-1.86017 } ); +cells.push_back( {11103122,1231,31,11,2,1,0.525,-1.90974 } ); +cells.push_back( {11203112,1212,31,12,1,1,0.575,-1.86017 } ); +cells.push_back( {11203122,1232,31,12,2,1,0.575,-1.90974 } ); +cells.push_back( {11303112,1213,31,13,1,1,0.625,-1.86017 } ); +cells.push_back( {11303122,1233,31,13,2,1,0.625,-1.90974 } ); +cells.push_back( {11403112,1214,31,14,1,1,0.675,-1.86017 } ); +cells.push_back( {11403122,1234,31,14,2,1,0.675,-1.90974 } ); +cells.push_back( {11503112,1215,31,15,1,1,0.725,-1.86017 } ); +cells.push_back( {11503122,1235,31,15,2,1,0.725,-1.90974 } ); +cells.push_back( {11603112,1216,31,16,1,1,0.775,-1.86017 } ); +cells.push_back( {11603122,1236,31,16,2,1,0.775,-1.90974 } ); +cells.push_back( {11703112,1217,31,17,1,1,0.825,-1.86017 } ); +cells.push_back( {11703122,1237,31,17,2,1,0.825,-1.90974 } ); +cells.push_back( {11803112,1218,31,18,1,1,0.875,-1.86017 } ); +cells.push_back( {11803122,1238,31,18,2,1,0.875,-1.90974 } ); +cells.push_back( {11903112,1219,31,19,1,1,0.925,-1.86017 } ); +cells.push_back( {11903122,1239,31,19,2,1,0.925,-1.90974 } ); +cells.push_back( {12003112,1220,31,20,1,1,0.967,-1.86017 } ); +cells.push_back( {12003122,1240,31,20,2,1,0.967,-1.90974 } ); +cells.push_back( {10103211,1241,32,1,1,2,0.02675,-1.96489 } ); +cells.push_back( {10103221,1261,32,1,2,2,0.02675,-2.01446 } ); +cells.push_back( {10203211,1242,32,2,1,2,0.075,-1.96489 } ); +cells.push_back( {10203221,1262,32,2,2,2,0.075,-2.01446 } ); +cells.push_back( {10303211,1243,32,3,1,2,0.125,-1.96489 } ); +cells.push_back( {10303221,1263,32,3,2,2,0.125,-2.01446 } ); +cells.push_back( {10403211,1244,32,4,1,2,0.175,-1.96489 } ); +cells.push_back( {10403221,1264,32,4,2,2,0.175,-2.01446 } ); +cells.push_back( {10503211,1245,32,5,1,2,0.225,-1.96489 } ); +cells.push_back( {10503221,1265,32,5,2,2,0.225,-2.01446 } ); +cells.push_back( {10603211,1246,32,6,1,2,0.275,-1.96489 } ); +cells.push_back( {10603221,1266,32,6,2,2,0.275,-2.01446 } ); +cells.push_back( {10703211,1247,32,7,1,2,0.325,-1.96489 } ); +cells.push_back( {10703221,1267,32,7,2,2,0.325,-2.01446 } ); +cells.push_back( {10803211,1248,32,8,1,2,0.375,-1.96489 } ); +cells.push_back( {10803221,1268,32,8,2,2,0.375,-2.01446 } ); +cells.push_back( {10903211,1249,32,9,1,2,0.425,-1.96489 } ); +cells.push_back( {10903221,1269,32,9,2,2,0.425,-2.01446 } ); +cells.push_back( {11003211,1250,32,10,1,2,0.475,-1.96489 } ); +cells.push_back( {11003221,1270,32,10,2,2,0.475,-2.01446 } ); +cells.push_back( {11103211,1251,32,11,1,2,0.525,-1.96489 } ); +cells.push_back( {11103221,1271,32,11,2,2,0.525,-2.01446 } ); +cells.push_back( {11203211,1252,32,12,1,2,0.575,-1.96489 } ); +cells.push_back( {11203221,1272,32,12,2,2,0.575,-2.01446 } ); +cells.push_back( {11303211,1253,32,13,1,2,0.625,-1.96489 } ); +cells.push_back( {11303221,1273,32,13,2,2,0.625,-2.01446 } ); +cells.push_back( {11403211,1254,32,14,1,2,0.675,-1.96489 } ); +cells.push_back( {11403221,1274,32,14,2,2,0.675,-2.01446 } ); +cells.push_back( {11503211,1255,32,15,1,2,0.725,-1.96489 } ); +cells.push_back( {11503221,1275,32,15,2,2,0.725,-2.01446 } ); +cells.push_back( {11603211,1256,32,16,1,2,0.775,-1.96489 } ); +cells.push_back( {11603221,1276,32,16,2,2,0.775,-2.01446 } ); +cells.push_back( {11703211,1257,32,17,1,2,0.825,-1.96489 } ); +cells.push_back( {11703221,1277,32,17,2,2,0.825,-2.01446 } ); +cells.push_back( {11803211,1258,32,18,1,2,0.875,-1.96489 } ); +cells.push_back( {11803221,1278,32,18,2,2,0.875,-2.01446 } ); +cells.push_back( {11903211,1259,32,19,1,2,0.925,-1.96489 } ); +cells.push_back( {11903221,1279,32,19,2,2,0.925,-2.01446 } ); +cells.push_back( {12003211,1260,32,20,1,2,0.967,-1.96489 } ); +cells.push_back( {12003221,1280,32,20,2,2,0.967,-2.01446 } ); +cells.push_back( {10103212,1241,32,1,1,1,0.02675,-1.96489 } ); +cells.push_back( {10103222,1261,32,1,2,1,0.02675,-2.01446 } ); +cells.push_back( {10203212,1242,32,2,1,1,0.075,-1.96489 } ); +cells.push_back( {10203222,1262,32,2,2,1,0.075,-2.01446 } ); +cells.push_back( {10303212,1243,32,3,1,1,0.125,-1.96489 } ); +cells.push_back( {10303222,1263,32,3,2,1,0.125,-2.01446 } ); +cells.push_back( {10403212,1244,32,4,1,1,0.175,-1.96489 } ); +cells.push_back( {10403222,1264,32,4,2,1,0.175,-2.01446 } ); +cells.push_back( {10503212,1245,32,5,1,1,0.225,-1.96489 } ); +cells.push_back( {10503222,1265,32,5,2,1,0.225,-2.01446 } ); +cells.push_back( {10603212,1246,32,6,1,1,0.275,-1.96489 } ); +cells.push_back( {10603222,1266,32,6,2,1,0.275,-2.01446 } ); +cells.push_back( {10703212,1247,32,7,1,1,0.325,-1.96489 } ); +cells.push_back( {10703222,1267,32,7,2,1,0.325,-2.01446 } ); +cells.push_back( {10803212,1248,32,8,1,1,0.375,-1.96489 } ); +cells.push_back( {10803222,1268,32,8,2,1,0.375,-2.01446 } ); +cells.push_back( {10903212,1249,32,9,1,1,0.425,-1.96489 } ); +cells.push_back( {10903222,1269,32,9,2,1,0.425,-2.01446 } ); +cells.push_back( {11003212,1250,32,10,1,1,0.475,-1.96489 } ); +cells.push_back( {11003222,1270,32,10,2,1,0.475,-2.01446 } ); +cells.push_back( {11103212,1251,32,11,1,1,0.525,-1.96489 } ); +cells.push_back( {11103222,1271,32,11,2,1,0.525,-2.01446 } ); +cells.push_back( {11203212,1252,32,12,1,1,0.575,-1.96489 } ); +cells.push_back( {11203222,1272,32,12,2,1,0.575,-2.01446 } ); +cells.push_back( {11303212,1253,32,13,1,1,0.625,-1.96489 } ); +cells.push_back( {11303222,1273,32,13,2,1,0.625,-2.01446 } ); +cells.push_back( {11403212,1254,32,14,1,1,0.675,-1.96489 } ); +cells.push_back( {11403222,1274,32,14,2,1,0.675,-2.01446 } ); +cells.push_back( {11503212,1255,32,15,1,1,0.725,-1.96489 } ); +cells.push_back( {11503222,1275,32,15,2,1,0.725,-2.01446 } ); +cells.push_back( {11603212,1256,32,16,1,1,0.775,-1.96489 } ); +cells.push_back( {11603222,1276,32,16,2,1,0.775,-2.01446 } ); +cells.push_back( {11703212,1257,32,17,1,1,0.825,-1.96489 } ); +cells.push_back( {11703222,1277,32,17,2,1,0.825,-2.01446 } ); +cells.push_back( {11803212,1258,32,18,1,1,0.875,-1.96489 } ); +cells.push_back( {11803222,1278,32,18,2,1,0.875,-2.01446 } ); +cells.push_back( {11903212,1259,32,19,1,1,0.925,-1.96489 } ); +cells.push_back( {11903222,1279,32,19,2,1,0.925,-2.01446 } ); +cells.push_back( {12003212,1260,32,20,1,1,0.967,-1.96489 } ); +cells.push_back( {12003222,1280,32,20,2,1,0.967,-2.01446 } ); +cells.push_back( {10103311,1281,33,1,1,2,0.02675,-2.06961 } ); +cells.push_back( {10103321,1301,33,1,2,2,0.02675,-2.11918 } ); +cells.push_back( {10203311,1282,33,2,1,2,0.075,-2.06961 } ); +cells.push_back( {10203321,1302,33,2,2,2,0.075,-2.11918 } ); +cells.push_back( {10303311,1283,33,3,1,2,0.125,-2.06961 } ); +cells.push_back( {10303321,1303,33,3,2,2,0.125,-2.11918 } ); +cells.push_back( {10403311,1284,33,4,1,2,0.175,-2.06961 } ); +cells.push_back( {10403321,1304,33,4,2,2,0.175,-2.11918 } ); +cells.push_back( {10503311,1285,33,5,1,2,0.225,-2.06961 } ); +cells.push_back( {10503321,1305,33,5,2,2,0.225,-2.11918 } ); +cells.push_back( {10603311,1286,33,6,1,2,0.275,-2.06961 } ); +cells.push_back( {10603321,1306,33,6,2,2,0.275,-2.11918 } ); +cells.push_back( {10703311,1287,33,7,1,2,0.325,-2.06961 } ); +cells.push_back( {10703321,1307,33,7,2,2,0.325,-2.11918 } ); +cells.push_back( {10803311,1288,33,8,1,2,0.375,-2.06961 } ); +cells.push_back( {10803321,1308,33,8,2,2,0.375,-2.11918 } ); +cells.push_back( {10903311,1289,33,9,1,2,0.425,-2.06961 } ); +cells.push_back( {10903321,1309,33,9,2,2,0.425,-2.11918 } ); +cells.push_back( {11003311,1290,33,10,1,2,0.475,-2.06961 } ); +cells.push_back( {11003321,1310,33,10,2,2,0.475,-2.11918 } ); +cells.push_back( {11103311,1291,33,11,1,2,0.525,-2.06961 } ); +cells.push_back( {11103321,1311,33,11,2,2,0.525,-2.11918 } ); +cells.push_back( {11203311,1292,33,12,1,2,0.575,-2.06961 } ); +cells.push_back( {11203321,1312,33,12,2,2,0.575,-2.11918 } ); +cells.push_back( {11303311,1293,33,13,1,2,0.625,-2.06961 } ); +cells.push_back( {11303321,1313,33,13,2,2,0.625,-2.11918 } ); +cells.push_back( {11403311,1294,33,14,1,2,0.675,-2.06961 } ); +cells.push_back( {11403321,1314,33,14,2,2,0.675,-2.11918 } ); +cells.push_back( {11503311,1295,33,15,1,2,0.725,-2.06961 } ); +cells.push_back( {11503321,1315,33,15,2,2,0.725,-2.11918 } ); +cells.push_back( {11603311,1296,33,16,1,2,0.775,-2.06961 } ); +cells.push_back( {11603321,1316,33,16,2,2,0.775,-2.11918 } ); +cells.push_back( {11703311,1297,33,17,1,2,0.825,-2.06961 } ); +cells.push_back( {11703321,1317,33,17,2,2,0.825,-2.11918 } ); +cells.push_back( {11803311,1298,33,18,1,2,0.875,-2.06961 } ); +cells.push_back( {11803321,1318,33,18,2,2,0.875,-2.11918 } ); +cells.push_back( {11903311,1299,33,19,1,2,0.925,-2.06961 } ); +cells.push_back( {11903321,1319,33,19,2,2,0.925,-2.11918 } ); +cells.push_back( {12003311,1300,33,20,1,2,0.967,-2.06961 } ); +cells.push_back( {12003321,1320,33,20,2,2,0.967,-2.11918 } ); +cells.push_back( {10103312,1281,33,1,1,1,0.02675,-2.06961 } ); +cells.push_back( {10103322,1301,33,1,2,1,0.02675,-2.11918 } ); +cells.push_back( {10203312,1282,33,2,1,1,0.075,-2.06961 } ); +cells.push_back( {10203322,1302,33,2,2,1,0.075,-2.11918 } ); +cells.push_back( {10303312,1283,33,3,1,1,0.125,-2.06961 } ); +cells.push_back( {10303322,1303,33,3,2,1,0.125,-2.11918 } ); +cells.push_back( {10403312,1284,33,4,1,1,0.175,-2.06961 } ); +cells.push_back( {10403322,1304,33,4,2,1,0.175,-2.11918 } ); +cells.push_back( {10503312,1285,33,5,1,1,0.225,-2.06961 } ); +cells.push_back( {10503322,1305,33,5,2,1,0.225,-2.11918 } ); +cells.push_back( {10603312,1286,33,6,1,1,0.275,-2.06961 } ); +cells.push_back( {10603322,1306,33,6,2,1,0.275,-2.11918 } ); +cells.push_back( {10703312,1287,33,7,1,1,0.325,-2.06961 } ); +cells.push_back( {10703322,1307,33,7,2,1,0.325,-2.11918 } ); +cells.push_back( {10803312,1288,33,8,1,1,0.375,-2.06961 } ); +cells.push_back( {10803322,1308,33,8,2,1,0.375,-2.11918 } ); +cells.push_back( {10903312,1289,33,9,1,1,0.425,-2.06961 } ); +cells.push_back( {10903322,1309,33,9,2,1,0.425,-2.11918 } ); +cells.push_back( {11003312,1290,33,10,1,1,0.475,-2.06961 } ); +cells.push_back( {11003322,1310,33,10,2,1,0.475,-2.11918 } ); +cells.push_back( {11103312,1291,33,11,1,1,0.525,-2.06961 } ); +cells.push_back( {11103322,1311,33,11,2,1,0.525,-2.11918 } ); +cells.push_back( {11203312,1292,33,12,1,1,0.575,-2.06961 } ); +cells.push_back( {11203322,1312,33,12,2,1,0.575,-2.11918 } ); +cells.push_back( {11303312,1293,33,13,1,1,0.625,-2.06961 } ); +cells.push_back( {11303322,1313,33,13,2,1,0.625,-2.11918 } ); +cells.push_back( {11403312,1294,33,14,1,1,0.675,-2.06961 } ); +cells.push_back( {11403322,1314,33,14,2,1,0.675,-2.11918 } ); +cells.push_back( {11503312,1295,33,15,1,1,0.725,-2.06961 } ); +cells.push_back( {11503322,1315,33,15,2,1,0.725,-2.11918 } ); +cells.push_back( {11603312,1296,33,16,1,1,0.775,-2.06961 } ); +cells.push_back( {11603322,1316,33,16,2,1,0.775,-2.11918 } ); +cells.push_back( {11703312,1297,33,17,1,1,0.825,-2.06961 } ); +cells.push_back( {11703322,1317,33,17,2,1,0.825,-2.11918 } ); +cells.push_back( {11803312,1298,33,18,1,1,0.875,-2.06961 } ); +cells.push_back( {11803322,1318,33,18,2,1,0.875,-2.11918 } ); +cells.push_back( {11903312,1299,33,19,1,1,0.925,-2.06961 } ); +cells.push_back( {11903322,1319,33,19,2,1,0.925,-2.11918 } ); +cells.push_back( {12003312,1300,33,20,1,1,0.967,-2.06961 } ); +cells.push_back( {12003322,1320,33,20,2,1,0.967,-2.11918 } ); +cells.push_back( {10103411,1321,34,1,1,2,0.02675,-2.17433 } ); +cells.push_back( {10103421,1341,34,1,2,2,0.02675,-2.2239 } ); +cells.push_back( {10203411,1322,34,2,1,2,0.075,-2.17433 } ); +cells.push_back( {10203421,1342,34,2,2,2,0.075,-2.2239 } ); +cells.push_back( {10303411,1323,34,3,1,2,0.125,-2.17433 } ); +cells.push_back( {10303421,1343,34,3,2,2,0.125,-2.2239 } ); +cells.push_back( {10403411,1324,34,4,1,2,0.175,-2.17433 } ); +cells.push_back( {10403421,1344,34,4,2,2,0.175,-2.2239 } ); +cells.push_back( {10503411,1325,34,5,1,2,0.225,-2.17433 } ); +cells.push_back( {10503421,1345,34,5,2,2,0.225,-2.2239 } ); +cells.push_back( {10603411,1326,34,6,1,2,0.275,-2.17433 } ); +cells.push_back( {10603421,1346,34,6,2,2,0.275,-2.2239 } ); +cells.push_back( {10703411,1327,34,7,1,2,0.325,-2.17433 } ); +cells.push_back( {10703421,1347,34,7,2,2,0.325,-2.2239 } ); +cells.push_back( {10803411,1328,34,8,1,2,0.375,-2.17433 } ); +cells.push_back( {10803421,1348,34,8,2,2,0.375,-2.2239 } ); +cells.push_back( {10903411,1329,34,9,1,2,0.425,-2.17433 } ); +cells.push_back( {10903421,1349,34,9,2,2,0.425,-2.2239 } ); +cells.push_back( {11003411,1330,34,10,1,2,0.475,-2.17433 } ); +cells.push_back( {11003421,1350,34,10,2,2,0.475,-2.2239 } ); +cells.push_back( {11103411,1331,34,11,1,2,0.525,-2.17433 } ); +cells.push_back( {11103421,1351,34,11,2,2,0.525,-2.2239 } ); +cells.push_back( {11203411,1332,34,12,1,2,0.575,-2.17433 } ); +cells.push_back( {11203421,1352,34,12,2,2,0.575,-2.2239 } ); +cells.push_back( {11303411,1333,34,13,1,2,0.625,-2.17433 } ); +cells.push_back( {11303421,1353,34,13,2,2,0.625,-2.2239 } ); +cells.push_back( {11403411,1334,34,14,1,2,0.675,-2.17433 } ); +cells.push_back( {11403421,1354,34,14,2,2,0.675,-2.2239 } ); +cells.push_back( {11503411,1335,34,15,1,2,0.725,-2.17433 } ); +cells.push_back( {11503421,1355,34,15,2,2,0.725,-2.2239 } ); +cells.push_back( {11603411,1336,34,16,1,2,0.775,-2.17433 } ); +cells.push_back( {11603421,1356,34,16,2,2,0.775,-2.2239 } ); +cells.push_back( {11703411,1337,34,17,1,2,0.825,-2.17433 } ); +cells.push_back( {11703421,1357,34,17,2,2,0.825,-2.2239 } ); +cells.push_back( {11803411,1338,34,18,1,2,0.875,-2.17433 } ); +cells.push_back( {11803421,1358,34,18,2,2,0.875,-2.2239 } ); +cells.push_back( {11903411,1339,34,19,1,2,0.925,-2.17433 } ); +cells.push_back( {11903421,1359,34,19,2,2,0.925,-2.2239 } ); +cells.push_back( {12003411,1340,34,20,1,2,0.967,-2.17433 } ); +cells.push_back( {12003421,1360,34,20,2,2,0.967,-2.2239 } ); +cells.push_back( {10103412,1321,34,1,1,1,0.02675,-2.17433 } ); +cells.push_back( {10103422,1341,34,1,2,1,0.02675,-2.2239 } ); +cells.push_back( {10203412,1322,34,2,1,1,0.075,-2.17433 } ); +cells.push_back( {10203422,1342,34,2,2,1,0.075,-2.2239 } ); +cells.push_back( {10303412,1323,34,3,1,1,0.125,-2.17433 } ); +cells.push_back( {10303422,1343,34,3,2,1,0.125,-2.2239 } ); +cells.push_back( {10403412,1324,34,4,1,1,0.175,-2.17433 } ); +cells.push_back( {10403422,1344,34,4,2,1,0.175,-2.2239 } ); +cells.push_back( {10503412,1325,34,5,1,1,0.225,-2.17433 } ); +cells.push_back( {10503422,1345,34,5,2,1,0.225,-2.2239 } ); +cells.push_back( {10603412,1326,34,6,1,1,0.275,-2.17433 } ); +cells.push_back( {10603422,1346,34,6,2,1,0.275,-2.2239 } ); +cells.push_back( {10703412,1327,34,7,1,1,0.325,-2.17433 } ); +cells.push_back( {10703422,1347,34,7,2,1,0.325,-2.2239 } ); +cells.push_back( {10803412,1328,34,8,1,1,0.375,-2.17433 } ); +cells.push_back( {10803422,1348,34,8,2,1,0.375,-2.2239 } ); +cells.push_back( {10903412,1329,34,9,1,1,0.425,-2.17433 } ); +cells.push_back( {10903422,1349,34,9,2,1,0.425,-2.2239 } ); +cells.push_back( {11003412,1330,34,10,1,1,0.475,-2.17433 } ); +cells.push_back( {11003422,1350,34,10,2,1,0.475,-2.2239 } ); +cells.push_back( {11103412,1331,34,11,1,1,0.525,-2.17433 } ); +cells.push_back( {11103422,1351,34,11,2,1,0.525,-2.2239 } ); +cells.push_back( {11203412,1332,34,12,1,1,0.575,-2.17433 } ); +cells.push_back( {11203422,1352,34,12,2,1,0.575,-2.2239 } ); +cells.push_back( {11303412,1333,34,13,1,1,0.625,-2.17433 } ); +cells.push_back( {11303422,1353,34,13,2,1,0.625,-2.2239 } ); +cells.push_back( {11403412,1334,34,14,1,1,0.675,-2.17433 } ); +cells.push_back( {11403422,1354,34,14,2,1,0.675,-2.2239 } ); +cells.push_back( {11503412,1335,34,15,1,1,0.725,-2.17433 } ); +cells.push_back( {11503422,1355,34,15,2,1,0.725,-2.2239 } ); +cells.push_back( {11603412,1336,34,16,1,1,0.775,-2.17433 } ); +cells.push_back( {11603422,1356,34,16,2,1,0.775,-2.2239 } ); +cells.push_back( {11703412,1337,34,17,1,1,0.825,-2.17433 } ); +cells.push_back( {11703422,1357,34,17,2,1,0.825,-2.2239 } ); +cells.push_back( {11803412,1338,34,18,1,1,0.875,-2.17433 } ); +cells.push_back( {11803422,1358,34,18,2,1,0.875,-2.2239 } ); +cells.push_back( {11903412,1339,34,19,1,1,0.925,-2.17433 } ); +cells.push_back( {11903422,1359,34,19,2,1,0.925,-2.2239 } ); +cells.push_back( {12003412,1340,34,20,1,1,0.967,-2.17433 } ); +cells.push_back( {12003422,1360,34,20,2,1,0.967,-2.2239 } ); +cells.push_back( {10103511,1361,35,1,1,2,0.02675,-2.27905 } ); +cells.push_back( {10103521,1381,35,1,2,2,0.02675,-2.32862 } ); +cells.push_back( {10203511,1362,35,2,1,2,0.075,-2.27905 } ); +cells.push_back( {10203521,1382,35,2,2,2,0.075,-2.32862 } ); +cells.push_back( {10303511,1363,35,3,1,2,0.125,-2.27905 } ); +cells.push_back( {10303521,1383,35,3,2,2,0.125,-2.32862 } ); +cells.push_back( {10403511,1364,35,4,1,2,0.175,-2.27905 } ); +cells.push_back( {10403521,1384,35,4,2,2,0.175,-2.32862 } ); +cells.push_back( {10503511,1365,35,5,1,2,0.225,-2.27905 } ); +cells.push_back( {10503521,1385,35,5,2,2,0.225,-2.32862 } ); +cells.push_back( {10603511,1366,35,6,1,2,0.275,-2.27905 } ); +cells.push_back( {10603521,1386,35,6,2,2,0.275,-2.32862 } ); +cells.push_back( {10703511,1367,35,7,1,2,0.325,-2.27905 } ); +cells.push_back( {10703521,1387,35,7,2,2,0.325,-2.32862 } ); +cells.push_back( {10803511,1368,35,8,1,2,0.375,-2.27905 } ); +cells.push_back( {10803521,1388,35,8,2,2,0.375,-2.32862 } ); +cells.push_back( {10903511,1369,35,9,1,2,0.425,-2.27905 } ); +cells.push_back( {10903521,1389,35,9,2,2,0.425,-2.32862 } ); +cells.push_back( {11003511,1370,35,10,1,2,0.475,-2.27905 } ); +cells.push_back( {11003521,1390,35,10,2,2,0.475,-2.32862 } ); +cells.push_back( {11103511,1371,35,11,1,2,0.525,-2.27905 } ); +cells.push_back( {11103521,1391,35,11,2,2,0.525,-2.32862 } ); +cells.push_back( {11203511,1372,35,12,1,2,0.575,-2.27905 } ); +cells.push_back( {11203521,1392,35,12,2,2,0.575,-2.32862 } ); +cells.push_back( {11303511,1373,35,13,1,2,0.625,-2.27905 } ); +cells.push_back( {11303521,1393,35,13,2,2,0.625,-2.32862 } ); +cells.push_back( {11403511,1374,35,14,1,2,0.675,-2.27905 } ); +cells.push_back( {11403521,1394,35,14,2,2,0.675,-2.32862 } ); +cells.push_back( {11503511,1375,35,15,1,2,0.725,-2.27905 } ); +cells.push_back( {11503521,1395,35,15,2,2,0.725,-2.32862 } ); +cells.push_back( {11603511,1376,35,16,1,2,0.775,-2.27905 } ); +cells.push_back( {11603521,1396,35,16,2,2,0.775,-2.32862 } ); +cells.push_back( {11703511,1377,35,17,1,2,0.825,-2.27905 } ); +cells.push_back( {11703521,1397,35,17,2,2,0.825,-2.32862 } ); +cells.push_back( {11803511,1378,35,18,1,2,0.875,-2.27905 } ); +cells.push_back( {11803521,1398,35,18,2,2,0.875,-2.32862 } ); +cells.push_back( {11903511,1379,35,19,1,2,0.925,-2.27905 } ); +cells.push_back( {11903521,1399,35,19,2,2,0.925,-2.32862 } ); +cells.push_back( {12003511,1380,35,20,1,2,0.967,-2.27905 } ); +cells.push_back( {12003521,1400,35,20,2,2,0.967,-2.32862 } ); +cells.push_back( {10103512,1361,35,1,1,1,0.02675,-2.27905 } ); +cells.push_back( {10103522,1381,35,1,2,1,0.02675,-2.32862 } ); +cells.push_back( {10203512,1362,35,2,1,1,0.075,-2.27905 } ); +cells.push_back( {10203522,1382,35,2,2,1,0.075,-2.32862 } ); +cells.push_back( {10303512,1363,35,3,1,1,0.125,-2.27905 } ); +cells.push_back( {10303522,1383,35,3,2,1,0.125,-2.32862 } ); +cells.push_back( {10403512,1364,35,4,1,1,0.175,-2.27905 } ); +cells.push_back( {10403522,1384,35,4,2,1,0.175,-2.32862 } ); +cells.push_back( {10503512,1365,35,5,1,1,0.225,-2.27905 } ); +cells.push_back( {10503522,1385,35,5,2,1,0.225,-2.32862 } ); +cells.push_back( {10603512,1366,35,6,1,1,0.275,-2.27905 } ); +cells.push_back( {10603522,1386,35,6,2,1,0.275,-2.32862 } ); +cells.push_back( {10703512,1367,35,7,1,1,0.325,-2.27905 } ); +cells.push_back( {10703522,1387,35,7,2,1,0.325,-2.32862 } ); +cells.push_back( {10803512,1368,35,8,1,1,0.375,-2.27905 } ); +cells.push_back( {10803522,1388,35,8,2,1,0.375,-2.32862 } ); +cells.push_back( {10903512,1369,35,9,1,1,0.425,-2.27905 } ); +cells.push_back( {10903522,1389,35,9,2,1,0.425,-2.32862 } ); +cells.push_back( {11003512,1370,35,10,1,1,0.475,-2.27905 } ); +cells.push_back( {11003522,1390,35,10,2,1,0.475,-2.32862 } ); +cells.push_back( {11103512,1371,35,11,1,1,0.525,-2.27905 } ); +cells.push_back( {11103522,1391,35,11,2,1,0.525,-2.32862 } ); +cells.push_back( {11203512,1372,35,12,1,1,0.575,-2.27905 } ); +cells.push_back( {11203522,1392,35,12,2,1,0.575,-2.32862 } ); +cells.push_back( {11303512,1373,35,13,1,1,0.625,-2.27905 } ); +cells.push_back( {11303522,1393,35,13,2,1,0.625,-2.32862 } ); +cells.push_back( {11403512,1374,35,14,1,1,0.675,-2.27905 } ); +cells.push_back( {11403522,1394,35,14,2,1,0.675,-2.32862 } ); +cells.push_back( {11503512,1375,35,15,1,1,0.725,-2.27905 } ); +cells.push_back( {11503522,1395,35,15,2,1,0.725,-2.32862 } ); +cells.push_back( {11603512,1376,35,16,1,1,0.775,-2.27905 } ); +cells.push_back( {11603522,1396,35,16,2,1,0.775,-2.32862 } ); +cells.push_back( {11703512,1377,35,17,1,1,0.825,-2.27905 } ); +cells.push_back( {11703522,1397,35,17,2,1,0.825,-2.32862 } ); +cells.push_back( {11803512,1378,35,18,1,1,0.875,-2.27905 } ); +cells.push_back( {11803522,1398,35,18,2,1,0.875,-2.32862 } ); +cells.push_back( {11903512,1379,35,19,1,1,0.925,-2.27905 } ); +cells.push_back( {11903522,1399,35,19,2,1,0.925,-2.32862 } ); +cells.push_back( {12003512,1380,35,20,1,1,0.967,-2.27905 } ); +cells.push_back( {12003522,1400,35,20,2,1,0.967,-2.32862 } ); +cells.push_back( {10103611,1401,36,1,1,2,0.02675,-2.38377 } ); +cells.push_back( {10103621,1421,36,1,2,2,0.02675,-2.43334 } ); +cells.push_back( {10203611,1402,36,2,1,2,0.075,-2.38377 } ); +cells.push_back( {10203621,1422,36,2,2,2,0.075,-2.43334 } ); +cells.push_back( {10303611,1403,36,3,1,2,0.125,-2.38377 } ); +cells.push_back( {10303621,1423,36,3,2,2,0.125,-2.43334 } ); +cells.push_back( {10403611,1404,36,4,1,2,0.175,-2.38377 } ); +cells.push_back( {10403621,1424,36,4,2,2,0.175,-2.43334 } ); +cells.push_back( {10503611,1405,36,5,1,2,0.225,-2.38377 } ); +cells.push_back( {10503621,1425,36,5,2,2,0.225,-2.43334 } ); +cells.push_back( {10603611,1406,36,6,1,2,0.275,-2.38377 } ); +cells.push_back( {10603621,1426,36,6,2,2,0.275,-2.43334 } ); +cells.push_back( {10703611,1407,36,7,1,2,0.325,-2.38377 } ); +cells.push_back( {10703621,1427,36,7,2,2,0.325,-2.43334 } ); +cells.push_back( {10803611,1408,36,8,1,2,0.375,-2.38377 } ); +cells.push_back( {10803621,1428,36,8,2,2,0.375,-2.43334 } ); +cells.push_back( {10903611,1409,36,9,1,2,0.425,-2.38377 } ); +cells.push_back( {10903621,1429,36,9,2,2,0.425,-2.43334 } ); +cells.push_back( {11003611,1410,36,10,1,2,0.475,-2.38377 } ); +cells.push_back( {11003621,1430,36,10,2,2,0.475,-2.43334 } ); +cells.push_back( {11103611,1411,36,11,1,2,0.525,-2.38377 } ); +cells.push_back( {11103621,1431,36,11,2,2,0.525,-2.43334 } ); +cells.push_back( {11203611,1412,36,12,1,2,0.575,-2.38377 } ); +cells.push_back( {11203621,1432,36,12,2,2,0.575,-2.43334 } ); +cells.push_back( {11303611,1413,36,13,1,2,0.625,-2.38377 } ); +cells.push_back( {11303621,1433,36,13,2,2,0.625,-2.43334 } ); +cells.push_back( {11403611,1414,36,14,1,2,0.675,-2.38377 } ); +cells.push_back( {11403621,1434,36,14,2,2,0.675,-2.43334 } ); +cells.push_back( {11503611,1415,36,15,1,2,0.725,-2.38377 } ); +cells.push_back( {11503621,1435,36,15,2,2,0.725,-2.43334 } ); +cells.push_back( {11603611,1416,36,16,1,2,0.775,-2.38377 } ); +cells.push_back( {11603621,1436,36,16,2,2,0.775,-2.43334 } ); +cells.push_back( {11703611,1417,36,17,1,2,0.825,-2.38377 } ); +cells.push_back( {11703621,1437,36,17,2,2,0.825,-2.43334 } ); +cells.push_back( {11803611,1418,36,18,1,2,0.875,-2.38377 } ); +cells.push_back( {11803621,1438,36,18,2,2,0.875,-2.43334 } ); +cells.push_back( {11903611,1419,36,19,1,2,0.925,-2.38377 } ); +cells.push_back( {11903621,1439,36,19,2,2,0.925,-2.43334 } ); +cells.push_back( {12003611,1420,36,20,1,2,0.967,-2.38377 } ); +cells.push_back( {12003621,1440,36,20,2,2,0.967,-2.43334 } ); +cells.push_back( {10103612,1401,36,1,1,1,0.02675,-2.38377 } ); +cells.push_back( {10103622,1421,36,1,2,1,0.02675,-2.43334 } ); +cells.push_back( {10203612,1402,36,2,1,1,0.075,-2.38377 } ); +cells.push_back( {10203622,1422,36,2,2,1,0.075,-2.43334 } ); +cells.push_back( {10303612,1403,36,3,1,1,0.125,-2.38377 } ); +cells.push_back( {10303622,1423,36,3,2,1,0.125,-2.43334 } ); +cells.push_back( {10403612,1404,36,4,1,1,0.175,-2.38377 } ); +cells.push_back( {10403622,1424,36,4,2,1,0.175,-2.43334 } ); +cells.push_back( {10503612,1405,36,5,1,1,0.225,-2.38377 } ); +cells.push_back( {10503622,1425,36,5,2,1,0.225,-2.43334 } ); +cells.push_back( {10603612,1406,36,6,1,1,0.275,-2.38377 } ); +cells.push_back( {10603622,1426,36,6,2,1,0.275,-2.43334 } ); +cells.push_back( {10703612,1407,36,7,1,1,0.325,-2.38377 } ); +cells.push_back( {10703622,1427,36,7,2,1,0.325,-2.43334 } ); +cells.push_back( {10803612,1408,36,8,1,1,0.375,-2.38377 } ); +cells.push_back( {10803622,1428,36,8,2,1,0.375,-2.43334 } ); +cells.push_back( {10903612,1409,36,9,1,1,0.425,-2.38377 } ); +cells.push_back( {10903622,1429,36,9,2,1,0.425,-2.43334 } ); +cells.push_back( {11003612,1410,36,10,1,1,0.475,-2.38377 } ); +cells.push_back( {11003622,1430,36,10,2,1,0.475,-2.43334 } ); +cells.push_back( {11103612,1411,36,11,1,1,0.525,-2.38377 } ); +cells.push_back( {11103622,1431,36,11,2,1,0.525,-2.43334 } ); +cells.push_back( {11203612,1412,36,12,1,1,0.575,-2.38377 } ); +cells.push_back( {11203622,1432,36,12,2,1,0.575,-2.43334 } ); +cells.push_back( {11303612,1413,36,13,1,1,0.625,-2.38377 } ); +cells.push_back( {11303622,1433,36,13,2,1,0.625,-2.43334 } ); +cells.push_back( {11403612,1414,36,14,1,1,0.675,-2.38377 } ); +cells.push_back( {11403622,1434,36,14,2,1,0.675,-2.43334 } ); +cells.push_back( {11503612,1415,36,15,1,1,0.725,-2.38377 } ); +cells.push_back( {11503622,1435,36,15,2,1,0.725,-2.43334 } ); +cells.push_back( {11603612,1416,36,16,1,1,0.775,-2.38377 } ); +cells.push_back( {11603622,1436,36,16,2,1,0.775,-2.43334 } ); +cells.push_back( {11703612,1417,36,17,1,1,0.825,-2.38377 } ); +cells.push_back( {11703622,1437,36,17,2,1,0.825,-2.43334 } ); +cells.push_back( {11803612,1418,36,18,1,1,0.875,-2.38377 } ); +cells.push_back( {11803622,1438,36,18,2,1,0.875,-2.43334 } ); +cells.push_back( {11903612,1419,36,19,1,1,0.925,-2.38377 } ); +cells.push_back( {11903622,1439,36,19,2,1,0.925,-2.43334 } ); +cells.push_back( {12003612,1420,36,20,1,1,0.967,-2.38377 } ); +cells.push_back( {12003622,1440,36,20,2,1,0.967,-2.43334 } ); +cells.push_back( {10103711,1441,37,1,1,2,0.02675,-2.48849 } ); +cells.push_back( {10103721,1461,37,1,2,2,0.02675,-2.53806 } ); +cells.push_back( {10203711,1442,37,2,1,2,0.075,-2.48849 } ); +cells.push_back( {10203721,1462,37,2,2,2,0.075,-2.53806 } ); +cells.push_back( {10303711,1443,37,3,1,2,0.125,-2.48849 } ); +cells.push_back( {10303721,1463,37,3,2,2,0.125,-2.53806 } ); +cells.push_back( {10403711,1444,37,4,1,2,0.175,-2.48849 } ); +cells.push_back( {10403721,1464,37,4,2,2,0.175,-2.53806 } ); +cells.push_back( {10503711,1445,37,5,1,2,0.225,-2.48849 } ); +cells.push_back( {10503721,1465,37,5,2,2,0.225,-2.53806 } ); +cells.push_back( {10603711,1446,37,6,1,2,0.275,-2.48849 } ); +cells.push_back( {10603721,1466,37,6,2,2,0.275,-2.53806 } ); +cells.push_back( {10703711,1447,37,7,1,2,0.325,-2.48849 } ); +cells.push_back( {10703721,1467,37,7,2,2,0.325,-2.53806 } ); +cells.push_back( {10803711,1448,37,8,1,2,0.375,-2.48849 } ); +cells.push_back( {10803721,1468,37,8,2,2,0.375,-2.53806 } ); +cells.push_back( {10903711,1449,37,9,1,2,0.425,-2.48849 } ); +cells.push_back( {10903721,1469,37,9,2,2,0.425,-2.53806 } ); +cells.push_back( {11003711,1450,37,10,1,2,0.475,-2.48849 } ); +cells.push_back( {11003721,1470,37,10,2,2,0.475,-2.53806 } ); +cells.push_back( {11103711,1451,37,11,1,2,0.525,-2.48849 } ); +cells.push_back( {11103721,1471,37,11,2,2,0.525,-2.53806 } ); +cells.push_back( {11203711,1452,37,12,1,2,0.575,-2.48849 } ); +cells.push_back( {11203721,1472,37,12,2,2,0.575,-2.53806 } ); +cells.push_back( {11303711,1453,37,13,1,2,0.625,-2.48849 } ); +cells.push_back( {11303721,1473,37,13,2,2,0.625,-2.53806 } ); +cells.push_back( {11403711,1454,37,14,1,2,0.675,-2.48849 } ); +cells.push_back( {11403721,1474,37,14,2,2,0.675,-2.53806 } ); +cells.push_back( {11503711,1455,37,15,1,2,0.725,-2.48849 } ); +cells.push_back( {11503721,1475,37,15,2,2,0.725,-2.53806 } ); +cells.push_back( {11603711,1456,37,16,1,2,0.775,-2.48849 } ); +cells.push_back( {11603721,1476,37,16,2,2,0.775,-2.53806 } ); +cells.push_back( {11703711,1457,37,17,1,2,0.825,-2.48849 } ); +cells.push_back( {11703721,1477,37,17,2,2,0.825,-2.53806 } ); +cells.push_back( {11803711,1458,37,18,1,2,0.875,-2.48849 } ); +cells.push_back( {11803721,1478,37,18,2,2,0.875,-2.53806 } ); +cells.push_back( {11903711,1459,37,19,1,2,0.925,-2.48849 } ); +cells.push_back( {11903721,1479,37,19,2,2,0.925,-2.53806 } ); +cells.push_back( {12003711,1460,37,20,1,2,0.967,-2.48849 } ); +cells.push_back( {12003721,1480,37,20,2,2,0.967,-2.53806 } ); +cells.push_back( {10103712,1441,37,1,1,1,0.02675,-2.48849 } ); +cells.push_back( {10103722,1461,37,1,2,1,0.02675,-2.53806 } ); +cells.push_back( {10203712,1442,37,2,1,1,0.075,-2.48849 } ); +cells.push_back( {10203722,1462,37,2,2,1,0.075,-2.53806 } ); +cells.push_back( {10303712,1443,37,3,1,1,0.125,-2.48849 } ); +cells.push_back( {10303722,1463,37,3,2,1,0.125,-2.53806 } ); +cells.push_back( {10403712,1444,37,4,1,1,0.175,-2.48849 } ); +cells.push_back( {10403722,1464,37,4,2,1,0.175,-2.53806 } ); +cells.push_back( {10503712,1445,37,5,1,1,0.225,-2.48849 } ); +cells.push_back( {10503722,1465,37,5,2,1,0.225,-2.53806 } ); +cells.push_back( {10603712,1446,37,6,1,1,0.275,-2.48849 } ); +cells.push_back( {10603722,1466,37,6,2,1,0.275,-2.53806 } ); +cells.push_back( {10703712,1447,37,7,1,1,0.325,-2.48849 } ); +cells.push_back( {10703722,1467,37,7,2,1,0.325,-2.53806 } ); +cells.push_back( {10803712,1448,37,8,1,1,0.375,-2.48849 } ); +cells.push_back( {10803722,1468,37,8,2,1,0.375,-2.53806 } ); +cells.push_back( {10903712,1449,37,9,1,1,0.425,-2.48849 } ); +cells.push_back( {10903722,1469,37,9,2,1,0.425,-2.53806 } ); +cells.push_back( {11003712,1450,37,10,1,1,0.475,-2.48849 } ); +cells.push_back( {11003722,1470,37,10,2,1,0.475,-2.53806 } ); +cells.push_back( {11103712,1451,37,11,1,1,0.525,-2.48849 } ); +cells.push_back( {11103722,1471,37,11,2,1,0.525,-2.53806 } ); +cells.push_back( {11203712,1452,37,12,1,1,0.575,-2.48849 } ); +cells.push_back( {11203722,1472,37,12,2,1,0.575,-2.53806 } ); +cells.push_back( {11303712,1453,37,13,1,1,0.625,-2.48849 } ); +cells.push_back( {11303722,1473,37,13,2,1,0.625,-2.53806 } ); +cells.push_back( {11403712,1454,37,14,1,1,0.675,-2.48849 } ); +cells.push_back( {11403722,1474,37,14,2,1,0.675,-2.53806 } ); +cells.push_back( {11503712,1455,37,15,1,1,0.725,-2.48849 } ); +cells.push_back( {11503722,1475,37,15,2,1,0.725,-2.53806 } ); +cells.push_back( {11603712,1456,37,16,1,1,0.775,-2.48849 } ); +cells.push_back( {11603722,1476,37,16,2,1,0.775,-2.53806 } ); +cells.push_back( {11703712,1457,37,17,1,1,0.825,-2.48849 } ); +cells.push_back( {11703722,1477,37,17,2,1,0.825,-2.53806 } ); +cells.push_back( {11803712,1458,37,18,1,1,0.875,-2.48849 } ); +cells.push_back( {11803722,1478,37,18,2,1,0.875,-2.53806 } ); +cells.push_back( {11903712,1459,37,19,1,1,0.925,-2.48849 } ); +cells.push_back( {11903722,1479,37,19,2,1,0.925,-2.53806 } ); +cells.push_back( {12003712,1460,37,20,1,1,0.967,-2.48849 } ); +cells.push_back( {12003722,1480,37,20,2,1,0.967,-2.53806 } ); +cells.push_back( {10103811,1481,38,1,1,2,0.02675,-2.59321 } ); +cells.push_back( {10103821,1501,38,1,2,2,0.02675,-2.64278 } ); +cells.push_back( {10203811,1482,38,2,1,2,0.075,-2.59321 } ); +cells.push_back( {10203821,1502,38,2,2,2,0.075,-2.64278 } ); +cells.push_back( {10303811,1483,38,3,1,2,0.125,-2.59321 } ); +cells.push_back( {10303821,1503,38,3,2,2,0.125,-2.64278 } ); +cells.push_back( {10403811,1484,38,4,1,2,0.175,-2.59321 } ); +cells.push_back( {10403821,1504,38,4,2,2,0.175,-2.64278 } ); +cells.push_back( {10503811,1485,38,5,1,2,0.225,-2.59321 } ); +cells.push_back( {10503821,1505,38,5,2,2,0.225,-2.64278 } ); +cells.push_back( {10603811,1486,38,6,1,2,0.275,-2.59321 } ); +cells.push_back( {10603821,1506,38,6,2,2,0.275,-2.64278 } ); +cells.push_back( {10703811,1487,38,7,1,2,0.325,-2.59321 } ); +cells.push_back( {10703821,1507,38,7,2,2,0.325,-2.64278 } ); +cells.push_back( {10803811,1488,38,8,1,2,0.375,-2.59321 } ); +cells.push_back( {10803821,1508,38,8,2,2,0.375,-2.64278 } ); +cells.push_back( {10903811,1489,38,9,1,2,0.425,-2.59321 } ); +cells.push_back( {10903821,1509,38,9,2,2,0.425,-2.64278 } ); +cells.push_back( {11003811,1490,38,10,1,2,0.475,-2.59321 } ); +cells.push_back( {11003821,1510,38,10,2,2,0.475,-2.64278 } ); +cells.push_back( {11103811,1491,38,11,1,2,0.525,-2.59321 } ); +cells.push_back( {11103821,1511,38,11,2,2,0.525,-2.64278 } ); +cells.push_back( {11203811,1492,38,12,1,2,0.575,-2.59321 } ); +cells.push_back( {11203821,1512,38,12,2,2,0.575,-2.64278 } ); +cells.push_back( {11303811,1493,38,13,1,2,0.625,-2.59321 } ); +cells.push_back( {11303821,1513,38,13,2,2,0.625,-2.64278 } ); +cells.push_back( {11403811,1494,38,14,1,2,0.675,-2.59321 } ); +cells.push_back( {11403821,1514,38,14,2,2,0.675,-2.64278 } ); +cells.push_back( {11503811,1495,38,15,1,2,0.725,-2.59321 } ); +cells.push_back( {11503821,1515,38,15,2,2,0.725,-2.64278 } ); +cells.push_back( {11603811,1496,38,16,1,2,0.775,-2.59321 } ); +cells.push_back( {11603821,1516,38,16,2,2,0.775,-2.64278 } ); +cells.push_back( {11703811,1497,38,17,1,2,0.825,-2.59321 } ); +cells.push_back( {11703821,1517,38,17,2,2,0.825,-2.64278 } ); +cells.push_back( {11803811,1498,38,18,1,2,0.875,-2.59321 } ); +cells.push_back( {11803821,1518,38,18,2,2,0.875,-2.64278 } ); +cells.push_back( {11903811,1499,38,19,1,2,0.925,-2.59321 } ); +cells.push_back( {11903821,1519,38,19,2,2,0.925,-2.64278 } ); +cells.push_back( {12003811,1500,38,20,1,2,0.967,-2.59321 } ); +cells.push_back( {12003821,1520,38,20,2,2,0.967,-2.64278 } ); +cells.push_back( {10103812,1481,38,1,1,1,0.02675,-2.59321 } ); +cells.push_back( {10103822,1501,38,1,2,1,0.02675,-2.64278 } ); +cells.push_back( {10203812,1482,38,2,1,1,0.075,-2.59321 } ); +cells.push_back( {10203822,1502,38,2,2,1,0.075,-2.64278 } ); +cells.push_back( {10303812,1483,38,3,1,1,0.125,-2.59321 } ); +cells.push_back( {10303822,1503,38,3,2,1,0.125,-2.64278 } ); +cells.push_back( {10403812,1484,38,4,1,1,0.175,-2.59321 } ); +cells.push_back( {10403822,1504,38,4,2,1,0.175,-2.64278 } ); +cells.push_back( {10503812,1485,38,5,1,1,0.225,-2.59321 } ); +cells.push_back( {10503822,1505,38,5,2,1,0.225,-2.64278 } ); +cells.push_back( {10603812,1486,38,6,1,1,0.275,-2.59321 } ); +cells.push_back( {10603822,1506,38,6,2,1,0.275,-2.64278 } ); +cells.push_back( {10703812,1487,38,7,1,1,0.325,-2.59321 } ); +cells.push_back( {10703822,1507,38,7,2,1,0.325,-2.64278 } ); +cells.push_back( {10803812,1488,38,8,1,1,0.375,-2.59321 } ); +cells.push_back( {10803822,1508,38,8,2,1,0.375,-2.64278 } ); +cells.push_back( {10903812,1489,38,9,1,1,0.425,-2.59321 } ); +cells.push_back( {10903822,1509,38,9,2,1,0.425,-2.64278 } ); +cells.push_back( {11003812,1490,38,10,1,1,0.475,-2.59321 } ); +cells.push_back( {11003822,1510,38,10,2,1,0.475,-2.64278 } ); +cells.push_back( {11103812,1491,38,11,1,1,0.525,-2.59321 } ); +cells.push_back( {11103822,1511,38,11,2,1,0.525,-2.64278 } ); +cells.push_back( {11203812,1492,38,12,1,1,0.575,-2.59321 } ); +cells.push_back( {11203822,1512,38,12,2,1,0.575,-2.64278 } ); +cells.push_back( {11303812,1493,38,13,1,1,0.625,-2.59321 } ); +cells.push_back( {11303822,1513,38,13,2,1,0.625,-2.64278 } ); +cells.push_back( {11403812,1494,38,14,1,1,0.675,-2.59321 } ); +cells.push_back( {11403822,1514,38,14,2,1,0.675,-2.64278 } ); +cells.push_back( {11503812,1495,38,15,1,1,0.725,-2.59321 } ); +cells.push_back( {11503822,1515,38,15,2,1,0.725,-2.64278 } ); +cells.push_back( {11603812,1496,38,16,1,1,0.775,-2.59321 } ); +cells.push_back( {11603822,1516,38,16,2,1,0.775,-2.64278 } ); +cells.push_back( {11703812,1497,38,17,1,1,0.825,-2.59321 } ); +cells.push_back( {11703822,1517,38,17,2,1,0.825,-2.64278 } ); +cells.push_back( {11803812,1498,38,18,1,1,0.875,-2.59321 } ); +cells.push_back( {11803822,1518,38,18,2,1,0.875,-2.64278 } ); +cells.push_back( {11903812,1499,38,19,1,1,0.925,-2.59321 } ); +cells.push_back( {11903822,1519,38,19,2,1,0.925,-2.64278 } ); +cells.push_back( {12003812,1500,38,20,1,1,0.967,-2.59321 } ); +cells.push_back( {12003822,1520,38,20,2,1,0.967,-2.64278 } ); +cells.push_back( {10103911,1521,39,1,1,2,0.02675,-2.69793 } ); +cells.push_back( {10103921,1541,39,1,2,2,0.02675,-2.7475 } ); +cells.push_back( {10203911,1522,39,2,1,2,0.075,-2.69793 } ); +cells.push_back( {10203921,1542,39,2,2,2,0.075,-2.7475 } ); +cells.push_back( {10303911,1523,39,3,1,2,0.125,-2.69793 } ); +cells.push_back( {10303921,1543,39,3,2,2,0.125,-2.7475 } ); +cells.push_back( {10403911,1524,39,4,1,2,0.175,-2.69793 } ); +cells.push_back( {10403921,1544,39,4,2,2,0.175,-2.7475 } ); +cells.push_back( {10503911,1525,39,5,1,2,0.225,-2.69793 } ); +cells.push_back( {10503921,1545,39,5,2,2,0.225,-2.7475 } ); +cells.push_back( {10603911,1526,39,6,1,2,0.275,-2.69793 } ); +cells.push_back( {10603921,1546,39,6,2,2,0.275,-2.7475 } ); +cells.push_back( {10703911,1527,39,7,1,2,0.325,-2.69793 } ); +cells.push_back( {10703921,1547,39,7,2,2,0.325,-2.7475 } ); +cells.push_back( {10803911,1528,39,8,1,2,0.375,-2.69793 } ); +cells.push_back( {10803921,1548,39,8,2,2,0.375,-2.7475 } ); +cells.push_back( {10903911,1529,39,9,1,2,0.425,-2.69793 } ); +cells.push_back( {10903921,1549,39,9,2,2,0.425,-2.7475 } ); +cells.push_back( {11003911,1530,39,10,1,2,0.475,-2.69793 } ); +cells.push_back( {11003921,1550,39,10,2,2,0.475,-2.7475 } ); +cells.push_back( {11103911,1531,39,11,1,2,0.525,-2.69793 } ); +cells.push_back( {11103921,1551,39,11,2,2,0.525,-2.7475 } ); +cells.push_back( {11203911,1532,39,12,1,2,0.575,-2.69793 } ); +cells.push_back( {11203921,1552,39,12,2,2,0.575,-2.7475 } ); +cells.push_back( {11303911,1533,39,13,1,2,0.625,-2.69793 } ); +cells.push_back( {11303921,1553,39,13,2,2,0.625,-2.7475 } ); +cells.push_back( {11403911,1534,39,14,1,2,0.675,-2.69793 } ); +cells.push_back( {11403921,1554,39,14,2,2,0.675,-2.7475 } ); +cells.push_back( {11503911,1535,39,15,1,2,0.725,-2.69793 } ); +cells.push_back( {11503921,1555,39,15,2,2,0.725,-2.7475 } ); +cells.push_back( {11603911,1536,39,16,1,2,0.775,-2.69793 } ); +cells.push_back( {11603921,1556,39,16,2,2,0.775,-2.7475 } ); +cells.push_back( {11703911,1537,39,17,1,2,0.825,-2.69793 } ); +cells.push_back( {11703921,1557,39,17,2,2,0.825,-2.7475 } ); +cells.push_back( {11803911,1538,39,18,1,2,0.875,-2.69793 } ); +cells.push_back( {11803921,1558,39,18,2,2,0.875,-2.7475 } ); +cells.push_back( {11903911,1539,39,19,1,2,0.925,-2.69793 } ); +cells.push_back( {11903921,1559,39,19,2,2,0.925,-2.7475 } ); +cells.push_back( {12003911,1540,39,20,1,2,0.967,-2.69793 } ); +cells.push_back( {12003921,1560,39,20,2,2,0.967,-2.7475 } ); +cells.push_back( {10103912,1521,39,1,1,1,0.02675,-2.69793 } ); +cells.push_back( {10103922,1541,39,1,2,1,0.02675,-2.7475 } ); +cells.push_back( {10203912,1522,39,2,1,1,0.075,-2.69793 } ); +cells.push_back( {10203922,1542,39,2,2,1,0.075,-2.7475 } ); +cells.push_back( {10303912,1523,39,3,1,1,0.125,-2.69793 } ); +cells.push_back( {10303922,1543,39,3,2,1,0.125,-2.7475 } ); +cells.push_back( {10403912,1524,39,4,1,1,0.175,-2.69793 } ); +cells.push_back( {10403922,1544,39,4,2,1,0.175,-2.7475 } ); +cells.push_back( {10503912,1525,39,5,1,1,0.225,-2.69793 } ); +cells.push_back( {10503922,1545,39,5,2,1,0.225,-2.7475 } ); +cells.push_back( {10603912,1526,39,6,1,1,0.275,-2.69793 } ); +cells.push_back( {10603922,1546,39,6,2,1,0.275,-2.7475 } ); +cells.push_back( {10703912,1527,39,7,1,1,0.325,-2.69793 } ); +cells.push_back( {10703922,1547,39,7,2,1,0.325,-2.7475 } ); +cells.push_back( {10803912,1528,39,8,1,1,0.375,-2.69793 } ); +cells.push_back( {10803922,1548,39,8,2,1,0.375,-2.7475 } ); +cells.push_back( {10903912,1529,39,9,1,1,0.425,-2.69793 } ); +cells.push_back( {10903922,1549,39,9,2,1,0.425,-2.7475 } ); +cells.push_back( {11003912,1530,39,10,1,1,0.475,-2.69793 } ); +cells.push_back( {11003922,1550,39,10,2,1,0.475,-2.7475 } ); +cells.push_back( {11103912,1531,39,11,1,1,0.525,-2.69793 } ); +cells.push_back( {11103922,1551,39,11,2,1,0.525,-2.7475 } ); +cells.push_back( {11203912,1532,39,12,1,1,0.575,-2.69793 } ); +cells.push_back( {11203922,1552,39,12,2,1,0.575,-2.7475 } ); +cells.push_back( {11303912,1533,39,13,1,1,0.625,-2.69793 } ); +cells.push_back( {11303922,1553,39,13,2,1,0.625,-2.7475 } ); +cells.push_back( {11403912,1534,39,14,1,1,0.675,-2.69793 } ); +cells.push_back( {11403922,1554,39,14,2,1,0.675,-2.7475 } ); +cells.push_back( {11503912,1535,39,15,1,1,0.725,-2.69793 } ); +cells.push_back( {11503922,1555,39,15,2,1,0.725,-2.7475 } ); +cells.push_back( {11603912,1536,39,16,1,1,0.775,-2.69793 } ); +cells.push_back( {11603922,1556,39,16,2,1,0.775,-2.7475 } ); +cells.push_back( {11703912,1537,39,17,1,1,0.825,-2.69793 } ); +cells.push_back( {11703922,1557,39,17,2,1,0.825,-2.7475 } ); +cells.push_back( {11803912,1538,39,18,1,1,0.875,-2.69793 } ); +cells.push_back( {11803922,1558,39,18,2,1,0.875,-2.7475 } ); +cells.push_back( {11903912,1539,39,19,1,1,0.925,-2.69793 } ); +cells.push_back( {11903922,1559,39,19,2,1,0.925,-2.7475 } ); +cells.push_back( {12003912,1540,39,20,1,1,0.967,-2.69793 } ); +cells.push_back( {12003922,1560,39,20,2,1,0.967,-2.7475 } ); +cells.push_back( {10104011,1561,40,1,1,2,0.02675,-2.80265 } ); +cells.push_back( {10104021,1581,40,1,2,2,0.02675,-2.85221 } ); +cells.push_back( {10204011,1562,40,2,1,2,0.075,-2.80265 } ); +cells.push_back( {10204021,1582,40,2,2,2,0.075,-2.85221 } ); +cells.push_back( {10304011,1563,40,3,1,2,0.125,-2.80265 } ); +cells.push_back( {10304021,1583,40,3,2,2,0.125,-2.85221 } ); +cells.push_back( {10404011,1564,40,4,1,2,0.175,-2.80265 } ); +cells.push_back( {10404021,1584,40,4,2,2,0.175,-2.85221 } ); +cells.push_back( {10504011,1565,40,5,1,2,0.225,-2.80265 } ); +cells.push_back( {10504021,1585,40,5,2,2,0.225,-2.85221 } ); +cells.push_back( {10604011,1566,40,6,1,2,0.275,-2.80265 } ); +cells.push_back( {10604021,1586,40,6,2,2,0.275,-2.85221 } ); +cells.push_back( {10704011,1567,40,7,1,2,0.325,-2.80265 } ); +cells.push_back( {10704021,1587,40,7,2,2,0.325,-2.85221 } ); +cells.push_back( {10804011,1568,40,8,1,2,0.375,-2.80265 } ); +cells.push_back( {10804021,1588,40,8,2,2,0.375,-2.85221 } ); +cells.push_back( {10904011,1569,40,9,1,2,0.425,-2.80265 } ); +cells.push_back( {10904021,1589,40,9,2,2,0.425,-2.85221 } ); +cells.push_back( {11004011,1570,40,10,1,2,0.475,-2.80265 } ); +cells.push_back( {11004021,1590,40,10,2,2,0.475,-2.85221 } ); +cells.push_back( {11104011,1571,40,11,1,2,0.525,-2.80265 } ); +cells.push_back( {11104021,1591,40,11,2,2,0.525,-2.85221 } ); +cells.push_back( {11204011,1572,40,12,1,2,0.575,-2.80265 } ); +cells.push_back( {11204021,1592,40,12,2,2,0.575,-2.85221 } ); +cells.push_back( {11304011,1573,40,13,1,2,0.625,-2.80265 } ); +cells.push_back( {11304021,1593,40,13,2,2,0.625,-2.85221 } ); +cells.push_back( {11404011,1574,40,14,1,2,0.675,-2.80265 } ); +cells.push_back( {11404021,1594,40,14,2,2,0.675,-2.85221 } ); +cells.push_back( {11504011,1575,40,15,1,2,0.725,-2.80265 } ); +cells.push_back( {11504021,1595,40,15,2,2,0.725,-2.85221 } ); +cells.push_back( {11604011,1576,40,16,1,2,0.775,-2.80265 } ); +cells.push_back( {11604021,1596,40,16,2,2,0.775,-2.85221 } ); +cells.push_back( {11704011,1577,40,17,1,2,0.825,-2.80265 } ); +cells.push_back( {11704021,1597,40,17,2,2,0.825,-2.85221 } ); +cells.push_back( {11804011,1578,40,18,1,2,0.875,-2.80265 } ); +cells.push_back( {11804021,1598,40,18,2,2,0.875,-2.85221 } ); +cells.push_back( {11904011,1579,40,19,1,2,0.925,-2.80265 } ); +cells.push_back( {11904021,1599,40,19,2,2,0.925,-2.85221 } ); +cells.push_back( {12004011,1580,40,20,1,2,0.967,-2.80265 } ); +cells.push_back( {12004021,1600,40,20,2,2,0.967,-2.85221 } ); +cells.push_back( {10104012,1561,40,1,1,1,0.02675,-2.80265 } ); +cells.push_back( {10104022,1581,40,1,2,1,0.02675,-2.85221 } ); +cells.push_back( {10204012,1562,40,2,1,1,0.075,-2.80265 } ); +cells.push_back( {10204022,1582,40,2,2,1,0.075,-2.85221 } ); +cells.push_back( {10304012,1563,40,3,1,1,0.125,-2.80265 } ); +cells.push_back( {10304022,1583,40,3,2,1,0.125,-2.85221 } ); +cells.push_back( {10404012,1564,40,4,1,1,0.175,-2.80265 } ); +cells.push_back( {10404022,1584,40,4,2,1,0.175,-2.85221 } ); +cells.push_back( {10504012,1565,40,5,1,1,0.225,-2.80265 } ); +cells.push_back( {10504022,1585,40,5,2,1,0.225,-2.85221 } ); +cells.push_back( {10604012,1566,40,6,1,1,0.275,-2.80265 } ); +cells.push_back( {10604022,1586,40,6,2,1,0.275,-2.85221 } ); +cells.push_back( {10704012,1567,40,7,1,1,0.325,-2.80265 } ); +cells.push_back( {10704022,1587,40,7,2,1,0.325,-2.85221 } ); +cells.push_back( {10804012,1568,40,8,1,1,0.375,-2.80265 } ); +cells.push_back( {10804022,1588,40,8,2,1,0.375,-2.85221 } ); +cells.push_back( {10904012,1569,40,9,1,1,0.425,-2.80265 } ); +cells.push_back( {10904022,1589,40,9,2,1,0.425,-2.85221 } ); +cells.push_back( {11004012,1570,40,10,1,1,0.475,-2.80265 } ); +cells.push_back( {11004022,1590,40,10,2,1,0.475,-2.85221 } ); +cells.push_back( {11104012,1571,40,11,1,1,0.525,-2.80265 } ); +cells.push_back( {11104022,1591,40,11,2,1,0.525,-2.85221 } ); +cells.push_back( {11204012,1572,40,12,1,1,0.575,-2.80265 } ); +cells.push_back( {11204022,1592,40,12,2,1,0.575,-2.85221 } ); +cells.push_back( {11304012,1573,40,13,1,1,0.625,-2.80265 } ); +cells.push_back( {11304022,1593,40,13,2,1,0.625,-2.85221 } ); +cells.push_back( {11404012,1574,40,14,1,1,0.675,-2.80265 } ); +cells.push_back( {11404022,1594,40,14,2,1,0.675,-2.85221 } ); +cells.push_back( {11504012,1575,40,15,1,1,0.725,-2.80265 } ); +cells.push_back( {11504022,1595,40,15,2,1,0.725,-2.85221 } ); +cells.push_back( {11604012,1576,40,16,1,1,0.775,-2.80265 } ); +cells.push_back( {11604022,1596,40,16,2,1,0.775,-2.85221 } ); +cells.push_back( {11704012,1577,40,17,1,1,0.825,-2.80265 } ); +cells.push_back( {11704022,1597,40,17,2,1,0.825,-2.85221 } ); +cells.push_back( {11804012,1578,40,18,1,1,0.875,-2.80265 } ); +cells.push_back( {11804022,1598,40,18,2,1,0.875,-2.85221 } ); +cells.push_back( {11904012,1579,40,19,1,1,0.925,-2.80265 } ); +cells.push_back( {11904022,1599,40,19,2,1,0.925,-2.85221 } ); +cells.push_back( {12004012,1580,40,20,1,1,0.967,-2.80265 } ); +cells.push_back( {12004022,1600,40,20,2,1,0.967,-2.85221 } ); +cells.push_back( {10104111,1601,41,1,1,2,0.02675,-2.90737 } ); +cells.push_back( {10104121,1621,41,1,2,2,0.02675,-2.95693 } ); +cells.push_back( {10204111,1602,41,2,1,2,0.075,-2.90737 } ); +cells.push_back( {10204121,1622,41,2,2,2,0.075,-2.95693 } ); +cells.push_back( {10304111,1603,41,3,1,2,0.125,-2.90737 } ); +cells.push_back( {10304121,1623,41,3,2,2,0.125,-2.95693 } ); +cells.push_back( {10404111,1604,41,4,1,2,0.175,-2.90737 } ); +cells.push_back( {10404121,1624,41,4,2,2,0.175,-2.95693 } ); +cells.push_back( {10504111,1605,41,5,1,2,0.225,-2.90737 } ); +cells.push_back( {10504121,1625,41,5,2,2,0.225,-2.95693 } ); +cells.push_back( {10604111,1606,41,6,1,2,0.275,-2.90737 } ); +cells.push_back( {10604121,1626,41,6,2,2,0.275,-2.95693 } ); +cells.push_back( {10704111,1607,41,7,1,2,0.325,-2.90737 } ); +cells.push_back( {10704121,1627,41,7,2,2,0.325,-2.95693 } ); +cells.push_back( {10804111,1608,41,8,1,2,0.375,-2.90737 } ); +cells.push_back( {10804121,1628,41,8,2,2,0.375,-2.95693 } ); +cells.push_back( {10904111,1609,41,9,1,2,0.425,-2.90737 } ); +cells.push_back( {10904121,1629,41,9,2,2,0.425,-2.95693 } ); +cells.push_back( {11004111,1610,41,10,1,2,0.475,-2.90737 } ); +cells.push_back( {11004121,1630,41,10,2,2,0.475,-2.95693 } ); +cells.push_back( {11104111,1611,41,11,1,2,0.525,-2.90737 } ); +cells.push_back( {11104121,1631,41,11,2,2,0.525,-2.95693 } ); +cells.push_back( {11204111,1612,41,12,1,2,0.575,-2.90737 } ); +cells.push_back( {11204121,1632,41,12,2,2,0.575,-2.95693 } ); +cells.push_back( {11304111,1613,41,13,1,2,0.625,-2.90737 } ); +cells.push_back( {11304121,1633,41,13,2,2,0.625,-2.95693 } ); +cells.push_back( {11404111,1614,41,14,1,2,0.675,-2.90737 } ); +cells.push_back( {11404121,1634,41,14,2,2,0.675,-2.95693 } ); +cells.push_back( {11504111,1615,41,15,1,2,0.725,-2.90737 } ); +cells.push_back( {11504121,1635,41,15,2,2,0.725,-2.95693 } ); +cells.push_back( {11604111,1616,41,16,1,2,0.775,-2.90737 } ); +cells.push_back( {11604121,1636,41,16,2,2,0.775,-2.95693 } ); +cells.push_back( {11704111,1617,41,17,1,2,0.825,-2.90737 } ); +cells.push_back( {11704121,1637,41,17,2,2,0.825,-2.95693 } ); +cells.push_back( {11804111,1618,41,18,1,2,0.875,-2.90737 } ); +cells.push_back( {11804121,1638,41,18,2,2,0.875,-2.95693 } ); +cells.push_back( {11904111,1619,41,19,1,2,0.925,-2.90737 } ); +cells.push_back( {11904121,1639,41,19,2,2,0.925,-2.95693 } ); +cells.push_back( {12004111,1620,41,20,1,2,0.967,-2.90737 } ); +cells.push_back( {12004121,1640,41,20,2,2,0.967,-2.95693 } ); +cells.push_back( {10104112,1601,41,1,1,1,0.02675,-2.90737 } ); +cells.push_back( {10104122,1621,41,1,2,1,0.02675,-2.95693 } ); +cells.push_back( {10204112,1602,41,2,1,1,0.075,-2.90737 } ); +cells.push_back( {10204122,1622,41,2,2,1,0.075,-2.95693 } ); +cells.push_back( {10304112,1603,41,3,1,1,0.125,-2.90737 } ); +cells.push_back( {10304122,1623,41,3,2,1,0.125,-2.95693 } ); +cells.push_back( {10404112,1604,41,4,1,1,0.175,-2.90737 } ); +cells.push_back( {10404122,1624,41,4,2,1,0.175,-2.95693 } ); +cells.push_back( {10504112,1605,41,5,1,1,0.225,-2.90737 } ); +cells.push_back( {10504122,1625,41,5,2,1,0.225,-2.95693 } ); +cells.push_back( {10604112,1606,41,6,1,1,0.275,-2.90737 } ); +cells.push_back( {10604122,1626,41,6,2,1,0.275,-2.95693 } ); +cells.push_back( {10704112,1607,41,7,1,1,0.325,-2.90737 } ); +cells.push_back( {10704122,1627,41,7,2,1,0.325,-2.95693 } ); +cells.push_back( {10804112,1608,41,8,1,1,0.375,-2.90737 } ); +cells.push_back( {10804122,1628,41,8,2,1,0.375,-2.95693 } ); +cells.push_back( {10904112,1609,41,9,1,1,0.425,-2.90737 } ); +cells.push_back( {10904122,1629,41,9,2,1,0.425,-2.95693 } ); +cells.push_back( {11004112,1610,41,10,1,1,0.475,-2.90737 } ); +cells.push_back( {11004122,1630,41,10,2,1,0.475,-2.95693 } ); +cells.push_back( {11104112,1611,41,11,1,1,0.525,-2.90737 } ); +cells.push_back( {11104122,1631,41,11,2,1,0.525,-2.95693 } ); +cells.push_back( {11204112,1612,41,12,1,1,0.575,-2.90737 } ); +cells.push_back( {11204122,1632,41,12,2,1,0.575,-2.95693 } ); +cells.push_back( {11304112,1613,41,13,1,1,0.625,-2.90737 } ); +cells.push_back( {11304122,1633,41,13,2,1,0.625,-2.95693 } ); +cells.push_back( {11404112,1614,41,14,1,1,0.675,-2.90737 } ); +cells.push_back( {11404122,1634,41,14,2,1,0.675,-2.95693 } ); +cells.push_back( {11504112,1615,41,15,1,1,0.725,-2.90737 } ); +cells.push_back( {11504122,1635,41,15,2,1,0.725,-2.95693 } ); +cells.push_back( {11604112,1616,41,16,1,1,0.775,-2.90737 } ); +cells.push_back( {11604122,1636,41,16,2,1,0.775,-2.95693 } ); +cells.push_back( {11704112,1617,41,17,1,1,0.825,-2.90737 } ); +cells.push_back( {11704122,1637,41,17,2,1,0.825,-2.95693 } ); +cells.push_back( {11804112,1618,41,18,1,1,0.875,-2.90737 } ); +cells.push_back( {11804122,1638,41,18,2,1,0.875,-2.95693 } ); +cells.push_back( {11904112,1619,41,19,1,1,0.925,-2.90737 } ); +cells.push_back( {11904122,1639,41,19,2,1,0.925,-2.95693 } ); +cells.push_back( {12004112,1620,41,20,1,1,0.967,-2.90737 } ); +cells.push_back( {12004122,1640,41,20,2,1,0.967,-2.95693 } ); +cells.push_back( {10104211,1641,42,1,1,2,0.02675,-3.01209 } ); +cells.push_back( {10104221,1661,42,1,2,2,0.02675,-3.06165 } ); +cells.push_back( {10204211,1642,42,2,1,2,0.075,-3.01209 } ); +cells.push_back( {10204221,1662,42,2,2,2,0.075,-3.06165 } ); +cells.push_back( {10304211,1643,42,3,1,2,0.125,-3.01209 } ); +cells.push_back( {10304221,1663,42,3,2,2,0.125,-3.06165 } ); +cells.push_back( {10404211,1644,42,4,1,2,0.175,-3.01209 } ); +cells.push_back( {10404221,1664,42,4,2,2,0.175,-3.06165 } ); +cells.push_back( {10504211,1645,42,5,1,2,0.225,-3.01209 } ); +cells.push_back( {10504221,1665,42,5,2,2,0.225,-3.06165 } ); +cells.push_back( {10604211,1646,42,6,1,2,0.275,-3.01209 } ); +cells.push_back( {10604221,1666,42,6,2,2,0.275,-3.06165 } ); +cells.push_back( {10704211,1647,42,7,1,2,0.325,-3.01209 } ); +cells.push_back( {10704221,1667,42,7,2,2,0.325,-3.06165 } ); +cells.push_back( {10804211,1648,42,8,1,2,0.375,-3.01209 } ); +cells.push_back( {10804221,1668,42,8,2,2,0.375,-3.06165 } ); +cells.push_back( {10904211,1649,42,9,1,2,0.425,-3.01209 } ); +cells.push_back( {10904221,1669,42,9,2,2,0.425,-3.06165 } ); +cells.push_back( {11004211,1650,42,10,1,2,0.475,-3.01209 } ); +cells.push_back( {11004221,1670,42,10,2,2,0.475,-3.06165 } ); +cells.push_back( {11104211,1651,42,11,1,2,0.525,-3.01209 } ); +cells.push_back( {11104221,1671,42,11,2,2,0.525,-3.06165 } ); +cells.push_back( {11204211,1652,42,12,1,2,0.575,-3.01209 } ); +cells.push_back( {11204221,1672,42,12,2,2,0.575,-3.06165 } ); +cells.push_back( {11304211,1653,42,13,1,2,0.625,-3.01209 } ); +cells.push_back( {11304221,1673,42,13,2,2,0.625,-3.06165 } ); +cells.push_back( {11404211,1654,42,14,1,2,0.675,-3.01209 } ); +cells.push_back( {11404221,1674,42,14,2,2,0.675,-3.06165 } ); +cells.push_back( {11504211,1655,42,15,1,2,0.725,-3.01209 } ); +cells.push_back( {11504221,1675,42,15,2,2,0.725,-3.06165 } ); +cells.push_back( {11604211,1656,42,16,1,2,0.775,-3.01209 } ); +cells.push_back( {11604221,1676,42,16,2,2,0.775,-3.06165 } ); +cells.push_back( {11704211,1657,42,17,1,2,0.825,-3.01209 } ); +cells.push_back( {11704221,1677,42,17,2,2,0.825,-3.06165 } ); +cells.push_back( {11804211,1658,42,18,1,2,0.875,-3.01209 } ); +cells.push_back( {11804221,1678,42,18,2,2,0.875,-3.06165 } ); +cells.push_back( {11904211,1659,42,19,1,2,0.925,-3.01209 } ); +cells.push_back( {11904221,1679,42,19,2,2,0.925,-3.06165 } ); +cells.push_back( {12004211,1660,42,20,1,2,0.967,-3.01209 } ); +cells.push_back( {12004221,1680,42,20,2,2,0.967,-3.06165 } ); +cells.push_back( {10104212,1641,42,1,1,1,0.02675,-3.01209 } ); +cells.push_back( {10104222,1661,42,1,2,1,0.02675,-3.06165 } ); +cells.push_back( {10204212,1642,42,2,1,1,0.075,-3.01209 } ); +cells.push_back( {10204222,1662,42,2,2,1,0.075,-3.06165 } ); +cells.push_back( {10304212,1643,42,3,1,1,0.125,-3.01209 } ); +cells.push_back( {10304222,1663,42,3,2,1,0.125,-3.06165 } ); +cells.push_back( {10404212,1644,42,4,1,1,0.175,-3.01209 } ); +cells.push_back( {10404222,1664,42,4,2,1,0.175,-3.06165 } ); +cells.push_back( {10504212,1645,42,5,1,1,0.225,-3.01209 } ); +cells.push_back( {10504222,1665,42,5,2,1,0.225,-3.06165 } ); +cells.push_back( {10604212,1646,42,6,1,1,0.275,-3.01209 } ); +cells.push_back( {10604222,1666,42,6,2,1,0.275,-3.06165 } ); +cells.push_back( {10704212,1647,42,7,1,1,0.325,-3.01209 } ); +cells.push_back( {10704222,1667,42,7,2,1,0.325,-3.06165 } ); +cells.push_back( {10804212,1648,42,8,1,1,0.375,-3.01209 } ); +cells.push_back( {10804222,1668,42,8,2,1,0.375,-3.06165 } ); +cells.push_back( {10904212,1649,42,9,1,1,0.425,-3.01209 } ); +cells.push_back( {10904222,1669,42,9,2,1,0.425,-3.06165 } ); +cells.push_back( {11004212,1650,42,10,1,1,0.475,-3.01209 } ); +cells.push_back( {11004222,1670,42,10,2,1,0.475,-3.06165 } ); +cells.push_back( {11104212,1651,42,11,1,1,0.525,-3.01209 } ); +cells.push_back( {11104222,1671,42,11,2,1,0.525,-3.06165 } ); +cells.push_back( {11204212,1652,42,12,1,1,0.575,-3.01209 } ); +cells.push_back( {11204222,1672,42,12,2,1,0.575,-3.06165 } ); +cells.push_back( {11304212,1653,42,13,1,1,0.625,-3.01209 } ); +cells.push_back( {11304222,1673,42,13,2,1,0.625,-3.06165 } ); +cells.push_back( {11404212,1654,42,14,1,1,0.675,-3.01209 } ); +cells.push_back( {11404222,1674,42,14,2,1,0.675,-3.06165 } ); +cells.push_back( {11504212,1655,42,15,1,1,0.725,-3.01209 } ); +cells.push_back( {11504222,1675,42,15,2,1,0.725,-3.06165 } ); +cells.push_back( {11604212,1656,42,16,1,1,0.775,-3.01209 } ); +cells.push_back( {11604222,1676,42,16,2,1,0.775,-3.06165 } ); +cells.push_back( {11704212,1657,42,17,1,1,0.825,-3.01209 } ); +cells.push_back( {11704222,1677,42,17,2,1,0.825,-3.06165 } ); +cells.push_back( {11804212,1658,42,18,1,1,0.875,-3.01209 } ); +cells.push_back( {11804222,1678,42,18,2,1,0.875,-3.06165 } ); +cells.push_back( {11904212,1659,42,19,1,1,0.925,-3.01209 } ); +cells.push_back( {11904222,1679,42,19,2,1,0.925,-3.06165 } ); +cells.push_back( {12004212,1660,42,20,1,1,0.967,-3.01209 } ); +cells.push_back( {12004222,1680,42,20,2,1,0.967,-3.06165 } ); +cells.push_back( {10104311,1681,43,1,1,2,0.02675,-3.11681 } ); +cells.push_back( {10104321,1701,43,1,2,2,0.02675,3.11681 } ); +cells.push_back( {10204311,1682,43,2,1,2,0.075,-3.11681 } ); +cells.push_back( {10204321,1702,43,2,2,2,0.075,3.11681 } ); +cells.push_back( {10304311,1683,43,3,1,2,0.125,-3.11681 } ); +cells.push_back( {10304321,1703,43,3,2,2,0.125,3.11681 } ); +cells.push_back( {10404311,1684,43,4,1,2,0.175,-3.11681 } ); +cells.push_back( {10404321,1704,43,4,2,2,0.175,3.11681 } ); +cells.push_back( {10504311,1685,43,5,1,2,0.225,-3.11681 } ); +cells.push_back( {10504321,1705,43,5,2,2,0.225,3.11681 } ); +cells.push_back( {10604311,1686,43,6,1,2,0.275,-3.11681 } ); +cells.push_back( {10604321,1706,43,6,2,2,0.275,3.11681 } ); +cells.push_back( {10704311,1687,43,7,1,2,0.325,-3.11681 } ); +cells.push_back( {10704321,1707,43,7,2,2,0.325,3.11681 } ); +cells.push_back( {10804311,1688,43,8,1,2,0.375,-3.11681 } ); +cells.push_back( {10804321,1708,43,8,2,2,0.375,3.11681 } ); +cells.push_back( {10904311,1689,43,9,1,2,0.425,-3.11681 } ); +cells.push_back( {10904321,1709,43,9,2,2,0.425,3.11681 } ); +cells.push_back( {11004311,1690,43,10,1,2,0.475,-3.11681 } ); +cells.push_back( {11004321,1710,43,10,2,2,0.475,3.11681 } ); +cells.push_back( {11104311,1691,43,11,1,2,0.525,-3.11681 } ); +cells.push_back( {11104321,1711,43,11,2,2,0.525,3.11681 } ); +cells.push_back( {11204311,1692,43,12,1,2,0.575,-3.11681 } ); +cells.push_back( {11204321,1712,43,12,2,2,0.575,3.11681 } ); +cells.push_back( {11304311,1693,43,13,1,2,0.625,-3.11681 } ); +cells.push_back( {11304321,1713,43,13,2,2,0.625,3.11681 } ); +cells.push_back( {11404311,1694,43,14,1,2,0.675,-3.11681 } ); +cells.push_back( {11404321,1714,43,14,2,2,0.675,3.11681 } ); +cells.push_back( {11504311,1695,43,15,1,2,0.725,-3.11681 } ); +cells.push_back( {11504321,1715,43,15,2,2,0.725,3.11681 } ); +cells.push_back( {11604311,1696,43,16,1,2,0.775,-3.11681 } ); +cells.push_back( {11604321,1716,43,16,2,2,0.775,3.11681 } ); +cells.push_back( {11704311,1697,43,17,1,2,0.825,-3.11681 } ); +cells.push_back( {11704321,1717,43,17,2,2,0.825,3.11681 } ); +cells.push_back( {11804311,1698,43,18,1,2,0.875,-3.11681 } ); +cells.push_back( {11804321,1718,43,18,2,2,0.875,3.11681 } ); +cells.push_back( {11904311,1699,43,19,1,2,0.925,-3.11681 } ); +cells.push_back( {11904321,1719,43,19,2,2,0.925,3.11681 } ); +cells.push_back( {12004311,1700,43,20,1,2,0.967,-3.11681 } ); +cells.push_back( {12004321,1720,43,20,2,2,0.967,3.11681 } ); +cells.push_back( {10104312,1681,43,1,1,1,0.02675,-3.11681 } ); +cells.push_back( {10104322,1701,43,1,2,1,0.02675,3.11681 } ); +cells.push_back( {10204312,1682,43,2,1,1,0.075,-3.11681 } ); +cells.push_back( {10204322,1702,43,2,2,1,0.075,3.11681 } ); +cells.push_back( {10304312,1683,43,3,1,1,0.125,-3.11681 } ); +cells.push_back( {10304322,1703,43,3,2,1,0.125,3.11681 } ); +cells.push_back( {10404312,1684,43,4,1,1,0.175,-3.11681 } ); +cells.push_back( {10404322,1704,43,4,2,1,0.175,3.11681 } ); +cells.push_back( {10504312,1685,43,5,1,1,0.225,-3.11681 } ); +cells.push_back( {10504322,1705,43,5,2,1,0.225,3.11681 } ); +cells.push_back( {10604312,1686,43,6,1,1,0.275,-3.11681 } ); +cells.push_back( {10604322,1706,43,6,2,1,0.275,3.11681 } ); +cells.push_back( {10704312,1687,43,7,1,1,0.325,-3.11681 } ); +cells.push_back( {10704322,1707,43,7,2,1,0.325,3.11681 } ); +cells.push_back( {10804312,1688,43,8,1,1,0.375,-3.11681 } ); +cells.push_back( {10804322,1708,43,8,2,1,0.375,3.11681 } ); +cells.push_back( {10904312,1689,43,9,1,1,0.425,-3.11681 } ); +cells.push_back( {10904322,1709,43,9,2,1,0.425,3.11681 } ); +cells.push_back( {11004312,1690,43,10,1,1,0.475,-3.11681 } ); +cells.push_back( {11004322,1710,43,10,2,1,0.475,3.11681 } ); +cells.push_back( {11104312,1691,43,11,1,1,0.525,-3.11681 } ); +cells.push_back( {11104322,1711,43,11,2,1,0.525,3.11681 } ); +cells.push_back( {11204312,1692,43,12,1,1,0.575,-3.11681 } ); +cells.push_back( {11204322,1712,43,12,2,1,0.575,3.11681 } ); +cells.push_back( {11304312,1693,43,13,1,1,0.625,-3.11681 } ); +cells.push_back( {11304322,1713,43,13,2,1,0.625,3.11681 } ); +cells.push_back( {11404312,1694,43,14,1,1,0.675,-3.11681 } ); +cells.push_back( {11404322,1714,43,14,2,1,0.675,3.11681 } ); +cells.push_back( {11504312,1695,43,15,1,1,0.725,-3.11681 } ); +cells.push_back( {11504322,1715,43,15,2,1,0.725,3.11681 } ); +cells.push_back( {11604312,1696,43,16,1,1,0.775,-3.11681 } ); +cells.push_back( {11604322,1716,43,16,2,1,0.775,3.11681 } ); +cells.push_back( {11704312,1697,43,17,1,1,0.825,-3.11681 } ); +cells.push_back( {11704322,1717,43,17,2,1,0.825,3.11681 } ); +cells.push_back( {11804312,1698,43,18,1,1,0.875,-3.11681 } ); +cells.push_back( {11804322,1718,43,18,2,1,0.875,3.11681 } ); +cells.push_back( {11904312,1699,43,19,1,1,0.925,-3.11681 } ); +cells.push_back( {11904322,1719,43,19,2,1,0.925,3.11681 } ); +cells.push_back( {12004312,1700,43,20,1,1,0.967,-3.11681 } ); +cells.push_back( {12004322,1720,43,20,2,1,0.967,3.11681 } ); +cells.push_back( {10104411,1721,44,1,1,2,0.02675,3.06165 } ); +cells.push_back( {10104421,1741,44,1,2,2,0.02675,3.01209 } ); +cells.push_back( {10204411,1722,44,2,1,2,0.075,3.06165 } ); +cells.push_back( {10204421,1742,44,2,2,2,0.075,3.01209 } ); +cells.push_back( {10304411,1723,44,3,1,2,0.125,3.06165 } ); +cells.push_back( {10304421,1743,44,3,2,2,0.125,3.01209 } ); +cells.push_back( {10404411,1724,44,4,1,2,0.175,3.06165 } ); +cells.push_back( {10404421,1744,44,4,2,2,0.175,3.01209 } ); +cells.push_back( {10504411,1725,44,5,1,2,0.225,3.06165 } ); +cells.push_back( {10504421,1745,44,5,2,2,0.225,3.01209 } ); +cells.push_back( {10604411,1726,44,6,1,2,0.275,3.06165 } ); +cells.push_back( {10604421,1746,44,6,2,2,0.275,3.01209 } ); +cells.push_back( {10704411,1727,44,7,1,2,0.325,3.06165 } ); +cells.push_back( {10704421,1747,44,7,2,2,0.325,3.01209 } ); +cells.push_back( {10804411,1728,44,8,1,2,0.375,3.06165 } ); +cells.push_back( {10804421,1748,44,8,2,2,0.375,3.01209 } ); +cells.push_back( {10904411,1729,44,9,1,2,0.425,3.06165 } ); +cells.push_back( {10904421,1749,44,9,2,2,0.425,3.01209 } ); +cells.push_back( {11004411,1730,44,10,1,2,0.475,3.06165 } ); +cells.push_back( {11004421,1750,44,10,2,2,0.475,3.01209 } ); +cells.push_back( {11104411,1731,44,11,1,2,0.525,3.06165 } ); +cells.push_back( {11104421,1751,44,11,2,2,0.525,3.01209 } ); +cells.push_back( {11204411,1732,44,12,1,2,0.575,3.06165 } ); +cells.push_back( {11204421,1752,44,12,2,2,0.575,3.01209 } ); +cells.push_back( {11304411,1733,44,13,1,2,0.625,3.06165 } ); +cells.push_back( {11304421,1753,44,13,2,2,0.625,3.01209 } ); +cells.push_back( {11404411,1734,44,14,1,2,0.675,3.06165 } ); +cells.push_back( {11404421,1754,44,14,2,2,0.675,3.01209 } ); +cells.push_back( {11504411,1735,44,15,1,2,0.725,3.06165 } ); +cells.push_back( {11504421,1755,44,15,2,2,0.725,3.01209 } ); +cells.push_back( {11604411,1736,44,16,1,2,0.775,3.06165 } ); +cells.push_back( {11604421,1756,44,16,2,2,0.775,3.01209 } ); +cells.push_back( {11704411,1737,44,17,1,2,0.825,3.06165 } ); +cells.push_back( {11704421,1757,44,17,2,2,0.825,3.01209 } ); +cells.push_back( {11804411,1738,44,18,1,2,0.875,3.06165 } ); +cells.push_back( {11804421,1758,44,18,2,2,0.875,3.01209 } ); +cells.push_back( {11904411,1739,44,19,1,2,0.925,3.06165 } ); +cells.push_back( {11904421,1759,44,19,2,2,0.925,3.01209 } ); +cells.push_back( {12004411,1740,44,20,1,2,0.967,3.06165 } ); +cells.push_back( {12004421,1760,44,20,2,2,0.967,3.01209 } ); +cells.push_back( {10104412,1721,44,1,1,1,0.02675,3.06165 } ); +cells.push_back( {10104422,1741,44,1,2,1,0.02675,3.01209 } ); +cells.push_back( {10204412,1722,44,2,1,1,0.075,3.06165 } ); +cells.push_back( {10204422,1742,44,2,2,1,0.075,3.01209 } ); +cells.push_back( {10304412,1723,44,3,1,1,0.125,3.06165 } ); +cells.push_back( {10304422,1743,44,3,2,1,0.125,3.01209 } ); +cells.push_back( {10404412,1724,44,4,1,1,0.175,3.06165 } ); +cells.push_back( {10404422,1744,44,4,2,1,0.175,3.01209 } ); +cells.push_back( {10504412,1725,44,5,1,1,0.225,3.06165 } ); +cells.push_back( {10504422,1745,44,5,2,1,0.225,3.01209 } ); +cells.push_back( {10604412,1726,44,6,1,1,0.275,3.06165 } ); +cells.push_back( {10604422,1746,44,6,2,1,0.275,3.01209 } ); +cells.push_back( {10704412,1727,44,7,1,1,0.325,3.06165 } ); +cells.push_back( {10704422,1747,44,7,2,1,0.325,3.01209 } ); +cells.push_back( {10804412,1728,44,8,1,1,0.375,3.06165 } ); +cells.push_back( {10804422,1748,44,8,2,1,0.375,3.01209 } ); +cells.push_back( {10904412,1729,44,9,1,1,0.425,3.06165 } ); +cells.push_back( {10904422,1749,44,9,2,1,0.425,3.01209 } ); +cells.push_back( {11004412,1730,44,10,1,1,0.475,3.06165 } ); +cells.push_back( {11004422,1750,44,10,2,1,0.475,3.01209 } ); +cells.push_back( {11104412,1731,44,11,1,1,0.525,3.06165 } ); +cells.push_back( {11104422,1751,44,11,2,1,0.525,3.01209 } ); +cells.push_back( {11204412,1732,44,12,1,1,0.575,3.06165 } ); +cells.push_back( {11204422,1752,44,12,2,1,0.575,3.01209 } ); +cells.push_back( {11304412,1733,44,13,1,1,0.625,3.06165 } ); +cells.push_back( {11304422,1753,44,13,2,1,0.625,3.01209 } ); +cells.push_back( {11404412,1734,44,14,1,1,0.675,3.06165 } ); +cells.push_back( {11404422,1754,44,14,2,1,0.675,3.01209 } ); +cells.push_back( {11504412,1735,44,15,1,1,0.725,3.06165 } ); +cells.push_back( {11504422,1755,44,15,2,1,0.725,3.01209 } ); +cells.push_back( {11604412,1736,44,16,1,1,0.775,3.06165 } ); +cells.push_back( {11604422,1756,44,16,2,1,0.775,3.01209 } ); +cells.push_back( {11704412,1737,44,17,1,1,0.825,3.06165 } ); +cells.push_back( {11704422,1757,44,17,2,1,0.825,3.01209 } ); +cells.push_back( {11804412,1738,44,18,1,1,0.875,3.06165 } ); +cells.push_back( {11804422,1758,44,18,2,1,0.875,3.01209 } ); +cells.push_back( {11904412,1739,44,19,1,1,0.925,3.06165 } ); +cells.push_back( {11904422,1759,44,19,2,1,0.925,3.01209 } ); +cells.push_back( {12004412,1740,44,20,1,1,0.967,3.06165 } ); +cells.push_back( {12004422,1760,44,20,2,1,0.967,3.01209 } ); +cells.push_back( {10104511,1761,45,1,1,2,0.02675,2.95693 } ); +cells.push_back( {10104521,1781,45,1,2,2,0.02675,2.90737 } ); +cells.push_back( {10204511,1762,45,2,1,2,0.075,2.95693 } ); +cells.push_back( {10204521,1782,45,2,2,2,0.075,2.90737 } ); +cells.push_back( {10304511,1763,45,3,1,2,0.125,2.95693 } ); +cells.push_back( {10304521,1783,45,3,2,2,0.125,2.90737 } ); +cells.push_back( {10404511,1764,45,4,1,2,0.175,2.95693 } ); +cells.push_back( {10404521,1784,45,4,2,2,0.175,2.90737 } ); +cells.push_back( {10504511,1765,45,5,1,2,0.225,2.95693 } ); +cells.push_back( {10504521,1785,45,5,2,2,0.225,2.90737 } ); +cells.push_back( {10604511,1766,45,6,1,2,0.275,2.95693 } ); +cells.push_back( {10604521,1786,45,6,2,2,0.275,2.90737 } ); +cells.push_back( {10704511,1767,45,7,1,2,0.325,2.95693 } ); +cells.push_back( {10704521,1787,45,7,2,2,0.325,2.90737 } ); +cells.push_back( {10804511,1768,45,8,1,2,0.375,2.95693 } ); +cells.push_back( {10804521,1788,45,8,2,2,0.375,2.90737 } ); +cells.push_back( {10904511,1769,45,9,1,2,0.425,2.95693 } ); +cells.push_back( {10904521,1789,45,9,2,2,0.425,2.90737 } ); +cells.push_back( {11004511,1770,45,10,1,2,0.475,2.95693 } ); +cells.push_back( {11004521,1790,45,10,2,2,0.475,2.90737 } ); +cells.push_back( {11104511,1771,45,11,1,2,0.525,2.95693 } ); +cells.push_back( {11104521,1791,45,11,2,2,0.525,2.90737 } ); +cells.push_back( {11204511,1772,45,12,1,2,0.575,2.95693 } ); +cells.push_back( {11204521,1792,45,12,2,2,0.575,2.90737 } ); +cells.push_back( {11304511,1773,45,13,1,2,0.625,2.95693 } ); +cells.push_back( {11304521,1793,45,13,2,2,0.625,2.90737 } ); +cells.push_back( {11404511,1774,45,14,1,2,0.675,2.95693 } ); +cells.push_back( {11404521,1794,45,14,2,2,0.675,2.90737 } ); +cells.push_back( {11504511,1775,45,15,1,2,0.725,2.95693 } ); +cells.push_back( {11504521,1795,45,15,2,2,0.725,2.90737 } ); +cells.push_back( {11604511,1776,45,16,1,2,0.775,2.95693 } ); +cells.push_back( {11604521,1796,45,16,2,2,0.775,2.90737 } ); +cells.push_back( {11704511,1777,45,17,1,2,0.825,2.95693 } ); +cells.push_back( {11704521,1797,45,17,2,2,0.825,2.90737 } ); +cells.push_back( {11804511,1778,45,18,1,2,0.875,2.95693 } ); +cells.push_back( {11804521,1798,45,18,2,2,0.875,2.90737 } ); +cells.push_back( {11904511,1779,45,19,1,2,0.925,2.95693 } ); +cells.push_back( {11904521,1799,45,19,2,2,0.925,2.90737 } ); +cells.push_back( {12004511,1780,45,20,1,2,0.967,2.95693 } ); +cells.push_back( {12004521,1800,45,20,2,2,0.967,2.90737 } ); +cells.push_back( {10104512,1761,45,1,1,1,0.02675,2.95693 } ); +cells.push_back( {10104522,1781,45,1,2,1,0.02675,2.90737 } ); +cells.push_back( {10204512,1762,45,2,1,1,0.075,2.95693 } ); +cells.push_back( {10204522,1782,45,2,2,1,0.075,2.90737 } ); +cells.push_back( {10304512,1763,45,3,1,1,0.125,2.95693 } ); +cells.push_back( {10304522,1783,45,3,2,1,0.125,2.90737 } ); +cells.push_back( {10404512,1764,45,4,1,1,0.175,2.95693 } ); +cells.push_back( {10404522,1784,45,4,2,1,0.175,2.90737 } ); +cells.push_back( {10504512,1765,45,5,1,1,0.225,2.95693 } ); +cells.push_back( {10504522,1785,45,5,2,1,0.225,2.90737 } ); +cells.push_back( {10604512,1766,45,6,1,1,0.275,2.95693 } ); +cells.push_back( {10604522,1786,45,6,2,1,0.275,2.90737 } ); +cells.push_back( {10704512,1767,45,7,1,1,0.325,2.95693 } ); +cells.push_back( {10704522,1787,45,7,2,1,0.325,2.90737 } ); +cells.push_back( {10804512,1768,45,8,1,1,0.375,2.95693 } ); +cells.push_back( {10804522,1788,45,8,2,1,0.375,2.90737 } ); +cells.push_back( {10904512,1769,45,9,1,1,0.425,2.95693 } ); +cells.push_back( {10904522,1789,45,9,2,1,0.425,2.90737 } ); +cells.push_back( {11004512,1770,45,10,1,1,0.475,2.95693 } ); +cells.push_back( {11004522,1790,45,10,2,1,0.475,2.90737 } ); +cells.push_back( {11104512,1771,45,11,1,1,0.525,2.95693 } ); +cells.push_back( {11104522,1791,45,11,2,1,0.525,2.90737 } ); +cells.push_back( {11204512,1772,45,12,1,1,0.575,2.95693 } ); +cells.push_back( {11204522,1792,45,12,2,1,0.575,2.90737 } ); +cells.push_back( {11304512,1773,45,13,1,1,0.625,2.95693 } ); +cells.push_back( {11304522,1793,45,13,2,1,0.625,2.90737 } ); +cells.push_back( {11404512,1774,45,14,1,1,0.675,2.95693 } ); +cells.push_back( {11404522,1794,45,14,2,1,0.675,2.90737 } ); +cells.push_back( {11504512,1775,45,15,1,1,0.725,2.95693 } ); +cells.push_back( {11504522,1795,45,15,2,1,0.725,2.90737 } ); +cells.push_back( {11604512,1776,45,16,1,1,0.775,2.95693 } ); +cells.push_back( {11604522,1796,45,16,2,1,0.775,2.90737 } ); +cells.push_back( {11704512,1777,45,17,1,1,0.825,2.95693 } ); +cells.push_back( {11704522,1797,45,17,2,1,0.825,2.90737 } ); +cells.push_back( {11804512,1778,45,18,1,1,0.875,2.95693 } ); +cells.push_back( {11804522,1798,45,18,2,1,0.875,2.90737 } ); +cells.push_back( {11904512,1779,45,19,1,1,0.925,2.95693 } ); +cells.push_back( {11904522,1799,45,19,2,1,0.925,2.90737 } ); +cells.push_back( {12004512,1780,45,20,1,1,0.967,2.95693 } ); +cells.push_back( {12004522,1800,45,20,2,1,0.967,2.90737 } ); +cells.push_back( {10104611,1801,46,1,1,2,0.02675,2.85221 } ); +cells.push_back( {10104621,1821,46,1,2,2,0.02675,2.80265 } ); +cells.push_back( {10204611,1802,46,2,1,2,0.075,2.85221 } ); +cells.push_back( {10204621,1822,46,2,2,2,0.075,2.80265 } ); +cells.push_back( {10304611,1803,46,3,1,2,0.125,2.85221 } ); +cells.push_back( {10304621,1823,46,3,2,2,0.125,2.80265 } ); +cells.push_back( {10404611,1804,46,4,1,2,0.175,2.85221 } ); +cells.push_back( {10404621,1824,46,4,2,2,0.175,2.80265 } ); +cells.push_back( {10504611,1805,46,5,1,2,0.225,2.85221 } ); +cells.push_back( {10504621,1825,46,5,2,2,0.225,2.80265 } ); +cells.push_back( {10604611,1806,46,6,1,2,0.275,2.85221 } ); +cells.push_back( {10604621,1826,46,6,2,2,0.275,2.80265 } ); +cells.push_back( {10704611,1807,46,7,1,2,0.325,2.85221 } ); +cells.push_back( {10704621,1827,46,7,2,2,0.325,2.80265 } ); +cells.push_back( {10804611,1808,46,8,1,2,0.375,2.85221 } ); +cells.push_back( {10804621,1828,46,8,2,2,0.375,2.80265 } ); +cells.push_back( {10904611,1809,46,9,1,2,0.425,2.85221 } ); +cells.push_back( {10904621,1829,46,9,2,2,0.425,2.80265 } ); +cells.push_back( {11004611,1810,46,10,1,2,0.475,2.85221 } ); +cells.push_back( {11004621,1830,46,10,2,2,0.475,2.80265 } ); +cells.push_back( {11104611,1811,46,11,1,2,0.525,2.85221 } ); +cells.push_back( {11104621,1831,46,11,2,2,0.525,2.80265 } ); +cells.push_back( {11204611,1812,46,12,1,2,0.575,2.85221 } ); +cells.push_back( {11204621,1832,46,12,2,2,0.575,2.80265 } ); +cells.push_back( {11304611,1813,46,13,1,2,0.625,2.85221 } ); +cells.push_back( {11304621,1833,46,13,2,2,0.625,2.80265 } ); +cells.push_back( {11404611,1814,46,14,1,2,0.675,2.85221 } ); +cells.push_back( {11404621,1834,46,14,2,2,0.675,2.80265 } ); +cells.push_back( {11504611,1815,46,15,1,2,0.725,2.85221 } ); +cells.push_back( {11504621,1835,46,15,2,2,0.725,2.80265 } ); +cells.push_back( {11604611,1816,46,16,1,2,0.775,2.85221 } ); +cells.push_back( {11604621,1836,46,16,2,2,0.775,2.80265 } ); +cells.push_back( {11704611,1817,46,17,1,2,0.825,2.85221 } ); +cells.push_back( {11704621,1837,46,17,2,2,0.825,2.80265 } ); +cells.push_back( {11804611,1818,46,18,1,2,0.875,2.85221 } ); +cells.push_back( {11804621,1838,46,18,2,2,0.875,2.80265 } ); +cells.push_back( {11904611,1819,46,19,1,2,0.925,2.85221 } ); +cells.push_back( {11904621,1839,46,19,2,2,0.925,2.80265 } ); +cells.push_back( {12004611,1820,46,20,1,2,0.967,2.85221 } ); +cells.push_back( {12004621,1840,46,20,2,2,0.967,2.80265 } ); +cells.push_back( {10104612,1801,46,1,1,1,0.02675,2.85221 } ); +cells.push_back( {10104622,1821,46,1,2,1,0.02675,2.80265 } ); +cells.push_back( {10204612,1802,46,2,1,1,0.075,2.85221 } ); +cells.push_back( {10204622,1822,46,2,2,1,0.075,2.80265 } ); +cells.push_back( {10304612,1803,46,3,1,1,0.125,2.85221 } ); +cells.push_back( {10304622,1823,46,3,2,1,0.125,2.80265 } ); +cells.push_back( {10404612,1804,46,4,1,1,0.175,2.85221 } ); +cells.push_back( {10404622,1824,46,4,2,1,0.175,2.80265 } ); +cells.push_back( {10504612,1805,46,5,1,1,0.225,2.85221 } ); +cells.push_back( {10504622,1825,46,5,2,1,0.225,2.80265 } ); +cells.push_back( {10604612,1806,46,6,1,1,0.275,2.85221 } ); +cells.push_back( {10604622,1826,46,6,2,1,0.275,2.80265 } ); +cells.push_back( {10704612,1807,46,7,1,1,0.325,2.85221 } ); +cells.push_back( {10704622,1827,46,7,2,1,0.325,2.80265 } ); +cells.push_back( {10804612,1808,46,8,1,1,0.375,2.85221 } ); +cells.push_back( {10804622,1828,46,8,2,1,0.375,2.80265 } ); +cells.push_back( {10904612,1809,46,9,1,1,0.425,2.85221 } ); +cells.push_back( {10904622,1829,46,9,2,1,0.425,2.80265 } ); +cells.push_back( {11004612,1810,46,10,1,1,0.475,2.85221 } ); +cells.push_back( {11004622,1830,46,10,2,1,0.475,2.80265 } ); +cells.push_back( {11104612,1811,46,11,1,1,0.525,2.85221 } ); +cells.push_back( {11104622,1831,46,11,2,1,0.525,2.80265 } ); +cells.push_back( {11204612,1812,46,12,1,1,0.575,2.85221 } ); +cells.push_back( {11204622,1832,46,12,2,1,0.575,2.80265 } ); +cells.push_back( {11304612,1813,46,13,1,1,0.625,2.85221 } ); +cells.push_back( {11304622,1833,46,13,2,1,0.625,2.80265 } ); +cells.push_back( {11404612,1814,46,14,1,1,0.675,2.85221 } ); +cells.push_back( {11404622,1834,46,14,2,1,0.675,2.80265 } ); +cells.push_back( {11504612,1815,46,15,1,1,0.725,2.85221 } ); +cells.push_back( {11504622,1835,46,15,2,1,0.725,2.80265 } ); +cells.push_back( {11604612,1816,46,16,1,1,0.775,2.85221 } ); +cells.push_back( {11604622,1836,46,16,2,1,0.775,2.80265 } ); +cells.push_back( {11704612,1817,46,17,1,1,0.825,2.85221 } ); +cells.push_back( {11704622,1837,46,17,2,1,0.825,2.80265 } ); +cells.push_back( {11804612,1818,46,18,1,1,0.875,2.85221 } ); +cells.push_back( {11804622,1838,46,18,2,1,0.875,2.80265 } ); +cells.push_back( {11904612,1819,46,19,1,1,0.925,2.85221 } ); +cells.push_back( {11904622,1839,46,19,2,1,0.925,2.80265 } ); +cells.push_back( {12004612,1820,46,20,1,1,0.967,2.85221 } ); +cells.push_back( {12004622,1840,46,20,2,1,0.967,2.80265 } ); +cells.push_back( {10104711,1841,47,1,1,2,0.02675,2.74749 } ); +cells.push_back( {10104721,1861,47,1,2,2,0.02675,2.69793 } ); +cells.push_back( {10204711,1842,47,2,1,2,0.075,2.74749 } ); +cells.push_back( {10204721,1862,47,2,2,2,0.075,2.69793 } ); +cells.push_back( {10304711,1843,47,3,1,2,0.125,2.74749 } ); +cells.push_back( {10304721,1863,47,3,2,2,0.125,2.69793 } ); +cells.push_back( {10404711,1844,47,4,1,2,0.175,2.74749 } ); +cells.push_back( {10404721,1864,47,4,2,2,0.175,2.69793 } ); +cells.push_back( {10504711,1845,47,5,1,2,0.225,2.74749 } ); +cells.push_back( {10504721,1865,47,5,2,2,0.225,2.69793 } ); +cells.push_back( {10604711,1846,47,6,1,2,0.275,2.74749 } ); +cells.push_back( {10604721,1866,47,6,2,2,0.275,2.69793 } ); +cells.push_back( {10704711,1847,47,7,1,2,0.325,2.74749 } ); +cells.push_back( {10704721,1867,47,7,2,2,0.325,2.69793 } ); +cells.push_back( {10804711,1848,47,8,1,2,0.375,2.74749 } ); +cells.push_back( {10804721,1868,47,8,2,2,0.375,2.69793 } ); +cells.push_back( {10904711,1849,47,9,1,2,0.425,2.74749 } ); +cells.push_back( {10904721,1869,47,9,2,2,0.425,2.69793 } ); +cells.push_back( {11004711,1850,47,10,1,2,0.475,2.74749 } ); +cells.push_back( {11004721,1870,47,10,2,2,0.475,2.69793 } ); +cells.push_back( {11104711,1851,47,11,1,2,0.525,2.74749 } ); +cells.push_back( {11104721,1871,47,11,2,2,0.525,2.69793 } ); +cells.push_back( {11204711,1852,47,12,1,2,0.575,2.74749 } ); +cells.push_back( {11204721,1872,47,12,2,2,0.575,2.69793 } ); +cells.push_back( {11304711,1853,47,13,1,2,0.625,2.74749 } ); +cells.push_back( {11304721,1873,47,13,2,2,0.625,2.69793 } ); +cells.push_back( {11404711,1854,47,14,1,2,0.675,2.74749 } ); +cells.push_back( {11404721,1874,47,14,2,2,0.675,2.69793 } ); +cells.push_back( {11504711,1855,47,15,1,2,0.725,2.74749 } ); +cells.push_back( {11504721,1875,47,15,2,2,0.725,2.69793 } ); +cells.push_back( {11604711,1856,47,16,1,2,0.775,2.74749 } ); +cells.push_back( {11604721,1876,47,16,2,2,0.775,2.69793 } ); +cells.push_back( {11704711,1857,47,17,1,2,0.825,2.74749 } ); +cells.push_back( {11704721,1877,47,17,2,2,0.825,2.69793 } ); +cells.push_back( {11804711,1858,47,18,1,2,0.875,2.74749 } ); +cells.push_back( {11804721,1878,47,18,2,2,0.875,2.69793 } ); +cells.push_back( {11904711,1859,47,19,1,2,0.925,2.74749 } ); +cells.push_back( {11904721,1879,47,19,2,2,0.925,2.69793 } ); +cells.push_back( {12004711,1860,47,20,1,2,0.967,2.74749 } ); +cells.push_back( {12004721,1880,47,20,2,2,0.967,2.69793 } ); +cells.push_back( {10104712,1841,47,1,1,1,0.02675,2.74749 } ); +cells.push_back( {10104722,1861,47,1,2,1,0.02675,2.69793 } ); +cells.push_back( {10204712,1842,47,2,1,1,0.075,2.74749 } ); +cells.push_back( {10204722,1862,47,2,2,1,0.075,2.69793 } ); +cells.push_back( {10304712,1843,47,3,1,1,0.125,2.74749 } ); +cells.push_back( {10304722,1863,47,3,2,1,0.125,2.69793 } ); +cells.push_back( {10404712,1844,47,4,1,1,0.175,2.74749 } ); +cells.push_back( {10404722,1864,47,4,2,1,0.175,2.69793 } ); +cells.push_back( {10504712,1845,47,5,1,1,0.225,2.74749 } ); +cells.push_back( {10504722,1865,47,5,2,1,0.225,2.69793 } ); +cells.push_back( {10604712,1846,47,6,1,1,0.275,2.74749 } ); +cells.push_back( {10604722,1866,47,6,2,1,0.275,2.69793 } ); +cells.push_back( {10704712,1847,47,7,1,1,0.325,2.74749 } ); +cells.push_back( {10704722,1867,47,7,2,1,0.325,2.69793 } ); +cells.push_back( {10804712,1848,47,8,1,1,0.375,2.74749 } ); +cells.push_back( {10804722,1868,47,8,2,1,0.375,2.69793 } ); +cells.push_back( {10904712,1849,47,9,1,1,0.425,2.74749 } ); +cells.push_back( {10904722,1869,47,9,2,1,0.425,2.69793 } ); +cells.push_back( {11004712,1850,47,10,1,1,0.475,2.74749 } ); +cells.push_back( {11004722,1870,47,10,2,1,0.475,2.69793 } ); +cells.push_back( {11104712,1851,47,11,1,1,0.525,2.74749 } ); +cells.push_back( {11104722,1871,47,11,2,1,0.525,2.69793 } ); +cells.push_back( {11204712,1852,47,12,1,1,0.575,2.74749 } ); +cells.push_back( {11204722,1872,47,12,2,1,0.575,2.69793 } ); +cells.push_back( {11304712,1853,47,13,1,1,0.625,2.74749 } ); +cells.push_back( {11304722,1873,47,13,2,1,0.625,2.69793 } ); +cells.push_back( {11404712,1854,47,14,1,1,0.675,2.74749 } ); +cells.push_back( {11404722,1874,47,14,2,1,0.675,2.69793 } ); +cells.push_back( {11504712,1855,47,15,1,1,0.725,2.74749 } ); +cells.push_back( {11504722,1875,47,15,2,1,0.725,2.69793 } ); +cells.push_back( {11604712,1856,47,16,1,1,0.775,2.74749 } ); +cells.push_back( {11604722,1876,47,16,2,1,0.775,2.69793 } ); +cells.push_back( {11704712,1857,47,17,1,1,0.825,2.74749 } ); +cells.push_back( {11704722,1877,47,17,2,1,0.825,2.69793 } ); +cells.push_back( {11804712,1858,47,18,1,1,0.875,2.74749 } ); +cells.push_back( {11804722,1878,47,18,2,1,0.875,2.69793 } ); +cells.push_back( {11904712,1859,47,19,1,1,0.925,2.74749 } ); +cells.push_back( {11904722,1879,47,19,2,1,0.925,2.69793 } ); +cells.push_back( {12004712,1860,47,20,1,1,0.967,2.74749 } ); +cells.push_back( {12004722,1880,47,20,2,1,0.967,2.69793 } ); +cells.push_back( {10104811,1881,48,1,1,2,0.02675,2.64278 } ); +cells.push_back( {10104821,1901,48,1,2,2,0.02675,2.59321 } ); +cells.push_back( {10204811,1882,48,2,1,2,0.075,2.64278 } ); +cells.push_back( {10204821,1902,48,2,2,2,0.075,2.59321 } ); +cells.push_back( {10304811,1883,48,3,1,2,0.125,2.64278 } ); +cells.push_back( {10304821,1903,48,3,2,2,0.125,2.59321 } ); +cells.push_back( {10404811,1884,48,4,1,2,0.175,2.64278 } ); +cells.push_back( {10404821,1904,48,4,2,2,0.175,2.59321 } ); +cells.push_back( {10504811,1885,48,5,1,2,0.225,2.64278 } ); +cells.push_back( {10504821,1905,48,5,2,2,0.225,2.59321 } ); +cells.push_back( {10604811,1886,48,6,1,2,0.275,2.64278 } ); +cells.push_back( {10604821,1906,48,6,2,2,0.275,2.59321 } ); +cells.push_back( {10704811,1887,48,7,1,2,0.325,2.64278 } ); +cells.push_back( {10704821,1907,48,7,2,2,0.325,2.59321 } ); +cells.push_back( {10804811,1888,48,8,1,2,0.375,2.64278 } ); +cells.push_back( {10804821,1908,48,8,2,2,0.375,2.59321 } ); +cells.push_back( {10904811,1889,48,9,1,2,0.425,2.64278 } ); +cells.push_back( {10904821,1909,48,9,2,2,0.425,2.59321 } ); +cells.push_back( {11004811,1890,48,10,1,2,0.475,2.64278 } ); +cells.push_back( {11004821,1910,48,10,2,2,0.475,2.59321 } ); +cells.push_back( {11104811,1891,48,11,1,2,0.525,2.64278 } ); +cells.push_back( {11104821,1911,48,11,2,2,0.525,2.59321 } ); +cells.push_back( {11204811,1892,48,12,1,2,0.575,2.64278 } ); +cells.push_back( {11204821,1912,48,12,2,2,0.575,2.59321 } ); +cells.push_back( {11304811,1893,48,13,1,2,0.625,2.64278 } ); +cells.push_back( {11304821,1913,48,13,2,2,0.625,2.59321 } ); +cells.push_back( {11404811,1894,48,14,1,2,0.675,2.64278 } ); +cells.push_back( {11404821,1914,48,14,2,2,0.675,2.59321 } ); +cells.push_back( {11504811,1895,48,15,1,2,0.725,2.64278 } ); +cells.push_back( {11504821,1915,48,15,2,2,0.725,2.59321 } ); +cells.push_back( {11604811,1896,48,16,1,2,0.775,2.64278 } ); +cells.push_back( {11604821,1916,48,16,2,2,0.775,2.59321 } ); +cells.push_back( {11704811,1897,48,17,1,2,0.825,2.64278 } ); +cells.push_back( {11704821,1917,48,17,2,2,0.825,2.59321 } ); +cells.push_back( {11804811,1898,48,18,1,2,0.875,2.64278 } ); +cells.push_back( {11804821,1918,48,18,2,2,0.875,2.59321 } ); +cells.push_back( {11904811,1899,48,19,1,2,0.925,2.64278 } ); +cells.push_back( {11904821,1919,48,19,2,2,0.925,2.59321 } ); +cells.push_back( {12004811,1900,48,20,1,2,0.967,2.64278 } ); +cells.push_back( {12004821,1920,48,20,2,2,0.967,2.59321 } ); +cells.push_back( {10104812,1881,48,1,1,1,0.02675,2.64278 } ); +cells.push_back( {10104822,1901,48,1,2,1,0.02675,2.59321 } ); +cells.push_back( {10204812,1882,48,2,1,1,0.075,2.64278 } ); +cells.push_back( {10204822,1902,48,2,2,1,0.075,2.59321 } ); +cells.push_back( {10304812,1883,48,3,1,1,0.125,2.64278 } ); +cells.push_back( {10304822,1903,48,3,2,1,0.125,2.59321 } ); +cells.push_back( {10404812,1884,48,4,1,1,0.175,2.64278 } ); +cells.push_back( {10404822,1904,48,4,2,1,0.175,2.59321 } ); +cells.push_back( {10504812,1885,48,5,1,1,0.225,2.64278 } ); +cells.push_back( {10504822,1905,48,5,2,1,0.225,2.59321 } ); +cells.push_back( {10604812,1886,48,6,1,1,0.275,2.64278 } ); +cells.push_back( {10604822,1906,48,6,2,1,0.275,2.59321 } ); +cells.push_back( {10704812,1887,48,7,1,1,0.325,2.64278 } ); +cells.push_back( {10704822,1907,48,7,2,1,0.325,2.59321 } ); +cells.push_back( {10804812,1888,48,8,1,1,0.375,2.64278 } ); +cells.push_back( {10804822,1908,48,8,2,1,0.375,2.59321 } ); +cells.push_back( {10904812,1889,48,9,1,1,0.425,2.64278 } ); +cells.push_back( {10904822,1909,48,9,2,1,0.425,2.59321 } ); +cells.push_back( {11004812,1890,48,10,1,1,0.475,2.64278 } ); +cells.push_back( {11004822,1910,48,10,2,1,0.475,2.59321 } ); +cells.push_back( {11104812,1891,48,11,1,1,0.525,2.64278 } ); +cells.push_back( {11104822,1911,48,11,2,1,0.525,2.59321 } ); +cells.push_back( {11204812,1892,48,12,1,1,0.575,2.64278 } ); +cells.push_back( {11204822,1912,48,12,2,1,0.575,2.59321 } ); +cells.push_back( {11304812,1893,48,13,1,1,0.625,2.64278 } ); +cells.push_back( {11304822,1913,48,13,2,1,0.625,2.59321 } ); +cells.push_back( {11404812,1894,48,14,1,1,0.675,2.64278 } ); +cells.push_back( {11404822,1914,48,14,2,1,0.675,2.59321 } ); +cells.push_back( {11504812,1895,48,15,1,1,0.725,2.64278 } ); +cells.push_back( {11504822,1915,48,15,2,1,0.725,2.59321 } ); +cells.push_back( {11604812,1896,48,16,1,1,0.775,2.64278 } ); +cells.push_back( {11604822,1916,48,16,2,1,0.775,2.59321 } ); +cells.push_back( {11704812,1897,48,17,1,1,0.825,2.64278 } ); +cells.push_back( {11704822,1917,48,17,2,1,0.825,2.59321 } ); +cells.push_back( {11804812,1898,48,18,1,1,0.875,2.64278 } ); +cells.push_back( {11804822,1918,48,18,2,1,0.875,2.59321 } ); +cells.push_back( {11904812,1899,48,19,1,1,0.925,2.64278 } ); +cells.push_back( {11904822,1919,48,19,2,1,0.925,2.59321 } ); +cells.push_back( {12004812,1900,48,20,1,1,0.967,2.64278 } ); +cells.push_back( {12004822,1920,48,20,2,1,0.967,2.59321 } ); +cells.push_back( {10104911,1921,49,1,1,2,0.02675,2.53806 } ); +cells.push_back( {10104921,1941,49,1,2,2,0.02675,2.48849 } ); +cells.push_back( {10204911,1922,49,2,1,2,0.075,2.53806 } ); +cells.push_back( {10204921,1942,49,2,2,2,0.075,2.48849 } ); +cells.push_back( {10304911,1923,49,3,1,2,0.125,2.53806 } ); +cells.push_back( {10304921,1943,49,3,2,2,0.125,2.48849 } ); +cells.push_back( {10404911,1924,49,4,1,2,0.175,2.53806 } ); +cells.push_back( {10404921,1944,49,4,2,2,0.175,2.48849 } ); +cells.push_back( {10504911,1925,49,5,1,2,0.225,2.53806 } ); +cells.push_back( {10504921,1945,49,5,2,2,0.225,2.48849 } ); +cells.push_back( {10604911,1926,49,6,1,2,0.275,2.53806 } ); +cells.push_back( {10604921,1946,49,6,2,2,0.275,2.48849 } ); +cells.push_back( {10704911,1927,49,7,1,2,0.325,2.53806 } ); +cells.push_back( {10704921,1947,49,7,2,2,0.325,2.48849 } ); +cells.push_back( {10804911,1928,49,8,1,2,0.375,2.53806 } ); +cells.push_back( {10804921,1948,49,8,2,2,0.375,2.48849 } ); +cells.push_back( {10904911,1929,49,9,1,2,0.425,2.53806 } ); +cells.push_back( {10904921,1949,49,9,2,2,0.425,2.48849 } ); +cells.push_back( {11004911,1930,49,10,1,2,0.475,2.53806 } ); +cells.push_back( {11004921,1950,49,10,2,2,0.475,2.48849 } ); +cells.push_back( {11104911,1931,49,11,1,2,0.525,2.53806 } ); +cells.push_back( {11104921,1951,49,11,2,2,0.525,2.48849 } ); +cells.push_back( {11204911,1932,49,12,1,2,0.575,2.53806 } ); +cells.push_back( {11204921,1952,49,12,2,2,0.575,2.48849 } ); +cells.push_back( {11304911,1933,49,13,1,2,0.625,2.53806 } ); +cells.push_back( {11304921,1953,49,13,2,2,0.625,2.48849 } ); +cells.push_back( {11404911,1934,49,14,1,2,0.675,2.53806 } ); +cells.push_back( {11404921,1954,49,14,2,2,0.675,2.48849 } ); +cells.push_back( {11504911,1935,49,15,1,2,0.725,2.53806 } ); +cells.push_back( {11504921,1955,49,15,2,2,0.725,2.48849 } ); +cells.push_back( {11604911,1936,49,16,1,2,0.775,2.53806 } ); +cells.push_back( {11604921,1956,49,16,2,2,0.775,2.48849 } ); +cells.push_back( {11704911,1937,49,17,1,2,0.825,2.53806 } ); +cells.push_back( {11704921,1957,49,17,2,2,0.825,2.48849 } ); +cells.push_back( {11804911,1938,49,18,1,2,0.875,2.53806 } ); +cells.push_back( {11804921,1958,49,18,2,2,0.875,2.48849 } ); +cells.push_back( {11904911,1939,49,19,1,2,0.925,2.53806 } ); +cells.push_back( {11904921,1959,49,19,2,2,0.925,2.48849 } ); +cells.push_back( {12004911,1940,49,20,1,2,0.967,2.53806 } ); +cells.push_back( {12004921,1960,49,20,2,2,0.967,2.48849 } ); +cells.push_back( {10104912,1921,49,1,1,1,0.02675,2.53806 } ); +cells.push_back( {10104922,1941,49,1,2,1,0.02675,2.48849 } ); +cells.push_back( {10204912,1922,49,2,1,1,0.075,2.53806 } ); +cells.push_back( {10204922,1942,49,2,2,1,0.075,2.48849 } ); +cells.push_back( {10304912,1923,49,3,1,1,0.125,2.53806 } ); +cells.push_back( {10304922,1943,49,3,2,1,0.125,2.48849 } ); +cells.push_back( {10404912,1924,49,4,1,1,0.175,2.53806 } ); +cells.push_back( {10404922,1944,49,4,2,1,0.175,2.48849 } ); +cells.push_back( {10504912,1925,49,5,1,1,0.225,2.53806 } ); +cells.push_back( {10504922,1945,49,5,2,1,0.225,2.48849 } ); +cells.push_back( {10604912,1926,49,6,1,1,0.275,2.53806 } ); +cells.push_back( {10604922,1946,49,6,2,1,0.275,2.48849 } ); +cells.push_back( {10704912,1927,49,7,1,1,0.325,2.53806 } ); +cells.push_back( {10704922,1947,49,7,2,1,0.325,2.48849 } ); +cells.push_back( {10804912,1928,49,8,1,1,0.375,2.53806 } ); +cells.push_back( {10804922,1948,49,8,2,1,0.375,2.48849 } ); +cells.push_back( {10904912,1929,49,9,1,1,0.425,2.53806 } ); +cells.push_back( {10904922,1949,49,9,2,1,0.425,2.48849 } ); +cells.push_back( {11004912,1930,49,10,1,1,0.475,2.53806 } ); +cells.push_back( {11004922,1950,49,10,2,1,0.475,2.48849 } ); +cells.push_back( {11104912,1931,49,11,1,1,0.525,2.53806 } ); +cells.push_back( {11104922,1951,49,11,2,1,0.525,2.48849 } ); +cells.push_back( {11204912,1932,49,12,1,1,0.575,2.53806 } ); +cells.push_back( {11204922,1952,49,12,2,1,0.575,2.48849 } ); +cells.push_back( {11304912,1933,49,13,1,1,0.625,2.53806 } ); +cells.push_back( {11304922,1953,49,13,2,1,0.625,2.48849 } ); +cells.push_back( {11404912,1934,49,14,1,1,0.675,2.53806 } ); +cells.push_back( {11404922,1954,49,14,2,1,0.675,2.48849 } ); +cells.push_back( {11504912,1935,49,15,1,1,0.725,2.53806 } ); +cells.push_back( {11504922,1955,49,15,2,1,0.725,2.48849 } ); +cells.push_back( {11604912,1936,49,16,1,1,0.775,2.53806 } ); +cells.push_back( {11604922,1956,49,16,2,1,0.775,2.48849 } ); +cells.push_back( {11704912,1937,49,17,1,1,0.825,2.53806 } ); +cells.push_back( {11704922,1957,49,17,2,1,0.825,2.48849 } ); +cells.push_back( {11804912,1938,49,18,1,1,0.875,2.53806 } ); +cells.push_back( {11804922,1958,49,18,2,1,0.875,2.48849 } ); +cells.push_back( {11904912,1939,49,19,1,1,0.925,2.53806 } ); +cells.push_back( {11904922,1959,49,19,2,1,0.925,2.48849 } ); +cells.push_back( {12004912,1940,49,20,1,1,0.967,2.53806 } ); +cells.push_back( {12004922,1960,49,20,2,1,0.967,2.48849 } ); +cells.push_back( {10105011,1961,50,1,1,2,0.02675,2.43334 } ); +cells.push_back( {10105021,1981,50,1,2,2,0.02675,2.38377 } ); +cells.push_back( {10205011,1962,50,2,1,2,0.075,2.43334 } ); +cells.push_back( {10205021,1982,50,2,2,2,0.075,2.38377 } ); +cells.push_back( {10305011,1963,50,3,1,2,0.125,2.43334 } ); +cells.push_back( {10305021,1983,50,3,2,2,0.125,2.38377 } ); +cells.push_back( {10405011,1964,50,4,1,2,0.175,2.43334 } ); +cells.push_back( {10405021,1984,50,4,2,2,0.175,2.38377 } ); +cells.push_back( {10505011,1965,50,5,1,2,0.225,2.43334 } ); +cells.push_back( {10505021,1985,50,5,2,2,0.225,2.38377 } ); +cells.push_back( {10605011,1966,50,6,1,2,0.275,2.43334 } ); +cells.push_back( {10605021,1986,50,6,2,2,0.275,2.38377 } ); +cells.push_back( {10705011,1967,50,7,1,2,0.325,2.43334 } ); +cells.push_back( {10705021,1987,50,7,2,2,0.325,2.38377 } ); +cells.push_back( {10805011,1968,50,8,1,2,0.375,2.43334 } ); +cells.push_back( {10805021,1988,50,8,2,2,0.375,2.38377 } ); +cells.push_back( {10905011,1969,50,9,1,2,0.425,2.43334 } ); +cells.push_back( {10905021,1989,50,9,2,2,0.425,2.38377 } ); +cells.push_back( {11005011,1970,50,10,1,2,0.475,2.43334 } ); +cells.push_back( {11005021,1990,50,10,2,2,0.475,2.38377 } ); +cells.push_back( {11105011,1971,50,11,1,2,0.525,2.43334 } ); +cells.push_back( {11105021,1991,50,11,2,2,0.525,2.38377 } ); +cells.push_back( {11205011,1972,50,12,1,2,0.575,2.43334 } ); +cells.push_back( {11205021,1992,50,12,2,2,0.575,2.38377 } ); +cells.push_back( {11305011,1973,50,13,1,2,0.625,2.43334 } ); +cells.push_back( {11305021,1993,50,13,2,2,0.625,2.38377 } ); +cells.push_back( {11405011,1974,50,14,1,2,0.675,2.43334 } ); +cells.push_back( {11405021,1994,50,14,2,2,0.675,2.38377 } ); +cells.push_back( {11505011,1975,50,15,1,2,0.725,2.43334 } ); +cells.push_back( {11505021,1995,50,15,2,2,0.725,2.38377 } ); +cells.push_back( {11605011,1976,50,16,1,2,0.775,2.43334 } ); +cells.push_back( {11605021,1996,50,16,2,2,0.775,2.38377 } ); +cells.push_back( {11705011,1977,50,17,1,2,0.825,2.43334 } ); +cells.push_back( {11705021,1997,50,17,2,2,0.825,2.38377 } ); +cells.push_back( {11805011,1978,50,18,1,2,0.875,2.43334 } ); +cells.push_back( {11805021,1998,50,18,2,2,0.875,2.38377 } ); +cells.push_back( {11905011,1979,50,19,1,2,0.925,2.43334 } ); +cells.push_back( {11905021,1999,50,19,2,2,0.925,2.38377 } ); +cells.push_back( {12005011,1980,50,20,1,2,0.967,2.43334 } ); +cells.push_back( {12005021,2000,50,20,2,2,0.967,2.38377 } ); +cells.push_back( {10105012,1961,50,1,1,1,0.02675,2.43334 } ); +cells.push_back( {10105022,1981,50,1,2,1,0.02675,2.38377 } ); +cells.push_back( {10205012,1962,50,2,1,1,0.075,2.43334 } ); +cells.push_back( {10205022,1982,50,2,2,1,0.075,2.38377 } ); +cells.push_back( {10305012,1963,50,3,1,1,0.125,2.43334 } ); +cells.push_back( {10305022,1983,50,3,2,1,0.125,2.38377 } ); +cells.push_back( {10405012,1964,50,4,1,1,0.175,2.43334 } ); +cells.push_back( {10405022,1984,50,4,2,1,0.175,2.38377 } ); +cells.push_back( {10505012,1965,50,5,1,1,0.225,2.43334 } ); +cells.push_back( {10505022,1985,50,5,2,1,0.225,2.38377 } ); +cells.push_back( {10605012,1966,50,6,1,1,0.275,2.43334 } ); +cells.push_back( {10605022,1986,50,6,2,1,0.275,2.38377 } ); +cells.push_back( {10705012,1967,50,7,1,1,0.325,2.43334 } ); +cells.push_back( {10705022,1987,50,7,2,1,0.325,2.38377 } ); +cells.push_back( {10805012,1968,50,8,1,1,0.375,2.43334 } ); +cells.push_back( {10805022,1988,50,8,2,1,0.375,2.38377 } ); +cells.push_back( {10905012,1969,50,9,1,1,0.425,2.43334 } ); +cells.push_back( {10905022,1989,50,9,2,1,0.425,2.38377 } ); +cells.push_back( {11005012,1970,50,10,1,1,0.475,2.43334 } ); +cells.push_back( {11005022,1990,50,10,2,1,0.475,2.38377 } ); +cells.push_back( {11105012,1971,50,11,1,1,0.525,2.43334 } ); +cells.push_back( {11105022,1991,50,11,2,1,0.525,2.38377 } ); +cells.push_back( {11205012,1972,50,12,1,1,0.575,2.43334 } ); +cells.push_back( {11205022,1992,50,12,2,1,0.575,2.38377 } ); +cells.push_back( {11305012,1973,50,13,1,1,0.625,2.43334 } ); +cells.push_back( {11305022,1993,50,13,2,1,0.625,2.38377 } ); +cells.push_back( {11405012,1974,50,14,1,1,0.675,2.43334 } ); +cells.push_back( {11405022,1994,50,14,2,1,0.675,2.38377 } ); +cells.push_back( {11505012,1975,50,15,1,1,0.725,2.43334 } ); +cells.push_back( {11505022,1995,50,15,2,1,0.725,2.38377 } ); +cells.push_back( {11605012,1976,50,16,1,1,0.775,2.43334 } ); +cells.push_back( {11605022,1996,50,16,2,1,0.775,2.38377 } ); +cells.push_back( {11705012,1977,50,17,1,1,0.825,2.43334 } ); +cells.push_back( {11705022,1997,50,17,2,1,0.825,2.38377 } ); +cells.push_back( {11805012,1978,50,18,1,1,0.875,2.43334 } ); +cells.push_back( {11805022,1998,50,18,2,1,0.875,2.38377 } ); +cells.push_back( {11905012,1979,50,19,1,1,0.925,2.43334 } ); +cells.push_back( {11905022,1999,50,19,2,1,0.925,2.38377 } ); +cells.push_back( {12005012,1980,50,20,1,1,0.967,2.43334 } ); +cells.push_back( {12005022,2000,50,20,2,1,0.967,2.38377 } ); +cells.push_back( {10105111,2001,51,1,1,2,0.02675,2.32862 } ); +cells.push_back( {10105121,2021,51,1,2,2,0.02675,2.27905 } ); +cells.push_back( {10205111,2002,51,2,1,2,0.075,2.32862 } ); +cells.push_back( {10205121,2022,51,2,2,2,0.075,2.27905 } ); +cells.push_back( {10305111,2003,51,3,1,2,0.125,2.32862 } ); +cells.push_back( {10305121,2023,51,3,2,2,0.125,2.27905 } ); +cells.push_back( {10405111,2004,51,4,1,2,0.175,2.32862 } ); +cells.push_back( {10405121,2024,51,4,2,2,0.175,2.27905 } ); +cells.push_back( {10505111,2005,51,5,1,2,0.225,2.32862 } ); +cells.push_back( {10505121,2025,51,5,2,2,0.225,2.27905 } ); +cells.push_back( {10605111,2006,51,6,1,2,0.275,2.32862 } ); +cells.push_back( {10605121,2026,51,6,2,2,0.275,2.27905 } ); +cells.push_back( {10705111,2007,51,7,1,2,0.325,2.32862 } ); +cells.push_back( {10705121,2027,51,7,2,2,0.325,2.27905 } ); +cells.push_back( {10805111,2008,51,8,1,2,0.375,2.32862 } ); +cells.push_back( {10805121,2028,51,8,2,2,0.375,2.27905 } ); +cells.push_back( {10905111,2009,51,9,1,2,0.425,2.32862 } ); +cells.push_back( {10905121,2029,51,9,2,2,0.425,2.27905 } ); +cells.push_back( {11005111,2010,51,10,1,2,0.475,2.32862 } ); +cells.push_back( {11005121,2030,51,10,2,2,0.475,2.27905 } ); +cells.push_back( {11105111,2011,51,11,1,2,0.525,2.32862 } ); +cells.push_back( {11105121,2031,51,11,2,2,0.525,2.27905 } ); +cells.push_back( {11205111,2012,51,12,1,2,0.575,2.32862 } ); +cells.push_back( {11205121,2032,51,12,2,2,0.575,2.27905 } ); +cells.push_back( {11305111,2013,51,13,1,2,0.625,2.32862 } ); +cells.push_back( {11305121,2033,51,13,2,2,0.625,2.27905 } ); +cells.push_back( {11405111,2014,51,14,1,2,0.675,2.32862 } ); +cells.push_back( {11405121,2034,51,14,2,2,0.675,2.27905 } ); +cells.push_back( {11505111,2015,51,15,1,2,0.725,2.32862 } ); +cells.push_back( {11505121,2035,51,15,2,2,0.725,2.27905 } ); +cells.push_back( {11605111,2016,51,16,1,2,0.775,2.32862 } ); +cells.push_back( {11605121,2036,51,16,2,2,0.775,2.27905 } ); +cells.push_back( {11705111,2017,51,17,1,2,0.825,2.32862 } ); +cells.push_back( {11705121,2037,51,17,2,2,0.825,2.27905 } ); +cells.push_back( {11805111,2018,51,18,1,2,0.875,2.32862 } ); +cells.push_back( {11805121,2038,51,18,2,2,0.875,2.27905 } ); +cells.push_back( {11905111,2019,51,19,1,2,0.925,2.32862 } ); +cells.push_back( {11905121,2039,51,19,2,2,0.925,2.27905 } ); +cells.push_back( {12005111,2020,51,20,1,2,0.967,2.32862 } ); +cells.push_back( {12005121,2040,51,20,2,2,0.967,2.27905 } ); +cells.push_back( {10105112,2001,51,1,1,1,0.02675,2.32862 } ); +cells.push_back( {10105122,2021,51,1,2,1,0.02675,2.27905 } ); +cells.push_back( {10205112,2002,51,2,1,1,0.075,2.32862 } ); +cells.push_back( {10205122,2022,51,2,2,1,0.075,2.27905 } ); +cells.push_back( {10305112,2003,51,3,1,1,0.125,2.32862 } ); +cells.push_back( {10305122,2023,51,3,2,1,0.125,2.27905 } ); +cells.push_back( {10405112,2004,51,4,1,1,0.175,2.32862 } ); +cells.push_back( {10405122,2024,51,4,2,1,0.175,2.27905 } ); +cells.push_back( {10505112,2005,51,5,1,1,0.225,2.32862 } ); +cells.push_back( {10505122,2025,51,5,2,1,0.225,2.27905 } ); +cells.push_back( {10605112,2006,51,6,1,1,0.275,2.32862 } ); +cells.push_back( {10605122,2026,51,6,2,1,0.275,2.27905 } ); +cells.push_back( {10705112,2007,51,7,1,1,0.325,2.32862 } ); +cells.push_back( {10705122,2027,51,7,2,1,0.325,2.27905 } ); +cells.push_back( {10805112,2008,51,8,1,1,0.375,2.32862 } ); +cells.push_back( {10805122,2028,51,8,2,1,0.375,2.27905 } ); +cells.push_back( {10905112,2009,51,9,1,1,0.425,2.32862 } ); +cells.push_back( {10905122,2029,51,9,2,1,0.425,2.27905 } ); +cells.push_back( {11005112,2010,51,10,1,1,0.475,2.32862 } ); +cells.push_back( {11005122,2030,51,10,2,1,0.475,2.27905 } ); +cells.push_back( {11105112,2011,51,11,1,1,0.525,2.32862 } ); +cells.push_back( {11105122,2031,51,11,2,1,0.525,2.27905 } ); +cells.push_back( {11205112,2012,51,12,1,1,0.575,2.32862 } ); +cells.push_back( {11205122,2032,51,12,2,1,0.575,2.27905 } ); +cells.push_back( {11305112,2013,51,13,1,1,0.625,2.32862 } ); +cells.push_back( {11305122,2033,51,13,2,1,0.625,2.27905 } ); +cells.push_back( {11405112,2014,51,14,1,1,0.675,2.32862 } ); +cells.push_back( {11405122,2034,51,14,2,1,0.675,2.27905 } ); +cells.push_back( {11505112,2015,51,15,1,1,0.725,2.32862 } ); +cells.push_back( {11505122,2035,51,15,2,1,0.725,2.27905 } ); +cells.push_back( {11605112,2016,51,16,1,1,0.775,2.32862 } ); +cells.push_back( {11605122,2036,51,16,2,1,0.775,2.27905 } ); +cells.push_back( {11705112,2017,51,17,1,1,0.825,2.32862 } ); +cells.push_back( {11705122,2037,51,17,2,1,0.825,2.27905 } ); +cells.push_back( {11805112,2018,51,18,1,1,0.875,2.32862 } ); +cells.push_back( {11805122,2038,51,18,2,1,0.875,2.27905 } ); +cells.push_back( {11905112,2019,51,19,1,1,0.925,2.32862 } ); +cells.push_back( {11905122,2039,51,19,2,1,0.925,2.27905 } ); +cells.push_back( {12005112,2020,51,20,1,1,0.967,2.32862 } ); +cells.push_back( {12005122,2040,51,20,2,1,0.967,2.27905 } ); +cells.push_back( {10105211,2041,52,1,1,2,0.02675,2.2239 } ); +cells.push_back( {10105221,2061,52,1,2,2,0.02675,2.17433 } ); +cells.push_back( {10205211,2042,52,2,1,2,0.075,2.2239 } ); +cells.push_back( {10205221,2062,52,2,2,2,0.075,2.17433 } ); +cells.push_back( {10305211,2043,52,3,1,2,0.125,2.2239 } ); +cells.push_back( {10305221,2063,52,3,2,2,0.125,2.17433 } ); +cells.push_back( {10405211,2044,52,4,1,2,0.175,2.2239 } ); +cells.push_back( {10405221,2064,52,4,2,2,0.175,2.17433 } ); +cells.push_back( {10505211,2045,52,5,1,2,0.225,2.2239 } ); +cells.push_back( {10505221,2065,52,5,2,2,0.225,2.17433 } ); +cells.push_back( {10605211,2046,52,6,1,2,0.275,2.2239 } ); +cells.push_back( {10605221,2066,52,6,2,2,0.275,2.17433 } ); +cells.push_back( {10705211,2047,52,7,1,2,0.325,2.2239 } ); +cells.push_back( {10705221,2067,52,7,2,2,0.325,2.17433 } ); +cells.push_back( {10805211,2048,52,8,1,2,0.375,2.2239 } ); +cells.push_back( {10805221,2068,52,8,2,2,0.375,2.17433 } ); +cells.push_back( {10905211,2049,52,9,1,2,0.425,2.2239 } ); +cells.push_back( {10905221,2069,52,9,2,2,0.425,2.17433 } ); +cells.push_back( {11005211,2050,52,10,1,2,0.475,2.2239 } ); +cells.push_back( {11005221,2070,52,10,2,2,0.475,2.17433 } ); +cells.push_back( {11105211,2051,52,11,1,2,0.525,2.2239 } ); +cells.push_back( {11105221,2071,52,11,2,2,0.525,2.17433 } ); +cells.push_back( {11205211,2052,52,12,1,2,0.575,2.2239 } ); +cells.push_back( {11205221,2072,52,12,2,2,0.575,2.17433 } ); +cells.push_back( {11305211,2053,52,13,1,2,0.625,2.2239 } ); +cells.push_back( {11305221,2073,52,13,2,2,0.625,2.17433 } ); +cells.push_back( {11405211,2054,52,14,1,2,0.675,2.2239 } ); +cells.push_back( {11405221,2074,52,14,2,2,0.675,2.17433 } ); +cells.push_back( {11505211,2055,52,15,1,2,0.725,2.2239 } ); +cells.push_back( {11505221,2075,52,15,2,2,0.725,2.17433 } ); +cells.push_back( {11605211,2056,52,16,1,2,0.775,2.2239 } ); +cells.push_back( {11605221,2076,52,16,2,2,0.775,2.17433 } ); +cells.push_back( {11705211,2057,52,17,1,2,0.825,2.2239 } ); +cells.push_back( {11705221,2077,52,17,2,2,0.825,2.17433 } ); +cells.push_back( {11805211,2058,52,18,1,2,0.875,2.2239 } ); +cells.push_back( {11805221,2078,52,18,2,2,0.875,2.17433 } ); +cells.push_back( {11905211,2059,52,19,1,2,0.925,2.2239 } ); +cells.push_back( {11905221,2079,52,19,2,2,0.925,2.17433 } ); +cells.push_back( {12005211,2060,52,20,1,2,0.967,2.2239 } ); +cells.push_back( {12005221,2080,52,20,2,2,0.967,2.17433 } ); +cells.push_back( {10105212,2041,52,1,1,1,0.02675,2.2239 } ); +cells.push_back( {10105222,2061,52,1,2,1,0.02675,2.17433 } ); +cells.push_back( {10205212,2042,52,2,1,1,0.075,2.2239 } ); +cells.push_back( {10205222,2062,52,2,2,1,0.075,2.17433 } ); +cells.push_back( {10305212,2043,52,3,1,1,0.125,2.2239 } ); +cells.push_back( {10305222,2063,52,3,2,1,0.125,2.17433 } ); +cells.push_back( {10405212,2044,52,4,1,1,0.175,2.2239 } ); +cells.push_back( {10405222,2064,52,4,2,1,0.175,2.17433 } ); +cells.push_back( {10505212,2045,52,5,1,1,0.225,2.2239 } ); +cells.push_back( {10505222,2065,52,5,2,1,0.225,2.17433 } ); +cells.push_back( {10605212,2046,52,6,1,1,0.275,2.2239 } ); +cells.push_back( {10605222,2066,52,6,2,1,0.275,2.17433 } ); +cells.push_back( {10705212,2047,52,7,1,1,0.325,2.2239 } ); +cells.push_back( {10705222,2067,52,7,2,1,0.325,2.17433 } ); +cells.push_back( {10805212,2048,52,8,1,1,0.375,2.2239 } ); +cells.push_back( {10805222,2068,52,8,2,1,0.375,2.17433 } ); +cells.push_back( {10905212,2049,52,9,1,1,0.425,2.2239 } ); +cells.push_back( {10905222,2069,52,9,2,1,0.425,2.17433 } ); +cells.push_back( {11005212,2050,52,10,1,1,0.475,2.2239 } ); +cells.push_back( {11005222,2070,52,10,2,1,0.475,2.17433 } ); +cells.push_back( {11105212,2051,52,11,1,1,0.525,2.2239 } ); +cells.push_back( {11105222,2071,52,11,2,1,0.525,2.17433 } ); +cells.push_back( {11205212,2052,52,12,1,1,0.575,2.2239 } ); +cells.push_back( {11205222,2072,52,12,2,1,0.575,2.17433 } ); +cells.push_back( {11305212,2053,52,13,1,1,0.625,2.2239 } ); +cells.push_back( {11305222,2073,52,13,2,1,0.625,2.17433 } ); +cells.push_back( {11405212,2054,52,14,1,1,0.675,2.2239 } ); +cells.push_back( {11405222,2074,52,14,2,1,0.675,2.17433 } ); +cells.push_back( {11505212,2055,52,15,1,1,0.725,2.2239 } ); +cells.push_back( {11505222,2075,52,15,2,1,0.725,2.17433 } ); +cells.push_back( {11605212,2056,52,16,1,1,0.775,2.2239 } ); +cells.push_back( {11605222,2076,52,16,2,1,0.775,2.17433 } ); +cells.push_back( {11705212,2057,52,17,1,1,0.825,2.2239 } ); +cells.push_back( {11705222,2077,52,17,2,1,0.825,2.17433 } ); +cells.push_back( {11805212,2058,52,18,1,1,0.875,2.2239 } ); +cells.push_back( {11805222,2078,52,18,2,1,0.875,2.17433 } ); +cells.push_back( {11905212,2059,52,19,1,1,0.925,2.2239 } ); +cells.push_back( {11905222,2079,52,19,2,1,0.925,2.17433 } ); +cells.push_back( {12005212,2060,52,20,1,1,0.967,2.2239 } ); +cells.push_back( {12005222,2080,52,20,2,1,0.967,2.17433 } ); +cells.push_back( {10105311,2081,53,1,1,2,0.02675,2.11918 } ); +cells.push_back( {10105321,2101,53,1,2,2,0.02675,2.06961 } ); +cells.push_back( {10205311,2082,53,2,1,2,0.075,2.11918 } ); +cells.push_back( {10205321,2102,53,2,2,2,0.075,2.06961 } ); +cells.push_back( {10305311,2083,53,3,1,2,0.125,2.11918 } ); +cells.push_back( {10305321,2103,53,3,2,2,0.125,2.06961 } ); +cells.push_back( {10405311,2084,53,4,1,2,0.175,2.11918 } ); +cells.push_back( {10405321,2104,53,4,2,2,0.175,2.06961 } ); +cells.push_back( {10505311,2085,53,5,1,2,0.225,2.11918 } ); +cells.push_back( {10505321,2105,53,5,2,2,0.225,2.06961 } ); +cells.push_back( {10605311,2086,53,6,1,2,0.275,2.11918 } ); +cells.push_back( {10605321,2106,53,6,2,2,0.275,2.06961 } ); +cells.push_back( {10705311,2087,53,7,1,2,0.325,2.11918 } ); +cells.push_back( {10705321,2107,53,7,2,2,0.325,2.06961 } ); +cells.push_back( {10805311,2088,53,8,1,2,0.375,2.11918 } ); +cells.push_back( {10805321,2108,53,8,2,2,0.375,2.06961 } ); +cells.push_back( {10905311,2089,53,9,1,2,0.425,2.11918 } ); +cells.push_back( {10905321,2109,53,9,2,2,0.425,2.06961 } ); +cells.push_back( {11005311,2090,53,10,1,2,0.475,2.11918 } ); +cells.push_back( {11005321,2110,53,10,2,2,0.475,2.06961 } ); +cells.push_back( {11105311,2091,53,11,1,2,0.525,2.11918 } ); +cells.push_back( {11105321,2111,53,11,2,2,0.525,2.06961 } ); +cells.push_back( {11205311,2092,53,12,1,2,0.575,2.11918 } ); +cells.push_back( {11205321,2112,53,12,2,2,0.575,2.06961 } ); +cells.push_back( {11305311,2093,53,13,1,2,0.625,2.11918 } ); +cells.push_back( {11305321,2113,53,13,2,2,0.625,2.06961 } ); +cells.push_back( {11405311,2094,53,14,1,2,0.675,2.11918 } ); +cells.push_back( {11405321,2114,53,14,2,2,0.675,2.06961 } ); +cells.push_back( {11505311,2095,53,15,1,2,0.725,2.11918 } ); +cells.push_back( {11505321,2115,53,15,2,2,0.725,2.06961 } ); +cells.push_back( {11605311,2096,53,16,1,2,0.775,2.11918 } ); +cells.push_back( {11605321,2116,53,16,2,2,0.775,2.06961 } ); +cells.push_back( {11705311,2097,53,17,1,2,0.825,2.11918 } ); +cells.push_back( {11705321,2117,53,17,2,2,0.825,2.06961 } ); +cells.push_back( {11805311,2098,53,18,1,2,0.875,2.11918 } ); +cells.push_back( {11805321,2118,53,18,2,2,0.875,2.06961 } ); +cells.push_back( {11905311,2099,53,19,1,2,0.925,2.11918 } ); +cells.push_back( {11905321,2119,53,19,2,2,0.925,2.06961 } ); +cells.push_back( {12005311,2100,53,20,1,2,0.967,2.11918 } ); +cells.push_back( {12005321,2120,53,20,2,2,0.967,2.06961 } ); +cells.push_back( {10105312,2081,53,1,1,1,0.02675,2.11918 } ); +cells.push_back( {10105322,2101,53,1,2,1,0.02675,2.06961 } ); +cells.push_back( {10205312,2082,53,2,1,1,0.075,2.11918 } ); +cells.push_back( {10205322,2102,53,2,2,1,0.075,2.06961 } ); +cells.push_back( {10305312,2083,53,3,1,1,0.125,2.11918 } ); +cells.push_back( {10305322,2103,53,3,2,1,0.125,2.06961 } ); +cells.push_back( {10405312,2084,53,4,1,1,0.175,2.11918 } ); +cells.push_back( {10405322,2104,53,4,2,1,0.175,2.06961 } ); +cells.push_back( {10505312,2085,53,5,1,1,0.225,2.11918 } ); +cells.push_back( {10505322,2105,53,5,2,1,0.225,2.06961 } ); +cells.push_back( {10605312,2086,53,6,1,1,0.275,2.11918 } ); +cells.push_back( {10605322,2106,53,6,2,1,0.275,2.06961 } ); +cells.push_back( {10705312,2087,53,7,1,1,0.325,2.11918 } ); +cells.push_back( {10705322,2107,53,7,2,1,0.325,2.06961 } ); +cells.push_back( {10805312,2088,53,8,1,1,0.375,2.11918 } ); +cells.push_back( {10805322,2108,53,8,2,1,0.375,2.06961 } ); +cells.push_back( {10905312,2089,53,9,1,1,0.425,2.11918 } ); +cells.push_back( {10905322,2109,53,9,2,1,0.425,2.06961 } ); +cells.push_back( {11005312,2090,53,10,1,1,0.475,2.11918 } ); +cells.push_back( {11005322,2110,53,10,2,1,0.475,2.06961 } ); +cells.push_back( {11105312,2091,53,11,1,1,0.525,2.11918 } ); +cells.push_back( {11105322,2111,53,11,2,1,0.525,2.06961 } ); +cells.push_back( {11205312,2092,53,12,1,1,0.575,2.11918 } ); +cells.push_back( {11205322,2112,53,12,2,1,0.575,2.06961 } ); +cells.push_back( {11305312,2093,53,13,1,1,0.625,2.11918 } ); +cells.push_back( {11305322,2113,53,13,2,1,0.625,2.06961 } ); +cells.push_back( {11405312,2094,53,14,1,1,0.675,2.11918 } ); +cells.push_back( {11405322,2114,53,14,2,1,0.675,2.06961 } ); +cells.push_back( {11505312,2095,53,15,1,1,0.725,2.11918 } ); +cells.push_back( {11505322,2115,53,15,2,1,0.725,2.06961 } ); +cells.push_back( {11605312,2096,53,16,1,1,0.775,2.11918 } ); +cells.push_back( {11605322,2116,53,16,2,1,0.775,2.06961 } ); +cells.push_back( {11705312,2097,53,17,1,1,0.825,2.11918 } ); +cells.push_back( {11705322,2117,53,17,2,1,0.825,2.06961 } ); +cells.push_back( {11805312,2098,53,18,1,1,0.875,2.11918 } ); +cells.push_back( {11805322,2118,53,18,2,1,0.875,2.06961 } ); +cells.push_back( {11905312,2099,53,19,1,1,0.925,2.11918 } ); +cells.push_back( {11905322,2119,53,19,2,1,0.925,2.06961 } ); +cells.push_back( {12005312,2100,53,20,1,1,0.967,2.11918 } ); +cells.push_back( {12005322,2120,53,20,2,1,0.967,2.06961 } ); +cells.push_back( {10105411,2121,54,1,1,2,0.02675,2.01446 } ); +cells.push_back( {10105421,2141,54,1,2,2,0.02675,1.96489 } ); +cells.push_back( {10205411,2122,54,2,1,2,0.075,2.01446 } ); +cells.push_back( {10205421,2142,54,2,2,2,0.075,1.96489 } ); +cells.push_back( {10305411,2123,54,3,1,2,0.125,2.01446 } ); +cells.push_back( {10305421,2143,54,3,2,2,0.125,1.96489 } ); +cells.push_back( {10405411,2124,54,4,1,2,0.175,2.01446 } ); +cells.push_back( {10405421,2144,54,4,2,2,0.175,1.96489 } ); +cells.push_back( {10505411,2125,54,5,1,2,0.225,2.01446 } ); +cells.push_back( {10505421,2145,54,5,2,2,0.225,1.96489 } ); +cells.push_back( {10605411,2126,54,6,1,2,0.275,2.01446 } ); +cells.push_back( {10605421,2146,54,6,2,2,0.275,1.96489 } ); +cells.push_back( {10705411,2127,54,7,1,2,0.325,2.01446 } ); +cells.push_back( {10705421,2147,54,7,2,2,0.325,1.96489 } ); +cells.push_back( {10805411,2128,54,8,1,2,0.375,2.01446 } ); +cells.push_back( {10805421,2148,54,8,2,2,0.375,1.96489 } ); +cells.push_back( {10905411,2129,54,9,1,2,0.425,2.01446 } ); +cells.push_back( {10905421,2149,54,9,2,2,0.425,1.96489 } ); +cells.push_back( {11005411,2130,54,10,1,2,0.475,2.01446 } ); +cells.push_back( {11005421,2150,54,10,2,2,0.475,1.96489 } ); +cells.push_back( {11105411,2131,54,11,1,2,0.525,2.01446 } ); +cells.push_back( {11105421,2151,54,11,2,2,0.525,1.96489 } ); +cells.push_back( {11205411,2132,54,12,1,2,0.575,2.01446 } ); +cells.push_back( {11205421,2152,54,12,2,2,0.575,1.96489 } ); +cells.push_back( {11305411,2133,54,13,1,2,0.625,2.01446 } ); +cells.push_back( {11305421,2153,54,13,2,2,0.625,1.96489 } ); +cells.push_back( {11405411,2134,54,14,1,2,0.675,2.01446 } ); +cells.push_back( {11405421,2154,54,14,2,2,0.675,1.96489 } ); +cells.push_back( {11505411,2135,54,15,1,2,0.725,2.01446 } ); +cells.push_back( {11505421,2155,54,15,2,2,0.725,1.96489 } ); +cells.push_back( {11605411,2136,54,16,1,2,0.775,2.01446 } ); +cells.push_back( {11605421,2156,54,16,2,2,0.775,1.96489 } ); +cells.push_back( {11705411,2137,54,17,1,2,0.825,2.01446 } ); +cells.push_back( {11705421,2157,54,17,2,2,0.825,1.96489 } ); +cells.push_back( {11805411,2138,54,18,1,2,0.875,2.01446 } ); +cells.push_back( {11805421,2158,54,18,2,2,0.875,1.96489 } ); +cells.push_back( {11905411,2139,54,19,1,2,0.925,2.01446 } ); +cells.push_back( {11905421,2159,54,19,2,2,0.925,1.96489 } ); +cells.push_back( {12005411,2140,54,20,1,2,0.967,2.01446 } ); +cells.push_back( {12005421,2160,54,20,2,2,0.967,1.96489 } ); +cells.push_back( {10105412,2121,54,1,1,1,0.02675,2.01446 } ); +cells.push_back( {10105422,2141,54,1,2,1,0.02675,1.96489 } ); +cells.push_back( {10205412,2122,54,2,1,1,0.075,2.01446 } ); +cells.push_back( {10205422,2142,54,2,2,1,0.075,1.96489 } ); +cells.push_back( {10305412,2123,54,3,1,1,0.125,2.01446 } ); +cells.push_back( {10305422,2143,54,3,2,1,0.125,1.96489 } ); +cells.push_back( {10405412,2124,54,4,1,1,0.175,2.01446 } ); +cells.push_back( {10405422,2144,54,4,2,1,0.175,1.96489 } ); +cells.push_back( {10505412,2125,54,5,1,1,0.225,2.01446 } ); +cells.push_back( {10505422,2145,54,5,2,1,0.225,1.96489 } ); +cells.push_back( {10605412,2126,54,6,1,1,0.275,2.01446 } ); +cells.push_back( {10605422,2146,54,6,2,1,0.275,1.96489 } ); +cells.push_back( {10705412,2127,54,7,1,1,0.325,2.01446 } ); +cells.push_back( {10705422,2147,54,7,2,1,0.325,1.96489 } ); +cells.push_back( {10805412,2128,54,8,1,1,0.375,2.01446 } ); +cells.push_back( {10805422,2148,54,8,2,1,0.375,1.96489 } ); +cells.push_back( {10905412,2129,54,9,1,1,0.425,2.01446 } ); +cells.push_back( {10905422,2149,54,9,2,1,0.425,1.96489 } ); +cells.push_back( {11005412,2130,54,10,1,1,0.475,2.01446 } ); +cells.push_back( {11005422,2150,54,10,2,1,0.475,1.96489 } ); +cells.push_back( {11105412,2131,54,11,1,1,0.525,2.01446 } ); +cells.push_back( {11105422,2151,54,11,2,1,0.525,1.96489 } ); +cells.push_back( {11205412,2132,54,12,1,1,0.575,2.01446 } ); +cells.push_back( {11205422,2152,54,12,2,1,0.575,1.96489 } ); +cells.push_back( {11305412,2133,54,13,1,1,0.625,2.01446 } ); +cells.push_back( {11305422,2153,54,13,2,1,0.625,1.96489 } ); +cells.push_back( {11405412,2134,54,14,1,1,0.675,2.01446 } ); +cells.push_back( {11405422,2154,54,14,2,1,0.675,1.96489 } ); +cells.push_back( {11505412,2135,54,15,1,1,0.725,2.01446 } ); +cells.push_back( {11505422,2155,54,15,2,1,0.725,1.96489 } ); +cells.push_back( {11605412,2136,54,16,1,1,0.775,2.01446 } ); +cells.push_back( {11605422,2156,54,16,2,1,0.775,1.96489 } ); +cells.push_back( {11705412,2137,54,17,1,1,0.825,2.01446 } ); +cells.push_back( {11705422,2157,54,17,2,1,0.825,1.96489 } ); +cells.push_back( {11805412,2138,54,18,1,1,0.875,2.01446 } ); +cells.push_back( {11805422,2158,54,18,2,1,0.875,1.96489 } ); +cells.push_back( {11905412,2139,54,19,1,1,0.925,2.01446 } ); +cells.push_back( {11905422,2159,54,19,2,1,0.925,1.96489 } ); +cells.push_back( {12005412,2140,54,20,1,1,0.967,2.01446 } ); +cells.push_back( {12005422,2160,54,20,2,1,0.967,1.96489 } ); +cells.push_back( {10105511,2161,55,1,1,2,0.02675,1.90974 } ); +cells.push_back( {10105521,2181,55,1,2,2,0.02675,1.86017 } ); +cells.push_back( {10205511,2162,55,2,1,2,0.075,1.90974 } ); +cells.push_back( {10205521,2182,55,2,2,2,0.075,1.86017 } ); +cells.push_back( {10305511,2163,55,3,1,2,0.125,1.90974 } ); +cells.push_back( {10305521,2183,55,3,2,2,0.125,1.86017 } ); +cells.push_back( {10405511,2164,55,4,1,2,0.175,1.90974 } ); +cells.push_back( {10405521,2184,55,4,2,2,0.175,1.86017 } ); +cells.push_back( {10505511,2165,55,5,1,2,0.225,1.90974 } ); +cells.push_back( {10505521,2185,55,5,2,2,0.225,1.86017 } ); +cells.push_back( {10605511,2166,55,6,1,2,0.275,1.90974 } ); +cells.push_back( {10605521,2186,55,6,2,2,0.275,1.86017 } ); +cells.push_back( {10705511,2167,55,7,1,2,0.325,1.90974 } ); +cells.push_back( {10705521,2187,55,7,2,2,0.325,1.86017 } ); +cells.push_back( {10805511,2168,55,8,1,2,0.375,1.90974 } ); +cells.push_back( {10805521,2188,55,8,2,2,0.375,1.86017 } ); +cells.push_back( {10905511,2169,55,9,1,2,0.425,1.90974 } ); +cells.push_back( {10905521,2189,55,9,2,2,0.425,1.86017 } ); +cells.push_back( {11005511,2170,55,10,1,2,0.475,1.90974 } ); +cells.push_back( {11005521,2190,55,10,2,2,0.475,1.86017 } ); +cells.push_back( {11105511,2171,55,11,1,2,0.525,1.90974 } ); +cells.push_back( {11105521,2191,55,11,2,2,0.525,1.86017 } ); +cells.push_back( {11205511,2172,55,12,1,2,0.575,1.90974 } ); +cells.push_back( {11205521,2192,55,12,2,2,0.575,1.86017 } ); +cells.push_back( {11305511,2173,55,13,1,2,0.625,1.90974 } ); +cells.push_back( {11305521,2193,55,13,2,2,0.625,1.86017 } ); +cells.push_back( {11405511,2174,55,14,1,2,0.675,1.90974 } ); +cells.push_back( {11405521,2194,55,14,2,2,0.675,1.86017 } ); +cells.push_back( {11505511,2175,55,15,1,2,0.725,1.90974 } ); +cells.push_back( {11505521,2195,55,15,2,2,0.725,1.86017 } ); +cells.push_back( {11605511,2176,55,16,1,2,0.775,1.90974 } ); +cells.push_back( {11605521,2196,55,16,2,2,0.775,1.86017 } ); +cells.push_back( {11705511,2177,55,17,1,2,0.825,1.90974 } ); +cells.push_back( {11705521,2197,55,17,2,2,0.825,1.86017 } ); +cells.push_back( {11805511,2178,55,18,1,2,0.875,1.90974 } ); +cells.push_back( {11805521,2198,55,18,2,2,0.875,1.86017 } ); +cells.push_back( {11905511,2179,55,19,1,2,0.925,1.90974 } ); +cells.push_back( {11905521,2199,55,19,2,2,0.925,1.86017 } ); +cells.push_back( {12005511,2180,55,20,1,2,0.967,1.90974 } ); +cells.push_back( {12005521,2200,55,20,2,2,0.967,1.86017 } ); +cells.push_back( {10105512,2161,55,1,1,1,0.02675,1.90974 } ); +cells.push_back( {10105522,2181,55,1,2,1,0.02675,1.86017 } ); +cells.push_back( {10205512,2162,55,2,1,1,0.075,1.90974 } ); +cells.push_back( {10205522,2182,55,2,2,1,0.075,1.86017 } ); +cells.push_back( {10305512,2163,55,3,1,1,0.125,1.90974 } ); +cells.push_back( {10305522,2183,55,3,2,1,0.125,1.86017 } ); +cells.push_back( {10405512,2164,55,4,1,1,0.175,1.90974 } ); +cells.push_back( {10405522,2184,55,4,2,1,0.175,1.86017 } ); +cells.push_back( {10505512,2165,55,5,1,1,0.225,1.90974 } ); +cells.push_back( {10505522,2185,55,5,2,1,0.225,1.86017 } ); +cells.push_back( {10605512,2166,55,6,1,1,0.275,1.90974 } ); +cells.push_back( {10605522,2186,55,6,2,1,0.275,1.86017 } ); +cells.push_back( {10705512,2167,55,7,1,1,0.325,1.90974 } ); +cells.push_back( {10705522,2187,55,7,2,1,0.325,1.86017 } ); +cells.push_back( {10805512,2168,55,8,1,1,0.375,1.90974 } ); +cells.push_back( {10805522,2188,55,8,2,1,0.375,1.86017 } ); +cells.push_back( {10905512,2169,55,9,1,1,0.425,1.90974 } ); +cells.push_back( {10905522,2189,55,9,2,1,0.425,1.86017 } ); +cells.push_back( {11005512,2170,55,10,1,1,0.475,1.90974 } ); +cells.push_back( {11005522,2190,55,10,2,1,0.475,1.86017 } ); +cells.push_back( {11105512,2171,55,11,1,1,0.525,1.90974 } ); +cells.push_back( {11105522,2191,55,11,2,1,0.525,1.86017 } ); +cells.push_back( {11205512,2172,55,12,1,1,0.575,1.90974 } ); +cells.push_back( {11205522,2192,55,12,2,1,0.575,1.86017 } ); +cells.push_back( {11305512,2173,55,13,1,1,0.625,1.90974 } ); +cells.push_back( {11305522,2193,55,13,2,1,0.625,1.86017 } ); +cells.push_back( {11405512,2174,55,14,1,1,0.675,1.90974 } ); +cells.push_back( {11405522,2194,55,14,2,1,0.675,1.86017 } ); +cells.push_back( {11505512,2175,55,15,1,1,0.725,1.90974 } ); +cells.push_back( {11505522,2195,55,15,2,1,0.725,1.86017 } ); +cells.push_back( {11605512,2176,55,16,1,1,0.775,1.90974 } ); +cells.push_back( {11605522,2196,55,16,2,1,0.775,1.86017 } ); +cells.push_back( {11705512,2177,55,17,1,1,0.825,1.90974 } ); +cells.push_back( {11705522,2197,55,17,2,1,0.825,1.86017 } ); +cells.push_back( {11805512,2178,55,18,1,1,0.875,1.90974 } ); +cells.push_back( {11805522,2198,55,18,2,1,0.875,1.86017 } ); +cells.push_back( {11905512,2179,55,19,1,1,0.925,1.90974 } ); +cells.push_back( {11905522,2199,55,19,2,1,0.925,1.86017 } ); +cells.push_back( {12005512,2180,55,20,1,1,0.967,1.90974 } ); +cells.push_back( {12005522,2200,55,20,2,1,0.967,1.86017 } ); +cells.push_back( {10105611,2201,56,1,1,2,0.02675,1.80502 } ); +cells.push_back( {10105621,2221,56,1,2,2,0.02675,1.75545 } ); +cells.push_back( {10205611,2202,56,2,1,2,0.075,1.80502 } ); +cells.push_back( {10205621,2222,56,2,2,2,0.075,1.75545 } ); +cells.push_back( {10305611,2203,56,3,1,2,0.125,1.80502 } ); +cells.push_back( {10305621,2223,56,3,2,2,0.125,1.75545 } ); +cells.push_back( {10405611,2204,56,4,1,2,0.175,1.80502 } ); +cells.push_back( {10405621,2224,56,4,2,2,0.175,1.75545 } ); +cells.push_back( {10505611,2205,56,5,1,2,0.225,1.80502 } ); +cells.push_back( {10505621,2225,56,5,2,2,0.225,1.75545 } ); +cells.push_back( {10605611,2206,56,6,1,2,0.275,1.80502 } ); +cells.push_back( {10605621,2226,56,6,2,2,0.275,1.75545 } ); +cells.push_back( {10705611,2207,56,7,1,2,0.325,1.80502 } ); +cells.push_back( {10705621,2227,56,7,2,2,0.325,1.75545 } ); +cells.push_back( {10805611,2208,56,8,1,2,0.375,1.80502 } ); +cells.push_back( {10805621,2228,56,8,2,2,0.375,1.75545 } ); +cells.push_back( {10905611,2209,56,9,1,2,0.425,1.80502 } ); +cells.push_back( {10905621,2229,56,9,2,2,0.425,1.75545 } ); +cells.push_back( {11005611,2210,56,10,1,2,0.475,1.80502 } ); +cells.push_back( {11005621,2230,56,10,2,2,0.475,1.75545 } ); +cells.push_back( {11105611,2211,56,11,1,2,0.525,1.80502 } ); +cells.push_back( {11105621,2231,56,11,2,2,0.525,1.75545 } ); +cells.push_back( {11205611,2212,56,12,1,2,0.575,1.80502 } ); +cells.push_back( {11205621,2232,56,12,2,2,0.575,1.75545 } ); +cells.push_back( {11305611,2213,56,13,1,2,0.625,1.80502 } ); +cells.push_back( {11305621,2233,56,13,2,2,0.625,1.75545 } ); +cells.push_back( {11405611,2214,56,14,1,2,0.675,1.80502 } ); +cells.push_back( {11405621,2234,56,14,2,2,0.675,1.75545 } ); +cells.push_back( {11505611,2215,56,15,1,2,0.725,1.80502 } ); +cells.push_back( {11505621,2235,56,15,2,2,0.725,1.75545 } ); +cells.push_back( {11605611,2216,56,16,1,2,0.775,1.80502 } ); +cells.push_back( {11605621,2236,56,16,2,2,0.775,1.75545 } ); +cells.push_back( {11705611,2217,56,17,1,2,0.825,1.80502 } ); +cells.push_back( {11705621,2237,56,17,2,2,0.825,1.75545 } ); +cells.push_back( {11805611,2218,56,18,1,2,0.875,1.80502 } ); +cells.push_back( {11805621,2238,56,18,2,2,0.875,1.75545 } ); +cells.push_back( {11905611,2219,56,19,1,2,0.925,1.80502 } ); +cells.push_back( {11905621,2239,56,19,2,2,0.925,1.75545 } ); +cells.push_back( {12005611,2220,56,20,1,2,0.967,1.80502 } ); +cells.push_back( {12005621,2240,56,20,2,2,0.967,1.75545 } ); +cells.push_back( {10105612,2201,56,1,1,1,0.02675,1.80502 } ); +cells.push_back( {10105622,2221,56,1,2,1,0.02675,1.75545 } ); +cells.push_back( {10205612,2202,56,2,1,1,0.075,1.80502 } ); +cells.push_back( {10205622,2222,56,2,2,1,0.075,1.75545 } ); +cells.push_back( {10305612,2203,56,3,1,1,0.125,1.80502 } ); +cells.push_back( {10305622,2223,56,3,2,1,0.125,1.75545 } ); +cells.push_back( {10405612,2204,56,4,1,1,0.175,1.80502 } ); +cells.push_back( {10405622,2224,56,4,2,1,0.175,1.75545 } ); +cells.push_back( {10505612,2205,56,5,1,1,0.225,1.80502 } ); +cells.push_back( {10505622,2225,56,5,2,1,0.225,1.75545 } ); +cells.push_back( {10605612,2206,56,6,1,1,0.275,1.80502 } ); +cells.push_back( {10605622,2226,56,6,2,1,0.275,1.75545 } ); +cells.push_back( {10705612,2207,56,7,1,1,0.325,1.80502 } ); +cells.push_back( {10705622,2227,56,7,2,1,0.325,1.75545 } ); +cells.push_back( {10805612,2208,56,8,1,1,0.375,1.80502 } ); +cells.push_back( {10805622,2228,56,8,2,1,0.375,1.75545 } ); +cells.push_back( {10905612,2209,56,9,1,1,0.425,1.80502 } ); +cells.push_back( {10905622,2229,56,9,2,1,0.425,1.75545 } ); +cells.push_back( {11005612,2210,56,10,1,1,0.475,1.80502 } ); +cells.push_back( {11005622,2230,56,10,2,1,0.475,1.75545 } ); +cells.push_back( {11105612,2211,56,11,1,1,0.525,1.80502 } ); +cells.push_back( {11105622,2231,56,11,2,1,0.525,1.75545 } ); +cells.push_back( {11205612,2212,56,12,1,1,0.575,1.80502 } ); +cells.push_back( {11205622,2232,56,12,2,1,0.575,1.75545 } ); +cells.push_back( {11305612,2213,56,13,1,1,0.625,1.80502 } ); +cells.push_back( {11305622,2233,56,13,2,1,0.625,1.75545 } ); +cells.push_back( {11405612,2214,56,14,1,1,0.675,1.80502 } ); +cells.push_back( {11405622,2234,56,14,2,1,0.675,1.75545 } ); +cells.push_back( {11505612,2215,56,15,1,1,0.725,1.80502 } ); +cells.push_back( {11505622,2235,56,15,2,1,0.725,1.75545 } ); +cells.push_back( {11605612,2216,56,16,1,1,0.775,1.80502 } ); +cells.push_back( {11605622,2236,56,16,2,1,0.775,1.75545 } ); +cells.push_back( {11705612,2217,56,17,1,1,0.825,1.80502 } ); +cells.push_back( {11705622,2237,56,17,2,1,0.825,1.75545 } ); +cells.push_back( {11805612,2218,56,18,1,1,0.875,1.80502 } ); +cells.push_back( {11805622,2238,56,18,2,1,0.875,1.75545 } ); +cells.push_back( {11905612,2219,56,19,1,1,0.925,1.80502 } ); +cells.push_back( {11905622,2239,56,19,2,1,0.925,1.75545 } ); +cells.push_back( {12005612,2220,56,20,1,1,0.967,1.80502 } ); +cells.push_back( {12005622,2240,56,20,2,1,0.967,1.75545 } ); +cells.push_back( {10105711,2241,57,1,1,2,0.02675,1.7003 } ); +cells.push_back( {10105721,2261,57,1,2,2,0.02675,1.65073 } ); +cells.push_back( {10205711,2242,57,2,1,2,0.075,1.7003 } ); +cells.push_back( {10205721,2262,57,2,2,2,0.075,1.65073 } ); +cells.push_back( {10305711,2243,57,3,1,2,0.125,1.7003 } ); +cells.push_back( {10305721,2263,57,3,2,2,0.125,1.65073 } ); +cells.push_back( {10405711,2244,57,4,1,2,0.175,1.7003 } ); +cells.push_back( {10405721,2264,57,4,2,2,0.175,1.65073 } ); +cells.push_back( {10505711,2245,57,5,1,2,0.225,1.7003 } ); +cells.push_back( {10505721,2265,57,5,2,2,0.225,1.65073 } ); +cells.push_back( {10605711,2246,57,6,1,2,0.275,1.7003 } ); +cells.push_back( {10605721,2266,57,6,2,2,0.275,1.65073 } ); +cells.push_back( {10705711,2247,57,7,1,2,0.325,1.7003 } ); +cells.push_back( {10705721,2267,57,7,2,2,0.325,1.65073 } ); +cells.push_back( {10805711,2248,57,8,1,2,0.375,1.7003 } ); +cells.push_back( {10805721,2268,57,8,2,2,0.375,1.65073 } ); +cells.push_back( {10905711,2249,57,9,1,2,0.425,1.7003 } ); +cells.push_back( {10905721,2269,57,9,2,2,0.425,1.65073 } ); +cells.push_back( {11005711,2250,57,10,1,2,0.475,1.7003 } ); +cells.push_back( {11005721,2270,57,10,2,2,0.475,1.65073 } ); +cells.push_back( {11105711,2251,57,11,1,2,0.525,1.7003 } ); +cells.push_back( {11105721,2271,57,11,2,2,0.525,1.65073 } ); +cells.push_back( {11205711,2252,57,12,1,2,0.575,1.7003 } ); +cells.push_back( {11205721,2272,57,12,2,2,0.575,1.65073 } ); +cells.push_back( {11305711,2253,57,13,1,2,0.625,1.7003 } ); +cells.push_back( {11305721,2273,57,13,2,2,0.625,1.65073 } ); +cells.push_back( {11405711,2254,57,14,1,2,0.675,1.7003 } ); +cells.push_back( {11405721,2274,57,14,2,2,0.675,1.65073 } ); +cells.push_back( {11505711,2255,57,15,1,2,0.725,1.7003 } ); +cells.push_back( {11505721,2275,57,15,2,2,0.725,1.65073 } ); +cells.push_back( {11605711,2256,57,16,1,2,0.775,1.7003 } ); +cells.push_back( {11605721,2276,57,16,2,2,0.775,1.65073 } ); +cells.push_back( {11705711,2257,57,17,1,2,0.825,1.7003 } ); +cells.push_back( {11705721,2277,57,17,2,2,0.825,1.65073 } ); +cells.push_back( {11805711,2258,57,18,1,2,0.875,1.7003 } ); +cells.push_back( {11805721,2278,57,18,2,2,0.875,1.65073 } ); +cells.push_back( {11905711,2259,57,19,1,2,0.925,1.7003 } ); +cells.push_back( {11905721,2279,57,19,2,2,0.925,1.65073 } ); +cells.push_back( {12005711,2260,57,20,1,2,0.967,1.7003 } ); +cells.push_back( {12005721,2280,57,20,2,2,0.967,1.65073 } ); +cells.push_back( {10105712,2241,57,1,1,1,0.02675,1.7003 } ); +cells.push_back( {10105722,2261,57,1,2,1,0.02675,1.65073 } ); +cells.push_back( {10205712,2242,57,2,1,1,0.075,1.7003 } ); +cells.push_back( {10205722,2262,57,2,2,1,0.075,1.65073 } ); +cells.push_back( {10305712,2243,57,3,1,1,0.125,1.7003 } ); +cells.push_back( {10305722,2263,57,3,2,1,0.125,1.65073 } ); +cells.push_back( {10405712,2244,57,4,1,1,0.175,1.7003 } ); +cells.push_back( {10405722,2264,57,4,2,1,0.175,1.65073 } ); +cells.push_back( {10505712,2245,57,5,1,1,0.225,1.7003 } ); +cells.push_back( {10505722,2265,57,5,2,1,0.225,1.65073 } ); +cells.push_back( {10605712,2246,57,6,1,1,0.275,1.7003 } ); +cells.push_back( {10605722,2266,57,6,2,1,0.275,1.65073 } ); +cells.push_back( {10705712,2247,57,7,1,1,0.325,1.7003 } ); +cells.push_back( {10705722,2267,57,7,2,1,0.325,1.65073 } ); +cells.push_back( {10805712,2248,57,8,1,1,0.375,1.7003 } ); +cells.push_back( {10805722,2268,57,8,2,1,0.375,1.65073 } ); +cells.push_back( {10905712,2249,57,9,1,1,0.425,1.7003 } ); +cells.push_back( {10905722,2269,57,9,2,1,0.425,1.65073 } ); +cells.push_back( {11005712,2250,57,10,1,1,0.475,1.7003 } ); +cells.push_back( {11005722,2270,57,10,2,1,0.475,1.65073 } ); +cells.push_back( {11105712,2251,57,11,1,1,0.525,1.7003 } ); +cells.push_back( {11105722,2271,57,11,2,1,0.525,1.65073 } ); +cells.push_back( {11205712,2252,57,12,1,1,0.575,1.7003 } ); +cells.push_back( {11205722,2272,57,12,2,1,0.575,1.65073 } ); +cells.push_back( {11305712,2253,57,13,1,1,0.625,1.7003 } ); +cells.push_back( {11305722,2273,57,13,2,1,0.625,1.65073 } ); +cells.push_back( {11405712,2254,57,14,1,1,0.675,1.7003 } ); +cells.push_back( {11405722,2274,57,14,2,1,0.675,1.65073 } ); +cells.push_back( {11505712,2255,57,15,1,1,0.725,1.7003 } ); +cells.push_back( {11505722,2275,57,15,2,1,0.725,1.65073 } ); +cells.push_back( {11605712,2256,57,16,1,1,0.775,1.7003 } ); +cells.push_back( {11605722,2276,57,16,2,1,0.775,1.65073 } ); +cells.push_back( {11705712,2257,57,17,1,1,0.825,1.7003 } ); +cells.push_back( {11705722,2277,57,17,2,1,0.825,1.65073 } ); +cells.push_back( {11805712,2258,57,18,1,1,0.875,1.7003 } ); +cells.push_back( {11805722,2278,57,18,2,1,0.875,1.65073 } ); +cells.push_back( {11905712,2259,57,19,1,1,0.925,1.7003 } ); +cells.push_back( {11905722,2279,57,19,2,1,0.925,1.65073 } ); +cells.push_back( {12005712,2260,57,20,1,1,0.967,1.7003 } ); +cells.push_back( {12005722,2280,57,20,2,1,0.967,1.65073 } ); +cells.push_back( {10105811,2281,58,1,1,2,0.02675,1.59558 } ); +cells.push_back( {10105821,2301,58,1,2,2,0.02675,1.54601 } ); +cells.push_back( {10205811,2282,58,2,1,2,0.075,1.59558 } ); +cells.push_back( {10205821,2302,58,2,2,2,0.075,1.54601 } ); +cells.push_back( {10305811,2283,58,3,1,2,0.125,1.59558 } ); +cells.push_back( {10305821,2303,58,3,2,2,0.125,1.54601 } ); +cells.push_back( {10405811,2284,58,4,1,2,0.175,1.59558 } ); +cells.push_back( {10405821,2304,58,4,2,2,0.175,1.54601 } ); +cells.push_back( {10505811,2285,58,5,1,2,0.225,1.59558 } ); +cells.push_back( {10505821,2305,58,5,2,2,0.225,1.54601 } ); +cells.push_back( {10605811,2286,58,6,1,2,0.275,1.59558 } ); +cells.push_back( {10605821,2306,58,6,2,2,0.275,1.54601 } ); +cells.push_back( {10705811,2287,58,7,1,2,0.325,1.59558 } ); +cells.push_back( {10705821,2307,58,7,2,2,0.325,1.54601 } ); +cells.push_back( {10805811,2288,58,8,1,2,0.375,1.59558 } ); +cells.push_back( {10805821,2308,58,8,2,2,0.375,1.54601 } ); +cells.push_back( {10905811,2289,58,9,1,2,0.425,1.59558 } ); +cells.push_back( {10905821,2309,58,9,2,2,0.425,1.54601 } ); +cells.push_back( {11005811,2290,58,10,1,2,0.475,1.59558 } ); +cells.push_back( {11005821,2310,58,10,2,2,0.475,1.54601 } ); +cells.push_back( {11105811,2291,58,11,1,2,0.525,1.59558 } ); +cells.push_back( {11105821,2311,58,11,2,2,0.525,1.54601 } ); +cells.push_back( {11205811,2292,58,12,1,2,0.575,1.59558 } ); +cells.push_back( {11205821,2312,58,12,2,2,0.575,1.54601 } ); +cells.push_back( {11305811,2293,58,13,1,2,0.625,1.59558 } ); +cells.push_back( {11305821,2313,58,13,2,2,0.625,1.54601 } ); +cells.push_back( {11405811,2294,58,14,1,2,0.675,1.59558 } ); +cells.push_back( {11405821,2314,58,14,2,2,0.675,1.54601 } ); +cells.push_back( {11505811,2295,58,15,1,2,0.725,1.59558 } ); +cells.push_back( {11505821,2315,58,15,2,2,0.725,1.54601 } ); +cells.push_back( {11605811,2296,58,16,1,2,0.775,1.59558 } ); +cells.push_back( {11605821,2316,58,16,2,2,0.775,1.54601 } ); +cells.push_back( {11705811,2297,58,17,1,2,0.825,1.59558 } ); +cells.push_back( {11705821,2317,58,17,2,2,0.825,1.54601 } ); +cells.push_back( {11805811,2298,58,18,1,2,0.875,1.59558 } ); +cells.push_back( {11805821,2318,58,18,2,2,0.875,1.54601 } ); +cells.push_back( {11905811,2299,58,19,1,2,0.925,1.59558 } ); +cells.push_back( {11905821,2319,58,19,2,2,0.925,1.54601 } ); +cells.push_back( {12005811,2300,58,20,1,2,0.967,1.59558 } ); +cells.push_back( {12005821,2320,58,20,2,2,0.967,1.54601 } ); +cells.push_back( {10105812,2281,58,1,1,1,0.02675,1.59558 } ); +cells.push_back( {10105822,2301,58,1,2,1,0.02675,1.54601 } ); +cells.push_back( {10205812,2282,58,2,1,1,0.075,1.59558 } ); +cells.push_back( {10205822,2302,58,2,2,1,0.075,1.54601 } ); +cells.push_back( {10305812,2283,58,3,1,1,0.125,1.59558 } ); +cells.push_back( {10305822,2303,58,3,2,1,0.125,1.54601 } ); +cells.push_back( {10405812,2284,58,4,1,1,0.175,1.59558 } ); +cells.push_back( {10405822,2304,58,4,2,1,0.175,1.54601 } ); +cells.push_back( {10505812,2285,58,5,1,1,0.225,1.59558 } ); +cells.push_back( {10505822,2305,58,5,2,1,0.225,1.54601 } ); +cells.push_back( {10605812,2286,58,6,1,1,0.275,1.59558 } ); +cells.push_back( {10605822,2306,58,6,2,1,0.275,1.54601 } ); +cells.push_back( {10705812,2287,58,7,1,1,0.325,1.59558 } ); +cells.push_back( {10705822,2307,58,7,2,1,0.325,1.54601 } ); +cells.push_back( {10805812,2288,58,8,1,1,0.375,1.59558 } ); +cells.push_back( {10805822,2308,58,8,2,1,0.375,1.54601 } ); +cells.push_back( {10905812,2289,58,9,1,1,0.425,1.59558 } ); +cells.push_back( {10905822,2309,58,9,2,1,0.425,1.54601 } ); +cells.push_back( {11005812,2290,58,10,1,1,0.475,1.59558 } ); +cells.push_back( {11005822,2310,58,10,2,1,0.475,1.54601 } ); +cells.push_back( {11105812,2291,58,11,1,1,0.525,1.59558 } ); +cells.push_back( {11105822,2311,58,11,2,1,0.525,1.54601 } ); +cells.push_back( {11205812,2292,58,12,1,1,0.575,1.59558 } ); +cells.push_back( {11205822,2312,58,12,2,1,0.575,1.54601 } ); +cells.push_back( {11305812,2293,58,13,1,1,0.625,1.59558 } ); +cells.push_back( {11305822,2313,58,13,2,1,0.625,1.54601 } ); +cells.push_back( {11405812,2294,58,14,1,1,0.675,1.59558 } ); +cells.push_back( {11405822,2314,58,14,2,1,0.675,1.54601 } ); +cells.push_back( {11505812,2295,58,15,1,1,0.725,1.59558 } ); +cells.push_back( {11505822,2315,58,15,2,1,0.725,1.54601 } ); +cells.push_back( {11605812,2296,58,16,1,1,0.775,1.59558 } ); +cells.push_back( {11605822,2316,58,16,2,1,0.775,1.54601 } ); +cells.push_back( {11705812,2297,58,17,1,1,0.825,1.59558 } ); +cells.push_back( {11705822,2317,58,17,2,1,0.825,1.54601 } ); +cells.push_back( {11805812,2298,58,18,1,1,0.875,1.59558 } ); +cells.push_back( {11805822,2318,58,18,2,1,0.875,1.54601 } ); +cells.push_back( {11905812,2299,58,19,1,1,0.925,1.59558 } ); +cells.push_back( {11905822,2319,58,19,2,1,0.925,1.54601 } ); +cells.push_back( {12005812,2300,58,20,1,1,0.967,1.59558 } ); +cells.push_back( {12005822,2320,58,20,2,1,0.967,1.54601 } ); +cells.push_back( {10105911,2321,59,1,1,2,0.02675,1.49086 } ); +cells.push_back( {10105921,2341,59,1,2,2,0.02675,1.4413 } ); +cells.push_back( {10205911,2322,59,2,1,2,0.075,1.49086 } ); +cells.push_back( {10205921,2342,59,2,2,2,0.075,1.4413 } ); +cells.push_back( {10305911,2323,59,3,1,2,0.125,1.49086 } ); +cells.push_back( {10305921,2343,59,3,2,2,0.125,1.4413 } ); +cells.push_back( {10405911,2324,59,4,1,2,0.175,1.49086 } ); +cells.push_back( {10405921,2344,59,4,2,2,0.175,1.4413 } ); +cells.push_back( {10505911,2325,59,5,1,2,0.225,1.49086 } ); +cells.push_back( {10505921,2345,59,5,2,2,0.225,1.4413 } ); +cells.push_back( {10605911,2326,59,6,1,2,0.275,1.49086 } ); +cells.push_back( {10605921,2346,59,6,2,2,0.275,1.4413 } ); +cells.push_back( {10705911,2327,59,7,1,2,0.325,1.49086 } ); +cells.push_back( {10705921,2347,59,7,2,2,0.325,1.4413 } ); +cells.push_back( {10805911,2328,59,8,1,2,0.375,1.49086 } ); +cells.push_back( {10805921,2348,59,8,2,2,0.375,1.4413 } ); +cells.push_back( {10905911,2329,59,9,1,2,0.425,1.49086 } ); +cells.push_back( {10905921,2349,59,9,2,2,0.425,1.4413 } ); +cells.push_back( {11005911,2330,59,10,1,2,0.475,1.49086 } ); +cells.push_back( {11005921,2350,59,10,2,2,0.475,1.4413 } ); +cells.push_back( {11105911,2331,59,11,1,2,0.525,1.49086 } ); +cells.push_back( {11105921,2351,59,11,2,2,0.525,1.4413 } ); +cells.push_back( {11205911,2332,59,12,1,2,0.575,1.49086 } ); +cells.push_back( {11205921,2352,59,12,2,2,0.575,1.4413 } ); +cells.push_back( {11305911,2333,59,13,1,2,0.625,1.49086 } ); +cells.push_back( {11305921,2353,59,13,2,2,0.625,1.4413 } ); +cells.push_back( {11405911,2334,59,14,1,2,0.675,1.49086 } ); +cells.push_back( {11405921,2354,59,14,2,2,0.675,1.4413 } ); +cells.push_back( {11505911,2335,59,15,1,2,0.725,1.49086 } ); +cells.push_back( {11505921,2355,59,15,2,2,0.725,1.4413 } ); +cells.push_back( {11605911,2336,59,16,1,2,0.775,1.49086 } ); +cells.push_back( {11605921,2356,59,16,2,2,0.775,1.4413 } ); +cells.push_back( {11705911,2337,59,17,1,2,0.825,1.49086 } ); +cells.push_back( {11705921,2357,59,17,2,2,0.825,1.4413 } ); +cells.push_back( {11805911,2338,59,18,1,2,0.875,1.49086 } ); +cells.push_back( {11805921,2358,59,18,2,2,0.875,1.4413 } ); +cells.push_back( {11905911,2339,59,19,1,2,0.925,1.49086 } ); +cells.push_back( {11905921,2359,59,19,2,2,0.925,1.4413 } ); +cells.push_back( {12005911,2340,59,20,1,2,0.967,1.49086 } ); +cells.push_back( {12005921,2360,59,20,2,2,0.967,1.4413 } ); +cells.push_back( {10105912,2321,59,1,1,1,0.02675,1.49086 } ); +cells.push_back( {10105922,2341,59,1,2,1,0.02675,1.4413 } ); +cells.push_back( {10205912,2322,59,2,1,1,0.075,1.49086 } ); +cells.push_back( {10205922,2342,59,2,2,1,0.075,1.4413 } ); +cells.push_back( {10305912,2323,59,3,1,1,0.125,1.49086 } ); +cells.push_back( {10305922,2343,59,3,2,1,0.125,1.4413 } ); +cells.push_back( {10405912,2324,59,4,1,1,0.175,1.49086 } ); +cells.push_back( {10405922,2344,59,4,2,1,0.175,1.4413 } ); +cells.push_back( {10505912,2325,59,5,1,1,0.225,1.49086 } ); +cells.push_back( {10505922,2345,59,5,2,1,0.225,1.4413 } ); +cells.push_back( {10605912,2326,59,6,1,1,0.275,1.49086 } ); +cells.push_back( {10605922,2346,59,6,2,1,0.275,1.4413 } ); +cells.push_back( {10705912,2327,59,7,1,1,0.325,1.49086 } ); +cells.push_back( {10705922,2347,59,7,2,1,0.325,1.4413 } ); +cells.push_back( {10805912,2328,59,8,1,1,0.375,1.49086 } ); +cells.push_back( {10805922,2348,59,8,2,1,0.375,1.4413 } ); +cells.push_back( {10905912,2329,59,9,1,1,0.425,1.49086 } ); +cells.push_back( {10905922,2349,59,9,2,1,0.425,1.4413 } ); +cells.push_back( {11005912,2330,59,10,1,1,0.475,1.49086 } ); +cells.push_back( {11005922,2350,59,10,2,1,0.475,1.4413 } ); +cells.push_back( {11105912,2331,59,11,1,1,0.525,1.49086 } ); +cells.push_back( {11105922,2351,59,11,2,1,0.525,1.4413 } ); +cells.push_back( {11205912,2332,59,12,1,1,0.575,1.49086 } ); +cells.push_back( {11205922,2352,59,12,2,1,0.575,1.4413 } ); +cells.push_back( {11305912,2333,59,13,1,1,0.625,1.49086 } ); +cells.push_back( {11305922,2353,59,13,2,1,0.625,1.4413 } ); +cells.push_back( {11405912,2334,59,14,1,1,0.675,1.49086 } ); +cells.push_back( {11405922,2354,59,14,2,1,0.675,1.4413 } ); +cells.push_back( {11505912,2335,59,15,1,1,0.725,1.49086 } ); +cells.push_back( {11505922,2355,59,15,2,1,0.725,1.4413 } ); +cells.push_back( {11605912,2336,59,16,1,1,0.775,1.49086 } ); +cells.push_back( {11605922,2356,59,16,2,1,0.775,1.4413 } ); +cells.push_back( {11705912,2337,59,17,1,1,0.825,1.49086 } ); +cells.push_back( {11705922,2357,59,17,2,1,0.825,1.4413 } ); +cells.push_back( {11805912,2338,59,18,1,1,0.875,1.49086 } ); +cells.push_back( {11805922,2358,59,18,2,1,0.875,1.4413 } ); +cells.push_back( {11905912,2339,59,19,1,1,0.925,1.49086 } ); +cells.push_back( {11905922,2359,59,19,2,1,0.925,1.4413 } ); +cells.push_back( {12005912,2340,59,20,1,1,0.967,1.49086 } ); +cells.push_back( {12005922,2360,59,20,2,1,0.967,1.4413 } ); +cells.push_back( {10106011,2361,60,1,1,2,0.02675,1.38614 } ); +cells.push_back( {10106021,2381,60,1,2,2,0.02675,1.33658 } ); +cells.push_back( {10206011,2362,60,2,1,2,0.075,1.38614 } ); +cells.push_back( {10206021,2382,60,2,2,2,0.075,1.33658 } ); +cells.push_back( {10306011,2363,60,3,1,2,0.125,1.38614 } ); +cells.push_back( {10306021,2383,60,3,2,2,0.125,1.33658 } ); +cells.push_back( {10406011,2364,60,4,1,2,0.175,1.38614 } ); +cells.push_back( {10406021,2384,60,4,2,2,0.175,1.33658 } ); +cells.push_back( {10506011,2365,60,5,1,2,0.225,1.38614 } ); +cells.push_back( {10506021,2385,60,5,2,2,0.225,1.33658 } ); +cells.push_back( {10606011,2366,60,6,1,2,0.275,1.38614 } ); +cells.push_back( {10606021,2386,60,6,2,2,0.275,1.33658 } ); +cells.push_back( {10706011,2367,60,7,1,2,0.325,1.38614 } ); +cells.push_back( {10706021,2387,60,7,2,2,0.325,1.33658 } ); +cells.push_back( {10806011,2368,60,8,1,2,0.375,1.38614 } ); +cells.push_back( {10806021,2388,60,8,2,2,0.375,1.33658 } ); +cells.push_back( {10906011,2369,60,9,1,2,0.425,1.38614 } ); +cells.push_back( {10906021,2389,60,9,2,2,0.425,1.33658 } ); +cells.push_back( {11006011,2370,60,10,1,2,0.475,1.38614 } ); +cells.push_back( {11006021,2390,60,10,2,2,0.475,1.33658 } ); +cells.push_back( {11106011,2371,60,11,1,2,0.525,1.38614 } ); +cells.push_back( {11106021,2391,60,11,2,2,0.525,1.33658 } ); +cells.push_back( {11206011,2372,60,12,1,2,0.575,1.38614 } ); +cells.push_back( {11206021,2392,60,12,2,2,0.575,1.33658 } ); +cells.push_back( {11306011,2373,60,13,1,2,0.625,1.38614 } ); +cells.push_back( {11306021,2393,60,13,2,2,0.625,1.33658 } ); +cells.push_back( {11406011,2374,60,14,1,2,0.675,1.38614 } ); +cells.push_back( {11406021,2394,60,14,2,2,0.675,1.33658 } ); +cells.push_back( {11506011,2375,60,15,1,2,0.725,1.38614 } ); +cells.push_back( {11506021,2395,60,15,2,2,0.725,1.33658 } ); +cells.push_back( {11606011,2376,60,16,1,2,0.775,1.38614 } ); +cells.push_back( {11606021,2396,60,16,2,2,0.775,1.33658 } ); +cells.push_back( {11706011,2377,60,17,1,2,0.825,1.38614 } ); +cells.push_back( {11706021,2397,60,17,2,2,0.825,1.33658 } ); +cells.push_back( {11806011,2378,60,18,1,2,0.875,1.38614 } ); +cells.push_back( {11806021,2398,60,18,2,2,0.875,1.33658 } ); +cells.push_back( {11906011,2379,60,19,1,2,0.925,1.38614 } ); +cells.push_back( {11906021,2399,60,19,2,2,0.925,1.33658 } ); +cells.push_back( {12006011,2380,60,20,1,2,0.967,1.38614 } ); +cells.push_back( {12006021,2400,60,20,2,2,0.967,1.33658 } ); +cells.push_back( {10106012,2361,60,1,1,1,0.02675,1.38614 } ); +cells.push_back( {10106022,2381,60,1,2,1,0.02675,1.33658 } ); +cells.push_back( {10206012,2362,60,2,1,1,0.075,1.38614 } ); +cells.push_back( {10206022,2382,60,2,2,1,0.075,1.33658 } ); +cells.push_back( {10306012,2363,60,3,1,1,0.125,1.38614 } ); +cells.push_back( {10306022,2383,60,3,2,1,0.125,1.33658 } ); +cells.push_back( {10406012,2364,60,4,1,1,0.175,1.38614 } ); +cells.push_back( {10406022,2384,60,4,2,1,0.175,1.33658 } ); +cells.push_back( {10506012,2365,60,5,1,1,0.225,1.38614 } ); +cells.push_back( {10506022,2385,60,5,2,1,0.225,1.33658 } ); +cells.push_back( {10606012,2366,60,6,1,1,0.275,1.38614 } ); +cells.push_back( {10606022,2386,60,6,2,1,0.275,1.33658 } ); +cells.push_back( {10706012,2367,60,7,1,1,0.325,1.38614 } ); +cells.push_back( {10706022,2387,60,7,2,1,0.325,1.33658 } ); +cells.push_back( {10806012,2368,60,8,1,1,0.375,1.38614 } ); +cells.push_back( {10806022,2388,60,8,2,1,0.375,1.33658 } ); +cells.push_back( {10906012,2369,60,9,1,1,0.425,1.38614 } ); +cells.push_back( {10906022,2389,60,9,2,1,0.425,1.33658 } ); +cells.push_back( {11006012,2370,60,10,1,1,0.475,1.38614 } ); +cells.push_back( {11006022,2390,60,10,2,1,0.475,1.33658 } ); +cells.push_back( {11106012,2371,60,11,1,1,0.525,1.38614 } ); +cells.push_back( {11106022,2391,60,11,2,1,0.525,1.33658 } ); +cells.push_back( {11206012,2372,60,12,1,1,0.575,1.38614 } ); +cells.push_back( {11206022,2392,60,12,2,1,0.575,1.33658 } ); +cells.push_back( {11306012,2373,60,13,1,1,0.625,1.38614 } ); +cells.push_back( {11306022,2393,60,13,2,1,0.625,1.33658 } ); +cells.push_back( {11406012,2374,60,14,1,1,0.675,1.38614 } ); +cells.push_back( {11406022,2394,60,14,2,1,0.675,1.33658 } ); +cells.push_back( {11506012,2375,60,15,1,1,0.725,1.38614 } ); +cells.push_back( {11506022,2395,60,15,2,1,0.725,1.33658 } ); +cells.push_back( {11606012,2376,60,16,1,1,0.775,1.38614 } ); +cells.push_back( {11606022,2396,60,16,2,1,0.775,1.33658 } ); +cells.push_back( {11706012,2377,60,17,1,1,0.825,1.38614 } ); +cells.push_back( {11706022,2397,60,17,2,1,0.825,1.33658 } ); +cells.push_back( {11806012,2378,60,18,1,1,0.875,1.38614 } ); +cells.push_back( {11806022,2398,60,18,2,1,0.875,1.33658 } ); +cells.push_back( {11906012,2379,60,19,1,1,0.925,1.38614 } ); +cells.push_back( {11906022,2399,60,19,2,1,0.925,1.33658 } ); +cells.push_back( {12006012,2380,60,20,1,1,0.967,1.38614 } ); +cells.push_back( {12006022,2400,60,20,2,1,0.967,1.33658 } ); +cells.push_back( {20100111,2401,61,1,1,2,-0.02675,1.86017 } ); +cells.push_back( {20100121,2421,61,1,2,2,-0.02675,1.90974 } ); +cells.push_back( {20200111,2402,61,2,1,2,-0.075,1.86017 } ); +cells.push_back( {20200121,2422,61,2,2,2,-0.075,1.90974 } ); +cells.push_back( {20300111,2403,61,3,1,2,-0.125,1.86017 } ); +cells.push_back( {20300121,2423,61,3,2,2,-0.125,1.90974 } ); +cells.push_back( {20400111,2404,61,4,1,2,-0.175,1.86017 } ); +cells.push_back( {20400121,2424,61,4,2,2,-0.175,1.90974 } ); +cells.push_back( {20500111,2405,61,5,1,2,-0.225,1.86017 } ); +cells.push_back( {20500121,2425,61,5,2,2,-0.225,1.90974 } ); +cells.push_back( {20600111,2406,61,6,1,2,-0.275,1.86017 } ); +cells.push_back( {20600121,2426,61,6,2,2,-0.275,1.90974 } ); +cells.push_back( {20700111,2407,61,7,1,2,-0.325,1.86017 } ); +cells.push_back( {20700121,2427,61,7,2,2,-0.325,1.90974 } ); +cells.push_back( {20800111,2408,61,8,1,2,-0.375,1.86017 } ); +cells.push_back( {20800121,2428,61,8,2,2,-0.375,1.90974 } ); +cells.push_back( {20900111,2409,61,9,1,2,-0.425,1.86017 } ); +cells.push_back( {20900121,2429,61,9,2,2,-0.425,1.90974 } ); +cells.push_back( {21000111,2410,61,10,1,2,-0.475,1.86017 } ); +cells.push_back( {21000121,2430,61,10,2,2,-0.475,1.90974 } ); +cells.push_back( {21100111,2411,61,11,1,2,-0.525,1.86017 } ); +cells.push_back( {21100121,2431,61,11,2,2,-0.525,1.90974 } ); +cells.push_back( {21200111,2412,61,12,1,2,-0.575,1.86017 } ); +cells.push_back( {21200121,2432,61,12,2,2,-0.575,1.90974 } ); +cells.push_back( {21300111,2413,61,13,1,2,-0.625,1.86017 } ); +cells.push_back( {21300121,2433,61,13,2,2,-0.625,1.90974 } ); +cells.push_back( {21400111,2414,61,14,1,2,-0.675,1.86017 } ); +cells.push_back( {21400121,2434,61,14,2,2,-0.675,1.90974 } ); +cells.push_back( {21500111,2415,61,15,1,2,-0.725,1.86017 } ); +cells.push_back( {21500121,2435,61,15,2,2,-0.725,1.90974 } ); +cells.push_back( {21600111,2416,61,16,1,2,-0.775,1.86017 } ); +cells.push_back( {21600121,2436,61,16,2,2,-0.775,1.90974 } ); +cells.push_back( {21700111,2417,61,17,1,2,-0.825,1.86017 } ); +cells.push_back( {21700121,2437,61,17,2,2,-0.825,1.90974 } ); +cells.push_back( {21800111,2418,61,18,1,2,-0.875,1.86017 } ); +cells.push_back( {21800121,2438,61,18,2,2,-0.875,1.90974 } ); +cells.push_back( {21900111,2419,61,19,1,2,-0.925,1.86017 } ); +cells.push_back( {21900121,2439,61,19,2,2,-0.925,1.90974 } ); +cells.push_back( {22000111,2420,61,20,1,2,-0.967,1.86017 } ); +cells.push_back( {22000121,2440,61,20,2,2,-0.967,1.90974 } ); +cells.push_back( {20100112,2401,61,1,1,1,-0.02675,1.86017 } ); +cells.push_back( {20100122,2421,61,1,2,1,-0.02675,1.90974 } ); +cells.push_back( {20200112,2402,61,2,1,1,-0.075,1.86017 } ); +cells.push_back( {20200122,2422,61,2,2,1,-0.075,1.90974 } ); +cells.push_back( {20300112,2403,61,3,1,1,-0.125,1.86017 } ); +cells.push_back( {20300122,2423,61,3,2,1,-0.125,1.90974 } ); +cells.push_back( {20400112,2404,61,4,1,1,-0.175,1.86017 } ); +cells.push_back( {20400122,2424,61,4,2,1,-0.175,1.90974 } ); +cells.push_back( {20500112,2405,61,5,1,1,-0.225,1.86017 } ); +cells.push_back( {20500122,2425,61,5,2,1,-0.225,1.90974 } ); +cells.push_back( {20600112,2406,61,6,1,1,-0.275,1.86017 } ); +cells.push_back( {20600122,2426,61,6,2,1,-0.275,1.90974 } ); +cells.push_back( {20700112,2407,61,7,1,1,-0.325,1.86017 } ); +cells.push_back( {20700122,2427,61,7,2,1,-0.325,1.90974 } ); +cells.push_back( {20800112,2408,61,8,1,1,-0.375,1.86017 } ); +cells.push_back( {20800122,2428,61,8,2,1,-0.375,1.90974 } ); +cells.push_back( {20900112,2409,61,9,1,1,-0.425,1.86017 } ); +cells.push_back( {20900122,2429,61,9,2,1,-0.425,1.90974 } ); +cells.push_back( {21000112,2410,61,10,1,1,-0.475,1.86017 } ); +cells.push_back( {21000122,2430,61,10,2,1,-0.475,1.90974 } ); +cells.push_back( {21100112,2411,61,11,1,1,-0.525,1.86017 } ); +cells.push_back( {21100122,2431,61,11,2,1,-0.525,1.90974 } ); +cells.push_back( {21200112,2412,61,12,1,1,-0.575,1.86017 } ); +cells.push_back( {21200122,2432,61,12,2,1,-0.575,1.90974 } ); +cells.push_back( {21300112,2413,61,13,1,1,-0.625,1.86017 } ); +cells.push_back( {21300122,2433,61,13,2,1,-0.625,1.90974 } ); +cells.push_back( {21400112,2414,61,14,1,1,-0.675,1.86017 } ); +cells.push_back( {21400122,2434,61,14,2,1,-0.675,1.90974 } ); +cells.push_back( {21500112,2415,61,15,1,1,-0.725,1.86017 } ); +cells.push_back( {21500122,2435,61,15,2,1,-0.725,1.90974 } ); +cells.push_back( {21600112,2416,61,16,1,1,-0.775,1.86017 } ); +cells.push_back( {21600122,2436,61,16,2,1,-0.775,1.90974 } ); +cells.push_back( {21700112,2417,61,17,1,1,-0.825,1.86017 } ); +cells.push_back( {21700122,2437,61,17,2,1,-0.825,1.90974 } ); +cells.push_back( {21800112,2418,61,18,1,1,-0.875,1.86017 } ); +cells.push_back( {21800122,2438,61,18,2,1,-0.875,1.90974 } ); +cells.push_back( {21900112,2419,61,19,1,1,-0.925,1.86017 } ); +cells.push_back( {21900122,2439,61,19,2,1,-0.925,1.90974 } ); +cells.push_back( {22000112,2420,61,20,1,1,-0.967,1.86017 } ); +cells.push_back( {22000122,2440,61,20,2,1,-0.967,1.90974 } ); +cells.push_back( {20100211,2441,62,1,1,2,-0.02675,1.96489 } ); +cells.push_back( {20100221,2461,62,1,2,2,-0.02675,2.01446 } ); +cells.push_back( {20200211,2442,62,2,1,2,-0.075,1.96489 } ); +cells.push_back( {20200221,2462,62,2,2,2,-0.075,2.01446 } ); +cells.push_back( {20300211,2443,62,3,1,2,-0.125,1.96489 } ); +cells.push_back( {20300221,2463,62,3,2,2,-0.125,2.01446 } ); +cells.push_back( {20400211,2444,62,4,1,2,-0.175,1.96489 } ); +cells.push_back( {20400221,2464,62,4,2,2,-0.175,2.01446 } ); +cells.push_back( {20500211,2445,62,5,1,2,-0.225,1.96489 } ); +cells.push_back( {20500221,2465,62,5,2,2,-0.225,2.01446 } ); +cells.push_back( {20600211,2446,62,6,1,2,-0.275,1.96489 } ); +cells.push_back( {20600221,2466,62,6,2,2,-0.275,2.01446 } ); +cells.push_back( {20700211,2447,62,7,1,2,-0.325,1.96489 } ); +cells.push_back( {20700221,2467,62,7,2,2,-0.325,2.01446 } ); +cells.push_back( {20800211,2448,62,8,1,2,-0.375,1.96489 } ); +cells.push_back( {20800221,2468,62,8,2,2,-0.375,2.01446 } ); +cells.push_back( {20900211,2449,62,9,1,2,-0.425,1.96489 } ); +cells.push_back( {20900221,2469,62,9,2,2,-0.425,2.01446 } ); +cells.push_back( {21000211,2450,62,10,1,2,-0.475,1.96489 } ); +cells.push_back( {21000221,2470,62,10,2,2,-0.475,2.01446 } ); +cells.push_back( {21100211,2451,62,11,1,2,-0.525,1.96489 } ); +cells.push_back( {21100221,2471,62,11,2,2,-0.525,2.01446 } ); +cells.push_back( {21200211,2452,62,12,1,2,-0.575,1.96489 } ); +cells.push_back( {21200221,2472,62,12,2,2,-0.575,2.01446 } ); +cells.push_back( {21300211,2453,62,13,1,2,-0.625,1.96489 } ); +cells.push_back( {21300221,2473,62,13,2,2,-0.625,2.01446 } ); +cells.push_back( {21400211,2454,62,14,1,2,-0.675,1.96489 } ); +cells.push_back( {21400221,2474,62,14,2,2,-0.675,2.01446 } ); +cells.push_back( {21500211,2455,62,15,1,2,-0.725,1.96489 } ); +cells.push_back( {21500221,2475,62,15,2,2,-0.725,2.01446 } ); +cells.push_back( {21600211,2456,62,16,1,2,-0.775,1.96489 } ); +cells.push_back( {21600221,2476,62,16,2,2,-0.775,2.01446 } ); +cells.push_back( {21700211,2457,62,17,1,2,-0.825,1.96489 } ); +cells.push_back( {21700221,2477,62,17,2,2,-0.825,2.01446 } ); +cells.push_back( {21800211,2458,62,18,1,2,-0.875,1.96489 } ); +cells.push_back( {21800221,2478,62,18,2,2,-0.875,2.01446 } ); +cells.push_back( {21900211,2459,62,19,1,2,-0.925,1.96489 } ); +cells.push_back( {21900221,2479,62,19,2,2,-0.925,2.01446 } ); +cells.push_back( {22000211,2460,62,20,1,2,-0.967,1.96489 } ); +cells.push_back( {22000221,2480,62,20,2,2,-0.967,2.01446 } ); +cells.push_back( {20100212,2441,62,1,1,1,-0.02675,1.96489 } ); +cells.push_back( {20100222,2461,62,1,2,1,-0.02675,2.01446 } ); +cells.push_back( {20200212,2442,62,2,1,1,-0.075,1.96489 } ); +cells.push_back( {20200222,2462,62,2,2,1,-0.075,2.01446 } ); +cells.push_back( {20300212,2443,62,3,1,1,-0.125,1.96489 } ); +cells.push_back( {20300222,2463,62,3,2,1,-0.125,2.01446 } ); +cells.push_back( {20400212,2444,62,4,1,1,-0.175,1.96489 } ); +cells.push_back( {20400222,2464,62,4,2,1,-0.175,2.01446 } ); +cells.push_back( {20500212,2445,62,5,1,1,-0.225,1.96489 } ); +cells.push_back( {20500222,2465,62,5,2,1,-0.225,2.01446 } ); +cells.push_back( {20600212,2446,62,6,1,1,-0.275,1.96489 } ); +cells.push_back( {20600222,2466,62,6,2,1,-0.275,2.01446 } ); +cells.push_back( {20700212,2447,62,7,1,1,-0.325,1.96489 } ); +cells.push_back( {20700222,2467,62,7,2,1,-0.325,2.01446 } ); +cells.push_back( {20800212,2448,62,8,1,1,-0.375,1.96489 } ); +cells.push_back( {20800222,2468,62,8,2,1,-0.375,2.01446 } ); +cells.push_back( {20900212,2449,62,9,1,1,-0.425,1.96489 } ); +cells.push_back( {20900222,2469,62,9,2,1,-0.425,2.01446 } ); +cells.push_back( {21000212,2450,62,10,1,1,-0.475,1.96489 } ); +cells.push_back( {21000222,2470,62,10,2,1,-0.475,2.01446 } ); +cells.push_back( {21100212,2451,62,11,1,1,-0.525,1.96489 } ); +cells.push_back( {21100222,2471,62,11,2,1,-0.525,2.01446 } ); +cells.push_back( {21200212,2452,62,12,1,1,-0.575,1.96489 } ); +cells.push_back( {21200222,2472,62,12,2,1,-0.575,2.01446 } ); +cells.push_back( {21300212,2453,62,13,1,1,-0.625,1.96489 } ); +cells.push_back( {21300222,2473,62,13,2,1,-0.625,2.01446 } ); +cells.push_back( {21400212,2454,62,14,1,1,-0.675,1.96489 } ); +cells.push_back( {21400222,2474,62,14,2,1,-0.675,2.01446 } ); +cells.push_back( {21500212,2455,62,15,1,1,-0.725,1.96489 } ); +cells.push_back( {21500222,2475,62,15,2,1,-0.725,2.01446 } ); +cells.push_back( {21600212,2456,62,16,1,1,-0.775,1.96489 } ); +cells.push_back( {21600222,2476,62,16,2,1,-0.775,2.01446 } ); +cells.push_back( {21700212,2457,62,17,1,1,-0.825,1.96489 } ); +cells.push_back( {21700222,2477,62,17,2,1,-0.825,2.01446 } ); +cells.push_back( {21800212,2458,62,18,1,1,-0.875,1.96489 } ); +cells.push_back( {21800222,2478,62,18,2,1,-0.875,2.01446 } ); +cells.push_back( {21900212,2459,62,19,1,1,-0.925,1.96489 } ); +cells.push_back( {21900222,2479,62,19,2,1,-0.925,2.01446 } ); +cells.push_back( {22000212,2460,62,20,1,1,-0.967,1.96489 } ); +cells.push_back( {22000222,2480,62,20,2,1,-0.967,2.01446 } ); +cells.push_back( {20100311,2481,63,1,1,2,-0.02675,2.06961 } ); +cells.push_back( {20100321,2501,63,1,2,2,-0.02675,2.11918 } ); +cells.push_back( {20200311,2482,63,2,1,2,-0.075,2.06961 } ); +cells.push_back( {20200321,2502,63,2,2,2,-0.075,2.11918 } ); +cells.push_back( {20300311,2483,63,3,1,2,-0.125,2.06961 } ); +cells.push_back( {20300321,2503,63,3,2,2,-0.125,2.11918 } ); +cells.push_back( {20400311,2484,63,4,1,2,-0.175,2.06961 } ); +cells.push_back( {20400321,2504,63,4,2,2,-0.175,2.11918 } ); +cells.push_back( {20500311,2485,63,5,1,2,-0.225,2.06961 } ); +cells.push_back( {20500321,2505,63,5,2,2,-0.225,2.11918 } ); +cells.push_back( {20600311,2486,63,6,1,2,-0.275,2.06961 } ); +cells.push_back( {20600321,2506,63,6,2,2,-0.275,2.11918 } ); +cells.push_back( {20700311,2487,63,7,1,2,-0.325,2.06961 } ); +cells.push_back( {20700321,2507,63,7,2,2,-0.325,2.11918 } ); +cells.push_back( {20800311,2488,63,8,1,2,-0.375,2.06961 } ); +cells.push_back( {20800321,2508,63,8,2,2,-0.375,2.11918 } ); +cells.push_back( {20900311,2489,63,9,1,2,-0.425,2.06961 } ); +cells.push_back( {20900321,2509,63,9,2,2,-0.425,2.11918 } ); +cells.push_back( {21000311,2490,63,10,1,2,-0.475,2.06961 } ); +cells.push_back( {21000321,2510,63,10,2,2,-0.475,2.11918 } ); +cells.push_back( {21100311,2491,63,11,1,2,-0.525,2.06961 } ); +cells.push_back( {21100321,2511,63,11,2,2,-0.525,2.11918 } ); +cells.push_back( {21200311,2492,63,12,1,2,-0.575,2.06961 } ); +cells.push_back( {21200321,2512,63,12,2,2,-0.575,2.11918 } ); +cells.push_back( {21300311,2493,63,13,1,2,-0.625,2.06961 } ); +cells.push_back( {21300321,2513,63,13,2,2,-0.625,2.11918 } ); +cells.push_back( {21400311,2494,63,14,1,2,-0.675,2.06961 } ); +cells.push_back( {21400321,2514,63,14,2,2,-0.675,2.11918 } ); +cells.push_back( {21500311,2495,63,15,1,2,-0.725,2.06961 } ); +cells.push_back( {21500321,2515,63,15,2,2,-0.725,2.11918 } ); +cells.push_back( {21600311,2496,63,16,1,2,-0.775,2.06961 } ); +cells.push_back( {21600321,2516,63,16,2,2,-0.775,2.11918 } ); +cells.push_back( {21700311,2497,63,17,1,2,-0.825,2.06961 } ); +cells.push_back( {21700321,2517,63,17,2,2,-0.825,2.11918 } ); +cells.push_back( {21800311,2498,63,18,1,2,-0.875,2.06961 } ); +cells.push_back( {21800321,2518,63,18,2,2,-0.875,2.11918 } ); +cells.push_back( {21900311,2499,63,19,1,2,-0.925,2.06961 } ); +cells.push_back( {21900321,2519,63,19,2,2,-0.925,2.11918 } ); +cells.push_back( {22000311,2500,63,20,1,2,-0.967,2.06961 } ); +cells.push_back( {22000321,2520,63,20,2,2,-0.967,2.11918 } ); +cells.push_back( {20100312,2481,63,1,1,1,-0.02675,2.06961 } ); +cells.push_back( {20100322,2501,63,1,2,1,-0.02675,2.11918 } ); +cells.push_back( {20200312,2482,63,2,1,1,-0.075,2.06961 } ); +cells.push_back( {20200322,2502,63,2,2,1,-0.075,2.11918 } ); +cells.push_back( {20300312,2483,63,3,1,1,-0.125,2.06961 } ); +cells.push_back( {20300322,2503,63,3,2,1,-0.125,2.11918 } ); +cells.push_back( {20400312,2484,63,4,1,1,-0.175,2.06961 } ); +cells.push_back( {20400322,2504,63,4,2,1,-0.175,2.11918 } ); +cells.push_back( {20500312,2485,63,5,1,1,-0.225,2.06961 } ); +cells.push_back( {20500322,2505,63,5,2,1,-0.225,2.11918 } ); +cells.push_back( {20600312,2486,63,6,1,1,-0.275,2.06961 } ); +cells.push_back( {20600322,2506,63,6,2,1,-0.275,2.11918 } ); +cells.push_back( {20700312,2487,63,7,1,1,-0.325,2.06961 } ); +cells.push_back( {20700322,2507,63,7,2,1,-0.325,2.11918 } ); +cells.push_back( {20800312,2488,63,8,1,1,-0.375,2.06961 } ); +cells.push_back( {20800322,2508,63,8,2,1,-0.375,2.11918 } ); +cells.push_back( {20900312,2489,63,9,1,1,-0.425,2.06961 } ); +cells.push_back( {20900322,2509,63,9,2,1,-0.425,2.11918 } ); +cells.push_back( {21000312,2490,63,10,1,1,-0.475,2.06961 } ); +cells.push_back( {21000322,2510,63,10,2,1,-0.475,2.11918 } ); +cells.push_back( {21100312,2491,63,11,1,1,-0.525,2.06961 } ); +cells.push_back( {21100322,2511,63,11,2,1,-0.525,2.11918 } ); +cells.push_back( {21200312,2492,63,12,1,1,-0.575,2.06961 } ); +cells.push_back( {21200322,2512,63,12,2,1,-0.575,2.11918 } ); +cells.push_back( {21300312,2493,63,13,1,1,-0.625,2.06961 } ); +cells.push_back( {21300322,2513,63,13,2,1,-0.625,2.11918 } ); +cells.push_back( {21400312,2494,63,14,1,1,-0.675,2.06961 } ); +cells.push_back( {21400322,2514,63,14,2,1,-0.675,2.11918 } ); +cells.push_back( {21500312,2495,63,15,1,1,-0.725,2.06961 } ); +cells.push_back( {21500322,2515,63,15,2,1,-0.725,2.11918 } ); +cells.push_back( {21600312,2496,63,16,1,1,-0.775,2.06961 } ); +cells.push_back( {21600322,2516,63,16,2,1,-0.775,2.11918 } ); +cells.push_back( {21700312,2497,63,17,1,1,-0.825,2.06961 } ); +cells.push_back( {21700322,2517,63,17,2,1,-0.825,2.11918 } ); +cells.push_back( {21800312,2498,63,18,1,1,-0.875,2.06961 } ); +cells.push_back( {21800322,2518,63,18,2,1,-0.875,2.11918 } ); +cells.push_back( {21900312,2499,63,19,1,1,-0.925,2.06961 } ); +cells.push_back( {21900322,2519,63,19,2,1,-0.925,2.11918 } ); +cells.push_back( {22000312,2500,63,20,1,1,-0.967,2.06961 } ); +cells.push_back( {22000322,2520,63,20,2,1,-0.967,2.11918 } ); +cells.push_back( {20100411,2521,64,1,1,2,-0.02675,2.17433 } ); +cells.push_back( {20100421,2541,64,1,2,2,-0.02675,2.2239 } ); +cells.push_back( {20200411,2522,64,2,1,2,-0.075,2.17433 } ); +cells.push_back( {20200421,2542,64,2,2,2,-0.075,2.2239 } ); +cells.push_back( {20300411,2523,64,3,1,2,-0.125,2.17433 } ); +cells.push_back( {20300421,2543,64,3,2,2,-0.125,2.2239 } ); +cells.push_back( {20400411,2524,64,4,1,2,-0.175,2.17433 } ); +cells.push_back( {20400421,2544,64,4,2,2,-0.175,2.2239 } ); +cells.push_back( {20500411,2525,64,5,1,2,-0.225,2.17433 } ); +cells.push_back( {20500421,2545,64,5,2,2,-0.225,2.2239 } ); +cells.push_back( {20600411,2526,64,6,1,2,-0.275,2.17433 } ); +cells.push_back( {20600421,2546,64,6,2,2,-0.275,2.2239 } ); +cells.push_back( {20700411,2527,64,7,1,2,-0.325,2.17433 } ); +cells.push_back( {20700421,2547,64,7,2,2,-0.325,2.2239 } ); +cells.push_back( {20800411,2528,64,8,1,2,-0.375,2.17433 } ); +cells.push_back( {20800421,2548,64,8,2,2,-0.375,2.2239 } ); +cells.push_back( {20900411,2529,64,9,1,2,-0.425,2.17433 } ); +cells.push_back( {20900421,2549,64,9,2,2,-0.425,2.2239 } ); +cells.push_back( {21000411,2530,64,10,1,2,-0.475,2.17433 } ); +cells.push_back( {21000421,2550,64,10,2,2,-0.475,2.2239 } ); +cells.push_back( {21100411,2531,64,11,1,2,-0.525,2.17433 } ); +cells.push_back( {21100421,2551,64,11,2,2,-0.525,2.2239 } ); +cells.push_back( {21200411,2532,64,12,1,2,-0.575,2.17433 } ); +cells.push_back( {21200421,2552,64,12,2,2,-0.575,2.2239 } ); +cells.push_back( {21300411,2533,64,13,1,2,-0.625,2.17433 } ); +cells.push_back( {21300421,2553,64,13,2,2,-0.625,2.2239 } ); +cells.push_back( {21400411,2534,64,14,1,2,-0.675,2.17433 } ); +cells.push_back( {21400421,2554,64,14,2,2,-0.675,2.2239 } ); +cells.push_back( {21500411,2535,64,15,1,2,-0.725,2.17433 } ); +cells.push_back( {21500421,2555,64,15,2,2,-0.725,2.2239 } ); +cells.push_back( {21600411,2536,64,16,1,2,-0.775,2.17433 } ); +cells.push_back( {21600421,2556,64,16,2,2,-0.775,2.2239 } ); +cells.push_back( {21700411,2537,64,17,1,2,-0.825,2.17433 } ); +cells.push_back( {21700421,2557,64,17,2,2,-0.825,2.2239 } ); +cells.push_back( {21800411,2538,64,18,1,2,-0.875,2.17433 } ); +cells.push_back( {21800421,2558,64,18,2,2,-0.875,2.2239 } ); +cells.push_back( {21900411,2539,64,19,1,2,-0.925,2.17433 } ); +cells.push_back( {21900421,2559,64,19,2,2,-0.925,2.2239 } ); +cells.push_back( {22000411,2540,64,20,1,2,-0.967,2.17433 } ); +cells.push_back( {22000421,2560,64,20,2,2,-0.967,2.2239 } ); +cells.push_back( {20100412,2521,64,1,1,1,-0.02675,2.17433 } ); +cells.push_back( {20100422,2541,64,1,2,1,-0.02675,2.2239 } ); +cells.push_back( {20200412,2522,64,2,1,1,-0.075,2.17433 } ); +cells.push_back( {20200422,2542,64,2,2,1,-0.075,2.2239 } ); +cells.push_back( {20300412,2523,64,3,1,1,-0.125,2.17433 } ); +cells.push_back( {20300422,2543,64,3,2,1,-0.125,2.2239 } ); +cells.push_back( {20400412,2524,64,4,1,1,-0.175,2.17433 } ); +cells.push_back( {20400422,2544,64,4,2,1,-0.175,2.2239 } ); +cells.push_back( {20500412,2525,64,5,1,1,-0.225,2.17433 } ); +cells.push_back( {20500422,2545,64,5,2,1,-0.225,2.2239 } ); +cells.push_back( {20600412,2526,64,6,1,1,-0.275,2.17433 } ); +cells.push_back( {20600422,2546,64,6,2,1,-0.275,2.2239 } ); +cells.push_back( {20700412,2527,64,7,1,1,-0.325,2.17433 } ); +cells.push_back( {20700422,2547,64,7,2,1,-0.325,2.2239 } ); +cells.push_back( {20800412,2528,64,8,1,1,-0.375,2.17433 } ); +cells.push_back( {20800422,2548,64,8,2,1,-0.375,2.2239 } ); +cells.push_back( {20900412,2529,64,9,1,1,-0.425,2.17433 } ); +cells.push_back( {20900422,2549,64,9,2,1,-0.425,2.2239 } ); +cells.push_back( {21000412,2530,64,10,1,1,-0.475,2.17433 } ); +cells.push_back( {21000422,2550,64,10,2,1,-0.475,2.2239 } ); +cells.push_back( {21100412,2531,64,11,1,1,-0.525,2.17433 } ); +cells.push_back( {21100422,2551,64,11,2,1,-0.525,2.2239 } ); +cells.push_back( {21200412,2532,64,12,1,1,-0.575,2.17433 } ); +cells.push_back( {21200422,2552,64,12,2,1,-0.575,2.2239 } ); +cells.push_back( {21300412,2533,64,13,1,1,-0.625,2.17433 } ); +cells.push_back( {21300422,2553,64,13,2,1,-0.625,2.2239 } ); +cells.push_back( {21400412,2534,64,14,1,1,-0.675,2.17433 } ); +cells.push_back( {21400422,2554,64,14,2,1,-0.675,2.2239 } ); +cells.push_back( {21500412,2535,64,15,1,1,-0.725,2.17433 } ); +cells.push_back( {21500422,2555,64,15,2,1,-0.725,2.2239 } ); +cells.push_back( {21600412,2536,64,16,1,1,-0.775,2.17433 } ); +cells.push_back( {21600422,2556,64,16,2,1,-0.775,2.2239 } ); +cells.push_back( {21700412,2537,64,17,1,1,-0.825,2.17433 } ); +cells.push_back( {21700422,2557,64,17,2,1,-0.825,2.2239 } ); +cells.push_back( {21800412,2538,64,18,1,1,-0.875,2.17433 } ); +cells.push_back( {21800422,2558,64,18,2,1,-0.875,2.2239 } ); +cells.push_back( {21900412,2539,64,19,1,1,-0.925,2.17433 } ); +cells.push_back( {21900422,2559,64,19,2,1,-0.925,2.2239 } ); +cells.push_back( {22000412,2540,64,20,1,1,-0.967,2.17433 } ); +cells.push_back( {22000422,2560,64,20,2,1,-0.967,2.2239 } ); +cells.push_back( {20100511,2561,65,1,1,2,-0.02675,2.27905 } ); +cells.push_back( {20100521,2581,65,1,2,2,-0.02675,2.32862 } ); +cells.push_back( {20200511,2562,65,2,1,2,-0.075,2.27905 } ); +cells.push_back( {20200521,2582,65,2,2,2,-0.075,2.32862 } ); +cells.push_back( {20300511,2563,65,3,1,2,-0.125,2.27905 } ); +cells.push_back( {20300521,2583,65,3,2,2,-0.125,2.32862 } ); +cells.push_back( {20400511,2564,65,4,1,2,-0.175,2.27905 } ); +cells.push_back( {20400521,2584,65,4,2,2,-0.175,2.32862 } ); +cells.push_back( {20500511,2565,65,5,1,2,-0.225,2.27905 } ); +cells.push_back( {20500521,2585,65,5,2,2,-0.225,2.32862 } ); +cells.push_back( {20600511,2566,65,6,1,2,-0.275,2.27905 } ); +cells.push_back( {20600521,2586,65,6,2,2,-0.275,2.32862 } ); +cells.push_back( {20700511,2567,65,7,1,2,-0.325,2.27905 } ); +cells.push_back( {20700521,2587,65,7,2,2,-0.325,2.32862 } ); +cells.push_back( {20800511,2568,65,8,1,2,-0.375,2.27905 } ); +cells.push_back( {20800521,2588,65,8,2,2,-0.375,2.32862 } ); +cells.push_back( {20900511,2569,65,9,1,2,-0.425,2.27905 } ); +cells.push_back( {20900521,2589,65,9,2,2,-0.425,2.32862 } ); +cells.push_back( {21000511,2570,65,10,1,2,-0.475,2.27905 } ); +cells.push_back( {21000521,2590,65,10,2,2,-0.475,2.32862 } ); +cells.push_back( {21100511,2571,65,11,1,2,-0.525,2.27905 } ); +cells.push_back( {21100521,2591,65,11,2,2,-0.525,2.32862 } ); +cells.push_back( {21200511,2572,65,12,1,2,-0.575,2.27905 } ); +cells.push_back( {21200521,2592,65,12,2,2,-0.575,2.32862 } ); +cells.push_back( {21300511,2573,65,13,1,2,-0.625,2.27905 } ); +cells.push_back( {21300521,2593,65,13,2,2,-0.625,2.32862 } ); +cells.push_back( {21400511,2574,65,14,1,2,-0.675,2.27905 } ); +cells.push_back( {21400521,2594,65,14,2,2,-0.675,2.32862 } ); +cells.push_back( {21500511,2575,65,15,1,2,-0.725,2.27905 } ); +cells.push_back( {21500521,2595,65,15,2,2,-0.725,2.32862 } ); +cells.push_back( {21600511,2576,65,16,1,2,-0.775,2.27905 } ); +cells.push_back( {21600521,2596,65,16,2,2,-0.775,2.32862 } ); +cells.push_back( {21700511,2577,65,17,1,2,-0.825,2.27905 } ); +cells.push_back( {21700521,2597,65,17,2,2,-0.825,2.32862 } ); +cells.push_back( {21800511,2578,65,18,1,2,-0.875,2.27905 } ); +cells.push_back( {21800521,2598,65,18,2,2,-0.875,2.32862 } ); +cells.push_back( {21900511,2579,65,19,1,2,-0.925,2.27905 } ); +cells.push_back( {21900521,2599,65,19,2,2,-0.925,2.32862 } ); +cells.push_back( {22000511,2580,65,20,1,2,-0.967,2.27905 } ); +cells.push_back( {22000521,2600,65,20,2,2,-0.967,2.32862 } ); +cells.push_back( {20100512,2561,65,1,1,1,-0.02675,2.27905 } ); +cells.push_back( {20100522,2581,65,1,2,1,-0.02675,2.32862 } ); +cells.push_back( {20200512,2562,65,2,1,1,-0.075,2.27905 } ); +cells.push_back( {20200522,2582,65,2,2,1,-0.075,2.32862 } ); +cells.push_back( {20300512,2563,65,3,1,1,-0.125,2.27905 } ); +cells.push_back( {20300522,2583,65,3,2,1,-0.125,2.32862 } ); +cells.push_back( {20400512,2564,65,4,1,1,-0.175,2.27905 } ); +cells.push_back( {20400522,2584,65,4,2,1,-0.175,2.32862 } ); +cells.push_back( {20500512,2565,65,5,1,1,-0.225,2.27905 } ); +cells.push_back( {20500522,2585,65,5,2,1,-0.225,2.32862 } ); +cells.push_back( {20600512,2566,65,6,1,1,-0.275,2.27905 } ); +cells.push_back( {20600522,2586,65,6,2,1,-0.275,2.32862 } ); +cells.push_back( {20700512,2567,65,7,1,1,-0.325,2.27905 } ); +cells.push_back( {20700522,2587,65,7,2,1,-0.325,2.32862 } ); +cells.push_back( {20800512,2568,65,8,1,1,-0.375,2.27905 } ); +cells.push_back( {20800522,2588,65,8,2,1,-0.375,2.32862 } ); +cells.push_back( {20900512,2569,65,9,1,1,-0.425,2.27905 } ); +cells.push_back( {20900522,2589,65,9,2,1,-0.425,2.32862 } ); +cells.push_back( {21000512,2570,65,10,1,1,-0.475,2.27905 } ); +cells.push_back( {21000522,2590,65,10,2,1,-0.475,2.32862 } ); +cells.push_back( {21100512,2571,65,11,1,1,-0.525,2.27905 } ); +cells.push_back( {21100522,2591,65,11,2,1,-0.525,2.32862 } ); +cells.push_back( {21200512,2572,65,12,1,1,-0.575,2.27905 } ); +cells.push_back( {21200522,2592,65,12,2,1,-0.575,2.32862 } ); +cells.push_back( {21300512,2573,65,13,1,1,-0.625,2.27905 } ); +cells.push_back( {21300522,2593,65,13,2,1,-0.625,2.32862 } ); +cells.push_back( {21400512,2574,65,14,1,1,-0.675,2.27905 } ); +cells.push_back( {21400522,2594,65,14,2,1,-0.675,2.32862 } ); +cells.push_back( {21500512,2575,65,15,1,1,-0.725,2.27905 } ); +cells.push_back( {21500522,2595,65,15,2,1,-0.725,2.32862 } ); +cells.push_back( {21600512,2576,65,16,1,1,-0.775,2.27905 } ); +cells.push_back( {21600522,2596,65,16,2,1,-0.775,2.32862 } ); +cells.push_back( {21700512,2577,65,17,1,1,-0.825,2.27905 } ); +cells.push_back( {21700522,2597,65,17,2,1,-0.825,2.32862 } ); +cells.push_back( {21800512,2578,65,18,1,1,-0.875,2.27905 } ); +cells.push_back( {21800522,2598,65,18,2,1,-0.875,2.32862 } ); +cells.push_back( {21900512,2579,65,19,1,1,-0.925,2.27905 } ); +cells.push_back( {21900522,2599,65,19,2,1,-0.925,2.32862 } ); +cells.push_back( {22000512,2580,65,20,1,1,-0.967,2.27905 } ); +cells.push_back( {22000522,2600,65,20,2,1,-0.967,2.32862 } ); +cells.push_back( {20100611,2601,66,1,1,2,-0.02675,2.38377 } ); +cells.push_back( {20100621,2621,66,1,2,2,-0.02675,2.43334 } ); +cells.push_back( {20200611,2602,66,2,1,2,-0.075,2.38377 } ); +cells.push_back( {20200621,2622,66,2,2,2,-0.075,2.43334 } ); +cells.push_back( {20300611,2603,66,3,1,2,-0.125,2.38377 } ); +cells.push_back( {20300621,2623,66,3,2,2,-0.125,2.43334 } ); +cells.push_back( {20400611,2604,66,4,1,2,-0.175,2.38377 } ); +cells.push_back( {20400621,2624,66,4,2,2,-0.175,2.43334 } ); +cells.push_back( {20500611,2605,66,5,1,2,-0.225,2.38377 } ); +cells.push_back( {20500621,2625,66,5,2,2,-0.225,2.43334 } ); +cells.push_back( {20600611,2606,66,6,1,2,-0.275,2.38377 } ); +cells.push_back( {20600621,2626,66,6,2,2,-0.275,2.43334 } ); +cells.push_back( {20700611,2607,66,7,1,2,-0.325,2.38377 } ); +cells.push_back( {20700621,2627,66,7,2,2,-0.325,2.43334 } ); +cells.push_back( {20800611,2608,66,8,1,2,-0.375,2.38377 } ); +cells.push_back( {20800621,2628,66,8,2,2,-0.375,2.43334 } ); +cells.push_back( {20900611,2609,66,9,1,2,-0.425,2.38377 } ); +cells.push_back( {20900621,2629,66,9,2,2,-0.425,2.43334 } ); +cells.push_back( {21000611,2610,66,10,1,2,-0.475,2.38377 } ); +cells.push_back( {21000621,2630,66,10,2,2,-0.475,2.43334 } ); +cells.push_back( {21100611,2611,66,11,1,2,-0.525,2.38377 } ); +cells.push_back( {21100621,2631,66,11,2,2,-0.525,2.43334 } ); +cells.push_back( {21200611,2612,66,12,1,2,-0.575,2.38377 } ); +cells.push_back( {21200621,2632,66,12,2,2,-0.575,2.43334 } ); +cells.push_back( {21300611,2613,66,13,1,2,-0.625,2.38377 } ); +cells.push_back( {21300621,2633,66,13,2,2,-0.625,2.43334 } ); +cells.push_back( {21400611,2614,66,14,1,2,-0.675,2.38377 } ); +cells.push_back( {21400621,2634,66,14,2,2,-0.675,2.43334 } ); +cells.push_back( {21500611,2615,66,15,1,2,-0.725,2.38377 } ); +cells.push_back( {21500621,2635,66,15,2,2,-0.725,2.43334 } ); +cells.push_back( {21600611,2616,66,16,1,2,-0.775,2.38377 } ); +cells.push_back( {21600621,2636,66,16,2,2,-0.775,2.43334 } ); +cells.push_back( {21700611,2617,66,17,1,2,-0.825,2.38377 } ); +cells.push_back( {21700621,2637,66,17,2,2,-0.825,2.43334 } ); +cells.push_back( {21800611,2618,66,18,1,2,-0.875,2.38377 } ); +cells.push_back( {21800621,2638,66,18,2,2,-0.875,2.43334 } ); +cells.push_back( {21900611,2619,66,19,1,2,-0.925,2.38377 } ); +cells.push_back( {21900621,2639,66,19,2,2,-0.925,2.43334 } ); +cells.push_back( {22000611,2620,66,20,1,2,-0.967,2.38377 } ); +cells.push_back( {22000621,2640,66,20,2,2,-0.967,2.43334 } ); +cells.push_back( {20100612,2601,66,1,1,1,-0.02675,2.38377 } ); +cells.push_back( {20100622,2621,66,1,2,1,-0.02675,2.43334 } ); +cells.push_back( {20200612,2602,66,2,1,1,-0.075,2.38377 } ); +cells.push_back( {20200622,2622,66,2,2,1,-0.075,2.43334 } ); +cells.push_back( {20300612,2603,66,3,1,1,-0.125,2.38377 } ); +cells.push_back( {20300622,2623,66,3,2,1,-0.125,2.43334 } ); +cells.push_back( {20400612,2604,66,4,1,1,-0.175,2.38377 } ); +cells.push_back( {20400622,2624,66,4,2,1,-0.175,2.43334 } ); +cells.push_back( {20500612,2605,66,5,1,1,-0.225,2.38377 } ); +cells.push_back( {20500622,2625,66,5,2,1,-0.225,2.43334 } ); +cells.push_back( {20600612,2606,66,6,1,1,-0.275,2.38377 } ); +cells.push_back( {20600622,2626,66,6,2,1,-0.275,2.43334 } ); +cells.push_back( {20700612,2607,66,7,1,1,-0.325,2.38377 } ); +cells.push_back( {20700622,2627,66,7,2,1,-0.325,2.43334 } ); +cells.push_back( {20800612,2608,66,8,1,1,-0.375,2.38377 } ); +cells.push_back( {20800622,2628,66,8,2,1,-0.375,2.43334 } ); +cells.push_back( {20900612,2609,66,9,1,1,-0.425,2.38377 } ); +cells.push_back( {20900622,2629,66,9,2,1,-0.425,2.43334 } ); +cells.push_back( {21000612,2610,66,10,1,1,-0.475,2.38377 } ); +cells.push_back( {21000622,2630,66,10,2,1,-0.475,2.43334 } ); +cells.push_back( {21100612,2611,66,11,1,1,-0.525,2.38377 } ); +cells.push_back( {21100622,2631,66,11,2,1,-0.525,2.43334 } ); +cells.push_back( {21200612,2612,66,12,1,1,-0.575,2.38377 } ); +cells.push_back( {21200622,2632,66,12,2,1,-0.575,2.43334 } ); +cells.push_back( {21300612,2613,66,13,1,1,-0.625,2.38377 } ); +cells.push_back( {21300622,2633,66,13,2,1,-0.625,2.43334 } ); +cells.push_back( {21400612,2614,66,14,1,1,-0.675,2.38377 } ); +cells.push_back( {21400622,2634,66,14,2,1,-0.675,2.43334 } ); +cells.push_back( {21500612,2615,66,15,1,1,-0.725,2.38377 } ); +cells.push_back( {21500622,2635,66,15,2,1,-0.725,2.43334 } ); +cells.push_back( {21600612,2616,66,16,1,1,-0.775,2.38377 } ); +cells.push_back( {21600622,2636,66,16,2,1,-0.775,2.43334 } ); +cells.push_back( {21700612,2617,66,17,1,1,-0.825,2.38377 } ); +cells.push_back( {21700622,2637,66,17,2,1,-0.825,2.43334 } ); +cells.push_back( {21800612,2618,66,18,1,1,-0.875,2.38377 } ); +cells.push_back( {21800622,2638,66,18,2,1,-0.875,2.43334 } ); +cells.push_back( {21900612,2619,66,19,1,1,-0.925,2.38377 } ); +cells.push_back( {21900622,2639,66,19,2,1,-0.925,2.43334 } ); +cells.push_back( {22000612,2620,66,20,1,1,-0.967,2.38377 } ); +cells.push_back( {22000622,2640,66,20,2,1,-0.967,2.43334 } ); +cells.push_back( {20100711,2641,67,1,1,2,-0.02675,2.48849 } ); +cells.push_back( {20100721,2661,67,1,2,2,-0.02675,2.53806 } ); +cells.push_back( {20200711,2642,67,2,1,2,-0.075,2.48849 } ); +cells.push_back( {20200721,2662,67,2,2,2,-0.075,2.53806 } ); +cells.push_back( {20300711,2643,67,3,1,2,-0.125,2.48849 } ); +cells.push_back( {20300721,2663,67,3,2,2,-0.125,2.53806 } ); +cells.push_back( {20400711,2644,67,4,1,2,-0.175,2.48849 } ); +cells.push_back( {20400721,2664,67,4,2,2,-0.175,2.53806 } ); +cells.push_back( {20500711,2645,67,5,1,2,-0.225,2.48849 } ); +cells.push_back( {20500721,2665,67,5,2,2,-0.225,2.53806 } ); +cells.push_back( {20600711,2646,67,6,1,2,-0.275,2.48849 } ); +cells.push_back( {20600721,2666,67,6,2,2,-0.275,2.53806 } ); +cells.push_back( {20700711,2647,67,7,1,2,-0.325,2.48849 } ); +cells.push_back( {20700721,2667,67,7,2,2,-0.325,2.53806 } ); +cells.push_back( {20800711,2648,67,8,1,2,-0.375,2.48849 } ); +cells.push_back( {20800721,2668,67,8,2,2,-0.375,2.53806 } ); +cells.push_back( {20900711,2649,67,9,1,2,-0.425,2.48849 } ); +cells.push_back( {20900721,2669,67,9,2,2,-0.425,2.53806 } ); +cells.push_back( {21000711,2650,67,10,1,2,-0.475,2.48849 } ); +cells.push_back( {21000721,2670,67,10,2,2,-0.475,2.53806 } ); +cells.push_back( {21100711,2651,67,11,1,2,-0.525,2.48849 } ); +cells.push_back( {21100721,2671,67,11,2,2,-0.525,2.53806 } ); +cells.push_back( {21200711,2652,67,12,1,2,-0.575,2.48849 } ); +cells.push_back( {21200721,2672,67,12,2,2,-0.575,2.53806 } ); +cells.push_back( {21300711,2653,67,13,1,2,-0.625,2.48849 } ); +cells.push_back( {21300721,2673,67,13,2,2,-0.625,2.53806 } ); +cells.push_back( {21400711,2654,67,14,1,2,-0.675,2.48849 } ); +cells.push_back( {21400721,2674,67,14,2,2,-0.675,2.53806 } ); +cells.push_back( {21500711,2655,67,15,1,2,-0.725,2.48849 } ); +cells.push_back( {21500721,2675,67,15,2,2,-0.725,2.53806 } ); +cells.push_back( {21600711,2656,67,16,1,2,-0.775,2.48849 } ); +cells.push_back( {21600721,2676,67,16,2,2,-0.775,2.53806 } ); +cells.push_back( {21700711,2657,67,17,1,2,-0.825,2.48849 } ); +cells.push_back( {21700721,2677,67,17,2,2,-0.825,2.53806 } ); +cells.push_back( {21800711,2658,67,18,1,2,-0.875,2.48849 } ); +cells.push_back( {21800721,2678,67,18,2,2,-0.875,2.53806 } ); +cells.push_back( {21900711,2659,67,19,1,2,-0.925,2.48849 } ); +cells.push_back( {21900721,2679,67,19,2,2,-0.925,2.53806 } ); +cells.push_back( {22000711,2660,67,20,1,2,-0.967,2.48849 } ); +cells.push_back( {22000721,2680,67,20,2,2,-0.967,2.53806 } ); +cells.push_back( {20100712,2641,67,1,1,1,-0.02675,2.48849 } ); +cells.push_back( {20100722,2661,67,1,2,1,-0.02675,2.53806 } ); +cells.push_back( {20200712,2642,67,2,1,1,-0.075,2.48849 } ); +cells.push_back( {20200722,2662,67,2,2,1,-0.075,2.53806 } ); +cells.push_back( {20300712,2643,67,3,1,1,-0.125,2.48849 } ); +cells.push_back( {20300722,2663,67,3,2,1,-0.125,2.53806 } ); +cells.push_back( {20400712,2644,67,4,1,1,-0.175,2.48849 } ); +cells.push_back( {20400722,2664,67,4,2,1,-0.175,2.53806 } ); +cells.push_back( {20500712,2645,67,5,1,1,-0.225,2.48849 } ); +cells.push_back( {20500722,2665,67,5,2,1,-0.225,2.53806 } ); +cells.push_back( {20600712,2646,67,6,1,1,-0.275,2.48849 } ); +cells.push_back( {20600722,2666,67,6,2,1,-0.275,2.53806 } ); +cells.push_back( {20700712,2647,67,7,1,1,-0.325,2.48849 } ); +cells.push_back( {20700722,2667,67,7,2,1,-0.325,2.53806 } ); +cells.push_back( {20800712,2648,67,8,1,1,-0.375,2.48849 } ); +cells.push_back( {20800722,2668,67,8,2,1,-0.375,2.53806 } ); +cells.push_back( {20900712,2649,67,9,1,1,-0.425,2.48849 } ); +cells.push_back( {20900722,2669,67,9,2,1,-0.425,2.53806 } ); +cells.push_back( {21000712,2650,67,10,1,1,-0.475,2.48849 } ); +cells.push_back( {21000722,2670,67,10,2,1,-0.475,2.53806 } ); +cells.push_back( {21100712,2651,67,11,1,1,-0.525,2.48849 } ); +cells.push_back( {21100722,2671,67,11,2,1,-0.525,2.53806 } ); +cells.push_back( {21200712,2652,67,12,1,1,-0.575,2.48849 } ); +cells.push_back( {21200722,2672,67,12,2,1,-0.575,2.53806 } ); +cells.push_back( {21300712,2653,67,13,1,1,-0.625,2.48849 } ); +cells.push_back( {21300722,2673,67,13,2,1,-0.625,2.53806 } ); +cells.push_back( {21400712,2654,67,14,1,1,-0.675,2.48849 } ); +cells.push_back( {21400722,2674,67,14,2,1,-0.675,2.53806 } ); +cells.push_back( {21500712,2655,67,15,1,1,-0.725,2.48849 } ); +cells.push_back( {21500722,2675,67,15,2,1,-0.725,2.53806 } ); +cells.push_back( {21600712,2656,67,16,1,1,-0.775,2.48849 } ); +cells.push_back( {21600722,2676,67,16,2,1,-0.775,2.53806 } ); +cells.push_back( {21700712,2657,67,17,1,1,-0.825,2.48849 } ); +cells.push_back( {21700722,2677,67,17,2,1,-0.825,2.53806 } ); +cells.push_back( {21800712,2658,67,18,1,1,-0.875,2.48849 } ); +cells.push_back( {21800722,2678,67,18,2,1,-0.875,2.53806 } ); +cells.push_back( {21900712,2659,67,19,1,1,-0.925,2.48849 } ); +cells.push_back( {21900722,2679,67,19,2,1,-0.925,2.53806 } ); +cells.push_back( {22000712,2660,67,20,1,1,-0.967,2.48849 } ); +cells.push_back( {22000722,2680,67,20,2,1,-0.967,2.53806 } ); +cells.push_back( {20100811,2681,68,1,1,2,-0.02675,2.59321 } ); +cells.push_back( {20100821,2701,68,1,2,2,-0.02675,2.64278 } ); +cells.push_back( {20200811,2682,68,2,1,2,-0.075,2.59321 } ); +cells.push_back( {20200821,2702,68,2,2,2,-0.075,2.64278 } ); +cells.push_back( {20300811,2683,68,3,1,2,-0.125,2.59321 } ); +cells.push_back( {20300821,2703,68,3,2,2,-0.125,2.64278 } ); +cells.push_back( {20400811,2684,68,4,1,2,-0.175,2.59321 } ); +cells.push_back( {20400821,2704,68,4,2,2,-0.175,2.64278 } ); +cells.push_back( {20500811,2685,68,5,1,2,-0.225,2.59321 } ); +cells.push_back( {20500821,2705,68,5,2,2,-0.225,2.64278 } ); +cells.push_back( {20600811,2686,68,6,1,2,-0.275,2.59321 } ); +cells.push_back( {20600821,2706,68,6,2,2,-0.275,2.64278 } ); +cells.push_back( {20700811,2687,68,7,1,2,-0.325,2.59321 } ); +cells.push_back( {20700821,2707,68,7,2,2,-0.325,2.64278 } ); +cells.push_back( {20800811,2688,68,8,1,2,-0.375,2.59321 } ); +cells.push_back( {20800821,2708,68,8,2,2,-0.375,2.64278 } ); +cells.push_back( {20900811,2689,68,9,1,2,-0.425,2.59321 } ); +cells.push_back( {20900821,2709,68,9,2,2,-0.425,2.64278 } ); +cells.push_back( {21000811,2690,68,10,1,2,-0.475,2.59321 } ); +cells.push_back( {21000821,2710,68,10,2,2,-0.475,2.64278 } ); +cells.push_back( {21100811,2691,68,11,1,2,-0.525,2.59321 } ); +cells.push_back( {21100821,2711,68,11,2,2,-0.525,2.64278 } ); +cells.push_back( {21200811,2692,68,12,1,2,-0.575,2.59321 } ); +cells.push_back( {21200821,2712,68,12,2,2,-0.575,2.64278 } ); +cells.push_back( {21300811,2693,68,13,1,2,-0.625,2.59321 } ); +cells.push_back( {21300821,2713,68,13,2,2,-0.625,2.64278 } ); +cells.push_back( {21400811,2694,68,14,1,2,-0.675,2.59321 } ); +cells.push_back( {21400821,2714,68,14,2,2,-0.675,2.64278 } ); +cells.push_back( {21500811,2695,68,15,1,2,-0.725,2.59321 } ); +cells.push_back( {21500821,2715,68,15,2,2,-0.725,2.64278 } ); +cells.push_back( {21600811,2696,68,16,1,2,-0.775,2.59321 } ); +cells.push_back( {21600821,2716,68,16,2,2,-0.775,2.64278 } ); +cells.push_back( {21700811,2697,68,17,1,2,-0.825,2.59321 } ); +cells.push_back( {21700821,2717,68,17,2,2,-0.825,2.64278 } ); +cells.push_back( {21800811,2698,68,18,1,2,-0.875,2.59321 } ); +cells.push_back( {21800821,2718,68,18,2,2,-0.875,2.64278 } ); +cells.push_back( {21900811,2699,68,19,1,2,-0.925,2.59321 } ); +cells.push_back( {21900821,2719,68,19,2,2,-0.925,2.64278 } ); +cells.push_back( {22000811,2700,68,20,1,2,-0.967,2.59321 } ); +cells.push_back( {22000821,2720,68,20,2,2,-0.967,2.64278 } ); +cells.push_back( {20100812,2681,68,1,1,1,-0.02675,2.59321 } ); +cells.push_back( {20100822,2701,68,1,2,1,-0.02675,2.64278 } ); +cells.push_back( {20200812,2682,68,2,1,1,-0.075,2.59321 } ); +cells.push_back( {20200822,2702,68,2,2,1,-0.075,2.64278 } ); +cells.push_back( {20300812,2683,68,3,1,1,-0.125,2.59321 } ); +cells.push_back( {20300822,2703,68,3,2,1,-0.125,2.64278 } ); +cells.push_back( {20400812,2684,68,4,1,1,-0.175,2.59321 } ); +cells.push_back( {20400822,2704,68,4,2,1,-0.175,2.64278 } ); +cells.push_back( {20500812,2685,68,5,1,1,-0.225,2.59321 } ); +cells.push_back( {20500822,2705,68,5,2,1,-0.225,2.64278 } ); +cells.push_back( {20600812,2686,68,6,1,1,-0.275,2.59321 } ); +cells.push_back( {20600822,2706,68,6,2,1,-0.275,2.64278 } ); +cells.push_back( {20700812,2687,68,7,1,1,-0.325,2.59321 } ); +cells.push_back( {20700822,2707,68,7,2,1,-0.325,2.64278 } ); +cells.push_back( {20800812,2688,68,8,1,1,-0.375,2.59321 } ); +cells.push_back( {20800822,2708,68,8,2,1,-0.375,2.64278 } ); +cells.push_back( {20900812,2689,68,9,1,1,-0.425,2.59321 } ); +cells.push_back( {20900822,2709,68,9,2,1,-0.425,2.64278 } ); +cells.push_back( {21000812,2690,68,10,1,1,-0.475,2.59321 } ); +cells.push_back( {21000822,2710,68,10,2,1,-0.475,2.64278 } ); +cells.push_back( {21100812,2691,68,11,1,1,-0.525,2.59321 } ); +cells.push_back( {21100822,2711,68,11,2,1,-0.525,2.64278 } ); +cells.push_back( {21200812,2692,68,12,1,1,-0.575,2.59321 } ); +cells.push_back( {21200822,2712,68,12,2,1,-0.575,2.64278 } ); +cells.push_back( {21300812,2693,68,13,1,1,-0.625,2.59321 } ); +cells.push_back( {21300822,2713,68,13,2,1,-0.625,2.64278 } ); +cells.push_back( {21400812,2694,68,14,1,1,-0.675,2.59321 } ); +cells.push_back( {21400822,2714,68,14,2,1,-0.675,2.64278 } ); +cells.push_back( {21500812,2695,68,15,1,1,-0.725,2.59321 } ); +cells.push_back( {21500822,2715,68,15,2,1,-0.725,2.64278 } ); +cells.push_back( {21600812,2696,68,16,1,1,-0.775,2.59321 } ); +cells.push_back( {21600822,2716,68,16,2,1,-0.775,2.64278 } ); +cells.push_back( {21700812,2697,68,17,1,1,-0.825,2.59321 } ); +cells.push_back( {21700822,2717,68,17,2,1,-0.825,2.64278 } ); +cells.push_back( {21800812,2698,68,18,1,1,-0.875,2.59321 } ); +cells.push_back( {21800822,2718,68,18,2,1,-0.875,2.64278 } ); +cells.push_back( {21900812,2699,68,19,1,1,-0.925,2.59321 } ); +cells.push_back( {21900822,2719,68,19,2,1,-0.925,2.64278 } ); +cells.push_back( {22000812,2700,68,20,1,1,-0.967,2.59321 } ); +cells.push_back( {22000822,2720,68,20,2,1,-0.967,2.64278 } ); +cells.push_back( {20100911,2721,69,1,1,2,-0.02675,2.69793 } ); +cells.push_back( {20100921,2741,69,1,2,2,-0.02675,2.7475 } ); +cells.push_back( {20200911,2722,69,2,1,2,-0.075,2.69793 } ); +cells.push_back( {20200921,2742,69,2,2,2,-0.075,2.7475 } ); +cells.push_back( {20300911,2723,69,3,1,2,-0.125,2.69793 } ); +cells.push_back( {20300921,2743,69,3,2,2,-0.125,2.7475 } ); +cells.push_back( {20400911,2724,69,4,1,2,-0.175,2.69793 } ); +cells.push_back( {20400921,2744,69,4,2,2,-0.175,2.7475 } ); +cells.push_back( {20500911,2725,69,5,1,2,-0.225,2.69793 } ); +cells.push_back( {20500921,2745,69,5,2,2,-0.225,2.7475 } ); +cells.push_back( {20600911,2726,69,6,1,2,-0.275,2.69793 } ); +cells.push_back( {20600921,2746,69,6,2,2,-0.275,2.7475 } ); +cells.push_back( {20700911,2727,69,7,1,2,-0.325,2.69793 } ); +cells.push_back( {20700921,2747,69,7,2,2,-0.325,2.7475 } ); +cells.push_back( {20800911,2728,69,8,1,2,-0.375,2.69793 } ); +cells.push_back( {20800921,2748,69,8,2,2,-0.375,2.7475 } ); +cells.push_back( {20900911,2729,69,9,1,2,-0.425,2.69793 } ); +cells.push_back( {20900921,2749,69,9,2,2,-0.425,2.7475 } ); +cells.push_back( {21000911,2730,69,10,1,2,-0.475,2.69793 } ); +cells.push_back( {21000921,2750,69,10,2,2,-0.475,2.7475 } ); +cells.push_back( {21100911,2731,69,11,1,2,-0.525,2.69793 } ); +cells.push_back( {21100921,2751,69,11,2,2,-0.525,2.7475 } ); +cells.push_back( {21200911,2732,69,12,1,2,-0.575,2.69793 } ); +cells.push_back( {21200921,2752,69,12,2,2,-0.575,2.7475 } ); +cells.push_back( {21300911,2733,69,13,1,2,-0.625,2.69793 } ); +cells.push_back( {21300921,2753,69,13,2,2,-0.625,2.7475 } ); +cells.push_back( {21400911,2734,69,14,1,2,-0.675,2.69793 } ); +cells.push_back( {21400921,2754,69,14,2,2,-0.675,2.7475 } ); +cells.push_back( {21500911,2735,69,15,1,2,-0.725,2.69793 } ); +cells.push_back( {21500921,2755,69,15,2,2,-0.725,2.7475 } ); +cells.push_back( {21600911,2736,69,16,1,2,-0.775,2.69793 } ); +cells.push_back( {21600921,2756,69,16,2,2,-0.775,2.7475 } ); +cells.push_back( {21700911,2737,69,17,1,2,-0.825,2.69793 } ); +cells.push_back( {21700921,2757,69,17,2,2,-0.825,2.7475 } ); +cells.push_back( {21800911,2738,69,18,1,2,-0.875,2.69793 } ); +cells.push_back( {21800921,2758,69,18,2,2,-0.875,2.7475 } ); +cells.push_back( {21900911,2739,69,19,1,2,-0.925,2.69793 } ); +cells.push_back( {21900921,2759,69,19,2,2,-0.925,2.7475 } ); +cells.push_back( {22000911,2740,69,20,1,2,-0.967,2.69793 } ); +cells.push_back( {22000921,2760,69,20,2,2,-0.967,2.7475 } ); +cells.push_back( {20100912,2721,69,1,1,1,-0.02675,2.69793 } ); +cells.push_back( {20100922,2741,69,1,2,1,-0.02675,2.7475 } ); +cells.push_back( {20200912,2722,69,2,1,1,-0.075,2.69793 } ); +cells.push_back( {20200922,2742,69,2,2,1,-0.075,2.7475 } ); +cells.push_back( {20300912,2723,69,3,1,1,-0.125,2.69793 } ); +cells.push_back( {20300922,2743,69,3,2,1,-0.125,2.7475 } ); +cells.push_back( {20400912,2724,69,4,1,1,-0.175,2.69793 } ); +cells.push_back( {20400922,2744,69,4,2,1,-0.175,2.7475 } ); +cells.push_back( {20500912,2725,69,5,1,1,-0.225,2.69793 } ); +cells.push_back( {20500922,2745,69,5,2,1,-0.225,2.7475 } ); +cells.push_back( {20600912,2726,69,6,1,1,-0.275,2.69793 } ); +cells.push_back( {20600922,2746,69,6,2,1,-0.275,2.7475 } ); +cells.push_back( {20700912,2727,69,7,1,1,-0.325,2.69793 } ); +cells.push_back( {20700922,2747,69,7,2,1,-0.325,2.7475 } ); +cells.push_back( {20800912,2728,69,8,1,1,-0.375,2.69793 } ); +cells.push_back( {20800922,2748,69,8,2,1,-0.375,2.7475 } ); +cells.push_back( {20900912,2729,69,9,1,1,-0.425,2.69793 } ); +cells.push_back( {20900922,2749,69,9,2,1,-0.425,2.7475 } ); +cells.push_back( {21000912,2730,69,10,1,1,-0.475,2.69793 } ); +cells.push_back( {21000922,2750,69,10,2,1,-0.475,2.7475 } ); +cells.push_back( {21100912,2731,69,11,1,1,-0.525,2.69793 } ); +cells.push_back( {21100922,2751,69,11,2,1,-0.525,2.7475 } ); +cells.push_back( {21200912,2732,69,12,1,1,-0.575,2.69793 } ); +cells.push_back( {21200922,2752,69,12,2,1,-0.575,2.7475 } ); +cells.push_back( {21300912,2733,69,13,1,1,-0.625,2.69793 } ); +cells.push_back( {21300922,2753,69,13,2,1,-0.625,2.7475 } ); +cells.push_back( {21400912,2734,69,14,1,1,-0.675,2.69793 } ); +cells.push_back( {21400922,2754,69,14,2,1,-0.675,2.7475 } ); +cells.push_back( {21500912,2735,69,15,1,1,-0.725,2.69793 } ); +cells.push_back( {21500922,2755,69,15,2,1,-0.725,2.7475 } ); +cells.push_back( {21600912,2736,69,16,1,1,-0.775,2.69793 } ); +cells.push_back( {21600922,2756,69,16,2,1,-0.775,2.7475 } ); +cells.push_back( {21700912,2737,69,17,1,1,-0.825,2.69793 } ); +cells.push_back( {21700922,2757,69,17,2,1,-0.825,2.7475 } ); +cells.push_back( {21800912,2738,69,18,1,1,-0.875,2.69793 } ); +cells.push_back( {21800922,2758,69,18,2,1,-0.875,2.7475 } ); +cells.push_back( {21900912,2739,69,19,1,1,-0.925,2.69793 } ); +cells.push_back( {21900922,2759,69,19,2,1,-0.925,2.7475 } ); +cells.push_back( {22000912,2740,69,20,1,1,-0.967,2.69793 } ); +cells.push_back( {22000922,2760,69,20,2,1,-0.967,2.7475 } ); +cells.push_back( {20101011,2761,70,1,1,2,-0.02675,2.80265 } ); +cells.push_back( {20101021,2781,70,1,2,2,-0.02675,2.85221 } ); +cells.push_back( {20201011,2762,70,2,1,2,-0.075,2.80265 } ); +cells.push_back( {20201021,2782,70,2,2,2,-0.075,2.85221 } ); +cells.push_back( {20301011,2763,70,3,1,2,-0.125,2.80265 } ); +cells.push_back( {20301021,2783,70,3,2,2,-0.125,2.85221 } ); +cells.push_back( {20401011,2764,70,4,1,2,-0.175,2.80265 } ); +cells.push_back( {20401021,2784,70,4,2,2,-0.175,2.85221 } ); +cells.push_back( {20501011,2765,70,5,1,2,-0.225,2.80265 } ); +cells.push_back( {20501021,2785,70,5,2,2,-0.225,2.85221 } ); +cells.push_back( {20601011,2766,70,6,1,2,-0.275,2.80265 } ); +cells.push_back( {20601021,2786,70,6,2,2,-0.275,2.85221 } ); +cells.push_back( {20701011,2767,70,7,1,2,-0.325,2.80265 } ); +cells.push_back( {20701021,2787,70,7,2,2,-0.325,2.85221 } ); +cells.push_back( {20801011,2768,70,8,1,2,-0.375,2.80265 } ); +cells.push_back( {20801021,2788,70,8,2,2,-0.375,2.85221 } ); +cells.push_back( {20901011,2769,70,9,1,2,-0.425,2.80265 } ); +cells.push_back( {20901021,2789,70,9,2,2,-0.425,2.85221 } ); +cells.push_back( {21001011,2770,70,10,1,2,-0.475,2.80265 } ); +cells.push_back( {21001021,2790,70,10,2,2,-0.475,2.85221 } ); +cells.push_back( {21101011,2771,70,11,1,2,-0.525,2.80265 } ); +cells.push_back( {21101021,2791,70,11,2,2,-0.525,2.85221 } ); +cells.push_back( {21201011,2772,70,12,1,2,-0.575,2.80265 } ); +cells.push_back( {21201021,2792,70,12,2,2,-0.575,2.85221 } ); +cells.push_back( {21301011,2773,70,13,1,2,-0.625,2.80265 } ); +cells.push_back( {21301021,2793,70,13,2,2,-0.625,2.85221 } ); +cells.push_back( {21401011,2774,70,14,1,2,-0.675,2.80265 } ); +cells.push_back( {21401021,2794,70,14,2,2,-0.675,2.85221 } ); +cells.push_back( {21501011,2775,70,15,1,2,-0.725,2.80265 } ); +cells.push_back( {21501021,2795,70,15,2,2,-0.725,2.85221 } ); +cells.push_back( {21601011,2776,70,16,1,2,-0.775,2.80265 } ); +cells.push_back( {21601021,2796,70,16,2,2,-0.775,2.85221 } ); +cells.push_back( {21701011,2777,70,17,1,2,-0.825,2.80265 } ); +cells.push_back( {21701021,2797,70,17,2,2,-0.825,2.85221 } ); +cells.push_back( {21801011,2778,70,18,1,2,-0.875,2.80265 } ); +cells.push_back( {21801021,2798,70,18,2,2,-0.875,2.85221 } ); +cells.push_back( {21901011,2779,70,19,1,2,-0.925,2.80265 } ); +cells.push_back( {21901021,2799,70,19,2,2,-0.925,2.85221 } ); +cells.push_back( {22001011,2780,70,20,1,2,-0.967,2.80265 } ); +cells.push_back( {22001021,2800,70,20,2,2,-0.967,2.85221 } ); +cells.push_back( {20101012,2761,70,1,1,1,-0.02675,2.80265 } ); +cells.push_back( {20101022,2781,70,1,2,1,-0.02675,2.85221 } ); +cells.push_back( {20201012,2762,70,2,1,1,-0.075,2.80265 } ); +cells.push_back( {20201022,2782,70,2,2,1,-0.075,2.85221 } ); +cells.push_back( {20301012,2763,70,3,1,1,-0.125,2.80265 } ); +cells.push_back( {20301022,2783,70,3,2,1,-0.125,2.85221 } ); +cells.push_back( {20401012,2764,70,4,1,1,-0.175,2.80265 } ); +cells.push_back( {20401022,2784,70,4,2,1,-0.175,2.85221 } ); +cells.push_back( {20501012,2765,70,5,1,1,-0.225,2.80265 } ); +cells.push_back( {20501022,2785,70,5,2,1,-0.225,2.85221 } ); +cells.push_back( {20601012,2766,70,6,1,1,-0.275,2.80265 } ); +cells.push_back( {20601022,2786,70,6,2,1,-0.275,2.85221 } ); +cells.push_back( {20701012,2767,70,7,1,1,-0.325,2.80265 } ); +cells.push_back( {20701022,2787,70,7,2,1,-0.325,2.85221 } ); +cells.push_back( {20801012,2768,70,8,1,1,-0.375,2.80265 } ); +cells.push_back( {20801022,2788,70,8,2,1,-0.375,2.85221 } ); +cells.push_back( {20901012,2769,70,9,1,1,-0.425,2.80265 } ); +cells.push_back( {20901022,2789,70,9,2,1,-0.425,2.85221 } ); +cells.push_back( {21001012,2770,70,10,1,1,-0.475,2.80265 } ); +cells.push_back( {21001022,2790,70,10,2,1,-0.475,2.85221 } ); +cells.push_back( {21101012,2771,70,11,1,1,-0.525,2.80265 } ); +cells.push_back( {21101022,2791,70,11,2,1,-0.525,2.85221 } ); +cells.push_back( {21201012,2772,70,12,1,1,-0.575,2.80265 } ); +cells.push_back( {21201022,2792,70,12,2,1,-0.575,2.85221 } ); +cells.push_back( {21301012,2773,70,13,1,1,-0.625,2.80265 } ); +cells.push_back( {21301022,2793,70,13,2,1,-0.625,2.85221 } ); +cells.push_back( {21401012,2774,70,14,1,1,-0.675,2.80265 } ); +cells.push_back( {21401022,2794,70,14,2,1,-0.675,2.85221 } ); +cells.push_back( {21501012,2775,70,15,1,1,-0.725,2.80265 } ); +cells.push_back( {21501022,2795,70,15,2,1,-0.725,2.85221 } ); +cells.push_back( {21601012,2776,70,16,1,1,-0.775,2.80265 } ); +cells.push_back( {21601022,2796,70,16,2,1,-0.775,2.85221 } ); +cells.push_back( {21701012,2777,70,17,1,1,-0.825,2.80265 } ); +cells.push_back( {21701022,2797,70,17,2,1,-0.825,2.85221 } ); +cells.push_back( {21801012,2778,70,18,1,1,-0.875,2.80265 } ); +cells.push_back( {21801022,2798,70,18,2,1,-0.875,2.85221 } ); +cells.push_back( {21901012,2779,70,19,1,1,-0.925,2.80265 } ); +cells.push_back( {21901022,2799,70,19,2,1,-0.925,2.85221 } ); +cells.push_back( {22001012,2780,70,20,1,1,-0.967,2.80265 } ); +cells.push_back( {22001022,2800,70,20,2,1,-0.967,2.85221 } ); +cells.push_back( {20101111,2801,71,1,1,2,-0.02675,2.90737 } ); +cells.push_back( {20101121,2821,71,1,2,2,-0.02675,2.95693 } ); +cells.push_back( {20201111,2802,71,2,1,2,-0.075,2.90737 } ); +cells.push_back( {20201121,2822,71,2,2,2,-0.075,2.95693 } ); +cells.push_back( {20301111,2803,71,3,1,2,-0.125,2.90737 } ); +cells.push_back( {20301121,2823,71,3,2,2,-0.125,2.95693 } ); +cells.push_back( {20401111,2804,71,4,1,2,-0.175,2.90737 } ); +cells.push_back( {20401121,2824,71,4,2,2,-0.175,2.95693 } ); +cells.push_back( {20501111,2805,71,5,1,2,-0.225,2.90737 } ); +cells.push_back( {20501121,2825,71,5,2,2,-0.225,2.95693 } ); +cells.push_back( {20601111,2806,71,6,1,2,-0.275,2.90737 } ); +cells.push_back( {20601121,2826,71,6,2,2,-0.275,2.95693 } ); +cells.push_back( {20701111,2807,71,7,1,2,-0.325,2.90737 } ); +cells.push_back( {20701121,2827,71,7,2,2,-0.325,2.95693 } ); +cells.push_back( {20801111,2808,71,8,1,2,-0.375,2.90737 } ); +cells.push_back( {20801121,2828,71,8,2,2,-0.375,2.95693 } ); +cells.push_back( {20901111,2809,71,9,1,2,-0.425,2.90737 } ); +cells.push_back( {20901121,2829,71,9,2,2,-0.425,2.95693 } ); +cells.push_back( {21001111,2810,71,10,1,2,-0.475,2.90737 } ); +cells.push_back( {21001121,2830,71,10,2,2,-0.475,2.95693 } ); +cells.push_back( {21101111,2811,71,11,1,2,-0.525,2.90737 } ); +cells.push_back( {21101121,2831,71,11,2,2,-0.525,2.95693 } ); +cells.push_back( {21201111,2812,71,12,1,2,-0.575,2.90737 } ); +cells.push_back( {21201121,2832,71,12,2,2,-0.575,2.95693 } ); +cells.push_back( {21301111,2813,71,13,1,2,-0.625,2.90737 } ); +cells.push_back( {21301121,2833,71,13,2,2,-0.625,2.95693 } ); +cells.push_back( {21401111,2814,71,14,1,2,-0.675,2.90737 } ); +cells.push_back( {21401121,2834,71,14,2,2,-0.675,2.95693 } ); +cells.push_back( {21501111,2815,71,15,1,2,-0.725,2.90737 } ); +cells.push_back( {21501121,2835,71,15,2,2,-0.725,2.95693 } ); +cells.push_back( {21601111,2816,71,16,1,2,-0.775,2.90737 } ); +cells.push_back( {21601121,2836,71,16,2,2,-0.775,2.95693 } ); +cells.push_back( {21701111,2817,71,17,1,2,-0.825,2.90737 } ); +cells.push_back( {21701121,2837,71,17,2,2,-0.825,2.95693 } ); +cells.push_back( {21801111,2818,71,18,1,2,-0.875,2.90737 } ); +cells.push_back( {21801121,2838,71,18,2,2,-0.875,2.95693 } ); +cells.push_back( {21901111,2819,71,19,1,2,-0.925,2.90737 } ); +cells.push_back( {21901121,2839,71,19,2,2,-0.925,2.95693 } ); +cells.push_back( {22001111,2820,71,20,1,2,-0.967,2.90737 } ); +cells.push_back( {22001121,2840,71,20,2,2,-0.967,2.95693 } ); +cells.push_back( {20101112,2801,71,1,1,1,-0.02675,2.90737 } ); +cells.push_back( {20101122,2821,71,1,2,1,-0.02675,2.95693 } ); +cells.push_back( {20201112,2802,71,2,1,1,-0.075,2.90737 } ); +cells.push_back( {20201122,2822,71,2,2,1,-0.075,2.95693 } ); +cells.push_back( {20301112,2803,71,3,1,1,-0.125,2.90737 } ); +cells.push_back( {20301122,2823,71,3,2,1,-0.125,2.95693 } ); +cells.push_back( {20401112,2804,71,4,1,1,-0.175,2.90737 } ); +cells.push_back( {20401122,2824,71,4,2,1,-0.175,2.95693 } ); +cells.push_back( {20501112,2805,71,5,1,1,-0.225,2.90737 } ); +cells.push_back( {20501122,2825,71,5,2,1,-0.225,2.95693 } ); +cells.push_back( {20601112,2806,71,6,1,1,-0.275,2.90737 } ); +cells.push_back( {20601122,2826,71,6,2,1,-0.275,2.95693 } ); +cells.push_back( {20701112,2807,71,7,1,1,-0.325,2.90737 } ); +cells.push_back( {20701122,2827,71,7,2,1,-0.325,2.95693 } ); +cells.push_back( {20801112,2808,71,8,1,1,-0.375,2.90737 } ); +cells.push_back( {20801122,2828,71,8,2,1,-0.375,2.95693 } ); +cells.push_back( {20901112,2809,71,9,1,1,-0.425,2.90737 } ); +cells.push_back( {20901122,2829,71,9,2,1,-0.425,2.95693 } ); +cells.push_back( {21001112,2810,71,10,1,1,-0.475,2.90737 } ); +cells.push_back( {21001122,2830,71,10,2,1,-0.475,2.95693 } ); +cells.push_back( {21101112,2811,71,11,1,1,-0.525,2.90737 } ); +cells.push_back( {21101122,2831,71,11,2,1,-0.525,2.95693 } ); +cells.push_back( {21201112,2812,71,12,1,1,-0.575,2.90737 } ); +cells.push_back( {21201122,2832,71,12,2,1,-0.575,2.95693 } ); +cells.push_back( {21301112,2813,71,13,1,1,-0.625,2.90737 } ); +cells.push_back( {21301122,2833,71,13,2,1,-0.625,2.95693 } ); +cells.push_back( {21401112,2814,71,14,1,1,-0.675,2.90737 } ); +cells.push_back( {21401122,2834,71,14,2,1,-0.675,2.95693 } ); +cells.push_back( {21501112,2815,71,15,1,1,-0.725,2.90737 } ); +cells.push_back( {21501122,2835,71,15,2,1,-0.725,2.95693 } ); +cells.push_back( {21601112,2816,71,16,1,1,-0.775,2.90737 } ); +cells.push_back( {21601122,2836,71,16,2,1,-0.775,2.95693 } ); +cells.push_back( {21701112,2817,71,17,1,1,-0.825,2.90737 } ); +cells.push_back( {21701122,2837,71,17,2,1,-0.825,2.95693 } ); +cells.push_back( {21801112,2818,71,18,1,1,-0.875,2.90737 } ); +cells.push_back( {21801122,2838,71,18,2,1,-0.875,2.95693 } ); +cells.push_back( {21901112,2819,71,19,1,1,-0.925,2.90737 } ); +cells.push_back( {21901122,2839,71,19,2,1,-0.925,2.95693 } ); +cells.push_back( {22001112,2820,71,20,1,1,-0.967,2.90737 } ); +cells.push_back( {22001122,2840,71,20,2,1,-0.967,2.95693 } ); +cells.push_back( {20101211,2841,72,1,1,2,-0.02675,3.01209 } ); +cells.push_back( {20101221,2861,72,1,2,2,-0.02675,3.06165 } ); +cells.push_back( {20201211,2842,72,2,1,2,-0.075,3.01209 } ); +cells.push_back( {20201221,2862,72,2,2,2,-0.075,3.06165 } ); +cells.push_back( {20301211,2843,72,3,1,2,-0.125,3.01209 } ); +cells.push_back( {20301221,2863,72,3,2,2,-0.125,3.06165 } ); +cells.push_back( {20401211,2844,72,4,1,2,-0.175,3.01209 } ); +cells.push_back( {20401221,2864,72,4,2,2,-0.175,3.06165 } ); +cells.push_back( {20501211,2845,72,5,1,2,-0.225,3.01209 } ); +cells.push_back( {20501221,2865,72,5,2,2,-0.225,3.06165 } ); +cells.push_back( {20601211,2846,72,6,1,2,-0.275,3.01209 } ); +cells.push_back( {20601221,2866,72,6,2,2,-0.275,3.06165 } ); +cells.push_back( {20701211,2847,72,7,1,2,-0.325,3.01209 } ); +cells.push_back( {20701221,2867,72,7,2,2,-0.325,3.06165 } ); +cells.push_back( {20801211,2848,72,8,1,2,-0.375,3.01209 } ); +cells.push_back( {20801221,2868,72,8,2,2,-0.375,3.06165 } ); +cells.push_back( {20901211,2849,72,9,1,2,-0.425,3.01209 } ); +cells.push_back( {20901221,2869,72,9,2,2,-0.425,3.06165 } ); +cells.push_back( {21001211,2850,72,10,1,2,-0.475,3.01209 } ); +cells.push_back( {21001221,2870,72,10,2,2,-0.475,3.06165 } ); +cells.push_back( {21101211,2851,72,11,1,2,-0.525,3.01209 } ); +cells.push_back( {21101221,2871,72,11,2,2,-0.525,3.06165 } ); +cells.push_back( {21201211,2852,72,12,1,2,-0.575,3.01209 } ); +cells.push_back( {21201221,2872,72,12,2,2,-0.575,3.06165 } ); +cells.push_back( {21301211,2853,72,13,1,2,-0.625,3.01209 } ); +cells.push_back( {21301221,2873,72,13,2,2,-0.625,3.06165 } ); +cells.push_back( {21401211,2854,72,14,1,2,-0.675,3.01209 } ); +cells.push_back( {21401221,2874,72,14,2,2,-0.675,3.06165 } ); +cells.push_back( {21501211,2855,72,15,1,2,-0.725,3.01209 } ); +cells.push_back( {21501221,2875,72,15,2,2,-0.725,3.06165 } ); +cells.push_back( {21601211,2856,72,16,1,2,-0.775,3.01209 } ); +cells.push_back( {21601221,2876,72,16,2,2,-0.775,3.06165 } ); +cells.push_back( {21701211,2857,72,17,1,2,-0.825,3.01209 } ); +cells.push_back( {21701221,2877,72,17,2,2,-0.825,3.06165 } ); +cells.push_back( {21801211,2858,72,18,1,2,-0.875,3.01209 } ); +cells.push_back( {21801221,2878,72,18,2,2,-0.875,3.06165 } ); +cells.push_back( {21901211,2859,72,19,1,2,-0.925,3.01209 } ); +cells.push_back( {21901221,2879,72,19,2,2,-0.925,3.06165 } ); +cells.push_back( {22001211,2860,72,20,1,2,-0.967,3.01209 } ); +cells.push_back( {22001221,2880,72,20,2,2,-0.967,3.06165 } ); +cells.push_back( {20101212,2841,72,1,1,1,-0.02675,3.01209 } ); +cells.push_back( {20101222,2861,72,1,2,1,-0.02675,3.06165 } ); +cells.push_back( {20201212,2842,72,2,1,1,-0.075,3.01209 } ); +cells.push_back( {20201222,2862,72,2,2,1,-0.075,3.06165 } ); +cells.push_back( {20301212,2843,72,3,1,1,-0.125,3.01209 } ); +cells.push_back( {20301222,2863,72,3,2,1,-0.125,3.06165 } ); +cells.push_back( {20401212,2844,72,4,1,1,-0.175,3.01209 } ); +cells.push_back( {20401222,2864,72,4,2,1,-0.175,3.06165 } ); +cells.push_back( {20501212,2845,72,5,1,1,-0.225,3.01209 } ); +cells.push_back( {20501222,2865,72,5,2,1,-0.225,3.06165 } ); +cells.push_back( {20601212,2846,72,6,1,1,-0.275,3.01209 } ); +cells.push_back( {20601222,2866,72,6,2,1,-0.275,3.06165 } ); +cells.push_back( {20701212,2847,72,7,1,1,-0.325,3.01209 } ); +cells.push_back( {20701222,2867,72,7,2,1,-0.325,3.06165 } ); +cells.push_back( {20801212,2848,72,8,1,1,-0.375,3.01209 } ); +cells.push_back( {20801222,2868,72,8,2,1,-0.375,3.06165 } ); +cells.push_back( {20901212,2849,72,9,1,1,-0.425,3.01209 } ); +cells.push_back( {20901222,2869,72,9,2,1,-0.425,3.06165 } ); +cells.push_back( {21001212,2850,72,10,1,1,-0.475,3.01209 } ); +cells.push_back( {21001222,2870,72,10,2,1,-0.475,3.06165 } ); +cells.push_back( {21101212,2851,72,11,1,1,-0.525,3.01209 } ); +cells.push_back( {21101222,2871,72,11,2,1,-0.525,3.06165 } ); +cells.push_back( {21201212,2852,72,12,1,1,-0.575,3.01209 } ); +cells.push_back( {21201222,2872,72,12,2,1,-0.575,3.06165 } ); +cells.push_back( {21301212,2853,72,13,1,1,-0.625,3.01209 } ); +cells.push_back( {21301222,2873,72,13,2,1,-0.625,3.06165 } ); +cells.push_back( {21401212,2854,72,14,1,1,-0.675,3.01209 } ); +cells.push_back( {21401222,2874,72,14,2,1,-0.675,3.06165 } ); +cells.push_back( {21501212,2855,72,15,1,1,-0.725,3.01209 } ); +cells.push_back( {21501222,2875,72,15,2,1,-0.725,3.06165 } ); +cells.push_back( {21601212,2856,72,16,1,1,-0.775,3.01209 } ); +cells.push_back( {21601222,2876,72,16,2,1,-0.775,3.06165 } ); +cells.push_back( {21701212,2857,72,17,1,1,-0.825,3.01209 } ); +cells.push_back( {21701222,2877,72,17,2,1,-0.825,3.06165 } ); +cells.push_back( {21801212,2858,72,18,1,1,-0.875,3.01209 } ); +cells.push_back( {21801222,2878,72,18,2,1,-0.875,3.06165 } ); +cells.push_back( {21901212,2859,72,19,1,1,-0.925,3.01209 } ); +cells.push_back( {21901222,2879,72,19,2,1,-0.925,3.06165 } ); +cells.push_back( {22001212,2860,72,20,1,1,-0.967,3.01209 } ); +cells.push_back( {22001222,2880,72,20,2,1,-0.967,3.06165 } ); +cells.push_back( {20101311,2881,73,1,1,2,-0.02675,3.11681 } ); +cells.push_back( {20101321,2901,73,1,2,2,-0.02675,-3.11681 } ); +cells.push_back( {20201311,2882,73,2,1,2,-0.075,3.11681 } ); +cells.push_back( {20201321,2902,73,2,2,2,-0.075,-3.11681 } ); +cells.push_back( {20301311,2883,73,3,1,2,-0.125,3.11681 } ); +cells.push_back( {20301321,2903,73,3,2,2,-0.125,-3.11681 } ); +cells.push_back( {20401311,2884,73,4,1,2,-0.175,3.11681 } ); +cells.push_back( {20401321,2904,73,4,2,2,-0.175,-3.11681 } ); +cells.push_back( {20501311,2885,73,5,1,2,-0.225,3.11681 } ); +cells.push_back( {20501321,2905,73,5,2,2,-0.225,-3.11681 } ); +cells.push_back( {20601311,2886,73,6,1,2,-0.275,3.11681 } ); +cells.push_back( {20601321,2906,73,6,2,2,-0.275,-3.11681 } ); +cells.push_back( {20701311,2887,73,7,1,2,-0.325,3.11681 } ); +cells.push_back( {20701321,2907,73,7,2,2,-0.325,-3.11681 } ); +cells.push_back( {20801311,2888,73,8,1,2,-0.375,3.11681 } ); +cells.push_back( {20801321,2908,73,8,2,2,-0.375,-3.11681 } ); +cells.push_back( {20901311,2889,73,9,1,2,-0.425,3.11681 } ); +cells.push_back( {20901321,2909,73,9,2,2,-0.425,-3.11681 } ); +cells.push_back( {21001311,2890,73,10,1,2,-0.475,3.11681 } ); +cells.push_back( {21001321,2910,73,10,2,2,-0.475,-3.11681 } ); +cells.push_back( {21101311,2891,73,11,1,2,-0.525,3.11681 } ); +cells.push_back( {21101321,2911,73,11,2,2,-0.525,-3.11681 } ); +cells.push_back( {21201311,2892,73,12,1,2,-0.575,3.11681 } ); +cells.push_back( {21201321,2912,73,12,2,2,-0.575,-3.11681 } ); +cells.push_back( {21301311,2893,73,13,1,2,-0.625,3.11681 } ); +cells.push_back( {21301321,2913,73,13,2,2,-0.625,-3.11681 } ); +cells.push_back( {21401311,2894,73,14,1,2,-0.675,3.11681 } ); +cells.push_back( {21401321,2914,73,14,2,2,-0.675,-3.11681 } ); +cells.push_back( {21501311,2895,73,15,1,2,-0.725,3.11681 } ); +cells.push_back( {21501321,2915,73,15,2,2,-0.725,-3.11681 } ); +cells.push_back( {21601311,2896,73,16,1,2,-0.775,3.11681 } ); +cells.push_back( {21601321,2916,73,16,2,2,-0.775,-3.11681 } ); +cells.push_back( {21701311,2897,73,17,1,2,-0.825,3.11681 } ); +cells.push_back( {21701321,2917,73,17,2,2,-0.825,-3.11681 } ); +cells.push_back( {21801311,2898,73,18,1,2,-0.875,3.11681 } ); +cells.push_back( {21801321,2918,73,18,2,2,-0.875,-3.11681 } ); +cells.push_back( {21901311,2899,73,19,1,2,-0.925,3.11681 } ); +cells.push_back( {21901321,2919,73,19,2,2,-0.925,-3.11681 } ); +cells.push_back( {22001311,2900,73,20,1,2,-0.967,3.11681 } ); +cells.push_back( {22001321,2920,73,20,2,2,-0.967,-3.11681 } ); +cells.push_back( {20101312,2881,73,1,1,1,-0.02675,3.11681 } ); +cells.push_back( {20101322,2901,73,1,2,1,-0.02675,-3.11681 } ); +cells.push_back( {20201312,2882,73,2,1,1,-0.075,3.11681 } ); +cells.push_back( {20201322,2902,73,2,2,1,-0.075,-3.11681 } ); +cells.push_back( {20301312,2883,73,3,1,1,-0.125,3.11681 } ); +cells.push_back( {20301322,2903,73,3,2,1,-0.125,-3.11681 } ); +cells.push_back( {20401312,2884,73,4,1,1,-0.175,3.11681 } ); +cells.push_back( {20401322,2904,73,4,2,1,-0.175,-3.11681 } ); +cells.push_back( {20501312,2885,73,5,1,1,-0.225,3.11681 } ); +cells.push_back( {20501322,2905,73,5,2,1,-0.225,-3.11681 } ); +cells.push_back( {20601312,2886,73,6,1,1,-0.275,3.11681 } ); +cells.push_back( {20601322,2906,73,6,2,1,-0.275,-3.11681 } ); +cells.push_back( {20701312,2887,73,7,1,1,-0.325,3.11681 } ); +cells.push_back( {20701322,2907,73,7,2,1,-0.325,-3.11681 } ); +cells.push_back( {20801312,2888,73,8,1,1,-0.375,3.11681 } ); +cells.push_back( {20801322,2908,73,8,2,1,-0.375,-3.11681 } ); +cells.push_back( {20901312,2889,73,9,1,1,-0.425,3.11681 } ); +cells.push_back( {20901322,2909,73,9,2,1,-0.425,-3.11681 } ); +cells.push_back( {21001312,2890,73,10,1,1,-0.475,3.11681 } ); +cells.push_back( {21001322,2910,73,10,2,1,-0.475,-3.11681 } ); +cells.push_back( {21101312,2891,73,11,1,1,-0.525,3.11681 } ); +cells.push_back( {21101322,2911,73,11,2,1,-0.525,-3.11681 } ); +cells.push_back( {21201312,2892,73,12,1,1,-0.575,3.11681 } ); +cells.push_back( {21201322,2912,73,12,2,1,-0.575,-3.11681 } ); +cells.push_back( {21301312,2893,73,13,1,1,-0.625,3.11681 } ); +cells.push_back( {21301322,2913,73,13,2,1,-0.625,-3.11681 } ); +cells.push_back( {21401312,2894,73,14,1,1,-0.675,3.11681 } ); +cells.push_back( {21401322,2914,73,14,2,1,-0.675,-3.11681 } ); +cells.push_back( {21501312,2895,73,15,1,1,-0.725,3.11681 } ); +cells.push_back( {21501322,2915,73,15,2,1,-0.725,-3.11681 } ); +cells.push_back( {21601312,2896,73,16,1,1,-0.775,3.11681 } ); +cells.push_back( {21601322,2916,73,16,2,1,-0.775,-3.11681 } ); +cells.push_back( {21701312,2897,73,17,1,1,-0.825,3.11681 } ); +cells.push_back( {21701322,2917,73,17,2,1,-0.825,-3.11681 } ); +cells.push_back( {21801312,2898,73,18,1,1,-0.875,3.11681 } ); +cells.push_back( {21801322,2918,73,18,2,1,-0.875,-3.11681 } ); +cells.push_back( {21901312,2899,73,19,1,1,-0.925,3.11681 } ); +cells.push_back( {21901322,2919,73,19,2,1,-0.925,-3.11681 } ); +cells.push_back( {22001312,2900,73,20,1,1,-0.967,3.11681 } ); +cells.push_back( {22001322,2920,73,20,2,1,-0.967,-3.11681 } ); +cells.push_back( {20101411,2921,74,1,1,2,-0.02675,-3.06165 } ); +cells.push_back( {20101421,2941,74,1,2,2,-0.02675,-3.01209 } ); +cells.push_back( {20201411,2922,74,2,1,2,-0.075,-3.06165 } ); +cells.push_back( {20201421,2942,74,2,2,2,-0.075,-3.01209 } ); +cells.push_back( {20301411,2923,74,3,1,2,-0.125,-3.06165 } ); +cells.push_back( {20301421,2943,74,3,2,2,-0.125,-3.01209 } ); +cells.push_back( {20401411,2924,74,4,1,2,-0.175,-3.06165 } ); +cells.push_back( {20401421,2944,74,4,2,2,-0.175,-3.01209 } ); +cells.push_back( {20501411,2925,74,5,1,2,-0.225,-3.06165 } ); +cells.push_back( {20501421,2945,74,5,2,2,-0.225,-3.01209 } ); +cells.push_back( {20601411,2926,74,6,1,2,-0.275,-3.06165 } ); +cells.push_back( {20601421,2946,74,6,2,2,-0.275,-3.01209 } ); +cells.push_back( {20701411,2927,74,7,1,2,-0.325,-3.06165 } ); +cells.push_back( {20701421,2947,74,7,2,2,-0.325,-3.01209 } ); +cells.push_back( {20801411,2928,74,8,1,2,-0.375,-3.06165 } ); +cells.push_back( {20801421,2948,74,8,2,2,-0.375,-3.01209 } ); +cells.push_back( {20901411,2929,74,9,1,2,-0.425,-3.06165 } ); +cells.push_back( {20901421,2949,74,9,2,2,-0.425,-3.01209 } ); +cells.push_back( {21001411,2930,74,10,1,2,-0.475,-3.06165 } ); +cells.push_back( {21001421,2950,74,10,2,2,-0.475,-3.01209 } ); +cells.push_back( {21101411,2931,74,11,1,2,-0.525,-3.06165 } ); +cells.push_back( {21101421,2951,74,11,2,2,-0.525,-3.01209 } ); +cells.push_back( {21201411,2932,74,12,1,2,-0.575,-3.06165 } ); +cells.push_back( {21201421,2952,74,12,2,2,-0.575,-3.01209 } ); +cells.push_back( {21301411,2933,74,13,1,2,-0.625,-3.06165 } ); +cells.push_back( {21301421,2953,74,13,2,2,-0.625,-3.01209 } ); +cells.push_back( {21401411,2934,74,14,1,2,-0.675,-3.06165 } ); +cells.push_back( {21401421,2954,74,14,2,2,-0.675,-3.01209 } ); +cells.push_back( {21501411,2935,74,15,1,2,-0.725,-3.06165 } ); +cells.push_back( {21501421,2955,74,15,2,2,-0.725,-3.01209 } ); +cells.push_back( {21601411,2936,74,16,1,2,-0.775,-3.06165 } ); +cells.push_back( {21601421,2956,74,16,2,2,-0.775,-3.01209 } ); +cells.push_back( {21701411,2937,74,17,1,2,-0.825,-3.06165 } ); +cells.push_back( {21701421,2957,74,17,2,2,-0.825,-3.01209 } ); +cells.push_back( {21801411,2938,74,18,1,2,-0.875,-3.06165 } ); +cells.push_back( {21801421,2958,74,18,2,2,-0.875,-3.01209 } ); +cells.push_back( {21901411,2939,74,19,1,2,-0.925,-3.06165 } ); +cells.push_back( {21901421,2959,74,19,2,2,-0.925,-3.01209 } ); +cells.push_back( {22001411,2940,74,20,1,2,-0.967,-3.06165 } ); +cells.push_back( {22001421,2960,74,20,2,2,-0.967,-3.01209 } ); +cells.push_back( {20101412,2921,74,1,1,1,-0.02675,-3.06165 } ); +cells.push_back( {20101422,2941,74,1,2,1,-0.02675,-3.01209 } ); +cells.push_back( {20201412,2922,74,2,1,1,-0.075,-3.06165 } ); +cells.push_back( {20201422,2942,74,2,2,1,-0.075,-3.01209 } ); +cells.push_back( {20301412,2923,74,3,1,1,-0.125,-3.06165 } ); +cells.push_back( {20301422,2943,74,3,2,1,-0.125,-3.01209 } ); +cells.push_back( {20401412,2924,74,4,1,1,-0.175,-3.06165 } ); +cells.push_back( {20401422,2944,74,4,2,1,-0.175,-3.01209 } ); +cells.push_back( {20501412,2925,74,5,1,1,-0.225,-3.06165 } ); +cells.push_back( {20501422,2945,74,5,2,1,-0.225,-3.01209 } ); +cells.push_back( {20601412,2926,74,6,1,1,-0.275,-3.06165 } ); +cells.push_back( {20601422,2946,74,6,2,1,-0.275,-3.01209 } ); +cells.push_back( {20701412,2927,74,7,1,1,-0.325,-3.06165 } ); +cells.push_back( {20701422,2947,74,7,2,1,-0.325,-3.01209 } ); +cells.push_back( {20801412,2928,74,8,1,1,-0.375,-3.06165 } ); +cells.push_back( {20801422,2948,74,8,2,1,-0.375,-3.01209 } ); +cells.push_back( {20901412,2929,74,9,1,1,-0.425,-3.06165 } ); +cells.push_back( {20901422,2949,74,9,2,1,-0.425,-3.01209 } ); +cells.push_back( {21001412,2930,74,10,1,1,-0.475,-3.06165 } ); +cells.push_back( {21001422,2950,74,10,2,1,-0.475,-3.01209 } ); +cells.push_back( {21101412,2931,74,11,1,1,-0.525,-3.06165 } ); +cells.push_back( {21101422,2951,74,11,2,1,-0.525,-3.01209 } ); +cells.push_back( {21201412,2932,74,12,1,1,-0.575,-3.06165 } ); +cells.push_back( {21201422,2952,74,12,2,1,-0.575,-3.01209 } ); +cells.push_back( {21301412,2933,74,13,1,1,-0.625,-3.06165 } ); +cells.push_back( {21301422,2953,74,13,2,1,-0.625,-3.01209 } ); +cells.push_back( {21401412,2934,74,14,1,1,-0.675,-3.06165 } ); +cells.push_back( {21401422,2954,74,14,2,1,-0.675,-3.01209 } ); +cells.push_back( {21501412,2935,74,15,1,1,-0.725,-3.06165 } ); +cells.push_back( {21501422,2955,74,15,2,1,-0.725,-3.01209 } ); +cells.push_back( {21601412,2936,74,16,1,1,-0.775,-3.06165 } ); +cells.push_back( {21601422,2956,74,16,2,1,-0.775,-3.01209 } ); +cells.push_back( {21701412,2937,74,17,1,1,-0.825,-3.06165 } ); +cells.push_back( {21701422,2957,74,17,2,1,-0.825,-3.01209 } ); +cells.push_back( {21801412,2938,74,18,1,1,-0.875,-3.06165 } ); +cells.push_back( {21801422,2958,74,18,2,1,-0.875,-3.01209 } ); +cells.push_back( {21901412,2939,74,19,1,1,-0.925,-3.06165 } ); +cells.push_back( {21901422,2959,74,19,2,1,-0.925,-3.01209 } ); +cells.push_back( {22001412,2940,74,20,1,1,-0.967,-3.06165 } ); +cells.push_back( {22001422,2960,74,20,2,1,-0.967,-3.01209 } ); +cells.push_back( {20101511,2961,75,1,1,2,-0.02675,-2.95693 } ); +cells.push_back( {20101521,2981,75,1,2,2,-0.02675,-2.90737 } ); +cells.push_back( {20201511,2962,75,2,1,2,-0.075,-2.95693 } ); +cells.push_back( {20201521,2982,75,2,2,2,-0.075,-2.90737 } ); +cells.push_back( {20301511,2963,75,3,1,2,-0.125,-2.95693 } ); +cells.push_back( {20301521,2983,75,3,2,2,-0.125,-2.90737 } ); +cells.push_back( {20401511,2964,75,4,1,2,-0.175,-2.95693 } ); +cells.push_back( {20401521,2984,75,4,2,2,-0.175,-2.90737 } ); +cells.push_back( {20501511,2965,75,5,1,2,-0.225,-2.95693 } ); +cells.push_back( {20501521,2985,75,5,2,2,-0.225,-2.90737 } ); +cells.push_back( {20601511,2966,75,6,1,2,-0.275,-2.95693 } ); +cells.push_back( {20601521,2986,75,6,2,2,-0.275,-2.90737 } ); +cells.push_back( {20701511,2967,75,7,1,2,-0.325,-2.95693 } ); +cells.push_back( {20701521,2987,75,7,2,2,-0.325,-2.90737 } ); +cells.push_back( {20801511,2968,75,8,1,2,-0.375,-2.95693 } ); +cells.push_back( {20801521,2988,75,8,2,2,-0.375,-2.90737 } ); +cells.push_back( {20901511,2969,75,9,1,2,-0.425,-2.95693 } ); +cells.push_back( {20901521,2989,75,9,2,2,-0.425,-2.90737 } ); +cells.push_back( {21001511,2970,75,10,1,2,-0.475,-2.95693 } ); +cells.push_back( {21001521,2990,75,10,2,2,-0.475,-2.90737 } ); +cells.push_back( {21101511,2971,75,11,1,2,-0.525,-2.95693 } ); +cells.push_back( {21101521,2991,75,11,2,2,-0.525,-2.90737 } ); +cells.push_back( {21201511,2972,75,12,1,2,-0.575,-2.95693 } ); +cells.push_back( {21201521,2992,75,12,2,2,-0.575,-2.90737 } ); +cells.push_back( {21301511,2973,75,13,1,2,-0.625,-2.95693 } ); +cells.push_back( {21301521,2993,75,13,2,2,-0.625,-2.90737 } ); +cells.push_back( {21401511,2974,75,14,1,2,-0.675,-2.95693 } ); +cells.push_back( {21401521,2994,75,14,2,2,-0.675,-2.90737 } ); +cells.push_back( {21501511,2975,75,15,1,2,-0.725,-2.95693 } ); +cells.push_back( {21501521,2995,75,15,2,2,-0.725,-2.90737 } ); +cells.push_back( {21601511,2976,75,16,1,2,-0.775,-2.95693 } ); +cells.push_back( {21601521,2996,75,16,2,2,-0.775,-2.90737 } ); +cells.push_back( {21701511,2977,75,17,1,2,-0.825,-2.95693 } ); +cells.push_back( {21701521,2997,75,17,2,2,-0.825,-2.90737 } ); +cells.push_back( {21801511,2978,75,18,1,2,-0.875,-2.95693 } ); +cells.push_back( {21801521,2998,75,18,2,2,-0.875,-2.90737 } ); +cells.push_back( {21901511,2979,75,19,1,2,-0.925,-2.95693 } ); +cells.push_back( {21901521,2999,75,19,2,2,-0.925,-2.90737 } ); +cells.push_back( {22001511,2980,75,20,1,2,-0.967,-2.95693 } ); +cells.push_back( {22001521,3000,75,20,2,2,-0.967,-2.90737 } ); +cells.push_back( {20101512,2961,75,1,1,1,-0.02675,-2.95693 } ); +cells.push_back( {20101522,2981,75,1,2,1,-0.02675,-2.90737 } ); +cells.push_back( {20201512,2962,75,2,1,1,-0.075,-2.95693 } ); +cells.push_back( {20201522,2982,75,2,2,1,-0.075,-2.90737 } ); +cells.push_back( {20301512,2963,75,3,1,1,-0.125,-2.95693 } ); +cells.push_back( {20301522,2983,75,3,2,1,-0.125,-2.90737 } ); +cells.push_back( {20401512,2964,75,4,1,1,-0.175,-2.95693 } ); +cells.push_back( {20401522,2984,75,4,2,1,-0.175,-2.90737 } ); +cells.push_back( {20501512,2965,75,5,1,1,-0.225,-2.95693 } ); +cells.push_back( {20501522,2985,75,5,2,1,-0.225,-2.90737 } ); +cells.push_back( {20601512,2966,75,6,1,1,-0.275,-2.95693 } ); +cells.push_back( {20601522,2986,75,6,2,1,-0.275,-2.90737 } ); +cells.push_back( {20701512,2967,75,7,1,1,-0.325,-2.95693 } ); +cells.push_back( {20701522,2987,75,7,2,1,-0.325,-2.90737 } ); +cells.push_back( {20801512,2968,75,8,1,1,-0.375,-2.95693 } ); +cells.push_back( {20801522,2988,75,8,2,1,-0.375,-2.90737 } ); +cells.push_back( {20901512,2969,75,9,1,1,-0.425,-2.95693 } ); +cells.push_back( {20901522,2989,75,9,2,1,-0.425,-2.90737 } ); +cells.push_back( {21001512,2970,75,10,1,1,-0.475,-2.95693 } ); +cells.push_back( {21001522,2990,75,10,2,1,-0.475,-2.90737 } ); +cells.push_back( {21101512,2971,75,11,1,1,-0.525,-2.95693 } ); +cells.push_back( {21101522,2991,75,11,2,1,-0.525,-2.90737 } ); +cells.push_back( {21201512,2972,75,12,1,1,-0.575,-2.95693 } ); +cells.push_back( {21201522,2992,75,12,2,1,-0.575,-2.90737 } ); +cells.push_back( {21301512,2973,75,13,1,1,-0.625,-2.95693 } ); +cells.push_back( {21301522,2993,75,13,2,1,-0.625,-2.90737 } ); +cells.push_back( {21401512,2974,75,14,1,1,-0.675,-2.95693 } ); +cells.push_back( {21401522,2994,75,14,2,1,-0.675,-2.90737 } ); +cells.push_back( {21501512,2975,75,15,1,1,-0.725,-2.95693 } ); +cells.push_back( {21501522,2995,75,15,2,1,-0.725,-2.90737 } ); +cells.push_back( {21601512,2976,75,16,1,1,-0.775,-2.95693 } ); +cells.push_back( {21601522,2996,75,16,2,1,-0.775,-2.90737 } ); +cells.push_back( {21701512,2977,75,17,1,1,-0.825,-2.95693 } ); +cells.push_back( {21701522,2997,75,17,2,1,-0.825,-2.90737 } ); +cells.push_back( {21801512,2978,75,18,1,1,-0.875,-2.95693 } ); +cells.push_back( {21801522,2998,75,18,2,1,-0.875,-2.90737 } ); +cells.push_back( {21901512,2979,75,19,1,1,-0.925,-2.95693 } ); +cells.push_back( {21901522,2999,75,19,2,1,-0.925,-2.90737 } ); +cells.push_back( {22001512,2980,75,20,1,1,-0.967,-2.95693 } ); +cells.push_back( {22001522,3000,75,20,2,1,-0.967,-2.90737 } ); +cells.push_back( {20101611,3001,76,1,1,2,-0.02675,-2.85221 } ); +cells.push_back( {20101621,3021,76,1,2,2,-0.02675,-2.80265 } ); +cells.push_back( {20201611,3002,76,2,1,2,-0.075,-2.85221 } ); +cells.push_back( {20201621,3022,76,2,2,2,-0.075,-2.80265 } ); +cells.push_back( {20301611,3003,76,3,1,2,-0.125,-2.85221 } ); +cells.push_back( {20301621,3023,76,3,2,2,-0.125,-2.80265 } ); +cells.push_back( {20401611,3004,76,4,1,2,-0.175,-2.85221 } ); +cells.push_back( {20401621,3024,76,4,2,2,-0.175,-2.80265 } ); +cells.push_back( {20501611,3005,76,5,1,2,-0.225,-2.85221 } ); +cells.push_back( {20501621,3025,76,5,2,2,-0.225,-2.80265 } ); +cells.push_back( {20601611,3006,76,6,1,2,-0.275,-2.85221 } ); +cells.push_back( {20601621,3026,76,6,2,2,-0.275,-2.80265 } ); +cells.push_back( {20701611,3007,76,7,1,2,-0.325,-2.85221 } ); +cells.push_back( {20701621,3027,76,7,2,2,-0.325,-2.80265 } ); +cells.push_back( {20801611,3008,76,8,1,2,-0.375,-2.85221 } ); +cells.push_back( {20801621,3028,76,8,2,2,-0.375,-2.80265 } ); +cells.push_back( {20901611,3009,76,9,1,2,-0.425,-2.85221 } ); +cells.push_back( {20901621,3029,76,9,2,2,-0.425,-2.80265 } ); +cells.push_back( {21001611,3010,76,10,1,2,-0.475,-2.85221 } ); +cells.push_back( {21001621,3030,76,10,2,2,-0.475,-2.80265 } ); +cells.push_back( {21101611,3011,76,11,1,2,-0.525,-2.85221 } ); +cells.push_back( {21101621,3031,76,11,2,2,-0.525,-2.80265 } ); +cells.push_back( {21201611,3012,76,12,1,2,-0.575,-2.85221 } ); +cells.push_back( {21201621,3032,76,12,2,2,-0.575,-2.80265 } ); +cells.push_back( {21301611,3013,76,13,1,2,-0.625,-2.85221 } ); +cells.push_back( {21301621,3033,76,13,2,2,-0.625,-2.80265 } ); +cells.push_back( {21401611,3014,76,14,1,2,-0.675,-2.85221 } ); +cells.push_back( {21401621,3034,76,14,2,2,-0.675,-2.80265 } ); +cells.push_back( {21501611,3015,76,15,1,2,-0.725,-2.85221 } ); +cells.push_back( {21501621,3035,76,15,2,2,-0.725,-2.80265 } ); +cells.push_back( {21601611,3016,76,16,1,2,-0.775,-2.85221 } ); +cells.push_back( {21601621,3036,76,16,2,2,-0.775,-2.80265 } ); +cells.push_back( {21701611,3017,76,17,1,2,-0.825,-2.85221 } ); +cells.push_back( {21701621,3037,76,17,2,2,-0.825,-2.80265 } ); +cells.push_back( {21801611,3018,76,18,1,2,-0.875,-2.85221 } ); +cells.push_back( {21801621,3038,76,18,2,2,-0.875,-2.80265 } ); +cells.push_back( {21901611,3019,76,19,1,2,-0.925,-2.85221 } ); +cells.push_back( {21901621,3039,76,19,2,2,-0.925,-2.80265 } ); +cells.push_back( {22001611,3020,76,20,1,2,-0.967,-2.85221 } ); +cells.push_back( {22001621,3040,76,20,2,2,-0.967,-2.80265 } ); +cells.push_back( {20101612,3001,76,1,1,1,-0.02675,-2.85221 } ); +cells.push_back( {20101622,3021,76,1,2,1,-0.02675,-2.80265 } ); +cells.push_back( {20201612,3002,76,2,1,1,-0.075,-2.85221 } ); +cells.push_back( {20201622,3022,76,2,2,1,-0.075,-2.80265 } ); +cells.push_back( {20301612,3003,76,3,1,1,-0.125,-2.85221 } ); +cells.push_back( {20301622,3023,76,3,2,1,-0.125,-2.80265 } ); +cells.push_back( {20401612,3004,76,4,1,1,-0.175,-2.85221 } ); +cells.push_back( {20401622,3024,76,4,2,1,-0.175,-2.80265 } ); +cells.push_back( {20501612,3005,76,5,1,1,-0.225,-2.85221 } ); +cells.push_back( {20501622,3025,76,5,2,1,-0.225,-2.80265 } ); +cells.push_back( {20601612,3006,76,6,1,1,-0.275,-2.85221 } ); +cells.push_back( {20601622,3026,76,6,2,1,-0.275,-2.80265 } ); +cells.push_back( {20701612,3007,76,7,1,1,-0.325,-2.85221 } ); +cells.push_back( {20701622,3027,76,7,2,1,-0.325,-2.80265 } ); +cells.push_back( {20801612,3008,76,8,1,1,-0.375,-2.85221 } ); +cells.push_back( {20801622,3028,76,8,2,1,-0.375,-2.80265 } ); +cells.push_back( {20901612,3009,76,9,1,1,-0.425,-2.85221 } ); +cells.push_back( {20901622,3029,76,9,2,1,-0.425,-2.80265 } ); +cells.push_back( {21001612,3010,76,10,1,1,-0.475,-2.85221 } ); +cells.push_back( {21001622,3030,76,10,2,1,-0.475,-2.80265 } ); +cells.push_back( {21101612,3011,76,11,1,1,-0.525,-2.85221 } ); +cells.push_back( {21101622,3031,76,11,2,1,-0.525,-2.80265 } ); +cells.push_back( {21201612,3012,76,12,1,1,-0.575,-2.85221 } ); +cells.push_back( {21201622,3032,76,12,2,1,-0.575,-2.80265 } ); +cells.push_back( {21301612,3013,76,13,1,1,-0.625,-2.85221 } ); +cells.push_back( {21301622,3033,76,13,2,1,-0.625,-2.80265 } ); +cells.push_back( {21401612,3014,76,14,1,1,-0.675,-2.85221 } ); +cells.push_back( {21401622,3034,76,14,2,1,-0.675,-2.80265 } ); +cells.push_back( {21501612,3015,76,15,1,1,-0.725,-2.85221 } ); +cells.push_back( {21501622,3035,76,15,2,1,-0.725,-2.80265 } ); +cells.push_back( {21601612,3016,76,16,1,1,-0.775,-2.85221 } ); +cells.push_back( {21601622,3036,76,16,2,1,-0.775,-2.80265 } ); +cells.push_back( {21701612,3017,76,17,1,1,-0.825,-2.85221 } ); +cells.push_back( {21701622,3037,76,17,2,1,-0.825,-2.80265 } ); +cells.push_back( {21801612,3018,76,18,1,1,-0.875,-2.85221 } ); +cells.push_back( {21801622,3038,76,18,2,1,-0.875,-2.80265 } ); +cells.push_back( {21901612,3019,76,19,1,1,-0.925,-2.85221 } ); +cells.push_back( {21901622,3039,76,19,2,1,-0.925,-2.80265 } ); +cells.push_back( {22001612,3020,76,20,1,1,-0.967,-2.85221 } ); +cells.push_back( {22001622,3040,76,20,2,1,-0.967,-2.80265 } ); +cells.push_back( {20101711,3041,77,1,1,2,-0.02675,-2.74749 } ); +cells.push_back( {20101721,3061,77,1,2,2,-0.02675,-2.69793 } ); +cells.push_back( {20201711,3042,77,2,1,2,-0.075,-2.74749 } ); +cells.push_back( {20201721,3062,77,2,2,2,-0.075,-2.69793 } ); +cells.push_back( {20301711,3043,77,3,1,2,-0.125,-2.74749 } ); +cells.push_back( {20301721,3063,77,3,2,2,-0.125,-2.69793 } ); +cells.push_back( {20401711,3044,77,4,1,2,-0.175,-2.74749 } ); +cells.push_back( {20401721,3064,77,4,2,2,-0.175,-2.69793 } ); +cells.push_back( {20501711,3045,77,5,1,2,-0.225,-2.74749 } ); +cells.push_back( {20501721,3065,77,5,2,2,-0.225,-2.69793 } ); +cells.push_back( {20601711,3046,77,6,1,2,-0.275,-2.74749 } ); +cells.push_back( {20601721,3066,77,6,2,2,-0.275,-2.69793 } ); +cells.push_back( {20701711,3047,77,7,1,2,-0.325,-2.74749 } ); +cells.push_back( {20701721,3067,77,7,2,2,-0.325,-2.69793 } ); +cells.push_back( {20801711,3048,77,8,1,2,-0.375,-2.74749 } ); +cells.push_back( {20801721,3068,77,8,2,2,-0.375,-2.69793 } ); +cells.push_back( {20901711,3049,77,9,1,2,-0.425,-2.74749 } ); +cells.push_back( {20901721,3069,77,9,2,2,-0.425,-2.69793 } ); +cells.push_back( {21001711,3050,77,10,1,2,-0.475,-2.74749 } ); +cells.push_back( {21001721,3070,77,10,2,2,-0.475,-2.69793 } ); +cells.push_back( {21101711,3051,77,11,1,2,-0.525,-2.74749 } ); +cells.push_back( {21101721,3071,77,11,2,2,-0.525,-2.69793 } ); +cells.push_back( {21201711,3052,77,12,1,2,-0.575,-2.74749 } ); +cells.push_back( {21201721,3072,77,12,2,2,-0.575,-2.69793 } ); +cells.push_back( {21301711,3053,77,13,1,2,-0.625,-2.74749 } ); +cells.push_back( {21301721,3073,77,13,2,2,-0.625,-2.69793 } ); +cells.push_back( {21401711,3054,77,14,1,2,-0.675,-2.74749 } ); +cells.push_back( {21401721,3074,77,14,2,2,-0.675,-2.69793 } ); +cells.push_back( {21501711,3055,77,15,1,2,-0.725,-2.74749 } ); +cells.push_back( {21501721,3075,77,15,2,2,-0.725,-2.69793 } ); +cells.push_back( {21601711,3056,77,16,1,2,-0.775,-2.74749 } ); +cells.push_back( {21601721,3076,77,16,2,2,-0.775,-2.69793 } ); +cells.push_back( {21701711,3057,77,17,1,2,-0.825,-2.74749 } ); +cells.push_back( {21701721,3077,77,17,2,2,-0.825,-2.69793 } ); +cells.push_back( {21801711,3058,77,18,1,2,-0.875,-2.74749 } ); +cells.push_back( {21801721,3078,77,18,2,2,-0.875,-2.69793 } ); +cells.push_back( {21901711,3059,77,19,1,2,-0.925,-2.74749 } ); +cells.push_back( {21901721,3079,77,19,2,2,-0.925,-2.69793 } ); +cells.push_back( {22001711,3060,77,20,1,2,-0.967,-2.74749 } ); +cells.push_back( {22001721,3080,77,20,2,2,-0.967,-2.69793 } ); +cells.push_back( {20101712,3041,77,1,1,1,-0.02675,-2.74749 } ); +cells.push_back( {20101722,3061,77,1,2,1,-0.02675,-2.69793 } ); +cells.push_back( {20201712,3042,77,2,1,1,-0.075,-2.74749 } ); +cells.push_back( {20201722,3062,77,2,2,1,-0.075,-2.69793 } ); +cells.push_back( {20301712,3043,77,3,1,1,-0.125,-2.74749 } ); +cells.push_back( {20301722,3063,77,3,2,1,-0.125,-2.69793 } ); +cells.push_back( {20401712,3044,77,4,1,1,-0.175,-2.74749 } ); +cells.push_back( {20401722,3064,77,4,2,1,-0.175,-2.69793 } ); +cells.push_back( {20501712,3045,77,5,1,1,-0.225,-2.74749 } ); +cells.push_back( {20501722,3065,77,5,2,1,-0.225,-2.69793 } ); +cells.push_back( {20601712,3046,77,6,1,1,-0.275,-2.74749 } ); +cells.push_back( {20601722,3066,77,6,2,1,-0.275,-2.69793 } ); +cells.push_back( {20701712,3047,77,7,1,1,-0.325,-2.74749 } ); +cells.push_back( {20701722,3067,77,7,2,1,-0.325,-2.69793 } ); +cells.push_back( {20801712,3048,77,8,1,1,-0.375,-2.74749 } ); +cells.push_back( {20801722,3068,77,8,2,1,-0.375,-2.69793 } ); +cells.push_back( {20901712,3049,77,9,1,1,-0.425,-2.74749 } ); +cells.push_back( {20901722,3069,77,9,2,1,-0.425,-2.69793 } ); +cells.push_back( {21001712,3050,77,10,1,1,-0.475,-2.74749 } ); +cells.push_back( {21001722,3070,77,10,2,1,-0.475,-2.69793 } ); +cells.push_back( {21101712,3051,77,11,1,1,-0.525,-2.74749 } ); +cells.push_back( {21101722,3071,77,11,2,1,-0.525,-2.69793 } ); +cells.push_back( {21201712,3052,77,12,1,1,-0.575,-2.74749 } ); +cells.push_back( {21201722,3072,77,12,2,1,-0.575,-2.69793 } ); +cells.push_back( {21301712,3053,77,13,1,1,-0.625,-2.74749 } ); +cells.push_back( {21301722,3073,77,13,2,1,-0.625,-2.69793 } ); +cells.push_back( {21401712,3054,77,14,1,1,-0.675,-2.74749 } ); +cells.push_back( {21401722,3074,77,14,2,1,-0.675,-2.69793 } ); +cells.push_back( {21501712,3055,77,15,1,1,-0.725,-2.74749 } ); +cells.push_back( {21501722,3075,77,15,2,1,-0.725,-2.69793 } ); +cells.push_back( {21601712,3056,77,16,1,1,-0.775,-2.74749 } ); +cells.push_back( {21601722,3076,77,16,2,1,-0.775,-2.69793 } ); +cells.push_back( {21701712,3057,77,17,1,1,-0.825,-2.74749 } ); +cells.push_back( {21701722,3077,77,17,2,1,-0.825,-2.69793 } ); +cells.push_back( {21801712,3058,77,18,1,1,-0.875,-2.74749 } ); +cells.push_back( {21801722,3078,77,18,2,1,-0.875,-2.69793 } ); +cells.push_back( {21901712,3059,77,19,1,1,-0.925,-2.74749 } ); +cells.push_back( {21901722,3079,77,19,2,1,-0.925,-2.69793 } ); +cells.push_back( {22001712,3060,77,20,1,1,-0.967,-2.74749 } ); +cells.push_back( {22001722,3080,77,20,2,1,-0.967,-2.69793 } ); +cells.push_back( {20101811,3081,78,1,1,2,-0.02675,-2.64278 } ); +cells.push_back( {20101821,3101,78,1,2,2,-0.02675,-2.59321 } ); +cells.push_back( {20201811,3082,78,2,1,2,-0.075,-2.64278 } ); +cells.push_back( {20201821,3102,78,2,2,2,-0.075,-2.59321 } ); +cells.push_back( {20301811,3083,78,3,1,2,-0.125,-2.64278 } ); +cells.push_back( {20301821,3103,78,3,2,2,-0.125,-2.59321 } ); +cells.push_back( {20401811,3084,78,4,1,2,-0.175,-2.64278 } ); +cells.push_back( {20401821,3104,78,4,2,2,-0.175,-2.59321 } ); +cells.push_back( {20501811,3085,78,5,1,2,-0.225,-2.64278 } ); +cells.push_back( {20501821,3105,78,5,2,2,-0.225,-2.59321 } ); +cells.push_back( {20601811,3086,78,6,1,2,-0.275,-2.64278 } ); +cells.push_back( {20601821,3106,78,6,2,2,-0.275,-2.59321 } ); +cells.push_back( {20701811,3087,78,7,1,2,-0.325,-2.64278 } ); +cells.push_back( {20701821,3107,78,7,2,2,-0.325,-2.59321 } ); +cells.push_back( {20801811,3088,78,8,1,2,-0.375,-2.64278 } ); +cells.push_back( {20801821,3108,78,8,2,2,-0.375,-2.59321 } ); +cells.push_back( {20901811,3089,78,9,1,2,-0.425,-2.64278 } ); +cells.push_back( {20901821,3109,78,9,2,2,-0.425,-2.59321 } ); +cells.push_back( {21001811,3090,78,10,1,2,-0.475,-2.64278 } ); +cells.push_back( {21001821,3110,78,10,2,2,-0.475,-2.59321 } ); +cells.push_back( {21101811,3091,78,11,1,2,-0.525,-2.64278 } ); +cells.push_back( {21101821,3111,78,11,2,2,-0.525,-2.59321 } ); +cells.push_back( {21201811,3092,78,12,1,2,-0.575,-2.64278 } ); +cells.push_back( {21201821,3112,78,12,2,2,-0.575,-2.59321 } ); +cells.push_back( {21301811,3093,78,13,1,2,-0.625,-2.64278 } ); +cells.push_back( {21301821,3113,78,13,2,2,-0.625,-2.59321 } ); +cells.push_back( {21401811,3094,78,14,1,2,-0.675,-2.64278 } ); +cells.push_back( {21401821,3114,78,14,2,2,-0.675,-2.59321 } ); +cells.push_back( {21501811,3095,78,15,1,2,-0.725,-2.64278 } ); +cells.push_back( {21501821,3115,78,15,2,2,-0.725,-2.59321 } ); +cells.push_back( {21601811,3096,78,16,1,2,-0.775,-2.64278 } ); +cells.push_back( {21601821,3116,78,16,2,2,-0.775,-2.59321 } ); +cells.push_back( {21701811,3097,78,17,1,2,-0.825,-2.64278 } ); +cells.push_back( {21701821,3117,78,17,2,2,-0.825,-2.59321 } ); +cells.push_back( {21801811,3098,78,18,1,2,-0.875,-2.64278 } ); +cells.push_back( {21801821,3118,78,18,2,2,-0.875,-2.59321 } ); +cells.push_back( {21901811,3099,78,19,1,2,-0.925,-2.64278 } ); +cells.push_back( {21901821,3119,78,19,2,2,-0.925,-2.59321 } ); +cells.push_back( {22001811,3100,78,20,1,2,-0.967,-2.64278 } ); +cells.push_back( {22001821,3120,78,20,2,2,-0.967,-2.59321 } ); +cells.push_back( {20101812,3081,78,1,1,1,-0.02675,-2.64278 } ); +cells.push_back( {20101822,3101,78,1,2,1,-0.02675,-2.59321 } ); +cells.push_back( {20201812,3082,78,2,1,1,-0.075,-2.64278 } ); +cells.push_back( {20201822,3102,78,2,2,1,-0.075,-2.59321 } ); +cells.push_back( {20301812,3083,78,3,1,1,-0.125,-2.64278 } ); +cells.push_back( {20301822,3103,78,3,2,1,-0.125,-2.59321 } ); +cells.push_back( {20401812,3084,78,4,1,1,-0.175,-2.64278 } ); +cells.push_back( {20401822,3104,78,4,2,1,-0.175,-2.59321 } ); +cells.push_back( {20501812,3085,78,5,1,1,-0.225,-2.64278 } ); +cells.push_back( {20501822,3105,78,5,2,1,-0.225,-2.59321 } ); +cells.push_back( {20601812,3086,78,6,1,1,-0.275,-2.64278 } ); +cells.push_back( {20601822,3106,78,6,2,1,-0.275,-2.59321 } ); +cells.push_back( {20701812,3087,78,7,1,1,-0.325,-2.64278 } ); +cells.push_back( {20701822,3107,78,7,2,1,-0.325,-2.59321 } ); +cells.push_back( {20801812,3088,78,8,1,1,-0.375,-2.64278 } ); +cells.push_back( {20801822,3108,78,8,2,1,-0.375,-2.59321 } ); +cells.push_back( {20901812,3089,78,9,1,1,-0.425,-2.64278 } ); +cells.push_back( {20901822,3109,78,9,2,1,-0.425,-2.59321 } ); +cells.push_back( {21001812,3090,78,10,1,1,-0.475,-2.64278 } ); +cells.push_back( {21001822,3110,78,10,2,1,-0.475,-2.59321 } ); +cells.push_back( {21101812,3091,78,11,1,1,-0.525,-2.64278 } ); +cells.push_back( {21101822,3111,78,11,2,1,-0.525,-2.59321 } ); +cells.push_back( {21201812,3092,78,12,1,1,-0.575,-2.64278 } ); +cells.push_back( {21201822,3112,78,12,2,1,-0.575,-2.59321 } ); +cells.push_back( {21301812,3093,78,13,1,1,-0.625,-2.64278 } ); +cells.push_back( {21301822,3113,78,13,2,1,-0.625,-2.59321 } ); +cells.push_back( {21401812,3094,78,14,1,1,-0.675,-2.64278 } ); +cells.push_back( {21401822,3114,78,14,2,1,-0.675,-2.59321 } ); +cells.push_back( {21501812,3095,78,15,1,1,-0.725,-2.64278 } ); +cells.push_back( {21501822,3115,78,15,2,1,-0.725,-2.59321 } ); +cells.push_back( {21601812,3096,78,16,1,1,-0.775,-2.64278 } ); +cells.push_back( {21601822,3116,78,16,2,1,-0.775,-2.59321 } ); +cells.push_back( {21701812,3097,78,17,1,1,-0.825,-2.64278 } ); +cells.push_back( {21701822,3117,78,17,2,1,-0.825,-2.59321 } ); +cells.push_back( {21801812,3098,78,18,1,1,-0.875,-2.64278 } ); +cells.push_back( {21801822,3118,78,18,2,1,-0.875,-2.59321 } ); +cells.push_back( {21901812,3099,78,19,1,1,-0.925,-2.64278 } ); +cells.push_back( {21901822,3119,78,19,2,1,-0.925,-2.59321 } ); +cells.push_back( {22001812,3100,78,20,1,1,-0.967,-2.64278 } ); +cells.push_back( {22001822,3120,78,20,2,1,-0.967,-2.59321 } ); +cells.push_back( {20101911,3121,79,1,1,2,-0.02675,-2.53806 } ); +cells.push_back( {20101921,3141,79,1,2,2,-0.02675,-2.48849 } ); +cells.push_back( {20201911,3122,79,2,1,2,-0.075,-2.53806 } ); +cells.push_back( {20201921,3142,79,2,2,2,-0.075,-2.48849 } ); +cells.push_back( {20301911,3123,79,3,1,2,-0.125,-2.53806 } ); +cells.push_back( {20301921,3143,79,3,2,2,-0.125,-2.48849 } ); +cells.push_back( {20401911,3124,79,4,1,2,-0.175,-2.53806 } ); +cells.push_back( {20401921,3144,79,4,2,2,-0.175,-2.48849 } ); +cells.push_back( {20501911,3125,79,5,1,2,-0.225,-2.53806 } ); +cells.push_back( {20501921,3145,79,5,2,2,-0.225,-2.48849 } ); +cells.push_back( {20601911,3126,79,6,1,2,-0.275,-2.53806 } ); +cells.push_back( {20601921,3146,79,6,2,2,-0.275,-2.48849 } ); +cells.push_back( {20701911,3127,79,7,1,2,-0.325,-2.53806 } ); +cells.push_back( {20701921,3147,79,7,2,2,-0.325,-2.48849 } ); +cells.push_back( {20801911,3128,79,8,1,2,-0.375,-2.53806 } ); +cells.push_back( {20801921,3148,79,8,2,2,-0.375,-2.48849 } ); +cells.push_back( {20901911,3129,79,9,1,2,-0.425,-2.53806 } ); +cells.push_back( {20901921,3149,79,9,2,2,-0.425,-2.48849 } ); +cells.push_back( {21001911,3130,79,10,1,2,-0.475,-2.53806 } ); +cells.push_back( {21001921,3150,79,10,2,2,-0.475,-2.48849 } ); +cells.push_back( {21101911,3131,79,11,1,2,-0.525,-2.53806 } ); +cells.push_back( {21101921,3151,79,11,2,2,-0.525,-2.48849 } ); +cells.push_back( {21201911,3132,79,12,1,2,-0.575,-2.53806 } ); +cells.push_back( {21201921,3152,79,12,2,2,-0.575,-2.48849 } ); +cells.push_back( {21301911,3133,79,13,1,2,-0.625,-2.53806 } ); +cells.push_back( {21301921,3153,79,13,2,2,-0.625,-2.48849 } ); +cells.push_back( {21401911,3134,79,14,1,2,-0.675,-2.53806 } ); +cells.push_back( {21401921,3154,79,14,2,2,-0.675,-2.48849 } ); +cells.push_back( {21501911,3135,79,15,1,2,-0.725,-2.53806 } ); +cells.push_back( {21501921,3155,79,15,2,2,-0.725,-2.48849 } ); +cells.push_back( {21601911,3136,79,16,1,2,-0.775,-2.53806 } ); +cells.push_back( {21601921,3156,79,16,2,2,-0.775,-2.48849 } ); +cells.push_back( {21701911,3137,79,17,1,2,-0.825,-2.53806 } ); +cells.push_back( {21701921,3157,79,17,2,2,-0.825,-2.48849 } ); +cells.push_back( {21801911,3138,79,18,1,2,-0.875,-2.53806 } ); +cells.push_back( {21801921,3158,79,18,2,2,-0.875,-2.48849 } ); +cells.push_back( {21901911,3139,79,19,1,2,-0.925,-2.53806 } ); +cells.push_back( {21901921,3159,79,19,2,2,-0.925,-2.48849 } ); +cells.push_back( {22001911,3140,79,20,1,2,-0.967,-2.53806 } ); +cells.push_back( {22001921,3160,79,20,2,2,-0.967,-2.48849 } ); +cells.push_back( {20101912,3121,79,1,1,1,-0.02675,-2.53806 } ); +cells.push_back( {20101922,3141,79,1,2,1,-0.02675,-2.48849 } ); +cells.push_back( {20201912,3122,79,2,1,1,-0.075,-2.53806 } ); +cells.push_back( {20201922,3142,79,2,2,1,-0.075,-2.48849 } ); +cells.push_back( {20301912,3123,79,3,1,1,-0.125,-2.53806 } ); +cells.push_back( {20301922,3143,79,3,2,1,-0.125,-2.48849 } ); +cells.push_back( {20401912,3124,79,4,1,1,-0.175,-2.53806 } ); +cells.push_back( {20401922,3144,79,4,2,1,-0.175,-2.48849 } ); +cells.push_back( {20501912,3125,79,5,1,1,-0.225,-2.53806 } ); +cells.push_back( {20501922,3145,79,5,2,1,-0.225,-2.48849 } ); +cells.push_back( {20601912,3126,79,6,1,1,-0.275,-2.53806 } ); +cells.push_back( {20601922,3146,79,6,2,1,-0.275,-2.48849 } ); +cells.push_back( {20701912,3127,79,7,1,1,-0.325,-2.53806 } ); +cells.push_back( {20701922,3147,79,7,2,1,-0.325,-2.48849 } ); +cells.push_back( {20801912,3128,79,8,1,1,-0.375,-2.53806 } ); +cells.push_back( {20801922,3148,79,8,2,1,-0.375,-2.48849 } ); +cells.push_back( {20901912,3129,79,9,1,1,-0.425,-2.53806 } ); +cells.push_back( {20901922,3149,79,9,2,1,-0.425,-2.48849 } ); +cells.push_back( {21001912,3130,79,10,1,1,-0.475,-2.53806 } ); +cells.push_back( {21001922,3150,79,10,2,1,-0.475,-2.48849 } ); +cells.push_back( {21101912,3131,79,11,1,1,-0.525,-2.53806 } ); +cells.push_back( {21101922,3151,79,11,2,1,-0.525,-2.48849 } ); +cells.push_back( {21201912,3132,79,12,1,1,-0.575,-2.53806 } ); +cells.push_back( {21201922,3152,79,12,2,1,-0.575,-2.48849 } ); +cells.push_back( {21301912,3133,79,13,1,1,-0.625,-2.53806 } ); +cells.push_back( {21301922,3153,79,13,2,1,-0.625,-2.48849 } ); +cells.push_back( {21401912,3134,79,14,1,1,-0.675,-2.53806 } ); +cells.push_back( {21401922,3154,79,14,2,1,-0.675,-2.48849 } ); +cells.push_back( {21501912,3135,79,15,1,1,-0.725,-2.53806 } ); +cells.push_back( {21501922,3155,79,15,2,1,-0.725,-2.48849 } ); +cells.push_back( {21601912,3136,79,16,1,1,-0.775,-2.53806 } ); +cells.push_back( {21601922,3156,79,16,2,1,-0.775,-2.48849 } ); +cells.push_back( {21701912,3137,79,17,1,1,-0.825,-2.53806 } ); +cells.push_back( {21701922,3157,79,17,2,1,-0.825,-2.48849 } ); +cells.push_back( {21801912,3138,79,18,1,1,-0.875,-2.53806 } ); +cells.push_back( {21801922,3158,79,18,2,1,-0.875,-2.48849 } ); +cells.push_back( {21901912,3139,79,19,1,1,-0.925,-2.53806 } ); +cells.push_back( {21901922,3159,79,19,2,1,-0.925,-2.48849 } ); +cells.push_back( {22001912,3140,79,20,1,1,-0.967,-2.53806 } ); +cells.push_back( {22001922,3160,79,20,2,1,-0.967,-2.48849 } ); +cells.push_back( {20102011,3161,80,1,1,2,-0.02675,-2.43334 } ); +cells.push_back( {20102021,3181,80,1,2,2,-0.02675,-2.38377 } ); +cells.push_back( {20202011,3162,80,2,1,2,-0.075,-2.43334 } ); +cells.push_back( {20202021,3182,80,2,2,2,-0.075,-2.38377 } ); +cells.push_back( {20302011,3163,80,3,1,2,-0.125,-2.43334 } ); +cells.push_back( {20302021,3183,80,3,2,2,-0.125,-2.38377 } ); +cells.push_back( {20402011,3164,80,4,1,2,-0.175,-2.43334 } ); +cells.push_back( {20402021,3184,80,4,2,2,-0.175,-2.38377 } ); +cells.push_back( {20502011,3165,80,5,1,2,-0.225,-2.43334 } ); +cells.push_back( {20502021,3185,80,5,2,2,-0.225,-2.38377 } ); +cells.push_back( {20602011,3166,80,6,1,2,-0.275,-2.43334 } ); +cells.push_back( {20602021,3186,80,6,2,2,-0.275,-2.38377 } ); +cells.push_back( {20702011,3167,80,7,1,2,-0.325,-2.43334 } ); +cells.push_back( {20702021,3187,80,7,2,2,-0.325,-2.38377 } ); +cells.push_back( {20802011,3168,80,8,1,2,-0.375,-2.43334 } ); +cells.push_back( {20802021,3188,80,8,2,2,-0.375,-2.38377 } ); +cells.push_back( {20902011,3169,80,9,1,2,-0.425,-2.43334 } ); +cells.push_back( {20902021,3189,80,9,2,2,-0.425,-2.38377 } ); +cells.push_back( {21002011,3170,80,10,1,2,-0.475,-2.43334 } ); +cells.push_back( {21002021,3190,80,10,2,2,-0.475,-2.38377 } ); +cells.push_back( {21102011,3171,80,11,1,2,-0.525,-2.43334 } ); +cells.push_back( {21102021,3191,80,11,2,2,-0.525,-2.38377 } ); +cells.push_back( {21202011,3172,80,12,1,2,-0.575,-2.43334 } ); +cells.push_back( {21202021,3192,80,12,2,2,-0.575,-2.38377 } ); +cells.push_back( {21302011,3173,80,13,1,2,-0.625,-2.43334 } ); +cells.push_back( {21302021,3193,80,13,2,2,-0.625,-2.38377 } ); +cells.push_back( {21402011,3174,80,14,1,2,-0.675,-2.43334 } ); +cells.push_back( {21402021,3194,80,14,2,2,-0.675,-2.38377 } ); +cells.push_back( {21502011,3175,80,15,1,2,-0.725,-2.43334 } ); +cells.push_back( {21502021,3195,80,15,2,2,-0.725,-2.38377 } ); +cells.push_back( {21602011,3176,80,16,1,2,-0.775,-2.43334 } ); +cells.push_back( {21602021,3196,80,16,2,2,-0.775,-2.38377 } ); +cells.push_back( {21702011,3177,80,17,1,2,-0.825,-2.43334 } ); +cells.push_back( {21702021,3197,80,17,2,2,-0.825,-2.38377 } ); +cells.push_back( {21802011,3178,80,18,1,2,-0.875,-2.43334 } ); +cells.push_back( {21802021,3198,80,18,2,2,-0.875,-2.38377 } ); +cells.push_back( {21902011,3179,80,19,1,2,-0.925,-2.43334 } ); +cells.push_back( {21902021,3199,80,19,2,2,-0.925,-2.38377 } ); +cells.push_back( {22002011,3180,80,20,1,2,-0.967,-2.43334 } ); +cells.push_back( {22002021,3200,80,20,2,2,-0.967,-2.38377 } ); +cells.push_back( {20102012,3161,80,1,1,1,-0.02675,-2.43334 } ); +cells.push_back( {20102022,3181,80,1,2,1,-0.02675,-2.38377 } ); +cells.push_back( {20202012,3162,80,2,1,1,-0.075,-2.43334 } ); +cells.push_back( {20202022,3182,80,2,2,1,-0.075,-2.38377 } ); +cells.push_back( {20302012,3163,80,3,1,1,-0.125,-2.43334 } ); +cells.push_back( {20302022,3183,80,3,2,1,-0.125,-2.38377 } ); +cells.push_back( {20402012,3164,80,4,1,1,-0.175,-2.43334 } ); +cells.push_back( {20402022,3184,80,4,2,1,-0.175,-2.38377 } ); +cells.push_back( {20502012,3165,80,5,1,1,-0.225,-2.43334 } ); +cells.push_back( {20502022,3185,80,5,2,1,-0.225,-2.38377 } ); +cells.push_back( {20602012,3166,80,6,1,1,-0.275,-2.43334 } ); +cells.push_back( {20602022,3186,80,6,2,1,-0.275,-2.38377 } ); +cells.push_back( {20702012,3167,80,7,1,1,-0.325,-2.43334 } ); +cells.push_back( {20702022,3187,80,7,2,1,-0.325,-2.38377 } ); +cells.push_back( {20802012,3168,80,8,1,1,-0.375,-2.43334 } ); +cells.push_back( {20802022,3188,80,8,2,1,-0.375,-2.38377 } ); +cells.push_back( {20902012,3169,80,9,1,1,-0.425,-2.43334 } ); +cells.push_back( {20902022,3189,80,9,2,1,-0.425,-2.38377 } ); +cells.push_back( {21002012,3170,80,10,1,1,-0.475,-2.43334 } ); +cells.push_back( {21002022,3190,80,10,2,1,-0.475,-2.38377 } ); +cells.push_back( {21102012,3171,80,11,1,1,-0.525,-2.43334 } ); +cells.push_back( {21102022,3191,80,11,2,1,-0.525,-2.38377 } ); +cells.push_back( {21202012,3172,80,12,1,1,-0.575,-2.43334 } ); +cells.push_back( {21202022,3192,80,12,2,1,-0.575,-2.38377 } ); +cells.push_back( {21302012,3173,80,13,1,1,-0.625,-2.43334 } ); +cells.push_back( {21302022,3193,80,13,2,1,-0.625,-2.38377 } ); +cells.push_back( {21402012,3174,80,14,1,1,-0.675,-2.43334 } ); +cells.push_back( {21402022,3194,80,14,2,1,-0.675,-2.38377 } ); +cells.push_back( {21502012,3175,80,15,1,1,-0.725,-2.43334 } ); +cells.push_back( {21502022,3195,80,15,2,1,-0.725,-2.38377 } ); +cells.push_back( {21602012,3176,80,16,1,1,-0.775,-2.43334 } ); +cells.push_back( {21602022,3196,80,16,2,1,-0.775,-2.38377 } ); +cells.push_back( {21702012,3177,80,17,1,1,-0.825,-2.43334 } ); +cells.push_back( {21702022,3197,80,17,2,1,-0.825,-2.38377 } ); +cells.push_back( {21802012,3178,80,18,1,1,-0.875,-2.43334 } ); +cells.push_back( {21802022,3198,80,18,2,1,-0.875,-2.38377 } ); +cells.push_back( {21902012,3179,80,19,1,1,-0.925,-2.43334 } ); +cells.push_back( {21902022,3199,80,19,2,1,-0.925,-2.38377 } ); +cells.push_back( {22002012,3180,80,20,1,1,-0.967,-2.43334 } ); +cells.push_back( {22002022,3200,80,20,2,1,-0.967,-2.38377 } ); +cells.push_back( {20102111,3201,81,1,1,2,-0.02675,-2.32862 } ); +cells.push_back( {20102121,3221,81,1,2,2,-0.02675,-2.27905 } ); +cells.push_back( {20202111,3202,81,2,1,2,-0.075,-2.32862 } ); +cells.push_back( {20202121,3222,81,2,2,2,-0.075,-2.27905 } ); +cells.push_back( {20302111,3203,81,3,1,2,-0.125,-2.32862 } ); +cells.push_back( {20302121,3223,81,3,2,2,-0.125,-2.27905 } ); +cells.push_back( {20402111,3204,81,4,1,2,-0.175,-2.32862 } ); +cells.push_back( {20402121,3224,81,4,2,2,-0.175,-2.27905 } ); +cells.push_back( {20502111,3205,81,5,1,2,-0.225,-2.32862 } ); +cells.push_back( {20502121,3225,81,5,2,2,-0.225,-2.27905 } ); +cells.push_back( {20602111,3206,81,6,1,2,-0.275,-2.32862 } ); +cells.push_back( {20602121,3226,81,6,2,2,-0.275,-2.27905 } ); +cells.push_back( {20702111,3207,81,7,1,2,-0.325,-2.32862 } ); +cells.push_back( {20702121,3227,81,7,2,2,-0.325,-2.27905 } ); +cells.push_back( {20802111,3208,81,8,1,2,-0.375,-2.32862 } ); +cells.push_back( {20802121,3228,81,8,2,2,-0.375,-2.27905 } ); +cells.push_back( {20902111,3209,81,9,1,2,-0.425,-2.32862 } ); +cells.push_back( {20902121,3229,81,9,2,2,-0.425,-2.27905 } ); +cells.push_back( {21002111,3210,81,10,1,2,-0.475,-2.32862 } ); +cells.push_back( {21002121,3230,81,10,2,2,-0.475,-2.27905 } ); +cells.push_back( {21102111,3211,81,11,1,2,-0.525,-2.32862 } ); +cells.push_back( {21102121,3231,81,11,2,2,-0.525,-2.27905 } ); +cells.push_back( {21202111,3212,81,12,1,2,-0.575,-2.32862 } ); +cells.push_back( {21202121,3232,81,12,2,2,-0.575,-2.27905 } ); +cells.push_back( {21302111,3213,81,13,1,2,-0.625,-2.32862 } ); +cells.push_back( {21302121,3233,81,13,2,2,-0.625,-2.27905 } ); +cells.push_back( {21402111,3214,81,14,1,2,-0.675,-2.32862 } ); +cells.push_back( {21402121,3234,81,14,2,2,-0.675,-2.27905 } ); +cells.push_back( {21502111,3215,81,15,1,2,-0.725,-2.32862 } ); +cells.push_back( {21502121,3235,81,15,2,2,-0.725,-2.27905 } ); +cells.push_back( {21602111,3216,81,16,1,2,-0.775,-2.32862 } ); +cells.push_back( {21602121,3236,81,16,2,2,-0.775,-2.27905 } ); +cells.push_back( {21702111,3217,81,17,1,2,-0.825,-2.32862 } ); +cells.push_back( {21702121,3237,81,17,2,2,-0.825,-2.27905 } ); +cells.push_back( {21802111,3218,81,18,1,2,-0.875,-2.32862 } ); +cells.push_back( {21802121,3238,81,18,2,2,-0.875,-2.27905 } ); +cells.push_back( {21902111,3219,81,19,1,2,-0.925,-2.32862 } ); +cells.push_back( {21902121,3239,81,19,2,2,-0.925,-2.27905 } ); +cells.push_back( {22002111,3220,81,20,1,2,-0.967,-2.32862 } ); +cells.push_back( {22002121,3240,81,20,2,2,-0.967,-2.27905 } ); +cells.push_back( {20102112,3201,81,1,1,1,-0.02675,-2.32862 } ); +cells.push_back( {20102122,3221,81,1,2,1,-0.02675,-2.27905 } ); +cells.push_back( {20202112,3202,81,2,1,1,-0.075,-2.32862 } ); +cells.push_back( {20202122,3222,81,2,2,1,-0.075,-2.27905 } ); +cells.push_back( {20302112,3203,81,3,1,1,-0.125,-2.32862 } ); +cells.push_back( {20302122,3223,81,3,2,1,-0.125,-2.27905 } ); +cells.push_back( {20402112,3204,81,4,1,1,-0.175,-2.32862 } ); +cells.push_back( {20402122,3224,81,4,2,1,-0.175,-2.27905 } ); +cells.push_back( {20502112,3205,81,5,1,1,-0.225,-2.32862 } ); +cells.push_back( {20502122,3225,81,5,2,1,-0.225,-2.27905 } ); +cells.push_back( {20602112,3206,81,6,1,1,-0.275,-2.32862 } ); +cells.push_back( {20602122,3226,81,6,2,1,-0.275,-2.27905 } ); +cells.push_back( {20702112,3207,81,7,1,1,-0.325,-2.32862 } ); +cells.push_back( {20702122,3227,81,7,2,1,-0.325,-2.27905 } ); +cells.push_back( {20802112,3208,81,8,1,1,-0.375,-2.32862 } ); +cells.push_back( {20802122,3228,81,8,2,1,-0.375,-2.27905 } ); +cells.push_back( {20902112,3209,81,9,1,1,-0.425,-2.32862 } ); +cells.push_back( {20902122,3229,81,9,2,1,-0.425,-2.27905 } ); +cells.push_back( {21002112,3210,81,10,1,1,-0.475,-2.32862 } ); +cells.push_back( {21002122,3230,81,10,2,1,-0.475,-2.27905 } ); +cells.push_back( {21102112,3211,81,11,1,1,-0.525,-2.32862 } ); +cells.push_back( {21102122,3231,81,11,2,1,-0.525,-2.27905 } ); +cells.push_back( {21202112,3212,81,12,1,1,-0.575,-2.32862 } ); +cells.push_back( {21202122,3232,81,12,2,1,-0.575,-2.27905 } ); +cells.push_back( {21302112,3213,81,13,1,1,-0.625,-2.32862 } ); +cells.push_back( {21302122,3233,81,13,2,1,-0.625,-2.27905 } ); +cells.push_back( {21402112,3214,81,14,1,1,-0.675,-2.32862 } ); +cells.push_back( {21402122,3234,81,14,2,1,-0.675,-2.27905 } ); +cells.push_back( {21502112,3215,81,15,1,1,-0.725,-2.32862 } ); +cells.push_back( {21502122,3235,81,15,2,1,-0.725,-2.27905 } ); +cells.push_back( {21602112,3216,81,16,1,1,-0.775,-2.32862 } ); +cells.push_back( {21602122,3236,81,16,2,1,-0.775,-2.27905 } ); +cells.push_back( {21702112,3217,81,17,1,1,-0.825,-2.32862 } ); +cells.push_back( {21702122,3237,81,17,2,1,-0.825,-2.27905 } ); +cells.push_back( {21802112,3218,81,18,1,1,-0.875,-2.32862 } ); +cells.push_back( {21802122,3238,81,18,2,1,-0.875,-2.27905 } ); +cells.push_back( {21902112,3219,81,19,1,1,-0.925,-2.32862 } ); +cells.push_back( {21902122,3239,81,19,2,1,-0.925,-2.27905 } ); +cells.push_back( {22002112,3220,81,20,1,1,-0.967,-2.32862 } ); +cells.push_back( {22002122,3240,81,20,2,1,-0.967,-2.27905 } ); +cells.push_back( {20102211,3241,82,1,1,2,-0.02675,-2.2239 } ); +cells.push_back( {20102221,3261,82,1,2,2,-0.02675,-2.17433 } ); +cells.push_back( {20202211,3242,82,2,1,2,-0.075,-2.2239 } ); +cells.push_back( {20202221,3262,82,2,2,2,-0.075,-2.17433 } ); +cells.push_back( {20302211,3243,82,3,1,2,-0.125,-2.2239 } ); +cells.push_back( {20302221,3263,82,3,2,2,-0.125,-2.17433 } ); +cells.push_back( {20402211,3244,82,4,1,2,-0.175,-2.2239 } ); +cells.push_back( {20402221,3264,82,4,2,2,-0.175,-2.17433 } ); +cells.push_back( {20502211,3245,82,5,1,2,-0.225,-2.2239 } ); +cells.push_back( {20502221,3265,82,5,2,2,-0.225,-2.17433 } ); +cells.push_back( {20602211,3246,82,6,1,2,-0.275,-2.2239 } ); +cells.push_back( {20602221,3266,82,6,2,2,-0.275,-2.17433 } ); +cells.push_back( {20702211,3247,82,7,1,2,-0.325,-2.2239 } ); +cells.push_back( {20702221,3267,82,7,2,2,-0.325,-2.17433 } ); +cells.push_back( {20802211,3248,82,8,1,2,-0.375,-2.2239 } ); +cells.push_back( {20802221,3268,82,8,2,2,-0.375,-2.17433 } ); +cells.push_back( {20902211,3249,82,9,1,2,-0.425,-2.2239 } ); +cells.push_back( {20902221,3269,82,9,2,2,-0.425,-2.17433 } ); +cells.push_back( {21002211,3250,82,10,1,2,-0.475,-2.2239 } ); +cells.push_back( {21002221,3270,82,10,2,2,-0.475,-2.17433 } ); +cells.push_back( {21102211,3251,82,11,1,2,-0.525,-2.2239 } ); +cells.push_back( {21102221,3271,82,11,2,2,-0.525,-2.17433 } ); +cells.push_back( {21202211,3252,82,12,1,2,-0.575,-2.2239 } ); +cells.push_back( {21202221,3272,82,12,2,2,-0.575,-2.17433 } ); +cells.push_back( {21302211,3253,82,13,1,2,-0.625,-2.2239 } ); +cells.push_back( {21302221,3273,82,13,2,2,-0.625,-2.17433 } ); +cells.push_back( {21402211,3254,82,14,1,2,-0.675,-2.2239 } ); +cells.push_back( {21402221,3274,82,14,2,2,-0.675,-2.17433 } ); +cells.push_back( {21502211,3255,82,15,1,2,-0.725,-2.2239 } ); +cells.push_back( {21502221,3275,82,15,2,2,-0.725,-2.17433 } ); +cells.push_back( {21602211,3256,82,16,1,2,-0.775,-2.2239 } ); +cells.push_back( {21602221,3276,82,16,2,2,-0.775,-2.17433 } ); +cells.push_back( {21702211,3257,82,17,1,2,-0.825,-2.2239 } ); +cells.push_back( {21702221,3277,82,17,2,2,-0.825,-2.17433 } ); +cells.push_back( {21802211,3258,82,18,1,2,-0.875,-2.2239 } ); +cells.push_back( {21802221,3278,82,18,2,2,-0.875,-2.17433 } ); +cells.push_back( {21902211,3259,82,19,1,2,-0.925,-2.2239 } ); +cells.push_back( {21902221,3279,82,19,2,2,-0.925,-2.17433 } ); +cells.push_back( {22002211,3260,82,20,1,2,-0.967,-2.2239 } ); +cells.push_back( {22002221,3280,82,20,2,2,-0.967,-2.17433 } ); +cells.push_back( {20102212,3241,82,1,1,1,-0.02675,-2.2239 } ); +cells.push_back( {20102222,3261,82,1,2,1,-0.02675,-2.17433 } ); +cells.push_back( {20202212,3242,82,2,1,1,-0.075,-2.2239 } ); +cells.push_back( {20202222,3262,82,2,2,1,-0.075,-2.17433 } ); +cells.push_back( {20302212,3243,82,3,1,1,-0.125,-2.2239 } ); +cells.push_back( {20302222,3263,82,3,2,1,-0.125,-2.17433 } ); +cells.push_back( {20402212,3244,82,4,1,1,-0.175,-2.2239 } ); +cells.push_back( {20402222,3264,82,4,2,1,-0.175,-2.17433 } ); +cells.push_back( {20502212,3245,82,5,1,1,-0.225,-2.2239 } ); +cells.push_back( {20502222,3265,82,5,2,1,-0.225,-2.17433 } ); +cells.push_back( {20602212,3246,82,6,1,1,-0.275,-2.2239 } ); +cells.push_back( {20602222,3266,82,6,2,1,-0.275,-2.17433 } ); +cells.push_back( {20702212,3247,82,7,1,1,-0.325,-2.2239 } ); +cells.push_back( {20702222,3267,82,7,2,1,-0.325,-2.17433 } ); +cells.push_back( {20802212,3248,82,8,1,1,-0.375,-2.2239 } ); +cells.push_back( {20802222,3268,82,8,2,1,-0.375,-2.17433 } ); +cells.push_back( {20902212,3249,82,9,1,1,-0.425,-2.2239 } ); +cells.push_back( {20902222,3269,82,9,2,1,-0.425,-2.17433 } ); +cells.push_back( {21002212,3250,82,10,1,1,-0.475,-2.2239 } ); +cells.push_back( {21002222,3270,82,10,2,1,-0.475,-2.17433 } ); +cells.push_back( {21102212,3251,82,11,1,1,-0.525,-2.2239 } ); +cells.push_back( {21102222,3271,82,11,2,1,-0.525,-2.17433 } ); +cells.push_back( {21202212,3252,82,12,1,1,-0.575,-2.2239 } ); +cells.push_back( {21202222,3272,82,12,2,1,-0.575,-2.17433 } ); +cells.push_back( {21302212,3253,82,13,1,1,-0.625,-2.2239 } ); +cells.push_back( {21302222,3273,82,13,2,1,-0.625,-2.17433 } ); +cells.push_back( {21402212,3254,82,14,1,1,-0.675,-2.2239 } ); +cells.push_back( {21402222,3274,82,14,2,1,-0.675,-2.17433 } ); +cells.push_back( {21502212,3255,82,15,1,1,-0.725,-2.2239 } ); +cells.push_back( {21502222,3275,82,15,2,1,-0.725,-2.17433 } ); +cells.push_back( {21602212,3256,82,16,1,1,-0.775,-2.2239 } ); +cells.push_back( {21602222,3276,82,16,2,1,-0.775,-2.17433 } ); +cells.push_back( {21702212,3257,82,17,1,1,-0.825,-2.2239 } ); +cells.push_back( {21702222,3277,82,17,2,1,-0.825,-2.17433 } ); +cells.push_back( {21802212,3258,82,18,1,1,-0.875,-2.2239 } ); +cells.push_back( {21802222,3278,82,18,2,1,-0.875,-2.17433 } ); +cells.push_back( {21902212,3259,82,19,1,1,-0.925,-2.2239 } ); +cells.push_back( {21902222,3279,82,19,2,1,-0.925,-2.17433 } ); +cells.push_back( {22002212,3260,82,20,1,1,-0.967,-2.2239 } ); +cells.push_back( {22002222,3280,82,20,2,1,-0.967,-2.17433 } ); +cells.push_back( {20102311,3281,83,1,1,2,-0.02675,-2.11918 } ); +cells.push_back( {20102321,3301,83,1,2,2,-0.02675,-2.06961 } ); +cells.push_back( {20202311,3282,83,2,1,2,-0.075,-2.11918 } ); +cells.push_back( {20202321,3302,83,2,2,2,-0.075,-2.06961 } ); +cells.push_back( {20302311,3283,83,3,1,2,-0.125,-2.11918 } ); +cells.push_back( {20302321,3303,83,3,2,2,-0.125,-2.06961 } ); +cells.push_back( {20402311,3284,83,4,1,2,-0.175,-2.11918 } ); +cells.push_back( {20402321,3304,83,4,2,2,-0.175,-2.06961 } ); +cells.push_back( {20502311,3285,83,5,1,2,-0.225,-2.11918 } ); +cells.push_back( {20502321,3305,83,5,2,2,-0.225,-2.06961 } ); +cells.push_back( {20602311,3286,83,6,1,2,-0.275,-2.11918 } ); +cells.push_back( {20602321,3306,83,6,2,2,-0.275,-2.06961 } ); +cells.push_back( {20702311,3287,83,7,1,2,-0.325,-2.11918 } ); +cells.push_back( {20702321,3307,83,7,2,2,-0.325,-2.06961 } ); +cells.push_back( {20802311,3288,83,8,1,2,-0.375,-2.11918 } ); +cells.push_back( {20802321,3308,83,8,2,2,-0.375,-2.06961 } ); +cells.push_back( {20902311,3289,83,9,1,2,-0.425,-2.11918 } ); +cells.push_back( {20902321,3309,83,9,2,2,-0.425,-2.06961 } ); +cells.push_back( {21002311,3290,83,10,1,2,-0.475,-2.11918 } ); +cells.push_back( {21002321,3310,83,10,2,2,-0.475,-2.06961 } ); +cells.push_back( {21102311,3291,83,11,1,2,-0.525,-2.11918 } ); +cells.push_back( {21102321,3311,83,11,2,2,-0.525,-2.06961 } ); +cells.push_back( {21202311,3292,83,12,1,2,-0.575,-2.11918 } ); +cells.push_back( {21202321,3312,83,12,2,2,-0.575,-2.06961 } ); +cells.push_back( {21302311,3293,83,13,1,2,-0.625,-2.11918 } ); +cells.push_back( {21302321,3313,83,13,2,2,-0.625,-2.06961 } ); +cells.push_back( {21402311,3294,83,14,1,2,-0.675,-2.11918 } ); +cells.push_back( {21402321,3314,83,14,2,2,-0.675,-2.06961 } ); +cells.push_back( {21502311,3295,83,15,1,2,-0.725,-2.11918 } ); +cells.push_back( {21502321,3315,83,15,2,2,-0.725,-2.06961 } ); +cells.push_back( {21602311,3296,83,16,1,2,-0.775,-2.11918 } ); +cells.push_back( {21602321,3316,83,16,2,2,-0.775,-2.06961 } ); +cells.push_back( {21702311,3297,83,17,1,2,-0.825,-2.11918 } ); +cells.push_back( {21702321,3317,83,17,2,2,-0.825,-2.06961 } ); +cells.push_back( {21802311,3298,83,18,1,2,-0.875,-2.11918 } ); +cells.push_back( {21802321,3318,83,18,2,2,-0.875,-2.06961 } ); +cells.push_back( {21902311,3299,83,19,1,2,-0.925,-2.11918 } ); +cells.push_back( {21902321,3319,83,19,2,2,-0.925,-2.06961 } ); +cells.push_back( {22002311,3300,83,20,1,2,-0.967,-2.11918 } ); +cells.push_back( {22002321,3320,83,20,2,2,-0.967,-2.06961 } ); +cells.push_back( {20102312,3281,83,1,1,1,-0.02675,-2.11918 } ); +cells.push_back( {20102322,3301,83,1,2,1,-0.02675,-2.06961 } ); +cells.push_back( {20202312,3282,83,2,1,1,-0.075,-2.11918 } ); +cells.push_back( {20202322,3302,83,2,2,1,-0.075,-2.06961 } ); +cells.push_back( {20302312,3283,83,3,1,1,-0.125,-2.11918 } ); +cells.push_back( {20302322,3303,83,3,2,1,-0.125,-2.06961 } ); +cells.push_back( {20402312,3284,83,4,1,1,-0.175,-2.11918 } ); +cells.push_back( {20402322,3304,83,4,2,1,-0.175,-2.06961 } ); +cells.push_back( {20502312,3285,83,5,1,1,-0.225,-2.11918 } ); +cells.push_back( {20502322,3305,83,5,2,1,-0.225,-2.06961 } ); +cells.push_back( {20602312,3286,83,6,1,1,-0.275,-2.11918 } ); +cells.push_back( {20602322,3306,83,6,2,1,-0.275,-2.06961 } ); +cells.push_back( {20702312,3287,83,7,1,1,-0.325,-2.11918 } ); +cells.push_back( {20702322,3307,83,7,2,1,-0.325,-2.06961 } ); +cells.push_back( {20802312,3288,83,8,1,1,-0.375,-2.11918 } ); +cells.push_back( {20802322,3308,83,8,2,1,-0.375,-2.06961 } ); +cells.push_back( {20902312,3289,83,9,1,1,-0.425,-2.11918 } ); +cells.push_back( {20902322,3309,83,9,2,1,-0.425,-2.06961 } ); +cells.push_back( {21002312,3290,83,10,1,1,-0.475,-2.11918 } ); +cells.push_back( {21002322,3310,83,10,2,1,-0.475,-2.06961 } ); +cells.push_back( {21102312,3291,83,11,1,1,-0.525,-2.11918 } ); +cells.push_back( {21102322,3311,83,11,2,1,-0.525,-2.06961 } ); +cells.push_back( {21202312,3292,83,12,1,1,-0.575,-2.11918 } ); +cells.push_back( {21202322,3312,83,12,2,1,-0.575,-2.06961 } ); +cells.push_back( {21302312,3293,83,13,1,1,-0.625,-2.11918 } ); +cells.push_back( {21302322,3313,83,13,2,1,-0.625,-2.06961 } ); +cells.push_back( {21402312,3294,83,14,1,1,-0.675,-2.11918 } ); +cells.push_back( {21402322,3314,83,14,2,1,-0.675,-2.06961 } ); +cells.push_back( {21502312,3295,83,15,1,1,-0.725,-2.11918 } ); +cells.push_back( {21502322,3315,83,15,2,1,-0.725,-2.06961 } ); +cells.push_back( {21602312,3296,83,16,1,1,-0.775,-2.11918 } ); +cells.push_back( {21602322,3316,83,16,2,1,-0.775,-2.06961 } ); +cells.push_back( {21702312,3297,83,17,1,1,-0.825,-2.11918 } ); +cells.push_back( {21702322,3317,83,17,2,1,-0.825,-2.06961 } ); +cells.push_back( {21802312,3298,83,18,1,1,-0.875,-2.11918 } ); +cells.push_back( {21802322,3318,83,18,2,1,-0.875,-2.06961 } ); +cells.push_back( {21902312,3299,83,19,1,1,-0.925,-2.11918 } ); +cells.push_back( {21902322,3319,83,19,2,1,-0.925,-2.06961 } ); +cells.push_back( {22002312,3300,83,20,1,1,-0.967,-2.11918 } ); +cells.push_back( {22002322,3320,83,20,2,1,-0.967,-2.06961 } ); +cells.push_back( {20102411,3321,84,1,1,2,-0.02675,-2.01446 } ); +cells.push_back( {20102421,3341,84,1,2,2,-0.02675,-1.96489 } ); +cells.push_back( {20202411,3322,84,2,1,2,-0.075,-2.01446 } ); +cells.push_back( {20202421,3342,84,2,2,2,-0.075,-1.96489 } ); +cells.push_back( {20302411,3323,84,3,1,2,-0.125,-2.01446 } ); +cells.push_back( {20302421,3343,84,3,2,2,-0.125,-1.96489 } ); +cells.push_back( {20402411,3324,84,4,1,2,-0.175,-2.01446 } ); +cells.push_back( {20402421,3344,84,4,2,2,-0.175,-1.96489 } ); +cells.push_back( {20502411,3325,84,5,1,2,-0.225,-2.01446 } ); +cells.push_back( {20502421,3345,84,5,2,2,-0.225,-1.96489 } ); +cells.push_back( {20602411,3326,84,6,1,2,-0.275,-2.01446 } ); +cells.push_back( {20602421,3346,84,6,2,2,-0.275,-1.96489 } ); +cells.push_back( {20702411,3327,84,7,1,2,-0.325,-2.01446 } ); +cells.push_back( {20702421,3347,84,7,2,2,-0.325,-1.96489 } ); +cells.push_back( {20802411,3328,84,8,1,2,-0.375,-2.01446 } ); +cells.push_back( {20802421,3348,84,8,2,2,-0.375,-1.96489 } ); +cells.push_back( {20902411,3329,84,9,1,2,-0.425,-2.01446 } ); +cells.push_back( {20902421,3349,84,9,2,2,-0.425,-1.96489 } ); +cells.push_back( {21002411,3330,84,10,1,2,-0.475,-2.01446 } ); +cells.push_back( {21002421,3350,84,10,2,2,-0.475,-1.96489 } ); +cells.push_back( {21102411,3331,84,11,1,2,-0.525,-2.01446 } ); +cells.push_back( {21102421,3351,84,11,2,2,-0.525,-1.96489 } ); +cells.push_back( {21202411,3332,84,12,1,2,-0.575,-2.01446 } ); +cells.push_back( {21202421,3352,84,12,2,2,-0.575,-1.96489 } ); +cells.push_back( {21302411,3333,84,13,1,2,-0.625,-2.01446 } ); +cells.push_back( {21302421,3353,84,13,2,2,-0.625,-1.96489 } ); +cells.push_back( {21402411,3334,84,14,1,2,-0.675,-2.01446 } ); +cells.push_back( {21402421,3354,84,14,2,2,-0.675,-1.96489 } ); +cells.push_back( {21502411,3335,84,15,1,2,-0.725,-2.01446 } ); +cells.push_back( {21502421,3355,84,15,2,2,-0.725,-1.96489 } ); +cells.push_back( {21602411,3336,84,16,1,2,-0.775,-2.01446 } ); +cells.push_back( {21602421,3356,84,16,2,2,-0.775,-1.96489 } ); +cells.push_back( {21702411,3337,84,17,1,2,-0.825,-2.01446 } ); +cells.push_back( {21702421,3357,84,17,2,2,-0.825,-1.96489 } ); +cells.push_back( {21802411,3338,84,18,1,2,-0.875,-2.01446 } ); +cells.push_back( {21802421,3358,84,18,2,2,-0.875,-1.96489 } ); +cells.push_back( {21902411,3339,84,19,1,2,-0.925,-2.01446 } ); +cells.push_back( {21902421,3359,84,19,2,2,-0.925,-1.96489 } ); +cells.push_back( {22002411,3340,84,20,1,2,-0.967,-2.01446 } ); +cells.push_back( {22002421,3360,84,20,2,2,-0.967,-1.96489 } ); +cells.push_back( {20102412,3321,84,1,1,1,-0.02675,-2.01446 } ); +cells.push_back( {20102422,3341,84,1,2,1,-0.02675,-1.96489 } ); +cells.push_back( {20202412,3322,84,2,1,1,-0.075,-2.01446 } ); +cells.push_back( {20202422,3342,84,2,2,1,-0.075,-1.96489 } ); +cells.push_back( {20302412,3323,84,3,1,1,-0.125,-2.01446 } ); +cells.push_back( {20302422,3343,84,3,2,1,-0.125,-1.96489 } ); +cells.push_back( {20402412,3324,84,4,1,1,-0.175,-2.01446 } ); +cells.push_back( {20402422,3344,84,4,2,1,-0.175,-1.96489 } ); +cells.push_back( {20502412,3325,84,5,1,1,-0.225,-2.01446 } ); +cells.push_back( {20502422,3345,84,5,2,1,-0.225,-1.96489 } ); +cells.push_back( {20602412,3326,84,6,1,1,-0.275,-2.01446 } ); +cells.push_back( {20602422,3346,84,6,2,1,-0.275,-1.96489 } ); +cells.push_back( {20702412,3327,84,7,1,1,-0.325,-2.01446 } ); +cells.push_back( {20702422,3347,84,7,2,1,-0.325,-1.96489 } ); +cells.push_back( {20802412,3328,84,8,1,1,-0.375,-2.01446 } ); +cells.push_back( {20802422,3348,84,8,2,1,-0.375,-1.96489 } ); +cells.push_back( {20902412,3329,84,9,1,1,-0.425,-2.01446 } ); +cells.push_back( {20902422,3349,84,9,2,1,-0.425,-1.96489 } ); +cells.push_back( {21002412,3330,84,10,1,1,-0.475,-2.01446 } ); +cells.push_back( {21002422,3350,84,10,2,1,-0.475,-1.96489 } ); +cells.push_back( {21102412,3331,84,11,1,1,-0.525,-2.01446 } ); +cells.push_back( {21102422,3351,84,11,2,1,-0.525,-1.96489 } ); +cells.push_back( {21202412,3332,84,12,1,1,-0.575,-2.01446 } ); +cells.push_back( {21202422,3352,84,12,2,1,-0.575,-1.96489 } ); +cells.push_back( {21302412,3333,84,13,1,1,-0.625,-2.01446 } ); +cells.push_back( {21302422,3353,84,13,2,1,-0.625,-1.96489 } ); +cells.push_back( {21402412,3334,84,14,1,1,-0.675,-2.01446 } ); +cells.push_back( {21402422,3354,84,14,2,1,-0.675,-1.96489 } ); +cells.push_back( {21502412,3335,84,15,1,1,-0.725,-2.01446 } ); +cells.push_back( {21502422,3355,84,15,2,1,-0.725,-1.96489 } ); +cells.push_back( {21602412,3336,84,16,1,1,-0.775,-2.01446 } ); +cells.push_back( {21602422,3356,84,16,2,1,-0.775,-1.96489 } ); +cells.push_back( {21702412,3337,84,17,1,1,-0.825,-2.01446 } ); +cells.push_back( {21702422,3357,84,17,2,1,-0.825,-1.96489 } ); +cells.push_back( {21802412,3338,84,18,1,1,-0.875,-2.01446 } ); +cells.push_back( {21802422,3358,84,18,2,1,-0.875,-1.96489 } ); +cells.push_back( {21902412,3339,84,19,1,1,-0.925,-2.01446 } ); +cells.push_back( {21902422,3359,84,19,2,1,-0.925,-1.96489 } ); +cells.push_back( {22002412,3340,84,20,1,1,-0.967,-2.01446 } ); +cells.push_back( {22002422,3360,84,20,2,1,-0.967,-1.96489 } ); +cells.push_back( {20102511,3361,85,1,1,2,-0.02675,-1.90974 } ); +cells.push_back( {20102521,3381,85,1,2,2,-0.02675,-1.86017 } ); +cells.push_back( {20202511,3362,85,2,1,2,-0.075,-1.90974 } ); +cells.push_back( {20202521,3382,85,2,2,2,-0.075,-1.86017 } ); +cells.push_back( {20302511,3363,85,3,1,2,-0.125,-1.90974 } ); +cells.push_back( {20302521,3383,85,3,2,2,-0.125,-1.86017 } ); +cells.push_back( {20402511,3364,85,4,1,2,-0.175,-1.90974 } ); +cells.push_back( {20402521,3384,85,4,2,2,-0.175,-1.86017 } ); +cells.push_back( {20502511,3365,85,5,1,2,-0.225,-1.90974 } ); +cells.push_back( {20502521,3385,85,5,2,2,-0.225,-1.86017 } ); +cells.push_back( {20602511,3366,85,6,1,2,-0.275,-1.90974 } ); +cells.push_back( {20602521,3386,85,6,2,2,-0.275,-1.86017 } ); +cells.push_back( {20702511,3367,85,7,1,2,-0.325,-1.90974 } ); +cells.push_back( {20702521,3387,85,7,2,2,-0.325,-1.86017 } ); +cells.push_back( {20802511,3368,85,8,1,2,-0.375,-1.90974 } ); +cells.push_back( {20802521,3388,85,8,2,2,-0.375,-1.86017 } ); +cells.push_back( {20902511,3369,85,9,1,2,-0.425,-1.90974 } ); +cells.push_back( {20902521,3389,85,9,2,2,-0.425,-1.86017 } ); +cells.push_back( {21002511,3370,85,10,1,2,-0.475,-1.90974 } ); +cells.push_back( {21002521,3390,85,10,2,2,-0.475,-1.86017 } ); +cells.push_back( {21102511,3371,85,11,1,2,-0.525,-1.90974 } ); +cells.push_back( {21102521,3391,85,11,2,2,-0.525,-1.86017 } ); +cells.push_back( {21202511,3372,85,12,1,2,-0.575,-1.90974 } ); +cells.push_back( {21202521,3392,85,12,2,2,-0.575,-1.86017 } ); +cells.push_back( {21302511,3373,85,13,1,2,-0.625,-1.90974 } ); +cells.push_back( {21302521,3393,85,13,2,2,-0.625,-1.86017 } ); +cells.push_back( {21402511,3374,85,14,1,2,-0.675,-1.90974 } ); +cells.push_back( {21402521,3394,85,14,2,2,-0.675,-1.86017 } ); +cells.push_back( {21502511,3375,85,15,1,2,-0.725,-1.90974 } ); +cells.push_back( {21502521,3395,85,15,2,2,-0.725,-1.86017 } ); +cells.push_back( {21602511,3376,85,16,1,2,-0.775,-1.90974 } ); +cells.push_back( {21602521,3396,85,16,2,2,-0.775,-1.86017 } ); +cells.push_back( {21702511,3377,85,17,1,2,-0.825,-1.90974 } ); +cells.push_back( {21702521,3397,85,17,2,2,-0.825,-1.86017 } ); +cells.push_back( {21802511,3378,85,18,1,2,-0.875,-1.90974 } ); +cells.push_back( {21802521,3398,85,18,2,2,-0.875,-1.86017 } ); +cells.push_back( {21902511,3379,85,19,1,2,-0.925,-1.90974 } ); +cells.push_back( {21902521,3399,85,19,2,2,-0.925,-1.86017 } ); +cells.push_back( {22002511,3380,85,20,1,2,-0.967,-1.90974 } ); +cells.push_back( {22002521,3400,85,20,2,2,-0.967,-1.86017 } ); +cells.push_back( {20102512,3361,85,1,1,1,-0.02675,-1.90974 } ); +cells.push_back( {20102522,3381,85,1,2,1,-0.02675,-1.86017 } ); +cells.push_back( {20202512,3362,85,2,1,1,-0.075,-1.90974 } ); +cells.push_back( {20202522,3382,85,2,2,1,-0.075,-1.86017 } ); +cells.push_back( {20302512,3363,85,3,1,1,-0.125,-1.90974 } ); +cells.push_back( {20302522,3383,85,3,2,1,-0.125,-1.86017 } ); +cells.push_back( {20402512,3364,85,4,1,1,-0.175,-1.90974 } ); +cells.push_back( {20402522,3384,85,4,2,1,-0.175,-1.86017 } ); +cells.push_back( {20502512,3365,85,5,1,1,-0.225,-1.90974 } ); +cells.push_back( {20502522,3385,85,5,2,1,-0.225,-1.86017 } ); +cells.push_back( {20602512,3366,85,6,1,1,-0.275,-1.90974 } ); +cells.push_back( {20602522,3386,85,6,2,1,-0.275,-1.86017 } ); +cells.push_back( {20702512,3367,85,7,1,1,-0.325,-1.90974 } ); +cells.push_back( {20702522,3387,85,7,2,1,-0.325,-1.86017 } ); +cells.push_back( {20802512,3368,85,8,1,1,-0.375,-1.90974 } ); +cells.push_back( {20802522,3388,85,8,2,1,-0.375,-1.86017 } ); +cells.push_back( {20902512,3369,85,9,1,1,-0.425,-1.90974 } ); +cells.push_back( {20902522,3389,85,9,2,1,-0.425,-1.86017 } ); +cells.push_back( {21002512,3370,85,10,1,1,-0.475,-1.90974 } ); +cells.push_back( {21002522,3390,85,10,2,1,-0.475,-1.86017 } ); +cells.push_back( {21102512,3371,85,11,1,1,-0.525,-1.90974 } ); +cells.push_back( {21102522,3391,85,11,2,1,-0.525,-1.86017 } ); +cells.push_back( {21202512,3372,85,12,1,1,-0.575,-1.90974 } ); +cells.push_back( {21202522,3392,85,12,2,1,-0.575,-1.86017 } ); +cells.push_back( {21302512,3373,85,13,1,1,-0.625,-1.90974 } ); +cells.push_back( {21302522,3393,85,13,2,1,-0.625,-1.86017 } ); +cells.push_back( {21402512,3374,85,14,1,1,-0.675,-1.90974 } ); +cells.push_back( {21402522,3394,85,14,2,1,-0.675,-1.86017 } ); +cells.push_back( {21502512,3375,85,15,1,1,-0.725,-1.90974 } ); +cells.push_back( {21502522,3395,85,15,2,1,-0.725,-1.86017 } ); +cells.push_back( {21602512,3376,85,16,1,1,-0.775,-1.90974 } ); +cells.push_back( {21602522,3396,85,16,2,1,-0.775,-1.86017 } ); +cells.push_back( {21702512,3377,85,17,1,1,-0.825,-1.90974 } ); +cells.push_back( {21702522,3397,85,17,2,1,-0.825,-1.86017 } ); +cells.push_back( {21802512,3378,85,18,1,1,-0.875,-1.90974 } ); +cells.push_back( {21802522,3398,85,18,2,1,-0.875,-1.86017 } ); +cells.push_back( {21902512,3379,85,19,1,1,-0.925,-1.90974 } ); +cells.push_back( {21902522,3399,85,19,2,1,-0.925,-1.86017 } ); +cells.push_back( {22002512,3380,85,20,1,1,-0.967,-1.90974 } ); +cells.push_back( {22002522,3400,85,20,2,1,-0.967,-1.86017 } ); +cells.push_back( {20102611,3401,86,1,1,2,-0.02675,-1.80502 } ); +cells.push_back( {20102621,3421,86,1,2,2,-0.02675,-1.75545 } ); +cells.push_back( {20202611,3402,86,2,1,2,-0.075,-1.80502 } ); +cells.push_back( {20202621,3422,86,2,2,2,-0.075,-1.75545 } ); +cells.push_back( {20302611,3403,86,3,1,2,-0.125,-1.80502 } ); +cells.push_back( {20302621,3423,86,3,2,2,-0.125,-1.75545 } ); +cells.push_back( {20402611,3404,86,4,1,2,-0.175,-1.80502 } ); +cells.push_back( {20402621,3424,86,4,2,2,-0.175,-1.75545 } ); +cells.push_back( {20502611,3405,86,5,1,2,-0.225,-1.80502 } ); +cells.push_back( {20502621,3425,86,5,2,2,-0.225,-1.75545 } ); +cells.push_back( {20602611,3406,86,6,1,2,-0.275,-1.80502 } ); +cells.push_back( {20602621,3426,86,6,2,2,-0.275,-1.75545 } ); +cells.push_back( {20702611,3407,86,7,1,2,-0.325,-1.80502 } ); +cells.push_back( {20702621,3427,86,7,2,2,-0.325,-1.75545 } ); +cells.push_back( {20802611,3408,86,8,1,2,-0.375,-1.80502 } ); +cells.push_back( {20802621,3428,86,8,2,2,-0.375,-1.75545 } ); +cells.push_back( {20902611,3409,86,9,1,2,-0.425,-1.80502 } ); +cells.push_back( {20902621,3429,86,9,2,2,-0.425,-1.75545 } ); +cells.push_back( {21002611,3410,86,10,1,2,-0.475,-1.80502 } ); +cells.push_back( {21002621,3430,86,10,2,2,-0.475,-1.75545 } ); +cells.push_back( {21102611,3411,86,11,1,2,-0.525,-1.80502 } ); +cells.push_back( {21102621,3431,86,11,2,2,-0.525,-1.75545 } ); +cells.push_back( {21202611,3412,86,12,1,2,-0.575,-1.80502 } ); +cells.push_back( {21202621,3432,86,12,2,2,-0.575,-1.75545 } ); +cells.push_back( {21302611,3413,86,13,1,2,-0.625,-1.80502 } ); +cells.push_back( {21302621,3433,86,13,2,2,-0.625,-1.75545 } ); +cells.push_back( {21402611,3414,86,14,1,2,-0.675,-1.80502 } ); +cells.push_back( {21402621,3434,86,14,2,2,-0.675,-1.75545 } ); +cells.push_back( {21502611,3415,86,15,1,2,-0.725,-1.80502 } ); +cells.push_back( {21502621,3435,86,15,2,2,-0.725,-1.75545 } ); +cells.push_back( {21602611,3416,86,16,1,2,-0.775,-1.80502 } ); +cells.push_back( {21602621,3436,86,16,2,2,-0.775,-1.75545 } ); +cells.push_back( {21702611,3417,86,17,1,2,-0.825,-1.80502 } ); +cells.push_back( {21702621,3437,86,17,2,2,-0.825,-1.75545 } ); +cells.push_back( {21802611,3418,86,18,1,2,-0.875,-1.80502 } ); +cells.push_back( {21802621,3438,86,18,2,2,-0.875,-1.75545 } ); +cells.push_back( {21902611,3419,86,19,1,2,-0.925,-1.80502 } ); +cells.push_back( {21902621,3439,86,19,2,2,-0.925,-1.75545 } ); +cells.push_back( {22002611,3420,86,20,1,2,-0.967,-1.80502 } ); +cells.push_back( {22002621,3440,86,20,2,2,-0.967,-1.75545 } ); +cells.push_back( {20102612,3401,86,1,1,1,-0.02675,-1.80502 } ); +cells.push_back( {20102622,3421,86,1,2,1,-0.02675,-1.75545 } ); +cells.push_back( {20202612,3402,86,2,1,1,-0.075,-1.80502 } ); +cells.push_back( {20202622,3422,86,2,2,1,-0.075,-1.75545 } ); +cells.push_back( {20302612,3403,86,3,1,1,-0.125,-1.80502 } ); +cells.push_back( {20302622,3423,86,3,2,1,-0.125,-1.75545 } ); +cells.push_back( {20402612,3404,86,4,1,1,-0.175,-1.80502 } ); +cells.push_back( {20402622,3424,86,4,2,1,-0.175,-1.75545 } ); +cells.push_back( {20502612,3405,86,5,1,1,-0.225,-1.80502 } ); +cells.push_back( {20502622,3425,86,5,2,1,-0.225,-1.75545 } ); +cells.push_back( {20602612,3406,86,6,1,1,-0.275,-1.80502 } ); +cells.push_back( {20602622,3426,86,6,2,1,-0.275,-1.75545 } ); +cells.push_back( {20702612,3407,86,7,1,1,-0.325,-1.80502 } ); +cells.push_back( {20702622,3427,86,7,2,1,-0.325,-1.75545 } ); +cells.push_back( {20802612,3408,86,8,1,1,-0.375,-1.80502 } ); +cells.push_back( {20802622,3428,86,8,2,1,-0.375,-1.75545 } ); +cells.push_back( {20902612,3409,86,9,1,1,-0.425,-1.80502 } ); +cells.push_back( {20902622,3429,86,9,2,1,-0.425,-1.75545 } ); +cells.push_back( {21002612,3410,86,10,1,1,-0.475,-1.80502 } ); +cells.push_back( {21002622,3430,86,10,2,1,-0.475,-1.75545 } ); +cells.push_back( {21102612,3411,86,11,1,1,-0.525,-1.80502 } ); +cells.push_back( {21102622,3431,86,11,2,1,-0.525,-1.75545 } ); +cells.push_back( {21202612,3412,86,12,1,1,-0.575,-1.80502 } ); +cells.push_back( {21202622,3432,86,12,2,1,-0.575,-1.75545 } ); +cells.push_back( {21302612,3413,86,13,1,1,-0.625,-1.80502 } ); +cells.push_back( {21302622,3433,86,13,2,1,-0.625,-1.75545 } ); +cells.push_back( {21402612,3414,86,14,1,1,-0.675,-1.80502 } ); +cells.push_back( {21402622,3434,86,14,2,1,-0.675,-1.75545 } ); +cells.push_back( {21502612,3415,86,15,1,1,-0.725,-1.80502 } ); +cells.push_back( {21502622,3435,86,15,2,1,-0.725,-1.75545 } ); +cells.push_back( {21602612,3416,86,16,1,1,-0.775,-1.80502 } ); +cells.push_back( {21602622,3436,86,16,2,1,-0.775,-1.75545 } ); +cells.push_back( {21702612,3417,86,17,1,1,-0.825,-1.80502 } ); +cells.push_back( {21702622,3437,86,17,2,1,-0.825,-1.75545 } ); +cells.push_back( {21802612,3418,86,18,1,1,-0.875,-1.80502 } ); +cells.push_back( {21802622,3438,86,18,2,1,-0.875,-1.75545 } ); +cells.push_back( {21902612,3419,86,19,1,1,-0.925,-1.80502 } ); +cells.push_back( {21902622,3439,86,19,2,1,-0.925,-1.75545 } ); +cells.push_back( {22002612,3420,86,20,1,1,-0.967,-1.80502 } ); +cells.push_back( {22002622,3440,86,20,2,1,-0.967,-1.75545 } ); +cells.push_back( {20102711,3441,87,1,1,2,-0.02675,-1.7003 } ); +cells.push_back( {20102721,3461,87,1,2,2,-0.02675,-1.65073 } ); +cells.push_back( {20202711,3442,87,2,1,2,-0.075,-1.7003 } ); +cells.push_back( {20202721,3462,87,2,2,2,-0.075,-1.65073 } ); +cells.push_back( {20302711,3443,87,3,1,2,-0.125,-1.7003 } ); +cells.push_back( {20302721,3463,87,3,2,2,-0.125,-1.65073 } ); +cells.push_back( {20402711,3444,87,4,1,2,-0.175,-1.7003 } ); +cells.push_back( {20402721,3464,87,4,2,2,-0.175,-1.65073 } ); +cells.push_back( {20502711,3445,87,5,1,2,-0.225,-1.7003 } ); +cells.push_back( {20502721,3465,87,5,2,2,-0.225,-1.65073 } ); +cells.push_back( {20602711,3446,87,6,1,2,-0.275,-1.7003 } ); +cells.push_back( {20602721,3466,87,6,2,2,-0.275,-1.65073 } ); +cells.push_back( {20702711,3447,87,7,1,2,-0.325,-1.7003 } ); +cells.push_back( {20702721,3467,87,7,2,2,-0.325,-1.65073 } ); +cells.push_back( {20802711,3448,87,8,1,2,-0.375,-1.7003 } ); +cells.push_back( {20802721,3468,87,8,2,2,-0.375,-1.65073 } ); +cells.push_back( {20902711,3449,87,9,1,2,-0.425,-1.7003 } ); +cells.push_back( {20902721,3469,87,9,2,2,-0.425,-1.65073 } ); +cells.push_back( {21002711,3450,87,10,1,2,-0.475,-1.7003 } ); +cells.push_back( {21002721,3470,87,10,2,2,-0.475,-1.65073 } ); +cells.push_back( {21102711,3451,87,11,1,2,-0.525,-1.7003 } ); +cells.push_back( {21102721,3471,87,11,2,2,-0.525,-1.65073 } ); +cells.push_back( {21202711,3452,87,12,1,2,-0.575,-1.7003 } ); +cells.push_back( {21202721,3472,87,12,2,2,-0.575,-1.65073 } ); +cells.push_back( {21302711,3453,87,13,1,2,-0.625,-1.7003 } ); +cells.push_back( {21302721,3473,87,13,2,2,-0.625,-1.65073 } ); +cells.push_back( {21402711,3454,87,14,1,2,-0.675,-1.7003 } ); +cells.push_back( {21402721,3474,87,14,2,2,-0.675,-1.65073 } ); +cells.push_back( {21502711,3455,87,15,1,2,-0.725,-1.7003 } ); +cells.push_back( {21502721,3475,87,15,2,2,-0.725,-1.65073 } ); +cells.push_back( {21602711,3456,87,16,1,2,-0.775,-1.7003 } ); +cells.push_back( {21602721,3476,87,16,2,2,-0.775,-1.65073 } ); +cells.push_back( {21702711,3457,87,17,1,2,-0.825,-1.7003 } ); +cells.push_back( {21702721,3477,87,17,2,2,-0.825,-1.65073 } ); +cells.push_back( {21802711,3458,87,18,1,2,-0.875,-1.7003 } ); +cells.push_back( {21802721,3478,87,18,2,2,-0.875,-1.65073 } ); +cells.push_back( {21902711,3459,87,19,1,2,-0.925,-1.7003 } ); +cells.push_back( {21902721,3479,87,19,2,2,-0.925,-1.65073 } ); +cells.push_back( {22002711,3460,87,20,1,2,-0.967,-1.7003 } ); +cells.push_back( {22002721,3480,87,20,2,2,-0.967,-1.65073 } ); +cells.push_back( {20102712,3441,87,1,1,1,-0.02675,-1.7003 } ); +cells.push_back( {20102722,3461,87,1,2,1,-0.02675,-1.65073 } ); +cells.push_back( {20202712,3442,87,2,1,1,-0.075,-1.7003 } ); +cells.push_back( {20202722,3462,87,2,2,1,-0.075,-1.65073 } ); +cells.push_back( {20302712,3443,87,3,1,1,-0.125,-1.7003 } ); +cells.push_back( {20302722,3463,87,3,2,1,-0.125,-1.65073 } ); +cells.push_back( {20402712,3444,87,4,1,1,-0.175,-1.7003 } ); +cells.push_back( {20402722,3464,87,4,2,1,-0.175,-1.65073 } ); +cells.push_back( {20502712,3445,87,5,1,1,-0.225,-1.7003 } ); +cells.push_back( {20502722,3465,87,5,2,1,-0.225,-1.65073 } ); +cells.push_back( {20602712,3446,87,6,1,1,-0.275,-1.7003 } ); +cells.push_back( {20602722,3466,87,6,2,1,-0.275,-1.65073 } ); +cells.push_back( {20702712,3447,87,7,1,1,-0.325,-1.7003 } ); +cells.push_back( {20702722,3467,87,7,2,1,-0.325,-1.65073 } ); +cells.push_back( {20802712,3448,87,8,1,1,-0.375,-1.7003 } ); +cells.push_back( {20802722,3468,87,8,2,1,-0.375,-1.65073 } ); +cells.push_back( {20902712,3449,87,9,1,1,-0.425,-1.7003 } ); +cells.push_back( {20902722,3469,87,9,2,1,-0.425,-1.65073 } ); +cells.push_back( {21002712,3450,87,10,1,1,-0.475,-1.7003 } ); +cells.push_back( {21002722,3470,87,10,2,1,-0.475,-1.65073 } ); +cells.push_back( {21102712,3451,87,11,1,1,-0.525,-1.7003 } ); +cells.push_back( {21102722,3471,87,11,2,1,-0.525,-1.65073 } ); +cells.push_back( {21202712,3452,87,12,1,1,-0.575,-1.7003 } ); +cells.push_back( {21202722,3472,87,12,2,1,-0.575,-1.65073 } ); +cells.push_back( {21302712,3453,87,13,1,1,-0.625,-1.7003 } ); +cells.push_back( {21302722,3473,87,13,2,1,-0.625,-1.65073 } ); +cells.push_back( {21402712,3454,87,14,1,1,-0.675,-1.7003 } ); +cells.push_back( {21402722,3474,87,14,2,1,-0.675,-1.65073 } ); +cells.push_back( {21502712,3455,87,15,1,1,-0.725,-1.7003 } ); +cells.push_back( {21502722,3475,87,15,2,1,-0.725,-1.65073 } ); +cells.push_back( {21602712,3456,87,16,1,1,-0.775,-1.7003 } ); +cells.push_back( {21602722,3476,87,16,2,1,-0.775,-1.65073 } ); +cells.push_back( {21702712,3457,87,17,1,1,-0.825,-1.7003 } ); +cells.push_back( {21702722,3477,87,17,2,1,-0.825,-1.65073 } ); +cells.push_back( {21802712,3458,87,18,1,1,-0.875,-1.7003 } ); +cells.push_back( {21802722,3478,87,18,2,1,-0.875,-1.65073 } ); +cells.push_back( {21902712,3459,87,19,1,1,-0.925,-1.7003 } ); +cells.push_back( {21902722,3479,87,19,2,1,-0.925,-1.65073 } ); +cells.push_back( {22002712,3460,87,20,1,1,-0.967,-1.7003 } ); +cells.push_back( {22002722,3480,87,20,2,1,-0.967,-1.65073 } ); +cells.push_back( {20102811,3481,88,1,1,2,-0.02675,-1.59558 } ); +cells.push_back( {20102821,3501,88,1,2,2,-0.02675,-1.54601 } ); +cells.push_back( {20202811,3482,88,2,1,2,-0.075,-1.59558 } ); +cells.push_back( {20202821,3502,88,2,2,2,-0.075,-1.54601 } ); +cells.push_back( {20302811,3483,88,3,1,2,-0.125,-1.59558 } ); +cells.push_back( {20302821,3503,88,3,2,2,-0.125,-1.54601 } ); +cells.push_back( {20402811,3484,88,4,1,2,-0.175,-1.59558 } ); +cells.push_back( {20402821,3504,88,4,2,2,-0.175,-1.54601 } ); +cells.push_back( {20502811,3485,88,5,1,2,-0.225,-1.59558 } ); +cells.push_back( {20502821,3505,88,5,2,2,-0.225,-1.54601 } ); +cells.push_back( {20602811,3486,88,6,1,2,-0.275,-1.59558 } ); +cells.push_back( {20602821,3506,88,6,2,2,-0.275,-1.54601 } ); +cells.push_back( {20702811,3487,88,7,1,2,-0.325,-1.59558 } ); +cells.push_back( {20702821,3507,88,7,2,2,-0.325,-1.54601 } ); +cells.push_back( {20802811,3488,88,8,1,2,-0.375,-1.59558 } ); +cells.push_back( {20802821,3508,88,8,2,2,-0.375,-1.54601 } ); +cells.push_back( {20902811,3489,88,9,1,2,-0.425,-1.59558 } ); +cells.push_back( {20902821,3509,88,9,2,2,-0.425,-1.54601 } ); +cells.push_back( {21002811,3490,88,10,1,2,-0.475,-1.59558 } ); +cells.push_back( {21002821,3510,88,10,2,2,-0.475,-1.54601 } ); +cells.push_back( {21102811,3491,88,11,1,2,-0.525,-1.59558 } ); +cells.push_back( {21102821,3511,88,11,2,2,-0.525,-1.54601 } ); +cells.push_back( {21202811,3492,88,12,1,2,-0.575,-1.59558 } ); +cells.push_back( {21202821,3512,88,12,2,2,-0.575,-1.54601 } ); +cells.push_back( {21302811,3493,88,13,1,2,-0.625,-1.59558 } ); +cells.push_back( {21302821,3513,88,13,2,2,-0.625,-1.54601 } ); +cells.push_back( {21402811,3494,88,14,1,2,-0.675,-1.59558 } ); +cells.push_back( {21402821,3514,88,14,2,2,-0.675,-1.54601 } ); +cells.push_back( {21502811,3495,88,15,1,2,-0.725,-1.59558 } ); +cells.push_back( {21502821,3515,88,15,2,2,-0.725,-1.54601 } ); +cells.push_back( {21602811,3496,88,16,1,2,-0.775,-1.59558 } ); +cells.push_back( {21602821,3516,88,16,2,2,-0.775,-1.54601 } ); +cells.push_back( {21702811,3497,88,17,1,2,-0.825,-1.59558 } ); +cells.push_back( {21702821,3517,88,17,2,2,-0.825,-1.54601 } ); +cells.push_back( {21802811,3498,88,18,1,2,-0.875,-1.59558 } ); +cells.push_back( {21802821,3518,88,18,2,2,-0.875,-1.54601 } ); +cells.push_back( {21902811,3499,88,19,1,2,-0.925,-1.59558 } ); +cells.push_back( {21902821,3519,88,19,2,2,-0.925,-1.54601 } ); +cells.push_back( {22002811,3500,88,20,1,2,-0.967,-1.59558 } ); +cells.push_back( {22002821,3520,88,20,2,2,-0.967,-1.54601 } ); +cells.push_back( {20102812,3481,88,1,1,1,-0.02675,-1.59558 } ); +cells.push_back( {20102822,3501,88,1,2,1,-0.02675,-1.54601 } ); +cells.push_back( {20202812,3482,88,2,1,1,-0.075,-1.59558 } ); +cells.push_back( {20202822,3502,88,2,2,1,-0.075,-1.54601 } ); +cells.push_back( {20302812,3483,88,3,1,1,-0.125,-1.59558 } ); +cells.push_back( {20302822,3503,88,3,2,1,-0.125,-1.54601 } ); +cells.push_back( {20402812,3484,88,4,1,1,-0.175,-1.59558 } ); +cells.push_back( {20402822,3504,88,4,2,1,-0.175,-1.54601 } ); +cells.push_back( {20502812,3485,88,5,1,1,-0.225,-1.59558 } ); +cells.push_back( {20502822,3505,88,5,2,1,-0.225,-1.54601 } ); +cells.push_back( {20602812,3486,88,6,1,1,-0.275,-1.59558 } ); +cells.push_back( {20602822,3506,88,6,2,1,-0.275,-1.54601 } ); +cells.push_back( {20702812,3487,88,7,1,1,-0.325,-1.59558 } ); +cells.push_back( {20702822,3507,88,7,2,1,-0.325,-1.54601 } ); +cells.push_back( {20802812,3488,88,8,1,1,-0.375,-1.59558 } ); +cells.push_back( {20802822,3508,88,8,2,1,-0.375,-1.54601 } ); +cells.push_back( {20902812,3489,88,9,1,1,-0.425,-1.59558 } ); +cells.push_back( {20902822,3509,88,9,2,1,-0.425,-1.54601 } ); +cells.push_back( {21002812,3490,88,10,1,1,-0.475,-1.59558 } ); +cells.push_back( {21002822,3510,88,10,2,1,-0.475,-1.54601 } ); +cells.push_back( {21102812,3491,88,11,1,1,-0.525,-1.59558 } ); +cells.push_back( {21102822,3511,88,11,2,1,-0.525,-1.54601 } ); +cells.push_back( {21202812,3492,88,12,1,1,-0.575,-1.59558 } ); +cells.push_back( {21202822,3512,88,12,2,1,-0.575,-1.54601 } ); +cells.push_back( {21302812,3493,88,13,1,1,-0.625,-1.59558 } ); +cells.push_back( {21302822,3513,88,13,2,1,-0.625,-1.54601 } ); +cells.push_back( {21402812,3494,88,14,1,1,-0.675,-1.59558 } ); +cells.push_back( {21402822,3514,88,14,2,1,-0.675,-1.54601 } ); +cells.push_back( {21502812,3495,88,15,1,1,-0.725,-1.59558 } ); +cells.push_back( {21502822,3515,88,15,2,1,-0.725,-1.54601 } ); +cells.push_back( {21602812,3496,88,16,1,1,-0.775,-1.59558 } ); +cells.push_back( {21602822,3516,88,16,2,1,-0.775,-1.54601 } ); +cells.push_back( {21702812,3497,88,17,1,1,-0.825,-1.59558 } ); +cells.push_back( {21702822,3517,88,17,2,1,-0.825,-1.54601 } ); +cells.push_back( {21802812,3498,88,18,1,1,-0.875,-1.59558 } ); +cells.push_back( {21802822,3518,88,18,2,1,-0.875,-1.54601 } ); +cells.push_back( {21902812,3499,88,19,1,1,-0.925,-1.59558 } ); +cells.push_back( {21902822,3519,88,19,2,1,-0.925,-1.54601 } ); +cells.push_back( {22002812,3500,88,20,1,1,-0.967,-1.59558 } ); +cells.push_back( {22002822,3520,88,20,2,1,-0.967,-1.54601 } ); +cells.push_back( {20102911,3521,89,1,1,2,-0.02675,-1.49086 } ); +cells.push_back( {20102921,3541,89,1,2,2,-0.02675,-1.4413 } ); +cells.push_back( {20202911,3522,89,2,1,2,-0.075,-1.49086 } ); +cells.push_back( {20202921,3542,89,2,2,2,-0.075,-1.4413 } ); +cells.push_back( {20302911,3523,89,3,1,2,-0.125,-1.49086 } ); +cells.push_back( {20302921,3543,89,3,2,2,-0.125,-1.4413 } ); +cells.push_back( {20402911,3524,89,4,1,2,-0.175,-1.49086 } ); +cells.push_back( {20402921,3544,89,4,2,2,-0.175,-1.4413 } ); +cells.push_back( {20502911,3525,89,5,1,2,-0.225,-1.49086 } ); +cells.push_back( {20502921,3545,89,5,2,2,-0.225,-1.4413 } ); +cells.push_back( {20602911,3526,89,6,1,2,-0.275,-1.49086 } ); +cells.push_back( {20602921,3546,89,6,2,2,-0.275,-1.4413 } ); +cells.push_back( {20702911,3527,89,7,1,2,-0.325,-1.49086 } ); +cells.push_back( {20702921,3547,89,7,2,2,-0.325,-1.4413 } ); +cells.push_back( {20802911,3528,89,8,1,2,-0.375,-1.49086 } ); +cells.push_back( {20802921,3548,89,8,2,2,-0.375,-1.4413 } ); +cells.push_back( {20902911,3529,89,9,1,2,-0.425,-1.49086 } ); +cells.push_back( {20902921,3549,89,9,2,2,-0.425,-1.4413 } ); +cells.push_back( {21002911,3530,89,10,1,2,-0.475,-1.49086 } ); +cells.push_back( {21002921,3550,89,10,2,2,-0.475,-1.4413 } ); +cells.push_back( {21102911,3531,89,11,1,2,-0.525,-1.49086 } ); +cells.push_back( {21102921,3551,89,11,2,2,-0.525,-1.4413 } ); +cells.push_back( {21202911,3532,89,12,1,2,-0.575,-1.49086 } ); +cells.push_back( {21202921,3552,89,12,2,2,-0.575,-1.4413 } ); +cells.push_back( {21302911,3533,89,13,1,2,-0.625,-1.49086 } ); +cells.push_back( {21302921,3553,89,13,2,2,-0.625,-1.4413 } ); +cells.push_back( {21402911,3534,89,14,1,2,-0.675,-1.49086 } ); +cells.push_back( {21402921,3554,89,14,2,2,-0.675,-1.4413 } ); +cells.push_back( {21502911,3535,89,15,1,2,-0.725,-1.49086 } ); +cells.push_back( {21502921,3555,89,15,2,2,-0.725,-1.4413 } ); +cells.push_back( {21602911,3536,89,16,1,2,-0.775,-1.49086 } ); +cells.push_back( {21602921,3556,89,16,2,2,-0.775,-1.4413 } ); +cells.push_back( {21702911,3537,89,17,1,2,-0.825,-1.49086 } ); +cells.push_back( {21702921,3557,89,17,2,2,-0.825,-1.4413 } ); +cells.push_back( {21802911,3538,89,18,1,2,-0.875,-1.49086 } ); +cells.push_back( {21802921,3558,89,18,2,2,-0.875,-1.4413 } ); +cells.push_back( {21902911,3539,89,19,1,2,-0.925,-1.49086 } ); +cells.push_back( {21902921,3559,89,19,2,2,-0.925,-1.4413 } ); +cells.push_back( {22002911,3540,89,20,1,2,-0.967,-1.49086 } ); +cells.push_back( {22002921,3560,89,20,2,2,-0.967,-1.4413 } ); +cells.push_back( {20102912,3521,89,1,1,1,-0.02675,-1.49086 } ); +cells.push_back( {20102922,3541,89,1,2,1,-0.02675,-1.4413 } ); +cells.push_back( {20202912,3522,89,2,1,1,-0.075,-1.49086 } ); +cells.push_back( {20202922,3542,89,2,2,1,-0.075,-1.4413 } ); +cells.push_back( {20302912,3523,89,3,1,1,-0.125,-1.49086 } ); +cells.push_back( {20302922,3543,89,3,2,1,-0.125,-1.4413 } ); +cells.push_back( {20402912,3524,89,4,1,1,-0.175,-1.49086 } ); +cells.push_back( {20402922,3544,89,4,2,1,-0.175,-1.4413 } ); +cells.push_back( {20502912,3525,89,5,1,1,-0.225,-1.49086 } ); +cells.push_back( {20502922,3545,89,5,2,1,-0.225,-1.4413 } ); +cells.push_back( {20602912,3526,89,6,1,1,-0.275,-1.49086 } ); +cells.push_back( {20602922,3546,89,6,2,1,-0.275,-1.4413 } ); +cells.push_back( {20702912,3527,89,7,1,1,-0.325,-1.49086 } ); +cells.push_back( {20702922,3547,89,7,2,1,-0.325,-1.4413 } ); +cells.push_back( {20802912,3528,89,8,1,1,-0.375,-1.49086 } ); +cells.push_back( {20802922,3548,89,8,2,1,-0.375,-1.4413 } ); +cells.push_back( {20902912,3529,89,9,1,1,-0.425,-1.49086 } ); +cells.push_back( {20902922,3549,89,9,2,1,-0.425,-1.4413 } ); +cells.push_back( {21002912,3530,89,10,1,1,-0.475,-1.49086 } ); +cells.push_back( {21002922,3550,89,10,2,1,-0.475,-1.4413 } ); +cells.push_back( {21102912,3531,89,11,1,1,-0.525,-1.49086 } ); +cells.push_back( {21102922,3551,89,11,2,1,-0.525,-1.4413 } ); +cells.push_back( {21202912,3532,89,12,1,1,-0.575,-1.49086 } ); +cells.push_back( {21202922,3552,89,12,2,1,-0.575,-1.4413 } ); +cells.push_back( {21302912,3533,89,13,1,1,-0.625,-1.49086 } ); +cells.push_back( {21302922,3553,89,13,2,1,-0.625,-1.4413 } ); +cells.push_back( {21402912,3534,89,14,1,1,-0.675,-1.49086 } ); +cells.push_back( {21402922,3554,89,14,2,1,-0.675,-1.4413 } ); +cells.push_back( {21502912,3535,89,15,1,1,-0.725,-1.49086 } ); +cells.push_back( {21502922,3555,89,15,2,1,-0.725,-1.4413 } ); +cells.push_back( {21602912,3536,89,16,1,1,-0.775,-1.49086 } ); +cells.push_back( {21602922,3556,89,16,2,1,-0.775,-1.4413 } ); +cells.push_back( {21702912,3537,89,17,1,1,-0.825,-1.49086 } ); +cells.push_back( {21702922,3557,89,17,2,1,-0.825,-1.4413 } ); +cells.push_back( {21802912,3538,89,18,1,1,-0.875,-1.49086 } ); +cells.push_back( {21802922,3558,89,18,2,1,-0.875,-1.4413 } ); +cells.push_back( {21902912,3539,89,19,1,1,-0.925,-1.49086 } ); +cells.push_back( {21902922,3559,89,19,2,1,-0.925,-1.4413 } ); +cells.push_back( {22002912,3540,89,20,1,1,-0.967,-1.49086 } ); +cells.push_back( {22002922,3560,89,20,2,1,-0.967,-1.4413 } ); +cells.push_back( {20103011,3561,90,1,1,2,-0.02675,-1.38614 } ); +cells.push_back( {20103021,3581,90,1,2,2,-0.02675,-1.33658 } ); +cells.push_back( {20203011,3562,90,2,1,2,-0.075,-1.38614 } ); +cells.push_back( {20203021,3582,90,2,2,2,-0.075,-1.33658 } ); +cells.push_back( {20303011,3563,90,3,1,2,-0.125,-1.38614 } ); +cells.push_back( {20303021,3583,90,3,2,2,-0.125,-1.33658 } ); +cells.push_back( {20403011,3564,90,4,1,2,-0.175,-1.38614 } ); +cells.push_back( {20403021,3584,90,4,2,2,-0.175,-1.33658 } ); +cells.push_back( {20503011,3565,90,5,1,2,-0.225,-1.38614 } ); +cells.push_back( {20503021,3585,90,5,2,2,-0.225,-1.33658 } ); +cells.push_back( {20603011,3566,90,6,1,2,-0.275,-1.38614 } ); +cells.push_back( {20603021,3586,90,6,2,2,-0.275,-1.33658 } ); +cells.push_back( {20703011,3567,90,7,1,2,-0.325,-1.38614 } ); +cells.push_back( {20703021,3587,90,7,2,2,-0.325,-1.33658 } ); +cells.push_back( {20803011,3568,90,8,1,2,-0.375,-1.38614 } ); +cells.push_back( {20803021,3588,90,8,2,2,-0.375,-1.33658 } ); +cells.push_back( {20903011,3569,90,9,1,2,-0.425,-1.38614 } ); +cells.push_back( {20903021,3589,90,9,2,2,-0.425,-1.33658 } ); +cells.push_back( {21003011,3570,90,10,1,2,-0.475,-1.38614 } ); +cells.push_back( {21003021,3590,90,10,2,2,-0.475,-1.33658 } ); +cells.push_back( {21103011,3571,90,11,1,2,-0.525,-1.38614 } ); +cells.push_back( {21103021,3591,90,11,2,2,-0.525,-1.33658 } ); +cells.push_back( {21203011,3572,90,12,1,2,-0.575,-1.38614 } ); +cells.push_back( {21203021,3592,90,12,2,2,-0.575,-1.33658 } ); +cells.push_back( {21303011,3573,90,13,1,2,-0.625,-1.38614 } ); +cells.push_back( {21303021,3593,90,13,2,2,-0.625,-1.33658 } ); +cells.push_back( {21403011,3574,90,14,1,2,-0.675,-1.38614 } ); +cells.push_back( {21403021,3594,90,14,2,2,-0.675,-1.33658 } ); +cells.push_back( {21503011,3575,90,15,1,2,-0.725,-1.38614 } ); +cells.push_back( {21503021,3595,90,15,2,2,-0.725,-1.33658 } ); +cells.push_back( {21603011,3576,90,16,1,2,-0.775,-1.38614 } ); +cells.push_back( {21603021,3596,90,16,2,2,-0.775,-1.33658 } ); +cells.push_back( {21703011,3577,90,17,1,2,-0.825,-1.38614 } ); +cells.push_back( {21703021,3597,90,17,2,2,-0.825,-1.33658 } ); +cells.push_back( {21803011,3578,90,18,1,2,-0.875,-1.38614 } ); +cells.push_back( {21803021,3598,90,18,2,2,-0.875,-1.33658 } ); +cells.push_back( {21903011,3579,90,19,1,2,-0.925,-1.38614 } ); +cells.push_back( {21903021,3599,90,19,2,2,-0.925,-1.33658 } ); +cells.push_back( {22003011,3580,90,20,1,2,-0.967,-1.38614 } ); +cells.push_back( {22003021,3600,90,20,2,2,-0.967,-1.33658 } ); +cells.push_back( {20103012,3561,90,1,1,1,-0.02675,-1.38614 } ); +cells.push_back( {20103022,3581,90,1,2,1,-0.02675,-1.33658 } ); +cells.push_back( {20203012,3562,90,2,1,1,-0.075,-1.38614 } ); +cells.push_back( {20203022,3582,90,2,2,1,-0.075,-1.33658 } ); +cells.push_back( {20303012,3563,90,3,1,1,-0.125,-1.38614 } ); +cells.push_back( {20303022,3583,90,3,2,1,-0.125,-1.33658 } ); +cells.push_back( {20403012,3564,90,4,1,1,-0.175,-1.38614 } ); +cells.push_back( {20403022,3584,90,4,2,1,-0.175,-1.33658 } ); +cells.push_back( {20503012,3565,90,5,1,1,-0.225,-1.38614 } ); +cells.push_back( {20503022,3585,90,5,2,1,-0.225,-1.33658 } ); +cells.push_back( {20603012,3566,90,6,1,1,-0.275,-1.38614 } ); +cells.push_back( {20603022,3586,90,6,2,1,-0.275,-1.33658 } ); +cells.push_back( {20703012,3567,90,7,1,1,-0.325,-1.38614 } ); +cells.push_back( {20703022,3587,90,7,2,1,-0.325,-1.33658 } ); +cells.push_back( {20803012,3568,90,8,1,1,-0.375,-1.38614 } ); +cells.push_back( {20803022,3588,90,8,2,1,-0.375,-1.33658 } ); +cells.push_back( {20903012,3569,90,9,1,1,-0.425,-1.38614 } ); +cells.push_back( {20903022,3589,90,9,2,1,-0.425,-1.33658 } ); +cells.push_back( {21003012,3570,90,10,1,1,-0.475,-1.38614 } ); +cells.push_back( {21003022,3590,90,10,2,1,-0.475,-1.33658 } ); +cells.push_back( {21103012,3571,90,11,1,1,-0.525,-1.38614 } ); +cells.push_back( {21103022,3591,90,11,2,1,-0.525,-1.33658 } ); +cells.push_back( {21203012,3572,90,12,1,1,-0.575,-1.38614 } ); +cells.push_back( {21203022,3592,90,12,2,1,-0.575,-1.33658 } ); +cells.push_back( {21303012,3573,90,13,1,1,-0.625,-1.38614 } ); +cells.push_back( {21303022,3593,90,13,2,1,-0.625,-1.33658 } ); +cells.push_back( {21403012,3574,90,14,1,1,-0.675,-1.38614 } ); +cells.push_back( {21403022,3594,90,14,2,1,-0.675,-1.33658 } ); +cells.push_back( {21503012,3575,90,15,1,1,-0.725,-1.38614 } ); +cells.push_back( {21503022,3595,90,15,2,1,-0.725,-1.33658 } ); +cells.push_back( {21603012,3576,90,16,1,1,-0.775,-1.38614 } ); +cells.push_back( {21603022,3596,90,16,2,1,-0.775,-1.33658 } ); +cells.push_back( {21703012,3577,90,17,1,1,-0.825,-1.38614 } ); +cells.push_back( {21703022,3597,90,17,2,1,-0.825,-1.33658 } ); +cells.push_back( {21803012,3578,90,18,1,1,-0.875,-1.38614 } ); +cells.push_back( {21803022,3598,90,18,2,1,-0.875,-1.33658 } ); +cells.push_back( {21903012,3579,90,19,1,1,-0.925,-1.38614 } ); +cells.push_back( {21903022,3599,90,19,2,1,-0.925,-1.33658 } ); +cells.push_back( {22003012,3580,90,20,1,1,-0.967,-1.38614 } ); +cells.push_back( {22003022,3600,90,20,2,1,-0.967,-1.33658 } ); +cells.push_back( {20103111,3601,91,1,1,2,-0.02675,-1.28142 } ); +cells.push_back( {20103121,3621,91,1,2,2,-0.02675,-1.23186 } ); +cells.push_back( {20203111,3602,91,2,1,2,-0.075,-1.28142 } ); +cells.push_back( {20203121,3622,91,2,2,2,-0.075,-1.23186 } ); +cells.push_back( {20303111,3603,91,3,1,2,-0.125,-1.28142 } ); +cells.push_back( {20303121,3623,91,3,2,2,-0.125,-1.23186 } ); +cells.push_back( {20403111,3604,91,4,1,2,-0.175,-1.28142 } ); +cells.push_back( {20403121,3624,91,4,2,2,-0.175,-1.23186 } ); +cells.push_back( {20503111,3605,91,5,1,2,-0.225,-1.28142 } ); +cells.push_back( {20503121,3625,91,5,2,2,-0.225,-1.23186 } ); +cells.push_back( {20603111,3606,91,6,1,2,-0.275,-1.28142 } ); +cells.push_back( {20603121,3626,91,6,2,2,-0.275,-1.23186 } ); +cells.push_back( {20703111,3607,91,7,1,2,-0.325,-1.28142 } ); +cells.push_back( {20703121,3627,91,7,2,2,-0.325,-1.23186 } ); +cells.push_back( {20803111,3608,91,8,1,2,-0.375,-1.28142 } ); +cells.push_back( {20803121,3628,91,8,2,2,-0.375,-1.23186 } ); +cells.push_back( {20903111,3609,91,9,1,2,-0.425,-1.28142 } ); +cells.push_back( {20903121,3629,91,9,2,2,-0.425,-1.23186 } ); +cells.push_back( {21003111,3610,91,10,1,2,-0.475,-1.28142 } ); +cells.push_back( {21003121,3630,91,10,2,2,-0.475,-1.23186 } ); +cells.push_back( {21103111,3611,91,11,1,2,-0.525,-1.28142 } ); +cells.push_back( {21103121,3631,91,11,2,2,-0.525,-1.23186 } ); +cells.push_back( {21203111,3612,91,12,1,2,-0.575,-1.28142 } ); +cells.push_back( {21203121,3632,91,12,2,2,-0.575,-1.23186 } ); +cells.push_back( {21303111,3613,91,13,1,2,-0.625,-1.28142 } ); +cells.push_back( {21303121,3633,91,13,2,2,-0.625,-1.23186 } ); +cells.push_back( {21403111,3614,91,14,1,2,-0.675,-1.28142 } ); +cells.push_back( {21403121,3634,91,14,2,2,-0.675,-1.23186 } ); +cells.push_back( {21503111,3615,91,15,1,2,-0.725,-1.28142 } ); +cells.push_back( {21503121,3635,91,15,2,2,-0.725,-1.23186 } ); +cells.push_back( {21603111,3616,91,16,1,2,-0.775,-1.28142 } ); +cells.push_back( {21603121,3636,91,16,2,2,-0.775,-1.23186 } ); +cells.push_back( {21703111,3617,91,17,1,2,-0.825,-1.28142 } ); +cells.push_back( {21703121,3637,91,17,2,2,-0.825,-1.23186 } ); +cells.push_back( {21803111,3618,91,18,1,2,-0.875,-1.28142 } ); +cells.push_back( {21803121,3638,91,18,2,2,-0.875,-1.23186 } ); +cells.push_back( {21903111,3619,91,19,1,2,-0.925,-1.28142 } ); +cells.push_back( {21903121,3639,91,19,2,2,-0.925,-1.23186 } ); +cells.push_back( {22003111,3620,91,20,1,2,-0.967,-1.28142 } ); +cells.push_back( {22003121,3640,91,20,2,2,-0.967,-1.23186 } ); +cells.push_back( {20103112,3601,91,1,1,1,-0.02675,-1.28142 } ); +cells.push_back( {20103122,3621,91,1,2,1,-0.02675,-1.23186 } ); +cells.push_back( {20203112,3602,91,2,1,1,-0.075,-1.28142 } ); +cells.push_back( {20203122,3622,91,2,2,1,-0.075,-1.23186 } ); +cells.push_back( {20303112,3603,91,3,1,1,-0.125,-1.28142 } ); +cells.push_back( {20303122,3623,91,3,2,1,-0.125,-1.23186 } ); +cells.push_back( {20403112,3604,91,4,1,1,-0.175,-1.28142 } ); +cells.push_back( {20403122,3624,91,4,2,1,-0.175,-1.23186 } ); +cells.push_back( {20503112,3605,91,5,1,1,-0.225,-1.28142 } ); +cells.push_back( {20503122,3625,91,5,2,1,-0.225,-1.23186 } ); +cells.push_back( {20603112,3606,91,6,1,1,-0.275,-1.28142 } ); +cells.push_back( {20603122,3626,91,6,2,1,-0.275,-1.23186 } ); +cells.push_back( {20703112,3607,91,7,1,1,-0.325,-1.28142 } ); +cells.push_back( {20703122,3627,91,7,2,1,-0.325,-1.23186 } ); +cells.push_back( {20803112,3608,91,8,1,1,-0.375,-1.28142 } ); +cells.push_back( {20803122,3628,91,8,2,1,-0.375,-1.23186 } ); +cells.push_back( {20903112,3609,91,9,1,1,-0.425,-1.28142 } ); +cells.push_back( {20903122,3629,91,9,2,1,-0.425,-1.23186 } ); +cells.push_back( {21003112,3610,91,10,1,1,-0.475,-1.28142 } ); +cells.push_back( {21003122,3630,91,10,2,1,-0.475,-1.23186 } ); +cells.push_back( {21103112,3611,91,11,1,1,-0.525,-1.28142 } ); +cells.push_back( {21103122,3631,91,11,2,1,-0.525,-1.23186 } ); +cells.push_back( {21203112,3612,91,12,1,1,-0.575,-1.28142 } ); +cells.push_back( {21203122,3632,91,12,2,1,-0.575,-1.23186 } ); +cells.push_back( {21303112,3613,91,13,1,1,-0.625,-1.28142 } ); +cells.push_back( {21303122,3633,91,13,2,1,-0.625,-1.23186 } ); +cells.push_back( {21403112,3614,91,14,1,1,-0.675,-1.28142 } ); +cells.push_back( {21403122,3634,91,14,2,1,-0.675,-1.23186 } ); +cells.push_back( {21503112,3615,91,15,1,1,-0.725,-1.28142 } ); +cells.push_back( {21503122,3635,91,15,2,1,-0.725,-1.23186 } ); +cells.push_back( {21603112,3616,91,16,1,1,-0.775,-1.28142 } ); +cells.push_back( {21603122,3636,91,16,2,1,-0.775,-1.23186 } ); +cells.push_back( {21703112,3617,91,17,1,1,-0.825,-1.28142 } ); +cells.push_back( {21703122,3637,91,17,2,1,-0.825,-1.23186 } ); +cells.push_back( {21803112,3618,91,18,1,1,-0.875,-1.28142 } ); +cells.push_back( {21803122,3638,91,18,2,1,-0.875,-1.23186 } ); +cells.push_back( {21903112,3619,91,19,1,1,-0.925,-1.28142 } ); +cells.push_back( {21903122,3639,91,19,2,1,-0.925,-1.23186 } ); +cells.push_back( {22003112,3620,91,20,1,1,-0.967,-1.28142 } ); +cells.push_back( {22003122,3640,91,20,2,1,-0.967,-1.23186 } ); +cells.push_back( {20103211,3641,92,1,1,2,-0.02675,-1.1767 } ); +cells.push_back( {20103221,3661,92,1,2,2,-0.02675,-1.12714 } ); +cells.push_back( {20203211,3642,92,2,1,2,-0.075,-1.1767 } ); +cells.push_back( {20203221,3662,92,2,2,2,-0.075,-1.12714 } ); +cells.push_back( {20303211,3643,92,3,1,2,-0.125,-1.1767 } ); +cells.push_back( {20303221,3663,92,3,2,2,-0.125,-1.12714 } ); +cells.push_back( {20403211,3644,92,4,1,2,-0.175,-1.1767 } ); +cells.push_back( {20403221,3664,92,4,2,2,-0.175,-1.12714 } ); +cells.push_back( {20503211,3645,92,5,1,2,-0.225,-1.1767 } ); +cells.push_back( {20503221,3665,92,5,2,2,-0.225,-1.12714 } ); +cells.push_back( {20603211,3646,92,6,1,2,-0.275,-1.1767 } ); +cells.push_back( {20603221,3666,92,6,2,2,-0.275,-1.12714 } ); +cells.push_back( {20703211,3647,92,7,1,2,-0.325,-1.1767 } ); +cells.push_back( {20703221,3667,92,7,2,2,-0.325,-1.12714 } ); +cells.push_back( {20803211,3648,92,8,1,2,-0.375,-1.1767 } ); +cells.push_back( {20803221,3668,92,8,2,2,-0.375,-1.12714 } ); +cells.push_back( {20903211,3649,92,9,1,2,-0.425,-1.1767 } ); +cells.push_back( {20903221,3669,92,9,2,2,-0.425,-1.12714 } ); +cells.push_back( {21003211,3650,92,10,1,2,-0.475,-1.1767 } ); +cells.push_back( {21003221,3670,92,10,2,2,-0.475,-1.12714 } ); +cells.push_back( {21103211,3651,92,11,1,2,-0.525,-1.1767 } ); +cells.push_back( {21103221,3671,92,11,2,2,-0.525,-1.12714 } ); +cells.push_back( {21203211,3652,92,12,1,2,-0.575,-1.1767 } ); +cells.push_back( {21203221,3672,92,12,2,2,-0.575,-1.12714 } ); +cells.push_back( {21303211,3653,92,13,1,2,-0.625,-1.1767 } ); +cells.push_back( {21303221,3673,92,13,2,2,-0.625,-1.12714 } ); +cells.push_back( {21403211,3654,92,14,1,2,-0.675,-1.1767 } ); +cells.push_back( {21403221,3674,92,14,2,2,-0.675,-1.12714 } ); +cells.push_back( {21503211,3655,92,15,1,2,-0.725,-1.1767 } ); +cells.push_back( {21503221,3675,92,15,2,2,-0.725,-1.12714 } ); +cells.push_back( {21603211,3656,92,16,1,2,-0.775,-1.1767 } ); +cells.push_back( {21603221,3676,92,16,2,2,-0.775,-1.12714 } ); +cells.push_back( {21703211,3657,92,17,1,2,-0.825,-1.1767 } ); +cells.push_back( {21703221,3677,92,17,2,2,-0.825,-1.12714 } ); +cells.push_back( {21803211,3658,92,18,1,2,-0.875,-1.1767 } ); +cells.push_back( {21803221,3678,92,18,2,2,-0.875,-1.12714 } ); +cells.push_back( {21903211,3659,92,19,1,2,-0.925,-1.1767 } ); +cells.push_back( {21903221,3679,92,19,2,2,-0.925,-1.12714 } ); +cells.push_back( {22003211,3660,92,20,1,2,-0.967,-1.1767 } ); +cells.push_back( {22003221,3680,92,20,2,2,-0.967,-1.12714 } ); +cells.push_back( {20103212,3641,92,1,1,1,-0.02675,-1.1767 } ); +cells.push_back( {20103222,3661,92,1,2,1,-0.02675,-1.12714 } ); +cells.push_back( {20203212,3642,92,2,1,1,-0.075,-1.1767 } ); +cells.push_back( {20203222,3662,92,2,2,1,-0.075,-1.12714 } ); +cells.push_back( {20303212,3643,92,3,1,1,-0.125,-1.1767 } ); +cells.push_back( {20303222,3663,92,3,2,1,-0.125,-1.12714 } ); +cells.push_back( {20403212,3644,92,4,1,1,-0.175,-1.1767 } ); +cells.push_back( {20403222,3664,92,4,2,1,-0.175,-1.12714 } ); +cells.push_back( {20503212,3645,92,5,1,1,-0.225,-1.1767 } ); +cells.push_back( {20503222,3665,92,5,2,1,-0.225,-1.12714 } ); +cells.push_back( {20603212,3646,92,6,1,1,-0.275,-1.1767 } ); +cells.push_back( {20603222,3666,92,6,2,1,-0.275,-1.12714 } ); +cells.push_back( {20703212,3647,92,7,1,1,-0.325,-1.1767 } ); +cells.push_back( {20703222,3667,92,7,2,1,-0.325,-1.12714 } ); +cells.push_back( {20803212,3648,92,8,1,1,-0.375,-1.1767 } ); +cells.push_back( {20803222,3668,92,8,2,1,-0.375,-1.12714 } ); +cells.push_back( {20903212,3649,92,9,1,1,-0.425,-1.1767 } ); +cells.push_back( {20903222,3669,92,9,2,1,-0.425,-1.12714 } ); +cells.push_back( {21003212,3650,92,10,1,1,-0.475,-1.1767 } ); +cells.push_back( {21003222,3670,92,10,2,1,-0.475,-1.12714 } ); +cells.push_back( {21103212,3651,92,11,1,1,-0.525,-1.1767 } ); +cells.push_back( {21103222,3671,92,11,2,1,-0.525,-1.12714 } ); +cells.push_back( {21203212,3652,92,12,1,1,-0.575,-1.1767 } ); +cells.push_back( {21203222,3672,92,12,2,1,-0.575,-1.12714 } ); +cells.push_back( {21303212,3653,92,13,1,1,-0.625,-1.1767 } ); +cells.push_back( {21303222,3673,92,13,2,1,-0.625,-1.12714 } ); +cells.push_back( {21403212,3654,92,14,1,1,-0.675,-1.1767 } ); +cells.push_back( {21403222,3674,92,14,2,1,-0.675,-1.12714 } ); +cells.push_back( {21503212,3655,92,15,1,1,-0.725,-1.1767 } ); +cells.push_back( {21503222,3675,92,15,2,1,-0.725,-1.12714 } ); +cells.push_back( {21603212,3656,92,16,1,1,-0.775,-1.1767 } ); +cells.push_back( {21603222,3676,92,16,2,1,-0.775,-1.12714 } ); +cells.push_back( {21703212,3657,92,17,1,1,-0.825,-1.1767 } ); +cells.push_back( {21703222,3677,92,17,2,1,-0.825,-1.12714 } ); +cells.push_back( {21803212,3658,92,18,1,1,-0.875,-1.1767 } ); +cells.push_back( {21803222,3678,92,18,2,1,-0.875,-1.12714 } ); +cells.push_back( {21903212,3659,92,19,1,1,-0.925,-1.1767 } ); +cells.push_back( {21903222,3679,92,19,2,1,-0.925,-1.12714 } ); +cells.push_back( {22003212,3660,92,20,1,1,-0.967,-1.1767 } ); +cells.push_back( {22003222,3680,92,20,2,1,-0.967,-1.12714 } ); +cells.push_back( {20103311,3681,93,1,1,2,-0.02675,-1.07198 } ); +cells.push_back( {20103321,3701,93,1,2,2,-0.02675,-1.02242 } ); +cells.push_back( {20203311,3682,93,2,1,2,-0.075,-1.07198 } ); +cells.push_back( {20203321,3702,93,2,2,2,-0.075,-1.02242 } ); +cells.push_back( {20303311,3683,93,3,1,2,-0.125,-1.07198 } ); +cells.push_back( {20303321,3703,93,3,2,2,-0.125,-1.02242 } ); +cells.push_back( {20403311,3684,93,4,1,2,-0.175,-1.07198 } ); +cells.push_back( {20403321,3704,93,4,2,2,-0.175,-1.02242 } ); +cells.push_back( {20503311,3685,93,5,1,2,-0.225,-1.07198 } ); +cells.push_back( {20503321,3705,93,5,2,2,-0.225,-1.02242 } ); +cells.push_back( {20603311,3686,93,6,1,2,-0.275,-1.07198 } ); +cells.push_back( {20603321,3706,93,6,2,2,-0.275,-1.02242 } ); +cells.push_back( {20703311,3687,93,7,1,2,-0.325,-1.07198 } ); +cells.push_back( {20703321,3707,93,7,2,2,-0.325,-1.02242 } ); +cells.push_back( {20803311,3688,93,8,1,2,-0.375,-1.07198 } ); +cells.push_back( {20803321,3708,93,8,2,2,-0.375,-1.02242 } ); +cells.push_back( {20903311,3689,93,9,1,2,-0.425,-1.07198 } ); +cells.push_back( {20903321,3709,93,9,2,2,-0.425,-1.02242 } ); +cells.push_back( {21003311,3690,93,10,1,2,-0.475,-1.07198 } ); +cells.push_back( {21003321,3710,93,10,2,2,-0.475,-1.02242 } ); +cells.push_back( {21103311,3691,93,11,1,2,-0.525,-1.07198 } ); +cells.push_back( {21103321,3711,93,11,2,2,-0.525,-1.02242 } ); +cells.push_back( {21203311,3692,93,12,1,2,-0.575,-1.07198 } ); +cells.push_back( {21203321,3712,93,12,2,2,-0.575,-1.02242 } ); +cells.push_back( {21303311,3693,93,13,1,2,-0.625,-1.07198 } ); +cells.push_back( {21303321,3713,93,13,2,2,-0.625,-1.02242 } ); +cells.push_back( {21403311,3694,93,14,1,2,-0.675,-1.07198 } ); +cells.push_back( {21403321,3714,93,14,2,2,-0.675,-1.02242 } ); +cells.push_back( {21503311,3695,93,15,1,2,-0.725,-1.07198 } ); +cells.push_back( {21503321,3715,93,15,2,2,-0.725,-1.02242 } ); +cells.push_back( {21603311,3696,93,16,1,2,-0.775,-1.07198 } ); +cells.push_back( {21603321,3716,93,16,2,2,-0.775,-1.02242 } ); +cells.push_back( {21703311,3697,93,17,1,2,-0.825,-1.07198 } ); +cells.push_back( {21703321,3717,93,17,2,2,-0.825,-1.02242 } ); +cells.push_back( {21803311,3698,93,18,1,2,-0.875,-1.07198 } ); +cells.push_back( {21803321,3718,93,18,2,2,-0.875,-1.02242 } ); +cells.push_back( {21903311,3699,93,19,1,2,-0.925,-1.07198 } ); +cells.push_back( {21903321,3719,93,19,2,2,-0.925,-1.02242 } ); +cells.push_back( {22003311,3700,93,20,1,2,-0.967,-1.07198 } ); +cells.push_back( {22003321,3720,93,20,2,2,-0.967,-1.02242 } ); +cells.push_back( {20103312,3681,93,1,1,1,-0.02675,-1.07198 } ); +cells.push_back( {20103322,3701,93,1,2,1,-0.02675,-1.02242 } ); +cells.push_back( {20203312,3682,93,2,1,1,-0.075,-1.07198 } ); +cells.push_back( {20203322,3702,93,2,2,1,-0.075,-1.02242 } ); +cells.push_back( {20303312,3683,93,3,1,1,-0.125,-1.07198 } ); +cells.push_back( {20303322,3703,93,3,2,1,-0.125,-1.02242 } ); +cells.push_back( {20403312,3684,93,4,1,1,-0.175,-1.07198 } ); +cells.push_back( {20403322,3704,93,4,2,1,-0.175,-1.02242 } ); +cells.push_back( {20503312,3685,93,5,1,1,-0.225,-1.07198 } ); +cells.push_back( {20503322,3705,93,5,2,1,-0.225,-1.02242 } ); +cells.push_back( {20603312,3686,93,6,1,1,-0.275,-1.07198 } ); +cells.push_back( {20603322,3706,93,6,2,1,-0.275,-1.02242 } ); +cells.push_back( {20703312,3687,93,7,1,1,-0.325,-1.07198 } ); +cells.push_back( {20703322,3707,93,7,2,1,-0.325,-1.02242 } ); +cells.push_back( {20803312,3688,93,8,1,1,-0.375,-1.07198 } ); +cells.push_back( {20803322,3708,93,8,2,1,-0.375,-1.02242 } ); +cells.push_back( {20903312,3689,93,9,1,1,-0.425,-1.07198 } ); +cells.push_back( {20903322,3709,93,9,2,1,-0.425,-1.02242 } ); +cells.push_back( {21003312,3690,93,10,1,1,-0.475,-1.07198 } ); +cells.push_back( {21003322,3710,93,10,2,1,-0.475,-1.02242 } ); +cells.push_back( {21103312,3691,93,11,1,1,-0.525,-1.07198 } ); +cells.push_back( {21103322,3711,93,11,2,1,-0.525,-1.02242 } ); +cells.push_back( {21203312,3692,93,12,1,1,-0.575,-1.07198 } ); +cells.push_back( {21203322,3712,93,12,2,1,-0.575,-1.02242 } ); +cells.push_back( {21303312,3693,93,13,1,1,-0.625,-1.07198 } ); +cells.push_back( {21303322,3713,93,13,2,1,-0.625,-1.02242 } ); +cells.push_back( {21403312,3694,93,14,1,1,-0.675,-1.07198 } ); +cells.push_back( {21403322,3714,93,14,2,1,-0.675,-1.02242 } ); +cells.push_back( {21503312,3695,93,15,1,1,-0.725,-1.07198 } ); +cells.push_back( {21503322,3715,93,15,2,1,-0.725,-1.02242 } ); +cells.push_back( {21603312,3696,93,16,1,1,-0.775,-1.07198 } ); +cells.push_back( {21603322,3716,93,16,2,1,-0.775,-1.02242 } ); +cells.push_back( {21703312,3697,93,17,1,1,-0.825,-1.07198 } ); +cells.push_back( {21703322,3717,93,17,2,1,-0.825,-1.02242 } ); +cells.push_back( {21803312,3698,93,18,1,1,-0.875,-1.07198 } ); +cells.push_back( {21803322,3718,93,18,2,1,-0.875,-1.02242 } ); +cells.push_back( {21903312,3699,93,19,1,1,-0.925,-1.07198 } ); +cells.push_back( {21903322,3719,93,19,2,1,-0.925,-1.02242 } ); +cells.push_back( {22003312,3700,93,20,1,1,-0.967,-1.07198 } ); +cells.push_back( {22003322,3720,93,20,2,1,-0.967,-1.02242 } ); +cells.push_back( {20103411,3721,94,1,1,2,-0.02675,-0.967259 } ); +cells.push_back( {20103421,3741,94,1,2,2,-0.02675,-0.917696 } ); +cells.push_back( {20203411,3722,94,2,1,2,-0.075,-0.967259 } ); +cells.push_back( {20203421,3742,94,2,2,2,-0.075,-0.917696 } ); +cells.push_back( {20303411,3723,94,3,1,2,-0.125,-0.967259 } ); +cells.push_back( {20303421,3743,94,3,2,2,-0.125,-0.917696 } ); +cells.push_back( {20403411,3724,94,4,1,2,-0.175,-0.967259 } ); +cells.push_back( {20403421,3744,94,4,2,2,-0.175,-0.917696 } ); +cells.push_back( {20503411,3725,94,5,1,2,-0.225,-0.967259 } ); +cells.push_back( {20503421,3745,94,5,2,2,-0.225,-0.917696 } ); +cells.push_back( {20603411,3726,94,6,1,2,-0.275,-0.967259 } ); +cells.push_back( {20603421,3746,94,6,2,2,-0.275,-0.917696 } ); +cells.push_back( {20703411,3727,94,7,1,2,-0.325,-0.967259 } ); +cells.push_back( {20703421,3747,94,7,2,2,-0.325,-0.917696 } ); +cells.push_back( {20803411,3728,94,8,1,2,-0.375,-0.967259 } ); +cells.push_back( {20803421,3748,94,8,2,2,-0.375,-0.917696 } ); +cells.push_back( {20903411,3729,94,9,1,2,-0.425,-0.967259 } ); +cells.push_back( {20903421,3749,94,9,2,2,-0.425,-0.917696 } ); +cells.push_back( {21003411,3730,94,10,1,2,-0.475,-0.967259 } ); +cells.push_back( {21003421,3750,94,10,2,2,-0.475,-0.917696 } ); +cells.push_back( {21103411,3731,94,11,1,2,-0.525,-0.967259 } ); +cells.push_back( {21103421,3751,94,11,2,2,-0.525,-0.917696 } ); +cells.push_back( {21203411,3732,94,12,1,2,-0.575,-0.967259 } ); +cells.push_back( {21203421,3752,94,12,2,2,-0.575,-0.917696 } ); +cells.push_back( {21303411,3733,94,13,1,2,-0.625,-0.967259 } ); +cells.push_back( {21303421,3753,94,13,2,2,-0.625,-0.917696 } ); +cells.push_back( {21403411,3734,94,14,1,2,-0.675,-0.967259 } ); +cells.push_back( {21403421,3754,94,14,2,2,-0.675,-0.917696 } ); +cells.push_back( {21503411,3735,94,15,1,2,-0.725,-0.967259 } ); +cells.push_back( {21503421,3755,94,15,2,2,-0.725,-0.917696 } ); +cells.push_back( {21603411,3736,94,16,1,2,-0.775,-0.967259 } ); +cells.push_back( {21603421,3756,94,16,2,2,-0.775,-0.917696 } ); +cells.push_back( {21703411,3737,94,17,1,2,-0.825,-0.967259 } ); +cells.push_back( {21703421,3757,94,17,2,2,-0.825,-0.917696 } ); +cells.push_back( {21803411,3738,94,18,1,2,-0.875,-0.967259 } ); +cells.push_back( {21803421,3758,94,18,2,2,-0.875,-0.917696 } ); +cells.push_back( {21903411,3739,94,19,1,2,-0.925,-0.967259 } ); +cells.push_back( {21903421,3759,94,19,2,2,-0.925,-0.917696 } ); +cells.push_back( {22003411,3740,94,20,1,2,-0.967,-0.967259 } ); +cells.push_back( {22003421,3760,94,20,2,2,-0.967,-0.917696 } ); +cells.push_back( {20103412,3721,94,1,1,1,-0.02675,-0.967259 } ); +cells.push_back( {20103422,3741,94,1,2,1,-0.02675,-0.917696 } ); +cells.push_back( {20203412,3722,94,2,1,1,-0.075,-0.967259 } ); +cells.push_back( {20203422,3742,94,2,2,1,-0.075,-0.917696 } ); +cells.push_back( {20303412,3723,94,3,1,1,-0.125,-0.967259 } ); +cells.push_back( {20303422,3743,94,3,2,1,-0.125,-0.917696 } ); +cells.push_back( {20403412,3724,94,4,1,1,-0.175,-0.967259 } ); +cells.push_back( {20403422,3744,94,4,2,1,-0.175,-0.917696 } ); +cells.push_back( {20503412,3725,94,5,1,1,-0.225,-0.967259 } ); +cells.push_back( {20503422,3745,94,5,2,1,-0.225,-0.917696 } ); +cells.push_back( {20603412,3726,94,6,1,1,-0.275,-0.967259 } ); +cells.push_back( {20603422,3746,94,6,2,1,-0.275,-0.917696 } ); +cells.push_back( {20703412,3727,94,7,1,1,-0.325,-0.967259 } ); +cells.push_back( {20703422,3747,94,7,2,1,-0.325,-0.917696 } ); +cells.push_back( {20803412,3728,94,8,1,1,-0.375,-0.967259 } ); +cells.push_back( {20803422,3748,94,8,2,1,-0.375,-0.917696 } ); +cells.push_back( {20903412,3729,94,9,1,1,-0.425,-0.967259 } ); +cells.push_back( {20903422,3749,94,9,2,1,-0.425,-0.917696 } ); +cells.push_back( {21003412,3730,94,10,1,1,-0.475,-0.967259 } ); +cells.push_back( {21003422,3750,94,10,2,1,-0.475,-0.917696 } ); +cells.push_back( {21103412,3731,94,11,1,1,-0.525,-0.967259 } ); +cells.push_back( {21103422,3751,94,11,2,1,-0.525,-0.917696 } ); +cells.push_back( {21203412,3732,94,12,1,1,-0.575,-0.967259 } ); +cells.push_back( {21203422,3752,94,12,2,1,-0.575,-0.917696 } ); +cells.push_back( {21303412,3733,94,13,1,1,-0.625,-0.967259 } ); +cells.push_back( {21303422,3753,94,13,2,1,-0.625,-0.917696 } ); +cells.push_back( {21403412,3734,94,14,1,1,-0.675,-0.967259 } ); +cells.push_back( {21403422,3754,94,14,2,1,-0.675,-0.917696 } ); +cells.push_back( {21503412,3735,94,15,1,1,-0.725,-0.967259 } ); +cells.push_back( {21503422,3755,94,15,2,1,-0.725,-0.917696 } ); +cells.push_back( {21603412,3736,94,16,1,1,-0.775,-0.967259 } ); +cells.push_back( {21603422,3756,94,16,2,1,-0.775,-0.917696 } ); +cells.push_back( {21703412,3737,94,17,1,1,-0.825,-0.967259 } ); +cells.push_back( {21703422,3757,94,17,2,1,-0.825,-0.917696 } ); +cells.push_back( {21803412,3738,94,18,1,1,-0.875,-0.967259 } ); +cells.push_back( {21803422,3758,94,18,2,1,-0.875,-0.917696 } ); +cells.push_back( {21903412,3739,94,19,1,1,-0.925,-0.967259 } ); +cells.push_back( {21903422,3759,94,19,2,1,-0.925,-0.917696 } ); +cells.push_back( {22003412,3740,94,20,1,1,-0.967,-0.967259 } ); +cells.push_back( {22003422,3760,94,20,2,1,-0.967,-0.917696 } ); +cells.push_back( {20103511,3761,95,1,1,2,-0.02675,-0.862539 } ); +cells.push_back( {20103521,3781,95,1,2,2,-0.02675,-0.812976 } ); +cells.push_back( {20203511,3762,95,2,1,2,-0.075,-0.862539 } ); +cells.push_back( {20203521,3782,95,2,2,2,-0.075,-0.812976 } ); +cells.push_back( {20303511,3763,95,3,1,2,-0.125,-0.862539 } ); +cells.push_back( {20303521,3783,95,3,2,2,-0.125,-0.812976 } ); +cells.push_back( {20403511,3764,95,4,1,2,-0.175,-0.862539 } ); +cells.push_back( {20403521,3784,95,4,2,2,-0.175,-0.812976 } ); +cells.push_back( {20503511,3765,95,5,1,2,-0.225,-0.862539 } ); +cells.push_back( {20503521,3785,95,5,2,2,-0.225,-0.812976 } ); +cells.push_back( {20603511,3766,95,6,1,2,-0.275,-0.862539 } ); +cells.push_back( {20603521,3786,95,6,2,2,-0.275,-0.812976 } ); +cells.push_back( {20703511,3767,95,7,1,2,-0.325,-0.862539 } ); +cells.push_back( {20703521,3787,95,7,2,2,-0.325,-0.812976 } ); +cells.push_back( {20803511,3768,95,8,1,2,-0.375,-0.862539 } ); +cells.push_back( {20803521,3788,95,8,2,2,-0.375,-0.812976 } ); +cells.push_back( {20903511,3769,95,9,1,2,-0.425,-0.862539 } ); +cells.push_back( {20903521,3789,95,9,2,2,-0.425,-0.812976 } ); +cells.push_back( {21003511,3770,95,10,1,2,-0.475,-0.862539 } ); +cells.push_back( {21003521,3790,95,10,2,2,-0.475,-0.812976 } ); +cells.push_back( {21103511,3771,95,11,1,2,-0.525,-0.862539 } ); +cells.push_back( {21103521,3791,95,11,2,2,-0.525,-0.812976 } ); +cells.push_back( {21203511,3772,95,12,1,2,-0.575,-0.862539 } ); +cells.push_back( {21203521,3792,95,12,2,2,-0.575,-0.812976 } ); +cells.push_back( {21303511,3773,95,13,1,2,-0.625,-0.862539 } ); +cells.push_back( {21303521,3793,95,13,2,2,-0.625,-0.812976 } ); +cells.push_back( {21403511,3774,95,14,1,2,-0.675,-0.862539 } ); +cells.push_back( {21403521,3794,95,14,2,2,-0.675,-0.812976 } ); +cells.push_back( {21503511,3775,95,15,1,2,-0.725,-0.862539 } ); +cells.push_back( {21503521,3795,95,15,2,2,-0.725,-0.812976 } ); +cells.push_back( {21603511,3776,95,16,1,2,-0.775,-0.862539 } ); +cells.push_back( {21603521,3796,95,16,2,2,-0.775,-0.812976 } ); +cells.push_back( {21703511,3777,95,17,1,2,-0.825,-0.862539 } ); +cells.push_back( {21703521,3797,95,17,2,2,-0.825,-0.812976 } ); +cells.push_back( {21803511,3778,95,18,1,2,-0.875,-0.862539 } ); +cells.push_back( {21803521,3798,95,18,2,2,-0.875,-0.812976 } ); +cells.push_back( {21903511,3779,95,19,1,2,-0.925,-0.862539 } ); +cells.push_back( {21903521,3799,95,19,2,2,-0.925,-0.812976 } ); +cells.push_back( {22003511,3780,95,20,1,2,-0.967,-0.862539 } ); +cells.push_back( {22003521,3800,95,20,2,2,-0.967,-0.812976 } ); +cells.push_back( {20103512,3761,95,1,1,1,-0.02675,-0.862539 } ); +cells.push_back( {20103522,3781,95,1,2,1,-0.02675,-0.812976 } ); +cells.push_back( {20203512,3762,95,2,1,1,-0.075,-0.862539 } ); +cells.push_back( {20203522,3782,95,2,2,1,-0.075,-0.812976 } ); +cells.push_back( {20303512,3763,95,3,1,1,-0.125,-0.862539 } ); +cells.push_back( {20303522,3783,95,3,2,1,-0.125,-0.812976 } ); +cells.push_back( {20403512,3764,95,4,1,1,-0.175,-0.862539 } ); +cells.push_back( {20403522,3784,95,4,2,1,-0.175,-0.812976 } ); +cells.push_back( {20503512,3765,95,5,1,1,-0.225,-0.862539 } ); +cells.push_back( {20503522,3785,95,5,2,1,-0.225,-0.812976 } ); +cells.push_back( {20603512,3766,95,6,1,1,-0.275,-0.862539 } ); +cells.push_back( {20603522,3786,95,6,2,1,-0.275,-0.812976 } ); +cells.push_back( {20703512,3767,95,7,1,1,-0.325,-0.862539 } ); +cells.push_back( {20703522,3787,95,7,2,1,-0.325,-0.812976 } ); +cells.push_back( {20803512,3768,95,8,1,1,-0.375,-0.862539 } ); +cells.push_back( {20803522,3788,95,8,2,1,-0.375,-0.812976 } ); +cells.push_back( {20903512,3769,95,9,1,1,-0.425,-0.862539 } ); +cells.push_back( {20903522,3789,95,9,2,1,-0.425,-0.812976 } ); +cells.push_back( {21003512,3770,95,10,1,1,-0.475,-0.862539 } ); +cells.push_back( {21003522,3790,95,10,2,1,-0.475,-0.812976 } ); +cells.push_back( {21103512,3771,95,11,1,1,-0.525,-0.862539 } ); +cells.push_back( {21103522,3791,95,11,2,1,-0.525,-0.812976 } ); +cells.push_back( {21203512,3772,95,12,1,1,-0.575,-0.862539 } ); +cells.push_back( {21203522,3792,95,12,2,1,-0.575,-0.812976 } ); +cells.push_back( {21303512,3773,95,13,1,1,-0.625,-0.862539 } ); +cells.push_back( {21303522,3793,95,13,2,1,-0.625,-0.812976 } ); +cells.push_back( {21403512,3774,95,14,1,1,-0.675,-0.862539 } ); +cells.push_back( {21403522,3794,95,14,2,1,-0.675,-0.812976 } ); +cells.push_back( {21503512,3775,95,15,1,1,-0.725,-0.862539 } ); +cells.push_back( {21503522,3795,95,15,2,1,-0.725,-0.812976 } ); +cells.push_back( {21603512,3776,95,16,1,1,-0.775,-0.862539 } ); +cells.push_back( {21603522,3796,95,16,2,1,-0.775,-0.812976 } ); +cells.push_back( {21703512,3777,95,17,1,1,-0.825,-0.862539 } ); +cells.push_back( {21703522,3797,95,17,2,1,-0.825,-0.812976 } ); +cells.push_back( {21803512,3778,95,18,1,1,-0.875,-0.862539 } ); +cells.push_back( {21803522,3798,95,18,2,1,-0.875,-0.812976 } ); +cells.push_back( {21903512,3779,95,19,1,1,-0.925,-0.862539 } ); +cells.push_back( {21903522,3799,95,19,2,1,-0.925,-0.812976 } ); +cells.push_back( {22003512,3780,95,20,1,1,-0.967,-0.862539 } ); +cells.push_back( {22003522,3800,95,20,2,1,-0.967,-0.812976 } ); +cells.push_back( {20103611,3801,96,1,1,2,-0.02675,-0.75782 } ); +cells.push_back( {20103621,3821,96,1,2,2,-0.02675,-0.708257 } ); +cells.push_back( {20203611,3802,96,2,1,2,-0.075,-0.75782 } ); +cells.push_back( {20203621,3822,96,2,2,2,-0.075,-0.708257 } ); +cells.push_back( {20303611,3803,96,3,1,2,-0.125,-0.75782 } ); +cells.push_back( {20303621,3823,96,3,2,2,-0.125,-0.708257 } ); +cells.push_back( {20403611,3804,96,4,1,2,-0.175,-0.75782 } ); +cells.push_back( {20403621,3824,96,4,2,2,-0.175,-0.708257 } ); +cells.push_back( {20503611,3805,96,5,1,2,-0.225,-0.75782 } ); +cells.push_back( {20503621,3825,96,5,2,2,-0.225,-0.708257 } ); +cells.push_back( {20603611,3806,96,6,1,2,-0.275,-0.75782 } ); +cells.push_back( {20603621,3826,96,6,2,2,-0.275,-0.708257 } ); +cells.push_back( {20703611,3807,96,7,1,2,-0.325,-0.75782 } ); +cells.push_back( {20703621,3827,96,7,2,2,-0.325,-0.708257 } ); +cells.push_back( {20803611,3808,96,8,1,2,-0.375,-0.75782 } ); +cells.push_back( {20803621,3828,96,8,2,2,-0.375,-0.708257 } ); +cells.push_back( {20903611,3809,96,9,1,2,-0.425,-0.75782 } ); +cells.push_back( {20903621,3829,96,9,2,2,-0.425,-0.708257 } ); +cells.push_back( {21003611,3810,96,10,1,2,-0.475,-0.75782 } ); +cells.push_back( {21003621,3830,96,10,2,2,-0.475,-0.708257 } ); +cells.push_back( {21103611,3811,96,11,1,2,-0.525,-0.75782 } ); +cells.push_back( {21103621,3831,96,11,2,2,-0.525,-0.708257 } ); +cells.push_back( {21203611,3812,96,12,1,2,-0.575,-0.75782 } ); +cells.push_back( {21203621,3832,96,12,2,2,-0.575,-0.708257 } ); +cells.push_back( {21303611,3813,96,13,1,2,-0.625,-0.75782 } ); +cells.push_back( {21303621,3833,96,13,2,2,-0.625,-0.708257 } ); +cells.push_back( {21403611,3814,96,14,1,2,-0.675,-0.75782 } ); +cells.push_back( {21403621,3834,96,14,2,2,-0.675,-0.708257 } ); +cells.push_back( {21503611,3815,96,15,1,2,-0.725,-0.75782 } ); +cells.push_back( {21503621,3835,96,15,2,2,-0.725,-0.708257 } ); +cells.push_back( {21603611,3816,96,16,1,2,-0.775,-0.75782 } ); +cells.push_back( {21603621,3836,96,16,2,2,-0.775,-0.708257 } ); +cells.push_back( {21703611,3817,96,17,1,2,-0.825,-0.75782 } ); +cells.push_back( {21703621,3837,96,17,2,2,-0.825,-0.708257 } ); +cells.push_back( {21803611,3818,96,18,1,2,-0.875,-0.75782 } ); +cells.push_back( {21803621,3838,96,18,2,2,-0.875,-0.708257 } ); +cells.push_back( {21903611,3819,96,19,1,2,-0.925,-0.75782 } ); +cells.push_back( {21903621,3839,96,19,2,2,-0.925,-0.708257 } ); +cells.push_back( {22003611,3820,96,20,1,2,-0.967,-0.75782 } ); +cells.push_back( {22003621,3840,96,20,2,2,-0.967,-0.708257 } ); +cells.push_back( {20103612,3801,96,1,1,1,-0.02675,-0.75782 } ); +cells.push_back( {20103622,3821,96,1,2,1,-0.02675,-0.708257 } ); +cells.push_back( {20203612,3802,96,2,1,1,-0.075,-0.75782 } ); +cells.push_back( {20203622,3822,96,2,2,1,-0.075,-0.708257 } ); +cells.push_back( {20303612,3803,96,3,1,1,-0.125,-0.75782 } ); +cells.push_back( {20303622,3823,96,3,2,1,-0.125,-0.708257 } ); +cells.push_back( {20403612,3804,96,4,1,1,-0.175,-0.75782 } ); +cells.push_back( {20403622,3824,96,4,2,1,-0.175,-0.708257 } ); +cells.push_back( {20503612,3805,96,5,1,1,-0.225,-0.75782 } ); +cells.push_back( {20503622,3825,96,5,2,1,-0.225,-0.708257 } ); +cells.push_back( {20603612,3806,96,6,1,1,-0.275,-0.75782 } ); +cells.push_back( {20603622,3826,96,6,2,1,-0.275,-0.708257 } ); +cells.push_back( {20703612,3807,96,7,1,1,-0.325,-0.75782 } ); +cells.push_back( {20703622,3827,96,7,2,1,-0.325,-0.708257 } ); +cells.push_back( {20803612,3808,96,8,1,1,-0.375,-0.75782 } ); +cells.push_back( {20803622,3828,96,8,2,1,-0.375,-0.708257 } ); +cells.push_back( {20903612,3809,96,9,1,1,-0.425,-0.75782 } ); +cells.push_back( {20903622,3829,96,9,2,1,-0.425,-0.708257 } ); +cells.push_back( {21003612,3810,96,10,1,1,-0.475,-0.75782 } ); +cells.push_back( {21003622,3830,96,10,2,1,-0.475,-0.708257 } ); +cells.push_back( {21103612,3811,96,11,1,1,-0.525,-0.75782 } ); +cells.push_back( {21103622,3831,96,11,2,1,-0.525,-0.708257 } ); +cells.push_back( {21203612,3812,96,12,1,1,-0.575,-0.75782 } ); +cells.push_back( {21203622,3832,96,12,2,1,-0.575,-0.708257 } ); +cells.push_back( {21303612,3813,96,13,1,1,-0.625,-0.75782 } ); +cells.push_back( {21303622,3833,96,13,2,1,-0.625,-0.708257 } ); +cells.push_back( {21403612,3814,96,14,1,1,-0.675,-0.75782 } ); +cells.push_back( {21403622,3834,96,14,2,1,-0.675,-0.708257 } ); +cells.push_back( {21503612,3815,96,15,1,1,-0.725,-0.75782 } ); +cells.push_back( {21503622,3835,96,15,2,1,-0.725,-0.708257 } ); +cells.push_back( {21603612,3816,96,16,1,1,-0.775,-0.75782 } ); +cells.push_back( {21603622,3836,96,16,2,1,-0.775,-0.708257 } ); +cells.push_back( {21703612,3817,96,17,1,1,-0.825,-0.75782 } ); +cells.push_back( {21703622,3837,96,17,2,1,-0.825,-0.708257 } ); +cells.push_back( {21803612,3818,96,18,1,1,-0.875,-0.75782 } ); +cells.push_back( {21803622,3838,96,18,2,1,-0.875,-0.708257 } ); +cells.push_back( {21903612,3819,96,19,1,1,-0.925,-0.75782 } ); +cells.push_back( {21903622,3839,96,19,2,1,-0.925,-0.708257 } ); +cells.push_back( {22003612,3820,96,20,1,1,-0.967,-0.75782 } ); +cells.push_back( {22003622,3840,96,20,2,1,-0.967,-0.708257 } ); +cells.push_back( {20103711,3841,97,1,1,2,-0.02675,-0.6531 } ); +cells.push_back( {20103721,3861,97,1,2,2,-0.02675,-0.603537 } ); +cells.push_back( {20203711,3842,97,2,1,2,-0.075,-0.6531 } ); +cells.push_back( {20203721,3862,97,2,2,2,-0.075,-0.603537 } ); +cells.push_back( {20303711,3843,97,3,1,2,-0.125,-0.6531 } ); +cells.push_back( {20303721,3863,97,3,2,2,-0.125,-0.603537 } ); +cells.push_back( {20403711,3844,97,4,1,2,-0.175,-0.6531 } ); +cells.push_back( {20403721,3864,97,4,2,2,-0.175,-0.603537 } ); +cells.push_back( {20503711,3845,97,5,1,2,-0.225,-0.6531 } ); +cells.push_back( {20503721,3865,97,5,2,2,-0.225,-0.603537 } ); +cells.push_back( {20603711,3846,97,6,1,2,-0.275,-0.6531 } ); +cells.push_back( {20603721,3866,97,6,2,2,-0.275,-0.603537 } ); +cells.push_back( {20703711,3847,97,7,1,2,-0.325,-0.6531 } ); +cells.push_back( {20703721,3867,97,7,2,2,-0.325,-0.603537 } ); +cells.push_back( {20803711,3848,97,8,1,2,-0.375,-0.6531 } ); +cells.push_back( {20803721,3868,97,8,2,2,-0.375,-0.603537 } ); +cells.push_back( {20903711,3849,97,9,1,2,-0.425,-0.6531 } ); +cells.push_back( {20903721,3869,97,9,2,2,-0.425,-0.603537 } ); +cells.push_back( {21003711,3850,97,10,1,2,-0.475,-0.6531 } ); +cells.push_back( {21003721,3870,97,10,2,2,-0.475,-0.603537 } ); +cells.push_back( {21103711,3851,97,11,1,2,-0.525,-0.6531 } ); +cells.push_back( {21103721,3871,97,11,2,2,-0.525,-0.603537 } ); +cells.push_back( {21203711,3852,97,12,1,2,-0.575,-0.6531 } ); +cells.push_back( {21203721,3872,97,12,2,2,-0.575,-0.603537 } ); +cells.push_back( {21303711,3853,97,13,1,2,-0.625,-0.6531 } ); +cells.push_back( {21303721,3873,97,13,2,2,-0.625,-0.603537 } ); +cells.push_back( {21403711,3854,97,14,1,2,-0.675,-0.6531 } ); +cells.push_back( {21403721,3874,97,14,2,2,-0.675,-0.603537 } ); +cells.push_back( {21503711,3855,97,15,1,2,-0.725,-0.6531 } ); +cells.push_back( {21503721,3875,97,15,2,2,-0.725,-0.603537 } ); +cells.push_back( {21603711,3856,97,16,1,2,-0.775,-0.6531 } ); +cells.push_back( {21603721,3876,97,16,2,2,-0.775,-0.603537 } ); +cells.push_back( {21703711,3857,97,17,1,2,-0.825,-0.6531 } ); +cells.push_back( {21703721,3877,97,17,2,2,-0.825,-0.603537 } ); +cells.push_back( {21803711,3858,97,18,1,2,-0.875,-0.6531 } ); +cells.push_back( {21803721,3878,97,18,2,2,-0.875,-0.603537 } ); +cells.push_back( {21903711,3859,97,19,1,2,-0.925,-0.6531 } ); +cells.push_back( {21903721,3879,97,19,2,2,-0.925,-0.603537 } ); +cells.push_back( {22003711,3860,97,20,1,2,-0.967,-0.6531 } ); +cells.push_back( {22003721,3880,97,20,2,2,-0.967,-0.603537 } ); +cells.push_back( {20103712,3841,97,1,1,1,-0.02675,-0.6531 } ); +cells.push_back( {20103722,3861,97,1,2,1,-0.02675,-0.603537 } ); +cells.push_back( {20203712,3842,97,2,1,1,-0.075,-0.6531 } ); +cells.push_back( {20203722,3862,97,2,2,1,-0.075,-0.603537 } ); +cells.push_back( {20303712,3843,97,3,1,1,-0.125,-0.6531 } ); +cells.push_back( {20303722,3863,97,3,2,1,-0.125,-0.603537 } ); +cells.push_back( {20403712,3844,97,4,1,1,-0.175,-0.6531 } ); +cells.push_back( {20403722,3864,97,4,2,1,-0.175,-0.603537 } ); +cells.push_back( {20503712,3845,97,5,1,1,-0.225,-0.6531 } ); +cells.push_back( {20503722,3865,97,5,2,1,-0.225,-0.603537 } ); +cells.push_back( {20603712,3846,97,6,1,1,-0.275,-0.6531 } ); +cells.push_back( {20603722,3866,97,6,2,1,-0.275,-0.603537 } ); +cells.push_back( {20703712,3847,97,7,1,1,-0.325,-0.6531 } ); +cells.push_back( {20703722,3867,97,7,2,1,-0.325,-0.603537 } ); +cells.push_back( {20803712,3848,97,8,1,1,-0.375,-0.6531 } ); +cells.push_back( {20803722,3868,97,8,2,1,-0.375,-0.603537 } ); +cells.push_back( {20903712,3849,97,9,1,1,-0.425,-0.6531 } ); +cells.push_back( {20903722,3869,97,9,2,1,-0.425,-0.603537 } ); +cells.push_back( {21003712,3850,97,10,1,1,-0.475,-0.6531 } ); +cells.push_back( {21003722,3870,97,10,2,1,-0.475,-0.603537 } ); +cells.push_back( {21103712,3851,97,11,1,1,-0.525,-0.6531 } ); +cells.push_back( {21103722,3871,97,11,2,1,-0.525,-0.603537 } ); +cells.push_back( {21203712,3852,97,12,1,1,-0.575,-0.6531 } ); +cells.push_back( {21203722,3872,97,12,2,1,-0.575,-0.603537 } ); +cells.push_back( {21303712,3853,97,13,1,1,-0.625,-0.6531 } ); +cells.push_back( {21303722,3873,97,13,2,1,-0.625,-0.603537 } ); +cells.push_back( {21403712,3854,97,14,1,1,-0.675,-0.6531 } ); +cells.push_back( {21403722,3874,97,14,2,1,-0.675,-0.603537 } ); +cells.push_back( {21503712,3855,97,15,1,1,-0.725,-0.6531 } ); +cells.push_back( {21503722,3875,97,15,2,1,-0.725,-0.603537 } ); +cells.push_back( {21603712,3856,97,16,1,1,-0.775,-0.6531 } ); +cells.push_back( {21603722,3876,97,16,2,1,-0.775,-0.603537 } ); +cells.push_back( {21703712,3857,97,17,1,1,-0.825,-0.6531 } ); +cells.push_back( {21703722,3877,97,17,2,1,-0.825,-0.603537 } ); +cells.push_back( {21803712,3858,97,18,1,1,-0.875,-0.6531 } ); +cells.push_back( {21803722,3878,97,18,2,1,-0.875,-0.603537 } ); +cells.push_back( {21903712,3859,97,19,1,1,-0.925,-0.6531 } ); +cells.push_back( {21903722,3879,97,19,2,1,-0.925,-0.603537 } ); +cells.push_back( {22003712,3860,97,20,1,1,-0.967,-0.6531 } ); +cells.push_back( {22003722,3880,97,20,2,1,-0.967,-0.603537 } ); +cells.push_back( {20103811,3881,98,1,1,2,-0.02675,-0.54838 } ); +cells.push_back( {20103821,3901,98,1,2,2,-0.02675,-0.498817 } ); +cells.push_back( {20203811,3882,98,2,1,2,-0.075,-0.54838 } ); +cells.push_back( {20203821,3902,98,2,2,2,-0.075,-0.498817 } ); +cells.push_back( {20303811,3883,98,3,1,2,-0.125,-0.54838 } ); +cells.push_back( {20303821,3903,98,3,2,2,-0.125,-0.498817 } ); +cells.push_back( {20403811,3884,98,4,1,2,-0.175,-0.54838 } ); +cells.push_back( {20403821,3904,98,4,2,2,-0.175,-0.498817 } ); +cells.push_back( {20503811,3885,98,5,1,2,-0.225,-0.54838 } ); +cells.push_back( {20503821,3905,98,5,2,2,-0.225,-0.498817 } ); +cells.push_back( {20603811,3886,98,6,1,2,-0.275,-0.54838 } ); +cells.push_back( {20603821,3906,98,6,2,2,-0.275,-0.498817 } ); +cells.push_back( {20703811,3887,98,7,1,2,-0.325,-0.54838 } ); +cells.push_back( {20703821,3907,98,7,2,2,-0.325,-0.498817 } ); +cells.push_back( {20803811,3888,98,8,1,2,-0.375,-0.54838 } ); +cells.push_back( {20803821,3908,98,8,2,2,-0.375,-0.498817 } ); +cells.push_back( {20903811,3889,98,9,1,2,-0.425,-0.54838 } ); +cells.push_back( {20903821,3909,98,9,2,2,-0.425,-0.498817 } ); +cells.push_back( {21003811,3890,98,10,1,2,-0.475,-0.54838 } ); +cells.push_back( {21003821,3910,98,10,2,2,-0.475,-0.498817 } ); +cells.push_back( {21103811,3891,98,11,1,2,-0.525,-0.54838 } ); +cells.push_back( {21103821,3911,98,11,2,2,-0.525,-0.498817 } ); +cells.push_back( {21203811,3892,98,12,1,2,-0.575,-0.54838 } ); +cells.push_back( {21203821,3912,98,12,2,2,-0.575,-0.498817 } ); +cells.push_back( {21303811,3893,98,13,1,2,-0.625,-0.54838 } ); +cells.push_back( {21303821,3913,98,13,2,2,-0.625,-0.498817 } ); +cells.push_back( {21403811,3894,98,14,1,2,-0.675,-0.54838 } ); +cells.push_back( {21403821,3914,98,14,2,2,-0.675,-0.498817 } ); +cells.push_back( {21503811,3895,98,15,1,2,-0.725,-0.54838 } ); +cells.push_back( {21503821,3915,98,15,2,2,-0.725,-0.498817 } ); +cells.push_back( {21603811,3896,98,16,1,2,-0.775,-0.54838 } ); +cells.push_back( {21603821,3916,98,16,2,2,-0.775,-0.498817 } ); +cells.push_back( {21703811,3897,98,17,1,2,-0.825,-0.54838 } ); +cells.push_back( {21703821,3917,98,17,2,2,-0.825,-0.498817 } ); +cells.push_back( {21803811,3898,98,18,1,2,-0.875,-0.54838 } ); +cells.push_back( {21803821,3918,98,18,2,2,-0.875,-0.498817 } ); +cells.push_back( {21903811,3899,98,19,1,2,-0.925,-0.54838 } ); +cells.push_back( {21903821,3919,98,19,2,2,-0.925,-0.498817 } ); +cells.push_back( {22003811,3900,98,20,1,2,-0.967,-0.54838 } ); +cells.push_back( {22003821,3920,98,20,2,2,-0.967,-0.498817 } ); +cells.push_back( {20103812,3881,98,1,1,1,-0.02675,-0.54838 } ); +cells.push_back( {20103822,3901,98,1,2,1,-0.02675,-0.498817 } ); +cells.push_back( {20203812,3882,98,2,1,1,-0.075,-0.54838 } ); +cells.push_back( {20203822,3902,98,2,2,1,-0.075,-0.498817 } ); +cells.push_back( {20303812,3883,98,3,1,1,-0.125,-0.54838 } ); +cells.push_back( {20303822,3903,98,3,2,1,-0.125,-0.498817 } ); +cells.push_back( {20403812,3884,98,4,1,1,-0.175,-0.54838 } ); +cells.push_back( {20403822,3904,98,4,2,1,-0.175,-0.498817 } ); +cells.push_back( {20503812,3885,98,5,1,1,-0.225,-0.54838 } ); +cells.push_back( {20503822,3905,98,5,2,1,-0.225,-0.498817 } ); +cells.push_back( {20603812,3886,98,6,1,1,-0.275,-0.54838 } ); +cells.push_back( {20603822,3906,98,6,2,1,-0.275,-0.498817 } ); +cells.push_back( {20703812,3887,98,7,1,1,-0.325,-0.54838 } ); +cells.push_back( {20703822,3907,98,7,2,1,-0.325,-0.498817 } ); +cells.push_back( {20803812,3888,98,8,1,1,-0.375,-0.54838 } ); +cells.push_back( {20803822,3908,98,8,2,1,-0.375,-0.498817 } ); +cells.push_back( {20903812,3889,98,9,1,1,-0.425,-0.54838 } ); +cells.push_back( {20903822,3909,98,9,2,1,-0.425,-0.498817 } ); +cells.push_back( {21003812,3890,98,10,1,1,-0.475,-0.54838 } ); +cells.push_back( {21003822,3910,98,10,2,1,-0.475,-0.498817 } ); +cells.push_back( {21103812,3891,98,11,1,1,-0.525,-0.54838 } ); +cells.push_back( {21103822,3911,98,11,2,1,-0.525,-0.498817 } ); +cells.push_back( {21203812,3892,98,12,1,1,-0.575,-0.54838 } ); +cells.push_back( {21203822,3912,98,12,2,1,-0.575,-0.498817 } ); +cells.push_back( {21303812,3893,98,13,1,1,-0.625,-0.54838 } ); +cells.push_back( {21303822,3913,98,13,2,1,-0.625,-0.498817 } ); +cells.push_back( {21403812,3894,98,14,1,1,-0.675,-0.54838 } ); +cells.push_back( {21403822,3914,98,14,2,1,-0.675,-0.498817 } ); +cells.push_back( {21503812,3895,98,15,1,1,-0.725,-0.54838 } ); +cells.push_back( {21503822,3915,98,15,2,1,-0.725,-0.498817 } ); +cells.push_back( {21603812,3896,98,16,1,1,-0.775,-0.54838 } ); +cells.push_back( {21603822,3916,98,16,2,1,-0.775,-0.498817 } ); +cells.push_back( {21703812,3897,98,17,1,1,-0.825,-0.54838 } ); +cells.push_back( {21703822,3917,98,17,2,1,-0.825,-0.498817 } ); +cells.push_back( {21803812,3898,98,18,1,1,-0.875,-0.54838 } ); +cells.push_back( {21803822,3918,98,18,2,1,-0.875,-0.498817 } ); +cells.push_back( {21903812,3899,98,19,1,1,-0.925,-0.54838 } ); +cells.push_back( {21903822,3919,98,19,2,1,-0.925,-0.498817 } ); +cells.push_back( {22003812,3900,98,20,1,1,-0.967,-0.54838 } ); +cells.push_back( {22003822,3920,98,20,2,1,-0.967,-0.498817 } ); +cells.push_back( {20103911,3921,99,1,1,2,-0.02675,-0.44366 } ); +cells.push_back( {20103921,3941,99,1,2,2,-0.02675,-0.394097 } ); +cells.push_back( {20203911,3922,99,2,1,2,-0.075,-0.44366 } ); +cells.push_back( {20203921,3942,99,2,2,2,-0.075,-0.394097 } ); +cells.push_back( {20303911,3923,99,3,1,2,-0.125,-0.44366 } ); +cells.push_back( {20303921,3943,99,3,2,2,-0.125,-0.394097 } ); +cells.push_back( {20403911,3924,99,4,1,2,-0.175,-0.44366 } ); +cells.push_back( {20403921,3944,99,4,2,2,-0.175,-0.394097 } ); +cells.push_back( {20503911,3925,99,5,1,2,-0.225,-0.44366 } ); +cells.push_back( {20503921,3945,99,5,2,2,-0.225,-0.394097 } ); +cells.push_back( {20603911,3926,99,6,1,2,-0.275,-0.44366 } ); +cells.push_back( {20603921,3946,99,6,2,2,-0.275,-0.394097 } ); +cells.push_back( {20703911,3927,99,7,1,2,-0.325,-0.44366 } ); +cells.push_back( {20703921,3947,99,7,2,2,-0.325,-0.394097 } ); +cells.push_back( {20803911,3928,99,8,1,2,-0.375,-0.44366 } ); +cells.push_back( {20803921,3948,99,8,2,2,-0.375,-0.394097 } ); +cells.push_back( {20903911,3929,99,9,1,2,-0.425,-0.44366 } ); +cells.push_back( {20903921,3949,99,9,2,2,-0.425,-0.394097 } ); +cells.push_back( {21003911,3930,99,10,1,2,-0.475,-0.44366 } ); +cells.push_back( {21003921,3950,99,10,2,2,-0.475,-0.394097 } ); +cells.push_back( {21103911,3931,99,11,1,2,-0.525,-0.44366 } ); +cells.push_back( {21103921,3951,99,11,2,2,-0.525,-0.394097 } ); +cells.push_back( {21203911,3932,99,12,1,2,-0.575,-0.44366 } ); +cells.push_back( {21203921,3952,99,12,2,2,-0.575,-0.394097 } ); +cells.push_back( {21303911,3933,99,13,1,2,-0.625,-0.44366 } ); +cells.push_back( {21303921,3953,99,13,2,2,-0.625,-0.394097 } ); +cells.push_back( {21403911,3934,99,14,1,2,-0.675,-0.44366 } ); +cells.push_back( {21403921,3954,99,14,2,2,-0.675,-0.394097 } ); +cells.push_back( {21503911,3935,99,15,1,2,-0.725,-0.44366 } ); +cells.push_back( {21503921,3955,99,15,2,2,-0.725,-0.394097 } ); +cells.push_back( {21603911,3936,99,16,1,2,-0.775,-0.44366 } ); +cells.push_back( {21603921,3956,99,16,2,2,-0.775,-0.394097 } ); +cells.push_back( {21703911,3937,99,17,1,2,-0.825,-0.44366 } ); +cells.push_back( {21703921,3957,99,17,2,2,-0.825,-0.394097 } ); +cells.push_back( {21803911,3938,99,18,1,2,-0.875,-0.44366 } ); +cells.push_back( {21803921,3958,99,18,2,2,-0.875,-0.394097 } ); +cells.push_back( {21903911,3939,99,19,1,2,-0.925,-0.44366 } ); +cells.push_back( {21903921,3959,99,19,2,2,-0.925,-0.394097 } ); +cells.push_back( {22003911,3940,99,20,1,2,-0.967,-0.44366 } ); +cells.push_back( {22003921,3960,99,20,2,2,-0.967,-0.394097 } ); +cells.push_back( {20103912,3921,99,1,1,1,-0.02675,-0.44366 } ); +cells.push_back( {20103922,3941,99,1,2,1,-0.02675,-0.394097 } ); +cells.push_back( {20203912,3922,99,2,1,1,-0.075,-0.44366 } ); +cells.push_back( {20203922,3942,99,2,2,1,-0.075,-0.394097 } ); +cells.push_back( {20303912,3923,99,3,1,1,-0.125,-0.44366 } ); +cells.push_back( {20303922,3943,99,3,2,1,-0.125,-0.394097 } ); +cells.push_back( {20403912,3924,99,4,1,1,-0.175,-0.44366 } ); +cells.push_back( {20403922,3944,99,4,2,1,-0.175,-0.394097 } ); +cells.push_back( {20503912,3925,99,5,1,1,-0.225,-0.44366 } ); +cells.push_back( {20503922,3945,99,5,2,1,-0.225,-0.394097 } ); +cells.push_back( {20603912,3926,99,6,1,1,-0.275,-0.44366 } ); +cells.push_back( {20603922,3946,99,6,2,1,-0.275,-0.394097 } ); +cells.push_back( {20703912,3927,99,7,1,1,-0.325,-0.44366 } ); +cells.push_back( {20703922,3947,99,7,2,1,-0.325,-0.394097 } ); +cells.push_back( {20803912,3928,99,8,1,1,-0.375,-0.44366 } ); +cells.push_back( {20803922,3948,99,8,2,1,-0.375,-0.394097 } ); +cells.push_back( {20903912,3929,99,9,1,1,-0.425,-0.44366 } ); +cells.push_back( {20903922,3949,99,9,2,1,-0.425,-0.394097 } ); +cells.push_back( {21003912,3930,99,10,1,1,-0.475,-0.44366 } ); +cells.push_back( {21003922,3950,99,10,2,1,-0.475,-0.394097 } ); +cells.push_back( {21103912,3931,99,11,1,1,-0.525,-0.44366 } ); +cells.push_back( {21103922,3951,99,11,2,1,-0.525,-0.394097 } ); +cells.push_back( {21203912,3932,99,12,1,1,-0.575,-0.44366 } ); +cells.push_back( {21203922,3952,99,12,2,1,-0.575,-0.394097 } ); +cells.push_back( {21303912,3933,99,13,1,1,-0.625,-0.44366 } ); +cells.push_back( {21303922,3953,99,13,2,1,-0.625,-0.394097 } ); +cells.push_back( {21403912,3934,99,14,1,1,-0.675,-0.44366 } ); +cells.push_back( {21403922,3954,99,14,2,1,-0.675,-0.394097 } ); +cells.push_back( {21503912,3935,99,15,1,1,-0.725,-0.44366 } ); +cells.push_back( {21503922,3955,99,15,2,1,-0.725,-0.394097 } ); +cells.push_back( {21603912,3936,99,16,1,1,-0.775,-0.44366 } ); +cells.push_back( {21603922,3956,99,16,2,1,-0.775,-0.394097 } ); +cells.push_back( {21703912,3937,99,17,1,1,-0.825,-0.44366 } ); +cells.push_back( {21703922,3957,99,17,2,1,-0.825,-0.394097 } ); +cells.push_back( {21803912,3938,99,18,1,1,-0.875,-0.44366 } ); +cells.push_back( {21803922,3958,99,18,2,1,-0.875,-0.394097 } ); +cells.push_back( {21903912,3939,99,19,1,1,-0.925,-0.44366 } ); +cells.push_back( {21903922,3959,99,19,2,1,-0.925,-0.394097 } ); +cells.push_back( {22003912,3940,99,20,1,1,-0.967,-0.44366 } ); +cells.push_back( {22003922,3960,99,20,2,1,-0.967,-0.394097 } ); +cells.push_back( {20104011,3961,100,1,1,2,-0.02675,-0.338941 } ); +cells.push_back( {20104021,3981,100,1,2,2,-0.02675,-0.289378 } ); +cells.push_back( {20204011,3962,100,2,1,2,-0.075,-0.338941 } ); +cells.push_back( {20204021,3982,100,2,2,2,-0.075,-0.289378 } ); +cells.push_back( {20304011,3963,100,3,1,2,-0.125,-0.338941 } ); +cells.push_back( {20304021,3983,100,3,2,2,-0.125,-0.289378 } ); +cells.push_back( {20404011,3964,100,4,1,2,-0.175,-0.338941 } ); +cells.push_back( {20404021,3984,100,4,2,2,-0.175,-0.289378 } ); +cells.push_back( {20504011,3965,100,5,1,2,-0.225,-0.338941 } ); +cells.push_back( {20504021,3985,100,5,2,2,-0.225,-0.289378 } ); +cells.push_back( {20604011,3966,100,6,1,2,-0.275,-0.338941 } ); +cells.push_back( {20604021,3986,100,6,2,2,-0.275,-0.289378 } ); +cells.push_back( {20704011,3967,100,7,1,2,-0.325,-0.338941 } ); +cells.push_back( {20704021,3987,100,7,2,2,-0.325,-0.289378 } ); +cells.push_back( {20804011,3968,100,8,1,2,-0.375,-0.338941 } ); +cells.push_back( {20804021,3988,100,8,2,2,-0.375,-0.289378 } ); +cells.push_back( {20904011,3969,100,9,1,2,-0.425,-0.338941 } ); +cells.push_back( {20904021,3989,100,9,2,2,-0.425,-0.289378 } ); +cells.push_back( {21004011,3970,100,10,1,2,-0.475,-0.338941 } ); +cells.push_back( {21004021,3990,100,10,2,2,-0.475,-0.289378 } ); +cells.push_back( {21104011,3971,100,11,1,2,-0.525,-0.338941 } ); +cells.push_back( {21104021,3991,100,11,2,2,-0.525,-0.289378 } ); +cells.push_back( {21204011,3972,100,12,1,2,-0.575,-0.338941 } ); +cells.push_back( {21204021,3992,100,12,2,2,-0.575,-0.289378 } ); +cells.push_back( {21304011,3973,100,13,1,2,-0.625,-0.338941 } ); +cells.push_back( {21304021,3993,100,13,2,2,-0.625,-0.289378 } ); +cells.push_back( {21404011,3974,100,14,1,2,-0.675,-0.338941 } ); +cells.push_back( {21404021,3994,100,14,2,2,-0.675,-0.289378 } ); +cells.push_back( {21504011,3975,100,15,1,2,-0.725,-0.338941 } ); +cells.push_back( {21504021,3995,100,15,2,2,-0.725,-0.289378 } ); +cells.push_back( {21604011,3976,100,16,1,2,-0.775,-0.338941 } ); +cells.push_back( {21604021,3996,100,16,2,2,-0.775,-0.289378 } ); +cells.push_back( {21704011,3977,100,17,1,2,-0.825,-0.338941 } ); +cells.push_back( {21704021,3997,100,17,2,2,-0.825,-0.289378 } ); +cells.push_back( {21804011,3978,100,18,1,2,-0.875,-0.338941 } ); +cells.push_back( {21804021,3998,100,18,2,2,-0.875,-0.289378 } ); +cells.push_back( {21904011,3979,100,19,1,2,-0.925,-0.338941 } ); +cells.push_back( {21904021,3999,100,19,2,2,-0.925,-0.289378 } ); +cells.push_back( {22004011,3980,100,20,1,2,-0.967,-0.338941 } ); +cells.push_back( {22004021,4000,100,20,2,2,-0.967,-0.289378 } ); +cells.push_back( {20104012,3961,100,1,1,1,-0.02675,-0.338941 } ); +cells.push_back( {20104022,3981,100,1,2,1,-0.02675,-0.289378 } ); +cells.push_back( {20204012,3962,100,2,1,1,-0.075,-0.338941 } ); +cells.push_back( {20204022,3982,100,2,2,1,-0.075,-0.289378 } ); +cells.push_back( {20304012,3963,100,3,1,1,-0.125,-0.338941 } ); +cells.push_back( {20304022,3983,100,3,2,1,-0.125,-0.289378 } ); +cells.push_back( {20404012,3964,100,4,1,1,-0.175,-0.338941 } ); +cells.push_back( {20404022,3984,100,4,2,1,-0.175,-0.289378 } ); +cells.push_back( {20504012,3965,100,5,1,1,-0.225,-0.338941 } ); +cells.push_back( {20504022,3985,100,5,2,1,-0.225,-0.289378 } ); +cells.push_back( {20604012,3966,100,6,1,1,-0.275,-0.338941 } ); +cells.push_back( {20604022,3986,100,6,2,1,-0.275,-0.289378 } ); +cells.push_back( {20704012,3967,100,7,1,1,-0.325,-0.338941 } ); +cells.push_back( {20704022,3987,100,7,2,1,-0.325,-0.289378 } ); +cells.push_back( {20804012,3968,100,8,1,1,-0.375,-0.338941 } ); +cells.push_back( {20804022,3988,100,8,2,1,-0.375,-0.289378 } ); +cells.push_back( {20904012,3969,100,9,1,1,-0.425,-0.338941 } ); +cells.push_back( {20904022,3989,100,9,2,1,-0.425,-0.289378 } ); +cells.push_back( {21004012,3970,100,10,1,1,-0.475,-0.338941 } ); +cells.push_back( {21004022,3990,100,10,2,1,-0.475,-0.289378 } ); +cells.push_back( {21104012,3971,100,11,1,1,-0.525,-0.338941 } ); +cells.push_back( {21104022,3991,100,11,2,1,-0.525,-0.289378 } ); +cells.push_back( {21204012,3972,100,12,1,1,-0.575,-0.338941 } ); +cells.push_back( {21204022,3992,100,12,2,1,-0.575,-0.289378 } ); +cells.push_back( {21304012,3973,100,13,1,1,-0.625,-0.338941 } ); +cells.push_back( {21304022,3993,100,13,2,1,-0.625,-0.289378 } ); +cells.push_back( {21404012,3974,100,14,1,1,-0.675,-0.338941 } ); +cells.push_back( {21404022,3994,100,14,2,1,-0.675,-0.289378 } ); +cells.push_back( {21504012,3975,100,15,1,1,-0.725,-0.338941 } ); +cells.push_back( {21504022,3995,100,15,2,1,-0.725,-0.289378 } ); +cells.push_back( {21604012,3976,100,16,1,1,-0.775,-0.338941 } ); +cells.push_back( {21604022,3996,100,16,2,1,-0.775,-0.289378 } ); +cells.push_back( {21704012,3977,100,17,1,1,-0.825,-0.338941 } ); +cells.push_back( {21704022,3997,100,17,2,1,-0.825,-0.289378 } ); +cells.push_back( {21804012,3978,100,18,1,1,-0.875,-0.338941 } ); +cells.push_back( {21804022,3998,100,18,2,1,-0.875,-0.289378 } ); +cells.push_back( {21904012,3979,100,19,1,1,-0.925,-0.338941 } ); +cells.push_back( {21904022,3999,100,19,2,1,-0.925,-0.289378 } ); +cells.push_back( {22004012,3980,100,20,1,1,-0.967,-0.338941 } ); +cells.push_back( {22004022,4000,100,20,2,1,-0.967,-0.289378 } ); +cells.push_back( {20104111,4001,101,1,1,2,-0.02675,-0.234221 } ); +cells.push_back( {20104121,4021,101,1,2,2,-0.02675,-0.184658 } ); +cells.push_back( {20204111,4002,101,2,1,2,-0.075,-0.234221 } ); +cells.push_back( {20204121,4022,101,2,2,2,-0.075,-0.184658 } ); +cells.push_back( {20304111,4003,101,3,1,2,-0.125,-0.234221 } ); +cells.push_back( {20304121,4023,101,3,2,2,-0.125,-0.184658 } ); +cells.push_back( {20404111,4004,101,4,1,2,-0.175,-0.234221 } ); +cells.push_back( {20404121,4024,101,4,2,2,-0.175,-0.184658 } ); +cells.push_back( {20504111,4005,101,5,1,2,-0.225,-0.234221 } ); +cells.push_back( {20504121,4025,101,5,2,2,-0.225,-0.184658 } ); +cells.push_back( {20604111,4006,101,6,1,2,-0.275,-0.234221 } ); +cells.push_back( {20604121,4026,101,6,2,2,-0.275,-0.184658 } ); +cells.push_back( {20704111,4007,101,7,1,2,-0.325,-0.234221 } ); +cells.push_back( {20704121,4027,101,7,2,2,-0.325,-0.184658 } ); +cells.push_back( {20804111,4008,101,8,1,2,-0.375,-0.234221 } ); +cells.push_back( {20804121,4028,101,8,2,2,-0.375,-0.184658 } ); +cells.push_back( {20904111,4009,101,9,1,2,-0.425,-0.234221 } ); +cells.push_back( {20904121,4029,101,9,2,2,-0.425,-0.184658 } ); +cells.push_back( {21004111,4010,101,10,1,2,-0.475,-0.234221 } ); +cells.push_back( {21004121,4030,101,10,2,2,-0.475,-0.184658 } ); +cells.push_back( {21104111,4011,101,11,1,2,-0.525,-0.234221 } ); +cells.push_back( {21104121,4031,101,11,2,2,-0.525,-0.184658 } ); +cells.push_back( {21204111,4012,101,12,1,2,-0.575,-0.234221 } ); +cells.push_back( {21204121,4032,101,12,2,2,-0.575,-0.184658 } ); +cells.push_back( {21304111,4013,101,13,1,2,-0.625,-0.234221 } ); +cells.push_back( {21304121,4033,101,13,2,2,-0.625,-0.184658 } ); +cells.push_back( {21404111,4014,101,14,1,2,-0.675,-0.234221 } ); +cells.push_back( {21404121,4034,101,14,2,2,-0.675,-0.184658 } ); +cells.push_back( {21504111,4015,101,15,1,2,-0.725,-0.234221 } ); +cells.push_back( {21504121,4035,101,15,2,2,-0.725,-0.184658 } ); +cells.push_back( {21604111,4016,101,16,1,2,-0.775,-0.234221 } ); +cells.push_back( {21604121,4036,101,16,2,2,-0.775,-0.184658 } ); +cells.push_back( {21704111,4017,101,17,1,2,-0.825,-0.234221 } ); +cells.push_back( {21704121,4037,101,17,2,2,-0.825,-0.184658 } ); +cells.push_back( {21804111,4018,101,18,1,2,-0.875,-0.234221 } ); +cells.push_back( {21804121,4038,101,18,2,2,-0.875,-0.184658 } ); +cells.push_back( {21904111,4019,101,19,1,2,-0.925,-0.234221 } ); +cells.push_back( {21904121,4039,101,19,2,2,-0.925,-0.184658 } ); +cells.push_back( {22004111,4020,101,20,1,2,-0.967,-0.234221 } ); +cells.push_back( {22004121,4040,101,20,2,2,-0.967,-0.184658 } ); +cells.push_back( {20104112,4001,101,1,1,1,-0.02675,-0.234221 } ); +cells.push_back( {20104122,4021,101,1,2,1,-0.02675,-0.184658 } ); +cells.push_back( {20204112,4002,101,2,1,1,-0.075,-0.234221 } ); +cells.push_back( {20204122,4022,101,2,2,1,-0.075,-0.184658 } ); +cells.push_back( {20304112,4003,101,3,1,1,-0.125,-0.234221 } ); +cells.push_back( {20304122,4023,101,3,2,1,-0.125,-0.184658 } ); +cells.push_back( {20404112,4004,101,4,1,1,-0.175,-0.234221 } ); +cells.push_back( {20404122,4024,101,4,2,1,-0.175,-0.184658 } ); +cells.push_back( {20504112,4005,101,5,1,1,-0.225,-0.234221 } ); +cells.push_back( {20504122,4025,101,5,2,1,-0.225,-0.184658 } ); +cells.push_back( {20604112,4006,101,6,1,1,-0.275,-0.234221 } ); +cells.push_back( {20604122,4026,101,6,2,1,-0.275,-0.184658 } ); +cells.push_back( {20704112,4007,101,7,1,1,-0.325,-0.234221 } ); +cells.push_back( {20704122,4027,101,7,2,1,-0.325,-0.184658 } ); +cells.push_back( {20804112,4008,101,8,1,1,-0.375,-0.234221 } ); +cells.push_back( {20804122,4028,101,8,2,1,-0.375,-0.184658 } ); +cells.push_back( {20904112,4009,101,9,1,1,-0.425,-0.234221 } ); +cells.push_back( {20904122,4029,101,9,2,1,-0.425,-0.184658 } ); +cells.push_back( {21004112,4010,101,10,1,1,-0.475,-0.234221 } ); +cells.push_back( {21004122,4030,101,10,2,1,-0.475,-0.184658 } ); +cells.push_back( {21104112,4011,101,11,1,1,-0.525,-0.234221 } ); +cells.push_back( {21104122,4031,101,11,2,1,-0.525,-0.184658 } ); +cells.push_back( {21204112,4012,101,12,1,1,-0.575,-0.234221 } ); +cells.push_back( {21204122,4032,101,12,2,1,-0.575,-0.184658 } ); +cells.push_back( {21304112,4013,101,13,1,1,-0.625,-0.234221 } ); +cells.push_back( {21304122,4033,101,13,2,1,-0.625,-0.184658 } ); +cells.push_back( {21404112,4014,101,14,1,1,-0.675,-0.234221 } ); +cells.push_back( {21404122,4034,101,14,2,1,-0.675,-0.184658 } ); +cells.push_back( {21504112,4015,101,15,1,1,-0.725,-0.234221 } ); +cells.push_back( {21504122,4035,101,15,2,1,-0.725,-0.184658 } ); +cells.push_back( {21604112,4016,101,16,1,1,-0.775,-0.234221 } ); +cells.push_back( {21604122,4036,101,16,2,1,-0.775,-0.184658 } ); +cells.push_back( {21704112,4017,101,17,1,1,-0.825,-0.234221 } ); +cells.push_back( {21704122,4037,101,17,2,1,-0.825,-0.184658 } ); +cells.push_back( {21804112,4018,101,18,1,1,-0.875,-0.234221 } ); +cells.push_back( {21804122,4038,101,18,2,1,-0.875,-0.184658 } ); +cells.push_back( {21904112,4019,101,19,1,1,-0.925,-0.234221 } ); +cells.push_back( {21904122,4039,101,19,2,1,-0.925,-0.184658 } ); +cells.push_back( {22004112,4020,101,20,1,1,-0.967,-0.234221 } ); +cells.push_back( {22004122,4040,101,20,2,1,-0.967,-0.184658 } ); +cells.push_back( {20104211,4041,102,1,1,2,-0.02675,-0.129501 } ); +cells.push_back( {20104221,4061,102,1,2,2,-0.02675,-0.0799382 } ); +cells.push_back( {20204211,4042,102,2,1,2,-0.075,-0.129501 } ); +cells.push_back( {20204221,4062,102,2,2,2,-0.075,-0.0799382 } ); +cells.push_back( {20304211,4043,102,3,1,2,-0.125,-0.129501 } ); +cells.push_back( {20304221,4063,102,3,2,2,-0.125,-0.0799382 } ); +cells.push_back( {20404211,4044,102,4,1,2,-0.175,-0.129501 } ); +cells.push_back( {20404221,4064,102,4,2,2,-0.175,-0.0799382 } ); +cells.push_back( {20504211,4045,102,5,1,2,-0.225,-0.129501 } ); +cells.push_back( {20504221,4065,102,5,2,2,-0.225,-0.0799382 } ); +cells.push_back( {20604211,4046,102,6,1,2,-0.275,-0.129501 } ); +cells.push_back( {20604221,4066,102,6,2,2,-0.275,-0.0799382 } ); +cells.push_back( {20704211,4047,102,7,1,2,-0.325,-0.129501 } ); +cells.push_back( {20704221,4067,102,7,2,2,-0.325,-0.0799382 } ); +cells.push_back( {20804211,4048,102,8,1,2,-0.375,-0.129501 } ); +cells.push_back( {20804221,4068,102,8,2,2,-0.375,-0.0799382 } ); +cells.push_back( {20904211,4049,102,9,1,2,-0.425,-0.129501 } ); +cells.push_back( {20904221,4069,102,9,2,2,-0.425,-0.0799382 } ); +cells.push_back( {21004211,4050,102,10,1,2,-0.475,-0.129501 } ); +cells.push_back( {21004221,4070,102,10,2,2,-0.475,-0.0799382 } ); +cells.push_back( {21104211,4051,102,11,1,2,-0.525,-0.129501 } ); +cells.push_back( {21104221,4071,102,11,2,2,-0.525,-0.0799382 } ); +cells.push_back( {21204211,4052,102,12,1,2,-0.575,-0.129501 } ); +cells.push_back( {21204221,4072,102,12,2,2,-0.575,-0.0799382 } ); +cells.push_back( {21304211,4053,102,13,1,2,-0.625,-0.129501 } ); +cells.push_back( {21304221,4073,102,13,2,2,-0.625,-0.0799382 } ); +cells.push_back( {21404211,4054,102,14,1,2,-0.675,-0.129501 } ); +cells.push_back( {21404221,4074,102,14,2,2,-0.675,-0.0799382 } ); +cells.push_back( {21504211,4055,102,15,1,2,-0.725,-0.129501 } ); +cells.push_back( {21504221,4075,102,15,2,2,-0.725,-0.0799382 } ); +cells.push_back( {21604211,4056,102,16,1,2,-0.775,-0.129501 } ); +cells.push_back( {21604221,4076,102,16,2,2,-0.775,-0.0799382 } ); +cells.push_back( {21704211,4057,102,17,1,2,-0.825,-0.129501 } ); +cells.push_back( {21704221,4077,102,17,2,2,-0.825,-0.0799382 } ); +cells.push_back( {21804211,4058,102,18,1,2,-0.875,-0.129501 } ); +cells.push_back( {21804221,4078,102,18,2,2,-0.875,-0.0799382 } ); +cells.push_back( {21904211,4059,102,19,1,2,-0.925,-0.129501 } ); +cells.push_back( {21904221,4079,102,19,2,2,-0.925,-0.0799382 } ); +cells.push_back( {22004211,4060,102,20,1,2,-0.967,-0.129501 } ); +cells.push_back( {22004221,4080,102,20,2,2,-0.967,-0.0799382 } ); +cells.push_back( {20104212,4041,102,1,1,1,-0.02675,-0.129501 } ); +cells.push_back( {20104222,4061,102,1,2,1,-0.02675,-0.0799382 } ); +cells.push_back( {20204212,4042,102,2,1,1,-0.075,-0.129501 } ); +cells.push_back( {20204222,4062,102,2,2,1,-0.075,-0.0799382 } ); +cells.push_back( {20304212,4043,102,3,1,1,-0.125,-0.129501 } ); +cells.push_back( {20304222,4063,102,3,2,1,-0.125,-0.0799382 } ); +cells.push_back( {20404212,4044,102,4,1,1,-0.175,-0.129501 } ); +cells.push_back( {20404222,4064,102,4,2,1,-0.175,-0.0799382 } ); +cells.push_back( {20504212,4045,102,5,1,1,-0.225,-0.129501 } ); +cells.push_back( {20504222,4065,102,5,2,1,-0.225,-0.0799382 } ); +cells.push_back( {20604212,4046,102,6,1,1,-0.275,-0.129501 } ); +cells.push_back( {20604222,4066,102,6,2,1,-0.275,-0.0799382 } ); +cells.push_back( {20704212,4047,102,7,1,1,-0.325,-0.129501 } ); +cells.push_back( {20704222,4067,102,7,2,1,-0.325,-0.0799382 } ); +cells.push_back( {20804212,4048,102,8,1,1,-0.375,-0.129501 } ); +cells.push_back( {20804222,4068,102,8,2,1,-0.375,-0.0799382 } ); +cells.push_back( {20904212,4049,102,9,1,1,-0.425,-0.129501 } ); +cells.push_back( {20904222,4069,102,9,2,1,-0.425,-0.0799382 } ); +cells.push_back( {21004212,4050,102,10,1,1,-0.475,-0.129501 } ); +cells.push_back( {21004222,4070,102,10,2,1,-0.475,-0.0799382 } ); +cells.push_back( {21104212,4051,102,11,1,1,-0.525,-0.129501 } ); +cells.push_back( {21104222,4071,102,11,2,1,-0.525,-0.0799382 } ); +cells.push_back( {21204212,4052,102,12,1,1,-0.575,-0.129501 } ); +cells.push_back( {21204222,4072,102,12,2,1,-0.575,-0.0799382 } ); +cells.push_back( {21304212,4053,102,13,1,1,-0.625,-0.129501 } ); +cells.push_back( {21304222,4073,102,13,2,1,-0.625,-0.0799382 } ); +cells.push_back( {21404212,4054,102,14,1,1,-0.675,-0.129501 } ); +cells.push_back( {21404222,4074,102,14,2,1,-0.675,-0.0799382 } ); +cells.push_back( {21504212,4055,102,15,1,1,-0.725,-0.129501 } ); +cells.push_back( {21504222,4075,102,15,2,1,-0.725,-0.0799382 } ); +cells.push_back( {21604212,4056,102,16,1,1,-0.775,-0.129501 } ); +cells.push_back( {21604222,4076,102,16,2,1,-0.775,-0.0799382 } ); +cells.push_back( {21704212,4057,102,17,1,1,-0.825,-0.129501 } ); +cells.push_back( {21704222,4077,102,17,2,1,-0.825,-0.0799382 } ); +cells.push_back( {21804212,4058,102,18,1,1,-0.875,-0.129501 } ); +cells.push_back( {21804222,4078,102,18,2,1,-0.875,-0.0799382 } ); +cells.push_back( {21904212,4059,102,19,1,1,-0.925,-0.129501 } ); +cells.push_back( {21904222,4079,102,19,2,1,-0.925,-0.0799382 } ); +cells.push_back( {22004212,4060,102,20,1,1,-0.967,-0.129501 } ); +cells.push_back( {22004222,4080,102,20,2,1,-0.967,-0.0799382 } ); +cells.push_back( {20104311,4081,103,1,1,2,-0.02675,-0.0247812 } ); +cells.push_back( {20104321,4101,103,1,2,2,-0.02675,0.0247816 } ); +cells.push_back( {20204311,4082,103,2,1,2,-0.075,-0.0247812 } ); +cells.push_back( {20204321,4102,103,2,2,2,-0.075,0.0247816 } ); +cells.push_back( {20304311,4083,103,3,1,2,-0.125,-0.0247812 } ); +cells.push_back( {20304321,4103,103,3,2,2,-0.125,0.0247816 } ); +cells.push_back( {20404311,4084,103,4,1,2,-0.175,-0.0247812 } ); +cells.push_back( {20404321,4104,103,4,2,2,-0.175,0.0247816 } ); +cells.push_back( {20504311,4085,103,5,1,2,-0.225,-0.0247812 } ); +cells.push_back( {20504321,4105,103,5,2,2,-0.225,0.0247816 } ); +cells.push_back( {20604311,4086,103,6,1,2,-0.275,-0.0247812 } ); +cells.push_back( {20604321,4106,103,6,2,2,-0.275,0.0247816 } ); +cells.push_back( {20704311,4087,103,7,1,2,-0.325,-0.0247812 } ); +cells.push_back( {20704321,4107,103,7,2,2,-0.325,0.0247816 } ); +cells.push_back( {20804311,4088,103,8,1,2,-0.375,-0.0247812 } ); +cells.push_back( {20804321,4108,103,8,2,2,-0.375,0.0247816 } ); +cells.push_back( {20904311,4089,103,9,1,2,-0.425,-0.0247812 } ); +cells.push_back( {20904321,4109,103,9,2,2,-0.425,0.0247816 } ); +cells.push_back( {21004311,4090,103,10,1,2,-0.475,-0.0247812 } ); +cells.push_back( {21004321,4110,103,10,2,2,-0.475,0.0247816 } ); +cells.push_back( {21104311,4091,103,11,1,2,-0.525,-0.0247812 } ); +cells.push_back( {21104321,4111,103,11,2,2,-0.525,0.0247816 } ); +cells.push_back( {21204311,4092,103,12,1,2,-0.575,-0.0247812 } ); +cells.push_back( {21204321,4112,103,12,2,2,-0.575,0.0247816 } ); +cells.push_back( {21304311,4093,103,13,1,2,-0.625,-0.0247812 } ); +cells.push_back( {21304321,4113,103,13,2,2,-0.625,0.0247816 } ); +cells.push_back( {21404311,4094,103,14,1,2,-0.675,-0.0247812 } ); +cells.push_back( {21404321,4114,103,14,2,2,-0.675,0.0247816 } ); +cells.push_back( {21504311,4095,103,15,1,2,-0.725,-0.0247812 } ); +cells.push_back( {21504321,4115,103,15,2,2,-0.725,0.0247816 } ); +cells.push_back( {21604311,4096,103,16,1,2,-0.775,-0.0247812 } ); +cells.push_back( {21604321,4116,103,16,2,2,-0.775,0.0247816 } ); +cells.push_back( {21704311,4097,103,17,1,2,-0.825,-0.0247812 } ); +cells.push_back( {21704321,4117,103,17,2,2,-0.825,0.0247816 } ); +cells.push_back( {21804311,4098,103,18,1,2,-0.875,-0.0247812 } ); +cells.push_back( {21804321,4118,103,18,2,2,-0.875,0.0247816 } ); +cells.push_back( {21904311,4099,103,19,1,2,-0.925,-0.0247812 } ); +cells.push_back( {21904321,4119,103,19,2,2,-0.925,0.0247816 } ); +cells.push_back( {22004311,4100,103,20,1,2,-0.967,-0.0247812 } ); +cells.push_back( {22004321,4120,103,20,2,2,-0.967,0.0247816 } ); +cells.push_back( {20104312,4081,103,1,1,1,-0.02675,-0.0247812 } ); +cells.push_back( {20104322,4101,103,1,2,1,-0.02675,0.0247816 } ); +cells.push_back( {20204312,4082,103,2,1,1,-0.075,-0.0247812 } ); +cells.push_back( {20204322,4102,103,2,2,1,-0.075,0.0247816 } ); +cells.push_back( {20304312,4083,103,3,1,1,-0.125,-0.0247812 } ); +cells.push_back( {20304322,4103,103,3,2,1,-0.125,0.0247816 } ); +cells.push_back( {20404312,4084,103,4,1,1,-0.175,-0.0247812 } ); +cells.push_back( {20404322,4104,103,4,2,1,-0.175,0.0247816 } ); +cells.push_back( {20504312,4085,103,5,1,1,-0.225,-0.0247812 } ); +cells.push_back( {20504322,4105,103,5,2,1,-0.225,0.0247816 } ); +cells.push_back( {20604312,4086,103,6,1,1,-0.275,-0.0247812 } ); +cells.push_back( {20604322,4106,103,6,2,1,-0.275,0.0247816 } ); +cells.push_back( {20704312,4087,103,7,1,1,-0.325,-0.0247812 } ); +cells.push_back( {20704322,4107,103,7,2,1,-0.325,0.0247816 } ); +cells.push_back( {20804312,4088,103,8,1,1,-0.375,-0.0247812 } ); +cells.push_back( {20804322,4108,103,8,2,1,-0.375,0.0247816 } ); +cells.push_back( {20904312,4089,103,9,1,1,-0.425,-0.0247812 } ); +cells.push_back( {20904322,4109,103,9,2,1,-0.425,0.0247816 } ); +cells.push_back( {21004312,4090,103,10,1,1,-0.475,-0.0247812 } ); +cells.push_back( {21004322,4110,103,10,2,1,-0.475,0.0247816 } ); +cells.push_back( {21104312,4091,103,11,1,1,-0.525,-0.0247812 } ); +cells.push_back( {21104322,4111,103,11,2,1,-0.525,0.0247816 } ); +cells.push_back( {21204312,4092,103,12,1,1,-0.575,-0.0247812 } ); +cells.push_back( {21204322,4112,103,12,2,1,-0.575,0.0247816 } ); +cells.push_back( {21304312,4093,103,13,1,1,-0.625,-0.0247812 } ); +cells.push_back( {21304322,4113,103,13,2,1,-0.625,0.0247816 } ); +cells.push_back( {21404312,4094,103,14,1,1,-0.675,-0.0247812 } ); +cells.push_back( {21404322,4114,103,14,2,1,-0.675,0.0247816 } ); +cells.push_back( {21504312,4095,103,15,1,1,-0.725,-0.0247812 } ); +cells.push_back( {21504322,4115,103,15,2,1,-0.725,0.0247816 } ); +cells.push_back( {21604312,4096,103,16,1,1,-0.775,-0.0247812 } ); +cells.push_back( {21604322,4116,103,16,2,1,-0.775,0.0247816 } ); +cells.push_back( {21704312,4097,103,17,1,1,-0.825,-0.0247812 } ); +cells.push_back( {21704322,4117,103,17,2,1,-0.825,0.0247816 } ); +cells.push_back( {21804312,4098,103,18,1,1,-0.875,-0.0247812 } ); +cells.push_back( {21804322,4118,103,18,2,1,-0.875,0.0247816 } ); +cells.push_back( {21904312,4099,103,19,1,1,-0.925,-0.0247812 } ); +cells.push_back( {21904322,4119,103,19,2,1,-0.925,0.0247816 } ); +cells.push_back( {22004312,4100,103,20,1,1,-0.967,-0.0247812 } ); +cells.push_back( {22004322,4120,103,20,2,1,-0.967,0.0247816 } ); +cells.push_back( {20104411,4121,104,1,1,2,-0.02675,0.0799385 } ); +cells.push_back( {20104421,4141,104,1,2,2,-0.02675,0.129501 } ); +cells.push_back( {20204411,4122,104,2,1,2,-0.075,0.0799385 } ); +cells.push_back( {20204421,4142,104,2,2,2,-0.075,0.129501 } ); +cells.push_back( {20304411,4123,104,3,1,2,-0.125,0.0799385 } ); +cells.push_back( {20304421,4143,104,3,2,2,-0.125,0.129501 } ); +cells.push_back( {20404411,4124,104,4,1,2,-0.175,0.0799385 } ); +cells.push_back( {20404421,4144,104,4,2,2,-0.175,0.129501 } ); +cells.push_back( {20504411,4125,104,5,1,2,-0.225,0.0799385 } ); +cells.push_back( {20504421,4145,104,5,2,2,-0.225,0.129501 } ); +cells.push_back( {20604411,4126,104,6,1,2,-0.275,0.0799385 } ); +cells.push_back( {20604421,4146,104,6,2,2,-0.275,0.129501 } ); +cells.push_back( {20704411,4127,104,7,1,2,-0.325,0.0799385 } ); +cells.push_back( {20704421,4147,104,7,2,2,-0.325,0.129501 } ); +cells.push_back( {20804411,4128,104,8,1,2,-0.375,0.0799385 } ); +cells.push_back( {20804421,4148,104,8,2,2,-0.375,0.129501 } ); +cells.push_back( {20904411,4129,104,9,1,2,-0.425,0.0799385 } ); +cells.push_back( {20904421,4149,104,9,2,2,-0.425,0.129501 } ); +cells.push_back( {21004411,4130,104,10,1,2,-0.475,0.0799385 } ); +cells.push_back( {21004421,4150,104,10,2,2,-0.475,0.129501 } ); +cells.push_back( {21104411,4131,104,11,1,2,-0.525,0.0799385 } ); +cells.push_back( {21104421,4151,104,11,2,2,-0.525,0.129501 } ); +cells.push_back( {21204411,4132,104,12,1,2,-0.575,0.0799385 } ); +cells.push_back( {21204421,4152,104,12,2,2,-0.575,0.129501 } ); +cells.push_back( {21304411,4133,104,13,1,2,-0.625,0.0799385 } ); +cells.push_back( {21304421,4153,104,13,2,2,-0.625,0.129501 } ); +cells.push_back( {21404411,4134,104,14,1,2,-0.675,0.0799385 } ); +cells.push_back( {21404421,4154,104,14,2,2,-0.675,0.129501 } ); +cells.push_back( {21504411,4135,104,15,1,2,-0.725,0.0799385 } ); +cells.push_back( {21504421,4155,104,15,2,2,-0.725,0.129501 } ); +cells.push_back( {21604411,4136,104,16,1,2,-0.775,0.0799385 } ); +cells.push_back( {21604421,4156,104,16,2,2,-0.775,0.129501 } ); +cells.push_back( {21704411,4137,104,17,1,2,-0.825,0.0799385 } ); +cells.push_back( {21704421,4157,104,17,2,2,-0.825,0.129501 } ); +cells.push_back( {21804411,4138,104,18,1,2,-0.875,0.0799385 } ); +cells.push_back( {21804421,4158,104,18,2,2,-0.875,0.129501 } ); +cells.push_back( {21904411,4139,104,19,1,2,-0.925,0.0799385 } ); +cells.push_back( {21904421,4159,104,19,2,2,-0.925,0.129501 } ); +cells.push_back( {22004411,4140,104,20,1,2,-0.967,0.0799385 } ); +cells.push_back( {22004421,4160,104,20,2,2,-0.967,0.129501 } ); +cells.push_back( {20104412,4121,104,1,1,1,-0.02675,0.0799385 } ); +cells.push_back( {20104422,4141,104,1,2,1,-0.02675,0.129501 } ); +cells.push_back( {20204412,4122,104,2,1,1,-0.075,0.0799385 } ); +cells.push_back( {20204422,4142,104,2,2,1,-0.075,0.129501 } ); +cells.push_back( {20304412,4123,104,3,1,1,-0.125,0.0799385 } ); +cells.push_back( {20304422,4143,104,3,2,1,-0.125,0.129501 } ); +cells.push_back( {20404412,4124,104,4,1,1,-0.175,0.0799385 } ); +cells.push_back( {20404422,4144,104,4,2,1,-0.175,0.129501 } ); +cells.push_back( {20504412,4125,104,5,1,1,-0.225,0.0799385 } ); +cells.push_back( {20504422,4145,104,5,2,1,-0.225,0.129501 } ); +cells.push_back( {20604412,4126,104,6,1,1,-0.275,0.0799385 } ); +cells.push_back( {20604422,4146,104,6,2,1,-0.275,0.129501 } ); +cells.push_back( {20704412,4127,104,7,1,1,-0.325,0.0799385 } ); +cells.push_back( {20704422,4147,104,7,2,1,-0.325,0.129501 } ); +cells.push_back( {20804412,4128,104,8,1,1,-0.375,0.0799385 } ); +cells.push_back( {20804422,4148,104,8,2,1,-0.375,0.129501 } ); +cells.push_back( {20904412,4129,104,9,1,1,-0.425,0.0799385 } ); +cells.push_back( {20904422,4149,104,9,2,1,-0.425,0.129501 } ); +cells.push_back( {21004412,4130,104,10,1,1,-0.475,0.0799385 } ); +cells.push_back( {21004422,4150,104,10,2,1,-0.475,0.129501 } ); +cells.push_back( {21104412,4131,104,11,1,1,-0.525,0.0799385 } ); +cells.push_back( {21104422,4151,104,11,2,1,-0.525,0.129501 } ); +cells.push_back( {21204412,4132,104,12,1,1,-0.575,0.0799385 } ); +cells.push_back( {21204422,4152,104,12,2,1,-0.575,0.129501 } ); +cells.push_back( {21304412,4133,104,13,1,1,-0.625,0.0799385 } ); +cells.push_back( {21304422,4153,104,13,2,1,-0.625,0.129501 } ); +cells.push_back( {21404412,4134,104,14,1,1,-0.675,0.0799385 } ); +cells.push_back( {21404422,4154,104,14,2,1,-0.675,0.129501 } ); +cells.push_back( {21504412,4135,104,15,1,1,-0.725,0.0799385 } ); +cells.push_back( {21504422,4155,104,15,2,1,-0.725,0.129501 } ); +cells.push_back( {21604412,4136,104,16,1,1,-0.775,0.0799385 } ); +cells.push_back( {21604422,4156,104,16,2,1,-0.775,0.129501 } ); +cells.push_back( {21704412,4137,104,17,1,1,-0.825,0.0799385 } ); +cells.push_back( {21704422,4157,104,17,2,1,-0.825,0.129501 } ); +cells.push_back( {21804412,4138,104,18,1,1,-0.875,0.0799385 } ); +cells.push_back( {21804422,4158,104,18,2,1,-0.875,0.129501 } ); +cells.push_back( {21904412,4139,104,19,1,1,-0.925,0.0799385 } ); +cells.push_back( {21904422,4159,104,19,2,1,-0.925,0.129501 } ); +cells.push_back( {22004412,4140,104,20,1,1,-0.967,0.0799385 } ); +cells.push_back( {22004422,4160,104,20,2,1,-0.967,0.129501 } ); +cells.push_back( {20104511,4161,105,1,1,2,-0.02675,0.184658 } ); +cells.push_back( {20104521,4181,105,1,2,2,-0.02675,0.234221 } ); +cells.push_back( {20204511,4162,105,2,1,2,-0.075,0.184658 } ); +cells.push_back( {20204521,4182,105,2,2,2,-0.075,0.234221 } ); +cells.push_back( {20304511,4163,105,3,1,2,-0.125,0.184658 } ); +cells.push_back( {20304521,4183,105,3,2,2,-0.125,0.234221 } ); +cells.push_back( {20404511,4164,105,4,1,2,-0.175,0.184658 } ); +cells.push_back( {20404521,4184,105,4,2,2,-0.175,0.234221 } ); +cells.push_back( {20504511,4165,105,5,1,2,-0.225,0.184658 } ); +cells.push_back( {20504521,4185,105,5,2,2,-0.225,0.234221 } ); +cells.push_back( {20604511,4166,105,6,1,2,-0.275,0.184658 } ); +cells.push_back( {20604521,4186,105,6,2,2,-0.275,0.234221 } ); +cells.push_back( {20704511,4167,105,7,1,2,-0.325,0.184658 } ); +cells.push_back( {20704521,4187,105,7,2,2,-0.325,0.234221 } ); +cells.push_back( {20804511,4168,105,8,1,2,-0.375,0.184658 } ); +cells.push_back( {20804521,4188,105,8,2,2,-0.375,0.234221 } ); +cells.push_back( {20904511,4169,105,9,1,2,-0.425,0.184658 } ); +cells.push_back( {20904521,4189,105,9,2,2,-0.425,0.234221 } ); +cells.push_back( {21004511,4170,105,10,1,2,-0.475,0.184658 } ); +cells.push_back( {21004521,4190,105,10,2,2,-0.475,0.234221 } ); +cells.push_back( {21104511,4171,105,11,1,2,-0.525,0.184658 } ); +cells.push_back( {21104521,4191,105,11,2,2,-0.525,0.234221 } ); +cells.push_back( {21204511,4172,105,12,1,2,-0.575,0.184658 } ); +cells.push_back( {21204521,4192,105,12,2,2,-0.575,0.234221 } ); +cells.push_back( {21304511,4173,105,13,1,2,-0.625,0.184658 } ); +cells.push_back( {21304521,4193,105,13,2,2,-0.625,0.234221 } ); +cells.push_back( {21404511,4174,105,14,1,2,-0.675,0.184658 } ); +cells.push_back( {21404521,4194,105,14,2,2,-0.675,0.234221 } ); +cells.push_back( {21504511,4175,105,15,1,2,-0.725,0.184658 } ); +cells.push_back( {21504521,4195,105,15,2,2,-0.725,0.234221 } ); +cells.push_back( {21604511,4176,105,16,1,2,-0.775,0.184658 } ); +cells.push_back( {21604521,4196,105,16,2,2,-0.775,0.234221 } ); +cells.push_back( {21704511,4177,105,17,1,2,-0.825,0.184658 } ); +cells.push_back( {21704521,4197,105,17,2,2,-0.825,0.234221 } ); +cells.push_back( {21804511,4178,105,18,1,2,-0.875,0.184658 } ); +cells.push_back( {21804521,4198,105,18,2,2,-0.875,0.234221 } ); +cells.push_back( {21904511,4179,105,19,1,2,-0.925,0.184658 } ); +cells.push_back( {21904521,4199,105,19,2,2,-0.925,0.234221 } ); +cells.push_back( {22004511,4180,105,20,1,2,-0.967,0.184658 } ); +cells.push_back( {22004521,4200,105,20,2,2,-0.967,0.234221 } ); +cells.push_back( {20104512,4161,105,1,1,1,-0.02675,0.184658 } ); +cells.push_back( {20104522,4181,105,1,2,1,-0.02675,0.234221 } ); +cells.push_back( {20204512,4162,105,2,1,1,-0.075,0.184658 } ); +cells.push_back( {20204522,4182,105,2,2,1,-0.075,0.234221 } ); +cells.push_back( {20304512,4163,105,3,1,1,-0.125,0.184658 } ); +cells.push_back( {20304522,4183,105,3,2,1,-0.125,0.234221 } ); +cells.push_back( {20404512,4164,105,4,1,1,-0.175,0.184658 } ); +cells.push_back( {20404522,4184,105,4,2,1,-0.175,0.234221 } ); +cells.push_back( {20504512,4165,105,5,1,1,-0.225,0.184658 } ); +cells.push_back( {20504522,4185,105,5,2,1,-0.225,0.234221 } ); +cells.push_back( {20604512,4166,105,6,1,1,-0.275,0.184658 } ); +cells.push_back( {20604522,4186,105,6,2,1,-0.275,0.234221 } ); +cells.push_back( {20704512,4167,105,7,1,1,-0.325,0.184658 } ); +cells.push_back( {20704522,4187,105,7,2,1,-0.325,0.234221 } ); +cells.push_back( {20804512,4168,105,8,1,1,-0.375,0.184658 } ); +cells.push_back( {20804522,4188,105,8,2,1,-0.375,0.234221 } ); +cells.push_back( {20904512,4169,105,9,1,1,-0.425,0.184658 } ); +cells.push_back( {20904522,4189,105,9,2,1,-0.425,0.234221 } ); +cells.push_back( {21004512,4170,105,10,1,1,-0.475,0.184658 } ); +cells.push_back( {21004522,4190,105,10,2,1,-0.475,0.234221 } ); +cells.push_back( {21104512,4171,105,11,1,1,-0.525,0.184658 } ); +cells.push_back( {21104522,4191,105,11,2,1,-0.525,0.234221 } ); +cells.push_back( {21204512,4172,105,12,1,1,-0.575,0.184658 } ); +cells.push_back( {21204522,4192,105,12,2,1,-0.575,0.234221 } ); +cells.push_back( {21304512,4173,105,13,1,1,-0.625,0.184658 } ); +cells.push_back( {21304522,4193,105,13,2,1,-0.625,0.234221 } ); +cells.push_back( {21404512,4174,105,14,1,1,-0.675,0.184658 } ); +cells.push_back( {21404522,4194,105,14,2,1,-0.675,0.234221 } ); +cells.push_back( {21504512,4175,105,15,1,1,-0.725,0.184658 } ); +cells.push_back( {21504522,4195,105,15,2,1,-0.725,0.234221 } ); +cells.push_back( {21604512,4176,105,16,1,1,-0.775,0.184658 } ); +cells.push_back( {21604522,4196,105,16,2,1,-0.775,0.234221 } ); +cells.push_back( {21704512,4177,105,17,1,1,-0.825,0.184658 } ); +cells.push_back( {21704522,4197,105,17,2,1,-0.825,0.234221 } ); +cells.push_back( {21804512,4178,105,18,1,1,-0.875,0.184658 } ); +cells.push_back( {21804522,4198,105,18,2,1,-0.875,0.234221 } ); +cells.push_back( {21904512,4179,105,19,1,1,-0.925,0.184658 } ); +cells.push_back( {21904522,4199,105,19,2,1,-0.925,0.234221 } ); +cells.push_back( {22004512,4180,105,20,1,1,-0.967,0.184658 } ); +cells.push_back( {22004522,4200,105,20,2,1,-0.967,0.234221 } ); +cells.push_back( {20104611,4201,106,1,1,2,-0.02675,0.289378 } ); +cells.push_back( {20104621,4221,106,1,2,2,-0.02675,0.338941 } ); +cells.push_back( {20204611,4202,106,2,1,2,-0.075,0.289378 } ); +cells.push_back( {20204621,4222,106,2,2,2,-0.075,0.338941 } ); +cells.push_back( {20304611,4203,106,3,1,2,-0.125,0.289378 } ); +cells.push_back( {20304621,4223,106,3,2,2,-0.125,0.338941 } ); +cells.push_back( {20404611,4204,106,4,1,2,-0.175,0.289378 } ); +cells.push_back( {20404621,4224,106,4,2,2,-0.175,0.338941 } ); +cells.push_back( {20504611,4205,106,5,1,2,-0.225,0.289378 } ); +cells.push_back( {20504621,4225,106,5,2,2,-0.225,0.338941 } ); +cells.push_back( {20604611,4206,106,6,1,2,-0.275,0.289378 } ); +cells.push_back( {20604621,4226,106,6,2,2,-0.275,0.338941 } ); +cells.push_back( {20704611,4207,106,7,1,2,-0.325,0.289378 } ); +cells.push_back( {20704621,4227,106,7,2,2,-0.325,0.338941 } ); +cells.push_back( {20804611,4208,106,8,1,2,-0.375,0.289378 } ); +cells.push_back( {20804621,4228,106,8,2,2,-0.375,0.338941 } ); +cells.push_back( {20904611,4209,106,9,1,2,-0.425,0.289378 } ); +cells.push_back( {20904621,4229,106,9,2,2,-0.425,0.338941 } ); +cells.push_back( {21004611,4210,106,10,1,2,-0.475,0.289378 } ); +cells.push_back( {21004621,4230,106,10,2,2,-0.475,0.338941 } ); +cells.push_back( {21104611,4211,106,11,1,2,-0.525,0.289378 } ); +cells.push_back( {21104621,4231,106,11,2,2,-0.525,0.338941 } ); +cells.push_back( {21204611,4212,106,12,1,2,-0.575,0.289378 } ); +cells.push_back( {21204621,4232,106,12,2,2,-0.575,0.338941 } ); +cells.push_back( {21304611,4213,106,13,1,2,-0.625,0.289378 } ); +cells.push_back( {21304621,4233,106,13,2,2,-0.625,0.338941 } ); +cells.push_back( {21404611,4214,106,14,1,2,-0.675,0.289378 } ); +cells.push_back( {21404621,4234,106,14,2,2,-0.675,0.338941 } ); +cells.push_back( {21504611,4215,106,15,1,2,-0.725,0.289378 } ); +cells.push_back( {21504621,4235,106,15,2,2,-0.725,0.338941 } ); +cells.push_back( {21604611,4216,106,16,1,2,-0.775,0.289378 } ); +cells.push_back( {21604621,4236,106,16,2,2,-0.775,0.338941 } ); +cells.push_back( {21704611,4217,106,17,1,2,-0.825,0.289378 } ); +cells.push_back( {21704621,4237,106,17,2,2,-0.825,0.338941 } ); +cells.push_back( {21804611,4218,106,18,1,2,-0.875,0.289378 } ); +cells.push_back( {21804621,4238,106,18,2,2,-0.875,0.338941 } ); +cells.push_back( {21904611,4219,106,19,1,2,-0.925,0.289378 } ); +cells.push_back( {21904621,4239,106,19,2,2,-0.925,0.338941 } ); +cells.push_back( {22004611,4220,106,20,1,2,-0.967,0.289378 } ); +cells.push_back( {22004621,4240,106,20,2,2,-0.967,0.338941 } ); +cells.push_back( {20104612,4201,106,1,1,1,-0.02675,0.289378 } ); +cells.push_back( {20104622,4221,106,1,2,1,-0.02675,0.338941 } ); +cells.push_back( {20204612,4202,106,2,1,1,-0.075,0.289378 } ); +cells.push_back( {20204622,4222,106,2,2,1,-0.075,0.338941 } ); +cells.push_back( {20304612,4203,106,3,1,1,-0.125,0.289378 } ); +cells.push_back( {20304622,4223,106,3,2,1,-0.125,0.338941 } ); +cells.push_back( {20404612,4204,106,4,1,1,-0.175,0.289378 } ); +cells.push_back( {20404622,4224,106,4,2,1,-0.175,0.338941 } ); +cells.push_back( {20504612,4205,106,5,1,1,-0.225,0.289378 } ); +cells.push_back( {20504622,4225,106,5,2,1,-0.225,0.338941 } ); +cells.push_back( {20604612,4206,106,6,1,1,-0.275,0.289378 } ); +cells.push_back( {20604622,4226,106,6,2,1,-0.275,0.338941 } ); +cells.push_back( {20704612,4207,106,7,1,1,-0.325,0.289378 } ); +cells.push_back( {20704622,4227,106,7,2,1,-0.325,0.338941 } ); +cells.push_back( {20804612,4208,106,8,1,1,-0.375,0.289378 } ); +cells.push_back( {20804622,4228,106,8,2,1,-0.375,0.338941 } ); +cells.push_back( {20904612,4209,106,9,1,1,-0.425,0.289378 } ); +cells.push_back( {20904622,4229,106,9,2,1,-0.425,0.338941 } ); +cells.push_back( {21004612,4210,106,10,1,1,-0.475,0.289378 } ); +cells.push_back( {21004622,4230,106,10,2,1,-0.475,0.338941 } ); +cells.push_back( {21104612,4211,106,11,1,1,-0.525,0.289378 } ); +cells.push_back( {21104622,4231,106,11,2,1,-0.525,0.338941 } ); +cells.push_back( {21204612,4212,106,12,1,1,-0.575,0.289378 } ); +cells.push_back( {21204622,4232,106,12,2,1,-0.575,0.338941 } ); +cells.push_back( {21304612,4213,106,13,1,1,-0.625,0.289378 } ); +cells.push_back( {21304622,4233,106,13,2,1,-0.625,0.338941 } ); +cells.push_back( {21404612,4214,106,14,1,1,-0.675,0.289378 } ); +cells.push_back( {21404622,4234,106,14,2,1,-0.675,0.338941 } ); +cells.push_back( {21504612,4215,106,15,1,1,-0.725,0.289378 } ); +cells.push_back( {21504622,4235,106,15,2,1,-0.725,0.338941 } ); +cells.push_back( {21604612,4216,106,16,1,1,-0.775,0.289378 } ); +cells.push_back( {21604622,4236,106,16,2,1,-0.775,0.338941 } ); +cells.push_back( {21704612,4217,106,17,1,1,-0.825,0.289378 } ); +cells.push_back( {21704622,4237,106,17,2,1,-0.825,0.338941 } ); +cells.push_back( {21804612,4218,106,18,1,1,-0.875,0.289378 } ); +cells.push_back( {21804622,4238,106,18,2,1,-0.875,0.338941 } ); +cells.push_back( {21904612,4219,106,19,1,1,-0.925,0.289378 } ); +cells.push_back( {21904622,4239,106,19,2,1,-0.925,0.338941 } ); +cells.push_back( {22004612,4220,106,20,1,1,-0.967,0.289378 } ); +cells.push_back( {22004622,4240,106,20,2,1,-0.967,0.338941 } ); +cells.push_back( {20104711,4241,107,1,1,2,-0.02675,0.394098 } ); +cells.push_back( {20104721,4261,107,1,2,2,-0.02675,0.443661 } ); +cells.push_back( {20204711,4242,107,2,1,2,-0.075,0.394098 } ); +cells.push_back( {20204721,4262,107,2,2,2,-0.075,0.443661 } ); +cells.push_back( {20304711,4243,107,3,1,2,-0.125,0.394098 } ); +cells.push_back( {20304721,4263,107,3,2,2,-0.125,0.443661 } ); +cells.push_back( {20404711,4244,107,4,1,2,-0.175,0.394098 } ); +cells.push_back( {20404721,4264,107,4,2,2,-0.175,0.443661 } ); +cells.push_back( {20504711,4245,107,5,1,2,-0.225,0.394098 } ); +cells.push_back( {20504721,4265,107,5,2,2,-0.225,0.443661 } ); +cells.push_back( {20604711,4246,107,6,1,2,-0.275,0.394098 } ); +cells.push_back( {20604721,4266,107,6,2,2,-0.275,0.443661 } ); +cells.push_back( {20704711,4247,107,7,1,2,-0.325,0.394098 } ); +cells.push_back( {20704721,4267,107,7,2,2,-0.325,0.443661 } ); +cells.push_back( {20804711,4248,107,8,1,2,-0.375,0.394098 } ); +cells.push_back( {20804721,4268,107,8,2,2,-0.375,0.443661 } ); +cells.push_back( {20904711,4249,107,9,1,2,-0.425,0.394098 } ); +cells.push_back( {20904721,4269,107,9,2,2,-0.425,0.443661 } ); +cells.push_back( {21004711,4250,107,10,1,2,-0.475,0.394098 } ); +cells.push_back( {21004721,4270,107,10,2,2,-0.475,0.443661 } ); +cells.push_back( {21104711,4251,107,11,1,2,-0.525,0.394098 } ); +cells.push_back( {21104721,4271,107,11,2,2,-0.525,0.443661 } ); +cells.push_back( {21204711,4252,107,12,1,2,-0.575,0.394098 } ); +cells.push_back( {21204721,4272,107,12,2,2,-0.575,0.443661 } ); +cells.push_back( {21304711,4253,107,13,1,2,-0.625,0.394098 } ); +cells.push_back( {21304721,4273,107,13,2,2,-0.625,0.443661 } ); +cells.push_back( {21404711,4254,107,14,1,2,-0.675,0.394098 } ); +cells.push_back( {21404721,4274,107,14,2,2,-0.675,0.443661 } ); +cells.push_back( {21504711,4255,107,15,1,2,-0.725,0.394098 } ); +cells.push_back( {21504721,4275,107,15,2,2,-0.725,0.443661 } ); +cells.push_back( {21604711,4256,107,16,1,2,-0.775,0.394098 } ); +cells.push_back( {21604721,4276,107,16,2,2,-0.775,0.443661 } ); +cells.push_back( {21704711,4257,107,17,1,2,-0.825,0.394098 } ); +cells.push_back( {21704721,4277,107,17,2,2,-0.825,0.443661 } ); +cells.push_back( {21804711,4258,107,18,1,2,-0.875,0.394098 } ); +cells.push_back( {21804721,4278,107,18,2,2,-0.875,0.443661 } ); +cells.push_back( {21904711,4259,107,19,1,2,-0.925,0.394098 } ); +cells.push_back( {21904721,4279,107,19,2,2,-0.925,0.443661 } ); +cells.push_back( {22004711,4260,107,20,1,2,-0.967,0.394098 } ); +cells.push_back( {22004721,4280,107,20,2,2,-0.967,0.443661 } ); +cells.push_back( {20104712,4241,107,1,1,1,-0.02675,0.394098 } ); +cells.push_back( {20104722,4261,107,1,2,1,-0.02675,0.443661 } ); +cells.push_back( {20204712,4242,107,2,1,1,-0.075,0.394098 } ); +cells.push_back( {20204722,4262,107,2,2,1,-0.075,0.443661 } ); +cells.push_back( {20304712,4243,107,3,1,1,-0.125,0.394098 } ); +cells.push_back( {20304722,4263,107,3,2,1,-0.125,0.443661 } ); +cells.push_back( {20404712,4244,107,4,1,1,-0.175,0.394098 } ); +cells.push_back( {20404722,4264,107,4,2,1,-0.175,0.443661 } ); +cells.push_back( {20504712,4245,107,5,1,1,-0.225,0.394098 } ); +cells.push_back( {20504722,4265,107,5,2,1,-0.225,0.443661 } ); +cells.push_back( {20604712,4246,107,6,1,1,-0.275,0.394098 } ); +cells.push_back( {20604722,4266,107,6,2,1,-0.275,0.443661 } ); +cells.push_back( {20704712,4247,107,7,1,1,-0.325,0.394098 } ); +cells.push_back( {20704722,4267,107,7,2,1,-0.325,0.443661 } ); +cells.push_back( {20804712,4248,107,8,1,1,-0.375,0.394098 } ); +cells.push_back( {20804722,4268,107,8,2,1,-0.375,0.443661 } ); +cells.push_back( {20904712,4249,107,9,1,1,-0.425,0.394098 } ); +cells.push_back( {20904722,4269,107,9,2,1,-0.425,0.443661 } ); +cells.push_back( {21004712,4250,107,10,1,1,-0.475,0.394098 } ); +cells.push_back( {21004722,4270,107,10,2,1,-0.475,0.443661 } ); +cells.push_back( {21104712,4251,107,11,1,1,-0.525,0.394098 } ); +cells.push_back( {21104722,4271,107,11,2,1,-0.525,0.443661 } ); +cells.push_back( {21204712,4252,107,12,1,1,-0.575,0.394098 } ); +cells.push_back( {21204722,4272,107,12,2,1,-0.575,0.443661 } ); +cells.push_back( {21304712,4253,107,13,1,1,-0.625,0.394098 } ); +cells.push_back( {21304722,4273,107,13,2,1,-0.625,0.443661 } ); +cells.push_back( {21404712,4254,107,14,1,1,-0.675,0.394098 } ); +cells.push_back( {21404722,4274,107,14,2,1,-0.675,0.443661 } ); +cells.push_back( {21504712,4255,107,15,1,1,-0.725,0.394098 } ); +cells.push_back( {21504722,4275,107,15,2,1,-0.725,0.443661 } ); +cells.push_back( {21604712,4256,107,16,1,1,-0.775,0.394098 } ); +cells.push_back( {21604722,4276,107,16,2,1,-0.775,0.443661 } ); +cells.push_back( {21704712,4257,107,17,1,1,-0.825,0.394098 } ); +cells.push_back( {21704722,4277,107,17,2,1,-0.825,0.443661 } ); +cells.push_back( {21804712,4258,107,18,1,1,-0.875,0.394098 } ); +cells.push_back( {21804722,4278,107,18,2,1,-0.875,0.443661 } ); +cells.push_back( {21904712,4259,107,19,1,1,-0.925,0.394098 } ); +cells.push_back( {21904722,4279,107,19,2,1,-0.925,0.443661 } ); +cells.push_back( {22004712,4260,107,20,1,1,-0.967,0.394098 } ); +cells.push_back( {22004722,4280,107,20,2,1,-0.967,0.443661 } ); +cells.push_back( {20104811,4281,108,1,1,2,-0.02675,0.498818 } ); +cells.push_back( {20104821,4301,108,1,2,2,-0.02675,0.54838 } ); +cells.push_back( {20204811,4282,108,2,1,2,-0.075,0.498818 } ); +cells.push_back( {20204821,4302,108,2,2,2,-0.075,0.54838 } ); +cells.push_back( {20304811,4283,108,3,1,2,-0.125,0.498818 } ); +cells.push_back( {20304821,4303,108,3,2,2,-0.125,0.54838 } ); +cells.push_back( {20404811,4284,108,4,1,2,-0.175,0.498818 } ); +cells.push_back( {20404821,4304,108,4,2,2,-0.175,0.54838 } ); +cells.push_back( {20504811,4285,108,5,1,2,-0.225,0.498818 } ); +cells.push_back( {20504821,4305,108,5,2,2,-0.225,0.54838 } ); +cells.push_back( {20604811,4286,108,6,1,2,-0.275,0.498818 } ); +cells.push_back( {20604821,4306,108,6,2,2,-0.275,0.54838 } ); +cells.push_back( {20704811,4287,108,7,1,2,-0.325,0.498818 } ); +cells.push_back( {20704821,4307,108,7,2,2,-0.325,0.54838 } ); +cells.push_back( {20804811,4288,108,8,1,2,-0.375,0.498818 } ); +cells.push_back( {20804821,4308,108,8,2,2,-0.375,0.54838 } ); +cells.push_back( {20904811,4289,108,9,1,2,-0.425,0.498818 } ); +cells.push_back( {20904821,4309,108,9,2,2,-0.425,0.54838 } ); +cells.push_back( {21004811,4290,108,10,1,2,-0.475,0.498818 } ); +cells.push_back( {21004821,4310,108,10,2,2,-0.475,0.54838 } ); +cells.push_back( {21104811,4291,108,11,1,2,-0.525,0.498818 } ); +cells.push_back( {21104821,4311,108,11,2,2,-0.525,0.54838 } ); +cells.push_back( {21204811,4292,108,12,1,2,-0.575,0.498818 } ); +cells.push_back( {21204821,4312,108,12,2,2,-0.575,0.54838 } ); +cells.push_back( {21304811,4293,108,13,1,2,-0.625,0.498818 } ); +cells.push_back( {21304821,4313,108,13,2,2,-0.625,0.54838 } ); +cells.push_back( {21404811,4294,108,14,1,2,-0.675,0.498818 } ); +cells.push_back( {21404821,4314,108,14,2,2,-0.675,0.54838 } ); +cells.push_back( {21504811,4295,108,15,1,2,-0.725,0.498818 } ); +cells.push_back( {21504821,4315,108,15,2,2,-0.725,0.54838 } ); +cells.push_back( {21604811,4296,108,16,1,2,-0.775,0.498818 } ); +cells.push_back( {21604821,4316,108,16,2,2,-0.775,0.54838 } ); +cells.push_back( {21704811,4297,108,17,1,2,-0.825,0.498818 } ); +cells.push_back( {21704821,4317,108,17,2,2,-0.825,0.54838 } ); +cells.push_back( {21804811,4298,108,18,1,2,-0.875,0.498818 } ); +cells.push_back( {21804821,4318,108,18,2,2,-0.875,0.54838 } ); +cells.push_back( {21904811,4299,108,19,1,2,-0.925,0.498818 } ); +cells.push_back( {21904821,4319,108,19,2,2,-0.925,0.54838 } ); +cells.push_back( {22004811,4300,108,20,1,2,-0.967,0.498818 } ); +cells.push_back( {22004821,4320,108,20,2,2,-0.967,0.54838 } ); +cells.push_back( {20104812,4281,108,1,1,1,-0.02675,0.498818 } ); +cells.push_back( {20104822,4301,108,1,2,1,-0.02675,0.54838 } ); +cells.push_back( {20204812,4282,108,2,1,1,-0.075,0.498818 } ); +cells.push_back( {20204822,4302,108,2,2,1,-0.075,0.54838 } ); +cells.push_back( {20304812,4283,108,3,1,1,-0.125,0.498818 } ); +cells.push_back( {20304822,4303,108,3,2,1,-0.125,0.54838 } ); +cells.push_back( {20404812,4284,108,4,1,1,-0.175,0.498818 } ); +cells.push_back( {20404822,4304,108,4,2,1,-0.175,0.54838 } ); +cells.push_back( {20504812,4285,108,5,1,1,-0.225,0.498818 } ); +cells.push_back( {20504822,4305,108,5,2,1,-0.225,0.54838 } ); +cells.push_back( {20604812,4286,108,6,1,1,-0.275,0.498818 } ); +cells.push_back( {20604822,4306,108,6,2,1,-0.275,0.54838 } ); +cells.push_back( {20704812,4287,108,7,1,1,-0.325,0.498818 } ); +cells.push_back( {20704822,4307,108,7,2,1,-0.325,0.54838 } ); +cells.push_back( {20804812,4288,108,8,1,1,-0.375,0.498818 } ); +cells.push_back( {20804822,4308,108,8,2,1,-0.375,0.54838 } ); +cells.push_back( {20904812,4289,108,9,1,1,-0.425,0.498818 } ); +cells.push_back( {20904822,4309,108,9,2,1,-0.425,0.54838 } ); +cells.push_back( {21004812,4290,108,10,1,1,-0.475,0.498818 } ); +cells.push_back( {21004822,4310,108,10,2,1,-0.475,0.54838 } ); +cells.push_back( {21104812,4291,108,11,1,1,-0.525,0.498818 } ); +cells.push_back( {21104822,4311,108,11,2,1,-0.525,0.54838 } ); +cells.push_back( {21204812,4292,108,12,1,1,-0.575,0.498818 } ); +cells.push_back( {21204822,4312,108,12,2,1,-0.575,0.54838 } ); +cells.push_back( {21304812,4293,108,13,1,1,-0.625,0.498818 } ); +cells.push_back( {21304822,4313,108,13,2,1,-0.625,0.54838 } ); +cells.push_back( {21404812,4294,108,14,1,1,-0.675,0.498818 } ); +cells.push_back( {21404822,4314,108,14,2,1,-0.675,0.54838 } ); +cells.push_back( {21504812,4295,108,15,1,1,-0.725,0.498818 } ); +cells.push_back( {21504822,4315,108,15,2,1,-0.725,0.54838 } ); +cells.push_back( {21604812,4296,108,16,1,1,-0.775,0.498818 } ); +cells.push_back( {21604822,4316,108,16,2,1,-0.775,0.54838 } ); +cells.push_back( {21704812,4297,108,17,1,1,-0.825,0.498818 } ); +cells.push_back( {21704822,4317,108,17,2,1,-0.825,0.54838 } ); +cells.push_back( {21804812,4298,108,18,1,1,-0.875,0.498818 } ); +cells.push_back( {21804822,4318,108,18,2,1,-0.875,0.54838 } ); +cells.push_back( {21904812,4299,108,19,1,1,-0.925,0.498818 } ); +cells.push_back( {21904822,4319,108,19,2,1,-0.925,0.54838 } ); +cells.push_back( {22004812,4300,108,20,1,1,-0.967,0.498818 } ); +cells.push_back( {22004822,4320,108,20,2,1,-0.967,0.54838 } ); +cells.push_back( {20104911,4321,109,1,1,2,-0.02675,0.603537 } ); +cells.push_back( {20104921,4341,109,1,2,2,-0.02675,0.6531 } ); +cells.push_back( {20204911,4322,109,2,1,2,-0.075,0.603537 } ); +cells.push_back( {20204921,4342,109,2,2,2,-0.075,0.6531 } ); +cells.push_back( {20304911,4323,109,3,1,2,-0.125,0.603537 } ); +cells.push_back( {20304921,4343,109,3,2,2,-0.125,0.6531 } ); +cells.push_back( {20404911,4324,109,4,1,2,-0.175,0.603537 } ); +cells.push_back( {20404921,4344,109,4,2,2,-0.175,0.6531 } ); +cells.push_back( {20504911,4325,109,5,1,2,-0.225,0.603537 } ); +cells.push_back( {20504921,4345,109,5,2,2,-0.225,0.6531 } ); +cells.push_back( {20604911,4326,109,6,1,2,-0.275,0.603537 } ); +cells.push_back( {20604921,4346,109,6,2,2,-0.275,0.6531 } ); +cells.push_back( {20704911,4327,109,7,1,2,-0.325,0.603537 } ); +cells.push_back( {20704921,4347,109,7,2,2,-0.325,0.6531 } ); +cells.push_back( {20804911,4328,109,8,1,2,-0.375,0.603537 } ); +cells.push_back( {20804921,4348,109,8,2,2,-0.375,0.6531 } ); +cells.push_back( {20904911,4329,109,9,1,2,-0.425,0.603537 } ); +cells.push_back( {20904921,4349,109,9,2,2,-0.425,0.6531 } ); +cells.push_back( {21004911,4330,109,10,1,2,-0.475,0.603537 } ); +cells.push_back( {21004921,4350,109,10,2,2,-0.475,0.6531 } ); +cells.push_back( {21104911,4331,109,11,1,2,-0.525,0.603537 } ); +cells.push_back( {21104921,4351,109,11,2,2,-0.525,0.6531 } ); +cells.push_back( {21204911,4332,109,12,1,2,-0.575,0.603537 } ); +cells.push_back( {21204921,4352,109,12,2,2,-0.575,0.6531 } ); +cells.push_back( {21304911,4333,109,13,1,2,-0.625,0.603537 } ); +cells.push_back( {21304921,4353,109,13,2,2,-0.625,0.6531 } ); +cells.push_back( {21404911,4334,109,14,1,2,-0.675,0.603537 } ); +cells.push_back( {21404921,4354,109,14,2,2,-0.675,0.6531 } ); +cells.push_back( {21504911,4335,109,15,1,2,-0.725,0.603537 } ); +cells.push_back( {21504921,4355,109,15,2,2,-0.725,0.6531 } ); +cells.push_back( {21604911,4336,109,16,1,2,-0.775,0.603537 } ); +cells.push_back( {21604921,4356,109,16,2,2,-0.775,0.6531 } ); +cells.push_back( {21704911,4337,109,17,1,2,-0.825,0.603537 } ); +cells.push_back( {21704921,4357,109,17,2,2,-0.825,0.6531 } ); +cells.push_back( {21804911,4338,109,18,1,2,-0.875,0.603537 } ); +cells.push_back( {21804921,4358,109,18,2,2,-0.875,0.6531 } ); +cells.push_back( {21904911,4339,109,19,1,2,-0.925,0.603537 } ); +cells.push_back( {21904921,4359,109,19,2,2,-0.925,0.6531 } ); +cells.push_back( {22004911,4340,109,20,1,2,-0.967,0.603537 } ); +cells.push_back( {22004921,4360,109,20,2,2,-0.967,0.6531 } ); +cells.push_back( {20104912,4321,109,1,1,1,-0.02675,0.603537 } ); +cells.push_back( {20104922,4341,109,1,2,1,-0.02675,0.6531 } ); +cells.push_back( {20204912,4322,109,2,1,1,-0.075,0.603537 } ); +cells.push_back( {20204922,4342,109,2,2,1,-0.075,0.6531 } ); +cells.push_back( {20304912,4323,109,3,1,1,-0.125,0.603537 } ); +cells.push_back( {20304922,4343,109,3,2,1,-0.125,0.6531 } ); +cells.push_back( {20404912,4324,109,4,1,1,-0.175,0.603537 } ); +cells.push_back( {20404922,4344,109,4,2,1,-0.175,0.6531 } ); +cells.push_back( {20504912,4325,109,5,1,1,-0.225,0.603537 } ); +cells.push_back( {20504922,4345,109,5,2,1,-0.225,0.6531 } ); +cells.push_back( {20604912,4326,109,6,1,1,-0.275,0.603537 } ); +cells.push_back( {20604922,4346,109,6,2,1,-0.275,0.6531 } ); +cells.push_back( {20704912,4327,109,7,1,1,-0.325,0.603537 } ); +cells.push_back( {20704922,4347,109,7,2,1,-0.325,0.6531 } ); +cells.push_back( {20804912,4328,109,8,1,1,-0.375,0.603537 } ); +cells.push_back( {20804922,4348,109,8,2,1,-0.375,0.6531 } ); +cells.push_back( {20904912,4329,109,9,1,1,-0.425,0.603537 } ); +cells.push_back( {20904922,4349,109,9,2,1,-0.425,0.6531 } ); +cells.push_back( {21004912,4330,109,10,1,1,-0.475,0.603537 } ); +cells.push_back( {21004922,4350,109,10,2,1,-0.475,0.6531 } ); +cells.push_back( {21104912,4331,109,11,1,1,-0.525,0.603537 } ); +cells.push_back( {21104922,4351,109,11,2,1,-0.525,0.6531 } ); +cells.push_back( {21204912,4332,109,12,1,1,-0.575,0.603537 } ); +cells.push_back( {21204922,4352,109,12,2,1,-0.575,0.6531 } ); +cells.push_back( {21304912,4333,109,13,1,1,-0.625,0.603537 } ); +cells.push_back( {21304922,4353,109,13,2,1,-0.625,0.6531 } ); +cells.push_back( {21404912,4334,109,14,1,1,-0.675,0.603537 } ); +cells.push_back( {21404922,4354,109,14,2,1,-0.675,0.6531 } ); +cells.push_back( {21504912,4335,109,15,1,1,-0.725,0.603537 } ); +cells.push_back( {21504922,4355,109,15,2,1,-0.725,0.6531 } ); +cells.push_back( {21604912,4336,109,16,1,1,-0.775,0.603537 } ); +cells.push_back( {21604922,4356,109,16,2,1,-0.775,0.6531 } ); +cells.push_back( {21704912,4337,109,17,1,1,-0.825,0.603537 } ); +cells.push_back( {21704922,4357,109,17,2,1,-0.825,0.6531 } ); +cells.push_back( {21804912,4338,109,18,1,1,-0.875,0.603537 } ); +cells.push_back( {21804922,4358,109,18,2,1,-0.875,0.6531 } ); +cells.push_back( {21904912,4339,109,19,1,1,-0.925,0.603537 } ); +cells.push_back( {21904922,4359,109,19,2,1,-0.925,0.6531 } ); +cells.push_back( {22004912,4340,109,20,1,1,-0.967,0.603537 } ); +cells.push_back( {22004922,4360,109,20,2,1,-0.967,0.6531 } ); +cells.push_back( {20105011,4361,110,1,1,2,-0.02675,0.708257 } ); +cells.push_back( {20105021,4381,110,1,2,2,-0.02675,0.75782 } ); +cells.push_back( {20205011,4362,110,2,1,2,-0.075,0.708257 } ); +cells.push_back( {20205021,4382,110,2,2,2,-0.075,0.75782 } ); +cells.push_back( {20305011,4363,110,3,1,2,-0.125,0.708257 } ); +cells.push_back( {20305021,4383,110,3,2,2,-0.125,0.75782 } ); +cells.push_back( {20405011,4364,110,4,1,2,-0.175,0.708257 } ); +cells.push_back( {20405021,4384,110,4,2,2,-0.175,0.75782 } ); +cells.push_back( {20505011,4365,110,5,1,2,-0.225,0.708257 } ); +cells.push_back( {20505021,4385,110,5,2,2,-0.225,0.75782 } ); +cells.push_back( {20605011,4366,110,6,1,2,-0.275,0.708257 } ); +cells.push_back( {20605021,4386,110,6,2,2,-0.275,0.75782 } ); +cells.push_back( {20705011,4367,110,7,1,2,-0.325,0.708257 } ); +cells.push_back( {20705021,4387,110,7,2,2,-0.325,0.75782 } ); +cells.push_back( {20805011,4368,110,8,1,2,-0.375,0.708257 } ); +cells.push_back( {20805021,4388,110,8,2,2,-0.375,0.75782 } ); +cells.push_back( {20905011,4369,110,9,1,2,-0.425,0.708257 } ); +cells.push_back( {20905021,4389,110,9,2,2,-0.425,0.75782 } ); +cells.push_back( {21005011,4370,110,10,1,2,-0.475,0.708257 } ); +cells.push_back( {21005021,4390,110,10,2,2,-0.475,0.75782 } ); +cells.push_back( {21105011,4371,110,11,1,2,-0.525,0.708257 } ); +cells.push_back( {21105021,4391,110,11,2,2,-0.525,0.75782 } ); +cells.push_back( {21205011,4372,110,12,1,2,-0.575,0.708257 } ); +cells.push_back( {21205021,4392,110,12,2,2,-0.575,0.75782 } ); +cells.push_back( {21305011,4373,110,13,1,2,-0.625,0.708257 } ); +cells.push_back( {21305021,4393,110,13,2,2,-0.625,0.75782 } ); +cells.push_back( {21405011,4374,110,14,1,2,-0.675,0.708257 } ); +cells.push_back( {21405021,4394,110,14,2,2,-0.675,0.75782 } ); +cells.push_back( {21505011,4375,110,15,1,2,-0.725,0.708257 } ); +cells.push_back( {21505021,4395,110,15,2,2,-0.725,0.75782 } ); +cells.push_back( {21605011,4376,110,16,1,2,-0.775,0.708257 } ); +cells.push_back( {21605021,4396,110,16,2,2,-0.775,0.75782 } ); +cells.push_back( {21705011,4377,110,17,1,2,-0.825,0.708257 } ); +cells.push_back( {21705021,4397,110,17,2,2,-0.825,0.75782 } ); +cells.push_back( {21805011,4378,110,18,1,2,-0.875,0.708257 } ); +cells.push_back( {21805021,4398,110,18,2,2,-0.875,0.75782 } ); +cells.push_back( {21905011,4379,110,19,1,2,-0.925,0.708257 } ); +cells.push_back( {21905021,4399,110,19,2,2,-0.925,0.75782 } ); +cells.push_back( {22005011,4380,110,20,1,2,-0.967,0.708257 } ); +cells.push_back( {22005021,4400,110,20,2,2,-0.967,0.75782 } ); +cells.push_back( {20105012,4361,110,1,1,1,-0.02675,0.708257 } ); +cells.push_back( {20105022,4381,110,1,2,1,-0.02675,0.75782 } ); +cells.push_back( {20205012,4362,110,2,1,1,-0.075,0.708257 } ); +cells.push_back( {20205022,4382,110,2,2,1,-0.075,0.75782 } ); +cells.push_back( {20305012,4363,110,3,1,1,-0.125,0.708257 } ); +cells.push_back( {20305022,4383,110,3,2,1,-0.125,0.75782 } ); +cells.push_back( {20405012,4364,110,4,1,1,-0.175,0.708257 } ); +cells.push_back( {20405022,4384,110,4,2,1,-0.175,0.75782 } ); +cells.push_back( {20505012,4365,110,5,1,1,-0.225,0.708257 } ); +cells.push_back( {20505022,4385,110,5,2,1,-0.225,0.75782 } ); +cells.push_back( {20605012,4366,110,6,1,1,-0.275,0.708257 } ); +cells.push_back( {20605022,4386,110,6,2,1,-0.275,0.75782 } ); +cells.push_back( {20705012,4367,110,7,1,1,-0.325,0.708257 } ); +cells.push_back( {20705022,4387,110,7,2,1,-0.325,0.75782 } ); +cells.push_back( {20805012,4368,110,8,1,1,-0.375,0.708257 } ); +cells.push_back( {20805022,4388,110,8,2,1,-0.375,0.75782 } ); +cells.push_back( {20905012,4369,110,9,1,1,-0.425,0.708257 } ); +cells.push_back( {20905022,4389,110,9,2,1,-0.425,0.75782 } ); +cells.push_back( {21005012,4370,110,10,1,1,-0.475,0.708257 } ); +cells.push_back( {21005022,4390,110,10,2,1,-0.475,0.75782 } ); +cells.push_back( {21105012,4371,110,11,1,1,-0.525,0.708257 } ); +cells.push_back( {21105022,4391,110,11,2,1,-0.525,0.75782 } ); +cells.push_back( {21205012,4372,110,12,1,1,-0.575,0.708257 } ); +cells.push_back( {21205022,4392,110,12,2,1,-0.575,0.75782 } ); +cells.push_back( {21305012,4373,110,13,1,1,-0.625,0.708257 } ); +cells.push_back( {21305022,4393,110,13,2,1,-0.625,0.75782 } ); +cells.push_back( {21405012,4374,110,14,1,1,-0.675,0.708257 } ); +cells.push_back( {21405022,4394,110,14,2,1,-0.675,0.75782 } ); +cells.push_back( {21505012,4375,110,15,1,1,-0.725,0.708257 } ); +cells.push_back( {21505022,4395,110,15,2,1,-0.725,0.75782 } ); +cells.push_back( {21605012,4376,110,16,1,1,-0.775,0.708257 } ); +cells.push_back( {21605022,4396,110,16,2,1,-0.775,0.75782 } ); +cells.push_back( {21705012,4377,110,17,1,1,-0.825,0.708257 } ); +cells.push_back( {21705022,4397,110,17,2,1,-0.825,0.75782 } ); +cells.push_back( {21805012,4378,110,18,1,1,-0.875,0.708257 } ); +cells.push_back( {21805022,4398,110,18,2,1,-0.875,0.75782 } ); +cells.push_back( {21905012,4379,110,19,1,1,-0.925,0.708257 } ); +cells.push_back( {21905022,4399,110,19,2,1,-0.925,0.75782 } ); +cells.push_back( {22005012,4380,110,20,1,1,-0.967,0.708257 } ); +cells.push_back( {22005022,4400,110,20,2,1,-0.967,0.75782 } ); +cells.push_back( {20105111,4401,111,1,1,2,-0.02675,0.812977 } ); +cells.push_back( {20105121,4421,111,1,2,2,-0.02675,0.86254 } ); +cells.push_back( {20205111,4402,111,2,1,2,-0.075,0.812977 } ); +cells.push_back( {20205121,4422,111,2,2,2,-0.075,0.86254 } ); +cells.push_back( {20305111,4403,111,3,1,2,-0.125,0.812977 } ); +cells.push_back( {20305121,4423,111,3,2,2,-0.125,0.86254 } ); +cells.push_back( {20405111,4404,111,4,1,2,-0.175,0.812977 } ); +cells.push_back( {20405121,4424,111,4,2,2,-0.175,0.86254 } ); +cells.push_back( {20505111,4405,111,5,1,2,-0.225,0.812977 } ); +cells.push_back( {20505121,4425,111,5,2,2,-0.225,0.86254 } ); +cells.push_back( {20605111,4406,111,6,1,2,-0.275,0.812977 } ); +cells.push_back( {20605121,4426,111,6,2,2,-0.275,0.86254 } ); +cells.push_back( {20705111,4407,111,7,1,2,-0.325,0.812977 } ); +cells.push_back( {20705121,4427,111,7,2,2,-0.325,0.86254 } ); +cells.push_back( {20805111,4408,111,8,1,2,-0.375,0.812977 } ); +cells.push_back( {20805121,4428,111,8,2,2,-0.375,0.86254 } ); +cells.push_back( {20905111,4409,111,9,1,2,-0.425,0.812977 } ); +cells.push_back( {20905121,4429,111,9,2,2,-0.425,0.86254 } ); +cells.push_back( {21005111,4410,111,10,1,2,-0.475,0.812977 } ); +cells.push_back( {21005121,4430,111,10,2,2,-0.475,0.86254 } ); +cells.push_back( {21105111,4411,111,11,1,2,-0.525,0.812977 } ); +cells.push_back( {21105121,4431,111,11,2,2,-0.525,0.86254 } ); +cells.push_back( {21205111,4412,111,12,1,2,-0.575,0.812977 } ); +cells.push_back( {21205121,4432,111,12,2,2,-0.575,0.86254 } ); +cells.push_back( {21305111,4413,111,13,1,2,-0.625,0.812977 } ); +cells.push_back( {21305121,4433,111,13,2,2,-0.625,0.86254 } ); +cells.push_back( {21405111,4414,111,14,1,2,-0.675,0.812977 } ); +cells.push_back( {21405121,4434,111,14,2,2,-0.675,0.86254 } ); +cells.push_back( {21505111,4415,111,15,1,2,-0.725,0.812977 } ); +cells.push_back( {21505121,4435,111,15,2,2,-0.725,0.86254 } ); +cells.push_back( {21605111,4416,111,16,1,2,-0.775,0.812977 } ); +cells.push_back( {21605121,4436,111,16,2,2,-0.775,0.86254 } ); +cells.push_back( {21705111,4417,111,17,1,2,-0.825,0.812977 } ); +cells.push_back( {21705121,4437,111,17,2,2,-0.825,0.86254 } ); +cells.push_back( {21805111,4418,111,18,1,2,-0.875,0.812977 } ); +cells.push_back( {21805121,4438,111,18,2,2,-0.875,0.86254 } ); +cells.push_back( {21905111,4419,111,19,1,2,-0.925,0.812977 } ); +cells.push_back( {21905121,4439,111,19,2,2,-0.925,0.86254 } ); +cells.push_back( {22005111,4420,111,20,1,2,-0.967,0.812977 } ); +cells.push_back( {22005121,4440,111,20,2,2,-0.967,0.86254 } ); +cells.push_back( {20105112,4401,111,1,1,1,-0.02675,0.812977 } ); +cells.push_back( {20105122,4421,111,1,2,1,-0.02675,0.86254 } ); +cells.push_back( {20205112,4402,111,2,1,1,-0.075,0.812977 } ); +cells.push_back( {20205122,4422,111,2,2,1,-0.075,0.86254 } ); +cells.push_back( {20305112,4403,111,3,1,1,-0.125,0.812977 } ); +cells.push_back( {20305122,4423,111,3,2,1,-0.125,0.86254 } ); +cells.push_back( {20405112,4404,111,4,1,1,-0.175,0.812977 } ); +cells.push_back( {20405122,4424,111,4,2,1,-0.175,0.86254 } ); +cells.push_back( {20505112,4405,111,5,1,1,-0.225,0.812977 } ); +cells.push_back( {20505122,4425,111,5,2,1,-0.225,0.86254 } ); +cells.push_back( {20605112,4406,111,6,1,1,-0.275,0.812977 } ); +cells.push_back( {20605122,4426,111,6,2,1,-0.275,0.86254 } ); +cells.push_back( {20705112,4407,111,7,1,1,-0.325,0.812977 } ); +cells.push_back( {20705122,4427,111,7,2,1,-0.325,0.86254 } ); +cells.push_back( {20805112,4408,111,8,1,1,-0.375,0.812977 } ); +cells.push_back( {20805122,4428,111,8,2,1,-0.375,0.86254 } ); +cells.push_back( {20905112,4409,111,9,1,1,-0.425,0.812977 } ); +cells.push_back( {20905122,4429,111,9,2,1,-0.425,0.86254 } ); +cells.push_back( {21005112,4410,111,10,1,1,-0.475,0.812977 } ); +cells.push_back( {21005122,4430,111,10,2,1,-0.475,0.86254 } ); +cells.push_back( {21105112,4411,111,11,1,1,-0.525,0.812977 } ); +cells.push_back( {21105122,4431,111,11,2,1,-0.525,0.86254 } ); +cells.push_back( {21205112,4412,111,12,1,1,-0.575,0.812977 } ); +cells.push_back( {21205122,4432,111,12,2,1,-0.575,0.86254 } ); +cells.push_back( {21305112,4413,111,13,1,1,-0.625,0.812977 } ); +cells.push_back( {21305122,4433,111,13,2,1,-0.625,0.86254 } ); +cells.push_back( {21405112,4414,111,14,1,1,-0.675,0.812977 } ); +cells.push_back( {21405122,4434,111,14,2,1,-0.675,0.86254 } ); +cells.push_back( {21505112,4415,111,15,1,1,-0.725,0.812977 } ); +cells.push_back( {21505122,4435,111,15,2,1,-0.725,0.86254 } ); +cells.push_back( {21605112,4416,111,16,1,1,-0.775,0.812977 } ); +cells.push_back( {21605122,4436,111,16,2,1,-0.775,0.86254 } ); +cells.push_back( {21705112,4417,111,17,1,1,-0.825,0.812977 } ); +cells.push_back( {21705122,4437,111,17,2,1,-0.825,0.86254 } ); +cells.push_back( {21805112,4418,111,18,1,1,-0.875,0.812977 } ); +cells.push_back( {21805122,4438,111,18,2,1,-0.875,0.86254 } ); +cells.push_back( {21905112,4419,111,19,1,1,-0.925,0.812977 } ); +cells.push_back( {21905122,4439,111,19,2,1,-0.925,0.86254 } ); +cells.push_back( {22005112,4420,111,20,1,1,-0.967,0.812977 } ); +cells.push_back( {22005122,4440,111,20,2,1,-0.967,0.86254 } ); +cells.push_back( {20105211,4441,112,1,1,2,-0.02675,0.917697 } ); +cells.push_back( {20105221,4461,112,1,2,2,-0.02675,0.967259 } ); +cells.push_back( {20205211,4442,112,2,1,2,-0.075,0.917697 } ); +cells.push_back( {20205221,4462,112,2,2,2,-0.075,0.967259 } ); +cells.push_back( {20305211,4443,112,3,1,2,-0.125,0.917697 } ); +cells.push_back( {20305221,4463,112,3,2,2,-0.125,0.967259 } ); +cells.push_back( {20405211,4444,112,4,1,2,-0.175,0.917697 } ); +cells.push_back( {20405221,4464,112,4,2,2,-0.175,0.967259 } ); +cells.push_back( {20505211,4445,112,5,1,2,-0.225,0.917697 } ); +cells.push_back( {20505221,4465,112,5,2,2,-0.225,0.967259 } ); +cells.push_back( {20605211,4446,112,6,1,2,-0.275,0.917697 } ); +cells.push_back( {20605221,4466,112,6,2,2,-0.275,0.967259 } ); +cells.push_back( {20705211,4447,112,7,1,2,-0.325,0.917697 } ); +cells.push_back( {20705221,4467,112,7,2,2,-0.325,0.967259 } ); +cells.push_back( {20805211,4448,112,8,1,2,-0.375,0.917697 } ); +cells.push_back( {20805221,4468,112,8,2,2,-0.375,0.967259 } ); +cells.push_back( {20905211,4449,112,9,1,2,-0.425,0.917697 } ); +cells.push_back( {20905221,4469,112,9,2,2,-0.425,0.967259 } ); +cells.push_back( {21005211,4450,112,10,1,2,-0.475,0.917697 } ); +cells.push_back( {21005221,4470,112,10,2,2,-0.475,0.967259 } ); +cells.push_back( {21105211,4451,112,11,1,2,-0.525,0.917697 } ); +cells.push_back( {21105221,4471,112,11,2,2,-0.525,0.967259 } ); +cells.push_back( {21205211,4452,112,12,1,2,-0.575,0.917697 } ); +cells.push_back( {21205221,4472,112,12,2,2,-0.575,0.967259 } ); +cells.push_back( {21305211,4453,112,13,1,2,-0.625,0.917697 } ); +cells.push_back( {21305221,4473,112,13,2,2,-0.625,0.967259 } ); +cells.push_back( {21405211,4454,112,14,1,2,-0.675,0.917697 } ); +cells.push_back( {21405221,4474,112,14,2,2,-0.675,0.967259 } ); +cells.push_back( {21505211,4455,112,15,1,2,-0.725,0.917697 } ); +cells.push_back( {21505221,4475,112,15,2,2,-0.725,0.967259 } ); +cells.push_back( {21605211,4456,112,16,1,2,-0.775,0.917697 } ); +cells.push_back( {21605221,4476,112,16,2,2,-0.775,0.967259 } ); +cells.push_back( {21705211,4457,112,17,1,2,-0.825,0.917697 } ); +cells.push_back( {21705221,4477,112,17,2,2,-0.825,0.967259 } ); +cells.push_back( {21805211,4458,112,18,1,2,-0.875,0.917697 } ); +cells.push_back( {21805221,4478,112,18,2,2,-0.875,0.967259 } ); +cells.push_back( {21905211,4459,112,19,1,2,-0.925,0.917697 } ); +cells.push_back( {21905221,4479,112,19,2,2,-0.925,0.967259 } ); +cells.push_back( {22005211,4460,112,20,1,2,-0.967,0.917697 } ); +cells.push_back( {22005221,4480,112,20,2,2,-0.967,0.967259 } ); +cells.push_back( {20105212,4441,112,1,1,1,-0.02675,0.917697 } ); +cells.push_back( {20105222,4461,112,1,2,1,-0.02675,0.967259 } ); +cells.push_back( {20205212,4442,112,2,1,1,-0.075,0.917697 } ); +cells.push_back( {20205222,4462,112,2,2,1,-0.075,0.967259 } ); +cells.push_back( {20305212,4443,112,3,1,1,-0.125,0.917697 } ); +cells.push_back( {20305222,4463,112,3,2,1,-0.125,0.967259 } ); +cells.push_back( {20405212,4444,112,4,1,1,-0.175,0.917697 } ); +cells.push_back( {20405222,4464,112,4,2,1,-0.175,0.967259 } ); +cells.push_back( {20505212,4445,112,5,1,1,-0.225,0.917697 } ); +cells.push_back( {20505222,4465,112,5,2,1,-0.225,0.967259 } ); +cells.push_back( {20605212,4446,112,6,1,1,-0.275,0.917697 } ); +cells.push_back( {20605222,4466,112,6,2,1,-0.275,0.967259 } ); +cells.push_back( {20705212,4447,112,7,1,1,-0.325,0.917697 } ); +cells.push_back( {20705222,4467,112,7,2,1,-0.325,0.967259 } ); +cells.push_back( {20805212,4448,112,8,1,1,-0.375,0.917697 } ); +cells.push_back( {20805222,4468,112,8,2,1,-0.375,0.967259 } ); +cells.push_back( {20905212,4449,112,9,1,1,-0.425,0.917697 } ); +cells.push_back( {20905222,4469,112,9,2,1,-0.425,0.967259 } ); +cells.push_back( {21005212,4450,112,10,1,1,-0.475,0.917697 } ); +cells.push_back( {21005222,4470,112,10,2,1,-0.475,0.967259 } ); +cells.push_back( {21105212,4451,112,11,1,1,-0.525,0.917697 } ); +cells.push_back( {21105222,4471,112,11,2,1,-0.525,0.967259 } ); +cells.push_back( {21205212,4452,112,12,1,1,-0.575,0.917697 } ); +cells.push_back( {21205222,4472,112,12,2,1,-0.575,0.967259 } ); +cells.push_back( {21305212,4453,112,13,1,1,-0.625,0.917697 } ); +cells.push_back( {21305222,4473,112,13,2,1,-0.625,0.967259 } ); +cells.push_back( {21405212,4454,112,14,1,1,-0.675,0.917697 } ); +cells.push_back( {21405222,4474,112,14,2,1,-0.675,0.967259 } ); +cells.push_back( {21505212,4455,112,15,1,1,-0.725,0.917697 } ); +cells.push_back( {21505222,4475,112,15,2,1,-0.725,0.967259 } ); +cells.push_back( {21605212,4456,112,16,1,1,-0.775,0.917697 } ); +cells.push_back( {21605222,4476,112,16,2,1,-0.775,0.967259 } ); +cells.push_back( {21705212,4457,112,17,1,1,-0.825,0.917697 } ); +cells.push_back( {21705222,4477,112,17,2,1,-0.825,0.967259 } ); +cells.push_back( {21805212,4458,112,18,1,1,-0.875,0.917697 } ); +cells.push_back( {21805222,4478,112,18,2,1,-0.875,0.967259 } ); +cells.push_back( {21905212,4459,112,19,1,1,-0.925,0.917697 } ); +cells.push_back( {21905222,4479,112,19,2,1,-0.925,0.967259 } ); +cells.push_back( {22005212,4460,112,20,1,1,-0.967,0.917697 } ); +cells.push_back( {22005222,4480,112,20,2,1,-0.967,0.967259 } ); +cells.push_back( {20105311,4481,113,1,1,2,-0.02675,1.02242 } ); +cells.push_back( {20105321,4501,113,1,2,2,-0.02675,1.07198 } ); +cells.push_back( {20205311,4482,113,2,1,2,-0.075,1.02242 } ); +cells.push_back( {20205321,4502,113,2,2,2,-0.075,1.07198 } ); +cells.push_back( {20305311,4483,113,3,1,2,-0.125,1.02242 } ); +cells.push_back( {20305321,4503,113,3,2,2,-0.125,1.07198 } ); +cells.push_back( {20405311,4484,113,4,1,2,-0.175,1.02242 } ); +cells.push_back( {20405321,4504,113,4,2,2,-0.175,1.07198 } ); +cells.push_back( {20505311,4485,113,5,1,2,-0.225,1.02242 } ); +cells.push_back( {20505321,4505,113,5,2,2,-0.225,1.07198 } ); +cells.push_back( {20605311,4486,113,6,1,2,-0.275,1.02242 } ); +cells.push_back( {20605321,4506,113,6,2,2,-0.275,1.07198 } ); +cells.push_back( {20705311,4487,113,7,1,2,-0.325,1.02242 } ); +cells.push_back( {20705321,4507,113,7,2,2,-0.325,1.07198 } ); +cells.push_back( {20805311,4488,113,8,1,2,-0.375,1.02242 } ); +cells.push_back( {20805321,4508,113,8,2,2,-0.375,1.07198 } ); +cells.push_back( {20905311,4489,113,9,1,2,-0.425,1.02242 } ); +cells.push_back( {20905321,4509,113,9,2,2,-0.425,1.07198 } ); +cells.push_back( {21005311,4490,113,10,1,2,-0.475,1.02242 } ); +cells.push_back( {21005321,4510,113,10,2,2,-0.475,1.07198 } ); +cells.push_back( {21105311,4491,113,11,1,2,-0.525,1.02242 } ); +cells.push_back( {21105321,4511,113,11,2,2,-0.525,1.07198 } ); +cells.push_back( {21205311,4492,113,12,1,2,-0.575,1.02242 } ); +cells.push_back( {21205321,4512,113,12,2,2,-0.575,1.07198 } ); +cells.push_back( {21305311,4493,113,13,1,2,-0.625,1.02242 } ); +cells.push_back( {21305321,4513,113,13,2,2,-0.625,1.07198 } ); +cells.push_back( {21405311,4494,113,14,1,2,-0.675,1.02242 } ); +cells.push_back( {21405321,4514,113,14,2,2,-0.675,1.07198 } ); +cells.push_back( {21505311,4495,113,15,1,2,-0.725,1.02242 } ); +cells.push_back( {21505321,4515,113,15,2,2,-0.725,1.07198 } ); +cells.push_back( {21605311,4496,113,16,1,2,-0.775,1.02242 } ); +cells.push_back( {21605321,4516,113,16,2,2,-0.775,1.07198 } ); +cells.push_back( {21705311,4497,113,17,1,2,-0.825,1.02242 } ); +cells.push_back( {21705321,4517,113,17,2,2,-0.825,1.07198 } ); +cells.push_back( {21805311,4498,113,18,1,2,-0.875,1.02242 } ); +cells.push_back( {21805321,4518,113,18,2,2,-0.875,1.07198 } ); +cells.push_back( {21905311,4499,113,19,1,2,-0.925,1.02242 } ); +cells.push_back( {21905321,4519,113,19,2,2,-0.925,1.07198 } ); +cells.push_back( {22005311,4500,113,20,1,2,-0.967,1.02242 } ); +cells.push_back( {22005321,4520,113,20,2,2,-0.967,1.07198 } ); +cells.push_back( {20105312,4481,113,1,1,1,-0.02675,1.02242 } ); +cells.push_back( {20105322,4501,113,1,2,1,-0.02675,1.07198 } ); +cells.push_back( {20205312,4482,113,2,1,1,-0.075,1.02242 } ); +cells.push_back( {20205322,4502,113,2,2,1,-0.075,1.07198 } ); +cells.push_back( {20305312,4483,113,3,1,1,-0.125,1.02242 } ); +cells.push_back( {20305322,4503,113,3,2,1,-0.125,1.07198 } ); +cells.push_back( {20405312,4484,113,4,1,1,-0.175,1.02242 } ); +cells.push_back( {20405322,4504,113,4,2,1,-0.175,1.07198 } ); +cells.push_back( {20505312,4485,113,5,1,1,-0.225,1.02242 } ); +cells.push_back( {20505322,4505,113,5,2,1,-0.225,1.07198 } ); +cells.push_back( {20605312,4486,113,6,1,1,-0.275,1.02242 } ); +cells.push_back( {20605322,4506,113,6,2,1,-0.275,1.07198 } ); +cells.push_back( {20705312,4487,113,7,1,1,-0.325,1.02242 } ); +cells.push_back( {20705322,4507,113,7,2,1,-0.325,1.07198 } ); +cells.push_back( {20805312,4488,113,8,1,1,-0.375,1.02242 } ); +cells.push_back( {20805322,4508,113,8,2,1,-0.375,1.07198 } ); +cells.push_back( {20905312,4489,113,9,1,1,-0.425,1.02242 } ); +cells.push_back( {20905322,4509,113,9,2,1,-0.425,1.07198 } ); +cells.push_back( {21005312,4490,113,10,1,1,-0.475,1.02242 } ); +cells.push_back( {21005322,4510,113,10,2,1,-0.475,1.07198 } ); +cells.push_back( {21105312,4491,113,11,1,1,-0.525,1.02242 } ); +cells.push_back( {21105322,4511,113,11,2,1,-0.525,1.07198 } ); +cells.push_back( {21205312,4492,113,12,1,1,-0.575,1.02242 } ); +cells.push_back( {21205322,4512,113,12,2,1,-0.575,1.07198 } ); +cells.push_back( {21305312,4493,113,13,1,1,-0.625,1.02242 } ); +cells.push_back( {21305322,4513,113,13,2,1,-0.625,1.07198 } ); +cells.push_back( {21405312,4494,113,14,1,1,-0.675,1.02242 } ); +cells.push_back( {21405322,4514,113,14,2,1,-0.675,1.07198 } ); +cells.push_back( {21505312,4495,113,15,1,1,-0.725,1.02242 } ); +cells.push_back( {21505322,4515,113,15,2,1,-0.725,1.07198 } ); +cells.push_back( {21605312,4496,113,16,1,1,-0.775,1.02242 } ); +cells.push_back( {21605322,4516,113,16,2,1,-0.775,1.07198 } ); +cells.push_back( {21705312,4497,113,17,1,1,-0.825,1.02242 } ); +cells.push_back( {21705322,4517,113,17,2,1,-0.825,1.07198 } ); +cells.push_back( {21805312,4498,113,18,1,1,-0.875,1.02242 } ); +cells.push_back( {21805322,4518,113,18,2,1,-0.875,1.07198 } ); +cells.push_back( {21905312,4499,113,19,1,1,-0.925,1.02242 } ); +cells.push_back( {21905322,4519,113,19,2,1,-0.925,1.07198 } ); +cells.push_back( {22005312,4500,113,20,1,1,-0.967,1.02242 } ); +cells.push_back( {22005322,4520,113,20,2,1,-0.967,1.07198 } ); +cells.push_back( {20105411,4521,114,1,1,2,-0.02675,1.12714 } ); +cells.push_back( {20105421,4541,114,1,2,2,-0.02675,1.1767 } ); +cells.push_back( {20205411,4522,114,2,1,2,-0.075,1.12714 } ); +cells.push_back( {20205421,4542,114,2,2,2,-0.075,1.1767 } ); +cells.push_back( {20305411,4523,114,3,1,2,-0.125,1.12714 } ); +cells.push_back( {20305421,4543,114,3,2,2,-0.125,1.1767 } ); +cells.push_back( {20405411,4524,114,4,1,2,-0.175,1.12714 } ); +cells.push_back( {20405421,4544,114,4,2,2,-0.175,1.1767 } ); +cells.push_back( {20505411,4525,114,5,1,2,-0.225,1.12714 } ); +cells.push_back( {20505421,4545,114,5,2,2,-0.225,1.1767 } ); +cells.push_back( {20605411,4526,114,6,1,2,-0.275,1.12714 } ); +cells.push_back( {20605421,4546,114,6,2,2,-0.275,1.1767 } ); +cells.push_back( {20705411,4527,114,7,1,2,-0.325,1.12714 } ); +cells.push_back( {20705421,4547,114,7,2,2,-0.325,1.1767 } ); +cells.push_back( {20805411,4528,114,8,1,2,-0.375,1.12714 } ); +cells.push_back( {20805421,4548,114,8,2,2,-0.375,1.1767 } ); +cells.push_back( {20905411,4529,114,9,1,2,-0.425,1.12714 } ); +cells.push_back( {20905421,4549,114,9,2,2,-0.425,1.1767 } ); +cells.push_back( {21005411,4530,114,10,1,2,-0.475,1.12714 } ); +cells.push_back( {21005421,4550,114,10,2,2,-0.475,1.1767 } ); +cells.push_back( {21105411,4531,114,11,1,2,-0.525,1.12714 } ); +cells.push_back( {21105421,4551,114,11,2,2,-0.525,1.1767 } ); +cells.push_back( {21205411,4532,114,12,1,2,-0.575,1.12714 } ); +cells.push_back( {21205421,4552,114,12,2,2,-0.575,1.1767 } ); +cells.push_back( {21305411,4533,114,13,1,2,-0.625,1.12714 } ); +cells.push_back( {21305421,4553,114,13,2,2,-0.625,1.1767 } ); +cells.push_back( {21405411,4534,114,14,1,2,-0.675,1.12714 } ); +cells.push_back( {21405421,4554,114,14,2,2,-0.675,1.1767 } ); +cells.push_back( {21505411,4535,114,15,1,2,-0.725,1.12714 } ); +cells.push_back( {21505421,4555,114,15,2,2,-0.725,1.1767 } ); +cells.push_back( {21605411,4536,114,16,1,2,-0.775,1.12714 } ); +cells.push_back( {21605421,4556,114,16,2,2,-0.775,1.1767 } ); +cells.push_back( {21705411,4537,114,17,1,2,-0.825,1.12714 } ); +cells.push_back( {21705421,4557,114,17,2,2,-0.825,1.1767 } ); +cells.push_back( {21805411,4538,114,18,1,2,-0.875,1.12714 } ); +cells.push_back( {21805421,4558,114,18,2,2,-0.875,1.1767 } ); +cells.push_back( {21905411,4539,114,19,1,2,-0.925,1.12714 } ); +cells.push_back( {21905421,4559,114,19,2,2,-0.925,1.1767 } ); +cells.push_back( {22005411,4540,114,20,1,2,-0.967,1.12714 } ); +cells.push_back( {22005421,4560,114,20,2,2,-0.967,1.1767 } ); +cells.push_back( {20105412,4521,114,1,1,1,-0.02675,1.12714 } ); +cells.push_back( {20105422,4541,114,1,2,1,-0.02675,1.1767 } ); +cells.push_back( {20205412,4522,114,2,1,1,-0.075,1.12714 } ); +cells.push_back( {20205422,4542,114,2,2,1,-0.075,1.1767 } ); +cells.push_back( {20305412,4523,114,3,1,1,-0.125,1.12714 } ); +cells.push_back( {20305422,4543,114,3,2,1,-0.125,1.1767 } ); +cells.push_back( {20405412,4524,114,4,1,1,-0.175,1.12714 } ); +cells.push_back( {20405422,4544,114,4,2,1,-0.175,1.1767 } ); +cells.push_back( {20505412,4525,114,5,1,1,-0.225,1.12714 } ); +cells.push_back( {20505422,4545,114,5,2,1,-0.225,1.1767 } ); +cells.push_back( {20605412,4526,114,6,1,1,-0.275,1.12714 } ); +cells.push_back( {20605422,4546,114,6,2,1,-0.275,1.1767 } ); +cells.push_back( {20705412,4527,114,7,1,1,-0.325,1.12714 } ); +cells.push_back( {20705422,4547,114,7,2,1,-0.325,1.1767 } ); +cells.push_back( {20805412,4528,114,8,1,1,-0.375,1.12714 } ); +cells.push_back( {20805422,4548,114,8,2,1,-0.375,1.1767 } ); +cells.push_back( {20905412,4529,114,9,1,1,-0.425,1.12714 } ); +cells.push_back( {20905422,4549,114,9,2,1,-0.425,1.1767 } ); +cells.push_back( {21005412,4530,114,10,1,1,-0.475,1.12714 } ); +cells.push_back( {21005422,4550,114,10,2,1,-0.475,1.1767 } ); +cells.push_back( {21105412,4531,114,11,1,1,-0.525,1.12714 } ); +cells.push_back( {21105422,4551,114,11,2,1,-0.525,1.1767 } ); +cells.push_back( {21205412,4532,114,12,1,1,-0.575,1.12714 } ); +cells.push_back( {21205422,4552,114,12,2,1,-0.575,1.1767 } ); +cells.push_back( {21305412,4533,114,13,1,1,-0.625,1.12714 } ); +cells.push_back( {21305422,4553,114,13,2,1,-0.625,1.1767 } ); +cells.push_back( {21405412,4534,114,14,1,1,-0.675,1.12714 } ); +cells.push_back( {21405422,4554,114,14,2,1,-0.675,1.1767 } ); +cells.push_back( {21505412,4535,114,15,1,1,-0.725,1.12714 } ); +cells.push_back( {21505422,4555,114,15,2,1,-0.725,1.1767 } ); +cells.push_back( {21605412,4536,114,16,1,1,-0.775,1.12714 } ); +cells.push_back( {21605422,4556,114,16,2,1,-0.775,1.1767 } ); +cells.push_back( {21705412,4537,114,17,1,1,-0.825,1.12714 } ); +cells.push_back( {21705422,4557,114,17,2,1,-0.825,1.1767 } ); +cells.push_back( {21805412,4538,114,18,1,1,-0.875,1.12714 } ); +cells.push_back( {21805422,4558,114,18,2,1,-0.875,1.1767 } ); +cells.push_back( {21905412,4539,114,19,1,1,-0.925,1.12714 } ); +cells.push_back( {21905422,4559,114,19,2,1,-0.925,1.1767 } ); +cells.push_back( {22005412,4540,114,20,1,1,-0.967,1.12714 } ); +cells.push_back( {22005422,4560,114,20,2,1,-0.967,1.1767 } ); +cells.push_back( {20105511,4561,115,1,1,2,-0.02675,1.23186 } ); +cells.push_back( {20105521,4581,115,1,2,2,-0.02675,1.28142 } ); +cells.push_back( {20205511,4562,115,2,1,2,-0.075,1.23186 } ); +cells.push_back( {20205521,4582,115,2,2,2,-0.075,1.28142 } ); +cells.push_back( {20305511,4563,115,3,1,2,-0.125,1.23186 } ); +cells.push_back( {20305521,4583,115,3,2,2,-0.125,1.28142 } ); +cells.push_back( {20405511,4564,115,4,1,2,-0.175,1.23186 } ); +cells.push_back( {20405521,4584,115,4,2,2,-0.175,1.28142 } ); +cells.push_back( {20505511,4565,115,5,1,2,-0.225,1.23186 } ); +cells.push_back( {20505521,4585,115,5,2,2,-0.225,1.28142 } ); +cells.push_back( {20605511,4566,115,6,1,2,-0.275,1.23186 } ); +cells.push_back( {20605521,4586,115,6,2,2,-0.275,1.28142 } ); +cells.push_back( {20705511,4567,115,7,1,2,-0.325,1.23186 } ); +cells.push_back( {20705521,4587,115,7,2,2,-0.325,1.28142 } ); +cells.push_back( {20805511,4568,115,8,1,2,-0.375,1.23186 } ); +cells.push_back( {20805521,4588,115,8,2,2,-0.375,1.28142 } ); +cells.push_back( {20905511,4569,115,9,1,2,-0.425,1.23186 } ); +cells.push_back( {20905521,4589,115,9,2,2,-0.425,1.28142 } ); +cells.push_back( {21005511,4570,115,10,1,2,-0.475,1.23186 } ); +cells.push_back( {21005521,4590,115,10,2,2,-0.475,1.28142 } ); +cells.push_back( {21105511,4571,115,11,1,2,-0.525,1.23186 } ); +cells.push_back( {21105521,4591,115,11,2,2,-0.525,1.28142 } ); +cells.push_back( {21205511,4572,115,12,1,2,-0.575,1.23186 } ); +cells.push_back( {21205521,4592,115,12,2,2,-0.575,1.28142 } ); +cells.push_back( {21305511,4573,115,13,1,2,-0.625,1.23186 } ); +cells.push_back( {21305521,4593,115,13,2,2,-0.625,1.28142 } ); +cells.push_back( {21405511,4574,115,14,1,2,-0.675,1.23186 } ); +cells.push_back( {21405521,4594,115,14,2,2,-0.675,1.28142 } ); +cells.push_back( {21505511,4575,115,15,1,2,-0.725,1.23186 } ); +cells.push_back( {21505521,4595,115,15,2,2,-0.725,1.28142 } ); +cells.push_back( {21605511,4576,115,16,1,2,-0.775,1.23186 } ); +cells.push_back( {21605521,4596,115,16,2,2,-0.775,1.28142 } ); +cells.push_back( {21705511,4577,115,17,1,2,-0.825,1.23186 } ); +cells.push_back( {21705521,4597,115,17,2,2,-0.825,1.28142 } ); +cells.push_back( {21805511,4578,115,18,1,2,-0.875,1.23186 } ); +cells.push_back( {21805521,4598,115,18,2,2,-0.875,1.28142 } ); +cells.push_back( {21905511,4579,115,19,1,2,-0.925,1.23186 } ); +cells.push_back( {21905521,4599,115,19,2,2,-0.925,1.28142 } ); +cells.push_back( {22005511,4580,115,20,1,2,-0.967,1.23186 } ); +cells.push_back( {22005521,4600,115,20,2,2,-0.967,1.28142 } ); +cells.push_back( {20105512,4561,115,1,1,1,-0.02675,1.23186 } ); +cells.push_back( {20105522,4581,115,1,2,1,-0.02675,1.28142 } ); +cells.push_back( {20205512,4562,115,2,1,1,-0.075,1.23186 } ); +cells.push_back( {20205522,4582,115,2,2,1,-0.075,1.28142 } ); +cells.push_back( {20305512,4563,115,3,1,1,-0.125,1.23186 } ); +cells.push_back( {20305522,4583,115,3,2,1,-0.125,1.28142 } ); +cells.push_back( {20405512,4564,115,4,1,1,-0.175,1.23186 } ); +cells.push_back( {20405522,4584,115,4,2,1,-0.175,1.28142 } ); +cells.push_back( {20505512,4565,115,5,1,1,-0.225,1.23186 } ); +cells.push_back( {20505522,4585,115,5,2,1,-0.225,1.28142 } ); +cells.push_back( {20605512,4566,115,6,1,1,-0.275,1.23186 } ); +cells.push_back( {20605522,4586,115,6,2,1,-0.275,1.28142 } ); +cells.push_back( {20705512,4567,115,7,1,1,-0.325,1.23186 } ); +cells.push_back( {20705522,4587,115,7,2,1,-0.325,1.28142 } ); +cells.push_back( {20805512,4568,115,8,1,1,-0.375,1.23186 } ); +cells.push_back( {20805522,4588,115,8,2,1,-0.375,1.28142 } ); +cells.push_back( {20905512,4569,115,9,1,1,-0.425,1.23186 } ); +cells.push_back( {20905522,4589,115,9,2,1,-0.425,1.28142 } ); +cells.push_back( {21005512,4570,115,10,1,1,-0.475,1.23186 } ); +cells.push_back( {21005522,4590,115,10,2,1,-0.475,1.28142 } ); +cells.push_back( {21105512,4571,115,11,1,1,-0.525,1.23186 } ); +cells.push_back( {21105522,4591,115,11,2,1,-0.525,1.28142 } ); +cells.push_back( {21205512,4572,115,12,1,1,-0.575,1.23186 } ); +cells.push_back( {21205522,4592,115,12,2,1,-0.575,1.28142 } ); +cells.push_back( {21305512,4573,115,13,1,1,-0.625,1.23186 } ); +cells.push_back( {21305522,4593,115,13,2,1,-0.625,1.28142 } ); +cells.push_back( {21405512,4574,115,14,1,1,-0.675,1.23186 } ); +cells.push_back( {21405522,4594,115,14,2,1,-0.675,1.28142 } ); +cells.push_back( {21505512,4575,115,15,1,1,-0.725,1.23186 } ); +cells.push_back( {21505522,4595,115,15,2,1,-0.725,1.28142 } ); +cells.push_back( {21605512,4576,115,16,1,1,-0.775,1.23186 } ); +cells.push_back( {21605522,4596,115,16,2,1,-0.775,1.28142 } ); +cells.push_back( {21705512,4577,115,17,1,1,-0.825,1.23186 } ); +cells.push_back( {21705522,4597,115,17,2,1,-0.825,1.28142 } ); +cells.push_back( {21805512,4578,115,18,1,1,-0.875,1.23186 } ); +cells.push_back( {21805522,4598,115,18,2,1,-0.875,1.28142 } ); +cells.push_back( {21905512,4579,115,19,1,1,-0.925,1.23186 } ); +cells.push_back( {21905522,4599,115,19,2,1,-0.925,1.28142 } ); +cells.push_back( {22005512,4580,115,20,1,1,-0.967,1.23186 } ); +cells.push_back( {22005522,4600,115,20,2,1,-0.967,1.28142 } ); +cells.push_back( {20105611,4601,116,1,1,2,-0.02675,1.33658 } ); +cells.push_back( {20105621,4621,116,1,2,2,-0.02675,1.38614 } ); +cells.push_back( {20205611,4602,116,2,1,2,-0.075,1.33658 } ); +cells.push_back( {20205621,4622,116,2,2,2,-0.075,1.38614 } ); +cells.push_back( {20305611,4603,116,3,1,2,-0.125,1.33658 } ); +cells.push_back( {20305621,4623,116,3,2,2,-0.125,1.38614 } ); +cells.push_back( {20405611,4604,116,4,1,2,-0.175,1.33658 } ); +cells.push_back( {20405621,4624,116,4,2,2,-0.175,1.38614 } ); +cells.push_back( {20505611,4605,116,5,1,2,-0.225,1.33658 } ); +cells.push_back( {20505621,4625,116,5,2,2,-0.225,1.38614 } ); +cells.push_back( {20605611,4606,116,6,1,2,-0.275,1.33658 } ); +cells.push_back( {20605621,4626,116,6,2,2,-0.275,1.38614 } ); +cells.push_back( {20705611,4607,116,7,1,2,-0.325,1.33658 } ); +cells.push_back( {20705621,4627,116,7,2,2,-0.325,1.38614 } ); +cells.push_back( {20805611,4608,116,8,1,2,-0.375,1.33658 } ); +cells.push_back( {20805621,4628,116,8,2,2,-0.375,1.38614 } ); +cells.push_back( {20905611,4609,116,9,1,2,-0.425,1.33658 } ); +cells.push_back( {20905621,4629,116,9,2,2,-0.425,1.38614 } ); +cells.push_back( {21005611,4610,116,10,1,2,-0.475,1.33658 } ); +cells.push_back( {21005621,4630,116,10,2,2,-0.475,1.38614 } ); +cells.push_back( {21105611,4611,116,11,1,2,-0.525,1.33658 } ); +cells.push_back( {21105621,4631,116,11,2,2,-0.525,1.38614 } ); +cells.push_back( {21205611,4612,116,12,1,2,-0.575,1.33658 } ); +cells.push_back( {21205621,4632,116,12,2,2,-0.575,1.38614 } ); +cells.push_back( {21305611,4613,116,13,1,2,-0.625,1.33658 } ); +cells.push_back( {21305621,4633,116,13,2,2,-0.625,1.38614 } ); +cells.push_back( {21405611,4614,116,14,1,2,-0.675,1.33658 } ); +cells.push_back( {21405621,4634,116,14,2,2,-0.675,1.38614 } ); +cells.push_back( {21505611,4615,116,15,1,2,-0.725,1.33658 } ); +cells.push_back( {21505621,4635,116,15,2,2,-0.725,1.38614 } ); +cells.push_back( {21605611,4616,116,16,1,2,-0.775,1.33658 } ); +cells.push_back( {21605621,4636,116,16,2,2,-0.775,1.38614 } ); +cells.push_back( {21705611,4617,116,17,1,2,-0.825,1.33658 } ); +cells.push_back( {21705621,4637,116,17,2,2,-0.825,1.38614 } ); +cells.push_back( {21805611,4618,116,18,1,2,-0.875,1.33658 } ); +cells.push_back( {21805621,4638,116,18,2,2,-0.875,1.38614 } ); +cells.push_back( {21905611,4619,116,19,1,2,-0.925,1.33658 } ); +cells.push_back( {21905621,4639,116,19,2,2,-0.925,1.38614 } ); +cells.push_back( {22005611,4620,116,20,1,2,-0.967,1.33658 } ); +cells.push_back( {22005621,4640,116,20,2,2,-0.967,1.38614 } ); +cells.push_back( {20105612,4601,116,1,1,1,-0.02675,1.33658 } ); +cells.push_back( {20105622,4621,116,1,2,1,-0.02675,1.38614 } ); +cells.push_back( {20205612,4602,116,2,1,1,-0.075,1.33658 } ); +cells.push_back( {20205622,4622,116,2,2,1,-0.075,1.38614 } ); +cells.push_back( {20305612,4603,116,3,1,1,-0.125,1.33658 } ); +cells.push_back( {20305622,4623,116,3,2,1,-0.125,1.38614 } ); +cells.push_back( {20405612,4604,116,4,1,1,-0.175,1.33658 } ); +cells.push_back( {20405622,4624,116,4,2,1,-0.175,1.38614 } ); +cells.push_back( {20505612,4605,116,5,1,1,-0.225,1.33658 } ); +cells.push_back( {20505622,4625,116,5,2,1,-0.225,1.38614 } ); +cells.push_back( {20605612,4606,116,6,1,1,-0.275,1.33658 } ); +cells.push_back( {20605622,4626,116,6,2,1,-0.275,1.38614 } ); +cells.push_back( {20705612,4607,116,7,1,1,-0.325,1.33658 } ); +cells.push_back( {20705622,4627,116,7,2,1,-0.325,1.38614 } ); +cells.push_back( {20805612,4608,116,8,1,1,-0.375,1.33658 } ); +cells.push_back( {20805622,4628,116,8,2,1,-0.375,1.38614 } ); +cells.push_back( {20905612,4609,116,9,1,1,-0.425,1.33658 } ); +cells.push_back( {20905622,4629,116,9,2,1,-0.425,1.38614 } ); +cells.push_back( {21005612,4610,116,10,1,1,-0.475,1.33658 } ); +cells.push_back( {21005622,4630,116,10,2,1,-0.475,1.38614 } ); +cells.push_back( {21105612,4611,116,11,1,1,-0.525,1.33658 } ); +cells.push_back( {21105622,4631,116,11,2,1,-0.525,1.38614 } ); +cells.push_back( {21205612,4612,116,12,1,1,-0.575,1.33658 } ); +cells.push_back( {21205622,4632,116,12,2,1,-0.575,1.38614 } ); +cells.push_back( {21305612,4613,116,13,1,1,-0.625,1.33658 } ); +cells.push_back( {21305622,4633,116,13,2,1,-0.625,1.38614 } ); +cells.push_back( {21405612,4614,116,14,1,1,-0.675,1.33658 } ); +cells.push_back( {21405622,4634,116,14,2,1,-0.675,1.38614 } ); +cells.push_back( {21505612,4615,116,15,1,1,-0.725,1.33658 } ); +cells.push_back( {21505622,4635,116,15,2,1,-0.725,1.38614 } ); +cells.push_back( {21605612,4616,116,16,1,1,-0.775,1.33658 } ); +cells.push_back( {21605622,4636,116,16,2,1,-0.775,1.38614 } ); +cells.push_back( {21705612,4617,116,17,1,1,-0.825,1.33658 } ); +cells.push_back( {21705622,4637,116,17,2,1,-0.825,1.38614 } ); +cells.push_back( {21805612,4618,116,18,1,1,-0.875,1.33658 } ); +cells.push_back( {21805622,4638,116,18,2,1,-0.875,1.38614 } ); +cells.push_back( {21905612,4619,116,19,1,1,-0.925,1.33658 } ); +cells.push_back( {21905622,4639,116,19,2,1,-0.925,1.38614 } ); +cells.push_back( {22005612,4620,116,20,1,1,-0.967,1.33658 } ); +cells.push_back( {22005622,4640,116,20,2,1,-0.967,1.38614 } ); +cells.push_back( {20105711,4641,117,1,1,2,-0.02675,1.4413 } ); +cells.push_back( {20105721,4661,117,1,2,2,-0.02675,1.49086 } ); +cells.push_back( {20205711,4642,117,2,1,2,-0.075,1.4413 } ); +cells.push_back( {20205721,4662,117,2,2,2,-0.075,1.49086 } ); +cells.push_back( {20305711,4643,117,3,1,2,-0.125,1.4413 } ); +cells.push_back( {20305721,4663,117,3,2,2,-0.125,1.49086 } ); +cells.push_back( {20405711,4644,117,4,1,2,-0.175,1.4413 } ); +cells.push_back( {20405721,4664,117,4,2,2,-0.175,1.49086 } ); +cells.push_back( {20505711,4645,117,5,1,2,-0.225,1.4413 } ); +cells.push_back( {20505721,4665,117,5,2,2,-0.225,1.49086 } ); +cells.push_back( {20605711,4646,117,6,1,2,-0.275,1.4413 } ); +cells.push_back( {20605721,4666,117,6,2,2,-0.275,1.49086 } ); +cells.push_back( {20705711,4647,117,7,1,2,-0.325,1.4413 } ); +cells.push_back( {20705721,4667,117,7,2,2,-0.325,1.49086 } ); +cells.push_back( {20805711,4648,117,8,1,2,-0.375,1.4413 } ); +cells.push_back( {20805721,4668,117,8,2,2,-0.375,1.49086 } ); +cells.push_back( {20905711,4649,117,9,1,2,-0.425,1.4413 } ); +cells.push_back( {20905721,4669,117,9,2,2,-0.425,1.49086 } ); +cells.push_back( {21005711,4650,117,10,1,2,-0.475,1.4413 } ); +cells.push_back( {21005721,4670,117,10,2,2,-0.475,1.49086 } ); +cells.push_back( {21105711,4651,117,11,1,2,-0.525,1.4413 } ); +cells.push_back( {21105721,4671,117,11,2,2,-0.525,1.49086 } ); +cells.push_back( {21205711,4652,117,12,1,2,-0.575,1.4413 } ); +cells.push_back( {21205721,4672,117,12,2,2,-0.575,1.49086 } ); +cells.push_back( {21305711,4653,117,13,1,2,-0.625,1.4413 } ); +cells.push_back( {21305721,4673,117,13,2,2,-0.625,1.49086 } ); +cells.push_back( {21405711,4654,117,14,1,2,-0.675,1.4413 } ); +cells.push_back( {21405721,4674,117,14,2,2,-0.675,1.49086 } ); +cells.push_back( {21505711,4655,117,15,1,2,-0.725,1.4413 } ); +cells.push_back( {21505721,4675,117,15,2,2,-0.725,1.49086 } ); +cells.push_back( {21605711,4656,117,16,1,2,-0.775,1.4413 } ); +cells.push_back( {21605721,4676,117,16,2,2,-0.775,1.49086 } ); +cells.push_back( {21705711,4657,117,17,1,2,-0.825,1.4413 } ); +cells.push_back( {21705721,4677,117,17,2,2,-0.825,1.49086 } ); +cells.push_back( {21805711,4658,117,18,1,2,-0.875,1.4413 } ); +cells.push_back( {21805721,4678,117,18,2,2,-0.875,1.49086 } ); +cells.push_back( {21905711,4659,117,19,1,2,-0.925,1.4413 } ); +cells.push_back( {21905721,4679,117,19,2,2,-0.925,1.49086 } ); +cells.push_back( {22005711,4660,117,20,1,2,-0.967,1.4413 } ); +cells.push_back( {22005721,4680,117,20,2,2,-0.967,1.49086 } ); +cells.push_back( {20105712,4641,117,1,1,1,-0.02675,1.4413 } ); +cells.push_back( {20105722,4661,117,1,2,1,-0.02675,1.49086 } ); +cells.push_back( {20205712,4642,117,2,1,1,-0.075,1.4413 } ); +cells.push_back( {20205722,4662,117,2,2,1,-0.075,1.49086 } ); +cells.push_back( {20305712,4643,117,3,1,1,-0.125,1.4413 } ); +cells.push_back( {20305722,4663,117,3,2,1,-0.125,1.49086 } ); +cells.push_back( {20405712,4644,117,4,1,1,-0.175,1.4413 } ); +cells.push_back( {20405722,4664,117,4,2,1,-0.175,1.49086 } ); +cells.push_back( {20505712,4645,117,5,1,1,-0.225,1.4413 } ); +cells.push_back( {20505722,4665,117,5,2,1,-0.225,1.49086 } ); +cells.push_back( {20605712,4646,117,6,1,1,-0.275,1.4413 } ); +cells.push_back( {20605722,4666,117,6,2,1,-0.275,1.49086 } ); +cells.push_back( {20705712,4647,117,7,1,1,-0.325,1.4413 } ); +cells.push_back( {20705722,4667,117,7,2,1,-0.325,1.49086 } ); +cells.push_back( {20805712,4648,117,8,1,1,-0.375,1.4413 } ); +cells.push_back( {20805722,4668,117,8,2,1,-0.375,1.49086 } ); +cells.push_back( {20905712,4649,117,9,1,1,-0.425,1.4413 } ); +cells.push_back( {20905722,4669,117,9,2,1,-0.425,1.49086 } ); +cells.push_back( {21005712,4650,117,10,1,1,-0.475,1.4413 } ); +cells.push_back( {21005722,4670,117,10,2,1,-0.475,1.49086 } ); +cells.push_back( {21105712,4651,117,11,1,1,-0.525,1.4413 } ); +cells.push_back( {21105722,4671,117,11,2,1,-0.525,1.49086 } ); +cells.push_back( {21205712,4652,117,12,1,1,-0.575,1.4413 } ); +cells.push_back( {21205722,4672,117,12,2,1,-0.575,1.49086 } ); +cells.push_back( {21305712,4653,117,13,1,1,-0.625,1.4413 } ); +cells.push_back( {21305722,4673,117,13,2,1,-0.625,1.49086 } ); +cells.push_back( {21405712,4654,117,14,1,1,-0.675,1.4413 } ); +cells.push_back( {21405722,4674,117,14,2,1,-0.675,1.49086 } ); +cells.push_back( {21505712,4655,117,15,1,1,-0.725,1.4413 } ); +cells.push_back( {21505722,4675,117,15,2,1,-0.725,1.49086 } ); +cells.push_back( {21605712,4656,117,16,1,1,-0.775,1.4413 } ); +cells.push_back( {21605722,4676,117,16,2,1,-0.775,1.49086 } ); +cells.push_back( {21705712,4657,117,17,1,1,-0.825,1.4413 } ); +cells.push_back( {21705722,4677,117,17,2,1,-0.825,1.49086 } ); +cells.push_back( {21805712,4658,117,18,1,1,-0.875,1.4413 } ); +cells.push_back( {21805722,4678,117,18,2,1,-0.875,1.49086 } ); +cells.push_back( {21905712,4659,117,19,1,1,-0.925,1.4413 } ); +cells.push_back( {21905722,4679,117,19,2,1,-0.925,1.49086 } ); +cells.push_back( {22005712,4660,117,20,1,1,-0.967,1.4413 } ); +cells.push_back( {22005722,4680,117,20,2,1,-0.967,1.49086 } ); +cells.push_back( {20105811,4681,118,1,1,2,-0.02675,1.54602 } ); +cells.push_back( {20105821,4701,118,1,2,2,-0.02675,1.59558 } ); +cells.push_back( {20205811,4682,118,2,1,2,-0.075,1.54602 } ); +cells.push_back( {20205821,4702,118,2,2,2,-0.075,1.59558 } ); +cells.push_back( {20305811,4683,118,3,1,2,-0.125,1.54602 } ); +cells.push_back( {20305821,4703,118,3,2,2,-0.125,1.59558 } ); +cells.push_back( {20405811,4684,118,4,1,2,-0.175,1.54602 } ); +cells.push_back( {20405821,4704,118,4,2,2,-0.175,1.59558 } ); +cells.push_back( {20505811,4685,118,5,1,2,-0.225,1.54602 } ); +cells.push_back( {20505821,4705,118,5,2,2,-0.225,1.59558 } ); +cells.push_back( {20605811,4686,118,6,1,2,-0.275,1.54602 } ); +cells.push_back( {20605821,4706,118,6,2,2,-0.275,1.59558 } ); +cells.push_back( {20705811,4687,118,7,1,2,-0.325,1.54602 } ); +cells.push_back( {20705821,4707,118,7,2,2,-0.325,1.59558 } ); +cells.push_back( {20805811,4688,118,8,1,2,-0.375,1.54602 } ); +cells.push_back( {20805821,4708,118,8,2,2,-0.375,1.59558 } ); +cells.push_back( {20905811,4689,118,9,1,2,-0.425,1.54602 } ); +cells.push_back( {20905821,4709,118,9,2,2,-0.425,1.59558 } ); +cells.push_back( {21005811,4690,118,10,1,2,-0.475,1.54602 } ); +cells.push_back( {21005821,4710,118,10,2,2,-0.475,1.59558 } ); +cells.push_back( {21105811,4691,118,11,1,2,-0.525,1.54602 } ); +cells.push_back( {21105821,4711,118,11,2,2,-0.525,1.59558 } ); +cells.push_back( {21205811,4692,118,12,1,2,-0.575,1.54602 } ); +cells.push_back( {21205821,4712,118,12,2,2,-0.575,1.59558 } ); +cells.push_back( {21305811,4693,118,13,1,2,-0.625,1.54602 } ); +cells.push_back( {21305821,4713,118,13,2,2,-0.625,1.59558 } ); +cells.push_back( {21405811,4694,118,14,1,2,-0.675,1.54602 } ); +cells.push_back( {21405821,4714,118,14,2,2,-0.675,1.59558 } ); +cells.push_back( {21505811,4695,118,15,1,2,-0.725,1.54602 } ); +cells.push_back( {21505821,4715,118,15,2,2,-0.725,1.59558 } ); +cells.push_back( {21605811,4696,118,16,1,2,-0.775,1.54602 } ); +cells.push_back( {21605821,4716,118,16,2,2,-0.775,1.59558 } ); +cells.push_back( {21705811,4697,118,17,1,2,-0.825,1.54602 } ); +cells.push_back( {21705821,4717,118,17,2,2,-0.825,1.59558 } ); +cells.push_back( {21805811,4698,118,18,1,2,-0.875,1.54602 } ); +cells.push_back( {21805821,4718,118,18,2,2,-0.875,1.59558 } ); +cells.push_back( {21905811,4699,118,19,1,2,-0.925,1.54602 } ); +cells.push_back( {21905821,4719,118,19,2,2,-0.925,1.59558 } ); +cells.push_back( {22005811,4700,118,20,1,2,-0.967,1.54602 } ); +cells.push_back( {22005821,4720,118,20,2,2,-0.967,1.59558 } ); +cells.push_back( {20105812,4681,118,1,1,1,-0.02675,1.54602 } ); +cells.push_back( {20105822,4701,118,1,2,1,-0.02675,1.59558 } ); +cells.push_back( {20205812,4682,118,2,1,1,-0.075,1.54602 } ); +cells.push_back( {20205822,4702,118,2,2,1,-0.075,1.59558 } ); +cells.push_back( {20305812,4683,118,3,1,1,-0.125,1.54602 } ); +cells.push_back( {20305822,4703,118,3,2,1,-0.125,1.59558 } ); +cells.push_back( {20405812,4684,118,4,1,1,-0.175,1.54602 } ); +cells.push_back( {20405822,4704,118,4,2,1,-0.175,1.59558 } ); +cells.push_back( {20505812,4685,118,5,1,1,-0.225,1.54602 } ); +cells.push_back( {20505822,4705,118,5,2,1,-0.225,1.59558 } ); +cells.push_back( {20605812,4686,118,6,1,1,-0.275,1.54602 } ); +cells.push_back( {20605822,4706,118,6,2,1,-0.275,1.59558 } ); +cells.push_back( {20705812,4687,118,7,1,1,-0.325,1.54602 } ); +cells.push_back( {20705822,4707,118,7,2,1,-0.325,1.59558 } ); +cells.push_back( {20805812,4688,118,8,1,1,-0.375,1.54602 } ); +cells.push_back( {20805822,4708,118,8,2,1,-0.375,1.59558 } ); +cells.push_back( {20905812,4689,118,9,1,1,-0.425,1.54602 } ); +cells.push_back( {20905822,4709,118,9,2,1,-0.425,1.59558 } ); +cells.push_back( {21005812,4690,118,10,1,1,-0.475,1.54602 } ); +cells.push_back( {21005822,4710,118,10,2,1,-0.475,1.59558 } ); +cells.push_back( {21105812,4691,118,11,1,1,-0.525,1.54602 } ); +cells.push_back( {21105822,4711,118,11,2,1,-0.525,1.59558 } ); +cells.push_back( {21205812,4692,118,12,1,1,-0.575,1.54602 } ); +cells.push_back( {21205822,4712,118,12,2,1,-0.575,1.59558 } ); +cells.push_back( {21305812,4693,118,13,1,1,-0.625,1.54602 } ); +cells.push_back( {21305822,4713,118,13,2,1,-0.625,1.59558 } ); +cells.push_back( {21405812,4694,118,14,1,1,-0.675,1.54602 } ); +cells.push_back( {21405822,4714,118,14,2,1,-0.675,1.59558 } ); +cells.push_back( {21505812,4695,118,15,1,1,-0.725,1.54602 } ); +cells.push_back( {21505822,4715,118,15,2,1,-0.725,1.59558 } ); +cells.push_back( {21605812,4696,118,16,1,1,-0.775,1.54602 } ); +cells.push_back( {21605822,4716,118,16,2,1,-0.775,1.59558 } ); +cells.push_back( {21705812,4697,118,17,1,1,-0.825,1.54602 } ); +cells.push_back( {21705822,4717,118,17,2,1,-0.825,1.59558 } ); +cells.push_back( {21805812,4698,118,18,1,1,-0.875,1.54602 } ); +cells.push_back( {21805822,4718,118,18,2,1,-0.875,1.59558 } ); +cells.push_back( {21905812,4699,118,19,1,1,-0.925,1.54602 } ); +cells.push_back( {21905822,4719,118,19,2,1,-0.925,1.59558 } ); +cells.push_back( {22005812,4700,118,20,1,1,-0.967,1.54602 } ); +cells.push_back( {22005822,4720,118,20,2,1,-0.967,1.59558 } ); +cells.push_back( {20105911,4721,119,1,1,2,-0.02675,1.65073 } ); +cells.push_back( {20105921,4741,119,1,2,2,-0.02675,1.7003 } ); +cells.push_back( {20205911,4722,119,2,1,2,-0.075,1.65073 } ); +cells.push_back( {20205921,4742,119,2,2,2,-0.075,1.7003 } ); +cells.push_back( {20305911,4723,119,3,1,2,-0.125,1.65073 } ); +cells.push_back( {20305921,4743,119,3,2,2,-0.125,1.7003 } ); +cells.push_back( {20405911,4724,119,4,1,2,-0.175,1.65073 } ); +cells.push_back( {20405921,4744,119,4,2,2,-0.175,1.7003 } ); +cells.push_back( {20505911,4725,119,5,1,2,-0.225,1.65073 } ); +cells.push_back( {20505921,4745,119,5,2,2,-0.225,1.7003 } ); +cells.push_back( {20605911,4726,119,6,1,2,-0.275,1.65073 } ); +cells.push_back( {20605921,4746,119,6,2,2,-0.275,1.7003 } ); +cells.push_back( {20705911,4727,119,7,1,2,-0.325,1.65073 } ); +cells.push_back( {20705921,4747,119,7,2,2,-0.325,1.7003 } ); +cells.push_back( {20805911,4728,119,8,1,2,-0.375,1.65073 } ); +cells.push_back( {20805921,4748,119,8,2,2,-0.375,1.7003 } ); +cells.push_back( {20905911,4729,119,9,1,2,-0.425,1.65073 } ); +cells.push_back( {20905921,4749,119,9,2,2,-0.425,1.7003 } ); +cells.push_back( {21005911,4730,119,10,1,2,-0.475,1.65073 } ); +cells.push_back( {21005921,4750,119,10,2,2,-0.475,1.7003 } ); +cells.push_back( {21105911,4731,119,11,1,2,-0.525,1.65073 } ); +cells.push_back( {21105921,4751,119,11,2,2,-0.525,1.7003 } ); +cells.push_back( {21205911,4732,119,12,1,2,-0.575,1.65073 } ); +cells.push_back( {21205921,4752,119,12,2,2,-0.575,1.7003 } ); +cells.push_back( {21305911,4733,119,13,1,2,-0.625,1.65073 } ); +cells.push_back( {21305921,4753,119,13,2,2,-0.625,1.7003 } ); +cells.push_back( {21405911,4734,119,14,1,2,-0.675,1.65073 } ); +cells.push_back( {21405921,4754,119,14,2,2,-0.675,1.7003 } ); +cells.push_back( {21505911,4735,119,15,1,2,-0.725,1.65073 } ); +cells.push_back( {21505921,4755,119,15,2,2,-0.725,1.7003 } ); +cells.push_back( {21605911,4736,119,16,1,2,-0.775,1.65073 } ); +cells.push_back( {21605921,4756,119,16,2,2,-0.775,1.7003 } ); +cells.push_back( {21705911,4737,119,17,1,2,-0.825,1.65073 } ); +cells.push_back( {21705921,4757,119,17,2,2,-0.825,1.7003 } ); +cells.push_back( {21805911,4738,119,18,1,2,-0.875,1.65073 } ); +cells.push_back( {21805921,4758,119,18,2,2,-0.875,1.7003 } ); +cells.push_back( {21905911,4739,119,19,1,2,-0.925,1.65073 } ); +cells.push_back( {21905921,4759,119,19,2,2,-0.925,1.7003 } ); +cells.push_back( {22005911,4740,119,20,1,2,-0.967,1.65073 } ); +cells.push_back( {22005921,4760,119,20,2,2,-0.967,1.7003 } ); +cells.push_back( {20105912,4721,119,1,1,1,-0.02675,1.65073 } ); +cells.push_back( {20105922,4741,119,1,2,1,-0.02675,1.7003 } ); +cells.push_back( {20205912,4722,119,2,1,1,-0.075,1.65073 } ); +cells.push_back( {20205922,4742,119,2,2,1,-0.075,1.7003 } ); +cells.push_back( {20305912,4723,119,3,1,1,-0.125,1.65073 } ); +cells.push_back( {20305922,4743,119,3,2,1,-0.125,1.7003 } ); +cells.push_back( {20405912,4724,119,4,1,1,-0.175,1.65073 } ); +cells.push_back( {20405922,4744,119,4,2,1,-0.175,1.7003 } ); +cells.push_back( {20505912,4725,119,5,1,1,-0.225,1.65073 } ); +cells.push_back( {20505922,4745,119,5,2,1,-0.225,1.7003 } ); +cells.push_back( {20605912,4726,119,6,1,1,-0.275,1.65073 } ); +cells.push_back( {20605922,4746,119,6,2,1,-0.275,1.7003 } ); +cells.push_back( {20705912,4727,119,7,1,1,-0.325,1.65073 } ); +cells.push_back( {20705922,4747,119,7,2,1,-0.325,1.7003 } ); +cells.push_back( {20805912,4728,119,8,1,1,-0.375,1.65073 } ); +cells.push_back( {20805922,4748,119,8,2,1,-0.375,1.7003 } ); +cells.push_back( {20905912,4729,119,9,1,1,-0.425,1.65073 } ); +cells.push_back( {20905922,4749,119,9,2,1,-0.425,1.7003 } ); +cells.push_back( {21005912,4730,119,10,1,1,-0.475,1.65073 } ); +cells.push_back( {21005922,4750,119,10,2,1,-0.475,1.7003 } ); +cells.push_back( {21105912,4731,119,11,1,1,-0.525,1.65073 } ); +cells.push_back( {21105922,4751,119,11,2,1,-0.525,1.7003 } ); +cells.push_back( {21205912,4732,119,12,1,1,-0.575,1.65073 } ); +cells.push_back( {21205922,4752,119,12,2,1,-0.575,1.7003 } ); +cells.push_back( {21305912,4733,119,13,1,1,-0.625,1.65073 } ); +cells.push_back( {21305922,4753,119,13,2,1,-0.625,1.7003 } ); +cells.push_back( {21405912,4734,119,14,1,1,-0.675,1.65073 } ); +cells.push_back( {21405922,4754,119,14,2,1,-0.675,1.7003 } ); +cells.push_back( {21505912,4735,119,15,1,1,-0.725,1.65073 } ); +cells.push_back( {21505922,4755,119,15,2,1,-0.725,1.7003 } ); +cells.push_back( {21605912,4736,119,16,1,1,-0.775,1.65073 } ); +cells.push_back( {21605922,4756,119,16,2,1,-0.775,1.7003 } ); +cells.push_back( {21705912,4737,119,17,1,1,-0.825,1.65073 } ); +cells.push_back( {21705922,4757,119,17,2,1,-0.825,1.7003 } ); +cells.push_back( {21805912,4738,119,18,1,1,-0.875,1.65073 } ); +cells.push_back( {21805922,4758,119,18,2,1,-0.875,1.7003 } ); +cells.push_back( {21905912,4739,119,19,1,1,-0.925,1.65073 } ); +cells.push_back( {21905922,4759,119,19,2,1,-0.925,1.7003 } ); +cells.push_back( {22005912,4740,119,20,1,1,-0.967,1.65073 } ); +cells.push_back( {22005922,4760,119,20,2,1,-0.967,1.7003 } ); +cells.push_back( {20106011,4761,120,1,1,2,-0.02675,1.75545 } ); +cells.push_back( {20106021,4781,120,1,2,2,-0.02675,1.80502 } ); +cells.push_back( {20206011,4762,120,2,1,2,-0.075,1.75545 } ); +cells.push_back( {20206021,4782,120,2,2,2,-0.075,1.80502 } ); +cells.push_back( {20306011,4763,120,3,1,2,-0.125,1.75545 } ); +cells.push_back( {20306021,4783,120,3,2,2,-0.125,1.80502 } ); +cells.push_back( {20406011,4764,120,4,1,2,-0.175,1.75545 } ); +cells.push_back( {20406021,4784,120,4,2,2,-0.175,1.80502 } ); +cells.push_back( {20506011,4765,120,5,1,2,-0.225,1.75545 } ); +cells.push_back( {20506021,4785,120,5,2,2,-0.225,1.80502 } ); +cells.push_back( {20606011,4766,120,6,1,2,-0.275,1.75545 } ); +cells.push_back( {20606021,4786,120,6,2,2,-0.275,1.80502 } ); +cells.push_back( {20706011,4767,120,7,1,2,-0.325,1.75545 } ); +cells.push_back( {20706021,4787,120,7,2,2,-0.325,1.80502 } ); +cells.push_back( {20806011,4768,120,8,1,2,-0.375,1.75545 } ); +cells.push_back( {20806021,4788,120,8,2,2,-0.375,1.80502 } ); +cells.push_back( {20906011,4769,120,9,1,2,-0.425,1.75545 } ); +cells.push_back( {20906021,4789,120,9,2,2,-0.425,1.80502 } ); +cells.push_back( {21006011,4770,120,10,1,2,-0.475,1.75545 } ); +cells.push_back( {21006021,4790,120,10,2,2,-0.475,1.80502 } ); +cells.push_back( {21106011,4771,120,11,1,2,-0.525,1.75545 } ); +cells.push_back( {21106021,4791,120,11,2,2,-0.525,1.80502 } ); +cells.push_back( {21206011,4772,120,12,1,2,-0.575,1.75545 } ); +cells.push_back( {21206021,4792,120,12,2,2,-0.575,1.80502 } ); +cells.push_back( {21306011,4773,120,13,1,2,-0.625,1.75545 } ); +cells.push_back( {21306021,4793,120,13,2,2,-0.625,1.80502 } ); +cells.push_back( {21406011,4774,120,14,1,2,-0.675,1.75545 } ); +cells.push_back( {21406021,4794,120,14,2,2,-0.675,1.80502 } ); +cells.push_back( {21506011,4775,120,15,1,2,-0.725,1.75545 } ); +cells.push_back( {21506021,4795,120,15,2,2,-0.725,1.80502 } ); +cells.push_back( {21606011,4776,120,16,1,2,-0.775,1.75545 } ); +cells.push_back( {21606021,4796,120,16,2,2,-0.775,1.80502 } ); +cells.push_back( {21706011,4777,120,17,1,2,-0.825,1.75545 } ); +cells.push_back( {21706021,4797,120,17,2,2,-0.825,1.80502 } ); +cells.push_back( {21806011,4778,120,18,1,2,-0.875,1.75545 } ); +cells.push_back( {21806021,4798,120,18,2,2,-0.875,1.80502 } ); +cells.push_back( {21906011,4779,120,19,1,2,-0.925,1.75545 } ); +cells.push_back( {21906021,4799,120,19,2,2,-0.925,1.80502 } ); +cells.push_back( {22006011,4780,120,20,1,2,-0.967,1.75545 } ); +cells.push_back( {22006021,4800,120,20,2,2,-0.967,1.80502 } ); +cells.push_back( {20106012,4761,120,1,1,1,-0.02675,1.75545 } ); +cells.push_back( {20106022,4781,120,1,2,1,-0.02675,1.80502 } ); +cells.push_back( {20206012,4762,120,2,1,1,-0.075,1.75545 } ); +cells.push_back( {20206022,4782,120,2,2,1,-0.075,1.80502 } ); +cells.push_back( {20306012,4763,120,3,1,1,-0.125,1.75545 } ); +cells.push_back( {20306022,4783,120,3,2,1,-0.125,1.80502 } ); +cells.push_back( {20406012,4764,120,4,1,1,-0.175,1.75545 } ); +cells.push_back( {20406022,4784,120,4,2,1,-0.175,1.80502 } ); +cells.push_back( {20506012,4765,120,5,1,1,-0.225,1.75545 } ); +cells.push_back( {20506022,4785,120,5,2,1,-0.225,1.80502 } ); +cells.push_back( {20606012,4766,120,6,1,1,-0.275,1.75545 } ); +cells.push_back( {20606022,4786,120,6,2,1,-0.275,1.80502 } ); +cells.push_back( {20706012,4767,120,7,1,1,-0.325,1.75545 } ); +cells.push_back( {20706022,4787,120,7,2,1,-0.325,1.80502 } ); +cells.push_back( {20806012,4768,120,8,1,1,-0.375,1.75545 } ); +cells.push_back( {20806022,4788,120,8,2,1,-0.375,1.80502 } ); +cells.push_back( {20906012,4769,120,9,1,1,-0.425,1.75545 } ); +cells.push_back( {20906022,4789,120,9,2,1,-0.425,1.80502 } ); +cells.push_back( {21006012,4770,120,10,1,1,-0.475,1.75545 } ); +cells.push_back( {21006022,4790,120,10,2,1,-0.475,1.80502 } ); +cells.push_back( {21106012,4771,120,11,1,1,-0.525,1.75545 } ); +cells.push_back( {21106022,4791,120,11,2,1,-0.525,1.80502 } ); +cells.push_back( {21206012,4772,120,12,1,1,-0.575,1.75545 } ); +cells.push_back( {21206022,4792,120,12,2,1,-0.575,1.80502 } ); +cells.push_back( {21306012,4773,120,13,1,1,-0.625,1.75545 } ); +cells.push_back( {21306022,4793,120,13,2,1,-0.625,1.80502 } ); +cells.push_back( {21406012,4774,120,14,1,1,-0.675,1.75545 } ); +cells.push_back( {21406022,4794,120,14,2,1,-0.675,1.80502 } ); +cells.push_back( {21506012,4775,120,15,1,1,-0.725,1.75545 } ); +cells.push_back( {21506022,4795,120,15,2,1,-0.725,1.80502 } ); +cells.push_back( {21606012,4776,120,16,1,1,-0.775,1.75545 } ); +cells.push_back( {21606022,4796,120,16,2,1,-0.775,1.80502 } ); +cells.push_back( {21706012,4777,120,17,1,1,-0.825,1.75545 } ); +cells.push_back( {21706022,4797,120,17,2,1,-0.825,1.80502 } ); +cells.push_back( {21806012,4778,120,18,1,1,-0.875,1.75545 } ); +cells.push_back( {21806022,4798,120,18,2,1,-0.875,1.80502 } ); +cells.push_back( {21906012,4779,120,19,1,1,-0.925,1.75545 } ); +cells.push_back( {21906022,4799,120,19,2,1,-0.925,1.80502 } ); +cells.push_back( {22006012,4780,120,20,1,1,-0.967,1.75545 } ); +cells.push_back( {22006022,4800,120,20,2,1,-0.967,1.80502 } ); + +}; diff --git a/StRoot/StGeant4Maker/tests/unit_test_epd_hits.C b/StRoot/StGeant4Maker/tests/unit_test_epd_hits.C new file mode 100644 index 00000000000..ecd6fd9a169 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_epd_hits.C @@ -0,0 +1,203 @@ +#include "tests/unit_tests.h" + +#include "StEpdUtil/StEpdGeom.h" + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ +void throw_muon_in_epd_tile( double eta, double phid, int charge = 1 ) { + + throw_muon( eta, phid, 10.0, charge ); // energetic + _eta = eta; + _phid = phid; + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_epd_hit") ); + +} + +//___________________________________________________________________ +void unit_test_epd_hits() { + + gROOT->ProcessLine("initChain();"); + + if ( 0 == hasRuntimeArg("epdutil") ) { + std::cout << "Please re-run with --epdutil option" << std::endl; + assert(0); + } + + StEpdGeom epd; + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and EPD hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + TVector3 direction; + + for ( int eastwest=-1; eastwest<=+1; eastwest+=2 ) { + for ( int supersector=1; supersector<=12; supersector++ ) { + for ( int tilenumber=1; tilenumber<=31; tilenumber++ ) { + + LOG_TEST << "------------------------------------------------------------------" << std::endl; + LOG_TEST << "eastwest = " << eastwest << std::endl; + LOG_TEST << "supersector = " << supersector << std::endl; + LOG_TEST << "tilenumber = " << tilenumber << std::endl; + + /* from g2t_volume_id + " EPD volume_id " + " 100,000 : east or west " + " 1,000 : Position clock wise, 1 to 12 " + " 10 : Tile number 1 to 31, refer EPD Drupal page" + " 1 : 1 T1 trap or T2 thin; 0 T1 triangular or T2 thick + */ + + int expected_id = + 100000 * (3+eastwest)/2 + + 1000 * supersector + + 10 * tilenumber ; + // we cannot target further... + direction = epd.TileCenter( supersector, tilenumber, eastwest ); + + throw_muon_in_epd_tile( direction.Eta(), direction.Phi()*180.0/TMath::Pi() ); + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + return PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the EPD", [=](const g2t_track_st* t){ + std::string result = TODO; + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( Form("The track should have an eta=%f",_eta), [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + return TMath::Abs(t->eta-_eta)<1E-5 ?PASS:FAIL; + }); + check_track( "Expect 1 hit in the dev2021 geometry", [=](const g2t_track_st* t){ + int n = t->n_epd_hit; + std::string result = FAIL; + if ( n==1 ) result = PASS; + result = Form(" n=%i ",n) + result; + return result; + }); + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + if ( 1!=hit->track_p ) continue; // not interested in secondaries + + check_epd_hit( "Print the hit...", hit, [=](const g2t_epd_hit_st* h) { + LOG_TEST << "id=" << h->id + << " track_p=" << h->track_p + << " volume_id=" << h->volume_id + << " de=" << h->de + << std::endl; + return PASS; + }); + + check_epd_hit( "The hit should have a nonzero volume_id",hit,[=](const g2t_epd_hit_st* h) { + std::string result = FAIL; + if ( h->volume_id > 0 ) result = PASS; + result = Form(" volumeId=%i ", h->volume_id ) + result; + return result; + }); + check_epd_hit( "The decoded side from volume_id should be 1 or 2 (E or W)",hit,[=](const g2t_epd_hit_st* h) { + std::string result = FAIL; + int ew = h->volume_id / 100000; + if ( ew == 1 || ew == 2 ) result = PASS; + result = Form("(eastwest=%i) ",ew) + result; + return result; + }); + check_epd_hit( "The decoded position from volume_id should be 1..12",hit,[=](const g2t_epd_hit_st* h) { + std::string result = FAIL; + int ew = h->volume_id % 100000 / 1000; + if ( ew >= 1 && ew <= 12 ) result = PASS; + result = Form("(position=%i) ",ew) + result; + return result; + }); + check_epd_hit( "The decoded tile from volume_id should be 1..31",hit,[=](const g2t_epd_hit_st* h) { + std::string result = FAIL; + int ew = h->volume_id % 1000 / 10; + if ( ew >= 1 && ew <= 31 ) result = PASS; + result = Form("(tile=%i) ",ew) + result; + return result; + }); + check_epd_hit( "The decoded tile shape from volume_id should be 0..1",hit,[=](const g2t_epd_hit_st* h) { + std::string result = FAIL; + int ew = h->volume_id % 10; + if ( ew == 1 || ew == 0 ) result = PASS; + result = Form("(in/out=%i) ",ew) + result; + return result; + }); + check_epd_hit( Form("The volume_id should be %i or %i",expected_id,expected_id+1),hit,[=](const g2t_epd_hit_st* h) { + std::string result = FAIL; + int ew = h->volume_id; + if ( ew == expected_id ) result=PASS; + else if ( ew == expected_id+1 ) result=PASS; + result = Form("(expected=%i (or+1) volumeId=%i eta=%f phi=%f) ",expected_id,ew,_eta,_phid) + result; + return result; + }); + + } + + } + + } + + } + +} diff --git a/StRoot/StGeant4Maker/tests/unit_test_epd_response.C b/StRoot/StGeant4Maker/tests/unit_test_epd_response.C new file mode 100644 index 00000000000..34f3ca45db2 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_epd_response.C @@ -0,0 +1,103 @@ +#include "tests/unit_tests.h" +#include + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ +void throw_muon_in_epd_tile( double eta, double phid, int charge = 1 ) { + + throw_muon( eta, phid, 10.0, charge ); // energetic + _eta = eta; + _phid = phid; + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_epd_hit") ); + +} + +//___________________________________________________________________ +void unit_test_epd_response( int nevents=5000 ) { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and EPD hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + auto* chain = StMaker::GetChain(); + + auto sumHits = [=](const char* name, float sf=1.0 ) -> double { + assert(sf>0); + float sum = 0.; + auto* table = dynamic_cast( chain->GetDataSet( name ) ) ; + if (0!=table) + for ( int i=0;iGetNRows();i++ ){ + const g2t_epd_hit_st* hit = static_cast( table->At(i) ); + if ( hit ) sum+=hit->de; + }; + return 1000.0*sum; + }; + + auto throw_particle = [=]( std::string type, int n=1, const double E=0.500, double etaMn=2.15, double etaMx=5.08 ) { + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + for ( int i=0;iAddParticle(type.c_str()); + auto _mass = _part->GetMass(); // Get the mass of the proton + if ( E > _mass ) { + auto _pmom = TMath::Sqrt(E*E-_mass*_mass); + auto _eta = gRandom->Rndm() * ( etaMx - etaMn ) + etaMn; // random angle + auto _phi = gRandom->Rndm() * TMath::TwoPi(); + TVector3 unit(0,0,1); + unit.SetPtEtaPhi(1.0,_eta,_phi); + unit=unit.Unit(); + auto momentum=_pmom*unit; + momentum.Print(); + _part->SetPx( momentum[0] ); + _part->SetPy( momentum[1] ); + _part->SetPz( momentum[2] ); + _part->SetVx( 0 ); + _part->SetVy( 0 ); + _part->SetVz( 0 ); + } + else { + LOG_INFO << "ERROR: mass > E (no particle simulated)" << endm; + } + } + chain->Clear(); + chain->Make(); + }; + + TFile* file = TFile::Open("epd.response.root","recreate"); + TH1F* hOneMip = new TH1F("hOneMip","Single muon incident @ 500 MeV; dE [MeV]",100,0.,10.0); hOneMip->SetLineColor(6); + TH1F* hTwoMip = new TH1F("hTwoMip","Two muons incident @ 500 MeV; dE [MeV]",100,0.,10.0); hTwoMip->SetLineColor(3); + TH1F* hRedMip = new TH1F("hRedMip","Three muons incident @ 500 MeV; dE [MeV]",100,0.,10.0); hRedMip->SetLineColor(2); + TH1F* hBluMip = new TH1F("hBluMip","Four muons incident @ 500 MeV; dE [MeV]",100,0.,10.0); hBluMip->SetLineColor(4); + TH1F* hSumMip = new TH1F("hSumMip","Four muons incident @ 500 MeV; dE [MeV]",100,0.,10.0); + + for ( int ievent=0;ieventFill( sum = sumHits( "g2t_epd_hit") ); + hSumMip->Fill( sum ); + throw_particle( "mu+", 2 ); + hTwoMip->Fill( sum = sumHits( "g2t_epd_hit") ); + hSumMip->Fill( sum ); + throw_particle( "mu+", 3 ); + hRedMip->Fill( sum = sumHits( "g2t_epd_hit") ); + hSumMip->Fill( sum ); + throw_particle( "mu+", 4 ); + hBluMip->Fill( sum = sumHits( "g2t_epd_hit") ); + hSumMip->Fill( sum ); + } + + file->Write(); + delete file; + +} diff --git a/StRoot/StGeant4Maker/tests/unit_test_fcs_hits.C b/StRoot/StGeant4Maker/tests/unit_test_fcs_hits.C new file mode 100644 index 00000000000..d6843de85a9 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_fcs_hits.C @@ -0,0 +1,4220 @@ +#include "tests/unit_tests.h" + +#include +#include + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; + +struct Cell { + int northSouth; + int cellId; + double eta; + double phi; + double x,y,z; + int volumeId; // expected Volume ID +}; + +#ifndef __CINT__ +// Expected volume IDs + +#endif + + +//___________________________________________________________________ +void unit_test_fcs_hits() { + + gROOT->ProcessLine("initChain();"); + std::vector wcal = { + { 0, 0, 2.73468,102.1735,-19.9044, 92.2680,723.9693, 1001} +, { 0, 1, 2.72053,105.4456,-25.4938, 92.2680,723.8004, 1002} +, { 0, 2, 2.70348,108.6177,-31.0833, 92.2680,723.6316, 1003} +, { 0, 3, 2.68384,111.6758,-36.6727, 92.2680,723.4628, 1004} +, { 0, 4, 2.66192,114.6095,-42.2622, 92.2680,723.2940, 1005} +, { 0, 5, 2.63806,117.4120,-47.8516, 92.2680,723.1252, 1006} +, { 0, 6, 2.61255,120.0792,-53.4411, 92.2680,722.9563, 1007} +, { 0, 7, 2.58571,122.6100,-59.0305, 92.2680,722.7875, 1008} +, { 0, 8, 2.55780,125.0055,-64.6200, 92.2680,722.6187, 1009} +, { 0, 9, 2.52908,127.2686,-70.2094, 92.2680,722.4499, 1010} +, { 0, 10, 2.49976,129.4034,-75.7989, 92.2680,722.2811, 1011} +, { 0, 11, 2.47004,131.4151,-81.3883, 92.2680,722.1122, 1012} +, { 0, 12, 2.44010,133.3095,-86.9778, 92.2680,721.9434, 1013} +, { 0, 13, 2.41007,135.0928,-92.5672, 92.2680,721.7746, 1014} +, { 0, 14, 2.38007,136.7712,-98.1567, 92.2680,721.6058, 1015} +, { 0, 15, 2.35020,138.3513,-103.7461, 92.2680,721.4369, 1016} +, { 0, 16, 2.32055,139.8391,-109.3356, 92.2680,721.2681, 1017} +, { 0, 17, 2.29119,141.2406,-114.9250, 92.2680,721.0993, 1018} +, { 0, 18, 2.26216,142.5617,-120.5145, 92.2680,720.9305, 1019} +, { 0, 19, 2.23352,143.8077,-126.1039, 92.2680,720.7617, 1020} +, { 0, 20, 2.20528,144.9839,-131.6934, 92.2680,720.5928, 1021} +, { 0, 21, 2.17749,146.0949,-137.2828, 92.2680,720.4240, 1022} +, { 0, 22, 2.79377,102.9332,-19.9044, 86.6760,723.9693, 1023} +, { 0, 23, 2.77787,106.3901,-25.4938, 86.6760,723.8004, 1024} +, { 0, 24, 2.75879,109.7286,-31.0833, 86.6760,723.6316, 1025} +, { 0, 25, 2.73688,112.9333,-36.6727, 86.6760,723.4628, 1026} +, { 0, 26, 2.71256,115.9933,-42.2622, 86.6760,723.2940, 1027} +, { 0, 27, 2.68619,118.9020,-47.8516, 86.6760,723.1252, 1028} +, { 0, 28, 2.65815,121.6564,-53.4411, 86.6760,722.9563, 1029} +, { 0, 29, 2.62878,124.2567,-59.0305, 86.6760,722.7875, 1030} +, { 0, 30, 2.59840,126.7058,-64.6200, 86.6760,722.6187, 1031} +, { 0, 31, 2.56728,129.0082,-70.2094, 86.6760,722.4499, 1032} +, { 0, 32, 2.53567,131.1700,-75.7989, 86.6760,722.2811, 1033} +, { 0, 33, 2.50377,133.1979,-81.3883, 86.6760,722.1122, 1034} +, { 0, 34, 2.47176,135.0996,-86.9778, 86.6760,721.9434, 1035} +, { 0, 35, 2.43978,136.8825,-92.5672, 86.6760,721.7746, 1036} +, { 0, 36, 2.40796,138.5543,-98.1567, 86.6760,721.6058, 1037} +, { 0, 37, 2.37639,140.1225,-103.7461, 86.6760,721.4369, 1038} +, { 0, 38, 2.34515,141.5943,-109.3356, 86.6760,721.2681, 1039} +, { 0, 39, 2.31430,142.9765,-114.9250, 86.6760,721.0993, 1040} +, { 0, 40, 2.28390,144.2757,-120.5145, 86.6760,720.9305, 1041} +, { 0, 41, 2.25397,145.4978,-126.1039, 86.6760,720.7617, 1042} +, { 0, 42, 2.22455,146.6485,-131.6934, 86.6760,720.5928, 1043} +, { 0, 43, 2.19566,147.7330,-137.2828, 86.6760,720.4240, 1044} +, { 0, 44, 2.85646,103.7921,-19.9044, 81.0840,723.9693, 1045} +, { 0, 45, 2.83847,107.4538,-25.4938, 81.0840,723.8004, 1046} +, { 0, 46, 2.81697,110.9741,-31.0833, 81.0840,723.6316, 1047} +, { 0, 47, 2.79242,114.3363,-36.6727, 81.0840,723.4628, 1048} +, { 0, 48, 2.76529,117.5292,-42.2622, 81.0840,723.2940, 1049} +, { 0, 49, 2.73604,120.5469,-47.8516, 81.0840,723.1252, 1050} +, { 0, 50, 2.70512,123.3882,-53.4411, 81.0840,722.9563, 1051} +, { 0, 51, 2.67292,126.0552,-59.0305, 81.0840,722.7875, 1052} +, { 0, 52, 2.63979,128.5531,-64.6200, 81.0840,722.6187, 1053} +, { 0, 53, 2.60604,130.8888,-70.2094, 81.0840,722.4499, 1054} +, { 0, 54, 2.57192,133.0705,-75.7989, 81.0840,722.2811, 1055} +, { 0, 55, 2.53766,135.1073,-81.3883, 81.0840,722.1122, 1056} +, { 0, 56, 2.50344,137.0085,-86.9778, 81.0840,721.9434, 1057} +, { 0, 57, 2.46939,138.7834,-92.5672, 81.0840,721.7746, 1058} +, { 0, 58, 2.43565,140.4410,-98.1567, 81.0840,721.6058, 1059} +, { 0, 59, 2.40229,141.9902,-103.7461, 81.0840,721.4369, 1060} +, { 0, 60, 2.36940,143.4391,-109.3356, 81.0840,721.2681, 1061} +, { 0, 61, 2.33703,144.7956,-114.9250, 81.0840,721.0993, 1062} +, { 0, 62, 2.30521,146.0667,-120.5145, 81.0840,720.9305, 1063} +, { 0, 63, 2.27398,147.2592,-126.1039, 81.0840,720.7617, 1064} +, { 0, 64, 2.24335,148.3793,-131.6934, 81.0840,720.5928, 1065} +, { 0, 65, 2.21334,149.4324,-137.2828, 81.0840,720.4240, 1066} +, { 0, 66, 2.92316,104.7706,-19.9044, 75.4920,723.9693, 1067} +, { 0, 67, 2.90265,108.6599,-25.4938, 75.4920,723.8004, 1068} +, { 0, 68, 2.87827,112.3790,-31.0833, 75.4920,723.6316, 1069} +, { 0, 69, 2.85058,115.9097,-36.6727, 75.4920,723.4628, 1070} +, { 0, 70, 2.82018,119.2411,-42.2622, 75.4920,723.2940, 1071} +, { 0, 71, 2.78763,122.3691,-47.8516, 75.4920,723.1252, 1072} +, { 0, 72, 2.75343,125.2948,-53.4411, 75.4920,722.9563, 1073} +, { 0, 73, 2.71804,128.0234,-59.0305, 75.4920,722.7875, 1074} +, { 0, 74, 2.68185,130.5630,-64.6200, 75.4920,722.6187, 1075} +, { 0, 75, 2.64520,132.9236,-70.2094, 75.4920,722.4499, 1076} +, { 0, 76, 2.60837,135.1162,-75.7989, 75.4920,722.2811, 1077} +, { 0, 77, 2.57157,137.1524,-81.3883, 75.4920,722.1122, 1078} +, { 0, 78, 2.53499,139.0438,-86.9778, 75.4920,721.9434, 1079} +, { 0, 79, 2.49876,140.8015,-92.5672, 75.4920,721.7746, 1080} +, { 0, 80, 2.46300,142.4362,-98.1567, 75.4920,721.6058, 1081} +, { 0, 81, 2.42779,143.9581,-103.7461, 75.4920,721.4369, 1082} +, { 0, 82, 2.39320,145.3764,-109.3356, 75.4920,721.2681, 1083} +, { 0, 83, 2.35925,146.6999,-114.9250, 75.4920,721.0993, 1084} +, { 0, 84, 2.32600,147.9364,-120.5145, 75.4920,720.9305, 1085} +, { 0, 85, 2.29344,149.0932,-126.1039, 75.4920,720.7617, 1086} +, { 0, 86, 2.26159,150.1769,-131.6934, 75.4920,720.5928, 1087} +, { 0, 87, 2.23046,151.1936,-137.2828, 75.4920,720.4240, 1088} +, { 0, 88, 2.99436,105.8946,-19.9044, 69.9000,723.9693, 1089} +, { 0, 89, 2.97079,110.0378,-25.4938, 69.9000,723.8004, 1090} +, { 0, 90, 2.94293,113.9738,-31.0833, 69.9000,723.6316, 1091} +, { 0, 91, 2.91152,117.6835,-36.6727, 69.9000,723.4628, 1092} +, { 0, 92, 2.87729,121.1575,-42.2622, 69.9000,723.2940, 1093} +, { 0, 93, 2.84091,124.3945,-47.8516, 69.9000,723.1252, 1094} +, { 0, 94, 2.80297,127.3992,-53.4411, 69.9000,722.9563, 1095} +, { 0, 95, 2.76400,130.1811,-59.0305, 69.9000,722.7875, 1096} +, { 0, 96, 2.72443,132.7522,-64.6200, 69.9000,722.6187, 1097} +, { 0, 97, 2.68461,135.1265,-70.2094, 69.9000,722.4499, 1098} +, { 0, 98, 2.64483,137.3185,-75.7989, 69.9000,722.2811, 1099} +, { 0, 99, 2.60531,139.3425,-81.3883, 69.9000,722.1122, 1100} +, { 0,100, 2.56623,141.2128,-86.9778, 69.9000,721.9434, 1101} +, { 0,101, 2.52771,142.9426,-92.5672, 69.9000,721.7746, 1102} +, { 0,102, 2.48986,144.5443,-98.1567, 69.9000,721.6058, 1103} +, { 0,103, 2.45274,146.0295,-103.7461, 69.9000,721.4369, 1104} +, { 0,104, 2.41639,147.4086,-109.3356, 69.9000,721.2681, 1105} +, { 0,105, 2.38085,148.6911,-114.9250, 69.9000,721.0993, 1106} +, { 0,106, 2.34613,149.8857,-120.5145, 69.9000,720.9305, 1107} +, { 0,107, 2.31224,151.0002,-126.1039, 69.9000,720.7617, 1108} +, { 0,108, 2.27918,152.0416,-131.6934, 69.9000,720.5928, 1109} +, { 0,109, 2.24693,153.0163,-137.2828, 69.9000,720.4240, 1110} +, { 0,110, 3.07062,107.1981,-19.9044, 64.3080,723.9693, 1111} +, { 0,111, 3.04327,111.6250,-25.4938, 64.3080,723.8004, 1112} +, { 0,112, 3.01119,115.7968,-31.0833, 64.3080,723.6316, 1113} +, { 0,113, 2.97534,119.6947,-36.6727, 64.3080,723.4628, 1114} +, { 0,114, 2.93660,123.3123,-42.2622, 64.3080,723.2940, 1115} +, { 0,115, 2.89579,126.6530,-47.8516, 64.3080,723.1252, 1116} +, { 0,116, 2.85360,129.7272,-53.4411, 64.3080,722.9563, 1117} +, { 0,117, 2.81062,132.5499,-59.0305, 64.3080,722.7875, 1118} +, { 0,118, 2.76730,135.1386,-64.6200, 64.3080,722.6187, 1119} +, { 0,119, 2.72403,137.5120,-70.2094, 64.3080,722.4499, 1120} +, { 0,120, 2.68108,139.6886,-75.7989, 64.3080,722.2811, 1121} +, { 0,121, 2.63867,141.6864,-81.3883, 64.3080,722.1122, 1122} +, { 0,122, 2.59696,143.5222,-86.9778, 64.3080,721.9434, 1123} +, { 0,123, 2.55606,145.2116,-92.5672, 64.3080,721.7746, 1124} +, { 0,124, 2.51604,146.7689,-98.1567, 64.3080,721.6058, 1125} +, { 0,125, 2.47696,148.2069,-103.7461, 64.3080,721.4369, 1126} +, { 0,126, 2.43883,149.5372,-109.3356, 64.3080,721.2681, 1127} +, { 0,127, 2.40168,150.7702,-114.9250, 64.3080,721.0993, 1128} +, { 0,128, 2.36550,151.9151,-120.5145, 64.3080,720.9305, 1129} +, { 0,129, 2.33028,152.9802,-126.1039, 64.3080,720.7617, 1130} +, { 0,130, 2.29600,153.9730,-131.6934, 64.3080,720.5928, 1131} +, { 0,131, 2.26264,154.9000,-137.2828, 64.3080,720.4240, 1132} +, { 0,132, 3.15262,108.7263,-19.9044, 58.7160,723.9693, 1133} +, { 0,133, 3.12055,113.4699,-25.4938, 58.7160,723.8004, 1134} +, { 0,134, 3.08329,117.8960,-31.0833, 58.7160,723.6316, 1135} +, { 0,135, 3.04208,121.9880,-36.6727, 58.7160,723.4628, 1136} +, { 0,136, 2.99802,125.7453,-42.2622, 58.7160,723.2940, 1137} +, { 0,137, 2.95209,129.1789,-47.8516, 58.7160,723.1252, 1138} +, { 0,138, 2.90507,132.3073,-53.4411, 58.7160,722.9563, 1139} +, { 0,139, 2.85760,135.1530,-59.0305, 58.7160,722.7875, 1140} +, { 0,140, 2.81018,137.7406,-64.6200, 58.7160,722.6187, 1141} +, { 0,141, 2.76317,140.0943,-70.2094, 58.7160,722.4499, 1142} +, { 0,142, 2.71684,142.2376,-75.7989, 58.7160,722.2811, 1143} +, { 0,143, 2.67138,144.1922,-81.3883, 58.7160,722.1122, 1144} +, { 0,144, 2.62693,145.9779,-86.9778, 58.7160,721.9434, 1145} +, { 0,145, 2.58357,147.6128,-92.5672, 58.7160,721.7746, 1146} +, { 0,146, 2.54134,149.1127,-98.1567, 58.7160,721.6058, 1147} +, { 0,147, 2.50027,150.4919,-103.7461, 58.7160,721.4369, 1148} +, { 0,148, 2.46036,151.7631,-109.3356, 58.7160,721.2681, 1149} +, { 0,149, 2.42159,152.9372,-114.9250, 58.7160,721.0993, 1150} +, { 0,150, 2.38396,154.0241,-120.5145, 58.7160,720.9305, 1151} +, { 0,151, 2.34742,155.0326,-126.1039, 58.7160,720.7617, 1152} +, { 0,152, 2.31195,155.9701,-131.6934, 58.7160,720.5928, 1153} +, { 0,153, 2.27752,156.8436,-137.2828, 58.7160,720.4240, 1154} +, { 0,154, 3.24112,110.5398,-19.9044, 53.1240,723.9693, 1155} +, { 0,155, 3.20306,115.6360,-25.4938, 53.1240,723.8004, 1156} +, { 0,156, 3.15939,120.3322,-31.0833, 53.1240,723.6316, 1157} +, { 0,157, 3.11170,124.6182,-36.6727, 53.1240,723.4628, 1158} +, { 0,158, 3.06136,128.5036,-42.2622, 53.1240,723.2940, 1159} +, { 0,159, 3.00950,132.0110,-47.8516, 53.1240,723.1252, 1160} +, { 0,160, 2.95701,135.1705,-53.4411, 53.1240,722.9563, 1161} +, { 0,161, 2.90458,138.0146,-59.0305, 53.1240,722.7875, 1162} +, { 0,162, 2.85268,140.5764,-64.6200, 53.1240,722.6187, 1163} +, { 0,163, 2.80167,142.8870,-70.2094, 53.1240,722.4499, 1164} +, { 0,164, 2.75177,144.9751,-75.7989, 53.1240,722.2811, 1165} +, { 0,165, 2.70314,146.8666,-81.3883, 53.1240,722.1122, 1166} +, { 0,166, 2.65587,148.5844,-86.9778, 53.1240,721.9434, 1167} +, { 0,167, 2.61000,150.1486,-92.5672, 53.1240,721.7746, 1168} +, { 0,168, 2.56554,151.5770,-98.1567, 53.1240,721.6058, 1169} +, { 0,169, 2.52248,152.8849,-103.7461, 53.1240,721.4369, 1170} +, { 0,170, 2.48079,154.0858,-109.3356, 53.1240,721.2681, 1171} +, { 0,171, 2.44044,155.1913,-114.9250, 53.1240,721.0993, 1172} +, { 0,172, 2.40138,156.2116,-120.5145, 53.1240,720.9305, 1173} +, { 0,173, 2.36356,157.1557,-126.1039, 53.1240,720.7617, 1174} +, { 0,174, 2.32693,158.0313,-131.6934, 53.1240,720.5928, 1175} +, { 0,175, 2.29145,158.8452,-137.2828, 53.1240,720.4240, 1176} +, { 0,176, 3.33697,112.7218,-19.9044, 47.5320,723.9693, 1177} +, { 0,177, 3.29123,118.2069,-25.4938, 47.5320,723.8004, 1178} +, { 0,178, 3.23955,123.1824,-31.0833, 47.5320,723.6316, 1179} +, { 0,179, 3.18399,127.6515,-36.6727, 47.5320,723.4628, 1180} +, { 0,180, 3.12622,131.6413,-42.2622, 47.5320,723.2940, 1181} +, { 0,181, 3.06756,135.1920,-47.8516, 47.5320,723.1252, 1182} +, { 0,182, 3.00894,138.3492,-53.4411, 47.5320,722.9563, 1183} +, { 0,183, 2.95105,141.1586,-59.0305, 47.5320,722.7875, 1184} +, { 0,184, 2.89434,143.6632,-64.6200, 47.5320,722.6187, 1185} +, { 0,185, 2.83909,145.9019,-70.2094, 47.5320,722.4499, 1186} +, { 0,186, 2.78548,147.9090,-75.7989, 47.5320,722.2811, 1187} +, { 0,187, 2.73359,149.7144,-81.3883, 47.5320,722.1122, 1188} +, { 0,188, 2.68346,151.3441,-86.9778, 47.5320,721.9434, 1189} +, { 0,189, 2.63507,152.8201,-92.5672, 47.5320,721.7746, 1190} +, { 0,190, 2.58839,154.1616,-98.1567, 47.5320,721.6058, 1191} +, { 0,191, 2.54337,155.3848,-103.7461, 47.5320,721.4369, 1192} +, { 0,192, 2.49994,156.5037,-109.3356, 47.5320,721.2681, 1193} +, { 0,193, 2.45805,157.5304,-114.9250, 47.5320,721.0993, 1194} +, { 0,194, 2.41760,158.4753,-120.5145, 47.5320,720.9305, 1195} +, { 0,195, 2.37855,159.3472,-126.1039, 47.5320,720.7617, 1196} +, { 0,196, 2.34082,160.1540,-131.6934, 47.5320,720.5928, 1197} +, { 0,197, 2.30435,160.9024,-137.2828, 47.5320,720.4240, 1198} +, { 0,198, 3.44112,115.3886,-19.9044, 41.9400,723.9693, 1199} +, { 0,199, 3.38535,121.2939,-25.4938, 41.9400,723.8004, 1200} +, { 0,200, 3.32359,126.5435,-31.0833, 41.9400,723.6316, 1201} +, { 0,201, 3.25848,131.1667,-36.6727, 41.9400,723.4628, 1202} +, { 0,202, 3.19200,135.2192,-42.2622, 41.9400,723.2940, 1203} +, { 0,203, 3.12558,138.7668,-47.8516, 41.9400,723.1252, 1204} +, { 0,204, 3.06017,141.8755,-53.4411, 41.9400,722.9563, 1205} +, { 0,205, 2.99638,144.6070,-59.0305, 41.9400,722.7875, 1206} +, { 0,206, 2.93457,147.0154,-64.6200, 41.9400,722.6187, 1207} +, { 0,207, 2.87492,149.1478,-70.2094, 41.9400,722.4499, 1208} +, { 0,208, 2.81751,151.0440,-75.7989, 41.9400,722.2811, 1209} +, { 0,209, 2.76234,152.7376,-81.3883, 41.9400,722.1122, 1210} +, { 0,210, 2.70936,154.2570,-86.9778, 41.9400,721.9434, 1211} +, { 0,211, 2.65849,155.6259,-92.5672, 41.9400,721.7746, 1212} +, { 0,212, 2.60964,156.8641,-98.1567, 41.9400,721.6058, 1213} +, { 0,213, 2.56272,157.9887,-103.7461, 41.9400,721.4369, 1214} +, { 0,214, 2.51763,159.0137,-109.3356, 41.9400,721.2681, 1215} +, { 0,215, 2.47425,159.9513,-114.9250, 41.9400,721.0993, 1216} +, { 0,216, 2.43250,160.8117,-120.5145, 41.9400,720.9305, 1217} +, { 0,217, 2.39229,161.6038,-126.1039, 41.9400,720.7617, 1218} +, { 0,218, 2.35352,162.3350,-131.6934, 41.9400,720.5928, 1219} +, { 0,219, 2.31611,163.0121,-137.2828, 41.9400,720.4240, 1220} +, { 0,220, 3.55444,118.7054,-19.9044, 36.3480,723.9693, 1221} +, { 0,221, 3.48543,125.0451,-25.4938, 36.3480,723.8004, 1222} +, { 0,222, 3.41095,130.5357,-31.0833, 36.3480,723.6316, 1223} +, { 0,223, 3.33429,135.2548,-36.6727, 36.3480,723.4628, 1224} +, { 0,224, 3.25769,139.3025,-42.2622, 36.3480,723.2940, 1225} +, { 0,225, 3.18259,142.7798,-47.8516, 36.3480,723.1252, 1226} +, { 0,226, 3.10980,145.7784,-53.4411, 36.3480,722.9563, 1227} +, { 0,227, 3.03977,148.3773,-59.0305, 36.3480,722.7875, 1228} +, { 0,228, 2.97268,150.6427,-64.6200, 36.3480,722.6187, 1229} +, { 0,229, 2.90856,152.6290,-70.2094, 36.3480,722.4499, 1230} +, { 0,230, 2.84736,154.3808,-75.7989, 36.3480,722.2811, 1231} +, { 0,231, 2.78895,155.9345,-81.3883, 36.3480,722.1122, 1232} +, { 0,232, 2.73320,157.3200,-86.9778, 36.3480,721.9434, 1233} +, { 0,233, 2.67994,158.5618,-92.5672, 36.3480,721.7746, 1234} +, { 0,234, 2.62903,159.6801,-98.1567, 36.3480,721.6058, 1235} +, { 0,235, 2.58031,160.6918,-103.7461, 36.3480,721.4369, 1236} +, { 0,236, 2.53364,161.6109,-109.3356, 36.3480,721.2681, 1237} +, { 0,237, 2.48889,162.4491,-114.9250, 36.3480,721.0993, 1238} +, { 0,238, 2.44592,163.2163,-120.5145, 36.3480,720.9305, 1239} +, { 0,239, 2.40463,163.9210,-126.1039, 36.3480,720.7617, 1240} +, { 0,240, 2.36490,164.5702,-131.6934, 36.3480,720.5928, 1241} +, { 0,241, 2.32664,165.1702,-137.2828, 36.3480,720.4240, 1242} +, { 0,242, 3.67753,122.9097,-19.9044, 30.7560,723.9693, 1243} +, { 0,243, 3.59084,129.6555,-25.4938, 30.7560,723.8004, 1244} +, { 0,244, 3.50036,135.3032,-31.0833, 30.7560,723.6316, 1245} +, { 0,245, 3.40996,140.0147,-36.6727, 30.7560,723.4628, 1246} +, { 0,246, 3.32187,143.9550,-42.2622, 30.7560,723.2940, 1247} +, { 0,247, 3.23727,147.2696,-47.8516, 30.7560,723.1252, 1248} +, { 0,248, 3.15668,150.0790,-53.4411, 30.7560,722.9563, 1249} +, { 0,249, 3.08024,152.4796,-59.0305, 30.7560,722.7875, 1250} +, { 0,250, 3.00785,154.5478,-64.6200, 30.7560,722.6187, 1251} +, { 0,251, 2.93934,156.3437,-70.2094, 30.7560,722.4499, 1252} +, { 0,252, 2.87446,157.9148,-75.7989, 30.7560,722.2811, 1253} +, { 0,253, 2.81296,159.2988,-81.3883, 30.7560,722.1122, 1254} +, { 0,254, 2.75459,160.5260,-86.9778, 30.7560,721.9434, 1255} +, { 0,255, 2.69910,161.6206,-92.5672, 30.7560,721.7746, 1256} +, { 0,256, 2.64628,162.6024,-98.1567, 30.7560,721.6058, 1257} +, { 0,257, 2.59590,163.4873,-103.7461, 30.7560,721.4369, 1258} +, { 0,258, 2.54780,164.2888,-109.3356, 30.7560,721.2681, 1259} +, { 0,259, 2.50180,165.0177,-114.9250, 30.7560,721.0993, 1260} +, { 0,260, 2.45773,165.6834,-120.5145, 30.7560,720.9305, 1261} +, { 0,261, 2.41547,166.2935,-126.1039, 30.7560,720.7617, 1262} +, { 0,262, 2.37488,166.8546,-131.6934, 30.7560,720.5928, 1263} +, { 0,263, 2.33586,167.3723,-137.2828, 30.7560,720.4240, 1264} +, { 0,264, 3.81002,128.3435,-19.9044, 25.1640,723.9693, 1265} +, { 0,265, 3.69973,135.3730,-25.4938, 25.1640,723.8004, 1266} +, { 0,266, 3.58950,141.0075,-31.0833, 25.1640,723.6316, 1267} +, { 0,267, 3.48319,145.5430,-36.6727, 25.1640,723.4628, 1268} +, { 0,268, 3.38250,149.2293,-42.2622, 25.1640,723.2940, 1269} +, { 0,269, 3.28794,152.2612,-47.8516, 25.1640,723.1252, 1270} +, { 0,270, 3.19945,154.7855,-53.4411, 25.1640,722.9563, 1271} +, { 0,271, 3.11669,156.9120,-59.0305, 25.1640,722.7875, 1272} +, { 0,272, 3.03920,158.7233,-64.6200, 25.1640,722.6187, 1273} +, { 0,273, 2.96654,160.2816,-70.2094, 25.1640,722.4499, 1274} +, { 0,274, 2.89824,161.6347,-75.7989, 25.1640,722.2811, 1275} +, { 0,275, 2.83391,162.8192,-81.3883, 25.1640,722.1122, 1276} +, { 0,276, 2.77316,163.8640,-86.9778, 25.1640,721.9434, 1277} +, { 0,277, 2.71566,164.7919,-92.5672, 25.1640,721.7746, 1278} +, { 0,278, 2.66113,165.6210,-98.1567, 25.1640,721.6058, 1279} +, { 0,279, 2.60929,166.3660,-103.7461, 25.1640,721.4369, 1280} +, { 0,280, 2.55992,167.0389,-109.3356, 25.1640,721.2681, 1281} +, { 0,281, 2.51282,167.6494,-114.9250, 25.1640,721.0993, 1282} +, { 0,282, 2.46779,168.2058,-120.5145, 25.1640,720.9305, 1283} +, { 0,283, 2.42469,168.7149,-126.1039, 25.1640,720.7617, 1284} +, { 0,284, 2.38336,169.1823,-131.6934, 25.1640,720.5928, 1285} +, { 0,285, 2.34367,169.6130,-137.2828, 25.1640,720.4240, 1286} +, { 0,286, 3.94910,135.4824,-19.9044, 19.5720,723.9693, 1287} +, { 0,287, 3.80805,142.4860,-25.4938, 19.5720,723.8004, 1288} +, { 0,288, 3.67443,147.8029,-31.0833, 19.5720,723.6316, 1289} +, { 0,289, 3.55067,151.9114,-36.6727, 19.5720,723.4628, 1290} +, { 0,290, 3.43695,155.1507,-42.2622, 19.5720,723.2940, 1291} +, { 0,291, 3.33256,157.7547,-47.8516, 19.5720,723.1252, 1292} +, { 0,292, 3.23653,159.8855,-53.4411, 19.5720,722.9563, 1293} +, { 0,293, 3.14791,161.6567,-59.0305, 19.5720,722.7875, 1294} +, { 0,294, 3.06580,163.1496,-64.6200, 19.5720,722.6187, 1295} +, { 0,295, 2.98943,164.4233,-70.2094, 19.5720,722.4499, 1296} +, { 0,296, 2.91813,165.5219,-75.7989, 19.5720,722.2811, 1297} +, { 0,297, 2.85133,166.4784,-81.3883, 19.5720,722.1122, 1298} +, { 0,298, 2.78853,167.3184,-86.9778, 19.5720,721.9434, 1299} +, { 0,299, 2.72933,168.0615,-92.5672, 19.5720,721.7746, 1300} +, { 0,300, 2.67334,168.7234,-98.1567, 19.5720,721.6058, 1301} +, { 0,301, 2.62027,169.3165,-103.7461, 19.5720,721.4369, 1302} +, { 0,302, 2.56984,169.8511,-109.3356, 19.5720,721.2681, 1303} +, { 0,303, 2.52182,170.3351,-114.9250, 19.5720,721.0993, 1304} +, { 0,304, 2.47600,170.7755,-120.5145, 19.5720,720.9305, 1305} +, { 0,305, 2.43219,171.1778,-126.1039, 19.5720,720.7617, 1306} +, { 0,306, 2.39025,171.5467,-131.6934, 19.5720,720.5928, 1307} +, { 0,307, 2.35002,171.8862,-137.2828, 19.5720,720.4240, 1308} +, { 0,308, 4.08674,144.9174,-19.9044, 13.9800,723.9693, 1309} +, { 0,309, 3.90818,151.2610,-25.4938, 13.9800,723.8004, 1310} +, { 0,310, 3.74920,155.7837,-31.0833, 13.9800,723.6316, 1311} +, { 0,311, 3.60806,159.1327,-36.6727, 13.9800,723.4628, 1312} +, { 0,312, 3.48210,161.6962,-42.2622, 13.9800,723.2940, 1313} +, { 0,313, 3.36886,163.7141,-47.8516, 13.9800,723.1252, 1314} +, { 0,314, 3.26628,165.3401,-53.4411, 13.9800,722.9563, 1315} +, { 0,315, 3.17268,166.6763,-59.0305, 13.9800,722.7875, 1316} +, { 0,316, 3.08672,167.7927,-64.6200, 13.9800,722.6187, 1317} +, { 0,317, 3.00732,168.7386,-70.2094, 13.9800,722.4499, 1318} +, { 0,318, 2.93359,169.5501,-75.7989, 13.9800,722.2811, 1319} +, { 0,319, 2.86481,170.2535,-81.3883, 13.9800,722.1122, 1320} +, { 0,320, 2.80039,170.8689,-86.9778, 13.9800,721.9434, 1321} +, { 0,321, 2.73983,171.4118,-92.5672, 13.9800,721.7746, 1322} +, { 0,322, 2.68271,171.8941,-98.1567, 13.9800,721.6058, 1323} +, { 0,323, 2.62867,172.3255,-103.7461, 13.9800,721.4369, 1324} +, { 0,324, 2.57742,172.7135,-109.3356, 13.9800,721.2681, 1325} +, { 0,325, 2.52868,173.0644,-114.9250, 13.9800,721.0993, 1326} +, { 0,326, 2.48224,173.3831,-120.5145, 13.9800,720.9305, 1327} +, { 0,327, 2.43790,173.6740,-126.1039, 13.9800,720.7617, 1328} +, { 0,328, 2.39548,173.9404,-131.6934, 13.9800,720.5928, 1329} +, { 0,329, 2.35483,174.1854,-137.2828, 13.9800,720.4240, 1330} +, { 0,330, 4.20544,157.1487,-19.9044, 8.3880,723.9693, 1331} +, { 0,331, 3.98818,161.7877,-25.4938, 8.3880,723.8004, 1332} +, { 0,332, 3.80611,164.8981,-31.0833, 8.3880,723.6316, 1333} +, { 0,333, 3.65034,167.1166,-36.6727, 8.3880,723.4628, 1334} +, { 0,334, 3.51464,168.7741,-42.2622, 8.3880,723.2940, 1335} +, { 0,335, 3.39462,170.0575,-47.8516, 8.3880,723.1252, 1336} +, { 0,336, 3.28714,171.0798,-53.4411, 8.3880,722.9563, 1337} +, { 0,337, 3.18991,171.9126,-59.0305, 8.3880,722.7875, 1338} +, { 0,338, 3.10118,172.6041,-64.6200, 8.3880,722.6187, 1339} +, { 0,339, 3.01961,173.1871,-70.2094, 8.3880,722.4499, 1340} +, { 0,340, 2.94417,173.6853,-75.7989, 8.3880,722.2811, 1341} +, { 0,341, 2.87401,174.1158,-81.3883, 8.3880,722.1122, 1342} +, { 0,342, 2.80846,174.4915,-86.9778, 8.3880,721.9434, 1343} +, { 0,343, 2.74696,174.8223,-92.5672, 8.3880,721.7746, 1344} +, { 0,344, 2.68905,175.1156,-98.1567, 8.3880,721.6058, 1345} +, { 0,345, 2.63435,175.3776,-103.7461, 8.3880,721.4369, 1346} +, { 0,346, 2.58253,175.6130,-109.3356, 8.3880,721.2681, 1347} +, { 0,347, 2.53331,175.8256,-114.9250, 8.3880,721.0993, 1348} +, { 0,348, 2.48645,176.0185,-120.5145, 8.3880,720.9305, 1349} +, { 0,349, 2.44174,176.1945,-126.1039, 8.3880,720.7617, 1350} +, { 0,350, 2.39900,176.3556,-131.6934, 8.3880,720.5928, 1351} +, { 0,351, 2.35807,176.5036,-137.2828, 8.3880,720.4240, 1352} +, { 0,352, 4.27738,172.0039,-19.9044, 2.7960,723.9693, 1353} +, { 0,353, 4.03356,173.7412,-25.4938, 2.7960,723.8004, 1354} +, { 0,354, 3.83720,174.8600,-31.0833, 2.7960,723.6316, 1355} +, { 0,355, 3.67291,175.6401,-36.6727, 2.7960,723.4628, 1356} +, { 0,356, 3.53174,176.2149,-42.2622, 2.7960,723.2940, 1357} +, { 0,357, 3.40802,176.6560,-47.8516, 2.7960,723.1252, 1358} +, { 0,358, 3.29792,177.0051,-53.4411, 2.7960,722.9563, 1359} +, { 0,359, 3.19875,177.2882,-59.0305, 2.7960,722.7875, 1360} +, { 0,360, 3.10857,177.5224,-64.6200, 2.7960,722.6187, 1361} +, { 0,361, 3.02588,177.7195,-70.2094, 2.7960,722.4499, 1362} +, { 0,362, 2.94954,177.8875,-75.7989, 2.7960,722.2811, 1363} +, { 0,363, 2.87867,178.0324,-81.3883, 2.7960,722.1122, 1364} +, { 0,364, 2.81254,178.1588,-86.9778, 2.7960,721.9434, 1365} +, { 0,365, 2.75056,178.2699,-92.5672, 2.7960,721.7746, 1366} +, { 0,366, 2.69225,178.3684,-98.1567, 2.7960,721.6058, 1367} +, { 0,367, 2.63722,178.4562,-103.7461, 2.7960,721.4369, 1368} +, { 0,368, 2.58511,178.5351,-109.3356, 2.7960,721.2681, 1369} +, { 0,369, 2.53564,178.6063,-114.9250, 2.7960,721.0993, 1370} +, { 0,370, 2.48857,178.6709,-120.5145, 2.7960,720.9305, 1371} +, { 0,371, 2.44367,178.7298,-126.1039, 2.7960,720.7617, 1372} +, { 0,372, 2.40077,178.7837,-131.6934, 2.7960,720.5928, 1373} +, { 0,373, 2.35970,178.8332,-137.2828, 2.7960,720.4240, 1374} +, { 0,374, 4.27738,-172.0039,-19.9044, -2.7960,723.9693, 1375} +, { 0,375, 4.03356,-173.7412,-25.4938, -2.7960,723.8004, 1376} +, { 0,376, 3.83720,-174.8600,-31.0833, -2.7960,723.6316, 1377} +, { 0,377, 3.67291,-175.6401,-36.6727, -2.7960,723.4628, 1378} +, { 0,378, 3.53174,-176.2149,-42.2622, -2.7960,723.2940, 1379} +, { 0,379, 3.40802,-176.6560,-47.8516, -2.7960,723.1252, 1380} +, { 0,380, 3.29792,-177.0051,-53.4411, -2.7960,722.9563, 1381} +, { 0,381, 3.19875,-177.2882,-59.0305, -2.7960,722.7875, 1382} +, { 0,382, 3.10857,-177.5225,-64.6200, -2.7960,722.6187, 1383} +, { 0,383, 3.02588,-177.7195,-70.2094, -2.7960,722.4499, 1384} +, { 0,384, 2.94954,-177.8875,-75.7989, -2.7960,722.2811, 1385} +, { 0,385, 2.87867,-178.0324,-81.3883, -2.7960,722.1122, 1386} +, { 0,386, 2.81254,-178.1588,-86.9778, -2.7960,721.9434, 1387} +, { 0,387, 2.75056,-178.2699,-92.5672, -2.7960,721.7746, 1388} +, { 0,388, 2.69225,-178.3684,-98.1567, -2.7960,721.6058, 1389} +, { 0,389, 2.63722,-178.4562,-103.7461, -2.7960,721.4369, 1390} +, { 0,390, 2.58511,-178.5351,-109.3356, -2.7960,721.2681, 1391} +, { 0,391, 2.53564,-178.6063,-114.9250, -2.7960,721.0993, 1392} +, { 0,392, 2.48857,-178.6709,-120.5145, -2.7960,720.9305, 1393} +, { 0,393, 2.44367,-178.7298,-126.1039, -2.7960,720.7617, 1394} +, { 0,394, 2.40077,-178.7837,-131.6934, -2.7960,720.5928, 1395} +, { 0,395, 2.35970,-178.8332,-137.2828, -2.7960,720.4240, 1396} +, { 0,396, 4.20544,-157.1487,-19.9044, -8.3880,723.9693, 1397} +, { 0,397, 3.98818,-161.7877,-25.4938, -8.3880,723.8004, 1398} +, { 0,398, 3.80611,-164.8981,-31.0833, -8.3880,723.6316, 1399} +, { 0,399, 3.65034,-167.1166,-36.6727, -8.3880,723.4628, 1400} +, { 0,400, 3.51464,-168.7741,-42.2622, -8.3880,723.2940, 1401} +, { 0,401, 3.39462,-170.0575,-47.8516, -8.3880,723.1252, 1402} +, { 0,402, 3.28714,-171.0797,-53.4411, -8.3880,722.9563, 1403} +, { 0,403, 3.18991,-171.9126,-59.0305, -8.3880,722.7875, 1404} +, { 0,404, 3.10118,-172.6041,-64.6200, -8.3880,722.6187, 1405} +, { 0,405, 3.01961,-173.1871,-70.2094, -8.3880,722.4499, 1406} +, { 0,406, 2.94417,-173.6853,-75.7989, -8.3880,722.2811, 1407} +, { 0,407, 2.87401,-174.1158,-81.3883, -8.3880,722.1122, 1408} +, { 0,408, 2.80846,-174.4915,-86.9778, -8.3880,721.9434, 1409} +, { 0,409, 2.74696,-174.8223,-92.5672, -8.3880,721.7746, 1410} +, { 0,410, 2.68905,-175.1156,-98.1567, -8.3880,721.6058, 1411} +, { 0,411, 2.63435,-175.3776,-103.7461, -8.3880,721.4369, 1412} +, { 0,412, 2.58253,-175.6130,-109.3356, -8.3880,721.2681, 1413} +, { 0,413, 2.53331,-175.8256,-114.9250, -8.3880,721.0993, 1414} +, { 0,414, 2.48645,-176.0185,-120.5145, -8.3880,720.9305, 1415} +, { 0,415, 2.44174,-176.1945,-126.1039, -8.3880,720.7617, 1416} +, { 0,416, 2.39900,-176.3556,-131.6934, -8.3880,720.5928, 1417} +, { 0,417, 2.35807,-176.5036,-137.2828, -8.3880,720.4240, 1418} +, { 0,418, 4.08674,-144.9174,-19.9044,-13.9800,723.9693, 1419} +, { 0,419, 3.90818,-151.2610,-25.4938,-13.9800,723.8004, 1420} +, { 0,420, 3.74920,-155.7837,-31.0833,-13.9800,723.6316, 1421} +, { 0,421, 3.60806,-159.1327,-36.6727,-13.9800,723.4628, 1422} +, { 0,422, 3.48210,-161.6962,-42.2622,-13.9800,723.2940, 1423} +, { 0,423, 3.36886,-163.7141,-47.8516,-13.9800,723.1252, 1424} +, { 0,424, 3.26628,-165.3401,-53.4411,-13.9800,722.9563, 1425} +, { 0,425, 3.17268,-166.6763,-59.0305,-13.9800,722.7875, 1426} +, { 0,426, 3.08672,-167.7927,-64.6200,-13.9800,722.6187, 1427} +, { 0,427, 3.00732,-168.7386,-70.2094,-13.9800,722.4499, 1428} +, { 0,428, 2.93359,-169.5501,-75.7989,-13.9800,722.2811, 1429} +, { 0,429, 2.86481,-170.2535,-81.3883,-13.9800,722.1122, 1430} +, { 0,430, 2.80039,-170.8689,-86.9778,-13.9800,721.9434, 1431} +, { 0,431, 2.73983,-171.4118,-92.5672,-13.9800,721.7746, 1432} +, { 0,432, 2.68271,-171.8941,-98.1567,-13.9800,721.6058, 1433} +, { 0,433, 2.62867,-172.3255,-103.7461,-13.9800,721.4369, 1434} +, { 0,434, 2.57742,-172.7135,-109.3356,-13.9800,721.2681, 1435} +, { 0,435, 2.52868,-173.0644,-114.9250,-13.9800,721.0993, 1436} +, { 0,436, 2.48224,-173.3831,-120.5145,-13.9800,720.9305, 1437} +, { 0,437, 2.43790,-173.6740,-126.1039,-13.9800,720.7617, 1438} +, { 0,438, 2.39548,-173.9404,-131.6934,-13.9800,720.5928, 1439} +, { 0,439, 2.35483,-174.1854,-137.2828,-13.9800,720.4240, 1440} +, { 0,440, 3.94910,-135.4824,-19.9044,-19.5720,723.9693, 1441} +, { 0,441, 3.80805,-142.4860,-25.4938,-19.5720,723.8004, 1442} +, { 0,442, 3.67443,-147.8029,-31.0833,-19.5720,723.6316, 1443} +, { 0,443, 3.55067,-151.9114,-36.6727,-19.5720,723.4628, 1444} +, { 0,444, 3.43695,-155.1507,-42.2622,-19.5720,723.2940, 1445} +, { 0,445, 3.33256,-157.7547,-47.8516,-19.5720,723.1252, 1446} +, { 0,446, 3.23653,-159.8855,-53.4411,-19.5720,722.9563, 1447} +, { 0,447, 3.14791,-161.6567,-59.0305,-19.5720,722.7875, 1448} +, { 0,448, 3.06580,-163.1496,-64.6200,-19.5720,722.6187, 1449} +, { 0,449, 2.98943,-164.4233,-70.2094,-19.5720,722.4499, 1450} +, { 0,450, 2.91813,-165.5219,-75.7989,-19.5720,722.2811, 1451} +, { 0,451, 2.85133,-166.4784,-81.3883,-19.5720,722.1122, 1452} +, { 0,452, 2.78853,-167.3184,-86.9778,-19.5720,721.9434, 1453} +, { 0,453, 2.72933,-168.0615,-92.5672,-19.5720,721.7746, 1454} +, { 0,454, 2.67334,-168.7234,-98.1567,-19.5720,721.6058, 1455} +, { 0,455, 2.62027,-169.3165,-103.7461,-19.5720,721.4369, 1456} +, { 0,456, 2.56984,-169.8511,-109.3356,-19.5720,721.2681, 1457} +, { 0,457, 2.52182,-170.3351,-114.9250,-19.5720,721.0993, 1458} +, { 0,458, 2.47600,-170.7755,-120.5145,-19.5720,720.9305, 1459} +, { 0,459, 2.43219,-171.1778,-126.1039,-19.5720,720.7617, 1460} +, { 0,460, 2.39025,-171.5467,-131.6934,-19.5720,720.5928, 1461} +, { 0,461, 2.35002,-171.8862,-137.2828,-19.5720,720.4240, 1462} +, { 0,462, 3.81002,-128.3435,-19.9044,-25.1640,723.9693, 1463} +, { 0,463, 3.69973,-135.3730,-25.4938,-25.1640,723.8004, 1464} +, { 0,464, 3.58950,-141.0075,-31.0833,-25.1640,723.6316, 1465} +, { 0,465, 3.48319,-145.5430,-36.6727,-25.1640,723.4628, 1466} +, { 0,466, 3.38250,-149.2293,-42.2622,-25.1640,723.2940, 1467} +, { 0,467, 3.28794,-152.2612,-47.8516,-25.1640,723.1252, 1468} +, { 0,468, 3.19945,-154.7855,-53.4411,-25.1640,722.9563, 1469} +, { 0,469, 3.11669,-156.9120,-59.0305,-25.1640,722.7875, 1470} +, { 0,470, 3.03920,-158.7233,-64.6200,-25.1640,722.6187, 1471} +, { 0,471, 2.96654,-160.2816,-70.2094,-25.1640,722.4499, 1472} +, { 0,472, 2.89824,-161.6347,-75.7989,-25.1640,722.2811, 1473} +, { 0,473, 2.83391,-162.8192,-81.3883,-25.1640,722.1122, 1474} +, { 0,474, 2.77316,-163.8640,-86.9778,-25.1640,721.9434, 1475} +, { 0,475, 2.71566,-164.7919,-92.5672,-25.1640,721.7746, 1476} +, { 0,476, 2.66113,-165.6210,-98.1567,-25.1640,721.6058, 1477} +, { 0,477, 2.60929,-166.3660,-103.7461,-25.1640,721.4369, 1478} +, { 0,478, 2.55992,-167.0389,-109.3356,-25.1640,721.2681, 1479} +, { 0,479, 2.51282,-167.6494,-114.9250,-25.1640,721.0993, 1480} +, { 0,480, 2.46779,-168.2058,-120.5145,-25.1640,720.9305, 1481} +, { 0,481, 2.42469,-168.7149,-126.1039,-25.1640,720.7617, 1482} +, { 0,482, 2.38336,-169.1823,-131.6934,-25.1640,720.5928, 1483} +, { 0,483, 2.34367,-169.6130,-137.2828,-25.1640,720.4240, 1484} +, { 0,484, 3.67753,-122.9097,-19.9044,-30.7560,723.9693, 1485} +, { 0,485, 3.59084,-129.6555,-25.4938,-30.7560,723.8004, 1486} +, { 0,486, 3.50036,-135.3032,-31.0833,-30.7560,723.6316, 1487} +, { 0,487, 3.40996,-140.0147,-36.6727,-30.7560,723.4628, 1488} +, { 0,488, 3.32187,-143.9550,-42.2622,-30.7560,723.2940, 1489} +, { 0,489, 3.23727,-147.2696,-47.8516,-30.7560,723.1252, 1490} +, { 0,490, 3.15668,-150.0790,-53.4411,-30.7560,722.9563, 1491} +, { 0,491, 3.08024,-152.4796,-59.0305,-30.7560,722.7875, 1492} +, { 0,492, 3.00785,-154.5478,-64.6200,-30.7560,722.6187, 1493} +, { 0,493, 2.93934,-156.3437,-70.2094,-30.7560,722.4499, 1494} +, { 0,494, 2.87446,-157.9148,-75.7989,-30.7560,722.2811, 1495} +, { 0,495, 2.81296,-159.2988,-81.3883,-30.7560,722.1122, 1496} +, { 0,496, 2.75459,-160.5260,-86.9778,-30.7560,721.9434, 1497} +, { 0,497, 2.69910,-161.6206,-92.5672,-30.7560,721.7746, 1498} +, { 0,498, 2.64628,-162.6024,-98.1567,-30.7560,721.6058, 1499} +, { 0,499, 2.59590,-163.4873,-103.7461,-30.7560,721.4369, 1500} +, { 0,500, 2.54780,-164.2888,-109.3356,-30.7560,721.2681, 1501} +, { 0,501, 2.50180,-165.0177,-114.9250,-30.7560,721.0993, 1502} +, { 0,502, 2.45773,-165.6834,-120.5145,-30.7560,720.9305, 1503} +, { 0,503, 2.41547,-166.2935,-126.1039,-30.7560,720.7617, 1504} +, { 0,504, 2.37488,-166.8546,-131.6934,-30.7560,720.5928, 1505} +, { 0,505, 2.33586,-167.3723,-137.2828,-30.7560,720.4240, 1506} +, { 0,506, 3.55444,-118.7053,-19.9044,-36.3480,723.9693, 1507} +, { 0,507, 3.48543,-125.0451,-25.4938,-36.3480,723.8004, 1508} +, { 0,508, 3.41095,-130.5357,-31.0833,-36.3480,723.6316, 1509} +, { 0,509, 3.33429,-135.2548,-36.6727,-36.3480,723.4628, 1510} +, { 0,510, 3.25769,-139.3025,-42.2622,-36.3480,723.2940, 1511} +, { 0,511, 3.18259,-142.7798,-47.8516,-36.3480,723.1252, 1512} +, { 0,512, 3.10980,-145.7784,-53.4411,-36.3480,722.9563, 1513} +, { 0,513, 3.03977,-148.3773,-59.0305,-36.3480,722.7875, 1514} +, { 0,514, 2.97268,-150.6427,-64.6200,-36.3480,722.6187, 1515} +, { 0,515, 2.90856,-152.6290,-70.2094,-36.3480,722.4499, 1516} +, { 0,516, 2.84736,-154.3808,-75.7989,-36.3480,722.2811, 1517} +, { 0,517, 2.78895,-155.9345,-81.3883,-36.3480,722.1122, 1518} +, { 0,518, 2.73320,-157.3200,-86.9778,-36.3480,721.9434, 1519} +, { 0,519, 2.67994,-158.5618,-92.5672,-36.3480,721.7746, 1520} +, { 0,520, 2.62903,-159.6801,-98.1567,-36.3480,721.6058, 1521} +, { 0,521, 2.58031,-160.6918,-103.7461,-36.3480,721.4369, 1522} +, { 0,522, 2.53364,-161.6109,-109.3356,-36.3480,721.2681, 1523} +, { 0,523, 2.48889,-162.4491,-114.9250,-36.3480,721.0993, 1524} +, { 0,524, 2.44592,-163.2163,-120.5145,-36.3480,720.9305, 1525} +, { 0,525, 2.40463,-163.9210,-126.1039,-36.3480,720.7617, 1526} +, { 0,526, 2.36490,-164.5702,-131.6934,-36.3480,720.5928, 1527} +, { 0,527, 2.32664,-165.1702,-137.2828,-36.3480,720.4240, 1528} +, { 0,528, 3.44112,-115.3886,-19.9044,-41.9400,723.9693, 1529} +, { 0,529, 3.38535,-121.2939,-25.4938,-41.9400,723.8004, 1530} +, { 0,530, 3.32359,-126.5435,-31.0833,-41.9400,723.6316, 1531} +, { 0,531, 3.25848,-131.1667,-36.6727,-41.9400,723.4628, 1532} +, { 0,532, 3.19200,-135.2192,-42.2622,-41.9400,723.2940, 1533} +, { 0,533, 3.12558,-138.7668,-47.8516,-41.9400,723.1252, 1534} +, { 0,534, 3.06017,-141.8755,-53.4411,-41.9400,722.9563, 1535} +, { 0,535, 2.99638,-144.6070,-59.0305,-41.9400,722.7875, 1536} +, { 0,536, 2.93457,-147.0154,-64.6200,-41.9400,722.6187, 1537} +, { 0,537, 2.87492,-149.1478,-70.2094,-41.9400,722.4499, 1538} +, { 0,538, 2.81751,-151.0440,-75.7989,-41.9400,722.2811, 1539} +, { 0,539, 2.76234,-152.7376,-81.3883,-41.9400,722.1122, 1540} +, { 0,540, 2.70936,-154.2570,-86.9778,-41.9400,721.9434, 1541} +, { 0,541, 2.65849,-155.6259,-92.5672,-41.9400,721.7746, 1542} +, { 0,542, 2.60964,-156.8641,-98.1567,-41.9400,721.6058, 1543} +, { 0,543, 2.56272,-157.9887,-103.7461,-41.9400,721.4369, 1544} +, { 0,544, 2.51763,-159.0137,-109.3356,-41.9400,721.2681, 1545} +, { 0,545, 2.47425,-159.9513,-114.9250,-41.9400,721.0993, 1546} +, { 0,546, 2.43250,-160.8117,-120.5145,-41.9400,720.9305, 1547} +, { 0,547, 2.39229,-161.6038,-126.1039,-41.9400,720.7617, 1548} +, { 0,548, 2.35352,-162.3350,-131.6934,-41.9400,720.5928, 1549} +, { 0,549, 2.31611,-163.0121,-137.2828,-41.9400,720.4240, 1550} +, { 0,550, 3.33697,-112.7218,-19.9044,-47.5320,723.9693, 1551} +, { 0,551, 3.29123,-118.2069,-25.4938,-47.5320,723.8004, 1552} +, { 0,552, 3.23955,-123.1824,-31.0833,-47.5320,723.6316, 1553} +, { 0,553, 3.18399,-127.6515,-36.6727,-47.5320,723.4628, 1554} +, { 0,554, 3.12623,-131.6413,-42.2622,-47.5320,723.2940, 1555} +, { 0,555, 3.06756,-135.1920,-47.8516,-47.5320,723.1252, 1556} +, { 0,556, 3.00894,-138.3492,-53.4411,-47.5320,722.9563, 1557} +, { 0,557, 2.95105,-141.1586,-59.0305,-47.5320,722.7875, 1558} +, { 0,558, 2.89434,-143.6632,-64.6200,-47.5320,722.6187, 1559} +, { 0,559, 2.83909,-145.9019,-70.2094,-47.5320,722.4499, 1560} +, { 0,560, 2.78548,-147.9090,-75.7989,-47.5320,722.2811, 1561} +, { 0,561, 2.73359,-149.7144,-81.3883,-47.5320,722.1122, 1562} +, { 0,562, 2.68346,-151.3441,-86.9778,-47.5320,721.9434, 1563} +, { 0,563, 2.63507,-152.8201,-92.5672,-47.5320,721.7746, 1564} +, { 0,564, 2.58839,-154.1616,-98.1567,-47.5320,721.6058, 1565} +, { 0,565, 2.54337,-155.3848,-103.7461,-47.5320,721.4369, 1566} +, { 0,566, 2.49994,-156.5037,-109.3356,-47.5320,721.2681, 1567} +, { 0,567, 2.45805,-157.5304,-114.9250,-47.5320,721.0993, 1568} +, { 0,568, 2.41760,-158.4753,-120.5145,-47.5320,720.9305, 1569} +, { 0,569, 2.37855,-159.3472,-126.1039,-47.5320,720.7617, 1570} +, { 0,570, 2.34082,-160.1540,-131.6934,-47.5320,720.5928, 1571} +, { 0,571, 2.30435,-160.9024,-137.2828,-47.5320,720.4240, 1572} +, { 0,572, 3.24112,-110.5398,-19.9044,-53.1240,723.9693, 1573} +, { 0,573, 3.20306,-115.6360,-25.4938,-53.1240,723.8004, 1574} +, { 0,574, 3.15939,-120.3322,-31.0833,-53.1240,723.6316, 1575} +, { 0,575, 3.11170,-124.6182,-36.6727,-53.1240,723.4628, 1576} +, { 0,576, 3.06136,-128.5036,-42.2622,-53.1240,723.2940, 1577} +, { 0,577, 3.00950,-132.0110,-47.8516,-53.1240,723.1252, 1578} +, { 0,578, 2.95701,-135.1705,-53.4411,-53.1240,722.9563, 1579} +, { 0,579, 2.90458,-138.0146,-59.0305,-53.1240,722.7875, 1580} +, { 0,580, 2.85268,-140.5764,-64.6200,-53.1240,722.6187, 1581} +, { 0,581, 2.80167,-142.8870,-70.2094,-53.1240,722.4499, 1582} +, { 0,582, 2.75177,-144.9751,-75.7989,-53.1240,722.2811, 1583} +, { 0,583, 2.70314,-146.8666,-81.3883,-53.1240,722.1122, 1584} +, { 0,584, 2.65587,-148.5844,-86.9778,-53.1240,721.9434, 1585} +, { 0,585, 2.61000,-150.1486,-92.5672,-53.1240,721.7746, 1586} +, { 0,586, 2.56554,-151.5770,-98.1567,-53.1240,721.6058, 1587} +, { 0,587, 2.52248,-152.8849,-103.7461,-53.1240,721.4369, 1588} +, { 0,588, 2.48079,-154.0858,-109.3356,-53.1240,721.2681, 1589} +, { 0,589, 2.44044,-155.1913,-114.9250,-53.1240,721.0993, 1590} +, { 0,590, 2.40138,-156.2116,-120.5145,-53.1240,720.9305, 1591} +, { 0,591, 2.36356,-157.1557,-126.1039,-53.1240,720.7617, 1592} +, { 0,592, 2.32693,-158.0313,-131.6934,-53.1240,720.5928, 1593} +, { 0,593, 2.29145,-158.8452,-137.2828,-53.1240,720.4240, 1594} +, { 0,594, 3.15262,-108.7263,-19.9044,-58.7160,723.9693, 1595} +, { 0,595, 3.12055,-113.4699,-25.4938,-58.7160,723.8004, 1596} +, { 0,596, 3.08329,-117.8960,-31.0833,-58.7160,723.6316, 1597} +, { 0,597, 3.04208,-121.9880,-36.6727,-58.7160,723.4628, 1598} +, { 0,598, 2.99802,-125.7453,-42.2622,-58.7160,723.2940, 1599} +, { 0,599, 2.95209,-129.1789,-47.8516,-58.7160,723.1252, 1600} +, { 0,600, 2.90507,-132.3073,-53.4411,-58.7160,722.9563, 1601} +, { 0,601, 2.85760,-135.1530,-59.0305,-58.7160,722.7875, 1602} +, { 0,602, 2.81018,-137.7406,-64.6200,-58.7160,722.6187, 1603} +, { 0,603, 2.76317,-140.0943,-70.2094,-58.7160,722.4499, 1604} +, { 0,604, 2.71684,-142.2376,-75.7989,-58.7160,722.2811, 1605} +, { 0,605, 2.67138,-144.1922,-81.3883,-58.7160,722.1122, 1606} +, { 0,606, 2.62693,-145.9779,-86.9778,-58.7160,721.9434, 1607} +, { 0,607, 2.58357,-147.6128,-92.5672,-58.7160,721.7746, 1608} +, { 0,608, 2.54134,-149.1127,-98.1567,-58.7160,721.6058, 1609} +, { 0,609, 2.50027,-150.4919,-103.7461,-58.7160,721.4369, 1610} +, { 0,610, 2.46036,-151.7631,-109.3356,-58.7160,721.2681, 1611} +, { 0,611, 2.42159,-152.9372,-114.9250,-58.7160,721.0993, 1612} +, { 0,612, 2.38396,-154.0241,-120.5145,-58.7160,720.9305, 1613} +, { 0,613, 2.34742,-155.0326,-126.1039,-58.7160,720.7617, 1614} +, { 0,614, 2.31195,-155.9701,-131.6934,-58.7160,720.5928, 1615} +, { 0,615, 2.27752,-156.8436,-137.2828,-58.7160,720.4240, 1616} +, { 0,616, 3.07062,-107.1981,-19.9044,-64.3080,723.9693, 1617} +, { 0,617, 3.04327,-111.6250,-25.4938,-64.3080,723.8004, 1618} +, { 0,618, 3.01119,-115.7968,-31.0833,-64.3080,723.6316, 1619} +, { 0,619, 2.97534,-119.6947,-36.6727,-64.3080,723.4628, 1620} +, { 0,620, 2.93660,-123.3123,-42.2622,-64.3080,723.2940, 1621} +, { 0,621, 2.89579,-126.6530,-47.8516,-64.3080,723.1252, 1622} +, { 0,622, 2.85360,-129.7272,-53.4411,-64.3080,722.9563, 1623} +, { 0,623, 2.81062,-132.5499,-59.0305,-64.3080,722.7875, 1624} +, { 0,624, 2.76730,-135.1386,-64.6200,-64.3080,722.6187, 1625} +, { 0,625, 2.72403,-137.5120,-70.2094,-64.3080,722.4499, 1626} +, { 0,626, 2.68108,-139.6886,-75.7989,-64.3080,722.2811, 1627} +, { 0,627, 2.63867,-141.6864,-81.3883,-64.3080,722.1122, 1628} +, { 0,628, 2.59696,-143.5222,-86.9778,-64.3080,721.9434, 1629} +, { 0,629, 2.55606,-145.2116,-92.5672,-64.3080,721.7746, 1630} +, { 0,630, 2.51604,-146.7689,-98.1567,-64.3080,721.6058, 1631} +, { 0,631, 2.47696,-148.2069,-103.7461,-64.3080,721.4369, 1632} +, { 0,632, 2.43883,-149.5372,-109.3356,-64.3080,721.2681, 1633} +, { 0,633, 2.40168,-150.7702,-114.9250,-64.3080,721.0993, 1634} +, { 0,634, 2.36550,-151.9151,-120.5145,-64.3080,720.9305, 1635} +, { 0,635, 2.33028,-152.9802,-126.1039,-64.3080,720.7617, 1636} +, { 0,636, 2.29600,-153.9730,-131.6934,-64.3080,720.5928, 1637} +, { 0,637, 2.26264,-154.9000,-137.2828,-64.3080,720.4240, 1638} +, { 0,638, 2.99436,-105.8946,-19.9044,-69.9000,723.9693, 1639} +, { 0,639, 2.97079,-110.0378,-25.4938,-69.9000,723.8004, 1640} +, { 0,640, 2.94293,-113.9738,-31.0833,-69.9000,723.6316, 1641} +, { 0,641, 2.91152,-117.6835,-36.6727,-69.9000,723.4628, 1642} +, { 0,642, 2.87729,-121.1575,-42.2622,-69.9000,723.2940, 1643} +, { 0,643, 2.84091,-124.3945,-47.8516,-69.9000,723.1252, 1644} +, { 0,644, 2.80297,-127.3992,-53.4411,-69.9000,722.9563, 1645} +, { 0,645, 2.76400,-130.1811,-59.0305,-69.9000,722.7875, 1646} +, { 0,646, 2.72443,-132.7522,-64.6200,-69.9000,722.6187, 1647} +, { 0,647, 2.68461,-135.1265,-70.2094,-69.9000,722.4499, 1648} +, { 0,648, 2.64483,-137.3185,-75.7989,-69.9000,722.2811, 1649} +, { 0,649, 2.60531,-139.3425,-81.3883,-69.9000,722.1122, 1650} +, { 0,650, 2.56623,-141.2128,-86.9778,-69.9000,721.9434, 1651} +, { 0,651, 2.52771,-142.9426,-92.5672,-69.9000,721.7746, 1652} +, { 0,652, 2.48986,-144.5443,-98.1567,-69.9000,721.6058, 1653} +, { 0,653, 2.45274,-146.0295,-103.7461,-69.9000,721.4369, 1654} +, { 0,654, 2.41639,-147.4086,-109.3356,-69.9000,721.2681, 1655} +, { 0,655, 2.38085,-148.6911,-114.9250,-69.9000,721.0993, 1656} +, { 0,656, 2.34613,-149.8857,-120.5145,-69.9000,720.9305, 1657} +, { 0,657, 2.31224,-151.0002,-126.1039,-69.9000,720.7617, 1658} +, { 0,658, 2.27918,-152.0416,-131.6934,-69.9000,720.5928, 1659} +, { 0,659, 2.24693,-153.0163,-137.2828,-69.9000,720.4240, 1660} +, { 0,660, 2.92316,-104.7706,-19.9044,-75.4920,723.9693, 1661} +, { 0,661, 2.90265,-108.6599,-25.4938,-75.4920,723.8004, 1662} +, { 0,662, 2.87827,-112.3790,-31.0833,-75.4920,723.6316, 1663} +, { 0,663, 2.85058,-115.9097,-36.6727,-75.4920,723.4628, 1664} +, { 0,664, 2.82018,-119.2411,-42.2622,-75.4920,723.2940, 1665} +, { 0,665, 2.78763,-122.3691,-47.8516,-75.4920,723.1252, 1666} +, { 0,666, 2.75343,-125.2948,-53.4411,-75.4920,722.9563, 1667} +, { 0,667, 2.71804,-128.0234,-59.0305,-75.4920,722.7875, 1668} +, { 0,668, 2.68185,-130.5630,-64.6200,-75.4920,722.6187, 1669} +, { 0,669, 2.64520,-132.9236,-70.2094,-75.4920,722.4499, 1670} +, { 0,670, 2.60837,-135.1162,-75.7989,-75.4920,722.2811, 1671} +, { 0,671, 2.57157,-137.1524,-81.3883,-75.4920,722.1122, 1672} +, { 0,672, 2.53499,-139.0438,-86.9778,-75.4920,721.9434, 1673} +, { 0,673, 2.49876,-140.8015,-92.5672,-75.4920,721.7746, 1674} +, { 0,674, 2.46300,-142.4362,-98.1567,-75.4920,721.6058, 1675} +, { 0,675, 2.42779,-143.9581,-103.7461,-75.4920,721.4369, 1676} +, { 0,676, 2.39320,-145.3764,-109.3356,-75.4920,721.2681, 1677} +, { 0,677, 2.35925,-146.6999,-114.9250,-75.4920,721.0993, 1678} +, { 0,678, 2.32600,-147.9364,-120.5145,-75.4920,720.9305, 1679} +, { 0,679, 2.29344,-149.0932,-126.1039,-75.4920,720.7617, 1680} +, { 0,680, 2.26159,-150.1769,-131.6934,-75.4920,720.5928, 1681} +, { 0,681, 2.23046,-151.1936,-137.2828,-75.4920,720.4240, 1682} +, { 0,682, 2.85646,-103.7922,-19.9044,-81.0840,723.9693, 1683} +, { 0,683, 2.83847,-107.4538,-25.4938,-81.0840,723.8004, 1684} +, { 0,684, 2.81697,-110.9741,-31.0833,-81.0840,723.6316, 1685} +, { 0,685, 2.79242,-114.3363,-36.6727,-81.0840,723.4628, 1686} +, { 0,686, 2.76529,-117.5292,-42.2622,-81.0840,723.2940, 1687} +, { 0,687, 2.73604,-120.5469,-47.8516,-81.0840,723.1252, 1688} +, { 0,688, 2.70512,-123.3882,-53.4411,-81.0840,722.9563, 1689} +, { 0,689, 2.67292,-126.0553,-59.0305,-81.0840,722.7875, 1690} +, { 0,690, 2.63979,-128.5531,-64.6200,-81.0840,722.6187, 1691} +, { 0,691, 2.60604,-130.8888,-70.2094,-81.0840,722.4499, 1692} +, { 0,692, 2.57192,-133.0705,-75.7989,-81.0840,722.2811, 1693} +, { 0,693, 2.53766,-135.1073,-81.3883,-81.0840,722.1122, 1694} +, { 0,694, 2.50344,-137.0085,-86.9778,-81.0840,721.9434, 1695} +, { 0,695, 2.46939,-138.7834,-92.5672,-81.0840,721.7746, 1696} +, { 0,696, 2.43565,-140.4410,-98.1567,-81.0840,721.6058, 1697} +, { 0,697, 2.40229,-141.9902,-103.7461,-81.0840,721.4369, 1698} +, { 0,698, 2.36940,-143.4391,-109.3356,-81.0840,721.2681, 1699} +, { 0,699, 2.33703,-144.7956,-114.9250,-81.0840,721.0993, 1700} +, { 0,700, 2.30521,-146.0667,-120.5145,-81.0840,720.9305, 1701} +, { 0,701, 2.27398,-147.2593,-126.1039,-81.0840,720.7617, 1702} +, { 0,702, 2.24335,-148.3793,-131.6934,-81.0840,720.5928, 1703} +, { 0,703, 2.21334,-149.4324,-137.2828,-81.0840,720.4240, 1704} +, { 0,704, 2.79377,-102.9332,-19.9044,-86.6760,723.9693, 1705} +, { 0,705, 2.77787,-106.3901,-25.4938,-86.6760,723.8004, 1706} +, { 0,706, 2.75879,-109.7286,-31.0833,-86.6760,723.6316, 1707} +, { 0,707, 2.73688,-112.9333,-36.6727,-86.6760,723.4628, 1708} +, { 0,708, 2.71256,-115.9933,-42.2622,-86.6760,723.2940, 1709} +, { 0,709, 2.68619,-118.9020,-47.8516,-86.6760,723.1252, 1710} +, { 0,710, 2.65815,-121.6564,-53.4411,-86.6760,722.9563, 1711} +, { 0,711, 2.62878,-124.2567,-59.0305,-86.6760,722.7875, 1712} +, { 0,712, 2.59840,-126.7058,-64.6200,-86.6760,722.6187, 1713} +, { 0,713, 2.56728,-129.0082,-70.2094,-86.6760,722.4499, 1714} +, { 0,714, 2.53567,-131.1700,-75.7989,-86.6760,722.2811, 1715} +, { 0,715, 2.50377,-133.1979,-81.3883,-86.6760,722.1122, 1716} +, { 0,716, 2.47176,-135.0996,-86.9778,-86.6760,721.9434, 1717} +, { 0,717, 2.43978,-136.8825,-92.5672,-86.6760,721.7746, 1718} +, { 0,718, 2.40796,-138.5543,-98.1567,-86.6760,721.6058, 1719} +, { 0,719, 2.37639,-140.1225,-103.7461,-86.6760,721.4369, 1720} +, { 0,720, 2.34515,-141.5943,-109.3356,-86.6760,721.2681, 1721} +, { 0,721, 2.31430,-142.9765,-114.9250,-86.6760,721.0993, 1722} +, { 0,722, 2.28390,-144.2757,-120.5145,-86.6760,720.9305, 1723} +, { 0,723, 2.25397,-145.4978,-126.1039,-86.6760,720.7617, 1724} +, { 0,724, 2.22455,-146.6485,-131.6934,-86.6760,720.5928, 1725} +, { 0,725, 2.19566,-147.7330,-137.2828,-86.6760,720.4240, 1726} +, { 0,726, 2.73468,-102.1735,-19.9044,-92.2680,723.9693, 1727} +, { 0,727, 2.72053,-105.4456,-25.4938,-92.2680,723.8004, 1728} +, { 0,728, 2.70348,-108.6177,-31.0833,-92.2680,723.6316, 1729} +, { 0,729, 2.68384,-111.6758,-36.6727,-92.2680,723.4628, 1730} +, { 0,730, 2.66192,-114.6095,-42.2622,-92.2680,723.2940, 1731} +, { 0,731, 2.63806,-117.4120,-47.8516,-92.2680,723.1252, 1732} +, { 0,732, 2.61255,-120.0792,-53.4411,-92.2680,722.9563, 1733} +, { 0,733, 2.58571,-122.6100,-59.0305,-92.2680,722.7875, 1734} +, { 0,734, 2.55780,-125.0055,-64.6200,-92.2680,722.6187, 1735} +, { 0,735, 2.52908,-127.2686,-70.2094,-92.2680,722.4499, 1736} +, { 0,736, 2.49976,-129.4034,-75.7989,-92.2680,722.2811, 1737} +, { 0,737, 2.47004,-131.4151,-81.3883,-92.2680,722.1122, 1738} +, { 0,738, 2.44010,-133.3095,-86.9778,-92.2680,721.9434, 1739} +, { 0,739, 2.41007,-135.0928,-92.5672,-92.2680,721.7746, 1740} +, { 0,740, 2.38007,-136.7712,-98.1567,-92.2680,721.6058, 1741} +, { 0,741, 2.35020,-138.3513,-103.7461,-92.2680,721.4369, 1742} +, { 0,742, 2.32055,-139.8391,-109.3356,-92.2680,721.2681, 1743} +, { 0,743, 2.29119,-141.2406,-114.9250,-92.2680,721.0993, 1744} +, { 0,744, 2.26216,-142.5617,-120.5145,-92.2680,720.9305, 1745} +, { 0,745, 2.23352,-143.8077,-126.1039,-92.2680,720.7617, 1746} +, { 0,746, 2.20528,-144.9839,-131.6934,-92.2680,720.5928, 1747} +, { 0,747, 2.17749,-146.0949,-137.2828,-92.2680,720.4240, 1748} +, { 1, 0, 2.73468, 77.8265, 19.9044, 92.2680,723.9693, 2001} +, { 1, 1, 2.72053, 74.5544, 25.4938, 92.2680,723.8004, 2002} +, { 1, 2, 2.70348, 71.3823, 31.0833, 92.2680,723.6316, 2003} +, { 1, 3, 2.68384, 68.3242, 36.6727, 92.2680,723.4628, 2004} +, { 1, 4, 2.66192, 65.3905, 42.2622, 92.2680,723.2940, 2005} +, { 1, 5, 2.63806, 62.5880, 47.8516, 92.2680,723.1252, 2006} +, { 1, 6, 2.61255, 59.9208, 53.4411, 92.2680,722.9563, 2007} +, { 1, 7, 2.58571, 57.3900, 59.0305, 92.2680,722.7875, 2008} +, { 1, 8, 2.55780, 54.9945, 64.6200, 92.2680,722.6187, 2009} +, { 1, 9, 2.52908, 52.7314, 70.2094, 92.2680,722.4499, 2010} +, { 1, 10, 2.49976, 50.5966, 75.7989, 92.2680,722.2811, 2011} +, { 1, 11, 2.47004, 48.5849, 81.3883, 92.2680,722.1122, 2012} +, { 1, 12, 2.44010, 46.6905, 86.9778, 92.2680,721.9434, 2013} +, { 1, 13, 2.41007, 44.9072, 92.5672, 92.2680,721.7746, 2014} +, { 1, 14, 2.38007, 43.2288, 98.1567, 92.2680,721.6058, 2015} +, { 1, 15, 2.35020, 41.6487,103.7461, 92.2680,721.4369, 2016} +, { 1, 16, 2.32055, 40.1609,109.3356, 92.2680,721.2681, 2017} +, { 1, 17, 2.29119, 38.7594,114.9250, 92.2680,721.0993, 2018} +, { 1, 18, 2.26216, 37.4383,120.5145, 92.2680,720.9305, 2019} +, { 1, 19, 2.23352, 36.1923,126.1039, 92.2680,720.7617, 2020} +, { 1, 20, 2.20528, 35.0161,131.6934, 92.2680,720.5928, 2021} +, { 1, 21, 2.17749, 33.9051,137.2828, 92.2680,720.4240, 2022} +, { 1, 22, 2.79377, 77.0668, 19.9044, 86.6760,723.9693, 2023} +, { 1, 23, 2.77787, 73.6099, 25.4938, 86.6760,723.8004, 2024} +, { 1, 24, 2.75879, 70.2714, 31.0833, 86.6760,723.6316, 2025} +, { 1, 25, 2.73688, 67.0667, 36.6727, 86.6760,723.4628, 2026} +, { 1, 26, 2.71256, 64.0067, 42.2622, 86.6760,723.2940, 2027} +, { 1, 27, 2.68619, 61.0980, 47.8516, 86.6760,723.1252, 2028} +, { 1, 28, 2.65815, 58.3436, 53.4411, 86.6760,722.9563, 2029} +, { 1, 29, 2.62878, 55.7433, 59.0305, 86.6760,722.7875, 2030} +, { 1, 30, 2.59840, 53.2942, 64.6200, 86.6760,722.6187, 2031} +, { 1, 31, 2.56728, 50.9918, 70.2094, 86.6760,722.4499, 2032} +, { 1, 32, 2.53567, 48.8300, 75.7989, 86.6760,722.2811, 2033} +, { 1, 33, 2.50377, 46.8021, 81.3883, 86.6760,722.1122, 2034} +, { 1, 34, 2.47176, 44.9004, 86.9778, 86.6760,721.9434, 2035} +, { 1, 35, 2.43978, 43.1175, 92.5672, 86.6760,721.7746, 2036} +, { 1, 36, 2.40796, 41.4457, 98.1567, 86.6760,721.6058, 2037} +, { 1, 37, 2.37639, 39.8775,103.7461, 86.6760,721.4369, 2038} +, { 1, 38, 2.34515, 38.4057,109.3356, 86.6760,721.2681, 2039} +, { 1, 39, 2.31430, 37.0235,114.9250, 86.6760,721.0993, 2040} +, { 1, 40, 2.28390, 35.7243,120.5145, 86.6760,720.9305, 2041} +, { 1, 41, 2.25397, 34.5022,126.1039, 86.6760,720.7617, 2042} +, { 1, 42, 2.22455, 33.3515,131.6934, 86.6760,720.5928, 2043} +, { 1, 43, 2.19566, 32.2670,137.2828, 86.6760,720.4240, 2044} +, { 1, 44, 2.85646, 76.2079, 19.9044, 81.0840,723.9693, 2045} +, { 1, 45, 2.83847, 72.5462, 25.4938, 81.0840,723.8004, 2046} +, { 1, 46, 2.81697, 69.0259, 31.0833, 81.0840,723.6316, 2047} +, { 1, 47, 2.79242, 65.6637, 36.6727, 81.0840,723.4628, 2048} +, { 1, 48, 2.76529, 62.4708, 42.2622, 81.0840,723.2940, 2049} +, { 1, 49, 2.73604, 59.4531, 47.8516, 81.0840,723.1252, 2050} +, { 1, 50, 2.70512, 56.6118, 53.4411, 81.0840,722.9563, 2051} +, { 1, 51, 2.67292, 53.9448, 59.0305, 81.0840,722.7875, 2052} +, { 1, 52, 2.63979, 51.4469, 64.6200, 81.0840,722.6187, 2053} +, { 1, 53, 2.60604, 49.1112, 70.2094, 81.0840,722.4499, 2054} +, { 1, 54, 2.57192, 46.9295, 75.7989, 81.0840,722.2811, 2055} +, { 1, 55, 2.53766, 44.8927, 81.3883, 81.0840,722.1122, 2056} +, { 1, 56, 2.50344, 42.9915, 86.9778, 81.0840,721.9434, 2057} +, { 1, 57, 2.46939, 41.2166, 92.5672, 81.0840,721.7746, 2058} +, { 1, 58, 2.43565, 39.5590, 98.1567, 81.0840,721.6058, 2059} +, { 1, 59, 2.40229, 38.0098,103.7461, 81.0840,721.4369, 2060} +, { 1, 60, 2.36940, 36.5609,109.3356, 81.0840,721.2681, 2061} +, { 1, 61, 2.33703, 35.2044,114.9250, 81.0840,721.0993, 2062} +, { 1, 62, 2.30521, 33.9333,120.5145, 81.0840,720.9305, 2063} +, { 1, 63, 2.27398, 32.7408,126.1039, 81.0840,720.7617, 2064} +, { 1, 64, 2.24335, 31.6207,131.6934, 81.0840,720.5928, 2065} +, { 1, 65, 2.21334, 30.5676,137.2828, 81.0840,720.4240, 2066} +, { 1, 66, 2.92316, 75.2294, 19.9044, 75.4920,723.9693, 2067} +, { 1, 67, 2.90265, 71.3401, 25.4938, 75.4920,723.8004, 2068} +, { 1, 68, 2.87827, 67.6210, 31.0833, 75.4920,723.6316, 2069} +, { 1, 69, 2.85058, 64.0903, 36.6727, 75.4920,723.4628, 2070} +, { 1, 70, 2.82018, 60.7589, 42.2622, 75.4920,723.2940, 2071} +, { 1, 71, 2.78763, 57.6309, 47.8516, 75.4920,723.1252, 2072} +, { 1, 72, 2.75343, 54.7052, 53.4411, 75.4920,722.9563, 2073} +, { 1, 73, 2.71804, 51.9766, 59.0305, 75.4920,722.7875, 2074} +, { 1, 74, 2.68185, 49.4370, 64.6200, 75.4920,722.6187, 2075} +, { 1, 75, 2.64520, 47.0764, 70.2094, 75.4920,722.4499, 2076} +, { 1, 76, 2.60837, 44.8838, 75.7989, 75.4920,722.2811, 2077} +, { 1, 77, 2.57157, 42.8476, 81.3883, 75.4920,722.1122, 2078} +, { 1, 78, 2.53499, 40.9562, 86.9778, 75.4920,721.9434, 2079} +, { 1, 79, 2.49876, 39.1985, 92.5672, 75.4920,721.7746, 2080} +, { 1, 80, 2.46300, 37.5638, 98.1567, 75.4920,721.6058, 2081} +, { 1, 81, 2.42779, 36.0419,103.7461, 75.4920,721.4369, 2082} +, { 1, 82, 2.39320, 34.6236,109.3356, 75.4920,721.2681, 2083} +, { 1, 83, 2.35925, 33.3001,114.9250, 75.4920,721.0993, 2084} +, { 1, 84, 2.32600, 32.0636,120.5145, 75.4920,720.9305, 2085} +, { 1, 85, 2.29344, 30.9068,126.1039, 75.4920,720.7617, 2086} +, { 1, 86, 2.26159, 29.8231,131.6934, 75.4920,720.5928, 2087} +, { 1, 87, 2.23046, 28.8064,137.2828, 75.4920,720.4240, 2088} +, { 1, 88, 2.99436, 74.1054, 19.9044, 69.9000,723.9693, 2089} +, { 1, 89, 2.97079, 69.9622, 25.4938, 69.9000,723.8004, 2090} +, { 1, 90, 2.94293, 66.0262, 31.0833, 69.9000,723.6316, 2091} +, { 1, 91, 2.91152, 62.3165, 36.6727, 69.9000,723.4628, 2092} +, { 1, 92, 2.87729, 58.8425, 42.2622, 69.9000,723.2940, 2093} +, { 1, 93, 2.84091, 55.6055, 47.8516, 69.9000,723.1252, 2094} +, { 1, 94, 2.80297, 52.6008, 53.4411, 69.9000,722.9563, 2095} +, { 1, 95, 2.76400, 49.8189, 59.0305, 69.9000,722.7875, 2096} +, { 1, 96, 2.72443, 47.2478, 64.6200, 69.9000,722.6187, 2097} +, { 1, 97, 2.68461, 44.8735, 70.2094, 69.9000,722.4499, 2098} +, { 1, 98, 2.64483, 42.6815, 75.7989, 69.9000,722.2811, 2099} +, { 1, 99, 2.60531, 40.6575, 81.3883, 69.9000,722.1122, 2100} +, { 1,100, 2.56623, 38.7872, 86.9778, 69.9000,721.9434, 2101} +, { 1,101, 2.52771, 37.0574, 92.5672, 69.9000,721.7746, 2102} +, { 1,102, 2.48986, 35.4557, 98.1567, 69.9000,721.6058, 2103} +, { 1,103, 2.45274, 33.9705,103.7461, 69.9000,721.4369, 2104} +, { 1,104, 2.41639, 32.5914,109.3356, 69.9000,721.2681, 2105} +, { 1,105, 2.38085, 31.3089,114.9250, 69.9000,721.0993, 2106} +, { 1,106, 2.34613, 30.1143,120.5145, 69.9000,720.9305, 2107} +, { 1,107, 2.31224, 28.9998,126.1039, 69.9000,720.7617, 2108} +, { 1,108, 2.27918, 27.9584,131.6934, 69.9000,720.5928, 2109} +, { 1,109, 2.24693, 26.9837,137.2828, 69.9000,720.4240, 2110} +, { 1,110, 3.07062, 72.8019, 19.9044, 64.3080,723.9693, 2111} +, { 1,111, 3.04327, 68.3750, 25.4938, 64.3080,723.8004, 2112} +, { 1,112, 3.01119, 64.2032, 31.0833, 64.3080,723.6316, 2113} +, { 1,113, 2.97534, 60.3053, 36.6727, 64.3080,723.4628, 2114} +, { 1,114, 2.93660, 56.6877, 42.2622, 64.3080,723.2940, 2115} +, { 1,115, 2.89579, 53.3470, 47.8516, 64.3080,723.1252, 2116} +, { 1,116, 2.85360, 50.2728, 53.4411, 64.3080,722.9563, 2117} +, { 1,117, 2.81062, 47.4501, 59.0305, 64.3080,722.7875, 2118} +, { 1,118, 2.76730, 44.8614, 64.6200, 64.3080,722.6187, 2119} +, { 1,119, 2.72403, 42.4880, 70.2094, 64.3080,722.4499, 2120} +, { 1,120, 2.68108, 40.3114, 75.7989, 64.3080,722.2811, 2121} +, { 1,121, 2.63867, 38.3136, 81.3883, 64.3080,722.1122, 2122} +, { 1,122, 2.59696, 36.4778, 86.9778, 64.3080,721.9434, 2123} +, { 1,123, 2.55606, 34.7884, 92.5672, 64.3080,721.7746, 2124} +, { 1,124, 2.51604, 33.2311, 98.1567, 64.3080,721.6058, 2125} +, { 1,125, 2.47696, 31.7931,103.7461, 64.3080,721.4369, 2126} +, { 1,126, 2.43883, 30.4628,109.3356, 64.3080,721.2681, 2127} +, { 1,127, 2.40168, 29.2298,114.9250, 64.3080,721.0993, 2128} +, { 1,128, 2.36550, 28.0849,120.5145, 64.3080,720.9305, 2129} +, { 1,129, 2.33028, 27.0198,126.1039, 64.3080,720.7617, 2130} +, { 1,130, 2.29600, 26.0270,131.6934, 64.3080,720.5928, 2131} +, { 1,131, 2.26264, 25.1000,137.2828, 64.3080,720.4240, 2132} +, { 1,132, 3.15262, 71.2737, 19.9044, 58.7160,723.9693, 2133} +, { 1,133, 3.12055, 66.5301, 25.4938, 58.7160,723.8004, 2134} +, { 1,134, 3.08329, 62.1040, 31.0833, 58.7160,723.6316, 2135} +, { 1,135, 3.04208, 58.0120, 36.6727, 58.7160,723.4628, 2136} +, { 1,136, 2.99802, 54.2547, 42.2622, 58.7160,723.2940, 2137} +, { 1,137, 2.95209, 50.8211, 47.8516, 58.7160,723.1252, 2138} +, { 1,138, 2.90507, 47.6927, 53.4411, 58.7160,722.9563, 2139} +, { 1,139, 2.85760, 44.8470, 59.0305, 58.7160,722.7875, 2140} +, { 1,140, 2.81018, 42.2594, 64.6200, 58.7160,722.6187, 2141} +, { 1,141, 2.76317, 39.9057, 70.2094, 58.7160,722.4499, 2142} +, { 1,142, 2.71684, 37.7624, 75.7989, 58.7160,722.2811, 2143} +, { 1,143, 2.67138, 35.8078, 81.3883, 58.7160,722.1122, 2144} +, { 1,144, 2.62693, 34.0221, 86.9778, 58.7160,721.9434, 2145} +, { 1,145, 2.58357, 32.3872, 92.5672, 58.7160,721.7746, 2146} +, { 1,146, 2.54134, 30.8873, 98.1567, 58.7160,721.6058, 2147} +, { 1,147, 2.50027, 29.5081,103.7461, 58.7160,721.4369, 2148} +, { 1,148, 2.46036, 28.2369,109.3356, 58.7160,721.2681, 2149} +, { 1,149, 2.42159, 27.0628,114.9250, 58.7160,721.0993, 2150} +, { 1,150, 2.38396, 25.9759,120.5145, 58.7160,720.9305, 2151} +, { 1,151, 2.34742, 24.9674,126.1039, 58.7160,720.7617, 2152} +, { 1,152, 2.31195, 24.0299,131.6934, 58.7160,720.5928, 2153} +, { 1,153, 2.27752, 23.1564,137.2828, 58.7160,720.4240, 2154} +, { 1,154, 3.24112, 69.4602, 19.9044, 53.1240,723.9693, 2155} +, { 1,155, 3.20306, 64.3640, 25.4938, 53.1240,723.8004, 2156} +, { 1,156, 3.15939, 59.6678, 31.0833, 53.1240,723.6316, 2157} +, { 1,157, 3.11170, 55.3818, 36.6727, 53.1240,723.4628, 2158} +, { 1,158, 3.06136, 51.4964, 42.2622, 53.1240,723.2940, 2159} +, { 1,159, 3.00950, 47.9890, 47.8516, 53.1240,723.1252, 2160} +, { 1,160, 2.95701, 44.8295, 53.4411, 53.1240,722.9563, 2161} +, { 1,161, 2.90458, 41.9854, 59.0305, 53.1240,722.7875, 2162} +, { 1,162, 2.85268, 39.4236, 64.6200, 53.1240,722.6187, 2163} +, { 1,163, 2.80167, 37.1130, 70.2094, 53.1240,722.4499, 2164} +, { 1,164, 2.75177, 35.0249, 75.7989, 53.1240,722.2811, 2165} +, { 1,165, 2.70314, 33.1334, 81.3883, 53.1240,722.1122, 2166} +, { 1,166, 2.65587, 31.4156, 86.9778, 53.1240,721.9434, 2167} +, { 1,167, 2.61000, 29.8514, 92.5672, 53.1240,721.7746, 2168} +, { 1,168, 2.56554, 28.4230, 98.1567, 53.1240,721.6058, 2169} +, { 1,169, 2.52248, 27.1151,103.7461, 53.1240,721.4369, 2170} +, { 1,170, 2.48079, 25.9142,109.3356, 53.1240,721.2681, 2171} +, { 1,171, 2.44044, 24.8087,114.9250, 53.1240,721.0993, 2172} +, { 1,172, 2.40138, 23.7884,120.5145, 53.1240,720.9305, 2173} +, { 1,173, 2.36356, 22.8443,126.1039, 53.1240,720.7617, 2174} +, { 1,174, 2.32693, 21.9687,131.6934, 53.1240,720.5928, 2175} +, { 1,175, 2.29145, 21.1548,137.2828, 53.1240,720.4240, 2176} +, { 1,176, 3.33697, 67.2782, 19.9044, 47.5320,723.9693, 2177} +, { 1,177, 3.29123, 61.7931, 25.4938, 47.5320,723.8004, 2178} +, { 1,178, 3.23955, 56.8176, 31.0833, 47.5320,723.6316, 2179} +, { 1,179, 3.18399, 52.3485, 36.6727, 47.5320,723.4628, 2180} +, { 1,180, 3.12622, 48.3587, 42.2622, 47.5320,723.2940, 2181} +, { 1,181, 3.06756, 44.8080, 47.8516, 47.5320,723.1252, 2182} +, { 1,182, 3.00894, 41.6508, 53.4411, 47.5320,722.9563, 2183} +, { 1,183, 2.95105, 38.8414, 59.0305, 47.5320,722.7875, 2184} +, { 1,184, 2.89434, 36.3368, 64.6200, 47.5320,722.6187, 2185} +, { 1,185, 2.83909, 34.0981, 70.2094, 47.5320,722.4499, 2186} +, { 1,186, 2.78548, 32.0910, 75.7989, 47.5320,722.2811, 2187} +, { 1,187, 2.73359, 30.2856, 81.3883, 47.5320,722.1122, 2188} +, { 1,188, 2.68346, 28.6559, 86.9778, 47.5320,721.9434, 2189} +, { 1,189, 2.63507, 27.1799, 92.5672, 47.5320,721.7746, 2190} +, { 1,190, 2.58839, 25.8384, 98.1567, 47.5320,721.6058, 2191} +, { 1,191, 2.54337, 24.6152,103.7461, 47.5320,721.4369, 2192} +, { 1,192, 2.49994, 23.4963,109.3356, 47.5320,721.2681, 2193} +, { 1,193, 2.45805, 22.4696,114.9250, 47.5320,721.0993, 2194} +, { 1,194, 2.41760, 21.5247,120.5145, 47.5320,720.9305, 2195} +, { 1,195, 2.37855, 20.6528,126.1039, 47.5320,720.7617, 2196} +, { 1,196, 2.34082, 19.8460,131.6934, 47.5320,720.5928, 2197} +, { 1,197, 2.30435, 19.0976,137.2828, 47.5320,720.4240, 2198} +, { 1,198, 3.44112, 64.6114, 19.9044, 41.9400,723.9693, 2199} +, { 1,199, 3.38535, 58.7061, 25.4938, 41.9400,723.8004, 2200} +, { 1,200, 3.32359, 53.4565, 31.0833, 41.9400,723.6316, 2201} +, { 1,201, 3.25848, 48.8333, 36.6727, 41.9400,723.4628, 2202} +, { 1,202, 3.19200, 44.7808, 42.2622, 41.9400,723.2940, 2203} +, { 1,203, 3.12558, 41.2332, 47.8516, 41.9400,723.1252, 2204} +, { 1,204, 3.06017, 38.1245, 53.4411, 41.9400,722.9563, 2205} +, { 1,205, 2.99638, 35.3930, 59.0305, 41.9400,722.7875, 2206} +, { 1,206, 2.93457, 32.9846, 64.6200, 41.9400,722.6187, 2207} +, { 1,207, 2.87492, 30.8522, 70.2094, 41.9400,722.4499, 2208} +, { 1,208, 2.81751, 28.9560, 75.7989, 41.9400,722.2811, 2209} +, { 1,209, 2.76234, 27.2624, 81.3883, 41.9400,722.1122, 2210} +, { 1,210, 2.70936, 25.7430, 86.9778, 41.9400,721.9434, 2211} +, { 1,211, 2.65849, 24.3741, 92.5672, 41.9400,721.7746, 2212} +, { 1,212, 2.60964, 23.1359, 98.1567, 41.9400,721.6058, 2213} +, { 1,213, 2.56272, 22.0113,103.7461, 41.9400,721.4369, 2214} +, { 1,214, 2.51763, 20.9863,109.3356, 41.9400,721.2681, 2215} +, { 1,215, 2.47425, 20.0487,114.9250, 41.9400,721.0993, 2216} +, { 1,216, 2.43250, 19.1883,120.5145, 41.9400,720.9305, 2217} +, { 1,217, 2.39229, 18.3962,126.1039, 41.9400,720.7617, 2218} +, { 1,218, 2.35352, 17.6650,131.6934, 41.9400,720.5928, 2219} +, { 1,219, 2.31611, 16.9879,137.2828, 41.9400,720.4240, 2220} +, { 1,220, 3.55444, 61.2946, 19.9044, 36.3480,723.9693, 2221} +, { 1,221, 3.48543, 54.9549, 25.4938, 36.3480,723.8004, 2222} +, { 1,222, 3.41095, 49.4643, 31.0833, 36.3480,723.6316, 2223} +, { 1,223, 3.33429, 44.7452, 36.6727, 36.3480,723.4628, 2224} +, { 1,224, 3.25769, 40.6975, 42.2622, 36.3480,723.2940, 2225} +, { 1,225, 3.18259, 37.2202, 47.8516, 36.3480,723.1252, 2226} +, { 1,226, 3.10980, 34.2216, 53.4411, 36.3480,722.9563, 2227} +, { 1,227, 3.03977, 31.6227, 59.0305, 36.3480,722.7875, 2228} +, { 1,228, 2.97268, 29.3573, 64.6200, 36.3480,722.6187, 2229} +, { 1,229, 2.90856, 27.3710, 70.2094, 36.3480,722.4499, 2230} +, { 1,230, 2.84736, 25.6192, 75.7989, 36.3480,722.2811, 2231} +, { 1,231, 2.78895, 24.0655, 81.3883, 36.3480,722.1122, 2232} +, { 1,232, 2.73320, 22.6800, 86.9778, 36.3480,721.9434, 2233} +, { 1,233, 2.67994, 21.4382, 92.5672, 36.3480,721.7746, 2234} +, { 1,234, 2.62903, 20.3199, 98.1567, 36.3480,721.6058, 2235} +, { 1,235, 2.58031, 19.3082,103.7461, 36.3480,721.4369, 2236} +, { 1,236, 2.53364, 18.3891,109.3356, 36.3480,721.2681, 2237} +, { 1,237, 2.48889, 17.5509,114.9250, 36.3480,721.0993, 2238} +, { 1,238, 2.44592, 16.7837,120.5145, 36.3480,720.9305, 2239} +, { 1,239, 2.40463, 16.0790,126.1039, 36.3480,720.7617, 2240} +, { 1,240, 2.36490, 15.4298,131.6934, 36.3480,720.5928, 2241} +, { 1,241, 2.32664, 14.8298,137.2828, 36.3480,720.4240, 2242} +, { 1,242, 3.67753, 57.0903, 19.9044, 30.7560,723.9693, 2243} +, { 1,243, 3.59084, 50.3445, 25.4938, 30.7560,723.8004, 2244} +, { 1,244, 3.50036, 44.6968, 31.0833, 30.7560,723.6316, 2245} +, { 1,245, 3.40996, 39.9853, 36.6727, 30.7560,723.4628, 2246} +, { 1,246, 3.32187, 36.0450, 42.2622, 30.7560,723.2940, 2247} +, { 1,247, 3.23727, 32.7304, 47.8516, 30.7560,723.1252, 2248} +, { 1,248, 3.15668, 29.9210, 53.4411, 30.7560,722.9563, 2249} +, { 1,249, 3.08024, 27.5204, 59.0305, 30.7560,722.7875, 2250} +, { 1,250, 3.00785, 25.4522, 64.6200, 30.7560,722.6187, 2251} +, { 1,251, 2.93934, 23.6563, 70.2094, 30.7560,722.4499, 2252} +, { 1,252, 2.87446, 22.0852, 75.7989, 30.7560,722.2811, 2253} +, { 1,253, 2.81296, 20.7012, 81.3883, 30.7560,722.1122, 2254} +, { 1,254, 2.75459, 19.4740, 86.9778, 30.7560,721.9434, 2255} +, { 1,255, 2.69910, 18.3794, 92.5672, 30.7560,721.7746, 2256} +, { 1,256, 2.64628, 17.3976, 98.1567, 30.7560,721.6058, 2257} +, { 1,257, 2.59590, 16.5127,103.7461, 30.7560,721.4369, 2258} +, { 1,258, 2.54780, 15.7112,109.3356, 30.7560,721.2681, 2259} +, { 1,259, 2.50180, 14.9823,114.9250, 30.7560,721.0993, 2260} +, { 1,260, 2.45773, 14.3166,120.5145, 30.7560,720.9305, 2261} +, { 1,261, 2.41547, 13.7065,126.1039, 30.7560,720.7617, 2262} +, { 1,262, 2.37488, 13.1454,131.6934, 30.7560,720.5928, 2263} +, { 1,263, 2.33586, 12.6277,137.2828, 30.7560,720.4240, 2264} +, { 1,264, 3.81002, 51.6565, 19.9044, 25.1640,723.9693, 2265} +, { 1,265, 3.69973, 44.6270, 25.4938, 25.1640,723.8004, 2266} +, { 1,266, 3.58950, 38.9925, 31.0833, 25.1640,723.6316, 2267} +, { 1,267, 3.48319, 34.4570, 36.6727, 25.1640,723.4628, 2268} +, { 1,268, 3.38250, 30.7707, 42.2622, 25.1640,723.2940, 2269} +, { 1,269, 3.28794, 27.7388, 47.8516, 25.1640,723.1252, 2270} +, { 1,270, 3.19945, 25.2145, 53.4411, 25.1640,722.9563, 2271} +, { 1,271, 3.11669, 23.0880, 59.0305, 25.1640,722.7875, 2272} +, { 1,272, 3.03920, 21.2767, 64.6200, 25.1640,722.6187, 2273} +, { 1,273, 2.96654, 19.7184, 70.2094, 25.1640,722.4499, 2274} +, { 1,274, 2.89824, 18.3653, 75.7989, 25.1640,722.2811, 2275} +, { 1,275, 2.83391, 17.1808, 81.3883, 25.1640,722.1122, 2276} +, { 1,276, 2.77316, 16.1360, 86.9778, 25.1640,721.9434, 2277} +, { 1,277, 2.71566, 15.2081, 92.5672, 25.1640,721.7746, 2278} +, { 1,278, 2.66113, 14.3790, 98.1567, 25.1640,721.6058, 2279} +, { 1,279, 2.60929, 13.6340,103.7461, 25.1640,721.4369, 2280} +, { 1,280, 2.55992, 12.9611,109.3356, 25.1640,721.2681, 2281} +, { 1,281, 2.51282, 12.3506,114.9250, 25.1640,721.0993, 2282} +, { 1,282, 2.46779, 11.7942,120.5145, 25.1640,720.9305, 2283} +, { 1,283, 2.42469, 11.2851,126.1039, 25.1640,720.7617, 2284} +, { 1,284, 2.38336, 10.8177,131.6934, 25.1640,720.5928, 2285} +, { 1,285, 2.34367, 10.3870,137.2828, 25.1640,720.4240, 2286} +, { 1,286, 3.94910, 44.5176, 19.9044, 19.5720,723.9693, 2287} +, { 1,287, 3.80805, 37.5140, 25.4938, 19.5720,723.8004, 2288} +, { 1,288, 3.67443, 32.1971, 31.0833, 19.5720,723.6316, 2289} +, { 1,289, 3.55067, 28.0886, 36.6727, 19.5720,723.4628, 2290} +, { 1,290, 3.43695, 24.8493, 42.2622, 19.5720,723.2940, 2291} +, { 1,291, 3.33256, 22.2453, 47.8516, 19.5720,723.1252, 2292} +, { 1,292, 3.23653, 20.1145, 53.4411, 19.5720,722.9563, 2293} +, { 1,293, 3.14791, 18.3433, 59.0305, 19.5720,722.7875, 2294} +, { 1,294, 3.06580, 16.8504, 64.6200, 19.5720,722.6187, 2295} +, { 1,295, 2.98943, 15.5767, 70.2094, 19.5720,722.4499, 2296} +, { 1,296, 2.91813, 14.4781, 75.7989, 19.5720,722.2811, 2297} +, { 1,297, 2.85133, 13.5216, 81.3883, 19.5720,722.1122, 2298} +, { 1,298, 2.78853, 12.6816, 86.9778, 19.5720,721.9434, 2299} +, { 1,299, 2.72933, 11.9385, 92.5672, 19.5720,721.7746, 2300} +, { 1,300, 2.67334, 11.2766, 98.1567, 19.5720,721.6058, 2301} +, { 1,301, 2.62027, 10.6835,103.7461, 19.5720,721.4369, 2302} +, { 1,302, 2.56984, 10.1489,109.3356, 19.5720,721.2681, 2303} +, { 1,303, 2.52182, 9.6649,114.9250, 19.5720,721.0993, 2304} +, { 1,304, 2.47600, 9.2245,120.5145, 19.5720,720.9305, 2305} +, { 1,305, 2.43219, 8.8222,126.1039, 19.5720,720.7617, 2306} +, { 1,306, 2.39025, 8.4533,131.6934, 19.5720,720.5928, 2307} +, { 1,307, 2.35002, 8.1138,137.2828, 19.5720,720.4240, 2308} +, { 1,308, 4.08674, 35.0826, 19.9044, 13.9800,723.9693, 2309} +, { 1,309, 3.90818, 28.7390, 25.4938, 13.9800,723.8004, 2310} +, { 1,310, 3.74920, 24.2163, 31.0833, 13.9800,723.6316, 2311} +, { 1,311, 3.60806, 20.8673, 36.6727, 13.9800,723.4628, 2312} +, { 1,312, 3.48210, 18.3038, 42.2622, 13.9800,723.2940, 2313} +, { 1,313, 3.36886, 16.2859, 47.8516, 13.9800,723.1252, 2314} +, { 1,314, 3.26628, 14.6599, 53.4411, 13.9800,722.9563, 2315} +, { 1,315, 3.17268, 13.3237, 59.0305, 13.9800,722.7875, 2316} +, { 1,316, 3.08672, 12.2073, 64.6200, 13.9800,722.6187, 2317} +, { 1,317, 3.00732, 11.2614, 70.2094, 13.9800,722.4499, 2318} +, { 1,318, 2.93359, 10.4499, 75.7989, 13.9800,722.2811, 2319} +, { 1,319, 2.86481, 9.7465, 81.3883, 13.9800,722.1122, 2320} +, { 1,320, 2.80039, 9.1311, 86.9778, 13.9800,721.9434, 2321} +, { 1,321, 2.73983, 8.5882, 92.5672, 13.9800,721.7746, 2322} +, { 1,322, 2.68271, 8.1059, 98.1567, 13.9800,721.6058, 2323} +, { 1,323, 2.62867, 7.6745,103.7461, 13.9800,721.4369, 2324} +, { 1,324, 2.57742, 7.2865,109.3356, 13.9800,721.2681, 2325} +, { 1,325, 2.52868, 6.9356,114.9250, 13.9800,721.0993, 2326} +, { 1,326, 2.48224, 6.6169,120.5145, 13.9800,720.9305, 2327} +, { 1,327, 2.43790, 6.3260,126.1039, 13.9800,720.7617, 2328} +, { 1,328, 2.39548, 6.0596,131.6934, 13.9800,720.5928, 2329} +, { 1,329, 2.35483, 5.8146,137.2828, 13.9800,720.4240, 2330} +, { 1,330, 4.20544, 22.8513, 19.9044, 8.3880,723.9693, 2331} +, { 1,331, 3.98818, 18.2123, 25.4938, 8.3880,723.8004, 2332} +, { 1,332, 3.80611, 15.1019, 31.0833, 8.3880,723.6316, 2333} +, { 1,333, 3.65034, 12.8834, 36.6727, 8.3880,723.4628, 2334} +, { 1,334, 3.51464, 11.2259, 42.2622, 8.3880,723.2940, 2335} +, { 1,335, 3.39462, 9.9425, 47.8516, 8.3880,723.1252, 2336} +, { 1,336, 3.28714, 8.9202, 53.4411, 8.3880,722.9563, 2337} +, { 1,337, 3.18991, 8.0874, 59.0305, 8.3880,722.7875, 2338} +, { 1,338, 3.10118, 7.3959, 64.6200, 8.3880,722.6187, 2339} +, { 1,339, 3.01961, 6.8129, 70.2094, 8.3880,722.4499, 2340} +, { 1,340, 2.94417, 6.3147, 75.7989, 8.3880,722.2811, 2341} +, { 1,341, 2.87401, 5.8842, 81.3883, 8.3880,722.1122, 2342} +, { 1,342, 2.80846, 5.5085, 86.9778, 8.3880,721.9434, 2343} +, { 1,343, 2.74696, 5.1777, 92.5672, 8.3880,721.7746, 2344} +, { 1,344, 2.68905, 4.8844, 98.1567, 8.3880,721.6058, 2345} +, { 1,345, 2.63435, 4.6224,103.7461, 8.3880,721.4369, 2346} +, { 1,346, 2.58253, 4.3870,109.3356, 8.3880,721.2681, 2347} +, { 1,347, 2.53331, 4.1744,114.9250, 8.3880,721.0993, 2348} +, { 1,348, 2.48645, 3.9815,120.5145, 8.3880,720.9305, 2349} +, { 1,349, 2.44174, 3.8055,126.1039, 8.3880,720.7617, 2350} +, { 1,350, 2.39900, 3.6444,131.6934, 8.3880,720.5928, 2351} +, { 1,351, 2.35807, 3.4964,137.2828, 8.3880,720.4240, 2352} +, { 1,352, 4.27738, 7.9961, 19.9044, 2.7960,723.9693, 2353} +, { 1,353, 4.03356, 6.2588, 25.4938, 2.7960,723.8004, 2354} +, { 1,354, 3.83720, 5.1400, 31.0833, 2.7960,723.6316, 2355} +, { 1,355, 3.67291, 4.3599, 36.6727, 2.7960,723.4628, 2356} +, { 1,356, 3.53174, 3.7851, 42.2622, 2.7960,723.2940, 2357} +, { 1,357, 3.40802, 3.3440, 47.8516, 2.7960,723.1252, 2358} +, { 1,358, 3.29792, 2.9949, 53.4411, 2.7960,722.9563, 2359} +, { 1,359, 3.19875, 2.7118, 59.0305, 2.7960,722.7875, 2360} +, { 1,360, 3.10857, 2.4776, 64.6200, 2.7960,722.6187, 2361} +, { 1,361, 3.02588, 2.2805, 70.2094, 2.7960,722.4499, 2362} +, { 1,362, 2.94954, 2.1125, 75.7989, 2.7960,722.2811, 2363} +, { 1,363, 2.87867, 1.9676, 81.3883, 2.7960,722.1122, 2364} +, { 1,364, 2.81254, 1.8412, 86.9778, 2.7960,721.9434, 2365} +, { 1,365, 2.75056, 1.7301, 92.5672, 2.7960,721.7746, 2366} +, { 1,366, 2.69225, 1.6316, 98.1567, 2.7960,721.6058, 2367} +, { 1,367, 2.63722, 1.5438,103.7461, 2.7960,721.4369, 2368} +, { 1,368, 2.58511, 1.4649,109.3356, 2.7960,721.2681, 2369} +, { 1,369, 2.53564, 1.3937,114.9250, 2.7960,721.0993, 2370} +, { 1,370, 2.48857, 1.3291,120.5145, 2.7960,720.9305, 2371} +, { 1,371, 2.44367, 1.2702,126.1039, 2.7960,720.7617, 2372} +, { 1,372, 2.40077, 1.2163,131.6934, 2.7960,720.5928, 2373} +, { 1,373, 2.35970, 1.1668,137.2828, 2.7960,720.4240, 2374} +, { 1,374, 4.27738, -7.9961, 19.9044, -2.7960,723.9693, 2375} +, { 1,375, 4.03356, -6.2588, 25.4938, -2.7960,723.8004, 2376} +, { 1,376, 3.83720, -5.1400, 31.0833, -2.7960,723.6316, 2377} +, { 1,377, 3.67291, -4.3599, 36.6727, -2.7960,723.4628, 2378} +, { 1,378, 3.53174, -3.7851, 42.2622, -2.7960,723.2940, 2379} +, { 1,379, 3.40802, -3.3440, 47.8516, -2.7960,723.1252, 2380} +, { 1,380, 3.29792, -2.9949, 53.4411, -2.7960,722.9563, 2381} +, { 1,381, 3.19875, -2.7118, 59.0305, -2.7960,722.7875, 2382} +, { 1,382, 3.10857, -2.4775, 64.6200, -2.7960,722.6187, 2383} +, { 1,383, 3.02588, -2.2805, 70.2094, -2.7960,722.4499, 2384} +, { 1,384, 2.94954, -2.1125, 75.7989, -2.7960,722.2811, 2385} +, { 1,385, 2.87867, -1.9676, 81.3883, -2.7960,722.1122, 2386} +, { 1,386, 2.81254, -1.8412, 86.9778, -2.7960,721.9434, 2387} +, { 1,387, 2.75056, -1.7301, 92.5672, -2.7960,721.7746, 2388} +, { 1,388, 2.69225, -1.6316, 98.1567, -2.7960,721.6058, 2389} +, { 1,389, 2.63722, -1.5438,103.7461, -2.7960,721.4369, 2390} +, { 1,390, 2.58511, -1.4649,109.3356, -2.7960,721.2681, 2391} +, { 1,391, 2.53564, -1.3937,114.9250, -2.7960,721.0993, 2392} +, { 1,392, 2.48857, -1.3291,120.5145, -2.7960,720.9305, 2393} +, { 1,393, 2.44367, -1.2702,126.1039, -2.7960,720.7617, 2394} +, { 1,394, 2.40077, -1.2163,131.6934, -2.7960,720.5928, 2395} +, { 1,395, 2.35970, -1.1668,137.2828, -2.7960,720.4240, 2396} +, { 1,396, 4.20544,-22.8513, 19.9044, -8.3880,723.9693, 2397} +, { 1,397, 3.98818,-18.2123, 25.4938, -8.3880,723.8004, 2398} +, { 1,398, 3.80611,-15.1019, 31.0833, -8.3880,723.6316, 2399} +, { 1,399, 3.65034,-12.8834, 36.6727, -8.3880,723.4628, 2400} +, { 1,400, 3.51464,-11.2259, 42.2622, -8.3880,723.2940, 2401} +, { 1,401, 3.39462, -9.9425, 47.8516, -8.3880,723.1252, 2402} +, { 1,402, 3.28714, -8.9203, 53.4411, -8.3880,722.9563, 2403} +, { 1,403, 3.18991, -8.0874, 59.0305, -8.3880,722.7875, 2404} +, { 1,404, 3.10118, -7.3959, 64.6200, -8.3880,722.6187, 2405} +, { 1,405, 3.01961, -6.8129, 70.2094, -8.3880,722.4499, 2406} +, { 1,406, 2.94417, -6.3147, 75.7989, -8.3880,722.2811, 2407} +, { 1,407, 2.87401, -5.8842, 81.3883, -8.3880,722.1122, 2408} +, { 1,408, 2.80846, -5.5085, 86.9778, -8.3880,721.9434, 2409} +, { 1,409, 2.74696, -5.1777, 92.5672, -8.3880,721.7746, 2410} +, { 1,410, 2.68905, -4.8844, 98.1567, -8.3880,721.6058, 2411} +, { 1,411, 2.63435, -4.6224,103.7461, -8.3880,721.4369, 2412} +, { 1,412, 2.58253, -4.3870,109.3356, -8.3880,721.2681, 2413} +, { 1,413, 2.53331, -4.1744,114.9250, -8.3880,721.0993, 2414} +, { 1,414, 2.48645, -3.9815,120.5145, -8.3880,720.9305, 2415} +, { 1,415, 2.44174, -3.8055,126.1039, -8.3880,720.7617, 2416} +, { 1,416, 2.39900, -3.6444,131.6934, -8.3880,720.5928, 2417} +, { 1,417, 2.35807, -3.4964,137.2828, -8.3880,720.4240, 2418} +, { 1,418, 4.08674,-35.0826, 19.9044,-13.9800,723.9693, 2419} +, { 1,419, 3.90818,-28.7390, 25.4938,-13.9800,723.8004, 2420} +, { 1,420, 3.74920,-24.2163, 31.0833,-13.9800,723.6316, 2421} +, { 1,421, 3.60806,-20.8673, 36.6727,-13.9800,723.4628, 2422} +, { 1,422, 3.48210,-18.3038, 42.2622,-13.9800,723.2940, 2423} +, { 1,423, 3.36886,-16.2859, 47.8516,-13.9800,723.1252, 2424} +, { 1,424, 3.26628,-14.6599, 53.4411,-13.9800,722.9563, 2425} +, { 1,425, 3.17268,-13.3237, 59.0305,-13.9800,722.7875, 2426} +, { 1,426, 3.08672,-12.2073, 64.6200,-13.9800,722.6187, 2427} +, { 1,427, 3.00732,-11.2614, 70.2094,-13.9800,722.4499, 2428} +, { 1,428, 2.93359,-10.4499, 75.7989,-13.9800,722.2811, 2429} +, { 1,429, 2.86481, -9.7465, 81.3883,-13.9800,722.1122, 2430} +, { 1,430, 2.80039, -9.1311, 86.9778,-13.9800,721.9434, 2431} +, { 1,431, 2.73983, -8.5882, 92.5672,-13.9800,721.7746, 2432} +, { 1,432, 2.68271, -8.1059, 98.1567,-13.9800,721.6058, 2433} +, { 1,433, 2.62867, -7.6745,103.7461,-13.9800,721.4369, 2434} +, { 1,434, 2.57742, -7.2865,109.3356,-13.9800,721.2681, 2435} +, { 1,435, 2.52868, -6.9356,114.9250,-13.9800,721.0993, 2436} +, { 1,436, 2.48224, -6.6169,120.5145,-13.9800,720.9305, 2437} +, { 1,437, 2.43790, -6.3260,126.1039,-13.9800,720.7617, 2438} +, { 1,438, 2.39548, -6.0596,131.6934,-13.9800,720.5928, 2439} +, { 1,439, 2.35483, -5.8146,137.2828,-13.9800,720.4240, 2440} +, { 1,440, 3.94910,-44.5176, 19.9044,-19.5720,723.9693, 2441} +, { 1,441, 3.80805,-37.5140, 25.4938,-19.5720,723.8004, 2442} +, { 1,442, 3.67443,-32.1971, 31.0833,-19.5720,723.6316, 2443} +, { 1,443, 3.55067,-28.0886, 36.6727,-19.5720,723.4628, 2444} +, { 1,444, 3.43695,-24.8493, 42.2622,-19.5720,723.2940, 2445} +, { 1,445, 3.33256,-22.2453, 47.8516,-19.5720,723.1252, 2446} +, { 1,446, 3.23653,-20.1145, 53.4411,-19.5720,722.9563, 2447} +, { 1,447, 3.14791,-18.3433, 59.0305,-19.5720,722.7875, 2448} +, { 1,448, 3.06580,-16.8504, 64.6200,-19.5720,722.6187, 2449} +, { 1,449, 2.98943,-15.5767, 70.2094,-19.5720,722.4499, 2450} +, { 1,450, 2.91813,-14.4781, 75.7989,-19.5720,722.2811, 2451} +, { 1,451, 2.85133,-13.5216, 81.3883,-19.5720,722.1122, 2452} +, { 1,452, 2.78853,-12.6816, 86.9778,-19.5720,721.9434, 2453} +, { 1,453, 2.72933,-11.9385, 92.5672,-19.5720,721.7746, 2454} +, { 1,454, 2.67334,-11.2766, 98.1567,-19.5720,721.6058, 2455} +, { 1,455, 2.62027,-10.6835,103.7461,-19.5720,721.4369, 2456} +, { 1,456, 2.56984,-10.1489,109.3356,-19.5720,721.2681, 2457} +, { 1,457, 2.52182, -9.6649,114.9250,-19.5720,721.0993, 2458} +, { 1,458, 2.47600, -9.2245,120.5145,-19.5720,720.9305, 2459} +, { 1,459, 2.43219, -8.8222,126.1039,-19.5720,720.7617, 2460} +, { 1,460, 2.39025, -8.4533,131.6934,-19.5720,720.5928, 2461} +, { 1,461, 2.35002, -8.1138,137.2828,-19.5720,720.4240, 2462} +, { 1,462, 3.81002,-51.6565, 19.9044,-25.1640,723.9693, 2463} +, { 1,463, 3.69973,-44.6270, 25.4938,-25.1640,723.8004, 2464} +, { 1,464, 3.58950,-38.9925, 31.0833,-25.1640,723.6316, 2465} +, { 1,465, 3.48319,-34.4570, 36.6727,-25.1640,723.4628, 2466} +, { 1,466, 3.38250,-30.7707, 42.2622,-25.1640,723.2940, 2467} +, { 1,467, 3.28794,-27.7388, 47.8516,-25.1640,723.1252, 2468} +, { 1,468, 3.19945,-25.2145, 53.4411,-25.1640,722.9563, 2469} +, { 1,469, 3.11669,-23.0880, 59.0305,-25.1640,722.7875, 2470} +, { 1,470, 3.03920,-21.2767, 64.6200,-25.1640,722.6187, 2471} +, { 1,471, 2.96654,-19.7184, 70.2094,-25.1640,722.4499, 2472} +, { 1,472, 2.89824,-18.3653, 75.7989,-25.1640,722.2811, 2473} +, { 1,473, 2.83391,-17.1808, 81.3883,-25.1640,722.1122, 2474} +, { 1,474, 2.77316,-16.1360, 86.9778,-25.1640,721.9434, 2475} +, { 1,475, 2.71566,-15.2081, 92.5672,-25.1640,721.7746, 2476} +, { 1,476, 2.66113,-14.3790, 98.1567,-25.1640,721.6058, 2477} +, { 1,477, 2.60929,-13.6340,103.7461,-25.1640,721.4369, 2478} +, { 1,478, 2.55992,-12.9611,109.3356,-25.1640,721.2681, 2479} +, { 1,479, 2.51282,-12.3506,114.9250,-25.1640,721.0993, 2480} +, { 1,480, 2.46779,-11.7942,120.5145,-25.1640,720.9305, 2481} +, { 1,481, 2.42469,-11.2851,126.1039,-25.1640,720.7617, 2482} +, { 1,482, 2.38336,-10.8177,131.6934,-25.1640,720.5928, 2483} +, { 1,483, 2.34367,-10.3870,137.2828,-25.1640,720.4240, 2484} +, { 1,484, 3.67753,-57.0903, 19.9044,-30.7560,723.9693, 2485} +, { 1,485, 3.59084,-50.3445, 25.4938,-30.7560,723.8004, 2486} +, { 1,486, 3.50036,-44.6968, 31.0833,-30.7560,723.6316, 2487} +, { 1,487, 3.40996,-39.9853, 36.6727,-30.7560,723.4628, 2488} +, { 1,488, 3.32187,-36.0450, 42.2622,-30.7560,723.2940, 2489} +, { 1,489, 3.23727,-32.7304, 47.8516,-30.7560,723.1252, 2490} +, { 1,490, 3.15668,-29.9210, 53.4411,-30.7560,722.9563, 2491} +, { 1,491, 3.08024,-27.5204, 59.0305,-30.7560,722.7875, 2492} +, { 1,492, 3.00785,-25.4522, 64.6200,-30.7560,722.6187, 2493} +, { 1,493, 2.93934,-23.6563, 70.2094,-30.7560,722.4499, 2494} +, { 1,494, 2.87446,-22.0852, 75.7989,-30.7560,722.2811, 2495} +, { 1,495, 2.81296,-20.7012, 81.3883,-30.7560,722.1122, 2496} +, { 1,496, 2.75459,-19.4740, 86.9778,-30.7560,721.9434, 2497} +, { 1,497, 2.69910,-18.3794, 92.5672,-30.7560,721.7746, 2498} +, { 1,498, 2.64628,-17.3976, 98.1567,-30.7560,721.6058, 2499} +, { 1,499, 2.59590,-16.5127,103.7461,-30.7560,721.4369, 2500} +, { 1,500, 2.54780,-15.7112,109.3356,-30.7560,721.2681, 2501} +, { 1,501, 2.50180,-14.9823,114.9250,-30.7560,721.0993, 2502} +, { 1,502, 2.45773,-14.3166,120.5145,-30.7560,720.9305, 2503} +, { 1,503, 2.41547,-13.7065,126.1039,-30.7560,720.7617, 2504} +, { 1,504, 2.37488,-13.1454,131.6934,-30.7560,720.5928, 2505} +, { 1,505, 2.33586,-12.6277,137.2828,-30.7560,720.4240, 2506} +, { 1,506, 3.55444,-61.2947, 19.9044,-36.3480,723.9693, 2507} +, { 1,507, 3.48543,-54.9549, 25.4938,-36.3480,723.8004, 2508} +, { 1,508, 3.41095,-49.4643, 31.0833,-36.3480,723.6316, 2509} +, { 1,509, 3.33429,-44.7452, 36.6727,-36.3480,723.4628, 2510} +, { 1,510, 3.25769,-40.6975, 42.2622,-36.3480,723.2940, 2511} +, { 1,511, 3.18259,-37.2202, 47.8516,-36.3480,723.1252, 2512} +, { 1,512, 3.10980,-34.2216, 53.4411,-36.3480,722.9563, 2513} +, { 1,513, 3.03977,-31.6227, 59.0305,-36.3480,722.7875, 2514} +, { 1,514, 2.97268,-29.3573, 64.6200,-36.3480,722.6187, 2515} +, { 1,515, 2.90856,-27.3710, 70.2094,-36.3480,722.4499, 2516} +, { 1,516, 2.84736,-25.6192, 75.7989,-36.3480,722.2811, 2517} +, { 1,517, 2.78895,-24.0655, 81.3883,-36.3480,722.1122, 2518} +, { 1,518, 2.73320,-22.6800, 86.9778,-36.3480,721.9434, 2519} +, { 1,519, 2.67994,-21.4382, 92.5672,-36.3480,721.7746, 2520} +, { 1,520, 2.62903,-20.3199, 98.1567,-36.3480,721.6058, 2521} +, { 1,521, 2.58031,-19.3082,103.7461,-36.3480,721.4369, 2522} +, { 1,522, 2.53364,-18.3891,109.3356,-36.3480,721.2681, 2523} +, { 1,523, 2.48889,-17.5509,114.9250,-36.3480,721.0993, 2524} +, { 1,524, 2.44592,-16.7837,120.5145,-36.3480,720.9305, 2525} +, { 1,525, 2.40463,-16.0790,126.1039,-36.3480,720.7617, 2526} +, { 1,526, 2.36490,-15.4298,131.6934,-36.3480,720.5928, 2527} +, { 1,527, 2.32664,-14.8298,137.2828,-36.3480,720.4240, 2528} +, { 1,528, 3.44112,-64.6114, 19.9044,-41.9400,723.9693, 2529} +, { 1,529, 3.38535,-58.7061, 25.4938,-41.9400,723.8004, 2530} +, { 1,530, 3.32359,-53.4565, 31.0833,-41.9400,723.6316, 2531} +, { 1,531, 3.25848,-48.8333, 36.6727,-41.9400,723.4628, 2532} +, { 1,532, 3.19200,-44.7808, 42.2622,-41.9400,723.2940, 2533} +, { 1,533, 3.12558,-41.2332, 47.8516,-41.9400,723.1252, 2534} +, { 1,534, 3.06017,-38.1245, 53.4411,-41.9400,722.9563, 2535} +, { 1,535, 2.99638,-35.3930, 59.0305,-41.9400,722.7875, 2536} +, { 1,536, 2.93457,-32.9846, 64.6200,-41.9400,722.6187, 2537} +, { 1,537, 2.87492,-30.8522, 70.2094,-41.9400,722.4499, 2538} +, { 1,538, 2.81751,-28.9560, 75.7989,-41.9400,722.2811, 2539} +, { 1,539, 2.76234,-27.2624, 81.3883,-41.9400,722.1122, 2540} +, { 1,540, 2.70936,-25.7430, 86.9778,-41.9400,721.9434, 2541} +, { 1,541, 2.65849,-24.3741, 92.5672,-41.9400,721.7746, 2542} +, { 1,542, 2.60964,-23.1359, 98.1567,-41.9400,721.6058, 2543} +, { 1,543, 2.56272,-22.0113,103.7461,-41.9400,721.4369, 2544} +, { 1,544, 2.51763,-20.9863,109.3356,-41.9400,721.2681, 2545} +, { 1,545, 2.47425,-20.0487,114.9250,-41.9400,721.0993, 2546} +, { 1,546, 2.43250,-19.1883,120.5145,-41.9400,720.9305, 2547} +, { 1,547, 2.39229,-18.3962,126.1039,-41.9400,720.7617, 2548} +, { 1,548, 2.35352,-17.6650,131.6934,-41.9400,720.5928, 2549} +, { 1,549, 2.31611,-16.9879,137.2828,-41.9400,720.4240, 2550} +, { 1,550, 3.33697,-67.2782, 19.9044,-47.5320,723.9693, 2551} +, { 1,551, 3.29123,-61.7931, 25.4938,-47.5320,723.8004, 2552} +, { 1,552, 3.23955,-56.8176, 31.0833,-47.5320,723.6316, 2553} +, { 1,553, 3.18399,-52.3485, 36.6727,-47.5320,723.4628, 2554} +, { 1,554, 3.12623,-48.3587, 42.2622,-47.5320,723.2940, 2555} +, { 1,555, 3.06756,-44.8080, 47.8516,-47.5320,723.1252, 2556} +, { 1,556, 3.00894,-41.6508, 53.4411,-47.5320,722.9563, 2557} +, { 1,557, 2.95105,-38.8414, 59.0305,-47.5320,722.7875, 2558} +, { 1,558, 2.89434,-36.3368, 64.6200,-47.5320,722.6187, 2559} +, { 1,559, 2.83909,-34.0981, 70.2094,-47.5320,722.4499, 2560} +, { 1,560, 2.78548,-32.0910, 75.7989,-47.5320,722.2811, 2561} +, { 1,561, 2.73359,-30.2856, 81.3883,-47.5320,722.1122, 2562} +, { 1,562, 2.68346,-28.6559, 86.9778,-47.5320,721.9434, 2563} +, { 1,563, 2.63507,-27.1799, 92.5672,-47.5320,721.7746, 2564} +, { 1,564, 2.58839,-25.8384, 98.1567,-47.5320,721.6058, 2565} +, { 1,565, 2.54337,-24.6152,103.7461,-47.5320,721.4369, 2566} +, { 1,566, 2.49994,-23.4963,109.3356,-47.5320,721.2681, 2567} +, { 1,567, 2.45805,-22.4696,114.9250,-47.5320,721.0993, 2568} +, { 1,568, 2.41760,-21.5247,120.5145,-47.5320,720.9305, 2569} +, { 1,569, 2.37855,-20.6528,126.1039,-47.5320,720.7617, 2570} +, { 1,570, 2.34082,-19.8460,131.6934,-47.5320,720.5928, 2571} +, { 1,571, 2.30435,-19.0976,137.2828,-47.5320,720.4240, 2572} +, { 1,572, 3.24112,-69.4602, 19.9044,-53.1240,723.9693, 2573} +, { 1,573, 3.20306,-64.3640, 25.4938,-53.1240,723.8004, 2574} +, { 1,574, 3.15939,-59.6678, 31.0833,-53.1240,723.6316, 2575} +, { 1,575, 3.11170,-55.3818, 36.6727,-53.1240,723.4628, 2576} +, { 1,576, 3.06136,-51.4964, 42.2622,-53.1240,723.2940, 2577} +, { 1,577, 3.00950,-47.9890, 47.8516,-53.1240,723.1252, 2578} +, { 1,578, 2.95701,-44.8295, 53.4411,-53.1240,722.9563, 2579} +, { 1,579, 2.90458,-41.9854, 59.0305,-53.1240,722.7875, 2580} +, { 1,580, 2.85268,-39.4236, 64.6200,-53.1240,722.6187, 2581} +, { 1,581, 2.80167,-37.1130, 70.2094,-53.1240,722.4499, 2582} +, { 1,582, 2.75177,-35.0249, 75.7989,-53.1240,722.2811, 2583} +, { 1,583, 2.70314,-33.1334, 81.3883,-53.1240,722.1122, 2584} +, { 1,584, 2.65587,-31.4156, 86.9778,-53.1240,721.9434, 2585} +, { 1,585, 2.61000,-29.8514, 92.5672,-53.1240,721.7746, 2586} +, { 1,586, 2.56554,-28.4230, 98.1567,-53.1240,721.6058, 2587} +, { 1,587, 2.52248,-27.1151,103.7461,-53.1240,721.4369, 2588} +, { 1,588, 2.48079,-25.9142,109.3356,-53.1240,721.2681, 2589} +, { 1,589, 2.44044,-24.8087,114.9250,-53.1240,721.0993, 2590} +, { 1,590, 2.40138,-23.7884,120.5145,-53.1240,720.9305, 2591} +, { 1,591, 2.36356,-22.8443,126.1039,-53.1240,720.7617, 2592} +, { 1,592, 2.32693,-21.9687,131.6934,-53.1240,720.5928, 2593} +, { 1,593, 2.29145,-21.1548,137.2828,-53.1240,720.4240, 2594} +, { 1,594, 3.15262,-71.2737, 19.9044,-58.7160,723.9693, 2595} +, { 1,595, 3.12055,-66.5301, 25.4938,-58.7160,723.8004, 2596} +, { 1,596, 3.08329,-62.1040, 31.0833,-58.7160,723.6316, 2597} +, { 1,597, 3.04208,-58.0120, 36.6727,-58.7160,723.4628, 2598} +, { 1,598, 2.99802,-54.2547, 42.2622,-58.7160,723.2940, 2599} +, { 1,599, 2.95209,-50.8211, 47.8516,-58.7160,723.1252, 2600} +, { 1,600, 2.90507,-47.6927, 53.4411,-58.7160,722.9563, 2601} +, { 1,601, 2.85760,-44.8470, 59.0305,-58.7160,722.7875, 2602} +, { 1,602, 2.81018,-42.2594, 64.6200,-58.7160,722.6187, 2603} +, { 1,603, 2.76317,-39.9057, 70.2094,-58.7160,722.4499, 2604} +, { 1,604, 2.71684,-37.7624, 75.7989,-58.7160,722.2811, 2605} +, { 1,605, 2.67138,-35.8078, 81.3883,-58.7160,722.1122, 2606} +, { 1,606, 2.62693,-34.0221, 86.9778,-58.7160,721.9434, 2607} +, { 1,607, 2.58357,-32.3872, 92.5672,-58.7160,721.7746, 2608} +, { 1,608, 2.54134,-30.8873, 98.1567,-58.7160,721.6058, 2609} +, { 1,609, 2.50027,-29.5081,103.7461,-58.7160,721.4369, 2610} +, { 1,610, 2.46036,-28.2369,109.3356,-58.7160,721.2681, 2611} +, { 1,611, 2.42159,-27.0628,114.9250,-58.7160,721.0993, 2612} +, { 1,612, 2.38396,-25.9759,120.5145,-58.7160,720.9305, 2613} +, { 1,613, 2.34742,-24.9674,126.1039,-58.7160,720.7617, 2614} +, { 1,614, 2.31195,-24.0299,131.6934,-58.7160,720.5928, 2615} +, { 1,615, 2.27752,-23.1564,137.2828,-58.7160,720.4240, 2616} +, { 1,616, 3.07062,-72.8019, 19.9044,-64.3080,723.9693, 2617} +, { 1,617, 3.04327,-68.3750, 25.4938,-64.3080,723.8004, 2618} +, { 1,618, 3.01119,-64.2032, 31.0833,-64.3080,723.6316, 2619} +, { 1,619, 2.97534,-60.3053, 36.6727,-64.3080,723.4628, 2620} +, { 1,620, 2.93660,-56.6877, 42.2622,-64.3080,723.2940, 2621} +, { 1,621, 2.89579,-53.3470, 47.8516,-64.3080,723.1252, 2622} +, { 1,622, 2.85360,-50.2728, 53.4411,-64.3080,722.9563, 2623} +, { 1,623, 2.81062,-47.4501, 59.0305,-64.3080,722.7875, 2624} +, { 1,624, 2.76730,-44.8614, 64.6200,-64.3080,722.6187, 2625} +, { 1,625, 2.72403,-42.4880, 70.2094,-64.3080,722.4499, 2626} +, { 1,626, 2.68108,-40.3114, 75.7989,-64.3080,722.2811, 2627} +, { 1,627, 2.63867,-38.3136, 81.3883,-64.3080,722.1122, 2628} +, { 1,628, 2.59696,-36.4778, 86.9778,-64.3080,721.9434, 2629} +, { 1,629, 2.55606,-34.7884, 92.5672,-64.3080,721.7746, 2630} +, { 1,630, 2.51604,-33.2311, 98.1567,-64.3080,721.6058, 2631} +, { 1,631, 2.47696,-31.7931,103.7461,-64.3080,721.4369, 2632} +, { 1,632, 2.43883,-30.4628,109.3356,-64.3080,721.2681, 2633} +, { 1,633, 2.40168,-29.2298,114.9250,-64.3080,721.0993, 2634} +, { 1,634, 2.36550,-28.0849,120.5145,-64.3080,720.9305, 2635} +, { 1,635, 2.33028,-27.0198,126.1039,-64.3080,720.7617, 2636} +, { 1,636, 2.29600,-26.0270,131.6934,-64.3080,720.5928, 2637} +, { 1,637, 2.26264,-25.1000,137.2828,-64.3080,720.4240, 2638} +, { 1,638, 2.99436,-74.1054, 19.9044,-69.9000,723.9693, 2639} +, { 1,639, 2.97079,-69.9622, 25.4938,-69.9000,723.8004, 2640} +, { 1,640, 2.94293,-66.0262, 31.0833,-69.9000,723.6316, 2641} +, { 1,641, 2.91152,-62.3165, 36.6727,-69.9000,723.4628, 2642} +, { 1,642, 2.87729,-58.8425, 42.2622,-69.9000,723.2940, 2643} +, { 1,643, 2.84091,-55.6055, 47.8516,-69.9000,723.1252, 2644} +, { 1,644, 2.80297,-52.6008, 53.4411,-69.9000,722.9563, 2645} +, { 1,645, 2.76400,-49.8189, 59.0305,-69.9000,722.7875, 2646} +, { 1,646, 2.72443,-47.2478, 64.6200,-69.9000,722.6187, 2647} +, { 1,647, 2.68461,-44.8735, 70.2094,-69.9000,722.4499, 2648} +, { 1,648, 2.64483,-42.6815, 75.7989,-69.9000,722.2811, 2649} +, { 1,649, 2.60531,-40.6575, 81.3883,-69.9000,722.1122, 2650} +, { 1,650, 2.56623,-38.7872, 86.9778,-69.9000,721.9434, 2651} +, { 1,651, 2.52771,-37.0574, 92.5672,-69.9000,721.7746, 2652} +, { 1,652, 2.48986,-35.4557, 98.1567,-69.9000,721.6058, 2653} +, { 1,653, 2.45274,-33.9705,103.7461,-69.9000,721.4369, 2654} +, { 1,654, 2.41639,-32.5914,109.3356,-69.9000,721.2681, 2655} +, { 1,655, 2.38085,-31.3089,114.9250,-69.9000,721.0993, 2656} +, { 1,656, 2.34613,-30.1143,120.5145,-69.9000,720.9305, 2657} +, { 1,657, 2.31224,-28.9998,126.1039,-69.9000,720.7617, 2658} +, { 1,658, 2.27918,-27.9584,131.6934,-69.9000,720.5928, 2659} +, { 1,659, 2.24693,-26.9837,137.2828,-69.9000,720.4240, 2660} +, { 1,660, 2.92316,-75.2294, 19.9044,-75.4920,723.9693, 2661} +, { 1,661, 2.90265,-71.3401, 25.4938,-75.4920,723.8004, 2662} +, { 1,662, 2.87827,-67.6210, 31.0833,-75.4920,723.6316, 2663} +, { 1,663, 2.85058,-64.0903, 36.6727,-75.4920,723.4628, 2664} +, { 1,664, 2.82018,-60.7589, 42.2622,-75.4920,723.2940, 2665} +, { 1,665, 2.78763,-57.6309, 47.8516,-75.4920,723.1252, 2666} +, { 1,666, 2.75343,-54.7052, 53.4411,-75.4920,722.9563, 2667} +, { 1,667, 2.71804,-51.9766, 59.0305,-75.4920,722.7875, 2668} +, { 1,668, 2.68185,-49.4370, 64.6200,-75.4920,722.6187, 2669} +, { 1,669, 2.64520,-47.0764, 70.2094,-75.4920,722.4499, 2670} +, { 1,670, 2.60837,-44.8838, 75.7989,-75.4920,722.2811, 2671} +, { 1,671, 2.57157,-42.8476, 81.3883,-75.4920,722.1122, 2672} +, { 1,672, 2.53499,-40.9562, 86.9778,-75.4920,721.9434, 2673} +, { 1,673, 2.49876,-39.1985, 92.5672,-75.4920,721.7746, 2674} +, { 1,674, 2.46300,-37.5638, 98.1567,-75.4920,721.6058, 2675} +, { 1,675, 2.42779,-36.0419,103.7461,-75.4920,721.4369, 2676} +, { 1,676, 2.39320,-34.6236,109.3356,-75.4920,721.2681, 2677} +, { 1,677, 2.35925,-33.3001,114.9250,-75.4920,721.0993, 2678} +, { 1,678, 2.32600,-32.0636,120.5145,-75.4920,720.9305, 2679} +, { 1,679, 2.29344,-30.9068,126.1039,-75.4920,720.7617, 2680} +, { 1,680, 2.26159,-29.8231,131.6934,-75.4920,720.5928, 2681} +, { 1,681, 2.23046,-28.8064,137.2828,-75.4920,720.4240, 2682} +, { 1,682, 2.85646,-76.2078, 19.9044,-81.0840,723.9693, 2683} +, { 1,683, 2.83847,-72.5462, 25.4938,-81.0840,723.8004, 2684} +, { 1,684, 2.81697,-69.0259, 31.0833,-81.0840,723.6316, 2685} +, { 1,685, 2.79242,-65.6637, 36.6727,-81.0840,723.4628, 2686} +, { 1,686, 2.76529,-62.4708, 42.2622,-81.0840,723.2940, 2687} +, { 1,687, 2.73604,-59.4531, 47.8516,-81.0840,723.1252, 2688} +, { 1,688, 2.70512,-56.6118, 53.4411,-81.0840,722.9563, 2689} +, { 1,689, 2.67292,-53.9447, 59.0305,-81.0840,722.7875, 2690} +, { 1,690, 2.63979,-51.4469, 64.6200,-81.0840,722.6187, 2691} +, { 1,691, 2.60604,-49.1112, 70.2094,-81.0840,722.4499, 2692} +, { 1,692, 2.57192,-46.9295, 75.7989,-81.0840,722.2811, 2693} +, { 1,693, 2.53766,-44.8927, 81.3883,-81.0840,722.1122, 2694} +, { 1,694, 2.50344,-42.9915, 86.9778,-81.0840,721.9434, 2695} +, { 1,695, 2.46939,-41.2166, 92.5672,-81.0840,721.7746, 2696} +, { 1,696, 2.43565,-39.5590, 98.1567,-81.0840,721.6058, 2697} +, { 1,697, 2.40229,-38.0098,103.7461,-81.0840,721.4369, 2698} +, { 1,698, 2.36940,-36.5609,109.3356,-81.0840,721.2681, 2699} +, { 1,699, 2.33703,-35.2044,114.9250,-81.0840,721.0993, 2700} +, { 1,700, 2.30521,-33.9333,120.5145,-81.0840,720.9305, 2701} +, { 1,701, 2.27398,-32.7407,126.1039,-81.0840,720.7617, 2702} +, { 1,702, 2.24335,-31.6207,131.6934,-81.0840,720.5928, 2703} +, { 1,703, 2.21334,-30.5676,137.2828,-81.0840,720.4240, 2704} +, { 1,704, 2.79377,-77.0668, 19.9044,-86.6760,723.9693, 2705} +, { 1,705, 2.77787,-73.6099, 25.4938,-86.6760,723.8004, 2706} +, { 1,706, 2.75879,-70.2714, 31.0833,-86.6760,723.6316, 2707} +, { 1,707, 2.73688,-67.0667, 36.6727,-86.6760,723.4628, 2708} +, { 1,708, 2.71256,-64.0067, 42.2622,-86.6760,723.2940, 2709} +, { 1,709, 2.68619,-61.0980, 47.8516,-86.6760,723.1252, 2710} +, { 1,710, 2.65815,-58.3436, 53.4411,-86.6760,722.9563, 2711} +, { 1,711, 2.62878,-55.7433, 59.0305,-86.6760,722.7875, 2712} +, { 1,712, 2.59840,-53.2942, 64.6200,-86.6760,722.6187, 2713} +, { 1,713, 2.56728,-50.9918, 70.2094,-86.6760,722.4499, 2714} +, { 1,714, 2.53567,-48.8300, 75.7989,-86.6760,722.2811, 2715} +, { 1,715, 2.50377,-46.8021, 81.3883,-86.6760,722.1122, 2716} +, { 1,716, 2.47176,-44.9004, 86.9778,-86.6760,721.9434, 2717} +, { 1,717, 2.43978,-43.1175, 92.5672,-86.6760,721.7746, 2718} +, { 1,718, 2.40796,-41.4457, 98.1567,-86.6760,721.6058, 2719} +, { 1,719, 2.37639,-39.8775,103.7461,-86.6760,721.4369, 2720} +, { 1,720, 2.34515,-38.4057,109.3356,-86.6760,721.2681, 2721} +, { 1,721, 2.31430,-37.0235,114.9250,-86.6760,721.0993, 2722} +, { 1,722, 2.28390,-35.7243,120.5145,-86.6760,720.9305, 2723} +, { 1,723, 2.25397,-34.5022,126.1039,-86.6760,720.7617, 2724} +, { 1,724, 2.22455,-33.3515,131.6934,-86.6760,720.5928, 2725} +, { 1,725, 2.19566,-32.2670,137.2828,-86.6760,720.4240, 2726} +, { 1,726, 2.73468,-77.8265, 19.9044,-92.2680,723.9693, 2727} +, { 1,727, 2.72053,-74.5544, 25.4938,-92.2680,723.8004, 2728} +, { 1,728, 2.70348,-71.3823, 31.0833,-92.2680,723.6316, 2729} +, { 1,729, 2.68384,-68.3242, 36.6727,-92.2680,723.4628, 2730} +, { 1,730, 2.66192,-65.3905, 42.2622,-92.2680,723.2940, 2731} +, { 1,731, 2.63806,-62.5880, 47.8516,-92.2680,723.1252, 2732} +, { 1,732, 2.61255,-59.9208, 53.4411,-92.2680,722.9563, 2733} +, { 1,733, 2.58571,-57.3900, 59.0305,-92.2680,722.7875, 2734} +, { 1,734, 2.55780,-54.9945, 64.6200,-92.2680,722.6187, 2735} +, { 1,735, 2.52908,-52.7314, 70.2094,-92.2680,722.4499, 2736} +, { 1,736, 2.49976,-50.5966, 75.7989,-92.2680,722.2811, 2737} +, { 1,737, 2.47004,-48.5849, 81.3883,-92.2680,722.1122, 2738} +, { 1,738, 2.44010,-46.6905, 86.9778,-92.2680,721.9434, 2739} +, { 1,739, 2.41007,-44.9072, 92.5672,-92.2680,721.7746, 2740} +, { 1,740, 2.38007,-43.2288, 98.1567,-92.2680,721.6058, 2741} +, { 1,741, 2.35020,-41.6487,103.7461,-92.2680,721.4369, 2742} +, { 1,742, 2.32055,-40.1609,109.3356,-92.2680,721.2681, 2743} +, { 1,743, 2.29119,-38.7594,114.9250,-92.2680,721.0993, 2744} +, { 1,744, 2.26216,-37.4383,120.5145,-92.2680,720.9305, 2745} +, { 1,745, 2.23352,-36.1923,126.1039,-92.2680,720.7617, 2746} +, { 1,746, 2.20528,-35.0161,131.6934,-92.2680,720.5928, 2747} +, { 1,747, 2.17749,-33.9051,137.2828,-92.2680,720.4240, 2748} +}; + std::vector hcal = { + { 0, 0, 2.77314,104.0817,-23.8777, 95.1900,782.4788, 1001} +, { 0, 1, 2.74382,109.5987,-33.8931, 95.1900,782.1763, 1002} +, { 0, 2, 2.70697,114.7626,-43.9086, 95.1900,781.8738, 1003} +, { 0, 3, 2.66428,119.5310,-53.9240, 95.1900,781.5713, 1004} +, { 0, 4, 2.61734,123.8894,-63.9395, 95.1900,781.2688, 1005} +, { 0, 5, 2.56758,127.8443,-73.9549, 95.1900,780.9663, 1006} +, { 0, 6, 2.51617,131.4166,-83.9703, 95.1900,780.6638, 1007} +, { 0, 7, 2.46405,134.6353,-93.9857, 95.1900,780.3613, 1008} +, { 0, 8, 2.41192,137.5328,-104.0012, 95.1900,780.0588, 1009} +, { 0, 9, 2.36030,140.1422,-114.0166, 95.1900,779.7563, 1010} +, { 0, 10, 2.30956,142.4951,-124.0321, 95.1900,779.4538, 1011} +, { 0, 11, 2.25995,144.6206,-134.0475, 95.1900,779.1513, 1012} +, { 0, 12, 2.21164,146.5451,-144.0629, 95.1900,778.8488, 1013} +, { 0, 13, 2.87631,105.6610,-23.8777, 85.1700,782.4788, 1014} +, { 0, 14, 2.84049,111.6999,-33.8931, 85.1700,782.1763, 1015} +, { 0, 15, 2.79608,117.2729,-43.9086, 85.1700,781.8738, 1016} +, { 0, 16, 2.74539,122.3393,-53.9240, 85.1700,781.5713, 1017} +, { 0, 17, 2.69054,126.8966,-63.9395, 85.1700,781.2688, 1018} +, { 0, 18, 2.63326,130.9685,-73.9549, 85.1700,780.9663, 1019} +, { 0, 19, 2.57493,134.5936,-83.9703, 85.1700,780.6638, 1020} +, { 0, 20, 2.51655,137.8171,-93.9857, 85.1700,780.3613, 1021} +, { 0, 21, 2.45885,140.6848,-104.0012, 85.1700,780.0588, 1022} +, { 0, 22, 2.40231,143.2404,-114.0166, 85.1700,779.7563, 1023} +, { 0, 23, 2.34724,145.5235,-124.0321, 85.1700,779.4538, 1024} +, { 0, 24, 2.29383,147.5693,-134.0475, 85.1700,779.1513, 1025} +, { 0, 25, 2.24219,149.4084,-144.0629, 85.1700,778.8488, 1026} +, { 0, 26, 2.99057,107.6268,-23.8777, 75.1500,782.4788, 1027} +, { 0, 27, 2.94593,114.2757,-33.8931, 75.1500,782.1763, 1028} +, { 0, 28, 2.89159,120.2969,-43.9086, 75.1500,781.8738, 1029} +, { 0, 29, 2.83078,125.6614,-53.9240, 75.1500,781.5713, 1030} +, { 0, 30, 2.76625,130.3919,-63.9395, 75.1500,781.2688, 1031} +, { 0, 31, 2.70010,134.5408,-73.9549, 75.1500,780.9663, 1032} +, { 0, 32, 2.63384,138.1728,-83.9703, 75.1500,780.6638, 1033} +, { 0, 33, 2.56851,141.3545,-93.9857, 75.1500,780.3613, 1034} +, { 0, 34, 2.50475,144.1486,-104.0012, 75.1500,780.0588, 1035} +, { 0, 35, 2.44298,146.6105,-114.0166, 75.1500,779.7563, 1036} +, { 0, 36, 2.38340,148.7887,-124.0321, 75.1500,779.4538, 1037} +, { 0, 37, 2.32609,150.7240,-134.0475, 75.1500,779.1513, 1038} +, { 0, 38, 2.27108,152.4513,-144.0629, 75.1500,778.8488, 1039} +, { 0, 39, 3.11813,110.1338,-23.8777, 65.1300,782.4788, 1040} +, { 0, 40, 3.06121,117.4921,-33.8931, 65.1300,782.1763, 1041} +, { 0, 41, 2.99364,123.9866,-43.9086, 65.1300,781.8738, 1042} +, { 0, 42, 2.91995,129.6229,-53.9240, 65.1300,781.5713, 1043} +, { 0, 43, 2.84364,134.4715,-63.9395, 65.1300,781.2688, 1044} +, { 0, 44, 2.76712,138.6305,-73.9549, 65.1300,780.9663, 1045} +, { 0, 45, 2.69193,142.2017,-83.9703, 65.1300,780.6638, 1046} +, { 0, 46, 2.61899,145.2789,-93.9857, 65.1300,780.3613, 1047} +, { 0, 47, 2.54881,147.9434,-104.0012, 65.1300,780.0588, 1048} +, { 0, 48, 2.48160,150.2636,-114.0166, 65.1300,779.7563, 1049} +, { 0, 49, 2.41742,152.2958,-124.0321, 65.1300,779.4538, 1050} +, { 0, 50, 2.35621,154.0862,-134.0475, 65.1300,779.1513, 1051} +, { 0, 51, 2.29787,155.6726,-144.0629, 65.1300,778.8488, 1052} +, { 0, 52, 3.26173,113.4258,-23.8777, 55.1100,782.4788, 1053} +, { 0, 53, 3.18720,121.5919,-33.8931, 55.1100,782.1763, 1054} +, { 0, 54, 3.10177,128.5459,-43.9086, 55.1100,781.8738, 1055} +, { 0, 55, 3.01173,134.3768,-53.9240, 55.1100,781.5713, 1056} +, { 0, 56, 2.92126,139.2416,-63.9395, 55.1100,781.2688, 1057} +, { 0, 57, 2.83286,143.3071,-73.9549, 55.1100,780.9663, 1058} +, { 0, 58, 2.74785,146.7230,-83.9703, 55.1100,780.6638, 1059} +, { 0, 59, 2.66684,149.6141,-93.9857, 55.1100,780.3613, 1060} +, { 0, 60, 2.59002,152.0810,-104.0012, 55.1100,780.0588, 1061} +, { 0, 61, 2.51733,154.2032,-114.0166, 55.1100,779.7563, 1062} +, { 0, 62, 2.44861,156.0434,-124.0321, 55.1100,779.4538, 1063} +, { 0, 63, 2.38361,157.6513,-134.0475, 55.1100,779.1513, 1064} +, { 0, 64, 2.32209,159.0661,-144.0629, 55.1100,778.8488, 1065} +, { 0, 65, 3.42442,117.9038,-23.8777, 45.0900,782.4788, 1066} +, { 0, 66, 3.32392,126.9314,-33.8931, 45.0900,782.1763, 1067} +, { 0, 67, 3.21432,134.2395,-43.9086, 45.0900,781.8738, 1068} +, { 0, 68, 3.10382,140.0984,-53.9240, 45.0900,781.5713, 1069} +, { 0, 69, 2.99679,144.8086,-63.9395, 45.0900,781.2688, 1070} +, { 0, 70, 2.89525,148.6295,-73.9549, 45.0900,780.9663, 1071} +, { 0, 71, 2.79986,151.7653,-83.9703, 45.0900,780.6638, 1072} +, { 0, 72, 2.71062,154.3705,-93.9857, 45.0900,780.3613, 1073} +, { 0, 73, 2.62723,156.5607,-104.0012, 45.0900,780.0588, 1074} +, { 0, 74, 2.54926,158.4228,-114.0166, 45.0900,779.7563, 1075} +, { 0, 75, 2.47623,160.0220,-124.0321, 45.0900,779.4538, 1076} +, { 0, 76, 2.40770,161.4084,-134.0475, 45.0900,779.1513, 1077} +, { 0, 77, 2.34325,162.6205,-144.0629, 45.0900,778.8488, 1078} +, { 0, 78, 3.60856,124.2493,-23.8777, 35.0700,782.4788, 1079} +, { 0, 79, 3.46905,134.0223,-33.8931, 35.0700,782.1763, 1080} +, { 0, 80, 3.32730,141.3855,-43.9086, 35.0700,781.8738, 1081} +, { 0, 81, 3.19219,146.9617,-53.9240, 35.0700,781.5713, 1082} +, { 0, 82, 3.06680,151.2558,-63.9395, 35.0700,781.2688, 1083} +, { 0, 83, 2.95154,154.6293,-73.9549, 35.0700,780.9663, 1084} +, { 0, 84, 2.84582,157.3323,-83.9703, 35.0700,780.6638, 1085} +, { 0, 85, 2.74869,159.5374,-93.9857, 35.0700,780.3613, 1086} +, { 0, 86, 2.65918,161.3655,-104.0012, 35.0700,780.0588, 1087} +, { 0, 87, 2.57639,162.9028,-114.0166, 35.0700,779.7563, 1088} +, { 0, 88, 2.49951,164.2118,-124.0321, 35.0700,779.4538, 1089} +, { 0, 89, 2.42787,165.3387,-134.0475, 35.0700,779.1513, 1090} +, { 0, 90, 2.36087,166.3183,-144.0629, 35.0700,778.8488, 1091} +, { 0, 91, 3.81205,133.6275,-23.8777, 25.0500,782.4788, 1092} +, { 0, 92, 3.61482,143.5324,-33.8931, 25.0500,782.1763, 1093} +, { 0, 93, 3.43289,150.2951,-43.9086, 25.0500,781.8738, 1094} +, { 0, 94, 3.27062,155.0831,-53.9240, 25.0500,781.5713, 1095} +, { 0, 95, 3.12666,158.6059,-63.9395, 25.0500,781.2688, 1096} +, { 0, 96, 2.99841,161.2877,-73.9549, 25.0500,780.9663, 1097} +, { 0, 97, 2.88334,163.3891,-83.9703, 25.0500,780.6638, 1098} +, { 0, 98, 2.77931,165.0759,-93.9857, 25.0500,780.3613, 1099} +, { 0, 99, 2.68459,166.4575,-104.0012, 25.0500,780.0588, 1100} +, { 0,100, 2.59777,167.6087,-114.0166, 25.0500,779.7563, 1101} +, { 0,101, 2.51774,168.5819,-124.0321, 25.0500,779.4538, 1102} +, { 0,102, 2.44357,169.4150,-134.0475, 25.0500,779.1513, 1103} +, { 0,103, 2.37452,170.1359,-144.0629, 25.0500,778.8488, 1104} +, { 0,104, 4.01611,147.8113,-23.8777, 15.0300,782.4788, 1105} +, { 0,105, 3.74281,156.0850,-33.8931, 15.0300,782.1763, 1106} +, { 0,106, 3.51821,161.1038,-43.9086, 15.0300,781.8738, 1107} +, { 0,107, 3.33075,164.4255,-53.9240, 15.0300,781.5713, 1108} +, { 0,108, 3.17100,166.7719,-63.9395, 15.0300,781.2688, 1109} +, { 0,109, 3.03231,168.5121,-73.9549, 15.0300,780.9663, 1110} +, { 0,110, 2.91003,169.8520,-83.9703, 15.0300,780.6638, 1111} +, { 0,111, 2.80083,170.9143,-93.9857, 15.0300,780.3613, 1112} +, { 0,112, 2.70229,171.7767,-104.0012, 15.0300,780.0588, 1113} +, { 0,113, 2.61256,172.4904,-114.0166, 15.0300,779.7563, 1114} +, { 0,114, 2.53027,173.0907,-124.0321, 15.0300,779.4538, 1115} +, { 0,115, 2.45432,173.6025,-134.0475, 15.0300,779.1513, 1116} +, { 0,116, 2.38384,174.0439,-144.0629, 15.0300,778.8488, 1117} +, { 0,117, 4.16137,168.1501,-23.8777, 5.0100,782.4788, 1118} +, { 0,118, 3.82169,171.5916,-33.8931, 5.0100,782.1763, 1119} +, { 0,119, 3.56706,173.4907,-43.9086, 5.0100,781.8738, 1120} +, { 0,120, 3.36378,174.6920,-53.9240, 5.0100,781.5713, 1121} +, { 0,121, 3.19475,175.5197,-63.9395, 5.0100,781.2688, 1122} +, { 0,122, 3.05018,176.1245,-73.9549, 5.0100,780.9663, 1123} +, { 0,123, 2.92394,176.5856,-83.9703, 5.0100,780.6638, 1124} +, { 0,124, 2.81196,176.9487,-93.9857, 5.0100,780.3613, 1125} +, { 0,125, 2.71138,177.2420,-104.0012, 5.0100,780.0588, 1126} +, { 0,126, 2.62013,177.4840,-114.0166, 5.0100,779.7563, 1127} +, { 0,127, 2.53667,177.6869,-124.0321, 5.0100,779.4538, 1128} +, { 0,128, 2.45979,177.8596,-134.0475, 5.0100,779.1513, 1129} +, { 0,129, 2.38857,178.0083,-144.0629, 5.0100,778.8488, 1130} +, { 0,130, 4.16137,-168.1501,-23.8777, -5.0100,782.4788, 1131} +, { 0,131, 3.82169,-171.5916,-33.8931, -5.0100,782.1763, 1132} +, { 0,132, 3.56706,-173.4907,-43.9086, -5.0100,781.8738, 1133} +, { 0,133, 3.36378,-174.6920,-53.9240, -5.0100,781.5713, 1134} +, { 0,134, 3.19475,-175.5197,-63.9395, -5.0100,781.2688, 1135} +, { 0,135, 3.05018,-176.1245,-73.9549, -5.0100,780.9663, 1136} +, { 0,136, 2.92394,-176.5856,-83.9703, -5.0100,780.6638, 1137} +, { 0,137, 2.81196,-176.9487,-93.9857, -5.0100,780.3613, 1138} +, { 0,138, 2.71138,-177.2420,-104.0012, -5.0100,780.0588, 1139} +, { 0,139, 2.62013,-177.4840,-114.0166, -5.0100,779.7563, 1140} +, { 0,140, 2.53667,-177.6869,-124.0321, -5.0100,779.4538, 1141} +, { 0,141, 2.45979,-177.8596,-134.0475, -5.0100,779.1513, 1142} +, { 0,142, 2.38857,-178.0083,-144.0629, -5.0100,778.8488, 1143} +, { 0,143, 4.01611,-147.8113,-23.8777,-15.0300,782.4788, 1144} +, { 0,144, 3.74281,-156.0850,-33.8931,-15.0300,782.1763, 1145} +, { 0,145, 3.51821,-161.1038,-43.9086,-15.0300,781.8738, 1146} +, { 0,146, 3.33075,-164.4255,-53.9240,-15.0300,781.5713, 1147} +, { 0,147, 3.17100,-166.7719,-63.9395,-15.0300,781.2688, 1148} +, { 0,148, 3.03231,-168.5121,-73.9549,-15.0300,780.9663, 1149} +, { 0,149, 2.91003,-169.8520,-83.9703,-15.0300,780.6638, 1150} +, { 0,150, 2.80083,-170.9143,-93.9857,-15.0300,780.3613, 1151} +, { 0,151, 2.70229,-171.7767,-104.0012,-15.0300,780.0588, 1152} +, { 0,152, 2.61256,-172.4904,-114.0166,-15.0300,779.7563, 1153} +, { 0,153, 2.53027,-173.0907,-124.0321,-15.0300,779.4538, 1154} +, { 0,154, 2.45432,-173.6025,-134.0475,-15.0300,779.1513, 1155} +, { 0,155, 2.38384,-174.0439,-144.0629,-15.0300,778.8488, 1156} +, { 0,156, 3.81205,-133.6275,-23.8777,-25.0500,782.4788, 1157} +, { 0,157, 3.61482,-143.5324,-33.8931,-25.0500,782.1763, 1158} +, { 0,158, 3.43289,-150.2951,-43.9086,-25.0500,781.8738, 1159} +, { 0,159, 3.27062,-155.0831,-53.9240,-25.0500,781.5713, 1160} +, { 0,160, 3.12666,-158.6059,-63.9395,-25.0500,781.2688, 1161} +, { 0,161, 2.99841,-161.2877,-73.9549,-25.0500,780.9663, 1162} +, { 0,162, 2.88334,-163.3891,-83.9703,-25.0500,780.6638, 1163} +, { 0,163, 2.77931,-165.0759,-93.9857,-25.0500,780.3613, 1164} +, { 0,164, 2.68459,-166.4575,-104.0012,-25.0500,780.0588, 1165} +, { 0,165, 2.59777,-167.6087,-114.0166,-25.0500,779.7563, 1166} +, { 0,166, 2.51774,-168.5819,-124.0321,-25.0500,779.4538, 1167} +, { 0,167, 2.44357,-169.4150,-134.0475,-25.0500,779.1513, 1168} +, { 0,168, 2.37452,-170.1359,-144.0629,-25.0500,778.8488, 1169} +, { 0,169, 3.60856,-124.2493,-23.8777,-35.0700,782.4788, 1170} +, { 0,170, 3.46905,-134.0223,-33.8931,-35.0700,782.1763, 1171} +, { 0,171, 3.32730,-141.3855,-43.9086,-35.0700,781.8738, 1172} +, { 0,172, 3.19219,-146.9617,-53.9240,-35.0700,781.5713, 1173} +, { 0,173, 3.06680,-151.2558,-63.9395,-35.0700,781.2688, 1174} +, { 0,174, 2.95154,-154.6293,-73.9549,-35.0700,780.9663, 1175} +, { 0,175, 2.84582,-157.3323,-83.9703,-35.0700,780.6638, 1176} +, { 0,176, 2.74869,-159.5374,-93.9857,-35.0700,780.3613, 1177} +, { 0,177, 2.65918,-161.3655,-104.0012,-35.0700,780.0588, 1178} +, { 0,178, 2.57639,-162.9028,-114.0166,-35.0700,779.7563, 1179} +, { 0,179, 2.49951,-164.2118,-124.0321,-35.0700,779.4538, 1180} +, { 0,180, 2.42787,-165.3387,-134.0475,-35.0700,779.1513, 1181} +, { 0,181, 2.36087,-166.3183,-144.0629,-35.0700,778.8488, 1182} +, { 0,182, 3.42442,-117.9038,-23.8777,-45.0900,782.4788, 1183} +, { 0,183, 3.32392,-126.9314,-33.8931,-45.0900,782.1763, 1184} +, { 0,184, 3.21432,-134.2395,-43.9086,-45.0900,781.8738, 1185} +, { 0,185, 3.10382,-140.0984,-53.9240,-45.0900,781.5713, 1186} +, { 0,186, 2.99679,-144.8086,-63.9395,-45.0900,781.2688, 1187} +, { 0,187, 2.89525,-148.6295,-73.9549,-45.0900,780.9663, 1188} +, { 0,188, 2.79986,-151.7653,-83.9703,-45.0900,780.6638, 1189} +, { 0,189, 2.71062,-154.3705,-93.9857,-45.0900,780.3613, 1190} +, { 0,190, 2.62723,-156.5607,-104.0012,-45.0900,780.0588, 1191} +, { 0,191, 2.54926,-158.4228,-114.0166,-45.0900,779.7563, 1192} +, { 0,192, 2.47623,-160.0220,-124.0321,-45.0900,779.4538, 1193} +, { 0,193, 2.40770,-161.4084,-134.0475,-45.0900,779.1513, 1194} +, { 0,194, 2.34325,-162.6205,-144.0629,-45.0900,778.8488, 1195} +, { 0,195, 3.26173,-113.4258,-23.8777,-55.1100,782.4788, 1196} +, { 0,196, 3.18720,-121.5919,-33.8931,-55.1100,782.1763, 1197} +, { 0,197, 3.10177,-128.5459,-43.9086,-55.1100,781.8738, 1198} +, { 0,198, 3.01173,-134.3768,-53.9240,-55.1100,781.5713, 1199} +, { 0,199, 2.92126,-139.2416,-63.9395,-55.1100,781.2688, 1200} +, { 0,200, 2.83286,-143.3071,-73.9549,-55.1100,780.9663, 1201} +, { 0,201, 2.74785,-146.7230,-83.9703,-55.1100,780.6638, 1202} +, { 0,202, 2.66684,-149.6141,-93.9857,-55.1100,780.3613, 1203} +, { 0,203, 2.59002,-152.0810,-104.0012,-55.1100,780.0588, 1204} +, { 0,204, 2.51733,-154.2032,-114.0166,-55.1100,779.7563, 1205} +, { 0,205, 2.44861,-156.0434,-124.0321,-55.1100,779.4538, 1206} +, { 0,206, 2.38361,-157.6513,-134.0475,-55.1100,779.1513, 1207} +, { 0,207, 2.32209,-159.0661,-144.0629,-55.1100,778.8488, 1208} +, { 0,208, 3.11813,-110.1338,-23.8777,-65.1300,782.4788, 1209} +, { 0,209, 3.06121,-117.4921,-33.8931,-65.1300,782.1763, 1210} +, { 0,210, 2.99364,-123.9866,-43.9086,-65.1300,781.8738, 1211} +, { 0,211, 2.91995,-129.6229,-53.9240,-65.1300,781.5713, 1212} +, { 0,212, 2.84364,-134.4715,-63.9395,-65.1300,781.2688, 1213} +, { 0,213, 2.76712,-138.6305,-73.9549,-65.1300,780.9663, 1214} +, { 0,214, 2.69193,-142.2017,-83.9703,-65.1300,780.6638, 1215} +, { 0,215, 2.61899,-145.2789,-93.9857,-65.1300,780.3613, 1216} +, { 0,216, 2.54881,-147.9434,-104.0012,-65.1300,780.0588, 1217} +, { 0,217, 2.48160,-150.2636,-114.0166,-65.1300,779.7563, 1218} +, { 0,218, 2.41742,-152.2958,-124.0321,-65.1300,779.4538, 1219} +, { 0,219, 2.35621,-154.0862,-134.0475,-65.1300,779.1513, 1220} +, { 0,220, 2.29787,-155.6726,-144.0629,-65.1300,778.8488, 1221} +, { 0,221, 2.99057,-107.6268,-23.8777,-75.1500,782.4788, 1222} +, { 0,222, 2.94593,-114.2757,-33.8931,-75.1500,782.1763, 1223} +, { 0,223, 2.89159,-120.2969,-43.9086,-75.1500,781.8738, 1224} +, { 0,224, 2.83078,-125.6614,-53.9240,-75.1500,781.5713, 1225} +, { 0,225, 2.76625,-130.3919,-63.9395,-75.1500,781.2688, 1226} +, { 0,226, 2.70010,-134.5408,-73.9549,-75.1500,780.9663, 1227} +, { 0,227, 2.63384,-138.1728,-83.9703,-75.1500,780.6638, 1228} +, { 0,228, 2.56851,-141.3545,-93.9857,-75.1500,780.3613, 1229} +, { 0,229, 2.50475,-144.1486,-104.0012,-75.1500,780.0588, 1230} +, { 0,230, 2.44298,-146.6105,-114.0166,-75.1500,779.7563, 1231} +, { 0,231, 2.38340,-148.7887,-124.0321,-75.1500,779.4538, 1232} +, { 0,232, 2.32609,-150.7240,-134.0475,-75.1500,779.1513, 1233} +, { 0,233, 2.27108,-152.4513,-144.0629,-75.1500,778.8488, 1234} +, { 0,234, 2.87631,-105.6610,-23.8777,-85.1700,782.4788, 1235} +, { 0,235, 2.84049,-111.6999,-33.8931,-85.1700,782.1763, 1236} +, { 0,236, 2.79608,-117.2729,-43.9086,-85.1700,781.8738, 1237} +, { 0,237, 2.74539,-122.3393,-53.9240,-85.1700,781.5713, 1238} +, { 0,238, 2.69054,-126.8966,-63.9395,-85.1700,781.2688, 1239} +, { 0,239, 2.63326,-130.9685,-73.9549,-85.1700,780.9663, 1240} +, { 0,240, 2.57493,-134.5936,-83.9703,-85.1700,780.6638, 1241} +, { 0,241, 2.51655,-137.8171,-93.9857,-85.1700,780.3613, 1242} +, { 0,242, 2.45885,-140.6848,-104.0012,-85.1700,780.0588, 1243} +, { 0,243, 2.40231,-143.2404,-114.0166,-85.1700,779.7563, 1244} +, { 0,244, 2.34724,-145.5235,-124.0321,-85.1700,779.4538, 1245} +, { 0,245, 2.29383,-147.5693,-134.0475,-85.1700,779.1513, 1246} +, { 0,246, 2.24219,-149.4084,-144.0629,-85.1700,778.8488, 1247} +, { 0,247, 2.77314,-104.0817,-23.8777,-95.1900,782.4788, 1248} +, { 0,248, 2.74382,-109.5987,-33.8931,-95.1900,782.1763, 1249} +, { 0,249, 2.70697,-114.7626,-43.9086,-95.1900,781.8738, 1250} +, { 0,250, 2.66428,-119.5310,-53.9240,-95.1900,781.5713, 1251} +, { 0,251, 2.61734,-123.8894,-63.9395,-95.1900,781.2688, 1252} +, { 0,252, 2.56758,-127.8443,-73.9549,-95.1900,780.9663, 1253} +, { 0,253, 2.51617,-131.4166,-83.9703,-95.1900,780.6638, 1254} +, { 0,254, 2.46405,-134.6353,-93.9857,-95.1900,780.3613, 1255} +, { 0,255, 2.41192,-137.5328,-104.0012,-95.1900,780.0588, 1256} +, { 0,256, 2.36030,-140.1422,-114.0166,-95.1900,779.7563, 1257} +, { 0,257, 2.30956,-142.4951,-124.0321,-95.1900,779.4538, 1258} +, { 0,258, 2.25995,-144.6206,-134.0475,-95.1900,779.1513, 1259} +, { 0,259, 2.21164,-146.5451,-144.0629,-95.1900,778.8488, 1260} +, { 1, 0, 2.77314, 75.9183, 23.8777, 95.1900,782.4788, 2001} +, { 1, 1, 2.74382, 70.4013, 33.8931, 95.1900,782.1763, 2002} +, { 1, 2, 2.70697, 65.2374, 43.9086, 95.1900,781.8738, 2003} +, { 1, 3, 2.66428, 60.4690, 53.9240, 95.1900,781.5713, 2004} +, { 1, 4, 2.61734, 56.1106, 63.9395, 95.1900,781.2688, 2005} +, { 1, 5, 2.56758, 52.1557, 73.9549, 95.1900,780.9663, 2006} +, { 1, 6, 2.51617, 48.5834, 83.9703, 95.1900,780.6638, 2007} +, { 1, 7, 2.46405, 45.3647, 93.9857, 95.1900,780.3613, 2008} +, { 1, 8, 2.41192, 42.4672,104.0012, 95.1900,780.0588, 2009} +, { 1, 9, 2.36030, 39.8578,114.0166, 95.1900,779.7563, 2010} +, { 1, 10, 2.30956, 37.5049,124.0321, 95.1900,779.4538, 2011} +, { 1, 11, 2.25995, 35.3794,134.0475, 95.1900,779.1513, 2012} +, { 1, 12, 2.21164, 33.4549,144.0629, 95.1900,778.8488, 2013} +, { 1, 13, 2.87631, 74.3390, 23.8777, 85.1700,782.4788, 2014} +, { 1, 14, 2.84049, 68.3001, 33.8931, 85.1700,782.1763, 2015} +, { 1, 15, 2.79608, 62.7271, 43.9086, 85.1700,781.8738, 2016} +, { 1, 16, 2.74539, 57.6607, 53.9240, 85.1700,781.5713, 2017} +, { 1, 17, 2.69054, 53.1034, 63.9395, 85.1700,781.2688, 2018} +, { 1, 18, 2.63326, 49.0315, 73.9549, 85.1700,780.9663, 2019} +, { 1, 19, 2.57493, 45.4064, 83.9703, 85.1700,780.6638, 2020} +, { 1, 20, 2.51655, 42.1829, 93.9857, 85.1700,780.3613, 2021} +, { 1, 21, 2.45885, 39.3152,104.0012, 85.1700,780.0588, 2022} +, { 1, 22, 2.40231, 36.7596,114.0166, 85.1700,779.7563, 2023} +, { 1, 23, 2.34724, 34.4765,124.0321, 85.1700,779.4538, 2024} +, { 1, 24, 2.29383, 32.4307,134.0475, 85.1700,779.1513, 2025} +, { 1, 25, 2.24219, 30.5916,144.0629, 85.1700,778.8488, 2026} +, { 1, 26, 2.99057, 72.3732, 23.8777, 75.1500,782.4788, 2027} +, { 1, 27, 2.94593, 65.7243, 33.8931, 75.1500,782.1763, 2028} +, { 1, 28, 2.89159, 59.7031, 43.9086, 75.1500,781.8738, 2029} +, { 1, 29, 2.83078, 54.3386, 53.9240, 75.1500,781.5713, 2030} +, { 1, 30, 2.76625, 49.6081, 63.9395, 75.1500,781.2688, 2031} +, { 1, 31, 2.70010, 45.4592, 73.9549, 75.1500,780.9663, 2032} +, { 1, 32, 2.63384, 41.8272, 83.9703, 75.1500,780.6638, 2033} +, { 1, 33, 2.56851, 38.6455, 93.9857, 75.1500,780.3613, 2034} +, { 1, 34, 2.50475, 35.8514,104.0012, 75.1500,780.0588, 2035} +, { 1, 35, 2.44298, 33.3895,114.0166, 75.1500,779.7563, 2036} +, { 1, 36, 2.38340, 31.2113,124.0321, 75.1500,779.4538, 2037} +, { 1, 37, 2.32609, 29.2760,134.0475, 75.1500,779.1513, 2038} +, { 1, 38, 2.27108, 27.5487,144.0629, 75.1500,778.8488, 2039} +, { 1, 39, 3.11813, 69.8662, 23.8777, 65.1300,782.4788, 2040} +, { 1, 40, 3.06121, 62.5079, 33.8931, 65.1300,782.1763, 2041} +, { 1, 41, 2.99364, 56.0134, 43.9086, 65.1300,781.8738, 2042} +, { 1, 42, 2.91995, 50.3771, 53.9240, 65.1300,781.5713, 2043} +, { 1, 43, 2.84364, 45.5285, 63.9395, 65.1300,781.2688, 2044} +, { 1, 44, 2.76712, 41.3695, 73.9549, 65.1300,780.9663, 2045} +, { 1, 45, 2.69193, 37.7983, 83.9703, 65.1300,780.6638, 2046} +, { 1, 46, 2.61899, 34.7211, 93.9857, 65.1300,780.3613, 2047} +, { 1, 47, 2.54881, 32.0566,104.0012, 65.1300,780.0588, 2048} +, { 1, 48, 2.48160, 29.7364,114.0166, 65.1300,779.7563, 2049} +, { 1, 49, 2.41742, 27.7042,124.0321, 65.1300,779.4538, 2050} +, { 1, 50, 2.35621, 25.9138,134.0475, 65.1300,779.1513, 2051} +, { 1, 51, 2.29787, 24.3274,144.0629, 65.1300,778.8488, 2052} +, { 1, 52, 3.26173, 66.5742, 23.8777, 55.1100,782.4788, 2053} +, { 1, 53, 3.18720, 58.4081, 33.8931, 55.1100,782.1763, 2054} +, { 1, 54, 3.10177, 51.4541, 43.9086, 55.1100,781.8738, 2055} +, { 1, 55, 3.01173, 45.6232, 53.9240, 55.1100,781.5713, 2056} +, { 1, 56, 2.92126, 40.7584, 63.9395, 55.1100,781.2688, 2057} +, { 1, 57, 2.83286, 36.6929, 73.9549, 55.1100,780.9663, 2058} +, { 1, 58, 2.74785, 33.2770, 83.9703, 55.1100,780.6638, 2059} +, { 1, 59, 2.66684, 30.3859, 93.9857, 55.1100,780.3613, 2060} +, { 1, 60, 2.59002, 27.9190,104.0012, 55.1100,780.0588, 2061} +, { 1, 61, 2.51733, 25.7968,114.0166, 55.1100,779.7563, 2062} +, { 1, 62, 2.44861, 23.9566,124.0321, 55.1100,779.4538, 2063} +, { 1, 63, 2.38361, 22.3487,134.0475, 55.1100,779.1513, 2064} +, { 1, 64, 2.32209, 20.9339,144.0629, 55.1100,778.8488, 2065} +, { 1, 65, 3.42442, 62.0962, 23.8777, 45.0900,782.4788, 2066} +, { 1, 66, 3.32392, 53.0686, 33.8931, 45.0900,782.1763, 2067} +, { 1, 67, 3.21432, 45.7605, 43.9086, 45.0900,781.8738, 2068} +, { 1, 68, 3.10382, 39.9016, 53.9240, 45.0900,781.5713, 2069} +, { 1, 69, 2.99679, 35.1914, 63.9395, 45.0900,781.2688, 2070} +, { 1, 70, 2.89525, 31.3705, 73.9549, 45.0900,780.9663, 2071} +, { 1, 71, 2.79986, 28.2347, 83.9703, 45.0900,780.6638, 2072} +, { 1, 72, 2.71062, 25.6295, 93.9857, 45.0900,780.3613, 2073} +, { 1, 73, 2.62723, 23.4393,104.0012, 45.0900,780.0588, 2074} +, { 1, 74, 2.54926, 21.5772,114.0166, 45.0900,779.7563, 2075} +, { 1, 75, 2.47623, 19.9780,124.0321, 45.0900,779.4538, 2076} +, { 1, 76, 2.40770, 18.5916,134.0475, 45.0900,779.1513, 2077} +, { 1, 77, 2.34325, 17.3795,144.0629, 45.0900,778.8488, 2078} +, { 1, 78, 3.60856, 55.7507, 23.8777, 35.0700,782.4788, 2079} +, { 1, 79, 3.46905, 45.9777, 33.8931, 35.0700,782.1763, 2080} +, { 1, 80, 3.32730, 38.6145, 43.9086, 35.0700,781.8738, 2081} +, { 1, 81, 3.19219, 33.0383, 53.9240, 35.0700,781.5713, 2082} +, { 1, 82, 3.06680, 28.7442, 63.9395, 35.0700,781.2688, 2083} +, { 1, 83, 2.95154, 25.3707, 73.9549, 35.0700,780.9663, 2084} +, { 1, 84, 2.84582, 22.6677, 83.9703, 35.0700,780.6638, 2085} +, { 1, 85, 2.74869, 20.4626, 93.9857, 35.0700,780.3613, 2086} +, { 1, 86, 2.65918, 18.6345,104.0012, 35.0700,780.0588, 2087} +, { 1, 87, 2.57639, 17.0972,114.0166, 35.0700,779.7563, 2088} +, { 1, 88, 2.49951, 15.7882,124.0321, 35.0700,779.4538, 2089} +, { 1, 89, 2.42787, 14.6613,134.0475, 35.0700,779.1513, 2090} +, { 1, 90, 2.36087, 13.6817,144.0629, 35.0700,778.8488, 2091} +, { 1, 91, 3.81205, 46.3725, 23.8777, 25.0500,782.4788, 2092} +, { 1, 92, 3.61482, 36.4676, 33.8931, 25.0500,782.1763, 2093} +, { 1, 93, 3.43289, 29.7049, 43.9086, 25.0500,781.8738, 2094} +, { 1, 94, 3.27062, 24.9169, 53.9240, 25.0500,781.5713, 2095} +, { 1, 95, 3.12666, 21.3941, 63.9395, 25.0500,781.2688, 2096} +, { 1, 96, 2.99841, 18.7123, 73.9549, 25.0500,780.9663, 2097} +, { 1, 97, 2.88334, 16.6109, 83.9703, 25.0500,780.6638, 2098} +, { 1, 98, 2.77931, 14.9241, 93.9857, 25.0500,780.3613, 2099} +, { 1, 99, 2.68459, 13.5425,104.0012, 25.0500,780.0588, 2100} +, { 1,100, 2.59777, 12.3913,114.0166, 25.0500,779.7563, 2101} +, { 1,101, 2.51774, 11.4181,124.0321, 25.0500,779.4538, 2102} +, { 1,102, 2.44357, 10.5850,134.0475, 25.0500,779.1513, 2103} +, { 1,103, 2.37452, 9.8641,144.0629, 25.0500,778.8488, 2104} +, { 1,104, 4.01611, 32.1887, 23.8777, 15.0300,782.4788, 2105} +, { 1,105, 3.74281, 23.9150, 33.8931, 15.0300,782.1763, 2106} +, { 1,106, 3.51821, 18.8962, 43.9086, 15.0300,781.8738, 2107} +, { 1,107, 3.33075, 15.5745, 53.9240, 15.0300,781.5713, 2108} +, { 1,108, 3.17100, 13.2281, 63.9395, 15.0300,781.2688, 2109} +, { 1,109, 3.03231, 11.4879, 73.9549, 15.0300,780.9663, 2110} +, { 1,110, 2.91003, 10.1480, 83.9703, 15.0300,780.6638, 2111} +, { 1,111, 2.80083, 9.0857, 93.9857, 15.0300,780.3613, 2112} +, { 1,112, 2.70229, 8.2233,104.0012, 15.0300,780.0588, 2113} +, { 1,113, 2.61256, 7.5096,114.0166, 15.0300,779.7563, 2114} +, { 1,114, 2.53027, 6.9093,124.0321, 15.0300,779.4538, 2115} +, { 1,115, 2.45432, 6.3975,134.0475, 15.0300,779.1513, 2116} +, { 1,116, 2.38384, 5.9561,144.0629, 15.0300,778.8488, 2117} +, { 1,117, 4.16137, 11.8499, 23.8777, 5.0100,782.4788, 2118} +, { 1,118, 3.82169, 8.4084, 33.8931, 5.0100,782.1763, 2119} +, { 1,119, 3.56706, 6.5093, 43.9086, 5.0100,781.8738, 2120} +, { 1,120, 3.36378, 5.3080, 53.9240, 5.0100,781.5713, 2121} +, { 1,121, 3.19475, 4.4803, 63.9395, 5.0100,781.2688, 2122} +, { 1,122, 3.05018, 3.8755, 73.9549, 5.0100,780.9663, 2123} +, { 1,123, 2.92394, 3.4144, 83.9703, 5.0100,780.6638, 2124} +, { 1,124, 2.81196, 3.0513, 93.9857, 5.0100,780.3613, 2125} +, { 1,125, 2.71138, 2.7580,104.0012, 5.0100,780.0588, 2126} +, { 1,126, 2.62013, 2.5160,114.0166, 5.0100,779.7563, 2127} +, { 1,127, 2.53667, 2.3131,124.0321, 5.0100,779.4538, 2128} +, { 1,128, 2.45979, 2.1404,134.0475, 5.0100,779.1513, 2129} +, { 1,129, 2.38857, 1.9917,144.0629, 5.0100,778.8488, 2130} +, { 1,130, 4.16137,-11.8499, 23.8777, -5.0100,782.4788, 2131} +, { 1,131, 3.82169, -8.4084, 33.8931, -5.0100,782.1763, 2132} +, { 1,132, 3.56706, -6.5093, 43.9086, -5.0100,781.8738, 2133} +, { 1,133, 3.36378, -5.3080, 53.9240, -5.0100,781.5713, 2134} +, { 1,134, 3.19475, -4.4803, 63.9395, -5.0100,781.2688, 2135} +, { 1,135, 3.05018, -3.8755, 73.9549, -5.0100,780.9663, 2136} +, { 1,136, 2.92394, -3.4144, 83.9703, -5.0100,780.6638, 2137} +, { 1,137, 2.81196, -3.0513, 93.9857, -5.0100,780.3613, 2138} +, { 1,138, 2.71138, -2.7580,104.0012, -5.0100,780.0588, 2139} +, { 1,139, 2.62013, -2.5160,114.0166, -5.0100,779.7563, 2140} +, { 1,140, 2.53667, -2.3131,124.0321, -5.0100,779.4538, 2141} +, { 1,141, 2.45979, -2.1404,134.0475, -5.0100,779.1513, 2142} +, { 1,142, 2.38857, -1.9917,144.0629, -5.0100,778.8488, 2143} +, { 1,143, 4.01611,-32.1887, 23.8777,-15.0300,782.4788, 2144} +, { 1,144, 3.74281,-23.9150, 33.8931,-15.0300,782.1763, 2145} +, { 1,145, 3.51821,-18.8962, 43.9086,-15.0300,781.8738, 2146} +, { 1,146, 3.33075,-15.5745, 53.9240,-15.0300,781.5713, 2147} +, { 1,147, 3.17100,-13.2281, 63.9395,-15.0300,781.2688, 2148} +, { 1,148, 3.03231,-11.4879, 73.9549,-15.0300,780.9663, 2149} +, { 1,149, 2.91003,-10.1480, 83.9703,-15.0300,780.6638, 2150} +, { 1,150, 2.80083, -9.0857, 93.9857,-15.0300,780.3613, 2151} +, { 1,151, 2.70229, -8.2233,104.0012,-15.0300,780.0588, 2152} +, { 1,152, 2.61256, -7.5096,114.0166,-15.0300,779.7563, 2153} +, { 1,153, 2.53027, -6.9093,124.0321,-15.0300,779.4538, 2154} +, { 1,154, 2.45432, -6.3975,134.0475,-15.0300,779.1513, 2155} +, { 1,155, 2.38384, -5.9561,144.0629,-15.0300,778.8488, 2156} +, { 1,156, 3.81205,-46.3725, 23.8777,-25.0500,782.4788, 2157} +, { 1,157, 3.61482,-36.4676, 33.8931,-25.0500,782.1763, 2158} +, { 1,158, 3.43289,-29.7049, 43.9086,-25.0500,781.8738, 2159} +, { 1,159, 3.27062,-24.9169, 53.9240,-25.0500,781.5713, 2160} +, { 1,160, 3.12666,-21.3941, 63.9395,-25.0500,781.2688, 2161} +, { 1,161, 2.99841,-18.7123, 73.9549,-25.0500,780.9663, 2162} +, { 1,162, 2.88334,-16.6109, 83.9703,-25.0500,780.6638, 2163} +, { 1,163, 2.77931,-14.9241, 93.9857,-25.0500,780.3613, 2164} +, { 1,164, 2.68459,-13.5425,104.0012,-25.0500,780.0588, 2165} +, { 1,165, 2.59777,-12.3913,114.0166,-25.0500,779.7563, 2166} +, { 1,166, 2.51774,-11.4181,124.0321,-25.0500,779.4538, 2167} +, { 1,167, 2.44357,-10.5850,134.0475,-25.0500,779.1513, 2168} +, { 1,168, 2.37452, -9.8641,144.0629,-25.0500,778.8488, 2169} +, { 1,169, 3.60856,-55.7507, 23.8777,-35.0700,782.4788, 2170} +, { 1,170, 3.46905,-45.9777, 33.8931,-35.0700,782.1763, 2171} +, { 1,171, 3.32730,-38.6145, 43.9086,-35.0700,781.8738, 2172} +, { 1,172, 3.19219,-33.0383, 53.9240,-35.0700,781.5713, 2173} +, { 1,173, 3.06680,-28.7442, 63.9395,-35.0700,781.2688, 2174} +, { 1,174, 2.95154,-25.3707, 73.9549,-35.0700,780.9663, 2175} +, { 1,175, 2.84582,-22.6677, 83.9703,-35.0700,780.6638, 2176} +, { 1,176, 2.74869,-20.4626, 93.9857,-35.0700,780.3613, 2177} +, { 1,177, 2.65918,-18.6345,104.0012,-35.0700,780.0588, 2178} +, { 1,178, 2.57639,-17.0972,114.0166,-35.0700,779.7563, 2179} +, { 1,179, 2.49951,-15.7882,124.0321,-35.0700,779.4538, 2180} +, { 1,180, 2.42787,-14.6613,134.0475,-35.0700,779.1513, 2181} +, { 1,181, 2.36087,-13.6817,144.0629,-35.0700,778.8488, 2182} +, { 1,182, 3.42442,-62.0962, 23.8777,-45.0900,782.4788, 2183} +, { 1,183, 3.32392,-53.0686, 33.8931,-45.0900,782.1763, 2184} +, { 1,184, 3.21432,-45.7605, 43.9086,-45.0900,781.8738, 2185} +, { 1,185, 3.10382,-39.9016, 53.9240,-45.0900,781.5713, 2186} +, { 1,186, 2.99679,-35.1914, 63.9395,-45.0900,781.2688, 2187} +, { 1,187, 2.89525,-31.3705, 73.9549,-45.0900,780.9663, 2188} +, { 1,188, 2.79986,-28.2347, 83.9703,-45.0900,780.6638, 2189} +, { 1,189, 2.71062,-25.6295, 93.9857,-45.0900,780.3613, 2190} +, { 1,190, 2.62723,-23.4393,104.0012,-45.0900,780.0588, 2191} +, { 1,191, 2.54926,-21.5772,114.0166,-45.0900,779.7563, 2192} +, { 1,192, 2.47623,-19.9780,124.0321,-45.0900,779.4538, 2193} +, { 1,193, 2.40770,-18.5916,134.0475,-45.0900,779.1513, 2194} +, { 1,194, 2.34325,-17.3795,144.0629,-45.0900,778.8488, 2195} +, { 1,195, 3.26173,-66.5742, 23.8777,-55.1100,782.4788, 2196} +, { 1,196, 3.18720,-58.4081, 33.8931,-55.1100,782.1763, 2197} +, { 1,197, 3.10177,-51.4541, 43.9086,-55.1100,781.8738, 2198} +, { 1,198, 3.01173,-45.6232, 53.9240,-55.1100,781.5713, 2199} +, { 1,199, 2.92126,-40.7584, 63.9395,-55.1100,781.2688, 2200} +, { 1,200, 2.83286,-36.6929, 73.9549,-55.1100,780.9663, 2201} +, { 1,201, 2.74785,-33.2770, 83.9703,-55.1100,780.6638, 2202} +, { 1,202, 2.66684,-30.3859, 93.9857,-55.1100,780.3613, 2203} +, { 1,203, 2.59002,-27.9190,104.0012,-55.1100,780.0588, 2204} +, { 1,204, 2.51733,-25.7968,114.0166,-55.1100,779.7563, 2205} +, { 1,205, 2.44861,-23.9566,124.0321,-55.1100,779.4538, 2206} +, { 1,206, 2.38361,-22.3487,134.0475,-55.1100,779.1513, 2207} +, { 1,207, 2.32209,-20.9339,144.0629,-55.1100,778.8488, 2208} +, { 1,208, 3.11813,-69.8662, 23.8777,-65.1300,782.4788, 2209} +, { 1,209, 3.06121,-62.5079, 33.8931,-65.1300,782.1763, 2210} +, { 1,210, 2.99364,-56.0134, 43.9086,-65.1300,781.8738, 2211} +, { 1,211, 2.91995,-50.3771, 53.9240,-65.1300,781.5713, 2212} +, { 1,212, 2.84364,-45.5285, 63.9395,-65.1300,781.2688, 2213} +, { 1,213, 2.76712,-41.3695, 73.9549,-65.1300,780.9663, 2214} +, { 1,214, 2.69193,-37.7983, 83.9703,-65.1300,780.6638, 2215} +, { 1,215, 2.61899,-34.7211, 93.9857,-65.1300,780.3613, 2216} +, { 1,216, 2.54881,-32.0566,104.0012,-65.1300,780.0588, 2217} +, { 1,217, 2.48160,-29.7364,114.0166,-65.1300,779.7563, 2218} +, { 1,218, 2.41742,-27.7042,124.0321,-65.1300,779.4538, 2219} +, { 1,219, 2.35621,-25.9138,134.0475,-65.1300,779.1513, 2220} +, { 1,220, 2.29787,-24.3274,144.0629,-65.1300,778.8488, 2221} +, { 1,221, 2.99057,-72.3732, 23.8777,-75.1500,782.4788, 2222} +, { 1,222, 2.94593,-65.7243, 33.8931,-75.1500,782.1763, 2223} +, { 1,223, 2.89159,-59.7031, 43.9086,-75.1500,781.8738, 2224} +, { 1,224, 2.83078,-54.3386, 53.9240,-75.1500,781.5713, 2225} +, { 1,225, 2.76625,-49.6081, 63.9395,-75.1500,781.2688, 2226} +, { 1,226, 2.70010,-45.4592, 73.9549,-75.1500,780.9663, 2227} +, { 1,227, 2.63384,-41.8272, 83.9703,-75.1500,780.6638, 2228} +, { 1,228, 2.56851,-38.6455, 93.9857,-75.1500,780.3613, 2229} +, { 1,229, 2.50475,-35.8514,104.0012,-75.1500,780.0588, 2230} +, { 1,230, 2.44298,-33.3895,114.0166,-75.1500,779.7563, 2231} +, { 1,231, 2.38340,-31.2113,124.0321,-75.1500,779.4538, 2232} +, { 1,232, 2.32609,-29.2760,134.0475,-75.1500,779.1513, 2233} +, { 1,233, 2.27108,-27.5487,144.0629,-75.1500,778.8488, 2234} +, { 1,234, 2.87631,-74.3390, 23.8777,-85.1700,782.4788, 2235} +, { 1,235, 2.84049,-68.3001, 33.8931,-85.1700,782.1763, 2236} +, { 1,236, 2.79608,-62.7271, 43.9086,-85.1700,781.8738, 2237} +, { 1,237, 2.74539,-57.6607, 53.9240,-85.1700,781.5713, 2238} +, { 1,238, 2.69054,-53.1034, 63.9395,-85.1700,781.2688, 2239} +, { 1,239, 2.63326,-49.0315, 73.9549,-85.1700,780.9663, 2240} +, { 1,240, 2.57493,-45.4064, 83.9703,-85.1700,780.6638, 2241} +, { 1,241, 2.51655,-42.1829, 93.9857,-85.1700,780.3613, 2242} +, { 1,242, 2.45885,-39.3152,104.0012,-85.1700,780.0588, 2243} +, { 1,243, 2.40231,-36.7596,114.0166,-85.1700,779.7563, 2244} +, { 1,244, 2.34724,-34.4765,124.0321,-85.1700,779.4538, 2245} +, { 1,245, 2.29383,-32.4307,134.0475,-85.1700,779.1513, 2246} +, { 1,246, 2.24219,-30.5916,144.0629,-85.1700,778.8488, 2247} +, { 1,247, 2.77314,-75.9183, 23.8777,-95.1900,782.4788, 2248} +, { 1,248, 2.74382,-70.4013, 33.8931,-95.1900,782.1763, 2249} +, { 1,249, 2.70697,-65.2374, 43.9086,-95.1900,781.8738, 2250} +, { 1,250, 2.66428,-60.4690, 53.9240,-95.1900,781.5713, 2251} +, { 1,251, 2.61734,-56.1106, 63.9395,-95.1900,781.2688, 2252} +, { 1,252, 2.56758,-52.1557, 73.9549,-95.1900,780.9663, 2253} +, { 1,253, 2.51617,-48.5834, 83.9703,-95.1900,780.6638, 2254} +, { 1,254, 2.46405,-45.3647, 93.9857,-95.1900,780.3613, 2255} +, { 1,255, 2.41192,-42.4672,104.0012,-95.1900,780.0588, 2256} +, { 1,256, 2.36030,-39.8578,114.0166,-95.1900,779.7563, 2257} +, { 1,257, 2.30956,-37.5049,124.0321,-95.1900,779.4538, 2258} +, { 1,258, 2.25995,-35.3794,134.0475,-95.1900,779.1513, 2259} +, { 1,259, 2.21164,-33.4549,144.0629,-95.1900,778.8488, 2260} +}; + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "========================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and FCS/ECAL hits on single muons" << std::endl; + LOG_TEST << "========================================================" << std::endl; + + auto testCalos = [=](std::vector& calorimeter, bool dowcal) { + + for ( auto cell : calorimeter ) { + pm->SetVertex(cell.x,cell.y,cell.z-100.0); + + auto* chain = StMaker::GetChain(); + { + const double pz = 10.0; + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + auto* particle = _kine->AddParticle( "mu+" ); + particle->SetPx( 0. ); + particle->SetPy( 0. ); + particle->SetPz( pz ); + double mass = particle->GetMass(); + double ener = sqrt( pz*pz + mass*mass ); + particle->SetEnergy(ener); + chain->Clear(); + chain->Make(); + } + + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + if ( dowcal ) + hit_table = dynamic_cast( chain->GetDataSet("g2t_wca_hit") ) ; + else + hit_table = dynamic_cast( chain->GetDataSet("g2t_hca_hit") ) ; + + LOG_TEST << GIVEN << "a 500 GeV muon @ eta=" << cell.eta << " phi=" << cell.phi << " volume=" << cell.volumeId << std::endl; + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + // Failure is tested by check_track when it tests for a valid track pointer + return PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "The start vertex should be before the calorimeter", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) + if ( vertex->ge_x[2] < cell.z ) + result = PASS; + return result; + }); + + check_track( "The track should have a stop vertex", [=](const g2t_track_st* t){ + return (t->stop_vertex_p>0)?PASS:FAIL; + }); + check_track( "The stop vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + + check_track( "The stop vertex should be after the calorimeter face", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( vertex ) { + if ( vertex->ge_x[2] >= cell.z ) + result = PASS; + else + result = Form("stop z=%8.4f ",vertex->ge_x[2]) + FAIL; + } + return result; + }); + + + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + + if ( dowcal ) + check_track( "The track should have WCA hits" , [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->n_wca_hit < 1 ) result = FAIL; + return result; + }); + else + check_track( "The track should have HCA hits" , [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->n_hca_hit < 1 ) result = FAIL; + return result; + }); + + // check_track( "The track should have PRE hits" , [=](const g2t_track_st* t){ + // std::string result = PASS; + // if ( t->n_pre_hit < 1 ) result = FAIL; + // return result; + // }); + + + check_emc_hit( Form("The hit has the expected volume ID %s",(dowcal)?"WCAL":"HCAL"), [=](const g2t_emc_hit_st* h){ + int volumeId = h->volume_id; + int expected = cell.volumeId; + int nhits = hit_table->GetNRows(); + int actual = -999; + double emax = -999; + for ( int i=0; iAt(i); + const g2t_emc_hit_st* h = static_cast( voidhit ); + if ( h->de > emax ) { + emax = h->de; + actual = h->volume_id; + } + } + std::string result = PASS; + if ( actual != expected ) { + result = FAIL; + } + result = Form("(expect=%i actual=%i)",expected,actual) + result; + return result; + }); + + } + + + }; + + testCalos( wcal, true ); + testCalos( hcal, false ); + +} + + + +#if 0 +std::vector wcal = { + { 0, 0, 2.75399,102.4419, 1001} + , { 0, 1, 2.73960,105.7065, 1002} + , { 0, 2, 2.72233,108.8698, 1003} + , { 0, 3, 2.70249,111.9182, 1004} + , { 0, 4, 2.68040,114.8415, 1005} + , { 0, 5, 2.65638,117.6331, 1006} + , { 0, 6, 2.63075,120.2893, 1007} + , { 0, 7, 2.60380,122.8091, 1008} + , { 0, 8, 2.57581,125.1937, 1009} + , { 0, 9, 2.54702,127.4462, 1010} + , { 0, 10, 2.51766,129.5709, 1011} + , { 0, 11, 2.48791,131.5728, 1012} + , { 0, 12, 2.45794,133.4580, 1013} + , { 0, 13, 2.42789,135.2326, 1014} + , { 0, 14, 2.39788,136.9028, 1015} + , { 0, 15, 2.36801,138.4752, 1016} + , { 0, 16, 2.33837,139.9558, 1017} + , { 0, 17, 2.30901,141.3506, 1018} + , { 0, 18, 2.27999,142.6654, 1019} + , { 0, 19, 2.25136,143.9056, 1020} + , { 0, 20, 2.22314,145.0762, 1021} + , { 0, 21, 2.19537,146.1822, 1022} + , { 0, 22, 2.81298,103.2173, 1023} + , { 0, 23, 2.79681,106.6652, 1024} + , { 0, 24, 2.77748,109.9934, 1025} + , { 0, 25, 2.75536,113.1867, 1026} + , { 0, 26, 2.73085,116.2347, 1027} + , { 0, 27, 2.70433,119.1309, 1028} + , { 0, 28, 2.67616,121.8728, 1029} + , { 0, 29, 2.64669,124.4607, 1030} + , { 0, 30, 2.61623,126.8977, 1031} + , { 0, 31, 2.58506,129.1885, 1032} + , { 0, 32, 2.55341,131.3391, 1033} + , { 0, 33, 2.52148,133.3566, 1034} + , { 0, 34, 2.48945,135.2483, 1035} + , { 0, 35, 2.45747,137.0220, 1036} + , { 0, 36, 2.42565,138.6851, 1037} + , { 0, 37, 2.39408,140.2452, 1038} + , { 0, 38, 2.36286,141.7095, 1039} + , { 0, 39, 2.33203,143.0848, 1040} + , { 0, 40, 2.30164,144.3775, 1041} + , { 0, 41, 2.27174,145.5936, 1042} + , { 0, 42, 2.24234,146.7387, 1043} + , { 0, 43, 2.21346,147.8181, 1044} + , { 0, 44, 2.87553,104.0936, 1045} + , { 0, 45, 2.85724,107.7445, 1046} + , { 0, 46, 2.83547,111.2526, 1047} + , { 0, 47, 2.81069,114.6014, 1048} + , { 0, 48, 2.78337,117.7802, 1049} + , { 0, 49, 2.75397,120.7837, 1050} + , { 0, 50, 2.72292,123.6107, 1051} + , { 0, 51, 2.69062,126.2638, 1052} + , { 0, 52, 2.65742,128.7483, 1053} + , { 0, 53, 2.62362,131.0712, 1054} + , { 0, 54, 2.58948,133.2408, 1055} + , { 0, 55, 2.55520,135.2663, 1056} + , { 0, 56, 2.52097,137.1569, 1057} + , { 0, 57, 2.48694,138.9219, 1058} + , { 0, 58, 2.45320,140.5704, 1059} + , { 0, 59, 2.41987,142.1112, 1060} + , { 0, 60, 2.38700,143.5524, 1061} + , { 0, 61, 2.35465,144.9016, 1062} + , { 0, 62, 2.32286,146.1662, 1063} + , { 0, 63, 2.29166,147.3526, 1064} + , { 0, 64, 2.26106,148.4670, 1065} + , { 0, 65, 2.23108,149.5150, 1066} + , { 0, 66, 2.94206,105.0914, 1067} + , { 0, 67, 2.92122,108.9679, 1068} + , { 0, 68, 2.89654,112.6723, 1069} + , { 0, 69, 2.86861,116.1871, 1070} + , { 0, 70, 2.83801,119.5021, 1071} + , { 0, 71, 2.80530,122.6136, 1072} + , { 0, 72, 2.77098,125.5231, 1073} + , { 0, 73, 2.73551,128.2361, 1074} + , { 0, 74, 2.69926,130.7608, 1075} + , { 0, 75, 2.66258,133.1073, 1076} + , { 0, 76, 2.62573,135.2869, 1077} + , { 0, 77, 2.58893,137.3109, 1078} + , { 0, 78, 2.55236,139.1910, 1079} + , { 0, 79, 2.51615,140.9384, 1080} + , { 0, 80, 2.48042,142.5636, 1081} + , { 0, 81, 2.44524,144.0767, 1082} + , { 0, 82, 2.41068,145.4871, 1083} + , { 0, 83, 2.37677,146.8032, 1084} + , { 0, 84, 2.34355,148.0330, 1085} + , { 0, 85, 2.31103,149.1836, 1086} + , { 0, 86, 2.27922,150.2617, 1087} + , { 0, 87, 2.24812,151.2731, 1088} + , { 0, 88, 3.01304,106.2373, 1089} + , { 0, 89, 2.98909,110.3648, 1090} + , { 0, 90, 2.96092,114.2830, 1091} + , { 0, 91, 2.92926,117.9738, 1092} + , { 0, 92, 2.89482,121.4286, 1093} + , { 0, 93, 2.85829,124.6464, 1094} + , { 0, 94, 2.82025,127.6327, 1095} + , { 0, 95, 2.78120,130.3971, 1096} + , { 0, 96, 2.74159,132.9517, 1097} + , { 0, 97, 2.70176,135.3107, 1098} + , { 0, 98, 2.66198,137.4885, 1099} + , { 0, 99, 2.62248,139.4996, 1100} + , { 0,100, 2.58342,141.3580, 1101} + , { 0,101, 2.54494,143.0769, 1102} + , { 0,102, 2.50713,144.6688, 1103} + , { 0,103, 2.47005,146.1450, 1104} + , { 0,104, 2.43375,147.5159, 1105} + , { 0,105, 2.39826,148.7910, 1106} + , { 0,106, 2.36359,149.9789, 1107} + , { 0,107, 2.32975,151.0872, 1108} + , { 0,108, 2.29672,152.1230, 1109} + , { 0,109, 2.26452,153.0925, 1110} + , { 0,110, 3.08904,107.5656, 1111} + , { 0,111, 3.06127,111.9728, 1112} + , { 0,112, 3.02884,116.1229, 1113} + , { 0,113, 2.99272,119.9982, 1114} + , { 0,114, 2.95378,123.5931, 1115} + , { 0,115, 2.91283,126.9118, 1116} + , { 0,116, 2.87055,129.9650, 1117} + , { 0,117, 2.82752,132.7681, 1118} + , { 0,118, 2.78418,135.3387, 1119} + , { 0,119, 2.74092,137.6954, 1120} + , { 0,120, 2.69800,139.8569, 1121} + , { 0,121, 2.65563,141.8409, 1122} + , { 0,122, 2.61396,143.6643, 1123} + , { 0,123, 2.57312,145.3425, 1124} + , { 0,124, 2.53316,146.8897, 1125} + , { 0,125, 2.49413,148.3186, 1126} + , { 0,126, 2.45607,149.6406, 1127} + , { 0,127, 2.41898,150.8661, 1128} + , { 0,128, 2.38286,152.0042, 1129} + , { 0,129, 2.34769,153.0633, 1130} + , { 0,130, 2.31347,154.0505, 1131} + , { 0,131, 2.28016,154.9724, 1132} + , { 0,132, 3.17069,109.1218, 1133} + , { 0,133, 3.13815,113.8407, 1134} + , { 0,134, 3.10053,118.2401, 1135} + , { 0,135, 3.05904,122.3048, 1136} + , { 0,136, 3.01479,126.0353, 1137} + , { 0,137, 2.96874,129.4434, 1138} + , { 0,138, 2.92165,132.5480, 1139} + , { 0,139, 2.87417,135.3720, 1140} + , { 0,140, 2.82676,137.9397, 1141} + , { 0,141, 2.77978,140.2755, 1142} + , { 0,142, 2.73351,142.4027, 1143} + , { 0,143, 2.68812,144.3429, 1144} + , { 0,144, 2.64374,146.1158, 1145} + , { 0,145, 2.60045,147.7391, 1146} + , { 0,146, 2.55830,149.2288, 1147} + , { 0,147, 2.51731,150.5988, 1148} + , { 0,148, 2.47747,151.8617, 1149} + , { 0,149, 2.43878,153.0284, 1150} + , { 0,150, 2.40122,154.1087, 1151} + , { 0,151, 2.36475,155.1111, 1152} + , { 0,152, 2.32934,156.0432, 1153} + , { 0,153, 2.29497,156.9117, 1154} + , { 0,154, 3.25874,110.9669, 1155} + , { 0,155, 3.22016,116.0317, 1156} + , { 0,156, 3.17611,120.6947, 1157} + , { 0,157, 3.12815,124.9477, 1158} + , { 0,158, 3.07764,128.8015, 1159} + , { 0,159, 3.02570,132.2795, 1160} + , { 0,160, 2.97319,135.4122, 1161} + , { 0,161, 2.92078,138.2323, 1162} + , { 0,162, 2.86893,140.7726, 1163} + , { 0,163, 2.81799,143.0641, 1164} + , { 0,164, 2.76818,145.1354, 1165} + , { 0,165, 2.71965,147.0120, 1166} + , { 0,166, 2.67248,148.7166, 1167} + , { 0,167, 2.62670,150.2692, 1168} + , { 0,168, 2.58234,151.6873, 1169} + , { 0,169, 2.53938,152.9860, 1170} + , { 0,170, 2.49778,154.1788, 1171} + , { 0,171, 2.45752,155.2770, 1172} + , { 0,172, 2.41854,156.2908, 1173} + , { 0,173, 2.38080,157.2291, 1174} + , { 0,174, 2.34424,158.0994, 1175} + , { 0,175, 2.30883,158.9086, 1176} + , { 0,176, 3.35401,113.1847, 1177} + , { 0,177, 3.30770,118.6291, 1178} + , { 0,178, 3.25563,123.5631, 1179} + , { 0,179, 3.19983,127.9921, 1180} + , { 0,180, 3.14195,131.9447, 1181} + , { 0,181, 3.08325,135.4618, 1182} + , { 0,182, 3.02467,138.5892, 1183} + , { 0,183, 2.96685,141.3723, 1184} + , { 0,184, 2.91024,143.8540, 1185} + , { 0,185, 2.85511,146.0727, 1186} + , { 0,186, 2.80162,148.0624, 1187} + , { 0,187, 2.74986,149.8527, 1188} + , { 0,188, 2.69986,151.4691, 1189} + , { 0,189, 2.65160,152.9336, 1190} + , { 0,190, 2.60504,154.2649, 1191} + , { 0,191, 2.56013,155.4792, 1192} + , { 0,192, 2.51681,156.5902, 1193} + , { 0,193, 2.47502,157.6099, 1194} + , { 0,194, 2.43467,158.5485, 1195} + , { 0,195, 2.39571,159.4149, 1196} + , { 0,196, 2.35806,160.2167, 1197} + , { 0,197, 2.32166,160.9607, 1198} + , { 0,198, 3.45737,115.8914, 1199} + , { 0,199, 3.40100,121.7435, 1200} + , { 0,200, 3.33888,126.9407, 1201} + , { 0,201, 3.27359,131.5155, 1202} + , { 0,202, 3.20707,135.5245, 1203} + , { 0,203, 3.14069,139.0341, 1204} + , { 0,204, 3.07539,142.1101, 1205} + , { 0,205, 3.01175,144.8134, 1206} + , { 0,206, 2.95010,147.1979, 1207} + , { 0,207, 2.89062,149.3097, 1208} + , { 0,208, 2.83338,151.1883, 1209} + , { 0,209, 2.77838,152.8669, 1210} + , { 0,210, 2.72555,154.3732, 1211} + , { 0,211, 2.67484,155.7308, 1212} + , { 0,212, 2.62614,156.9593, 1213} + , { 0,213, 2.57935,158.0753, 1214} + , { 0,214, 2.53438,159.0928, 1215} + , { 0,215, 2.49112,160.0237, 1216} + , { 0,216, 2.44948,160.8783, 1217} + , { 0,217, 2.40936,161.6652, 1218} + , { 0,218, 2.37068,162.3918, 1219} + , { 0,219, 2.33336,163.0647, 1220} + , { 0,220, 3.56964,119.2516, 1221} + , { 0,221, 3.50003,125.5208, 1222} + , { 0,222, 3.42526,130.9454, 1223} + , { 0,223, 3.34854,135.6063, 1224} + , { 0,224, 3.27202,139.6041, 1225} + , { 0,225, 3.19707,143.0394, 1226} + , { 0,226, 3.12448,146.0029, 1227} + , { 0,227, 3.05468,148.5725, 1228} + , { 0,228, 2.98782,150.8134, 1229} + , { 0,229, 2.92394,152.7791, 1230} + , { 0,230, 2.86295,154.5136, 1231} + , { 0,231, 2.80475,156.0526, 1232} + , { 0,232, 2.74919,157.4256, 1233} + , { 0,233, 2.69612,158.6567, 1234} + , { 0,234, 2.64537,159.7658, 1235} + , { 0,235, 2.59681,160.7696, 1236} + , { 0,236, 2.55029,161.6817, 1237} + , { 0,237, 2.50566,162.5138, 1238} + , { 0,238, 2.46282,163.2756, 1239} + , { 0,239, 2.42163,163.9756, 1240} + , { 0,240, 2.38201,164.6206, 1241} + , { 0,241, 2.34384,165.2169, 1242} + , { 0,242, 3.69127,123.5003, 1243} + , { 0,243, 3.60407,130.1520, 1244} + , { 0,244, 3.51349,135.7175, 1245} + , { 0,245, 3.42320,140.3606, 1246} + , { 0,246, 3.33536,144.2451, 1247} + , { 0,247, 3.25107,147.5146, 1248} + , { 0,248, 3.17081,150.2876, 1249} + , { 0,249, 3.09469,152.6587, 1250} + , { 0,250, 3.02262,154.7027, 1251} + , { 0,251, 2.95440,156.4787, 1252} + , { 0,252, 2.88979,158.0334, 1253} + , { 0,253, 2.82854,159.4037, 1254} + , { 0,254, 2.77040,160.6193, 1255} + , { 0,255, 2.71512,161.7041, 1256} + , { 0,256, 2.66249,162.6775, 1257} + , { 0,257, 2.61229,163.5552, 1258} + , { 0,258, 2.56434,164.3504, 1259} + , { 0,259, 2.51848,165.0739, 1260} + , { 0,260, 2.47455,165.7348, 1261} + , { 0,261, 2.43241,166.3407, 1262} + , { 0,262, 2.39193,166.8981, 1263} + , { 0,263, 2.35300,167.4125, 1264} + , { 0,264, 3.82172,128.9722, 1265} + , { 0,265, 3.71123,135.8773, 1266} + , { 0,266, 3.60120,141.4121, 1267} + , { 0,267, 3.49530,145.8703, 1268} + , { 0,268, 3.39509,149.4971, 1269} + , { 0,269, 3.30103,152.4829, 1270} + , { 0,270, 3.21302,154.9713, 1271} + , { 0,271, 3.13069,157.0696, 1272} + , { 0,272, 3.05361,158.8583, 1273} + , { 0,273, 2.98130,160.3983, 1274} + , { 0,274, 2.91333,161.7365, 1275} + , { 0,275, 2.84929,162.9087, 1276} + , { 0,276, 2.78880,163.9433, 1277} + , { 0,277, 2.73154,164.8625, 1278} + , { 0,278, 2.67722,165.6843, 1279} + , { 0,279, 2.62557,166.4231, 1280} + , { 0,280, 2.57638,167.0905, 1281} + , { 0,281, 2.52943,167.6964, 1282} + , { 0,282, 2.48455,168.2487, 1283} + , { 0,283, 2.44157,168.7542, 1284} + , { 0,284, 2.40035,169.2185, 1285} + , { 0,285, 2.36077,169.6464, 1286} + , { 0,286, 3.95803,136.1266, 1287} + , { 0,287, 3.81739,142.9721, 1288} + , { 0,288, 3.68452,148.1753, 1289} + , { 0,289, 3.56159,152.2025, 1290} + , { 0,290, 3.44865,155.3828, 1291} + , { 0,291, 3.34497,157.9432, 1292} + , { 0,292, 3.24957,160.0411, 1293} + , { 0,293, 3.16150,161.7871, 1294} + , { 0,294, 3.07987,163.2602, 1295} + , { 0,295, 3.00393,164.5184, 1296} + , { 0,296, 2.93300,165.6043, 1297} + , { 0,297, 2.86653,166.5505, 1298} + , { 0,298, 2.80403,167.3819, 1299} + , { 0,299, 2.74508,168.1179, 1300} + , { 0,300, 2.68933,168.7738, 1301} + , { 0,301, 2.63646,169.3619, 1302} + , { 0,302, 2.58622,169.8921, 1303} + , { 0,303, 2.53837,170.3723, 1304} + , { 0,304, 2.49269,170.8094, 1305} + , { 0,305, 2.44902,171.2089, 1306} + , { 0,306, 2.40720,171.5752, 1307} + , { 0,307, 2.36708,171.9125, 1308} + , { 0,308, 4.09206,145.5213, 1309} + , { 0,309, 3.91508,151.6843, 1310} + , { 0,310, 3.75764,156.0922, 1311} + , { 0,311, 3.61782,159.3656, 1312} + , { 0,312, 3.49298,161.8775, 1313} + , { 0,313, 3.38067,163.8588, 1314} + , { 0,314, 3.27886,165.4581, 1315} + , { 0,315, 3.18593,166.7742, 1316} + , { 0,316, 3.10053,167.8751, 1317} + , { 0,317, 3.02160,168.8090, 1318} + , { 0,318, 2.94829,169.6108, 1319} + , { 0,319, 2.87987,170.3064, 1320} + , { 0,320, 2.81577,170.9154, 1321} + , { 0,321, 2.75549,171.4530, 1322} + , { 0,322, 2.69861,171.9309, 1323} + , { 0,323, 2.64480,172.3585, 1324} + , { 0,324, 2.59374,172.7432, 1325} + , { 0,325, 2.54518,173.0913, 1326} + , { 0,326, 2.49889,173.4077, 1327} + , { 0,327, 2.45469,173.6964, 1328} + , { 0,328, 2.41240,173.9610, 1329} + , { 0,329, 2.37187,174.2044, 1330} + , { 0,330, 4.20677,157.6063, 1331} + , { 0,331, 3.99276,162.0851, 1332} + , { 0,332, 3.81311,165.1053, 1333} + , { 0,333, 3.65917,167.2686, 1334} + , { 0,334, 3.52488,168.8901, 1335} + , { 0,335, 3.40597,170.1489, 1336} + , { 0,336, 3.29940,171.1535, 1337} + , { 0,337, 3.20291,171.9734, 1338} + , { 0,338, 3.11479,172.6550, 1339} + , { 0,339, 3.03375,173.2304, 1340} + , { 0,340, 2.95875,173.7225, 1341} + , { 0,341, 2.88897,174.1481, 1342} + , { 0,342, 2.82375,174.5199, 1343} + , { 0,343, 2.76255,174.8473, 1344} + , { 0,344, 2.70490,175.1380, 1345} + , { 0,345, 2.65043,175.3976, 1346} + , { 0,346, 2.59881,175.6310, 1347} + , { 0,347, 2.54977,175.8419, 1348} + , { 0,348, 2.50307,176.0334, 1349} + , { 0,349, 2.45851,176.2081, 1350} + , { 0,350, 2.41590,176.3680, 1351} + , { 0,351, 2.37509,176.5150, 1352} + , { 0,352, 4.27581,172.1795, 1353} + , { 0,353, 4.03666,173.8496, 1354} + , { 0,354, 3.84335,174.9334, 1355} + , { 0,355, 3.68121,175.6931, 1356} + , { 0,356, 3.54163,176.2549, 1357} + , { 0,357, 3.41913,176.6873, 1358} + , { 0,358, 3.31000,177.0302, 1359} + , { 0,359, 3.21162,177.3088, 1360} + , { 0,360, 3.12208,177.5397, 1361} + , { 0,361, 3.03993,177.7341, 1362} + , { 0,362, 2.96406,177.9000, 1363} + , { 0,363, 2.89359,178.0433, 1364} + , { 0,364, 2.82780,178.1683, 1365} + , { 0,365, 2.76612,178.2783, 1366} + , { 0,366, 2.70808,178.3759, 1367} + , { 0,367, 2.65327,178.4629, 1368} + , { 0,368, 2.60137,178.5412, 1369} + , { 0,369, 2.55209,178.6118, 1370} + , { 0,370, 2.50518,178.6759, 1371} + , { 0,371, 2.46043,178.7344, 1372} + , { 0,372, 2.41766,178.7879, 1373} + , { 0,373, 2.37670,178.8371, 1374} + , { 0,374, 4.27581,-172.1795, 1375} + , { 0,375, 4.03666,-173.8496, 1376} + , { 0,376, 3.84335,-174.9334, 1377} + , { 0,377, 3.68121,-175.6931, 1378} + , { 0,378, 3.54163,-176.2549, 1379} + , { 0,379, 3.41913,-176.6873, 1380} + , { 0,380, 3.31000,-177.0302, 1381} + , { 0,381, 3.21162,-177.3088, 1382} + , { 0,382, 3.12208,-177.5397, 1383} + , { 0,383, 3.03993,-177.7341, 1384} + , { 0,384, 2.96406,-177.9000, 1385} + , { 0,385, 2.89359,-178.0433, 1386} + , { 0,386, 2.82780,-178.1683, 1387} + , { 0,387, 2.76612,-178.2783, 1388} + , { 0,388, 2.70808,-178.3759, 1389} + , { 0,389, 2.65327,-178.4629, 1390} + , { 0,390, 2.60137,-178.5412, 1391} + , { 0,391, 2.55209,-178.6118, 1392} + , { 0,392, 2.50518,-178.6759, 1393} + , { 0,393, 2.46043,-178.7344, 1394} + , { 0,394, 2.41766,-178.7879, 1395} + , { 0,395, 2.37670,-178.8371, 1396} + , { 0,396, 4.20677,-157.6063, 1397} + , { 0,397, 3.99276,-162.0851, 1398} + , { 0,398, 3.81311,-165.1053, 1399} + , { 0,399, 3.65917,-167.2686, 1400} + , { 0,400, 3.52488,-168.8901, 1401} + , { 0,401, 3.40597,-170.1489, 1402} + , { 0,402, 3.29940,-171.1535, 1403} + , { 0,403, 3.20291,-171.9734, 1404} + , { 0,404, 3.11479,-172.6550, 1405} + , { 0,405, 3.03375,-173.2304, 1406} + , { 0,406, 2.95875,-173.7225, 1407} + , { 0,407, 2.88897,-174.1481, 1408} + , { 0,408, 2.82375,-174.5199, 1409} + , { 0,409, 2.76255,-174.8473, 1410} + , { 0,410, 2.70490,-175.1380, 1411} + , { 0,411, 2.65043,-175.3976, 1412} + , { 0,412, 2.59881,-175.6310, 1413} + , { 0,413, 2.54977,-175.8419, 1414} + , { 0,414, 2.50307,-176.0334, 1415} + , { 0,415, 2.45851,-176.2081, 1416} + , { 0,416, 2.41590,-176.3680, 1417} + , { 0,417, 2.37509,-176.5150, 1418} + , { 0,418, 4.09206,-145.5213, 1419} + , { 0,419, 3.91508,-151.6843, 1420} + , { 0,420, 3.75764,-156.0922, 1421} + , { 0,421, 3.61782,-159.3656, 1422} + , { 0,422, 3.49298,-161.8775, 1423} + , { 0,423, 3.38067,-163.8588, 1424} + , { 0,424, 3.27886,-165.4581, 1425} + , { 0,425, 3.18593,-166.7742, 1426} + , { 0,426, 3.10053,-167.8751, 1427} + , { 0,427, 3.02160,-168.8090, 1428} + , { 0,428, 2.94829,-169.6108, 1429} + , { 0,429, 2.87987,-170.3064, 1430} + , { 0,430, 2.81577,-170.9154, 1431} + , { 0,431, 2.75549,-171.4530, 1432} + , { 0,432, 2.69861,-171.9309, 1433} + , { 0,433, 2.64480,-172.3585, 1434} + , { 0,434, 2.59374,-172.7432, 1435} + , { 0,435, 2.54518,-173.0913, 1436} + , { 0,436, 2.49889,-173.4077, 1437} + , { 0,437, 2.45469,-173.6964, 1438} + , { 0,438, 2.41240,-173.9610, 1439} + , { 0,439, 2.37187,-174.2044, 1440} + , { 0,440, 3.95803,-136.1266, 1441} + , { 0,441, 3.81739,-142.9721, 1442} + , { 0,442, 3.68452,-148.1754, 1443} + , { 0,443, 3.56159,-152.2025, 1444} + , { 0,444, 3.44865,-155.3828, 1445} + , { 0,445, 3.34497,-157.9432, 1446} + , { 0,446, 3.24957,-160.0411, 1447} + , { 0,447, 3.16150,-161.7871, 1448} + , { 0,448, 3.07987,-163.2602, 1449} + , { 0,449, 3.00393,-164.5184, 1450} + , { 0,450, 2.93300,-165.6043, 1451} + , { 0,451, 2.86653,-166.5505, 1452} + , { 0,452, 2.80403,-167.3819, 1453} + , { 0,453, 2.74508,-168.1179, 1454} + , { 0,454, 2.68933,-168.7738, 1455} + , { 0,455, 2.63646,-169.3619, 1456} + , { 0,456, 2.58622,-169.8921, 1457} + , { 0,457, 2.53837,-170.3723, 1458} + , { 0,458, 2.49269,-170.8094, 1459} + , { 0,459, 2.44902,-171.2089, 1460} + , { 0,460, 2.40720,-171.5752, 1461} + , { 0,461, 2.36708,-171.9125, 1462} + , { 0,462, 3.82172,-128.9722, 1463} + , { 0,463, 3.71123,-135.8773, 1464} + , { 0,464, 3.60120,-141.4121, 1465} + , { 0,465, 3.49530,-145.8703, 1466} + , { 0,466, 3.39509,-149.4971, 1467} + , { 0,467, 3.30103,-152.4829, 1468} + , { 0,468, 3.21302,-154.9713, 1469} + , { 0,469, 3.13069,-157.0696, 1470} + , { 0,470, 3.05361,-158.8583, 1471} + , { 0,471, 2.98130,-160.3983, 1472} + , { 0,472, 2.91333,-161.7365, 1473} + , { 0,473, 2.84929,-162.9087, 1474} + , { 0,474, 2.78880,-163.9433, 1475} + , { 0,475, 2.73154,-164.8625, 1476} + , { 0,476, 2.67722,-165.6843, 1477} + , { 0,477, 2.62557,-166.4231, 1478} + , { 0,478, 2.57638,-167.0905, 1479} + , { 0,479, 2.52943,-167.6964, 1480} + , { 0,480, 2.48455,-168.2487, 1481} + , { 0,481, 2.44157,-168.7542, 1482} + , { 0,482, 2.40035,-169.2185, 1483} + , { 0,483, 2.36077,-169.6464, 1484} + , { 0,484, 3.69127,-123.5003, 1485} + , { 0,485, 3.60408,-130.1520, 1486} + , { 0,486, 3.51349,-135.7175, 1487} + , { 0,487, 3.42320,-140.3606, 1488} + , { 0,488, 3.33536,-144.2451, 1489} + , { 0,489, 3.25107,-147.5146, 1490} + , { 0,490, 3.17081,-150.2876, 1491} + , { 0,491, 3.09469,-152.6587, 1492} + , { 0,492, 3.02262,-154.7027, 1493} + , { 0,493, 2.95440,-156.4787, 1494} + , { 0,494, 2.88979,-158.0334, 1495} + , { 0,495, 2.82854,-159.4037, 1496} + , { 0,496, 2.77040,-160.6193, 1497} + , { 0,497, 2.71512,-161.7041, 1498} + , { 0,498, 2.66249,-162.6775, 1499} + , { 0,499, 2.61229,-163.5552, 1500} + , { 0,500, 2.56434,-164.3504, 1501} + , { 0,501, 2.51848,-165.0739, 1502} + , { 0,502, 2.47455,-165.7348, 1503} + , { 0,503, 2.43241,-166.3407, 1504} + , { 0,504, 2.39193,-166.8981, 1505} + , { 0,505, 2.35300,-167.4125, 1506} + , { 0,506, 3.56964,-119.2516, 1507} + , { 0,507, 3.50003,-125.5208, 1508} + , { 0,508, 3.42526,-130.9454, 1509} + , { 0,509, 3.34854,-135.6063, 1510} + , { 0,510, 3.27202,-139.6041, 1511} + , { 0,511, 3.19707,-143.0394, 1512} + , { 0,512, 3.12448,-146.0028, 1513} + , { 0,513, 3.05468,-148.5725, 1514} + , { 0,514, 2.98782,-150.8134, 1515} + , { 0,515, 2.92394,-152.7791, 1516} + , { 0,516, 2.86295,-154.5136, 1517} + , { 0,517, 2.80475,-156.0526, 1518} + , { 0,518, 2.74919,-157.4256, 1519} + , { 0,519, 2.69612,-158.6567, 1520} + , { 0,520, 2.64537,-159.7658, 1521} + , { 0,521, 2.59681,-160.7696, 1522} + , { 0,522, 2.55029,-161.6817, 1523} + , { 0,523, 2.50566,-162.5138, 1524} + , { 0,524, 2.46282,-163.2756, 1525} + , { 0,525, 2.42163,-163.9756, 1526} + , { 0,526, 2.38201,-164.6206, 1527} + , { 0,527, 2.34384,-165.2169, 1528} + , { 0,528, 3.45737,-115.8914, 1529} + , { 0,529, 3.40100,-121.7435, 1530} + , { 0,530, 3.33888,-126.9407, 1531} + , { 0,531, 3.27359,-131.5155, 1532} + , { 0,532, 3.20707,-135.5245, 1533} + , { 0,533, 3.14069,-139.0341, 1534} + , { 0,534, 3.07539,-142.1101, 1535} + , { 0,535, 3.01175,-144.8134, 1536} + , { 0,536, 2.95010,-147.1979, 1537} + , { 0,537, 2.89062,-149.3097, 1538} + , { 0,538, 2.83338,-151.1883, 1539} + , { 0,539, 2.77838,-152.8669, 1540} + , { 0,540, 2.72555,-154.3732, 1541} + , { 0,541, 2.67484,-155.7308, 1542} + , { 0,542, 2.62614,-156.9593, 1543} + , { 0,543, 2.57935,-158.0753, 1544} + , { 0,544, 2.53438,-159.0928, 1545} + , { 0,545, 2.49112,-160.0237, 1546} + , { 0,546, 2.44948,-160.8783, 1547} + , { 0,547, 2.40936,-161.6652, 1548} + , { 0,548, 2.37068,-162.3918, 1549} + , { 0,549, 2.33336,-163.0647, 1550} + , { 0,550, 3.35401,-113.1847, 1551} + , { 0,551, 3.30770,-118.6291, 1552} + , { 0,552, 3.25563,-123.5631, 1553} + , { 0,553, 3.19983,-127.9921, 1554} + , { 0,554, 3.14195,-131.9447, 1555} + , { 0,555, 3.08325,-135.4618, 1556} + , { 0,556, 3.02467,-138.5892, 1557} + , { 0,557, 2.96685,-141.3723, 1558} + , { 0,558, 2.91024,-143.8540, 1559} + , { 0,559, 2.85511,-146.0727, 1560} + , { 0,560, 2.80162,-148.0624, 1561} + , { 0,561, 2.74986,-149.8527, 1562} + , { 0,562, 2.69986,-151.4691, 1563} + , { 0,563, 2.65160,-152.9336, 1564} + , { 0,564, 2.60504,-154.2649, 1565} + , { 0,565, 2.56013,-155.4792, 1566} + , { 0,566, 2.51681,-156.5902, 1567} + , { 0,567, 2.47502,-157.6099, 1568} + , { 0,568, 2.43467,-158.5485, 1569} + , { 0,569, 2.39571,-159.4149, 1570} + , { 0,570, 2.35806,-160.2167, 1571} + , { 0,571, 2.32166,-160.9607, 1572} + , { 0,572, 3.25874,-110.9669, 1573} + , { 0,573, 3.22016,-116.0317, 1574} + , { 0,574, 3.17611,-120.6947, 1575} + , { 0,575, 3.12815,-124.9477, 1576} + , { 0,576, 3.07764,-128.8015, 1577} + , { 0,577, 3.02570,-132.2795, 1578} + , { 0,578, 2.97319,-135.4122, 1579} + , { 0,579, 2.92078,-138.2323, 1580} + , { 0,580, 2.86893,-140.7726, 1581} + , { 0,581, 2.81799,-143.0641, 1582} + , { 0,582, 2.76818,-145.1354, 1583} + , { 0,583, 2.71965,-147.0120, 1584} + , { 0,584, 2.67248,-148.7166, 1585} + , { 0,585, 2.62670,-150.2692, 1586} + , { 0,586, 2.58234,-151.6873, 1587} + , { 0,587, 2.53938,-152.9860, 1588} + , { 0,588, 2.49778,-154.1788, 1589} + , { 0,589, 2.45752,-155.2770, 1590} + , { 0,590, 2.41854,-156.2908, 1591} + , { 0,591, 2.38080,-157.2291, 1592} + , { 0,592, 2.34424,-158.0994, 1593} + , { 0,593, 2.30883,-158.9086, 1594} + , { 0,594, 3.17069,-109.1218, 1595} + , { 0,595, 3.13815,-113.8407, 1596} + , { 0,596, 3.10053,-118.2401, 1597} + , { 0,597, 3.05904,-122.3048, 1598} + , { 0,598, 3.01479,-126.0353, 1599} + , { 0,599, 2.96874,-129.4434, 1600} + , { 0,600, 2.92165,-132.5480, 1601} + , { 0,601, 2.87417,-135.3720, 1602} + , { 0,602, 2.82676,-137.9397, 1603} + , { 0,603, 2.77978,-140.2755, 1604} + , { 0,604, 2.73351,-142.4027, 1605} + , { 0,605, 2.68812,-144.3429, 1606} + , { 0,606, 2.64374,-146.1158, 1607} + , { 0,607, 2.60045,-147.7391, 1608} + , { 0,608, 2.55830,-149.2288, 1609} + , { 0,609, 2.51731,-150.5988, 1610} + , { 0,610, 2.47747,-151.8617, 1611} + , { 0,611, 2.43878,-153.0284, 1612} + , { 0,612, 2.40122,-154.1087, 1613} + , { 0,613, 2.36475,-155.1111, 1614} + , { 0,614, 2.32934,-156.0432, 1615} + , { 0,615, 2.29497,-156.9117, 1616} + , { 0,616, 3.08904,-107.5656, 1617} + , { 0,617, 3.06127,-111.9728, 1618} + , { 0,618, 3.02884,-116.1229, 1619} + , { 0,619, 2.99272,-119.9982, 1620} + , { 0,620, 2.95378,-123.5931, 1621} + , { 0,621, 2.91283,-126.9118, 1622} + , { 0,622, 2.87055,-129.9650, 1623} + , { 0,623, 2.82752,-132.7681, 1624} + , { 0,624, 2.78418,-135.3387, 1625} + , { 0,625, 2.74092,-137.6954, 1626} + , { 0,626, 2.69800,-139.8569, 1627} + , { 0,627, 2.65563,-141.8409, 1628} + , { 0,628, 2.61396,-143.6643, 1629} + , { 0,629, 2.57312,-145.3426, 1630} + , { 0,630, 2.53316,-146.8897, 1631} + , { 0,631, 2.49413,-148.3186, 1632} + , { 0,632, 2.45607,-149.6406, 1633} + , { 0,633, 2.41898,-150.8661, 1634} + , { 0,634, 2.38286,-152.0042, 1635} + , { 0,635, 2.34769,-153.0633, 1636} + , { 0,636, 2.31347,-154.0505, 1637} + , { 0,637, 2.28016,-154.9724, 1638} + , { 0,638, 3.01304,-106.2373, 1639} + , { 0,639, 2.98909,-110.3648, 1640} + , { 0,640, 2.96092,-114.2830, 1641} + , { 0,641, 2.92926,-117.9738, 1642} + , { 0,642, 2.89482,-121.4286, 1643} + , { 0,643, 2.85829,-124.6464, 1644} + , { 0,644, 2.82025,-127.6327, 1645} + , { 0,645, 2.78120,-130.3971, 1646} + , { 0,646, 2.74159,-132.9517, 1647} + , { 0,647, 2.70176,-135.3107, 1648} + , { 0,648, 2.66198,-137.4885, 1649} + , { 0,649, 2.62248,-139.4996, 1650} + , { 0,650, 2.58342,-141.3580, 1651} + , { 0,651, 2.54494,-143.0769, 1652} + , { 0,652, 2.50713,-144.6688, 1653} + , { 0,653, 2.47005,-146.1450, 1654} + , { 0,654, 2.43375,-147.5159, 1655} + , { 0,655, 2.39826,-148.7910, 1656} + , { 0,656, 2.36359,-149.9789, 1657} + , { 0,657, 2.32975,-151.0872, 1658} + , { 0,658, 2.29672,-152.1230, 1659} + , { 0,659, 2.26452,-153.0925, 1660} + , { 0,660, 2.94206,-105.0914, 1661} + , { 0,661, 2.92122,-108.9679, 1662} + , { 0,662, 2.89654,-112.6723, 1663} + , { 0,663, 2.86861,-116.1871, 1664} + , { 0,664, 2.83801,-119.5021, 1665} + , { 0,665, 2.80530,-122.6136, 1666} + , { 0,666, 2.77098,-125.5231, 1667} + , { 0,667, 2.73551,-128.2361, 1668} + , { 0,668, 2.69926,-130.7608, 1669} + , { 0,669, 2.66258,-133.1073, 1670} + , { 0,670, 2.62573,-135.2869, 1671} + , { 0,671, 2.58893,-137.3109, 1672} + , { 0,672, 2.55236,-139.1910, 1673} + , { 0,673, 2.51615,-140.9384, 1674} + , { 0,674, 2.48042,-142.5636, 1675} + , { 0,675, 2.44524,-144.0767, 1676} + , { 0,676, 2.41068,-145.4871, 1677} + , { 0,677, 2.37677,-146.8032, 1678} + , { 0,678, 2.34355,-148.0330, 1679} + , { 0,679, 2.31103,-149.1836, 1680} + , { 0,680, 2.27922,-150.2617, 1681} + , { 0,681, 2.24812,-151.2731, 1682} + , { 0,682, 2.87553,-104.0936, 1683} + , { 0,683, 2.85724,-107.7445, 1684} + , { 0,684, 2.83547,-111.2526, 1685} + , { 0,685, 2.81069,-114.6014, 1686} + , { 0,686, 2.78337,-117.7802, 1687} + , { 0,687, 2.75397,-120.7837, 1688} + , { 0,688, 2.72292,-123.6107, 1689} + , { 0,689, 2.69062,-126.2638, 1690} + , { 0,690, 2.65742,-128.7483, 1691} + , { 0,691, 2.62362,-131.0712, 1692} + , { 0,692, 2.58948,-133.2408, 1693} + , { 0,693, 2.55520,-135.2663, 1694} + , { 0,694, 2.52097,-137.1569, 1695} + , { 0,695, 2.48694,-138.9219, 1696} + , { 0,696, 2.45320,-140.5704, 1697} + , { 0,697, 2.41987,-142.1112, 1698} + , { 0,698, 2.38700,-143.5524, 1699} + , { 0,699, 2.35465,-144.9016, 1700} + , { 0,700, 2.32286,-146.1662, 1701} + , { 0,701, 2.29166,-147.3526, 1702} + , { 0,702, 2.26106,-148.4670, 1703} + , { 0,703, 2.23108,-149.5150, 1704} + , { 0,704, 2.81298,-103.2172, 1705} + , { 0,705, 2.79681,-106.6652, 1706} + , { 0,706, 2.77748,-109.9934, 1707} + , { 0,707, 2.75536,-113.1867, 1708} + , { 0,708, 2.73085,-116.2346, 1709} + , { 0,709, 2.70433,-119.1309, 1710} + , { 0,710, 2.67616,-121.8728, 1711} + , { 0,711, 2.64669,-124.4607, 1712} + , { 0,712, 2.61623,-126.8977, 1713} + , { 0,713, 2.58506,-129.1885, 1714} + , { 0,714, 2.55341,-131.3391, 1715} + , { 0,715, 2.52148,-133.3566, 1716} + , { 0,716, 2.48945,-135.2483, 1717} + , { 0,717, 2.45747,-137.0220, 1718} + , { 0,718, 2.42565,-138.6851, 1719} + , { 0,719, 2.39408,-140.2452, 1720} + , { 0,720, 2.36286,-141.7095, 1721} + , { 0,721, 2.33203,-143.0848, 1722} + , { 0,722, 2.30164,-144.3775, 1723} + , { 0,723, 2.27174,-145.5936, 1724} + , { 0,724, 2.24234,-146.7387, 1725} + , { 0,725, 2.21346,-147.8181, 1726} + , { 0,726, 2.75399,-102.4419, 1727} + , { 0,727, 2.73960,-105.7065, 1728} + , { 0,728, 2.72233,-108.8698, 1729} + , { 0,729, 2.70249,-111.9182, 1730} + , { 0,730, 2.68040,-114.8415, 1731} + , { 0,731, 2.65638,-117.6331, 1732} + , { 0,732, 2.63075,-120.2893, 1733} + , { 0,733, 2.60380,-122.8091, 1734} + , { 0,734, 2.57581,-125.1937, 1735} + , { 0,735, 2.54702,-127.4462, 1736} + , { 0,736, 2.51766,-129.5709, 1737} + , { 0,737, 2.48791,-131.5728, 1738} + , { 0,738, 2.45794,-133.4580, 1739} + , { 0,739, 2.42789,-135.2326, 1740} + , { 0,740, 2.39788,-136.9028, 1741} + , { 0,741, 2.36801,-138.4752, 1742} + , { 0,742, 2.33837,-139.9558, 1743} + , { 0,743, 2.30901,-141.3506, 1744} + , { 0,744, 2.27999,-142.6654, 1745} + , { 0,745, 2.25136,-143.9056, 1746} + , { 0,746, 2.22314,-145.0762, 1747} + , { 0,747, 2.19537,-146.1822, 1748} + , { 1, 0, 2.75399, 77.5581, 2001} + , { 1, 1, 2.73960, 74.2935, 2002} + , { 1, 2, 2.72233, 71.1302, 2003} + , { 1, 3, 2.70249, 68.0818, 2004} + , { 1, 4, 2.68040, 65.1585, 2005} + , { 1, 5, 2.65638, 62.3669, 2006} + , { 1, 6, 2.63075, 59.7107, 2007} + , { 1, 7, 2.60380, 57.1909, 2008} + , { 1, 8, 2.57581, 54.8063, 2009} + , { 1, 9, 2.54702, 52.5538, 2010} + , { 1, 10, 2.51766, 50.4291, 2011} + , { 1, 11, 2.48791, 48.4272, 2012} + , { 1, 12, 2.45794, 46.5420, 2013} + , { 1, 13, 2.42789, 44.7674, 2014} + , { 1, 14, 2.39788, 43.0972, 2015} + , { 1, 15, 2.36801, 41.5248, 2016} + , { 1, 16, 2.33837, 40.0442, 2017} + , { 1, 17, 2.30901, 38.6494, 2018} + , { 1, 18, 2.27999, 37.3346, 2019} + , { 1, 19, 2.25136, 36.0944, 2020} + , { 1, 20, 2.22314, 34.9238, 2021} + , { 1, 21, 2.19537, 33.8178, 2022} + , { 1, 22, 2.81298, 76.7827, 2023} + , { 1, 23, 2.79681, 73.3348, 2024} + , { 1, 24, 2.77748, 70.0066, 2025} + , { 1, 25, 2.75536, 66.8133, 2026} + , { 1, 26, 2.73085, 63.7653, 2027} + , { 1, 27, 2.70433, 60.8691, 2028} + , { 1, 28, 2.67616, 58.1272, 2029} + , { 1, 29, 2.64669, 55.5393, 2030} + , { 1, 30, 2.61623, 53.1023, 2031} + , { 1, 31, 2.58506, 50.8115, 2032} + , { 1, 32, 2.55341, 48.6609, 2033} + , { 1, 33, 2.52148, 46.6434, 2034} + , { 1, 34, 2.48945, 44.7517, 2035} + , { 1, 35, 2.45747, 42.9780, 2036} + , { 1, 36, 2.42565, 41.3149, 2037} + , { 1, 37, 2.39408, 39.7548, 2038} + , { 1, 38, 2.36286, 38.2905, 2039} + , { 1, 39, 2.33203, 36.9152, 2040} + , { 1, 40, 2.30164, 35.6225, 2041} + , { 1, 41, 2.27174, 34.4064, 2042} + , { 1, 42, 2.24234, 33.2613, 2043} + , { 1, 43, 2.21346, 32.1819, 2044} + , { 1, 44, 2.87553, 75.9064, 2045} + , { 1, 45, 2.85724, 72.2555, 2046} + , { 1, 46, 2.83547, 68.7474, 2047} + , { 1, 47, 2.81069, 65.3986, 2048} + , { 1, 48, 2.78337, 62.2198, 2049} + , { 1, 49, 2.75397, 59.2163, 2050} + , { 1, 50, 2.72292, 56.3893, 2051} + , { 1, 51, 2.69062, 53.7362, 2052} + , { 1, 52, 2.65742, 51.2517, 2053} + , { 1, 53, 2.62362, 48.9288, 2054} + , { 1, 54, 2.58948, 46.7592, 2055} + , { 1, 55, 2.55520, 44.7337, 2056} + , { 1, 56, 2.52097, 42.8431, 2057} + , { 1, 57, 2.48694, 41.0781, 2058} + , { 1, 58, 2.45320, 39.4296, 2059} + , { 1, 59, 2.41987, 37.8888, 2060} + , { 1, 60, 2.38700, 36.4476, 2061} + , { 1, 61, 2.35465, 35.0984, 2062} + , { 1, 62, 2.32286, 33.8338, 2063} + , { 1, 63, 2.29166, 32.6474, 2064} + , { 1, 64, 2.26106, 31.5330, 2065} + , { 1, 65, 2.23108, 30.4850, 2066} + , { 1, 66, 2.94206, 74.9086, 2067} + , { 1, 67, 2.92122, 71.0321, 2068} + , { 1, 68, 2.89654, 67.3277, 2069} + , { 1, 69, 2.86861, 63.8129, 2070} + , { 1, 70, 2.83801, 60.4979, 2071} + , { 1, 71, 2.80530, 57.3864, 2072} + , { 1, 72, 2.77098, 54.4769, 2073} + , { 1, 73, 2.73551, 51.7639, 2074} + , { 1, 74, 2.69926, 49.2392, 2075} + , { 1, 75, 2.66258, 46.8927, 2076} + , { 1, 76, 2.62573, 44.7131, 2077} + , { 1, 77, 2.58893, 42.6891, 2078} + , { 1, 78, 2.55236, 40.8090, 2079} + , { 1, 79, 2.51615, 39.0616, 2080} + , { 1, 80, 2.48042, 37.4364, 2081} + , { 1, 81, 2.44524, 35.9233, 2082} + , { 1, 82, 2.41068, 34.5129, 2083} + , { 1, 83, 2.37677, 33.1968, 2084} + , { 1, 84, 2.34355, 31.9670, 2085} + , { 1, 85, 2.31103, 30.8164, 2086} + , { 1, 86, 2.27922, 29.7383, 2087} + , { 1, 87, 2.24812, 28.7269, 2088} + , { 1, 88, 3.01304, 73.7627, 2089} + , { 1, 89, 2.98909, 69.6352, 2090} + , { 1, 90, 2.96092, 65.7170, 2091} + , { 1, 91, 2.92926, 62.0262, 2092} + , { 1, 92, 2.89482, 58.5714, 2093} + , { 1, 93, 2.85829, 55.3536, 2094} + , { 1, 94, 2.82025, 52.3673, 2095} + , { 1, 95, 2.78120, 49.6029, 2096} + , { 1, 96, 2.74159, 47.0483, 2097} + , { 1, 97, 2.70176, 44.6893, 2098} + , { 1, 98, 2.66198, 42.5115, 2099} + , { 1, 99, 2.62248, 40.5004, 2100} + , { 1,100, 2.58342, 38.6420, 2101} + , { 1,101, 2.54494, 36.9231, 2102} + , { 1,102, 2.50713, 35.3312, 2103} + , { 1,103, 2.47005, 33.8550, 2104} + , { 1,104, 2.43375, 32.4841, 2105} + , { 1,105, 2.39826, 31.2090, 2106} + , { 1,106, 2.36359, 30.0211, 2107} + , { 1,107, 2.32975, 28.9128, 2108} + , { 1,108, 2.29672, 27.8770, 2109} + , { 1,109, 2.26452, 26.9075, 2110} + , { 1,110, 3.08904, 72.4344, 2111} + , { 1,111, 3.06127, 68.0272, 2112} + , { 1,112, 3.02884, 63.8771, 2113} + , { 1,113, 2.99272, 60.0018, 2114} + , { 1,114, 2.95378, 56.4069, 2115} + , { 1,115, 2.91283, 53.0882, 2116} + , { 1,116, 2.87055, 50.0350, 2117} + , { 1,117, 2.82752, 47.2319, 2118} + , { 1,118, 2.78418, 44.6613, 2119} + , { 1,119, 2.74092, 42.3046, 2120} + , { 1,120, 2.69800, 40.1431, 2121} + , { 1,121, 2.65563, 38.1591, 2122} + , { 1,122, 2.61396, 36.3357, 2123} + , { 1,123, 2.57312, 34.6575, 2124} + , { 1,124, 2.53316, 33.1103, 2125} + , { 1,125, 2.49413, 31.6814, 2126} + , { 1,126, 2.45607, 30.3594, 2127} + , { 1,127, 2.41898, 29.1339, 2128} + , { 1,128, 2.38286, 27.9958, 2129} + , { 1,129, 2.34769, 26.9367, 2130} + , { 1,130, 2.31347, 25.9495, 2131} + , { 1,131, 2.28016, 25.0276, 2132} + , { 1,132, 3.17069, 70.8782, 2133} + , { 1,133, 3.13815, 66.1593, 2134} + , { 1,134, 3.10053, 61.7599, 2135} + , { 1,135, 3.05904, 57.6952, 2136} + , { 1,136, 3.01479, 53.9647, 2137} + , { 1,137, 2.96874, 50.5566, 2138} + , { 1,138, 2.92165, 47.4520, 2139} + , { 1,139, 2.87417, 44.6280, 2140} + , { 1,140, 2.82676, 42.0603, 2141} + , { 1,141, 2.77978, 39.7245, 2142} + , { 1,142, 2.73351, 37.5973, 2143} + , { 1,143, 2.68812, 35.6571, 2144} + , { 1,144, 2.64374, 33.8842, 2145} + , { 1,145, 2.60045, 32.2609, 2146} + , { 1,146, 2.55830, 30.7712, 2147} + , { 1,147, 2.51731, 29.4012, 2148} + , { 1,148, 2.47747, 28.1383, 2149} + , { 1,149, 2.43878, 26.9716, 2150} + , { 1,150, 2.40122, 25.8913, 2151} + , { 1,151, 2.36475, 24.8889, 2152} + , { 1,152, 2.32934, 23.9568, 2153} + , { 1,153, 2.29497, 23.0883, 2154} + , { 1,154, 3.25874, 69.0331, 2155} + , { 1,155, 3.22016, 63.9683, 2156} + , { 1,156, 3.17611, 59.3053, 2157} + , { 1,157, 3.12815, 55.0523, 2158} + , { 1,158, 3.07764, 51.1985, 2159} + , { 1,159, 3.02570, 47.7205, 2160} + , { 1,160, 2.97319, 44.5878, 2161} + , { 1,161, 2.92078, 41.7677, 2162} + , { 1,162, 2.86893, 39.2274, 2163} + , { 1,163, 2.81799, 36.9359, 2164} + , { 1,164, 2.76818, 34.8646, 2165} + , { 1,165, 2.71965, 32.9880, 2166} + , { 1,166, 2.67248, 31.2834, 2167} + , { 1,167, 2.62670, 29.7308, 2168} + , { 1,168, 2.58234, 28.3127, 2169} + , { 1,169, 2.53938, 27.0140, 2170} + , { 1,170, 2.49778, 25.8212, 2171} + , { 1,171, 2.45752, 24.7230, 2172} + , { 1,172, 2.41854, 23.7092, 2173} + , { 1,173, 2.38080, 22.7709, 2174} + , { 1,174, 2.34424, 21.9006, 2175} + , { 1,175, 2.30883, 21.0914, 2176} + , { 1,176, 3.35401, 66.8153, 2177} + , { 1,177, 3.30770, 61.3709, 2178} + , { 1,178, 3.25563, 56.4369, 2179} + , { 1,179, 3.19983, 52.0079, 2180} + , { 1,180, 3.14195, 48.0553, 2181} + , { 1,181, 3.08325, 44.5382, 2182} + , { 1,182, 3.02467, 41.4108, 2183} + , { 1,183, 2.96685, 38.6277, 2184} + , { 1,184, 2.91024, 36.1460, 2185} + , { 1,185, 2.85511, 33.9273, 2186} + , { 1,186, 2.80162, 31.9376, 2187} + , { 1,187, 2.74986, 30.1473, 2188} + , { 1,188, 2.69986, 28.5309, 2189} + , { 1,189, 2.65160, 27.0664, 2190} + , { 1,190, 2.60504, 25.7351, 2191} + , { 1,191, 2.56013, 24.5208, 2192} + , { 1,192, 2.51681, 23.4098, 2193} + , { 1,193, 2.47502, 22.3901, 2194} + , { 1,194, 2.43467, 21.4515, 2195} + , { 1,195, 2.39571, 20.5851, 2196} + , { 1,196, 2.35806, 19.7833, 2197} + , { 1,197, 2.32166, 19.0393, 2198} + , { 1,198, 3.45737, 64.1086, 2199} + , { 1,199, 3.40100, 58.2565, 2200} + , { 1,200, 3.33888, 53.0593, 2201} + , { 1,201, 3.27359, 48.4845, 2202} + , { 1,202, 3.20707, 44.4755, 2203} + , { 1,203, 3.14069, 40.9659, 2204} + , { 1,204, 3.07539, 37.8899, 2205} + , { 1,205, 3.01175, 35.1866, 2206} + , { 1,206, 2.95010, 32.8021, 2207} + , { 1,207, 2.89062, 30.6903, 2208} + , { 1,208, 2.83338, 28.8117, 2209} + , { 1,209, 2.77838, 27.1331, 2210} + , { 1,210, 2.72555, 25.6268, 2211} + , { 1,211, 2.67484, 24.2692, 2212} + , { 1,212, 2.62614, 23.0407, 2213} + , { 1,213, 2.57935, 21.9247, 2214} + , { 1,214, 2.53438, 20.9072, 2215} + , { 1,215, 2.49112, 19.9763, 2216} + , { 1,216, 2.44948, 19.1217, 2217} + , { 1,217, 2.40936, 18.3348, 2218} + , { 1,218, 2.37068, 17.6082, 2219} + , { 1,219, 2.33336, 16.9353, 2220} + , { 1,220, 3.56964, 60.7484, 2221} + , { 1,221, 3.50003, 54.4792, 2222} + , { 1,222, 3.42526, 49.0546, 2223} + , { 1,223, 3.34854, 44.3937, 2224} + , { 1,224, 3.27202, 40.3959, 2225} + , { 1,225, 3.19707, 36.9606, 2226} + , { 1,226, 3.12448, 33.9971, 2227} + , { 1,227, 3.05468, 31.4275, 2228} + , { 1,228, 2.98782, 29.1866, 2229} + , { 1,229, 2.92394, 27.2209, 2230} + , { 1,230, 2.86295, 25.4864, 2231} + , { 1,231, 2.80475, 23.9474, 2232} + , { 1,232, 2.74919, 22.5744, 2233} + , { 1,233, 2.69612, 21.3433, 2234} + , { 1,234, 2.64537, 20.2342, 2235} + , { 1,235, 2.59681, 19.2304, 2236} + , { 1,236, 2.55029, 18.3183, 2237} + , { 1,237, 2.50566, 17.4862, 2238} + , { 1,238, 2.46282, 16.7244, 2239} + , { 1,239, 2.42163, 16.0244, 2240} + , { 1,240, 2.38201, 15.3794, 2241} + , { 1,241, 2.34384, 14.7831, 2242} + , { 1,242, 3.69127, 56.4997, 2243} + , { 1,243, 3.60407, 49.8480, 2244} + , { 1,244, 3.51349, 44.2825, 2245} + , { 1,245, 3.42320, 39.6394, 2246} + , { 1,246, 3.33536, 35.7549, 2247} + , { 1,247, 3.25107, 32.4854, 2248} + , { 1,248, 3.17081, 29.7124, 2249} + , { 1,249, 3.09469, 27.3413, 2250} + , { 1,250, 3.02262, 25.2973, 2251} + , { 1,251, 2.95440, 23.5213, 2252} + , { 1,252, 2.88979, 21.9666, 2253} + , { 1,253, 2.82854, 20.5963, 2254} + , { 1,254, 2.77040, 19.3807, 2255} + , { 1,255, 2.71512, 18.2959, 2256} + , { 1,256, 2.66249, 17.3225, 2257} + , { 1,257, 2.61229, 16.4448, 2258} + , { 1,258, 2.56434, 15.6496, 2259} + , { 1,259, 2.51848, 14.9261, 2260} + , { 1,260, 2.47455, 14.2652, 2261} + , { 1,261, 2.43241, 13.6593, 2262} + , { 1,262, 2.39193, 13.1019, 2263} + , { 1,263, 2.35300, 12.5875, 2264} + , { 1,264, 3.82172, 51.0278, 2265} + , { 1,265, 3.71123, 44.1227, 2266} + , { 1,266, 3.60120, 38.5879, 2267} + , { 1,267, 3.49530, 34.1297, 2268} + , { 1,268, 3.39509, 30.5029, 2269} + , { 1,269, 3.30103, 27.5171, 2270} + , { 1,270, 3.21302, 25.0287, 2271} + , { 1,271, 3.13069, 22.9304, 2272} + , { 1,272, 3.05361, 21.1417, 2273} + , { 1,273, 2.98130, 19.6017, 2274} + , { 1,274, 2.91333, 18.2635, 2275} + , { 1,275, 2.84929, 17.0913, 2276} + , { 1,276, 2.78880, 16.0567, 2277} + , { 1,277, 2.73154, 15.1375, 2278} + , { 1,278, 2.67722, 14.3157, 2279} + , { 1,279, 2.62557, 13.5769, 2280} + , { 1,280, 2.57638, 12.9095, 2281} + , { 1,281, 2.52943, 12.3036, 2282} + , { 1,282, 2.48455, 11.7513, 2283} + , { 1,283, 2.44157, 11.2458, 2284} + , { 1,284, 2.40035, 10.7815, 2285} + , { 1,285, 2.36077, 10.3536, 2286} + , { 1,286, 3.95803, 43.8734, 2287} + , { 1,287, 3.81739, 37.0279, 2288} + , { 1,288, 3.68452, 31.8247, 2289} + , { 1,289, 3.56159, 27.7975, 2290} + , { 1,290, 3.44865, 24.6172, 2291} + , { 1,291, 3.34497, 22.0568, 2292} + , { 1,292, 3.24957, 19.9589, 2293} + , { 1,293, 3.16150, 18.2129, 2294} + , { 1,294, 3.07987, 16.7398, 2295} + , { 1,295, 3.00393, 15.4816, 2296} + , { 1,296, 2.93300, 14.3957, 2297} + , { 1,297, 2.86653, 13.4495, 2298} + , { 1,298, 2.80403, 12.6181, 2299} + , { 1,299, 2.74508, 11.8821, 2300} + , { 1,300, 2.68933, 11.2262, 2301} + , { 1,301, 2.63646, 10.6381, 2302} + , { 1,302, 2.58622, 10.1079, 2303} + , { 1,303, 2.53837, 9.6277, 2304} + , { 1,304, 2.49269, 9.1906, 2305} + , { 1,305, 2.44902, 8.7911, 2306} + , { 1,306, 2.40720, 8.4248, 2307} + , { 1,307, 2.36708, 8.0875, 2308} + , { 1,308, 4.09206, 34.4787, 2309} + , { 1,309, 3.91508, 28.3157, 2310} + , { 1,310, 3.75764, 23.9078, 2311} + , { 1,311, 3.61782, 20.6344, 2312} + , { 1,312, 3.49298, 18.1225, 2313} + , { 1,313, 3.38067, 16.1412, 2314} + , { 1,314, 3.27886, 14.5419, 2315} + , { 1,315, 3.18593, 13.2258, 2316} + , { 1,316, 3.10053, 12.1249, 2317} + , { 1,317, 3.02160, 11.1910, 2318} + , { 1,318, 2.94829, 10.3892, 2319} + , { 1,319, 2.87987, 9.6936, 2320} + , { 1,320, 2.81577, 9.0846, 2321} + , { 1,321, 2.75549, 8.5470, 2322} + , { 1,322, 2.69861, 8.0691, 2323} + , { 1,323, 2.64480, 7.6415, 2324} + , { 1,324, 2.59374, 7.2568, 2325} + , { 1,325, 2.54518, 6.9087, 2326} + , { 1,326, 2.49889, 6.5923, 2327} + , { 1,327, 2.45469, 6.3036, 2328} + , { 1,328, 2.41240, 6.0390, 2329} + , { 1,329, 2.37187, 5.7956, 2330} + , { 1,330, 4.20677, 22.3937, 2331} + , { 1,331, 3.99276, 17.9149, 2332} + , { 1,332, 3.81311, 14.8947, 2333} + , { 1,333, 3.65917, 12.7314, 2334} + , { 1,334, 3.52488, 11.1099, 2335} + , { 1,335, 3.40597, 9.8511, 2336} + , { 1,336, 3.29940, 8.8465, 2337} + , { 1,337, 3.20291, 8.0266, 2338} + , { 1,338, 3.11479, 7.3450, 2339} + , { 1,339, 3.03375, 6.7696, 2340} + , { 1,340, 2.95875, 6.2775, 2341} + , { 1,341, 2.88897, 5.8519, 2342} + , { 1,342, 2.82375, 5.4801, 2343} + , { 1,343, 2.76255, 5.1527, 2344} + , { 1,344, 2.70490, 4.8620, 2345} + , { 1,345, 2.65043, 4.6024, 2346} + , { 1,346, 2.59881, 4.3690, 2347} + , { 1,347, 2.54977, 4.1581, 2348} + , { 1,348, 2.50307, 3.9666, 2349} + , { 1,349, 2.45851, 3.7919, 2350} + , { 1,350, 2.41590, 3.6320, 2351} + , { 1,351, 2.37509, 3.4850, 2352} + , { 1,352, 4.27581, 7.8205, 2353} + , { 1,353, 4.03666, 6.1504, 2354} + , { 1,354, 3.84335, 5.0666, 2355} + , { 1,355, 3.68121, 4.3069, 2356} + , { 1,356, 3.54163, 3.7451, 2357} + , { 1,357, 3.41913, 3.3127, 2358} + , { 1,358, 3.31000, 2.9698, 2359} + , { 1,359, 3.21162, 2.6912, 2360} + , { 1,360, 3.12208, 2.4603, 2361} + , { 1,361, 3.03993, 2.2659, 2362} + , { 1,362, 2.96406, 2.1000, 2363} + , { 1,363, 2.89359, 1.9567, 2364} + , { 1,364, 2.82780, 1.8317, 2365} + , { 1,365, 2.76612, 1.7217, 2366} + , { 1,366, 2.70808, 1.6241, 2367} + , { 1,367, 2.65327, 1.5371, 2368} + , { 1,368, 2.60137, 1.4588, 2369} + , { 1,369, 2.55209, 1.3882, 2370} + , { 1,370, 2.50518, 1.3241, 2371} + , { 1,371, 2.46043, 1.2656, 2372} + , { 1,372, 2.41766, 1.2121, 2373} + , { 1,373, 2.37670, 1.1629, 2374} + , { 1,374, 4.27581, -7.8205, 2375} + , { 1,375, 4.03666, -6.1504, 2376} + , { 1,376, 3.84335, -5.0666, 2377} + , { 1,377, 3.68121, -4.3069, 2378} + , { 1,378, 3.54163, -3.7451, 2379} + , { 1,379, 3.41913, -3.3127, 2380} + , { 1,380, 3.31000, -2.9698, 2381} + , { 1,381, 3.21162, -2.6912, 2382} + , { 1,382, 3.12208, -2.4603, 2383} + , { 1,383, 3.03993, -2.2659, 2384} + , { 1,384, 2.96406, -2.1000, 2385} + , { 1,385, 2.89359, -1.9567, 2386} + , { 1,386, 2.82780, -1.8317, 2387} + , { 1,387, 2.76612, -1.7217, 2388} + , { 1,388, 2.70808, -1.6241, 2389} + , { 1,389, 2.65327, -1.5371, 2390} + , { 1,390, 2.60137, -1.4588, 2391} + , { 1,391, 2.55209, -1.3882, 2392} + , { 1,392, 2.50518, -1.3241, 2393} + , { 1,393, 2.46043, -1.2656, 2394} + , { 1,394, 2.41766, -1.2121, 2395} + , { 1,395, 2.37670, -1.1629, 2396} + , { 1,396, 4.20677,-22.3937, 2397} + , { 1,397, 3.99276,-17.9149, 2398} + , { 1,398, 3.81311,-14.8947, 2399} + , { 1,399, 3.65917,-12.7314, 2400} + , { 1,400, 3.52488,-11.1099, 2401} + , { 1,401, 3.40597, -9.8511, 2402} + , { 1,402, 3.29940, -8.8465, 2403} + , { 1,403, 3.20291, -8.0266, 2404} + , { 1,404, 3.11479, -7.3450, 2405} + , { 1,405, 3.03375, -6.7696, 2406} + , { 1,406, 2.95875, -6.2775, 2407} + , { 1,407, 2.88897, -5.8519, 2408} + , { 1,408, 2.82375, -5.4801, 2409} + , { 1,409, 2.76255, -5.1527, 2410} + , { 1,410, 2.70490, -4.8620, 2411} + , { 1,411, 2.65043, -4.6024, 2412} + , { 1,412, 2.59881, -4.3690, 2413} + , { 1,413, 2.54977, -4.1581, 2414} + , { 1,414, 2.50307, -3.9666, 2415} + , { 1,415, 2.45851, -3.7919, 2416} + , { 1,416, 2.41590, -3.6320, 2417} + , { 1,417, 2.37509, -3.4850, 2418} + , { 1,418, 4.09206,-34.4787, 2419} + , { 1,419, 3.91508,-28.3157, 2420} + , { 1,420, 3.75764,-23.9078, 2421} + , { 1,421, 3.61782,-20.6344, 2422} + , { 1,422, 3.49298,-18.1225, 2423} + , { 1,423, 3.38067,-16.1412, 2424} + , { 1,424, 3.27886,-14.5419, 2425} + , { 1,425, 3.18593,-13.2258, 2426} + , { 1,426, 3.10053,-12.1249, 2427} + , { 1,427, 3.02160,-11.1910, 2428} + , { 1,428, 2.94829,-10.3892, 2429} + , { 1,429, 2.87987, -9.6936, 2430} + , { 1,430, 2.81577, -9.0846, 2431} + , { 1,431, 2.75549, -8.5470, 2432} + , { 1,432, 2.69861, -8.0691, 2433} + , { 1,433, 2.64480, -7.6415, 2434} + , { 1,434, 2.59374, -7.2568, 2435} + , { 1,435, 2.54518, -6.9087, 2436} + , { 1,436, 2.49889, -6.5923, 2437} + , { 1,437, 2.45469, -6.3036, 2438} + , { 1,438, 2.41240, -6.0390, 2439} + , { 1,439, 2.37187, -5.7956, 2440} + , { 1,440, 3.95803,-43.8734, 2441} + , { 1,441, 3.81739,-37.0279, 2442} + , { 1,442, 3.68452,-31.8246, 2443} + , { 1,443, 3.56159,-27.7975, 2444} + , { 1,444, 3.44865,-24.6172, 2445} + , { 1,445, 3.34497,-22.0568, 2446} + , { 1,446, 3.24957,-19.9589, 2447} + , { 1,447, 3.16150,-18.2129, 2448} + , { 1,448, 3.07987,-16.7398, 2449} + , { 1,449, 3.00393,-15.4816, 2450} + , { 1,450, 2.93300,-14.3957, 2451} + , { 1,451, 2.86653,-13.4495, 2452} + , { 1,452, 2.80403,-12.6181, 2453} + , { 1,453, 2.74508,-11.8821, 2454} + , { 1,454, 2.68933,-11.2262, 2455} + , { 1,455, 2.63646,-10.6381, 2456} + , { 1,456, 2.58622,-10.1079, 2457} + , { 1,457, 2.53837, -9.6277, 2458} + , { 1,458, 2.49269, -9.1906, 2459} + , { 1,459, 2.44902, -8.7911, 2460} + , { 1,460, 2.40720, -8.4248, 2461} + , { 1,461, 2.36708, -8.0875, 2462} + , { 1,462, 3.82172,-51.0278, 2463} + , { 1,463, 3.71123,-44.1227, 2464} + , { 1,464, 3.60120,-38.5879, 2465} + , { 1,465, 3.49530,-34.1297, 2466} + , { 1,466, 3.39509,-30.5029, 2467} + , { 1,467, 3.30103,-27.5171, 2468} + , { 1,468, 3.21302,-25.0287, 2469} + , { 1,469, 3.13069,-22.9304, 2470} + , { 1,470, 3.05361,-21.1417, 2471} + , { 1,471, 2.98130,-19.6017, 2472} + , { 1,472, 2.91333,-18.2635, 2473} + , { 1,473, 2.84929,-17.0913, 2474} + , { 1,474, 2.78880,-16.0567, 2475} + , { 1,475, 2.73154,-15.1375, 2476} + , { 1,476, 2.67722,-14.3157, 2477} + , { 1,477, 2.62557,-13.5769, 2478} + , { 1,478, 2.57638,-12.9095, 2479} + , { 1,479, 2.52943,-12.3036, 2480} + , { 1,480, 2.48455,-11.7513, 2481} + , { 1,481, 2.44157,-11.2458, 2482} + , { 1,482, 2.40035,-10.7815, 2483} + , { 1,483, 2.36077,-10.3536, 2484} + , { 1,484, 3.69127,-56.4997, 2485} + , { 1,485, 3.60408,-49.8480, 2486} + , { 1,486, 3.51349,-44.2825, 2487} + , { 1,487, 3.42320,-39.6394, 2488} + , { 1,488, 3.33536,-35.7549, 2489} + , { 1,489, 3.25107,-32.4854, 2490} + , { 1,490, 3.17081,-29.7124, 2491} + , { 1,491, 3.09469,-27.3413, 2492} + , { 1,492, 3.02262,-25.2973, 2493} + , { 1,493, 2.95440,-23.5213, 2494} + , { 1,494, 2.88979,-21.9666, 2495} + , { 1,495, 2.82854,-20.5963, 2496} + , { 1,496, 2.77040,-19.3807, 2497} + , { 1,497, 2.71512,-18.2959, 2498} + , { 1,498, 2.66249,-17.3225, 2499} + , { 1,499, 2.61229,-16.4448, 2500} + , { 1,500, 2.56434,-15.6496, 2501} + , { 1,501, 2.51848,-14.9261, 2502} + , { 1,502, 2.47455,-14.2652, 2503} + , { 1,503, 2.43241,-13.6593, 2504} + , { 1,504, 2.39193,-13.1019, 2505} + , { 1,505, 2.35300,-12.5875, 2506} + , { 1,506, 3.56964,-60.7484, 2507} + , { 1,507, 3.50003,-54.4792, 2508} + , { 1,508, 3.42526,-49.0546, 2509} + , { 1,509, 3.34854,-44.3937, 2510} + , { 1,510, 3.27202,-40.3959, 2511} + , { 1,511, 3.19707,-36.9606, 2512} + , { 1,512, 3.12448,-33.9972, 2513} + , { 1,513, 3.05468,-31.4275, 2514} + , { 1,514, 2.98782,-29.1866, 2515} + , { 1,515, 2.92394,-27.2209, 2516} + , { 1,516, 2.86295,-25.4864, 2517} + , { 1,517, 2.80475,-23.9474, 2518} + , { 1,518, 2.74919,-22.5744, 2519} + , { 1,519, 2.69612,-21.3433, 2520} + , { 1,520, 2.64537,-20.2342, 2521} + , { 1,521, 2.59681,-19.2304, 2522} + , { 1,522, 2.55029,-18.3183, 2523} + , { 1,523, 2.50566,-17.4862, 2524} + , { 1,524, 2.46282,-16.7244, 2525} + , { 1,525, 2.42163,-16.0244, 2526} + , { 1,526, 2.38201,-15.3794, 2527} + , { 1,527, 2.34384,-14.7831, 2528} + , { 1,528, 3.45737,-64.1086, 2529} + , { 1,529, 3.40100,-58.2565, 2530} + , { 1,530, 3.33888,-53.0593, 2531} + , { 1,531, 3.27359,-48.4845, 2532} + , { 1,532, 3.20707,-44.4755, 2533} + , { 1,533, 3.14069,-40.9659, 2534} + , { 1,534, 3.07539,-37.8899, 2535} + , { 1,535, 3.01175,-35.1866, 2536} + , { 1,536, 2.95010,-32.8021, 2537} + , { 1,537, 2.89062,-30.6903, 2538} + , { 1,538, 2.83338,-28.8117, 2539} + , { 1,539, 2.77838,-27.1331, 2540} + , { 1,540, 2.72555,-25.6268, 2541} + , { 1,541, 2.67484,-24.2692, 2542} + , { 1,542, 2.62614,-23.0407, 2543} + , { 1,543, 2.57935,-21.9247, 2544} + , { 1,544, 2.53438,-20.9072, 2545} + , { 1,545, 2.49112,-19.9763, 2546} + , { 1,546, 2.44948,-19.1217, 2547} + , { 1,547, 2.40936,-18.3348, 2548} + , { 1,548, 2.37068,-17.6082, 2549} + , { 1,549, 2.33336,-16.9353, 2550} + , { 1,550, 3.35401,-66.8153, 2551} + , { 1,551, 3.30770,-61.3709, 2552} + , { 1,552, 3.25563,-56.4369, 2553} + , { 1,553, 3.19983,-52.0079, 2554} + , { 1,554, 3.14195,-48.0553, 2555} + , { 1,555, 3.08325,-44.5382, 2556} + , { 1,556, 3.02467,-41.4108, 2557} + , { 1,557, 2.96685,-38.6277, 2558} + , { 1,558, 2.91024,-36.1460, 2559} + , { 1,559, 2.85511,-33.9273, 2560} + , { 1,560, 2.80162,-31.9376, 2561} + , { 1,561, 2.74986,-30.1473, 2562} + , { 1,562, 2.69986,-28.5309, 2563} + , { 1,563, 2.65160,-27.0664, 2564} + , { 1,564, 2.60504,-25.7351, 2565} + , { 1,565, 2.56013,-24.5208, 2566} + , { 1,566, 2.51681,-23.4098, 2567} + , { 1,567, 2.47502,-22.3901, 2568} + , { 1,568, 2.43467,-21.4515, 2569} + , { 1,569, 2.39571,-20.5851, 2570} + , { 1,570, 2.35806,-19.7833, 2571} + , { 1,571, 2.32166,-19.0393, 2572} + , { 1,572, 3.25874,-69.0331, 2573} + , { 1,573, 3.22016,-63.9683, 2574} + , { 1,574, 3.17611,-59.3053, 2575} + , { 1,575, 3.12815,-55.0523, 2576} + , { 1,576, 3.07764,-51.1985, 2577} + , { 1,577, 3.02570,-47.7205, 2578} + , { 1,578, 2.97319,-44.5878, 2579} + , { 1,579, 2.92078,-41.7677, 2580} + , { 1,580, 2.86893,-39.2274, 2581} + , { 1,581, 2.81799,-36.9359, 2582} + , { 1,582, 2.76818,-34.8646, 2583} + , { 1,583, 2.71965,-32.9880, 2584} + , { 1,584, 2.67248,-31.2834, 2585} + , { 1,585, 2.62670,-29.7308, 2586} + , { 1,586, 2.58234,-28.3127, 2587} + , { 1,587, 2.53938,-27.0140, 2588} + , { 1,588, 2.49778,-25.8212, 2589} + , { 1,589, 2.45752,-24.7230, 2590} + , { 1,590, 2.41854,-23.7092, 2591} + , { 1,591, 2.38080,-22.7709, 2592} + , { 1,592, 2.34424,-21.9006, 2593} + , { 1,593, 2.30883,-21.0914, 2594} + , { 1,594, 3.17069,-70.8782, 2595} + , { 1,595, 3.13815,-66.1593, 2596} + , { 1,596, 3.10053,-61.7599, 2597} + , { 1,597, 3.05904,-57.6952, 2598} + , { 1,598, 3.01479,-53.9647, 2599} + , { 1,599, 2.96874,-50.5566, 2600} + , { 1,600, 2.92165,-47.4520, 2601} + , { 1,601, 2.87417,-44.6280, 2602} + , { 1,602, 2.82676,-42.0603, 2603} + , { 1,603, 2.77978,-39.7245, 2604} + , { 1,604, 2.73351,-37.5973, 2605} + , { 1,605, 2.68812,-35.6571, 2606} + , { 1,606, 2.64374,-33.8842, 2607} + , { 1,607, 2.60045,-32.2609, 2608} + , { 1,608, 2.55830,-30.7712, 2609} + , { 1,609, 2.51731,-29.4012, 2610} + , { 1,610, 2.47747,-28.1383, 2611} + , { 1,611, 2.43878,-26.9716, 2612} + , { 1,612, 2.40122,-25.8913, 2613} + , { 1,613, 2.36475,-24.8889, 2614} + , { 1,614, 2.32934,-23.9568, 2615} + , { 1,615, 2.29497,-23.0883, 2616} + , { 1,616, 3.08904,-72.4344, 2617} + , { 1,617, 3.06127,-68.0272, 2618} + , { 1,618, 3.02884,-63.8771, 2619} + , { 1,619, 2.99272,-60.0018, 2620} + , { 1,620, 2.95378,-56.4069, 2621} + , { 1,621, 2.91283,-53.0882, 2622} + , { 1,622, 2.87055,-50.0350, 2623} + , { 1,623, 2.82752,-47.2319, 2624} + , { 1,624, 2.78418,-44.6613, 2625} + , { 1,625, 2.74092,-42.3046, 2626} + , { 1,626, 2.69800,-40.1431, 2627} + , { 1,627, 2.65563,-38.1591, 2628} + , { 1,628, 2.61396,-36.3357, 2629} + , { 1,629, 2.57312,-34.6574, 2630} + , { 1,630, 2.53316,-33.1103, 2631} + , { 1,631, 2.49413,-31.6814, 2632} + , { 1,632, 2.45607,-30.3594, 2633} + , { 1,633, 2.41898,-29.1339, 2634} + , { 1,634, 2.38286,-27.9958, 2635} + , { 1,635, 2.34769,-26.9367, 2636} + , { 1,636, 2.31347,-25.9495, 2637} + , { 1,637, 2.28016,-25.0276, 2638} + , { 1,638, 3.01304,-73.7627, 2639} + , { 1,639, 2.98909,-69.6352, 2640} + , { 1,640, 2.96092,-65.7170, 2641} + , { 1,641, 2.92926,-62.0262, 2642} + , { 1,642, 2.89482,-58.5714, 2643} + , { 1,643, 2.85829,-55.3536, 2644} + , { 1,644, 2.82025,-52.3673, 2645} + , { 1,645, 2.78120,-49.6029, 2646} + , { 1,646, 2.74159,-47.0483, 2647} + , { 1,647, 2.70176,-44.6893, 2648} + , { 1,648, 2.66198,-42.5115, 2649} + , { 1,649, 2.62248,-40.5004, 2650} + , { 1,650, 2.58342,-38.6420, 2651} + , { 1,651, 2.54494,-36.9231, 2652} + , { 1,652, 2.50713,-35.3312, 2653} + , { 1,653, 2.47005,-33.8550, 2654} + , { 1,654, 2.43375,-32.4841, 2655} + , { 1,655, 2.39826,-31.2090, 2656} + , { 1,656, 2.36359,-30.0211, 2657} + , { 1,657, 2.32975,-28.9128, 2658} + , { 1,658, 2.29672,-27.8770, 2659} + , { 1,659, 2.26452,-26.9075, 2660} + , { 1,660, 2.94206,-74.9086, 2661} + , { 1,661, 2.92122,-71.0321, 2662} + , { 1,662, 2.89654,-67.3277, 2663} + , { 1,663, 2.86861,-63.8129, 2664} + , { 1,664, 2.83801,-60.4979, 2665} + , { 1,665, 2.80530,-57.3864, 2666} + , { 1,666, 2.77098,-54.4769, 2667} + , { 1,667, 2.73551,-51.7639, 2668} + , { 1,668, 2.69926,-49.2392, 2669} + , { 1,669, 2.66258,-46.8927, 2670} + , { 1,670, 2.62573,-44.7131, 2671} + , { 1,671, 2.58893,-42.6891, 2672} + , { 1,672, 2.55236,-40.8090, 2673} + , { 1,673, 2.51615,-39.0616, 2674} + , { 1,674, 2.48042,-37.4364, 2675} + , { 1,675, 2.44524,-35.9233, 2676} + , { 1,676, 2.41068,-34.5129, 2677} + , { 1,677, 2.37677,-33.1968, 2678} + , { 1,678, 2.34355,-31.9670, 2679} + , { 1,679, 2.31103,-30.8164, 2680} + , { 1,680, 2.27922,-29.7383, 2681} + , { 1,681, 2.24812,-28.7269, 2682} + , { 1,682, 2.87553,-75.9064, 2683} + , { 1,683, 2.85724,-72.2555, 2684} + , { 1,684, 2.83547,-68.7474, 2685} + , { 1,685, 2.81069,-65.3986, 2686} + , { 1,686, 2.78337,-62.2198, 2687} + , { 1,687, 2.75397,-59.2163, 2688} + , { 1,688, 2.72292,-56.3893, 2689} + , { 1,689, 2.69062,-53.7362, 2690} + , { 1,690, 2.65742,-51.2517, 2691} + , { 1,691, 2.62362,-48.9288, 2692} + , { 1,692, 2.58948,-46.7592, 2693} + , { 1,693, 2.55520,-44.7337, 2694} + , { 1,694, 2.52097,-42.8431, 2695} + , { 1,695, 2.48694,-41.0781, 2696} + , { 1,696, 2.45320,-39.4296, 2697} + , { 1,697, 2.41987,-37.8888, 2698} + , { 1,698, 2.38700,-36.4476, 2699} + , { 1,699, 2.35465,-35.0984, 2700} + , { 1,700, 2.32286,-33.8338, 2701} + , { 1,701, 2.29166,-32.6474, 2702} + , { 1,702, 2.26106,-31.5330, 2703} + , { 1,703, 2.23108,-30.4850, 2704} + , { 1,704, 2.81298,-76.7828, 2705} + , { 1,705, 2.79681,-73.3348, 2706} + , { 1,706, 2.77748,-70.0066, 2707} + , { 1,707, 2.75536,-66.8133, 2708} + , { 1,708, 2.73085,-63.7654, 2709} + , { 1,709, 2.70433,-60.8691, 2710} + , { 1,710, 2.67616,-58.1272, 2711} + , { 1,711, 2.64669,-55.5393, 2712} + , { 1,712, 2.61623,-53.1023, 2713} + , { 1,713, 2.58506,-50.8115, 2714} + , { 1,714, 2.55341,-48.6609, 2715} + , { 1,715, 2.52148,-46.6434, 2716} + , { 1,716, 2.48945,-44.7517, 2717} + , { 1,717, 2.45747,-42.9780, 2718} + , { 1,718, 2.42565,-41.3149, 2719} + , { 1,719, 2.39408,-39.7548, 2720} + , { 1,720, 2.36286,-38.2905, 2721} + , { 1,721, 2.33203,-36.9152, 2722} + , { 1,722, 2.30164,-35.6225, 2723} + , { 1,723, 2.27174,-34.4064, 2724} + , { 1,724, 2.24234,-33.2613, 2725} + , { 1,725, 2.21346,-32.1819, 2726} + , { 1,726, 2.75399,-77.5581, 2727} + , { 1,727, 2.73960,-74.2935, 2728} + , { 1,728, 2.72233,-71.1302, 2729} + , { 1,729, 2.70249,-68.0818, 2730} + , { 1,730, 2.68040,-65.1585, 2731} + , { 1,731, 2.65638,-62.3669, 2732} + , { 1,732, 2.63075,-59.7107, 2733} + , { 1,733, 2.60380,-57.1909, 2734} + , { 1,734, 2.57581,-54.8063, 2735} + , { 1,735, 2.54702,-52.5538, 2736} + , { 1,736, 2.51766,-50.4291, 2737} + , { 1,737, 2.48791,-48.4272, 2738} + , { 1,738, 2.45794,-46.5420, 2739} + , { 1,739, 2.42789,-44.7674, 2740} + , { 1,740, 2.39788,-43.0972, 2741} + , { 1,741, 2.36801,-41.5248, 2742} + , { 1,742, 2.33837,-40.0442, 2743} + , { 1,743, 2.30901,-38.6494, 2744} + , { 1,744, 2.27999,-37.3346, 2745} + , { 1,745, 2.25136,-36.0944, 2746} + , { 1,746, 2.22314,-34.9238, 2747} + , { 1,747, 2.19537,-33.8178, 2748} +}; +std::vector hcal = { + { 0, 0, 2.80245,104.5083, 1001} + , { 0, 1, 2.77251,110.0008, 1002} + , { 0, 2, 2.73516,115.1361, 1003} + , { 0, 3, 2.69208,119.8738, 1004} + , { 0, 4, 2.64486,124.2013, 1005} + , { 0, 5, 2.59492,128.1265, 1006} + , { 0, 6, 2.54340,131.6711, 1007} + , { 0, 7, 2.49122,134.8644, 1008} + , { 0, 8, 2.43907,137.7391, 1009} + , { 0, 9, 2.38747,140.3281, 1010} + , { 0, 10, 2.33676,142.6628, 1011} + , { 0, 11, 2.28720,144.7723, 1012} + , { 0, 12, 2.23894,146.6827, 1013} + , { 0, 13, 2.90524,106.1307, 1014} + , { 0, 14, 2.86868,112.1369, 1015} + , { 0, 15, 2.82371,117.6726, 1016} + , { 0, 16, 2.77263,122.7003, 1017} + , { 0, 17, 2.71752,127.2199, 1018} + , { 0, 18, 2.66010,131.2567, 1019} + , { 0, 19, 2.60170,134.8499, 1020} + , { 0, 20, 2.54332,138.0450, 1021} + , { 0, 21, 2.48566,140.8878, 1022} + , { 0, 22, 2.42917,143.4215, 1023} + , { 0, 23, 2.37418,145.6855, 1024} + , { 0, 24, 2.32085,147.7147, 1025} + , { 0, 25, 2.26929,149.5394, 1026} + , { 0, 26, 3.01893,108.1480, 1027} + , { 0, 27, 2.97344,114.7521, 1028} + , { 0, 28, 2.91849,120.7240, 1029} + , { 0, 29, 2.85731,126.0394, 1030} + , { 0, 30, 2.79257,130.7241, 1031} + , { 0, 31, 2.72634,134.8316, 1032} + , { 0, 32, 2.66009,138.4274, 1033} + , { 0, 33, 2.59483,141.5779, 1034} + , { 0, 34, 2.53118,144.3450, 1035} + , { 0, 35, 2.46952,146.7840, 1036} + , { 0, 36, 2.41006,148.9425, 1037} + , { 0, 37, 2.35288,150.8611, 1038} + , { 0, 38, 2.29798,152.5739, 1039} + , { 0, 39, 3.14567,110.7168, 1040} + , { 0, 40, 3.08777,118.0121, 1041} + , { 0, 41, 3.01958,124.4406, 1042} + , { 0, 42, 2.94558,130.0146, 1043} + , { 0, 43, 2.86916,134.8077, 1044} + , { 0, 44, 2.79267,138.9189, 1045} + , { 0, 45, 2.71760,142.4497, 1046} + , { 0, 46, 2.64483,145.4932, 1047} + , { 0, 47, 2.57482,148.1295, 1048} + , { 0, 48, 2.50780,150.4261, 1049} + , { 0, 49, 2.44380,152.4386, 1050} + , { 0, 50, 2.38276,154.2124, 1051} + , { 0, 51, 2.32458,155.7847, 1052} + , { 0, 52, 3.28804,114.0832, 1053} + , { 0, 53, 3.21242,122.1577, 1054} + , { 0, 54, 3.12645,129.0227, 1055} + , { 0, 55, 3.03624,134.7749, 1056} + , { 0, 56, 2.94584,139.5739, 1057} + , { 0, 57, 2.85763,143.5854, 1058} + , { 0, 58, 2.77288,146.9577, 1059} + , { 0, 59, 2.69216,149.8137, 1060} + , { 0, 60, 2.61561,152.2520, 1061} + , { 0, 61, 2.54319,154.3510, 1062} + , { 0, 62, 2.47471,156.1722, 1063} + , { 0, 63, 2.40994,157.7642, 1064} + , { 0, 64, 2.34861,159.1658, 1065} + , { 0, 65, 3.44882,118.6476, 1066} + , { 0, 66, 3.34724,127.5393, 1067} + , { 0, 67, 3.23734,134.7276, 1068} + , { 0, 68, 3.12697,140.4898, 1069} + , { 0, 69, 3.02030,145.1246, 1070} + , { 0, 70, 2.91918,148.8875, 1071} + , { 0, 71, 2.82423,151.9784, 1072} + , { 0, 72, 2.73541,154.5487, 1073} + , { 0, 73, 2.65241,156.7115, 1074} + , { 0, 74, 2.57478,158.5517, 1075} + , { 0, 75, 2.50206,160.1334, 1076} + , { 0, 76, 2.43381,161.5054, 1077} + , { 0, 77, 2.36959,162.7057, 1078} + , { 0, 78, 3.62990,125.0834, 1079} + , { 0, 79, 3.48970,134.6531, 1080} + , { 0, 80, 3.34824,141.8607, 1081} + , { 0, 81, 3.21379,147.3246, 1082} + , { 0, 82, 3.08914,151.5384, 1083} + , { 0, 83, 2.97461,154.8538, 1084} + , { 0, 84, 2.86954,157.5140, 1085} + , { 0, 85, 2.77299,159.6870, 1086} + , { 0, 86, 2.68398,161.4906, 1087} + , { 0, 87, 2.60161,163.0087, 1088} + , { 0, 88, 2.52511,164.3025, 1089} + , { 0, 89, 2.45378,165.4173, 1090} + , { 0, 90, 2.38706,166.3869, 1091} + , { 0, 91, 3.82841,134.5185, 1092} + , { 0, 92, 3.63189,144.1335, 1093} + , { 0, 93, 3.45140,150.7135, 1094} + , { 0, 94, 3.29058,155.3860, 1095} + , { 0, 95, 3.14787,158.8333, 1096} + , { 0, 96, 3.02068,161.4638, 1097} + , { 0, 97, 2.90648,163.5290, 1098} + , { 0, 98, 2.80318,165.1896, 1099} + , { 0, 99, 2.70906,166.5516, 1100} + , { 0,100, 2.62275,167.6877, 1101} + , { 0,101, 2.54314,168.6492, 1102} + , { 0,102, 2.46933,169.4729, 1103} + , { 0,103, 2.40058,170.1863, 1104} + , { 0,104, 4.02506,148.6097, 1105} + , { 0,105, 3.75578,156.5492, 1106} + , { 0,106, 3.53436,161.4010, 1107} + , { 0,107, 3.34926,164.6302, 1108} + , { 0,108, 3.19129,166.9208, 1109} + , { 0,109, 3.05396,168.6251, 1110} + , { 0,110, 2.93274,169.9405, 1111} + , { 0,111, 2.82438,170.9855, 1112} + , { 0,112, 2.72652,171.8351, 1113} + , { 0,113, 2.63736,172.5392, 1114} + , { 0,114, 2.55554,173.1321, 1115} + , { 0,115, 2.47997,173.6380, 1116} + , { 0,116, 2.40981,174.0747, 1117} + , { 0,117, 4.16296,168.5034, 1118} + , { 0,118, 3.83156,171.7722, 1119} + , { 0,119, 3.58167,173.5997, 1120} + , { 0,120, 3.38143,174.7648, 1121} + , { 0,121, 3.21450,175.5718, 1122} + , { 0,122, 3.07147,176.1635, 1123} + , { 0,123, 2.94641,176.6159, 1124} + , { 0,124, 2.83534,176.9729, 1125} + , { 0,125, 2.73549,177.2619, 1126} + , { 0,126, 2.64483,177.5005, 1127} + , { 0,127, 2.56186,177.7009, 1128} + , { 0,128, 2.48538,177.8715, 1129} + , { 0,129, 2.41450,178.0186, 1130} + , { 0,130, 4.16296,-168.5034, 1131} + , { 0,131, 3.83156,-171.7722, 1132} + , { 0,132, 3.58167,-173.5997, 1133} + , { 0,133, 3.38143,-174.7648, 1134} + , { 0,134, 3.21450,-175.5718, 1135} + , { 0,135, 3.07147,-176.1635, 1136} + , { 0,136, 2.94641,-176.6159, 1137} + , { 0,137, 2.83534,-176.9729, 1138} + , { 0,138, 2.73549,-177.2619, 1139} + , { 0,139, 2.64483,-177.5005, 1140} + , { 0,140, 2.56186,-177.7009, 1141} + , { 0,141, 2.48538,-177.8715, 1142} + , { 0,142, 2.41450,-178.0186, 1143} + , { 0,143, 4.02506,-148.6097, 1144} + , { 0,144, 3.75578,-156.5492, 1145} + , { 0,145, 3.53436,-161.4010, 1146} + , { 0,146, 3.34926,-164.6302, 1147} + , { 0,147, 3.19129,-166.9208, 1148} + , { 0,148, 3.05396,-168.6251, 1149} + , { 0,149, 2.93274,-169.9405, 1150} + , { 0,150, 2.82438,-170.9855, 1151} + , { 0,151, 2.72652,-171.8351, 1152} + , { 0,152, 2.63736,-172.5392, 1153} + , { 0,153, 2.55554,-173.1321, 1154} + , { 0,154, 2.47997,-173.6380, 1155} + , { 0,155, 2.40981,-174.0747, 1156} + , { 0,156, 3.82841,-134.5185, 1157} + , { 0,157, 3.63189,-144.1335, 1158} + , { 0,158, 3.45140,-150.7135, 1159} + , { 0,159, 3.29058,-155.3860, 1160} + , { 0,160, 3.14787,-158.8333, 1161} + , { 0,161, 3.02068,-161.4638, 1162} + , { 0,162, 2.90648,-163.5290, 1163} + , { 0,163, 2.80318,-165.1896, 1164} + , { 0,164, 2.70906,-166.5516, 1165} + , { 0,165, 2.62275,-167.6877, 1166} + , { 0,166, 2.54314,-168.6492, 1167} + , { 0,167, 2.46933,-169.4729, 1168} + , { 0,168, 2.40058,-170.1863, 1169} + , { 0,169, 3.62990,-125.0834, 1170} + , { 0,170, 3.48970,-134.6531, 1171} + , { 0,171, 3.34824,-141.8607, 1172} + , { 0,172, 3.21379,-147.3246, 1173} + , { 0,173, 3.08914,-151.5384, 1174} + , { 0,174, 2.97461,-154.8538, 1175} + , { 0,175, 2.86954,-157.5140, 1176} + , { 0,176, 2.77299,-159.6870, 1177} + , { 0,177, 2.68398,-161.4906, 1178} + , { 0,178, 2.60161,-163.0087, 1179} + , { 0,179, 2.52511,-164.3025, 1180} + , { 0,180, 2.45378,-165.4173, 1181} + , { 0,181, 2.38706,-166.3869, 1182} + , { 0,182, 3.44882,-118.6476, 1183} + , { 0,183, 3.34724,-127.5393, 1184} + , { 0,184, 3.23734,-134.7276, 1185} + , { 0,185, 3.12697,-140.4898, 1186} + , { 0,186, 3.02030,-145.1246, 1187} + , { 0,187, 2.91918,-148.8875, 1188} + , { 0,188, 2.82423,-151.9784, 1189} + , { 0,189, 2.73541,-154.5487, 1190} + , { 0,190, 2.65241,-156.7115, 1191} + , { 0,191, 2.57478,-158.5517, 1192} + , { 0,192, 2.50206,-160.1334, 1193} + , { 0,193, 2.43381,-161.5054, 1194} + , { 0,194, 2.36959,-162.7057, 1195} + , { 0,195, 3.28804,-114.0832, 1196} + , { 0,196, 3.21242,-122.1577, 1197} + , { 0,197, 3.12645,-129.0227, 1198} + , { 0,198, 3.03624,-134.7749, 1199} + , { 0,199, 2.94584,-139.5738, 1200} + , { 0,200, 2.85763,-143.5854, 1201} + , { 0,201, 2.77288,-146.9577, 1202} + , { 0,202, 2.69216,-149.8137, 1203} + , { 0,203, 2.61561,-152.2520, 1204} + , { 0,204, 2.54319,-154.3510, 1205} + , { 0,205, 2.47471,-156.1721, 1206} + , { 0,206, 2.40994,-157.7642, 1207} + , { 0,207, 2.34861,-159.1658, 1208} + , { 0,208, 3.14567,-110.7168, 1209} + , { 0,209, 3.08777,-118.0121, 1210} + , { 0,210, 3.01958,-124.4406, 1211} + , { 0,211, 2.94558,-130.0146, 1212} + , { 0,212, 2.86916,-134.8077, 1213} + , { 0,213, 2.79267,-138.9189, 1214} + , { 0,214, 2.71760,-142.4497, 1215} + , { 0,215, 2.64483,-145.4932, 1216} + , { 0,216, 2.57482,-148.1295, 1217} + , { 0,217, 2.50780,-150.4261, 1218} + , { 0,218, 2.44380,-152.4386, 1219} + , { 0,219, 2.38276,-154.2124, 1220} + , { 0,220, 2.32458,-155.7847, 1221} + , { 0,221, 3.01893,-108.1480, 1222} + , { 0,222, 2.97344,-114.7521, 1223} + , { 0,223, 2.91849,-120.7240, 1224} + , { 0,224, 2.85731,-126.0394, 1225} + , { 0,225, 2.79257,-130.7241, 1226} + , { 0,226, 2.72634,-134.8316, 1227} + , { 0,227, 2.66009,-138.4274, 1228} + , { 0,228, 2.59483,-141.5779, 1229} + , { 0,229, 2.53118,-144.3450, 1230} + , { 0,230, 2.46952,-146.7840, 1231} + , { 0,231, 2.41006,-148.9425, 1232} + , { 0,232, 2.35288,-150.8611, 1233} + , { 0,233, 2.29798,-152.5739, 1234} + , { 0,234, 2.90524,-106.1307, 1235} + , { 0,235, 2.86868,-112.1369, 1236} + , { 0,236, 2.82371,-117.6726, 1237} + , { 0,237, 2.77263,-122.7003, 1238} + , { 0,238, 2.71752,-127.2199, 1239} + , { 0,239, 2.66010,-131.2567, 1240} + , { 0,240, 2.60170,-134.8499, 1241} + , { 0,241, 2.54332,-138.0450, 1242} + , { 0,242, 2.48566,-140.8878, 1243} + , { 0,243, 2.42917,-143.4215, 1244} + , { 0,244, 2.37418,-145.6855, 1245} + , { 0,245, 2.32085,-147.7147, 1246} + , { 0,246, 2.26929,-149.5394, 1247} + , { 0,247, 2.80245,-104.5083, 1248} + , { 0,248, 2.77251,-110.0008, 1249} + , { 0,249, 2.73516,-115.1361, 1250} + , { 0,250, 2.69208,-119.8738, 1251} + , { 0,251, 2.64486,-124.2013, 1252} + , { 0,252, 2.59492,-128.1265, 1253} + , { 0,253, 2.54340,-131.6711, 1254} + , { 0,254, 2.49122,-134.8644, 1255} + , { 0,255, 2.43907,-137.7391, 1256} + , { 0,256, 2.38747,-140.3281, 1257} + , { 0,257, 2.33676,-142.6628, 1258} + , { 0,258, 2.28720,-144.7723, 1259} + , { 0,259, 2.23894,-146.6827, 1260} + , { 1, 0, 2.80245, 75.4917, 2001} + , { 1, 1, 2.77251, 69.9992, 2002} + , { 1, 2, 2.73516, 64.8639, 2003} + , { 1, 3, 2.69208, 60.1262, 2004} + , { 1, 4, 2.64486, 55.7987, 2005} + , { 1, 5, 2.59492, 51.8735, 2006} + , { 1, 6, 2.54340, 48.3289, 2007} + , { 1, 7, 2.49122, 45.1356, 2008} + , { 1, 8, 2.43907, 42.2609, 2009} + , { 1, 9, 2.38747, 39.6719, 2010} + , { 1, 10, 2.33676, 37.3372, 2011} + , { 1, 11, 2.28720, 35.2277, 2012} + , { 1, 12, 2.23894, 33.3173, 2013} + , { 1, 13, 2.90524, 73.8693, 2014} + , { 1, 14, 2.86868, 67.8631, 2015} + , { 1, 15, 2.82371, 62.3274, 2016} + , { 1, 16, 2.77263, 57.2997, 2017} + , { 1, 17, 2.71752, 52.7801, 2018} + , { 1, 18, 2.66010, 48.7433, 2019} + , { 1, 19, 2.60170, 45.1501, 2020} + , { 1, 20, 2.54332, 41.9550, 2021} + , { 1, 21, 2.48566, 39.1122, 2022} + , { 1, 22, 2.42917, 36.5785, 2023} + , { 1, 23, 2.37418, 34.3145, 2024} + , { 1, 24, 2.32085, 32.2853, 2025} + , { 1, 25, 2.26929, 30.4606, 2026} + , { 1, 26, 3.01893, 71.8520, 2027} + , { 1, 27, 2.97344, 65.2479, 2028} + , { 1, 28, 2.91849, 59.2760, 2029} + , { 1, 29, 2.85731, 53.9606, 2030} + , { 1, 30, 2.79257, 49.2759, 2031} + , { 1, 31, 2.72634, 45.1684, 2032} + , { 1, 32, 2.66009, 41.5726, 2033} + , { 1, 33, 2.59483, 38.4221, 2034} + , { 1, 34, 2.53118, 35.6550, 2035} + , { 1, 35, 2.46952, 33.2160, 2036} + , { 1, 36, 2.41006, 31.0575, 2037} + , { 1, 37, 2.35288, 29.1389, 2038} + , { 1, 38, 2.29798, 27.4261, 2039} + , { 1, 39, 3.14567, 69.2832, 2040} + , { 1, 40, 3.08777, 61.9879, 2041} + , { 1, 41, 3.01958, 55.5594, 2042} + , { 1, 42, 2.94558, 49.9854, 2043} + , { 1, 43, 2.86916, 45.1923, 2044} + , { 1, 44, 2.79267, 41.0811, 2045} + , { 1, 45, 2.71760, 37.5503, 2046} + , { 1, 46, 2.64483, 34.5068, 2047} + , { 1, 47, 2.57482, 31.8705, 2048} + , { 1, 48, 2.50780, 29.5739, 2049} + , { 1, 49, 2.44380, 27.5614, 2050} + , { 1, 50, 2.38276, 25.7876, 2051} + , { 1, 51, 2.32458, 24.2153, 2052} + , { 1, 52, 3.28804, 65.9168, 2053} + , { 1, 53, 3.21242, 57.8423, 2054} + , { 1, 54, 3.12645, 50.9773, 2055} + , { 1, 55, 3.03624, 45.2251, 2056} + , { 1, 56, 2.94584, 40.4261, 2057} + , { 1, 57, 2.85763, 36.4146, 2058} + , { 1, 58, 2.77288, 33.0423, 2059} + , { 1, 59, 2.69216, 30.1863, 2060} + , { 1, 60, 2.61561, 27.7480, 2061} + , { 1, 61, 2.54319, 25.6490, 2062} + , { 1, 62, 2.47471, 23.8278, 2063} + , { 1, 63, 2.40994, 22.2358, 2064} + , { 1, 64, 2.34861, 20.8342, 2065} + , { 1, 65, 3.44882, 61.3524, 2066} + , { 1, 66, 3.34724, 52.4607, 2067} + , { 1, 67, 3.23734, 45.2724, 2068} + , { 1, 68, 3.12697, 39.5102, 2069} + , { 1, 69, 3.02030, 34.8754, 2070} + , { 1, 70, 2.91918, 31.1125, 2071} + , { 1, 71, 2.82423, 28.0216, 2072} + , { 1, 72, 2.73541, 25.4513, 2073} + , { 1, 73, 2.65241, 23.2885, 2074} + , { 1, 74, 2.57478, 21.4483, 2075} + , { 1, 75, 2.50206, 19.8666, 2076} + , { 1, 76, 2.43381, 18.4946, 2077} + , { 1, 77, 2.36959, 17.2943, 2078} + , { 1, 78, 3.62990, 54.9166, 2079} + , { 1, 79, 3.48970, 45.3469, 2080} + , { 1, 80, 3.34824, 38.1393, 2081} + , { 1, 81, 3.21379, 32.6754, 2082} + , { 1, 82, 3.08914, 28.4616, 2083} + , { 1, 83, 2.97461, 25.1462, 2084} + , { 1, 84, 2.86954, 22.4860, 2085} + , { 1, 85, 2.77299, 20.3130, 2086} + , { 1, 86, 2.68398, 18.5094, 2087} + , { 1, 87, 2.60161, 16.9913, 2088} + , { 1, 88, 2.52511, 15.6975, 2089} + , { 1, 89, 2.45378, 14.5827, 2090} + , { 1, 90, 2.38706, 13.6131, 2091} + , { 1, 91, 3.82841, 45.4815, 2092} + , { 1, 92, 3.63189, 35.8665, 2093} + , { 1, 93, 3.45140, 29.2865, 2094} + , { 1, 94, 3.29058, 24.6140, 2095} + , { 1, 95, 3.14787, 21.1667, 2096} + , { 1, 96, 3.02068, 18.5362, 2097} + , { 1, 97, 2.90648, 16.4710, 2098} + , { 1, 98, 2.80318, 14.8104, 2099} + , { 1, 99, 2.70906, 13.4484, 2100} + , { 1,100, 2.62275, 12.3123, 2101} + , { 1,101, 2.54314, 11.3508, 2102} + , { 1,102, 2.46933, 10.5271, 2103} + , { 1,103, 2.40058, 9.8137, 2104} + , { 1,104, 4.02506, 31.3903, 2105} + , { 1,105, 3.75578, 23.4508, 2106} + , { 1,106, 3.53436, 18.5990, 2107} + , { 1,107, 3.34926, 15.3698, 2108} + , { 1,108, 3.19129, 13.0792, 2109} + , { 1,109, 3.05396, 11.3749, 2110} + , { 1,110, 2.93274, 10.0595, 2111} + , { 1,111, 2.82438, 9.0145, 2112} + , { 1,112, 2.72652, 8.1649, 2113} + , { 1,113, 2.63736, 7.4608, 2114} + , { 1,114, 2.55554, 6.8679, 2115} + , { 1,115, 2.47997, 6.3620, 2116} + , { 1,116, 2.40981, 5.9253, 2117} + , { 1,117, 4.16296, 11.4966, 2118} + , { 1,118, 3.83156, 8.2278, 2119} + , { 1,119, 3.58167, 6.4003, 2120} + , { 1,120, 3.38143, 5.2352, 2121} + , { 1,121, 3.21450, 4.4282, 2122} + , { 1,122, 3.07147, 3.8365, 2123} + , { 1,123, 2.94641, 3.3841, 2124} + , { 1,124, 2.83534, 3.0271, 2125} + , { 1,125, 2.73549, 2.7381, 2126} + , { 1,126, 2.64483, 2.4995, 2127} + , { 1,127, 2.56186, 2.2991, 2128} + , { 1,128, 2.48538, 2.1285, 2129} + , { 1,129, 2.41450, 1.9814, 2130} + , { 1,130, 4.16296,-11.4966, 2131} + , { 1,131, 3.83156, -8.2278, 2132} + , { 1,132, 3.58167, -6.4003, 2133} + , { 1,133, 3.38143, -5.2352, 2134} + , { 1,134, 3.21450, -4.4282, 2135} + , { 1,135, 3.07147, -3.8365, 2136} + , { 1,136, 2.94641, -3.3841, 2137} + , { 1,137, 2.83534, -3.0271, 2138} + , { 1,138, 2.73549, -2.7381, 2139} + , { 1,139, 2.64483, -2.4995, 2140} + , { 1,140, 2.56186, -2.2991, 2141} + , { 1,141, 2.48538, -2.1285, 2142} + , { 1,142, 2.41450, -1.9814, 2143} + , { 1,143, 4.02506,-31.3903, 2144} + , { 1,144, 3.75578,-23.4508, 2145} + , { 1,145, 3.53436,-18.5990, 2146} + , { 1,146, 3.34926,-15.3698, 2147} + , { 1,147, 3.19129,-13.0792, 2148} + , { 1,148, 3.05396,-11.3749, 2149} + , { 1,149, 2.93274,-10.0595, 2150} + , { 1,150, 2.82438, -9.0145, 2151} + , { 1,151, 2.72652, -8.1649, 2152} + , { 1,152, 2.63736, -7.4608, 2153} + , { 1,153, 2.55554, -6.8679, 2154} + , { 1,154, 2.47997, -6.3620, 2155} + , { 1,155, 2.40981, -5.9253, 2156} + , { 1,156, 3.82841,-45.4815, 2157} + , { 1,157, 3.63189,-35.8665, 2158} + , { 1,158, 3.45140,-29.2865, 2159} + , { 1,159, 3.29058,-24.6140, 2160} + , { 1,160, 3.14787,-21.1667, 2161} + , { 1,161, 3.02068,-18.5362, 2162} + , { 1,162, 2.90648,-16.4710, 2163} + , { 1,163, 2.80318,-14.8104, 2164} + , { 1,164, 2.70906,-13.4484, 2165} + , { 1,165, 2.62275,-12.3123, 2166} + , { 1,166, 2.54314,-11.3508, 2167} + , { 1,167, 2.46933,-10.5271, 2168} + , { 1,168, 2.40058, -9.8137, 2169} + , { 1,169, 3.62990,-54.9166, 2170} + , { 1,170, 3.48970,-45.3469, 2171} + , { 1,171, 3.34824,-38.1393, 2172} + , { 1,172, 3.21379,-32.6754, 2173} + , { 1,173, 3.08914,-28.4616, 2174} + , { 1,174, 2.97461,-25.1462, 2175} + , { 1,175, 2.86954,-22.4860, 2176} + , { 1,176, 2.77299,-20.3130, 2177} + , { 1,177, 2.68398,-18.5094, 2178} + , { 1,178, 2.60161,-16.9913, 2179} + , { 1,179, 2.52511,-15.6975, 2180} + , { 1,180, 2.45378,-14.5827, 2181} + , { 1,181, 2.38706,-13.6131, 2182} + , { 1,182, 3.44882,-61.3524, 2183} + , { 1,183, 3.34724,-52.4607, 2184} + , { 1,184, 3.23734,-45.2724, 2185} + , { 1,185, 3.12697,-39.5102, 2186} + , { 1,186, 3.02030,-34.8754, 2187} + , { 1,187, 2.91918,-31.1125, 2188} + , { 1,188, 2.82423,-28.0216, 2189} + , { 1,189, 2.73541,-25.4513, 2190} + , { 1,190, 2.65241,-23.2885, 2191} + , { 1,191, 2.57478,-21.4483, 2192} + , { 1,192, 2.50206,-19.8666, 2193} + , { 1,193, 2.43381,-18.4946, 2194} + , { 1,194, 2.36959,-17.2943, 2195} + , { 1,195, 3.28804,-65.9168, 2196} + , { 1,196, 3.21242,-57.8423, 2197} + , { 1,197, 3.12645,-50.9773, 2198} + , { 1,198, 3.03624,-45.2251, 2199} + , { 1,199, 2.94584,-40.4262, 2200} + , { 1,200, 2.85763,-36.4146, 2201} + , { 1,201, 2.77288,-33.0423, 2202} + , { 1,202, 2.69216,-30.1863, 2203} + , { 1,203, 2.61561,-27.7480, 2204} + , { 1,204, 2.54319,-25.6490, 2205} + , { 1,205, 2.47471,-23.8279, 2206} + , { 1,206, 2.40994,-22.2358, 2207} + , { 1,207, 2.34861,-20.8342, 2208} + , { 1,208, 3.14567,-69.2832, 2209} + , { 1,209, 3.08777,-61.9879, 2210} + , { 1,210, 3.01958,-55.5594, 2211} + , { 1,211, 2.94558,-49.9854, 2212} + , { 1,212, 2.86916,-45.1923, 2213} + , { 1,213, 2.79267,-41.0811, 2214} + , { 1,214, 2.71760,-37.5503, 2215} + , { 1,215, 2.64483,-34.5068, 2216} + , { 1,216, 2.57482,-31.8705, 2217} + , { 1,217, 2.50780,-29.5739, 2218} + , { 1,218, 2.44380,-27.5614, 2219} + , { 1,219, 2.38276,-25.7876, 2220} + , { 1,220, 2.32458,-24.2153, 2221} + , { 1,221, 3.01893,-71.8520, 2222} + , { 1,222, 2.97344,-65.2479, 2223} + , { 1,223, 2.91849,-59.2760, 2224} + , { 1,224, 2.85731,-53.9606, 2225} + , { 1,225, 2.79257,-49.2759, 2226} + , { 1,226, 2.72634,-45.1684, 2227} + , { 1,227, 2.66009,-41.5726, 2228} + , { 1,228, 2.59483,-38.4221, 2229} + , { 1,229, 2.53118,-35.6550, 2230} + , { 1,230, 2.46952,-33.2160, 2231} + , { 1,231, 2.41006,-31.0575, 2232} + , { 1,232, 2.35288,-29.1389, 2233} + , { 1,233, 2.29798,-27.4261, 2234} + , { 1,234, 2.90524,-73.8693, 2235} + , { 1,235, 2.86868,-67.8631, 2236} + , { 1,236, 2.82371,-62.3274, 2237} + , { 1,237, 2.77263,-57.2997, 2238} + , { 1,238, 2.71752,-52.7801, 2239} + , { 1,239, 2.66010,-48.7433, 2240} + , { 1,240, 2.60170,-45.1501, 2241} + , { 1,241, 2.54332,-41.9550, 2242} + , { 1,242, 2.48566,-39.1122, 2243} + , { 1,243, 2.42917,-36.5785, 2244} + , { 1,244, 2.37418,-34.3145, 2245} + , { 1,245, 2.32085,-32.2853, 2246} + , { 1,246, 2.26929,-30.4606, 2247} + , { 1,247, 2.80245,-75.4917, 2248} + , { 1,248, 2.77251,-69.9992, 2249} + , { 1,249, 2.73516,-64.8639, 2250} + , { 1,250, 2.69208,-60.1262, 2251} + , { 1,251, 2.64486,-55.7987, 2252} + , { 1,252, 2.59492,-51.8735, 2253} + , { 1,253, 2.54340,-48.3289, 2254} + , { 1,254, 2.49122,-45.1356, 2255} + , { 1,255, 2.43907,-42.2609, 2256} + , { 1,256, 2.38747,-39.6719, 2257} + , { 1,257, 2.33676,-37.3372, 2258} + , { 1,258, 2.28720,-35.2277, 2259} + , { 1,259, 2.23894,-33.3173, 2260} +}; +#endif diff --git a/StRoot/StGeant4Maker/tests/unit_test_fcs_sampling.C b/StRoot/StGeant4Maker/tests/unit_test_fcs_sampling.C new file mode 100644 index 00000000000..3be9d828440 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_fcs_sampling.C @@ -0,0 +1,150 @@ +#include "tests/unit_tests.h" +//#include "StFcsDbMaker/StFcsDbMaker.h" + +#include +#include +#include + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; + +struct Cell { + int northSouth; + int cellId; + double eta; + double phi; + double x,y,z; + int volumeId; // expected Volume ID +}; + + +void unit_test_fcs_sampling( const int nevents=1000 ) { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.0,0.0,0.0); + pm->SetSigma (0.0,0.0,0.0); + + LOG_TEST << "========================================================" << std::endl; + LOG_TEST << "Test 3.85 GeV protons, neutrons" << std::endl; + LOG_TEST << "Test 7.7 GeV deuteron" << std::endl; + LOG_TEST << "Test 15.4 GeV alpha" << std::endl; + LOG_TEST << "========================================================" << std::endl; + + TFile* file = TFile::Open("output.root","recreate"); + int nbin=80; + double mn=0.; + double mx=20.0; + + auto* chain = StMaker::GetChain(); + + auto sumHits = [=](const char* name, double sf=1.0 ) -> double { + assert(sf>0); + double sum = 0.; + auto* table = dynamic_cast( chain->GetDataSet( name ) ) ; + if (table) + for ( int i=0;iGetNRows();i++ ){ + const g2t_emc_hit_st* hit = static_cast( table->At(i) ); + sum+=hit->de / sf; + }; + return sum; + }; + + auto throw_particle = [=]( std::string type, const double E=3.85, double etaMn=2.75, double etaMx=3.75 ) { + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + auto* _part = _kine->AddParticle(type.c_str()); + auto _mass = _part->GetMass(); // Get the mass of the proton + if ( E > _mass ) { + auto _pmom = TMath::Sqrt(E*E-_mass*_mass); + auto _eta = gRandom->Rndm() * ( etaMx - etaMn ) + etaMn; // random angle + auto _phi = gRandom->Rndm() * TMath::TwoPi(); + TVector3 unit(0,0,1); + unit.SetPtEtaPhi(1.0,_eta,_phi); + unit=unit.Unit(); + auto momentum=_pmom*unit; + momentum.Print(); + _part->SetPx( momentum[0] ); + _part->SetPy( momentum[1] ); + _part->SetPz( momentum[2] ); + _part->SetVx( 0 ); + _part->SetVy( 0 ); + _part->SetVz( 0 ); + chain->Clear(); + chain->Make(); + } + else { + LOG_INFO << "ERROR: mass > E (no particle simulated)" << endm; + } + }; + + struct Job { + std::string particle; + double energy; + TH1F* hWCAL; + TH1F* hHCAL; + TH1F* hESUM; + }; + + TH1F* hWCAL[5]; + TH1F* hHCAL[5]; + TH1F* hESUM[5]; + + std::vector jobs = { + { "electron",3.85, 0, 0, 0 }, + { "proton", 3.85, 0, 0, 0 }, + { "neutron", 3.85, 0, 0, 0 }, + { "D", 7.70, 0, 0, 0 }, + { "alpha", 15.4, 0, 0, 0 } + }; + + int count = 0; + for ( auto job : jobs ) { + std::string name; + std::string title; + + name = Form("hWCAL%s",job.particle.c_str()); + title = Form("WCAL response to %5f GeV %s; E [GeV]",job.energy,job.particle.c_str()); + hWCAL[count] = new TH1F(name.c_str(),title.c_str(),500,0.,25.); + + name = Form("hHCAL%s",job.particle.c_str()); + title = Form("HCAL response to %5f GeV %s; E [GeV]",job.energy,job.particle.c_str()); + hHCAL[count] = new TH1F(name.c_str(),title.c_str(),500,0.,25.); + + name = Form("hESUM%s",job.particle.c_str()); + title = Form("FCS summed response to %5f GeV %s; E [GeV]",job.energy,job.particle.c_str()); + hESUM[count] = new TH1F(name.c_str(),title.c_str(),500,0.,25.); + + count++; + } + + + for ( int event=0;eventInfo() << "//==========================================================================" << endm; + gMessMgr->Info() << "Throwing event number " << event << " of " << nevents << endm; + + count = 0; + for ( auto& job : jobs ) { + throw_particle( job.particle, job.energy ); + double wcal = sumHits( "g2t_wca_hit", 0.2 ); + double hcal = sumHits( "g2t_hca_hit", 0.0145 ); + double sum = wcal + hcal; + LOG_INFO << "Particle = " << job.particle << endm; + LOG_INFO << "E (wcal) = " << wcal << endm; + LOG_INFO << "E (hcal) = " << hcal << endm; + LOG_INFO << "E (totl) = " << sum << endm; + hWCAL[count]->Fill(wcal); + hHCAL[count]->Fill(hcal); + hESUM[count]->Fill(sum); + count++; + } + + } + + file->Write(); + delete file; + +} + diff --git a/StRoot/StGeant4Maker/tests/unit_test_fst_hits.C b/StRoot/StGeant4Maker/tests/unit_test_fst_hits.C new file mode 100644 index 00000000000..d03fe6d49fb --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_fst_hits.C @@ -0,0 +1,181 @@ +#include "tests/unit_tests.h" +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ +//void throw_muon_in_fst_wedge( int wedgeid, int inout, int charge = 1 ) { +void throw_muon_in_fst_wedge( double eta, double phid ) { + + // TODO... + //double eta = 2.8; + _eta=eta; + //double phid = 15.0; + _phid=phid; + + throw_muon( eta, phid, 5.0, 1 ); // energetic + + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ) ; + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ) ; + hit_table = dynamic_cast( chain->GetDataSet("g2t_fsi_hit") ) ; + +} +//___________________________________________________________________ +void unit_test_fst_hits() { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and forward silicon hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + double etas[] = { 2.55, 3.00, 3.50, 3.95 }; + double phis[] = { 15.0, 45.0, 75.0, 105.0, 135.0, 165.0, 195.0, 225.0, 255.0, 285.0, 315.0, 345.0 }; + + for ( auto e : etas ) { + for ( auto p : phis ) { + + throw_muon_in_fst_wedge( e, p+1.9 ); + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + // Failure is tested by check_track when it tests for a valid track pointer + return PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the FSI", [=](const g2t_track_st* t){ + std::string result = TODO; + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( Form("The track should have an eta=%f",_eta), [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + return TMath::Abs(t->eta-_eta)<1E-5 ?PASS:FAIL; + }); + check_track( "Expect 3 hits in the dev2021 geometry", [=](const g2t_track_st* t){ + int n = t->n_fts_hit; + std::string result = FAIL; + if ( n==3 ) + result = PASS; + else if ( n==4 ) + result = UNKN; + result = Form(" n=%i ",n) + result; + return result; + }); + + for ( int i=0;iGetNRows();i++ ) { + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + if ( 1!=hit->track_p ) continue; // not interested in secondaries + + check_stg_hit( "The hit should have a nonzero volume_id",hit,[=](const g2t_fts_hit_st* h) { + std::string result = FAIL; + if ( h->volume_id > 0 ) result = PASS; + return result; + }); + check_stg_hit( "The hit should have an energy deposit > 0",hit,[=](const g2t_fts_hit_st* h) { + std::string result = FAIL; + if ( h->de > 0 ) result = PASS; + return result; + }); + check_stg_hit( "The hit should have a path length > 0",hit,[=](const g2t_fts_hit_st* h) { + std::string result = FAIL; + if ( h->ds > 0 ) result = PASS; + return result; + }); + check_stg_hit( "The hit should have a nonzero momentum",hit,[=](const g2t_fts_hit_st* h) { + std::string result = FAIL; + if ( h->p[0] != 0 ) result = PASS; + if ( h->p[1] != 0 ) result = PASS; + if ( h->p[2] != 0 ) result = PASS; + return result; + }); + check_stg_hit( "Track's momentum at hit should be < initial value",hit, [=](const g2t_fts_hit_st* h){ + std::string result = FAIL; + double px = h->p[0]; + double py = h->p[1]; + double pz = h->p[2]; + double p2 = px*px + py*py + pz*pz; + if ( p2 < _pmom*_pmom ) result = PASS; + return result; + }); + check_stg_hit( "Hit position should be w/in the fiducial volume of the station",hit,[=](const g2t_fts_hit_st* h){ + // TODO + return TODO; + }); + check_stg_hit( "The hit position and tof*c agree to w/in 0.15 mm ", hit,[=](const g2t_fts_hit_st* h) { + // There should be some tolerance on this, b/c of roundoff error at each tracking step + std::string result = FAIL; + double c_tof = 2.99792458E10 /* cm/s */ * h->tof; + double s_trk = + sqrt( h->x[0]*h->x[0] + + h->x[1]*h->x[1] + + h->x[2]*h->x[2] ); + double diff = TMath::Abs(c_tof-s_trk); + if ( diff < 0.015 ) result = PASS; + result = Form("c_tof=%f cm strack=%f cm diff=%f cm ",c_tof,s_trk,diff) + result; + return result; + }); + check_stg_hit( "The station should decode as ...",hit,[=](const g2t_fts_hit_st* h) { + std::string result=TODO; + int station = h->volume_id / 10; + if ( station>=1 && station<=4 ) result=PASS; + result = Form(" volume_id=%i ",h->volume_id) + result; + return result; + }); + + } + + } + } + +} diff --git a/StRoot/StGeant4Maker/tests/unit_test_fst_timing.C b/StRoot/StGeant4Maker/tests/unit_test_fst_timing.C new file mode 100644 index 00000000000..9928cb4614c --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_fst_timing.C @@ -0,0 +1,173 @@ +#include "tests/unit_tests.h" +#include + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set +>>; +#endif + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ +void throw_muon_in_fst() { + + + throw_particle( 1, "mu+,mu-", 0.2, 5.0, 2.5, 4.0, 0.0, TMath::TwoPi() ); + + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ) ; + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ) ; + hit_table = dynamic_cast( chain->GetDataSet("g2t_fsi_hit") ) ; + + const g2t_track_st* track = static_cast( track_table->At(0) ); + _eta = track->eta; + + _phid = TMath::ATan2( track->p[1], track->p[0] ) * 180.0 / TMath::Pi(); + while ( _phid < 0 ) _phid+=360; + + +} +//___________________________________________________________________ +void unit_test_fst_timing( int longtest=10000 ) { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + Accumulator_t time; // Time per thrown muon + Accumulator_t time_phi[181]; // time in 2 degree phi slices + + for ( int event=0;eventstart_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the FSI", [=](const g2t_track_st* t){ + std::string result = TODO; + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( Form("The track should have an eta=%f",_eta), [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + return TMath::Abs(t->eta-_eta)<1E-5 ?PASS:FAIL; + }); + check_track( "Expect 3 hits in the dev2021 geometry", [=](const g2t_track_st* t){ + int n = t->n_fts_hit; + std::string result = FAIL; + if ( n==3 ) + result = PASS; + else if ( n==4 ) + result = UNKN; + result = Form(" n=%i ",n) + result; + return result; + }); + + } + + auto printTime = [=]( const std::string& message, const Accumulator_t& time ) { + + int _count = boost::accumulators::count(time); + double _mean = boost::accumulators::mean(time); + double _median = boost::accumulators::median(time); + double _min = boost::accumulators::min(time); + double _max = boost::accumulators::max(time); + double _error_of_mean = boost::accumulators::error_of(time); + + LOG_TEST << message.c_str() << std::endl; + LOG_TEST << Form( "count = %i", _count ) << std::endl; + LOG_TEST << Form( "time / muon: mean = %f s", _mean ) << std::endl; + LOG_TEST << Form( "time / muon: median = %f s", _median ) << std::endl; + LOG_TEST << Form( "time / muon: min = %f s", _min ) << std::endl; + LOG_TEST << Form( "time / muon: max = %f s", _max ) << std::endl; + if ( _count > 2 ) + LOG_TEST << Form( "time / muon: error of mean = %f s", _error_of_mean ) << std::endl; + + + }; + + printTime( "TOTAL /////////////////////////////////", time ); + int index=0; + for ( auto t : time_phi ) { + + printTime( Form("PHI=%i /////////////////////////////////",2*index), time_phi[index] ); + index++; + + } + +} diff --git a/StRoot/StGeant4Maker/tests/unit_test_kinematics.C b/StRoot/StGeant4Maker/tests/unit_test_kinematics.C new file mode 100644 index 00000000000..1bf8274055f --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_kinematics.C @@ -0,0 +1,183 @@ +#include "tests/unit_tests.h" + +#include + +template +std::string check_kine( std::string message, Add addfunc, Test testfunc ) { + std::string af = addfunc(); + std::string tf = testfunc(); + std::string result = "\u001b[37m [" + message + "] " + "(" + af +") " + tf; + gMessMgr->Info() << result << endm; + return result; +}; + +void unit_test_kinematics() { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of paticle gun" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + auto* chain = StMaker::GetChain(); + + auto no_op = [=]() -> std::string { return "-same-"; } ; + auto add_deuteron = [=]() { + std::string result = "Deuteron"; + const double ptmn = 0.099999; + const double ptmx = 10.100001; + const double etamn= -1.; + const double etamx= +4.; + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + pm->Clear(); + _kine->SetAttr("rapidity",1); + _kine->Kine(1,"D",ptmn,ptmx,etamn,etamx); + pm->Make(); + pm->event()->Print(); + return result; + }; + + check_kine( "After adding a deuteron to the generator, a single particle appears in the event", add_deuteron, [=](){ + std::string result = FAIL; + int np = _kine->GetNumberOfParticles(); + if ( 1 == np ) { + result = PASS; + } + result = Form(" /number of particles = %i/ ", np) + result; + return result; + }); + check_kine( "The particle should be accessible in the event structure at element 1", no_op, [=](){ + auto& event = *pm->event(); + auto part = event[1]; + if ( part ) + return PASS; + else + return FAIL; + }); + check_kine( "The particle should have PDG id id=1000010020", no_op, [=](){ + auto& event = *pm->event(); + auto part = event[1]; + std::string result = FAIL; + if ( 1000010020 == part->GetId() ) + result = PASS; + + result = Form("/id = %i/ ",part->GetId()) + result; + return result; + }); + check_kine( "The particle should have mass > 0", no_op, [=](){ + std::string result = FAIL; + auto& event = *pm->event(); + auto part = event[1]; + auto mass = part->GetMass(); + if ( mass > 0 ) result = PASS; + result = Form("/mass = %f GeV/ ",mass) + result; + return result; + }); + check_kine( "The dot product of the particl's 4-momentum w/ itself is (mc^2)^2", no_op, [=](){ + std::string result = FAIL; + auto& event = *pm->event(); + auto part = event[1]; + auto mass = part->GetMass(); + auto momentum = part->momentum(); + auto inner = momentum.Dot(momentum); + //momentum.Print(); + bool good = TMath::Abs( sqrt(inner) - mass ) < 0.005*mass; + if ( good ) + result = PASS; + result = Form("/sqrt(p4 dot p4) = %f expect %f/", sqrt(inner), mass) + result; + return result; + }); + + + auto add_helium3 = [=]() { + std::string result = "He3"; + const double ptmn = 0.099999; + const double ptmx = 10.100001; + const double etamn= -1.; + const double etamx= +4.; + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + pm->Clear(); + _kine->SetAttr("rapidity",1); + _kine->Kine(1,"He3",ptmn,ptmx,etamn,etamx); + pm->Make(); + pm->event()->Print(); + return result; + }; + +#if 0 + auto add_alpha = [=]() { + std::string result = "alpha"; + const double ptmn = 0.099999; + const double ptmx = 10.100001; + const double etamn= -1.; + const double etamx= +4.; + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + pm->Clear(); + _kine->SetAttr("rapidity",1); + _kine->Kine(1,"He4",ptmn,ptmx,etamn,etamx); + pm->Make(); + pm->event()->Print(); + return result; + }; +#endif + + check_kine( "After adding He3 to the generator, a single particle appears in the event", add_helium3, [=](){ + std::string result = FAIL; + int np = _kine->GetNumberOfParticles(); + if ( 1 == np ) { + result = PASS; + } + result = Form(" /number of particles = %i/ ", np) + result; + return result; + }); + check_kine( "The particle should be accessible in the event structure at element 1", no_op, [=](){ + auto& event = *pm->event(); + auto part = event[1]; + if ( part ) + return PASS; + else + return FAIL; + }); + check_kine( "The particle should have PDG id id=1000020020", no_op, [=](){ + auto& event = *pm->event(); + auto part = event[1]; + std::string result = FAIL; + if ( 1000020020 == part->GetId() ) + result = PASS; + + result = Form("/id = %i/ ",part->GetId()) + result; + return result; + }); + check_kine( "The particle should have mass > 0", no_op, [=](){ + std::string result = FAIL; + auto& event = *pm->event(); + auto part = event[1]; + auto mass = part->GetMass(); + if ( mass > 0 ) result = PASS; + result = Form("/mass = %f GeV/ ",mass) + result; + return result; + }); + check_kine( "The dot product of the particl's 4-momentum w/ itself is (mc^2)^2", no_op, [=](){ + std::string result = FAIL; + auto& event = *pm->event(); + auto part = event[1]; + auto mass = part->GetMass(); + auto momentum = part->momentum(); + auto inner = momentum.Dot(momentum); + //momentum.Print(); + bool good = TMath::Abs( sqrt(inner) - mass ) < 0.005*mass; + if ( good ) + result = PASS; + result = Form("/sqrt(p4 dot p4) = %f expect %f/", sqrt(inner), mass) + result; + return result; + }); + + + + +} +//___________________________________________________________________ diff --git a/StRoot/StGeant4Maker/tests/unit_test_mtd_hits.C b/StRoot/StGeant4Maker/tests/unit_test_mtd_hits.C new file mode 100644 index 00000000000..582e9ccc43f --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_mtd_hits.C @@ -0,0 +1,1748 @@ +#include "tests/unit_tests.h" +#include + +struct Cell { + int icell; + int bl; // backleg + int mod; // module + float phi; + float eta; +}; +std::vector cells; +void init_cells(); + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set +>>; +#endif + +#include + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//______________________________________________________________________ +void unit_test_mtd_hits( int longtest=0, double _pt=25.0 ) { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and TPC hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + Accumulator_t edep; // Energy deposition + Accumulator_t step; // Step size + Accumulator_t time; // Time per throw + + init_cells(); + + for ( auto cell : cells ) { + + throw_muon( _eta = cell.eta, cell.phi * 180.0 / TMath::Pi(), _pt ); + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_mtd_hit") ); + + + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + assert(t); + std::string result = PASS; + return PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the TPC", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* v = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( 0==v ) + result = PASS; + else { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 208.0 || xx2 > 208.0 ) + result = PASS; + result = Form(" r=%f ",TMath::Max(xx1,xx2)) + result; + } + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( Form("The track should have an eta=%f",_eta), [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + return TMath::Abs(t->eta-_eta)<1E-5 ?PASS:FAIL; + }); + check_track( "Expect 6 hits in the MTD (dev2021 geometry)", [=](const g2t_track_st* t){ + int n = t->n_mtd_hit; + std::string result = FAIL; + if ( n==5 ) result = PASS; + result = Form(" n=%i ",n) + result; + return result; + }); + + if ( 0==hit_table ) continue; + + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + if ( 1!=hit->track_p ) continue; // not interested in secondaries + + LOG_TEST << "------------------------------------------------------------------" << std::endl; + LOG_TEST << GIVEN << "A hit on that track" << std::endl; + + edep( TMath::Abs(hit->de) * 1E6 ); // GeV MeV keV + step( hit->ds ); + + check_mtd_hit( "The hit should have a nonzero volume_id", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + if ( h->volume_id > 0 ) result = PASS; + result = Form("id=%i vid=%i de=%f ds=%f ",h->id,h->volume_id,h->de,h->ds) + result; + return result; + }); + check_mtd_hit( "The hit should have an energy deposit > 0", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; // undetermined + if ( h->de > 0 ) result = PASS; + return result; + }); + check_mtd_hit( "The hit should have a step size > 0", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + if ( h->ds > 0 ) result = PASS; + return result; + }); + check_mtd_hit( "The hit should have a path length > 0", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + if ( h->s_track > 0 ) result = PASS; + return result; + }); + check_mtd_hit( "The hit should have time-of-flight > 0", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + if ( h->tof > 0 ) result = PASS; + result = Form(" tof=%f ",h->tof) + result; + return result; + }); + check_mtd_hit( "The hit should have a nonzero momentum", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + if ( h->p[0] != 0 ) result = PASS; + if ( h->p[1] != 0 ) result = PASS; + if ( h->p[2] != 0 ) result = PASS; + return result; + }); + check_mtd_hit( "The hit should have a length > 0", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + if ( h->s_track > 0 ) result = PASS; + return result; + }); + + check_mtd_hit( "The hit should be at a radius > 364.25", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + double R2 = h->xglobal[0]*h->xglobal[0] + h->xglobal[1]*h->xglobal[1]; + if ( R2 > 364.25*364.25 ) result = PASS; + result = Form(" R=%f ",sqrt(R2)) + result; + return result; + }); + check_mtd_hit( "The hit should be at a radius < 430.0", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + double R2 = h->xglobal[0]*h->xglobal[0] + h->xglobal[1]*h->xglobal[1]; + if ( R2 < 430.0*430.0 ) result = PASS; + result = Form(" R=%f ",sqrt(R2)) + result; + return result; + }); + + check_mtd_hit( "Track's momentum at hit should be < initial value", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + double px = h->p[0]; + double py = h->p[1]; + double pz = h->p[2]; + double p2 = px*px + py*py + pz*pz; + if ( p2 < _pmom*_pmom ) result = PASS; + return result; + }); + + + if ( Conditional ( + check_mtd_hit("Conditional: Is the track's momentum at hit > 50% of its initial value", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + double px = h->p[0]; + double py = h->p[1]; + double pz = h->p[2]; + double p2 = px*px + py*py + pz*pz; + if ( p2 > 0.25* _pmom*_pmom ) result = YES; + return result; + }) + ) + ) { + + check_mtd_hit( "The track length and tof*c agree to w/in 0.15 mm ", hit,[=](const g2t_mtd_hit_st* h) { + // There should be some tolerance on this, b/c of roundoff error at each tracking step + std::string result = FAIL; + double c_tof = 2.99792458E10 /* cm/s */ * h->tof; + double s_trk = h->s_track; + double diff = TMath::Abs(c_tof-s_trk); + if ( diff < 0.015 ) result = PASS; + result = Form("c_tof=%f cm strack=%f cm diff=%f cm ",c_tof,s_trk,diff) + result; + return result; + }); + check_mtd_hit( "The track length at the hit should be >= radius at the hit",hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + double R2 = h->xglobal[0]*h->xglobal[0] + h->xglobal[1]*h->xglobal[1]; + double L2 = h->s_track * h->s_track; + if ( R2 <= L2 ) result = PASS; + result = Form(" R=%f L=%f",sqrt(R2),sqrt(L2)) + result; + return result; + }); + + } else { + + LOG_TEST << "The track length and tof*c agree to w/in 0.15 mm " << NADA << std::endl; + LOG_TEST << "The track length at the hit should be >= radius at the hit" << NADA << std::endl; + + } + + + check_mtd_hit( "The sector (aka backleg) should decode as 1..30", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + int sector = h->volume_id / 1000; + if ( sector >= 1 && sector <= 30 ) result = PASS; + result = Form("sector=%i ",sector) + result; + return result; + }); + check_mtd_hit( "The module should decode as 1..5", hit,[=](const g2t_mtd_hit_st* h) { + std::string result = FAIL; + int module = h->volume_id % 1000 / 100; + if ( module >= 1 && module <= 5 ) result = PASS; + result = Form("module=%i ",module) + result; + return result; + }); + check_mtd_hit( "The layer should decode as 1..5", hit,[=]( const g2t_mtd_hit_st* h) { + std::string result = FAIL; + int layer = h->volume_id % 10; + if ( layer >= 1 && layer <= 5 ) result = PASS; + result = Form("layer=%i ",layer) + result; + return result; + }); + } + + } + + std::cout << std::endl << std::endl; + + // Print out energy deposition + { + + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + LOG_TEST << Form( "energy deposition: mean = %f keV", _mean ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f keV", _median ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f keV", _min ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f keV", _max ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f keV", _error_of_mean ) << std::endl; + + } + + // Print out step sizes + { + + double _mean = boost::accumulators::mean(step); + double _median = boost::accumulators::median(step); + double _min = boost::accumulators::min(step); + double _max = boost::accumulators::max(step); + double _error_of_mean = boost::accumulators::error_of(step); + LOG_TEST << Form( "step size: mean = %f cm", _mean ) << std::endl; + LOG_TEST << Form( "step size: median = %f cm", _median ) << std::endl; + LOG_TEST << Form( "step size: min = %f cm", _min ) << std::endl; + LOG_TEST << Form( "step size: max = %f cm", _max ) << std::endl; + LOG_TEST << Form( "step size: error of mean = %f cm", _error_of_mean ) << std::endl; + + } + + // Print out time per track + { + + double _mean = boost::accumulators::mean(time); + double _median = boost::accumulators::median(time); + double _min = boost::accumulators::min(time); + double _max = boost::accumulators::max(time); + double _error_of_mean = boost::accumulators::error_of(time); + LOG_TEST << Form( "time / muon: mean = %f s", _mean ) << std::endl; + LOG_TEST << Form( "time / muon: median = %f s", _median ) << std::endl; + LOG_TEST << Form( "time / muon: min = %f s", _min ) << std::endl; + LOG_TEST << Form( "time / muon: max = %f s", _max ) << std::endl; + LOG_TEST << Form( "time / muon: error of mean = %f s", _error_of_mean ) << std::endl; + + } + + // Reset accumulators + edep = step = time = {}; + + if ( longtest > 0 ) { + + std::cout << "-/ running long test with N pi+/pi- =" << longtest << " /-" << std::endl; + + throw_particle( longtest, "pi+,pi-", 0.200, 20.0, -1.0, 1.0, 0.0, TMath::TwoPi() ); + + auto* chain = StMaker::GetChain(); + hit_table = dynamic_cast( chain->GetDataSet("g2t_mtd_hit") ) ; + + // Accumulate + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + // std::cout << *hit << std::endl; + + edep( TMath::Abs(hit->de) * 1E6 ); // GeV MeV keV + step( hit->ds ); + + } + + // Print out energy deposition + { + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + LOG_TEST << Form( "energy deposition: mean = %f keV", _mean ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f keV", _median ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f keV", _min ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f keV", _max ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f keV", _error_of_mean ) << std::endl; + + } + + // Print out step sizes + { + + double _mean = boost::accumulators::mean(step); + double _median = boost::accumulators::median(step); + double _min = boost::accumulators::min(step); + double _max = boost::accumulators::max(step); + double _error_of_mean = boost::accumulators::error_of(step); + LOG_TEST << Form( "step size: mean = %f cm", _mean ) << std::endl; + LOG_TEST << Form( "step size: median = %f cm", _median ) << std::endl; + LOG_TEST << Form( "step size: min = %f cm", _min ) << std::endl; + LOG_TEST << Form( "step size: max = %f cm", _max ) << std::endl; + LOG_TEST << Form( "step size: error of mean = %f cm", _error_of_mean ) << std::endl; + + } + + } + + +} +//___________________________________________________________________ +void init_cells() { +cells.push_back({ 0,1,1, 1.510019,-0.416592 }); +cells.push_back({ 1,1,1, 1.521069,-0.416592 }); +cells.push_back({ 2,1,1, 1.532120,-0.416592 }); +cells.push_back({ 3,1,1, 1.543170,-0.416592 }); +cells.push_back({ 4,1,1, 1.554221,-0.416592 }); +cells.push_back({ 5,1,1, 1.565271,-0.416592 }); +cells.push_back({ 6,1,1, 1.576321,-0.416592 }); +cells.push_back({ 7,1,1, 1.587372,-0.416592 }); +cells.push_back({ 8,1,1, 1.598422,-0.416592 }); +cells.push_back({ 9,1,1, 1.609473,-0.416592 }); +cells.push_back({ 10,1,1, 1.620523,-0.416592 }); +cells.push_back({ 11,1,1, 1.631574,-0.416592 }); +// ibackleg=1 imodule=2 +cells.push_back({ 0,1,2, 1.509247,-0.212765 }); +cells.push_back({ 1,1,2, 1.520438,-0.212765 }); +cells.push_back({ 2,1,2, 1.531629,-0.212765 }); +cells.push_back({ 3,1,2, 1.542819,-0.212765 }); +cells.push_back({ 4,1,2, 1.554010,-0.212765 }); +cells.push_back({ 5,1,2, 1.565201,-0.212765 }); +cells.push_back({ 6,1,2, 1.576392,-0.212765 }); +cells.push_back({ 7,1,2, 1.587582,-0.212765 }); +cells.push_back({ 8,1,2, 1.598773,-0.212765 }); +cells.push_back({ 9,1,2, 1.609964,-0.212765 }); +cells.push_back({ 10,1,2, 1.621154,-0.212765 }); +cells.push_back({ 11,1,2, 1.632345,-0.212765 }); +// ibackleg=1 imodule=3 +cells.push_back({ 0,1,3, 1.510019,-0.000000 }); +cells.push_back({ 1,1,3, 1.521069,-0.000000 }); +cells.push_back({ 2,1,3, 1.532120,-0.000000 }); +cells.push_back({ 3,1,3, 1.543170,-0.000000 }); +cells.push_back({ 4,1,3, 1.554221,-0.000000 }); +cells.push_back({ 5,1,3, 1.565271,-0.000000 }); +cells.push_back({ 6,1,3, 1.576321,-0.000000 }); +cells.push_back({ 7,1,3, 1.587372,-0.000000 }); +cells.push_back({ 8,1,3, 1.598422,-0.000000 }); +cells.push_back({ 9,1,3, 1.609473,-0.000000 }); +cells.push_back({ 10,1,3, 1.620523,-0.000000 }); +cells.push_back({ 11,1,3, 1.631574,-0.000000 }); +// ibackleg=1 imodule=4 +cells.push_back({ 0,1,4, 1.632345,0.212765 }); +cells.push_back({ 1,1,4, 1.621154,0.212765 }); +cells.push_back({ 2,1,4, 1.609964,0.212765 }); +cells.push_back({ 3,1,4, 1.598773,0.212765 }); +cells.push_back({ 4,1,4, 1.587582,0.212765 }); +cells.push_back({ 5,1,4, 1.576392,0.212765 }); +cells.push_back({ 6,1,4, 1.565201,0.212765 }); +cells.push_back({ 7,1,4, 1.554010,0.212765 }); +cells.push_back({ 8,1,4, 1.542819,0.212765 }); +cells.push_back({ 9,1,4, 1.531629,0.212765 }); +cells.push_back({ 10,1,4, 1.520438,0.212765 }); +cells.push_back({ 11,1,4, 1.509247,0.212765 }); +// ibackleg=2 imodule=0 +// ibackleg=2 imodule=1 +cells.push_back({ 0,2,1, 1.719458,-0.416592 }); +cells.push_back({ 1,2,1, 1.730509,-0.416592 }); +cells.push_back({ 2,2,1, 1.741559,-0.416592 }); +cells.push_back({ 3,2,1, 1.752610,-0.416592 }); +cells.push_back({ 4,2,1, 1.763660,-0.416592 }); +cells.push_back({ 5,2,1, 1.774711,-0.416592 }); +cells.push_back({ 6,2,1, 1.785761,-0.416592 }); +cells.push_back({ 7,2,1, 1.796812,-0.416592 }); +cells.push_back({ 8,2,1, 1.807862,-0.416592 }); +cells.push_back({ 9,2,1, 1.818912,-0.416592 }); +cells.push_back({ 10,2,1, 1.829963,-0.416592 }); +cells.push_back({ 11,2,1, 1.841013,-0.416592 }); +// ibackleg=2 imodule=2 +cells.push_back({ 0,2,2, 1.718687,-0.212765 }); +cells.push_back({ 1,2,2, 1.729878,-0.212765 }); +cells.push_back({ 2,2,2, 1.741068,-0.212765 }); +cells.push_back({ 3,2,2, 1.752259,-0.212765 }); +cells.push_back({ 4,2,2, 1.763450,-0.212765 }); +cells.push_back({ 5,2,2, 1.774641,-0.212765 }); +cells.push_back({ 6,2,2, 1.785831,-0.212765 }); +cells.push_back({ 7,2,2, 1.797022,-0.212765 }); +cells.push_back({ 8,2,2, 1.808213,-0.212765 }); +cells.push_back({ 9,2,2, 1.819403,-0.212765 }); +cells.push_back({ 10,2,2, 1.830594,-0.212765 }); +cells.push_back({ 11,2,2, 1.841785,-0.212765 }); +// ibackleg=2 imodule=3 +cells.push_back({ 0,2,3, 1.719458,-0.000000 }); +cells.push_back({ 1,2,3, 1.730509,-0.000000 }); +cells.push_back({ 2,2,3, 1.741559,-0.000000 }); +cells.push_back({ 3,2,3, 1.752610,-0.000000 }); +cells.push_back({ 4,2,3, 1.763660,-0.000000 }); +cells.push_back({ 5,2,3, 1.774711,-0.000000 }); +cells.push_back({ 6,2,3, 1.785761,-0.000000 }); +cells.push_back({ 7,2,3, 1.796812,-0.000000 }); +cells.push_back({ 8,2,3, 1.807862,-0.000000 }); +cells.push_back({ 9,2,3, 1.818912,-0.000000 }); +cells.push_back({ 10,2,3, 1.829963,-0.000000 }); +cells.push_back({ 11,2,3, 1.841013,-0.000000 }); +// ibackleg=2 imodule=4 +cells.push_back({ 0,2,4, 1.841785,0.212765 }); +cells.push_back({ 1,2,4, 1.830594,0.212765 }); +cells.push_back({ 2,2,4, 1.819403,0.212765 }); +cells.push_back({ 3,2,4, 1.808213,0.212765 }); +cells.push_back({ 4,2,4, 1.797022,0.212765 }); +cells.push_back({ 5,2,4, 1.785831,0.212765 }); +cells.push_back({ 6,2,4, 1.774641,0.212765 }); +cells.push_back({ 7,2,4, 1.763450,0.212765 }); +cells.push_back({ 8,2,4, 1.752259,0.212765 }); +cells.push_back({ 9,2,4, 1.741068,0.212765 }); +cells.push_back({ 10,2,4, 1.729878,0.212765 }); +cells.push_back({ 11,2,4, 1.718687,0.212765 }); +// ibackleg=3 imodule=0 +// ibackleg=3 imodule=1 +cells.push_back({ 0,3,1, 1.928898,-0.416592 }); +cells.push_back({ 1,3,1, 1.939948,-0.416592 }); +cells.push_back({ 2,3,1, 1.950999,-0.416592 }); +cells.push_back({ 3,3,1, 1.962049,-0.416592 }); +cells.push_back({ 4,3,1, 1.973100,-0.416592 }); +cells.push_back({ 5,3,1, 1.984150,-0.416592 }); +cells.push_back({ 6,3,1, 1.995201,-0.416592 }); +cells.push_back({ 7,3,1, 2.006251,-0.416592 }); +cells.push_back({ 8,3,1, 2.017302,-0.416592 }); +cells.push_back({ 9,3,1, 2.028352,-0.416592 }); +cells.push_back({ 10,3,1, 2.039402,-0.416592 }); +cells.push_back({ 11,3,1, 2.050453,-0.416592 }); +// ibackleg=3 imodule=2 +cells.push_back({ 0,3,2, 1.928126,-0.212765 }); +cells.push_back({ 1,3,2, 1.939317,-0.212765 }); +cells.push_back({ 2,3,2, 1.950508,-0.212765 }); +cells.push_back({ 3,3,2, 1.961699,-0.212765 }); +cells.push_back({ 4,3,2, 1.972889,-0.212765 }); +cells.push_back({ 5,3,2, 1.984080,-0.212765 }); +cells.push_back({ 6,3,2, 1.995271,-0.212765 }); +cells.push_back({ 7,3,2, 2.006461,-0.212765 }); +cells.push_back({ 8,3,2, 2.017652,-0.212765 }); +cells.push_back({ 9,3,2, 2.028843,-0.212765 }); +cells.push_back({ 10,3,2, 2.040034,-0.212765 }); +cells.push_back({ 11,3,2, 2.051224,-0.212765 }); +// ibackleg=3 imodule=3 +cells.push_back({ 0,3,3, 1.928898,-0.000000 }); +cells.push_back({ 1,3,3, 1.939948,-0.000000 }); +cells.push_back({ 2,3,3, 1.950999,-0.000000 }); +cells.push_back({ 3,3,3, 1.962049,-0.000000 }); +cells.push_back({ 4,3,3, 1.973100,-0.000000 }); +cells.push_back({ 5,3,3, 1.984150,-0.000000 }); +cells.push_back({ 6,3,3, 1.995201,-0.000000 }); +cells.push_back({ 7,3,3, 2.006251,-0.000000 }); +cells.push_back({ 8,3,3, 2.017302,-0.000000 }); +cells.push_back({ 9,3,3, 2.028352,-0.000000 }); +cells.push_back({ 10,3,3, 2.039402,-0.000000 }); +cells.push_back({ 11,3,3, 2.050453,-0.000000 }); +// ibackleg=3 imodule=4 +cells.push_back({ 0,3,4, 2.051224,0.212765 }); +cells.push_back({ 1,3,4, 2.040034,0.212765 }); +cells.push_back({ 2,3,4, 2.028843,0.212765 }); +cells.push_back({ 3,3,4, 2.017652,0.212765 }); +cells.push_back({ 4,3,4, 2.006461,0.212765 }); +cells.push_back({ 5,3,4, 1.995271,0.212765 }); +cells.push_back({ 6,3,4, 1.984080,0.212765 }); +cells.push_back({ 7,3,4, 1.972889,0.212765 }); +cells.push_back({ 8,3,4, 1.961699,0.212765 }); +cells.push_back({ 9,3,4, 1.950508,0.212765 }); +cells.push_back({ 10,3,4, 1.939317,0.212765 }); +cells.push_back({ 11,3,4, 1.928126,0.212765 }); +// ibackleg=4 imodule=0 +// ibackleg=4 imodule=1 +cells.push_back({ 0,4,1, 2.138337,-0.416592 }); +cells.push_back({ 1,4,1, 2.149388,-0.416592 }); +cells.push_back({ 2,4,1, 2.160438,-0.416592 }); +cells.push_back({ 3,4,1, 2.171489,-0.416592 }); +cells.push_back({ 4,4,1, 2.182539,-0.416592 }); +cells.push_back({ 5,4,1, 2.193590,-0.416592 }); +cells.push_back({ 6,4,1, 2.204640,-0.416592 }); +cells.push_back({ 7,4,1, 2.215690,-0.416592 }); +cells.push_back({ 8,4,1, 2.226741,-0.416592 }); +cells.push_back({ 9,4,1, 2.237791,-0.416592 }); +cells.push_back({ 10,4,1, 2.248842,-0.416592 }); +cells.push_back({ 11,4,1, 2.259892,-0.416592 }); +// ibackleg=4 imodule=2 +cells.push_back({ 0,4,2, 2.137566,-0.212765 }); +cells.push_back({ 1,4,2, 2.148757,-0.212765 }); +cells.push_back({ 2,4,2, 2.159947,-0.212765 }); +cells.push_back({ 3,4,2, 2.171138,-0.212765 }); +cells.push_back({ 4,4,2, 2.182329,-0.212765 }); +cells.push_back({ 5,4,2, 2.193519,-0.212765 }); +cells.push_back({ 6,4,2, 2.204710,-0.212765 }); +cells.push_back({ 7,4,2, 2.215901,-0.212765 }); +cells.push_back({ 8,4,2, 2.227092,-0.212765 }); +cells.push_back({ 9,4,2, 2.238282,-0.212765 }); +cells.push_back({ 10,4,2, 2.249473,-0.212765 }); +cells.push_back({ 11,4,2, 2.260664,-0.212765 }); +// ibackleg=4 imodule=3 +cells.push_back({ 0,4,3, 2.138337,-0.000000 }); +cells.push_back({ 1,4,3, 2.149388,-0.000000 }); +cells.push_back({ 2,4,3, 2.160438,-0.000000 }); +cells.push_back({ 3,4,3, 2.171489,-0.000000 }); +cells.push_back({ 4,4,3, 2.182539,-0.000000 }); +cells.push_back({ 5,4,3, 2.193590,-0.000000 }); +cells.push_back({ 6,4,3, 2.204640,-0.000000 }); +cells.push_back({ 7,4,3, 2.215690,-0.000000 }); +cells.push_back({ 8,4,3, 2.226741,-0.000000 }); +cells.push_back({ 9,4,3, 2.237791,-0.000000 }); +cells.push_back({ 10,4,3, 2.248842,-0.000000 }); +cells.push_back({ 11,4,3, 2.259892,-0.000000 }); +// ibackleg=4 imodule=4 +cells.push_back({ 0,4,4, 2.260664,0.212765 }); +cells.push_back({ 1,4,4, 2.249473,0.212765 }); +cells.push_back({ 2,4,4, 2.238282,0.212765 }); +cells.push_back({ 3,4,4, 2.227092,0.212765 }); +cells.push_back({ 4,4,4, 2.215901,0.212765 }); +cells.push_back({ 5,4,4, 2.204710,0.212765 }); +cells.push_back({ 6,4,4, 2.193519,0.212765 }); +cells.push_back({ 7,4,4, 2.182329,0.212765 }); +cells.push_back({ 8,4,4, 2.171138,0.212765 }); +cells.push_back({ 9,4,4, 2.159947,0.212765 }); +cells.push_back({ 10,4,4, 2.148757,0.212765 }); +cells.push_back({ 11,4,4, 2.137566,0.212765 }); +// ibackleg=5 imodule=0 +// ibackleg=5 imodule=1 +cells.push_back({ 0,5,1, 2.347777,-0.416592 }); +cells.push_back({ 1,5,1, 2.358827,-0.416592 }); +cells.push_back({ 2,5,1, 2.369878,-0.416592 }); +cells.push_back({ 3,5,1, 2.380928,-0.416592 }); +cells.push_back({ 4,5,1, 2.391979,-0.416592 }); +cells.push_back({ 5,5,1, 2.403029,-0.416592 }); +cells.push_back({ 6,5,1, 2.414079,-0.416592 }); +cells.push_back({ 7,5,1, 2.425130,-0.416592 }); +cells.push_back({ 8,5,1, 2.436180,-0.416592 }); +cells.push_back({ 9,5,1, 2.447231,-0.416592 }); +cells.push_back({ 10,5,1, 2.458281,-0.416592 }); +cells.push_back({ 11,5,1, 2.469332,-0.416592 }); +// ibackleg=5 imodule=2 +cells.push_back({ 0,5,2, 2.347005,-0.212765 }); +cells.push_back({ 1,5,2, 2.358196,-0.212765 }); +cells.push_back({ 2,5,2, 2.369387,-0.212765 }); +cells.push_back({ 3,5,2, 2.380578,-0.212765 }); +cells.push_back({ 4,5,2, 2.391768,-0.212765 }); +cells.push_back({ 5,5,2, 2.402959,-0.212765 }); +cells.push_back({ 6,5,2, 2.414150,-0.212765 }); +cells.push_back({ 7,5,2, 2.425340,-0.212765 }); +cells.push_back({ 8,5,2, 2.436531,-0.212765 }); +cells.push_back({ 9,5,2, 2.447722,-0.212765 }); +cells.push_back({ 10,5,2, 2.458913,-0.212765 }); +cells.push_back({ 11,5,2, 2.470103,-0.212765 }); +// ibackleg=5 imodule=3 +cells.push_back({ 0,5,3, 2.347777,-0.000000 }); +cells.push_back({ 1,5,3, 2.358827,-0.000000 }); +cells.push_back({ 2,5,3, 2.369878,-0.000000 }); +cells.push_back({ 3,5,3, 2.380928,-0.000000 }); +cells.push_back({ 4,5,3, 2.391979,-0.000000 }); +cells.push_back({ 5,5,3, 2.403029,-0.000000 }); +cells.push_back({ 6,5,3, 2.414079,-0.000000 }); +cells.push_back({ 7,5,3, 2.425130,-0.000000 }); +cells.push_back({ 8,5,3, 2.436180,-0.000000 }); +cells.push_back({ 9,5,3, 2.447231,-0.000000 }); +cells.push_back({ 10,5,3, 2.458281,-0.000000 }); +cells.push_back({ 11,5,3, 2.469332,-0.000000 }); +// ibackleg=5 imodule=4 +cells.push_back({ 0,5,4, 2.470103,0.212765 }); +cells.push_back({ 1,5,4, 2.458913,0.212765 }); +cells.push_back({ 2,5,4, 2.447722,0.212765 }); +cells.push_back({ 3,5,4, 2.436531,0.212765 }); +cells.push_back({ 4,5,4, 2.425340,0.212765 }); +cells.push_back({ 5,5,4, 2.414150,0.212765 }); +cells.push_back({ 6,5,4, 2.402959,0.212765 }); +cells.push_back({ 7,5,4, 2.391768,0.212765 }); +cells.push_back({ 8,5,4, 2.380578,0.212765 }); +cells.push_back({ 9,5,4, 2.369387,0.212765 }); +cells.push_back({ 10,5,4, 2.358196,0.212765 }); +cells.push_back({ 11,5,4, 2.347005,0.212765 }); +// ibackleg=6 imodule=0 +// ibackleg=6 imodule=1 +cells.push_back({ 0,6,1, 2.557216,-0.416592 }); +cells.push_back({ 1,6,1, 2.568267,-0.416592 }); +cells.push_back({ 2,6,1, 2.579317,-0.416592 }); +cells.push_back({ 3,6,1, 2.590368,-0.416592 }); +cells.push_back({ 4,6,1, 2.601418,-0.416592 }); +cells.push_back({ 5,6,1, 2.612469,-0.416592 }); +cells.push_back({ 6,6,1, 2.623519,-0.416592 }); +cells.push_back({ 7,6,1, 2.634569,-0.416592 }); +cells.push_back({ 8,6,1, 2.645620,-0.416592 }); +cells.push_back({ 9,6,1, 2.656670,-0.416592 }); +cells.push_back({ 10,6,1, 2.667721,-0.416592 }); +cells.push_back({ 11,6,1, 2.678771,-0.416592 }); +// ibackleg=6 imodule=2 +cells.push_back({ 0,6,2, 2.556445,-0.212765 }); +cells.push_back({ 1,6,2, 2.567636,-0.212765 }); +cells.push_back({ 2,6,2, 2.578826,-0.212765 }); +cells.push_back({ 3,6,2, 2.590017,-0.212765 }); +cells.push_back({ 4,6,2, 2.601208,-0.212765 }); +cells.push_back({ 5,6,2, 2.612398,-0.212765 }); +cells.push_back({ 6,6,2, 2.623589,-0.212765 }); +cells.push_back({ 7,6,2, 2.634780,-0.212765 }); +cells.push_back({ 8,6,2, 2.645971,-0.212765 }); +cells.push_back({ 9,6,2, 2.657161,-0.212765 }); +cells.push_back({ 10,6,2, 2.668352,-0.212765 }); +cells.push_back({ 11,6,2, 2.679543,-0.212765 }); +// ibackleg=6 imodule=3 +cells.push_back({ 0,6,3, 2.557216,-0.000000 }); +cells.push_back({ 1,6,3, 2.568267,-0.000000 }); +cells.push_back({ 2,6,3, 2.579317,-0.000000 }); +cells.push_back({ 3,6,3, 2.590368,-0.000000 }); +cells.push_back({ 4,6,3, 2.601418,-0.000000 }); +cells.push_back({ 5,6,3, 2.612469,-0.000000 }); +cells.push_back({ 6,6,3, 2.623519,-0.000000 }); +cells.push_back({ 7,6,3, 2.634569,-0.000000 }); +cells.push_back({ 8,6,3, 2.645620,-0.000000 }); +cells.push_back({ 9,6,3, 2.656670,-0.000000 }); +cells.push_back({ 10,6,3, 2.667721,-0.000000 }); +cells.push_back({ 11,6,3, 2.678771,-0.000000 }); +// ibackleg=6 imodule=4 +cells.push_back({ 0,6,4, 2.679543,0.212765 }); +cells.push_back({ 1,6,4, 2.668352,0.212765 }); +cells.push_back({ 2,6,4, 2.657161,0.212765 }); +cells.push_back({ 3,6,4, 2.645971,0.212765 }); +cells.push_back({ 4,6,4, 2.634780,0.212765 }); +cells.push_back({ 5,6,4, 2.623589,0.212765 }); +cells.push_back({ 6,6,4, 2.612398,0.212765 }); +cells.push_back({ 7,6,4, 2.601208,0.212765 }); +cells.push_back({ 8,6,4, 2.590017,0.212765 }); +cells.push_back({ 9,6,4, 2.578826,0.212765 }); +cells.push_back({ 10,6,4, 2.567636,0.212765 }); +cells.push_back({ 11,6,4, 2.556445,0.212765 }); +// ibackleg=7 imodule=0 +// ibackleg=7 imodule=1 +cells.push_back({ 0,7,1, 2.767657,-0.416592 }); +cells.push_back({ 1,7,1, 2.778526,-0.416592 }); +cells.push_back({ 2,7,1, 2.789394,-0.416592 }); +cells.push_back({ 3,7,1, 2.800262,-0.416592 }); +cells.push_back({ 4,7,1, 2.811131,-0.416592 }); +cells.push_back({ 5,7,1, 2.821999,-0.416592 }); +cells.push_back({ 6,7,1, 2.832868,-0.416592 }); +cells.push_back({ 7,7,1, 2.843736,-0.416592 }); +cells.push_back({ 8,7,1, 2.854604,-0.416592 }); +cells.push_back({ 9,7,1, 2.865473,-0.416592 }); +cells.push_back({ 10,7,1, 2.876341,-0.416592 }); +cells.push_back({ 11,7,1, 2.887209,-0.416592 }); +// ibackleg=7 imodule=2 +cells.push_back({ 0,7,2, 2.766911,-0.212765 }); +cells.push_back({ 1,7,2, 2.777915,-0.212765 }); +cells.push_back({ 2,7,2, 2.788919,-0.212765 }); +cells.push_back({ 3,7,2, 2.799923,-0.212765 }); +cells.push_back({ 4,7,2, 2.810927,-0.212765 }); +cells.push_back({ 5,7,2, 2.821931,-0.212765 }); +cells.push_back({ 6,7,2, 2.832935,-0.212765 }); +cells.push_back({ 7,7,2, 2.843939,-0.212765 }); +cells.push_back({ 8,7,2, 2.854944,-0.212765 }); +cells.push_back({ 9,7,2, 2.865947,-0.212765 }); +cells.push_back({ 10,7,2, 2.876951,-0.212765 }); +cells.push_back({ 11,7,2, 2.887956,-0.212765 }); +// ibackleg=7 imodule=3 +cells.push_back({ 0,7,3, 2.767657,-0.000000 }); +cells.push_back({ 1,7,3, 2.778526,-0.000000 }); +cells.push_back({ 2,7,3, 2.789394,-0.000000 }); +cells.push_back({ 3,7,3, 2.800262,-0.000000 }); +cells.push_back({ 4,7,3, 2.811131,-0.000000 }); +cells.push_back({ 5,7,3, 2.821999,-0.000000 }); +cells.push_back({ 6,7,3, 2.832868,-0.000000 }); +cells.push_back({ 7,7,3, 2.843736,-0.000000 }); +cells.push_back({ 8,7,3, 2.854604,-0.000000 }); +cells.push_back({ 9,7,3, 2.865473,-0.000000 }); +cells.push_back({ 10,7,3, 2.876341,-0.000000 }); +cells.push_back({ 11,7,3, 2.887209,-0.000000 }); +// ibackleg=7 imodule=4 +cells.push_back({ 0,7,4, 2.887956,0.212765 }); +cells.push_back({ 1,7,4, 2.876951,0.212765 }); +cells.push_back({ 2,7,4, 2.865947,0.212765 }); +cells.push_back({ 3,7,4, 2.854944,0.212765 }); +cells.push_back({ 4,7,4, 2.843939,0.212765 }); +cells.push_back({ 5,7,4, 2.832935,0.212765 }); +cells.push_back({ 6,7,4, 2.821931,0.212765 }); +cells.push_back({ 7,7,4, 2.810927,0.212765 }); +cells.push_back({ 8,7,4, 2.799923,0.212765 }); +cells.push_back({ 9,7,4, 2.788919,0.212765 }); +cells.push_back({ 10,7,4, 2.777915,0.212765 }); +cells.push_back({ 11,7,4, 2.766911,0.212765 }); +// ibackleg=8 imodule=0 +// ibackleg=8 imodule=1 +cells.push_back({ 0,8,1, 2.947753,-0.416592 }); +cells.push_back({ 1,8,1, 2.958220,-0.416592 }); +cells.push_back({ 2,8,1, 2.968686,-0.416592 }); +cells.push_back({ 3,8,1, 2.979152,-0.416592 }); +cells.push_back({ 4,8,1, 2.989618,-0.416592 }); +cells.push_back({ 5,8,1, 3.000084,-0.416592 }); +cells.push_back({ 6,8,1, 3.010550,-0.416592 }); +cells.push_back({ 7,8,1, 3.021016,-0.416592 }); +cells.push_back({ 8,8,1, 3.031483,-0.416592 }); +cells.push_back({ 9,8,1, 3.041949,-0.416592 }); +cells.push_back({ 10,8,1, 3.052415,-0.416592 }); +cells.push_back({ 11,8,1, 3.062881,-0.416592 }); +// ibackleg=8 imodule=2 +cells.push_back({ 0,8,2, 2.946683,-0.212765 }); +cells.push_back({ 1,8,2, 2.957275,-0.212765 }); +cells.push_back({ 2,8,2, 2.967867,-0.212765 }); +cells.push_back({ 3,8,2, 2.978459,-0.212765 }); +cells.push_back({ 4,8,2, 2.989050,-0.212765 }); +cells.push_back({ 5,8,2, 2.999642,-0.212765 }); +cells.push_back({ 6,8,2, 3.010234,-0.212765 }); +cells.push_back({ 7,8,2, 3.020826,-0.212765 }); +cells.push_back({ 8,8,2, 3.031418,-0.212765 }); +cells.push_back({ 9,8,2, 3.042010,-0.212765 }); +cells.push_back({ 10,8,2, 3.052601,-0.212765 }); +cells.push_back({ 11,8,2, 3.063193,-0.212765 }); +// ibackleg=8 imodule=3 +cells.push_back({ 0,8,3, 2.947753,-0.000000 }); +cells.push_back({ 1,8,3, 2.958220,-0.000000 }); +cells.push_back({ 2,8,3, 2.968686,-0.000000 }); +cells.push_back({ 3,8,3, 2.979152,-0.000000 }); +cells.push_back({ 4,8,3, 2.989618,-0.000000 }); +cells.push_back({ 5,8,3, 3.000084,-0.000000 }); +cells.push_back({ 6,8,3, 3.010550,-0.000000 }); +cells.push_back({ 7,8,3, 3.021016,-0.000000 }); +cells.push_back({ 8,8,3, 3.031483,-0.000000 }); +cells.push_back({ 9,8,3, 3.041949,-0.000000 }); +cells.push_back({ 10,8,3, 3.052415,-0.000000 }); +cells.push_back({ 11,8,3, 3.062881,-0.000000 }); +// ibackleg=8 imodule=4 +cells.push_back({ 0,8,4, 3.063193,0.212765 }); +cells.push_back({ 1,8,4, 3.052601,0.212765 }); +cells.push_back({ 2,8,4, 3.042010,0.212765 }); +cells.push_back({ 3,8,4, 3.031418,0.212765 }); +cells.push_back({ 4,8,4, 3.020826,0.212765 }); +cells.push_back({ 5,8,4, 3.010234,0.212765 }); +cells.push_back({ 6,8,4, 2.999642,0.212765 }); +cells.push_back({ 7,8,4, 2.989050,0.212765 }); +cells.push_back({ 8,8,4, 2.978459,0.212765 }); +cells.push_back({ 9,8,4, 2.967867,0.212765 }); +cells.push_back({ 10,8,4, 2.957275,0.212765 }); +cells.push_back({ 11,8,4, 2.946683,0.212765 }); +// ibackleg=9 imodule=0 +// ibackleg=9 imodule=1 +// ibackleg=9 imodule=2 +// ibackleg=9 imodule=3 +// ibackleg=9 imodule=4 +// ibackleg=10 imodule=0 +// ibackleg=10 imodule=1 +cells.push_back({ 0,10,1, -2.887209,-0.416592 }); +cells.push_back({ 1,10,1, -2.876341,-0.416592 }); +cells.push_back({ 2,10,1, -2.865473,-0.416592 }); +cells.push_back({ 3,10,1, -2.854604,-0.416592 }); +cells.push_back({ 4,10,1, -2.843736,-0.416592 }); +cells.push_back({ 5,10,1, -2.832868,-0.416592 }); +cells.push_back({ 6,10,1, -2.821999,-0.416592 }); +cells.push_back({ 7,10,1, -2.811131,-0.416592 }); +cells.push_back({ 8,10,1, -2.800263,-0.416592 }); +cells.push_back({ 9,10,1, -2.789394,-0.416592 }); +cells.push_back({ 10,10,1, -2.778526,-0.416592 }); +cells.push_back({ 11,10,1, -2.767657,-0.416592 }); +// ibackleg=10 imodule=2 +cells.push_back({ 0,10,2, -2.887956,-0.212765 }); +cells.push_back({ 1,10,2, -2.876952,-0.212765 }); +cells.push_back({ 2,10,2, -2.865948,-0.212765 }); +cells.push_back({ 3,10,2, -2.854944,-0.212765 }); +cells.push_back({ 4,10,2, -2.843939,-0.212765 }); +cells.push_back({ 5,10,2, -2.832935,-0.212765 }); +cells.push_back({ 6,10,2, -2.821931,-0.212765 }); +cells.push_back({ 7,10,2, -2.810927,-0.212765 }); +cells.push_back({ 8,10,2, -2.799923,-0.212765 }); +cells.push_back({ 9,10,2, -2.788919,-0.212765 }); +cells.push_back({ 10,10,2, -2.777915,-0.212765 }); +cells.push_back({ 11,10,2, -2.766911,-0.212765 }); +// ibackleg=10 imodule=3 +cells.push_back({ 0,10,3, -2.887209,-0.000000 }); +cells.push_back({ 1,10,3, -2.876341,-0.000000 }); +cells.push_back({ 2,10,3, -2.865473,-0.000000 }); +cells.push_back({ 3,10,3, -2.854604,-0.000000 }); +cells.push_back({ 4,10,3, -2.843736,-0.000000 }); +cells.push_back({ 5,10,3, -2.832868,-0.000000 }); +cells.push_back({ 6,10,3, -2.821999,-0.000000 }); +cells.push_back({ 7,10,3, -2.811131,-0.000000 }); +cells.push_back({ 8,10,3, -2.800263,-0.000000 }); +cells.push_back({ 9,10,3, -2.789394,-0.000000 }); +cells.push_back({ 10,10,3, -2.778526,-0.000000 }); +cells.push_back({ 11,10,3, -2.767657,-0.000000 }); +// ibackleg=10 imodule=4 +cells.push_back({ 0,10,4, -2.766911,0.212765 }); +cells.push_back({ 1,10,4, -2.777915,0.212765 }); +cells.push_back({ 2,10,4, -2.788919,0.212765 }); +cells.push_back({ 3,10,4, -2.799923,0.212765 }); +cells.push_back({ 4,10,4, -2.810927,0.212765 }); +cells.push_back({ 5,10,4, -2.821931,0.212765 }); +cells.push_back({ 6,10,4, -2.832935,0.212765 }); +cells.push_back({ 7,10,4, -2.843939,0.212765 }); +cells.push_back({ 8,10,4, -2.854944,0.212765 }); +cells.push_back({ 9,10,4, -2.865948,0.212765 }); +cells.push_back({ 10,10,4, -2.876952,0.212765 }); +cells.push_back({ 11,10,4, -2.887956,0.212765 }); +// ibackleg=11 imodule=0 +// ibackleg=11 imodule=1 +cells.push_back({ 0,11,1, -2.676486,-0.416592 }); +cells.push_back({ 1,11,1, -2.665851,-0.416592 }); +cells.push_back({ 2,11,1, -2.655216,-0.416592 }); +cells.push_back({ 3,11,1, -2.644581,-0.416592 }); +cells.push_back({ 4,11,1, -2.633946,-0.416592 }); +cells.push_back({ 5,11,1, -2.623311,-0.416592 }); +cells.push_back({ 6,11,1, -2.612676,-0.416592 }); +cells.push_back({ 7,11,1, -2.602042,-0.416592 }); +cells.push_back({ 8,11,1, -2.591407,-0.416592 }); +cells.push_back({ 9,11,1, -2.580772,-0.416592 }); +cells.push_back({ 10,11,1, -2.570137,-0.416592 }); +cells.push_back({ 11,11,1, -2.559502,-0.416592 }); +// ibackleg=11 imodule=2 +cells.push_back({ 0,11,2, -2.677200,-0.212765 }); +cells.push_back({ 1,11,2, -2.666435,-0.212765 }); +cells.push_back({ 2,11,2, -2.655670,-0.212765 }); +cells.push_back({ 3,11,2, -2.644906,-0.212765 }); +cells.push_back({ 4,11,2, -2.634141,-0.212765 }); +cells.push_back({ 5,11,2, -2.623376,-0.212765 }); +cells.push_back({ 6,11,2, -2.612612,-0.212765 }); +cells.push_back({ 7,11,2, -2.601847,-0.212765 }); +cells.push_back({ 8,11,2, -2.591082,-0.212765 }); +cells.push_back({ 9,11,2, -2.580317,-0.212765 }); +cells.push_back({ 10,11,2, -2.569553,-0.212765 }); +cells.push_back({ 11,11,2, -2.558788,-0.212765 }); +// ibackleg=11 imodule=3 +cells.push_back({ 0,11,3, -2.676486,-0.000000 }); +cells.push_back({ 1,11,3, -2.665851,-0.000000 }); +cells.push_back({ 2,11,3, -2.655216,-0.000000 }); +cells.push_back({ 3,11,3, -2.644581,-0.000000 }); +cells.push_back({ 4,11,3, -2.633946,-0.000000 }); +cells.push_back({ 5,11,3, -2.623311,-0.000000 }); +cells.push_back({ 6,11,3, -2.612676,-0.000000 }); +cells.push_back({ 7,11,3, -2.602042,-0.000000 }); +cells.push_back({ 8,11,3, -2.591407,-0.000000 }); +cells.push_back({ 9,11,3, -2.580772,-0.000000 }); +cells.push_back({ 10,11,3, -2.570137,-0.000000 }); +cells.push_back({ 11,11,3, -2.559502,-0.000000 }); +// ibackleg=11 imodule=4 +cells.push_back({ 0,11,4, -2.558788,0.212765 }); +cells.push_back({ 1,11,4, -2.569553,0.212765 }); +cells.push_back({ 2,11,4, -2.580317,0.212765 }); +cells.push_back({ 3,11,4, -2.591082,0.212765 }); +cells.push_back({ 4,11,4, -2.601847,0.212765 }); +cells.push_back({ 5,11,4, -2.612612,0.212765 }); +cells.push_back({ 6,11,4, -2.623376,0.212765 }); +cells.push_back({ 7,11,4, -2.634141,0.212765 }); +cells.push_back({ 8,11,4, -2.644906,0.212765 }); +cells.push_back({ 9,11,4, -2.655670,0.212765 }); +cells.push_back({ 10,11,4, -2.666435,0.212765 }); +cells.push_back({ 11,11,4, -2.677200,0.212765 }); +// ibackleg=12 imodule=0 +// ibackleg=12 imodule=1 +// ibackleg=12 imodule=2 +cells.push_back({ 0,12,2, -2.466943,-0.212765 }); +cells.push_back({ 1,12,2, -2.456327,-0.212765 }); +cells.push_back({ 2,12,2, -2.445711,-0.212765 }); +cells.push_back({ 3,12,2, -2.435095,-0.212765 }); +cells.push_back({ 4,12,2, -2.424479,-0.212765 }); +cells.push_back({ 5,12,2, -2.413863,-0.212765 }); +cells.push_back({ 6,12,2, -2.403246,-0.212765 }); +cells.push_back({ 7,12,2, -2.392630,-0.212765 }); +cells.push_back({ 8,12,2, -2.382014,-0.212765 }); +cells.push_back({ 9,12,2, -2.371398,-0.212765 }); +cells.push_back({ 10,12,2, -2.360782,-0.212765 }); +cells.push_back({ 11,12,2, -2.350166,-0.212765 }); +// ibackleg=12 imodule=3 +cells.push_back({ 0,12,3, -2.466248,-0.000000 }); +cells.push_back({ 1,12,3, -2.455759,-0.000000 }); +cells.push_back({ 2,12,3, -2.445269,-0.000000 }); +cells.push_back({ 3,12,3, -2.434779,-0.000000 }); +cells.push_back({ 4,12,3, -2.424289,-0.000000 }); +cells.push_back({ 5,12,3, -2.413799,-0.000000 }); +cells.push_back({ 6,12,3, -2.403309,-0.000000 }); +cells.push_back({ 7,12,3, -2.392820,-0.000000 }); +cells.push_back({ 8,12,3, -2.382330,-0.000000 }); +cells.push_back({ 9,12,3, -2.371840,-0.000000 }); +cells.push_back({ 10,12,3, -2.361350,-0.000000 }); +cells.push_back({ 11,12,3, -2.350860,-0.000000 }); +// ibackleg=12 imodule=4 +cells.push_back({ 0,12,4, -2.350166,0.212765 }); +cells.push_back({ 1,12,4, -2.360782,0.212765 }); +cells.push_back({ 2,12,4, -2.371398,0.212765 }); +cells.push_back({ 3,12,4, -2.382014,0.212765 }); +cells.push_back({ 4,12,4, -2.392630,0.212765 }); +cells.push_back({ 5,12,4, -2.403246,0.212765 }); +cells.push_back({ 6,12,4, -2.413863,0.212765 }); +cells.push_back({ 7,12,4, -2.424479,0.212765 }); +cells.push_back({ 8,12,4, -2.435095,0.212765 }); +cells.push_back({ 9,12,4, -2.445711,0.212765 }); +cells.push_back({ 10,12,4, -2.456327,0.212765 }); +cells.push_back({ 11,12,4, -2.466943,0.212765 }); +// ibackleg=13 imodule=0 +// ibackleg=13 imodule=1 +// ibackleg=13 imodule=2 +cells.push_back({ 0,13,2, -2.257503,-0.212765 }); +cells.push_back({ 1,13,2, -2.246888,-0.212765 }); +cells.push_back({ 2,13,2, -2.236271,-0.212765 }); +cells.push_back({ 3,13,2, -2.225655,-0.212765 }); +cells.push_back({ 4,13,2, -2.215039,-0.212765 }); +cells.push_back({ 5,13,2, -2.204423,-0.212765 }); +cells.push_back({ 6,13,2, -2.193806,-0.212765 }); +cells.push_back({ 7,13,2, -2.183191,-0.212765 }); +cells.push_back({ 8,13,2, -2.172574,-0.212765 }); +cells.push_back({ 9,13,2, -2.161958,-0.212765 }); +cells.push_back({ 10,13,2, -2.151342,-0.212765 }); +cells.push_back({ 11,13,2, -2.140726,-0.212765 }); +// ibackleg=13 imodule=3 +cells.push_back({ 0,13,3, -2.256809,-0.000000 }); +cells.push_back({ 1,13,3, -2.246319,-0.000000 }); +cells.push_back({ 2,13,3, -2.235829,-0.000000 }); +cells.push_back({ 3,13,3, -2.225339,-0.000000 }); +cells.push_back({ 4,13,3, -2.214849,-0.000000 }); +cells.push_back({ 5,13,3, -2.204360,-0.000000 }); +cells.push_back({ 6,13,3, -2.193870,-0.000000 }); +cells.push_back({ 7,13,3, -2.183380,-0.000000 }); +cells.push_back({ 8,13,3, -2.172890,-0.000000 }); +cells.push_back({ 9,13,3, -2.162401,-0.000000 }); +cells.push_back({ 10,13,3, -2.151911,-0.000000 }); +cells.push_back({ 11,13,3, -2.141421,-0.000000 }); +// ibackleg=13 imodule=4 +cells.push_back({ 0,13,4, -2.140726,0.212765 }); +cells.push_back({ 1,13,4, -2.151342,0.212765 }); +cells.push_back({ 2,13,4, -2.161958,0.212765 }); +cells.push_back({ 3,13,4, -2.172574,0.212765 }); +cells.push_back({ 4,13,4, -2.183191,0.212765 }); +cells.push_back({ 5,13,4, -2.193806,0.212765 }); +cells.push_back({ 6,13,4, -2.204423,0.212765 }); +cells.push_back({ 7,13,4, -2.215039,0.212765 }); +cells.push_back({ 8,13,4, -2.225655,0.212765 }); +cells.push_back({ 9,13,4, -2.236271,0.212765 }); +cells.push_back({ 10,13,4, -2.246888,0.212765 }); +cells.push_back({ 11,13,4, -2.257503,0.212765 }); +// ibackleg=14 imodule=0 +// ibackleg=14 imodule=1 +// ibackleg=14 imodule=2 +cells.push_back({ 0,14,2, -2.048064,-0.212765 }); +cells.push_back({ 1,14,2, -2.037448,-0.212765 }); +cells.push_back({ 2,14,2, -2.026832,-0.212765 }); +cells.push_back({ 3,14,2, -2.016216,-0.212765 }); +cells.push_back({ 4,14,2, -2.005599,-0.212765 }); +cells.push_back({ 5,14,2, -1.994983,-0.212765 }); +cells.push_back({ 6,14,2, -1.984367,-0.212765 }); +cells.push_back({ 7,14,2, -1.973751,-0.212765 }); +cells.push_back({ 8,14,2, -1.963135,-0.212765 }); +cells.push_back({ 9,14,2, -1.952519,-0.212765 }); +cells.push_back({ 10,14,2, -1.941902,-0.212765 }); +cells.push_back({ 11,14,2, -1.931287,-0.212765 }); +// ibackleg=14 imodule=3 +cells.push_back({ 0,14,3, -2.047369,-0.000000 }); +cells.push_back({ 1,14,3, -2.036879,-0.000000 }); +cells.push_back({ 2,14,3, -2.026389,-0.000000 }); +cells.push_back({ 3,14,3, -2.015900,-0.000000 }); +cells.push_back({ 4,14,3, -2.005410,-0.000000 }); +cells.push_back({ 5,14,3, -1.994920,-0.000000 }); +cells.push_back({ 6,14,3, -1.984431,-0.000000 }); +cells.push_back({ 7,14,3, -1.973941,-0.000000 }); +cells.push_back({ 8,14,3, -1.963451,-0.000000 }); +cells.push_back({ 9,14,3, -1.952961,-0.000000 }); +cells.push_back({ 10,14,3, -1.942471,-0.000000 }); +cells.push_back({ 11,14,3, -1.931981,-0.000000 }); +// ibackleg=14 imodule=4 +cells.push_back({ 0,14,4, -1.931287,0.212765 }); +cells.push_back({ 1,14,4, -1.941902,0.212765 }); +cells.push_back({ 2,14,4, -1.952519,0.212765 }); +cells.push_back({ 3,14,4, -1.963135,0.212765 }); +cells.push_back({ 4,14,4, -1.973751,0.212765 }); +cells.push_back({ 5,14,4, -1.984367,0.212765 }); +cells.push_back({ 6,14,4, -1.994983,0.212765 }); +cells.push_back({ 7,14,4, -2.005599,0.212765 }); +cells.push_back({ 8,14,4, -2.016216,0.212765 }); +cells.push_back({ 9,14,4, -2.026832,0.212765 }); +cells.push_back({ 10,14,4, -2.037448,0.212765 }); +cells.push_back({ 11,14,4, -2.048064,0.212765 }); +// ibackleg=15 imodule=0 +// ibackleg=15 imodule=1 +// ibackleg=15 imodule=2 +cells.push_back({ 0,15,2, -1.838625,-0.212765 }); +cells.push_back({ 1,15,2, -1.828008,-0.212765 }); +cells.push_back({ 2,15,2, -1.817392,-0.212765 }); +cells.push_back({ 3,15,2, -1.806776,-0.212765 }); +cells.push_back({ 4,15,2, -1.796160,-0.212765 }); +cells.push_back({ 5,15,2, -1.785544,-0.212765 }); +cells.push_back({ 6,15,2, -1.774928,-0.212765 }); +cells.push_back({ 7,15,2, -1.764312,-0.212765 }); +cells.push_back({ 8,15,2, -1.753695,-0.212765 }); +cells.push_back({ 9,15,2, -1.743079,-0.212765 }); +cells.push_back({ 10,15,2, -1.732463,-0.212765 }); +cells.push_back({ 11,15,2, -1.721847,-0.212765 }); +// ibackleg=15 imodule=3 +cells.push_back({ 0,15,3, -1.837930,-0.000000 }); +cells.push_back({ 1,15,3, -1.827440,-0.000000 }); +cells.push_back({ 2,15,3, -1.816950,-0.000000 }); +cells.push_back({ 3,15,3, -1.806460,-0.000000 }); +cells.push_back({ 4,15,3, -1.795970,-0.000000 }); +cells.push_back({ 5,15,3, -1.785481,-0.000000 }); +cells.push_back({ 6,15,3, -1.774991,-0.000000 }); +cells.push_back({ 7,15,3, -1.764501,-0.000000 }); +cells.push_back({ 8,15,3, -1.754011,-0.000000 }); +cells.push_back({ 9,15,3, -1.743522,-0.000000 }); +cells.push_back({ 10,15,3, -1.733032,-0.000000 }); +cells.push_back({ 11,15,3, -1.722542,-0.000000 }); +// ibackleg=15 imodule=4 +cells.push_back({ 0,15,4, -1.721847,0.212765 }); +cells.push_back({ 1,15,4, -1.732463,0.212765 }); +cells.push_back({ 2,15,4, -1.743079,0.212765 }); +cells.push_back({ 3,15,4, -1.753695,0.212765 }); +cells.push_back({ 4,15,4, -1.764312,0.212765 }); +cells.push_back({ 5,15,4, -1.774928,0.212765 }); +cells.push_back({ 6,15,4, -1.785544,0.212765 }); +cells.push_back({ 7,15,4, -1.796160,0.212765 }); +cells.push_back({ 8,15,4, -1.806776,0.212765 }); +cells.push_back({ 9,15,4, -1.817392,0.212765 }); +cells.push_back({ 10,15,4, -1.828008,0.212765 }); +cells.push_back({ 11,15,4, -1.838625,0.212765 }); +// ibackleg=16 imodule=0 +// ibackleg=16 imodule=1 +// ibackleg=16 imodule=2 +cells.push_back({ 0,16,2, -1.629185,-0.212765 }); +cells.push_back({ 1,16,2, -1.618569,-0.212765 }); +cells.push_back({ 2,16,2, -1.607953,-0.212765 }); +cells.push_back({ 3,16,2, -1.597337,-0.212765 }); +cells.push_back({ 4,16,2, -1.586720,-0.212765 }); +cells.push_back({ 5,16,2, -1.576104,-0.212765 }); +cells.push_back({ 6,16,2, -1.565488,-0.212765 }); +cells.push_back({ 7,16,2, -1.554872,-0.212765 }); +cells.push_back({ 8,16,2, -1.544256,-0.212765 }); +cells.push_back({ 9,16,2, -1.533640,-0.212765 }); +cells.push_back({ 10,16,2, -1.523023,-0.212765 }); +cells.push_back({ 11,16,2, -1.512408,-0.212765 }); +// ibackleg=16 imodule=3 +cells.push_back({ 0,16,3, -1.628490,-0.000000 }); +cells.push_back({ 1,16,3, -1.618000,-0.000000 }); +cells.push_back({ 2,16,3, -1.607510,-0.000000 }); +cells.push_back({ 3,16,3, -1.597021,-0.000000 }); +cells.push_back({ 4,16,3, -1.586531,-0.000000 }); +cells.push_back({ 5,16,3, -1.576041,-0.000000 }); +cells.push_back({ 6,16,3, -1.565552,-0.000000 }); +cells.push_back({ 7,16,3, -1.555062,-0.000000 }); +cells.push_back({ 8,16,3, -1.544572,-0.000000 }); +cells.push_back({ 9,16,3, -1.534082,-0.000000 }); +cells.push_back({ 10,16,3, -1.523592,-0.000000 }); +cells.push_back({ 11,16,3, -1.513102,-0.000000 }); +// ibackleg=16 imodule=4 +cells.push_back({ 0,16,4, -1.512408,0.212765 }); +cells.push_back({ 1,16,4, -1.523023,0.212765 }); +cells.push_back({ 2,16,4, -1.533640,0.212765 }); +cells.push_back({ 3,16,4, -1.544256,0.212765 }); +cells.push_back({ 4,16,4, -1.554872,0.212765 }); +cells.push_back({ 5,16,4, -1.565488,0.212765 }); +cells.push_back({ 6,16,4, -1.576104,0.212765 }); +cells.push_back({ 7,16,4, -1.586720,0.212765 }); +cells.push_back({ 8,16,4, -1.597337,0.212765 }); +cells.push_back({ 9,16,4, -1.607953,0.212765 }); +cells.push_back({ 10,16,4, -1.618569,0.212765 }); +cells.push_back({ 11,16,4, -1.629185,0.212765 }); +// ibackleg=17 imodule=0 +// ibackleg=17 imodule=1 +// ibackleg=17 imodule=2 +cells.push_back({ 0,17,2, -1.419746,-0.212765 }); +cells.push_back({ 1,17,2, -1.409129,-0.212765 }); +cells.push_back({ 2,17,2, -1.398513,-0.212765 }); +cells.push_back({ 3,17,2, -1.387897,-0.212765 }); +cells.push_back({ 4,17,2, -1.377281,-0.212765 }); +cells.push_back({ 5,17,2, -1.366665,-0.212765 }); +cells.push_back({ 6,17,2, -1.356049,-0.212765 }); +cells.push_back({ 7,17,2, -1.345433,-0.212765 }); +cells.push_back({ 8,17,2, -1.334816,-0.212765 }); +cells.push_back({ 9,17,2, -1.324200,-0.212765 }); +cells.push_back({ 10,17,2, -1.313584,-0.212765 }); +cells.push_back({ 11,17,2, -1.302968,-0.212765 }); +// ibackleg=17 imodule=3 +cells.push_back({ 0,17,3, -1.419051,-0.000000 }); +cells.push_back({ 1,17,3, -1.408561,-0.000000 }); +cells.push_back({ 2,17,3, -1.398071,-0.000000 }); +cells.push_back({ 3,17,3, -1.387581,-0.000000 }); +cells.push_back({ 4,17,3, -1.377092,-0.000000 }); +cells.push_back({ 5,17,3, -1.366602,-0.000000 }); +cells.push_back({ 6,17,3, -1.356112,-0.000000 }); +cells.push_back({ 7,17,3, -1.345622,-0.000000 }); +cells.push_back({ 8,17,3, -1.335132,-0.000000 }); +cells.push_back({ 9,17,3, -1.324642,-0.000000 }); +cells.push_back({ 10,17,3, -1.314153,-0.000000 }); +cells.push_back({ 11,17,3, -1.303663,-0.000000 }); +// ibackleg=17 imodule=4 +cells.push_back({ 0,17,4, -1.302968,0.212765 }); +cells.push_back({ 1,17,4, -1.313584,0.212765 }); +cells.push_back({ 2,17,4, -1.324200,0.212765 }); +cells.push_back({ 3,17,4, -1.334816,0.212765 }); +cells.push_back({ 4,17,4, -1.345433,0.212765 }); +cells.push_back({ 5,17,4, -1.356049,0.212765 }); +cells.push_back({ 6,17,4, -1.366665,0.212765 }); +cells.push_back({ 7,17,4, -1.377281,0.212765 }); +cells.push_back({ 8,17,4, -1.387897,0.212765 }); +cells.push_back({ 9,17,4, -1.398513,0.212765 }); +cells.push_back({ 10,17,4, -1.409129,0.212765 }); +cells.push_back({ 11,17,4, -1.419746,0.212765 }); +// ibackleg=18 imodule=0 +// ibackleg=18 imodule=1 +// ibackleg=18 imodule=2 +cells.push_back({ 0,18,2, -1.210306,-0.212765 }); +cells.push_back({ 1,18,2, -1.199690,-0.212765 }); +cells.push_back({ 2,18,2, -1.189074,-0.212765 }); +cells.push_back({ 3,18,2, -1.178458,-0.212765 }); +cells.push_back({ 4,18,2, -1.167842,-0.212765 }); +cells.push_back({ 5,18,2, -1.157225,-0.212765 }); +cells.push_back({ 6,18,2, -1.146609,-0.212765 }); +cells.push_back({ 7,18,2, -1.135993,-0.212765 }); +cells.push_back({ 8,18,2, -1.125377,-0.212765 }); +cells.push_back({ 9,18,2, -1.114761,-0.212765 }); +cells.push_back({ 10,18,2, -1.104145,-0.212765 }); +cells.push_back({ 11,18,2, -1.093529,-0.212765 }); +// ibackleg=18 imodule=3 +cells.push_back({ 0,18,3, -1.209611,-0.000000 }); +cells.push_back({ 1,18,3, -1.199121,-0.000000 }); +cells.push_back({ 2,18,3, -1.188632,-0.000000 }); +cells.push_back({ 3,18,3, -1.178142,-0.000000 }); +cells.push_back({ 4,18,3, -1.167652,-0.000000 }); +cells.push_back({ 5,18,3, -1.157162,-0.000000 }); +cells.push_back({ 6,18,3, -1.146673,-0.000000 }); +cells.push_back({ 7,18,3, -1.136183,-0.000000 }); +cells.push_back({ 8,18,3, -1.125693,-0.000000 }); +cells.push_back({ 9,18,3, -1.115203,-0.000000 }); +cells.push_back({ 10,18,3, -1.104713,-0.000000 }); +cells.push_back({ 11,18,3, -1.094223,-0.000000 }); +// ibackleg=18 imodule=4 +cells.push_back({ 0,18,4, -1.093529,0.212765 }); +cells.push_back({ 1,18,4, -1.104145,0.212765 }); +cells.push_back({ 2,18,4, -1.114761,0.212765 }); +cells.push_back({ 3,18,4, -1.125377,0.212765 }); +cells.push_back({ 4,18,4, -1.135993,0.212765 }); +cells.push_back({ 5,18,4, -1.146609,0.212765 }); +cells.push_back({ 6,18,4, -1.157225,0.212765 }); +cells.push_back({ 7,18,4, -1.167842,0.212765 }); +cells.push_back({ 8,18,4, -1.178458,0.212765 }); +cells.push_back({ 9,18,4, -1.189074,0.212765 }); +cells.push_back({ 10,18,4, -1.199690,0.212765 }); +cells.push_back({ 11,18,4, -1.210306,0.212765 }); +// ibackleg=19 imodule=0 +// ibackleg=19 imodule=1 +// ibackleg=19 imodule=2 +cells.push_back({ 0,19,2, -1.000867,-0.212765 }); +cells.push_back({ 1,19,2, -0.990250,-0.212765 }); +cells.push_back({ 2,19,2, -0.979634,-0.212765 }); +cells.push_back({ 3,19,2, -0.969018,-0.212765 }); +cells.push_back({ 4,19,2, -0.958402,-0.212765 }); +cells.push_back({ 5,19,2, -0.947786,-0.212765 }); +cells.push_back({ 6,19,2, -0.937170,-0.212765 }); +cells.push_back({ 7,19,2, -0.926554,-0.212765 }); +cells.push_back({ 8,19,2, -0.915937,-0.212765 }); +cells.push_back({ 9,19,2, -0.905321,-0.212765 }); +cells.push_back({ 10,19,2, -0.894705,-0.212765 }); +cells.push_back({ 11,19,2, -0.884089,-0.212765 }); +// ibackleg=19 imodule=3 +cells.push_back({ 0,19,3, -1.000172,-0.000000 }); +cells.push_back({ 1,19,3, -0.989682,-0.000000 }); +cells.push_back({ 2,19,3, -0.979192,-0.000000 }); +cells.push_back({ 3,19,3, -0.968702,-0.000000 }); +cells.push_back({ 4,19,3, -0.958213,-0.000000 }); +cells.push_back({ 5,19,3, -0.947723,-0.000000 }); +cells.push_back({ 6,19,3, -0.937233,-0.000000 }); +cells.push_back({ 7,19,3, -0.926743,-0.000000 }); +cells.push_back({ 8,19,3, -0.916253,-0.000000 }); +cells.push_back({ 9,19,3, -0.905763,-0.000000 }); +cells.push_back({ 10,19,3, -0.895274,-0.000000 }); +cells.push_back({ 11,19,3, -0.884784,-0.000000 }); +// ibackleg=19 imodule=4 +cells.push_back({ 0,19,4, -0.884089,0.212765 }); +cells.push_back({ 1,19,4, -0.894705,0.212765 }); +cells.push_back({ 2,19,4, -0.905321,0.212765 }); +cells.push_back({ 3,19,4, -0.915937,0.212765 }); +cells.push_back({ 4,19,4, -0.926554,0.212765 }); +cells.push_back({ 5,19,4, -0.937170,0.212765 }); +cells.push_back({ 6,19,4, -0.947786,0.212765 }); +cells.push_back({ 7,19,4, -0.958402,0.212765 }); +cells.push_back({ 8,19,4, -0.969018,0.212765 }); +cells.push_back({ 9,19,4, -0.979634,0.212765 }); +cells.push_back({ 10,19,4, -0.990250,0.212765 }); +cells.push_back({ 11,19,4, -1.000867,0.212765 }); +// ibackleg=20 imodule=0 +// ibackleg=20 imodule=1 +// ibackleg=20 imodule=2 +cells.push_back({ 0,20,2, -0.791427,-0.212765 }); +cells.push_back({ 1,20,2, -0.780811,-0.212765 }); +cells.push_back({ 2,20,2, -0.770195,-0.212765 }); +cells.push_back({ 3,20,2, -0.759579,-0.212765 }); +cells.push_back({ 4,20,2, -0.748963,-0.212765 }); +cells.push_back({ 5,20,2, -0.738346,-0.212765 }); +cells.push_back({ 6,20,2, -0.727730,-0.212765 }); +cells.push_back({ 7,20,2, -0.717114,-0.212765 }); +cells.push_back({ 8,20,2, -0.706498,-0.212765 }); +cells.push_back({ 9,20,2, -0.695882,-0.212765 }); +cells.push_back({ 10,20,2, -0.685266,-0.212765 }); +cells.push_back({ 11,20,2, -0.674650,-0.212765 }); +// ibackleg=20 imodule=3 +cells.push_back({ 0,20,3, -0.790732,-0.000000 }); +cells.push_back({ 1,20,3, -0.780242,-0.000000 }); +cells.push_back({ 2,20,3, -0.769753,-0.000000 }); +cells.push_back({ 3,20,3, -0.759263,-0.000000 }); +cells.push_back({ 4,20,3, -0.748773,-0.000000 }); +cells.push_back({ 5,20,3, -0.738283,-0.000000 }); +cells.push_back({ 6,20,3, -0.727794,-0.000000 }); +cells.push_back({ 7,20,3, -0.717304,-0.000000 }); +cells.push_back({ 8,20,3, -0.706814,-0.000000 }); +cells.push_back({ 9,20,3, -0.696324,-0.000000 }); +cells.push_back({ 10,20,3, -0.685834,-0.000000 }); +cells.push_back({ 11,20,3, -0.675344,-0.000000 }); +// ibackleg=20 imodule=4 +cells.push_back({ 0,20,4, -0.674650,0.212765 }); +cells.push_back({ 1,20,4, -0.685266,0.212765 }); +cells.push_back({ 2,20,4, -0.695882,0.212765 }); +cells.push_back({ 3,20,4, -0.706498,0.212765 }); +cells.push_back({ 4,20,4, -0.717114,0.212765 }); +cells.push_back({ 5,20,4, -0.727730,0.212765 }); +cells.push_back({ 6,20,4, -0.738346,0.212765 }); +cells.push_back({ 7,20,4, -0.748963,0.212765 }); +cells.push_back({ 8,20,4, -0.759579,0.212765 }); +cells.push_back({ 9,20,4, -0.770195,0.212765 }); +cells.push_back({ 10,20,4, -0.780811,0.212765 }); +cells.push_back({ 11,20,4, -0.791427,0.212765 }); +// ibackleg=21 imodule=0 +// ibackleg=21 imodule=1 +cells.push_back({ 0,21,1, -0.582090,-0.416592 }); +cells.push_back({ 1,21,1, -0.571456,-0.416592 }); +cells.push_back({ 2,21,1, -0.560821,-0.416592 }); +cells.push_back({ 3,21,1, -0.550186,-0.416592 }); +cells.push_back({ 4,21,1, -0.539551,-0.416592 }); +cells.push_back({ 5,21,1, -0.528916,-0.416592 }); +cells.push_back({ 6,21,1, -0.518281,-0.416592 }); +cells.push_back({ 7,21,1, -0.507646,-0.416592 }); +cells.push_back({ 8,21,1, -0.497011,-0.416592 }); +cells.push_back({ 9,21,1, -0.486377,-0.416592 }); +cells.push_back({ 10,21,1, -0.475742,-0.416592 }); +cells.push_back({ 11,21,1, -0.465107,-0.416592 }); +// ibackleg=21 imodule=2 +cells.push_back({ 0,21,2, -0.582805,-0.212765 }); +cells.push_back({ 1,21,2, -0.572040,-0.212765 }); +cells.push_back({ 2,21,2, -0.561275,-0.212765 }); +cells.push_back({ 3,21,2, -0.550511,-0.212765 }); +cells.push_back({ 4,21,2, -0.539746,-0.212765 }); +cells.push_back({ 5,21,2, -0.528981,-0.212765 }); +cells.push_back({ 6,21,2, -0.518216,-0.212765 }); +cells.push_back({ 7,21,2, -0.507452,-0.212765 }); +cells.push_back({ 8,21,2, -0.496687,-0.212765 }); +cells.push_back({ 9,21,2, -0.485922,-0.212765 }); +cells.push_back({ 10,21,2, -0.475158,-0.212765 }); +cells.push_back({ 11,21,2, -0.464393,-0.212765 }); +// ibackleg=21 imodule=3 +cells.push_back({ 0,21,3, -0.582090,-0.000000 }); +cells.push_back({ 1,21,3, -0.571456,-0.000000 }); +cells.push_back({ 2,21,3, -0.560821,-0.000000 }); +cells.push_back({ 3,21,3, -0.550186,-0.000000 }); +cells.push_back({ 4,21,3, -0.539551,-0.000000 }); +cells.push_back({ 5,21,3, -0.528916,-0.000000 }); +cells.push_back({ 6,21,3, -0.518281,-0.000000 }); +cells.push_back({ 7,21,3, -0.507646,-0.000000 }); +cells.push_back({ 8,21,3, -0.497011,-0.000000 }); +cells.push_back({ 9,21,3, -0.486377,-0.000000 }); +cells.push_back({ 10,21,3, -0.475742,-0.000000 }); +cells.push_back({ 11,21,3, -0.465107,-0.000000 }); +// ibackleg=21 imodule=4 +cells.push_back({ 0,21,4, -0.464393,0.212765 }); +cells.push_back({ 1,21,4, -0.475158,0.212765 }); +cells.push_back({ 2,21,4, -0.485922,0.212765 }); +cells.push_back({ 3,21,4, -0.496687,0.212765 }); +cells.push_back({ 4,21,4, -0.507452,0.212765 }); +cells.push_back({ 5,21,4, -0.518216,0.212765 }); +cells.push_back({ 6,21,4, -0.528981,0.212765 }); +cells.push_back({ 7,21,4, -0.539746,0.212765 }); +cells.push_back({ 8,21,4, -0.550511,0.212765 }); +cells.push_back({ 9,21,4, -0.561275,0.212765 }); +cells.push_back({ 10,21,4, -0.572040,0.212765 }); +cells.push_back({ 11,21,4, -0.582805,0.212765 }); +// ibackleg=22 imodule=0 +// ibackleg=22 imodule=1 +cells.push_back({ 0,22,1, -0.373936,-0.416592 }); +cells.push_back({ 1,22,1, -0.363067,-0.416592 }); +cells.push_back({ 2,22,1, -0.352198,-0.416592 }); +cells.push_back({ 3,22,1, -0.341330,-0.416592 }); +cells.push_back({ 4,22,1, -0.330462,-0.416592 }); +cells.push_back({ 5,22,1, -0.319593,-0.416592 }); +cells.push_back({ 6,22,1, -0.308725,-0.416592 }); +cells.push_back({ 7,22,1, -0.297857,-0.416592 }); +cells.push_back({ 8,22,1, -0.286988,-0.416592 }); +cells.push_back({ 9,22,1, -0.276120,-0.416592 }); +cells.push_back({ 10,22,1, -0.265251,-0.416592 }); +cells.push_back({ 11,22,1, -0.254383,-0.416592 }); +// ibackleg=22 imodule=2 +cells.push_back({ 0,22,2, -0.374681,-0.212765 }); +cells.push_back({ 1,22,2, -0.363677,-0.212765 }); +cells.push_back({ 2,22,2, -0.352673,-0.212765 }); +cells.push_back({ 3,22,2, -0.341669,-0.212765 }); +cells.push_back({ 4,22,2, -0.330665,-0.212765 }); +cells.push_back({ 5,22,2, -0.319661,-0.212765 }); +cells.push_back({ 6,22,2, -0.308657,-0.212765 }); +cells.push_back({ 7,22,2, -0.297653,-0.212765 }); +cells.push_back({ 8,22,2, -0.286649,-0.212765 }); +cells.push_back({ 9,22,2, -0.275645,-0.212765 }); +cells.push_back({ 10,22,2, -0.264641,-0.212765 }); +cells.push_back({ 11,22,2, -0.253637,-0.212765 }); +// ibackleg=22 imodule=3 +cells.push_back({ 0,22,3, -0.373936,-0.000000 }); +cells.push_back({ 1,22,3, -0.363067,-0.000000 }); +cells.push_back({ 2,22,3, -0.352198,-0.000000 }); +cells.push_back({ 3,22,3, -0.341330,-0.000000 }); +cells.push_back({ 4,22,3, -0.330462,-0.000000 }); +cells.push_back({ 5,22,3, -0.319593,-0.000000 }); +cells.push_back({ 6,22,3, -0.308725,-0.000000 }); +cells.push_back({ 7,22,3, -0.297857,-0.000000 }); +cells.push_back({ 8,22,3, -0.286988,-0.000000 }); +cells.push_back({ 9,22,3, -0.276120,-0.000000 }); +cells.push_back({ 10,22,3, -0.265251,-0.000000 }); +cells.push_back({ 11,22,3, -0.254383,-0.000000 }); +// ibackleg=22 imodule=4 +cells.push_back({ 0,22,4, -0.253637,0.212765 }); +cells.push_back({ 1,22,4, -0.264641,0.212765 }); +cells.push_back({ 2,22,4, -0.275645,0.212765 }); +cells.push_back({ 3,22,4, -0.286649,0.212765 }); +cells.push_back({ 4,22,4, -0.297653,0.212765 }); +cells.push_back({ 5,22,4, -0.308657,0.212765 }); +cells.push_back({ 6,22,4, -0.319661,0.212765 }); +cells.push_back({ 7,22,4, -0.330665,0.212765 }); +cells.push_back({ 8,22,4, -0.341669,0.212765 }); +cells.push_back({ 9,22,4, -0.352673,0.212765 }); +cells.push_back({ 10,22,4, -0.363677,0.212765 }); +cells.push_back({ 11,22,4, -0.374681,0.212765 }); +// ibackleg=23 imodule=0 +// ibackleg=23 imodule=1 +// ibackleg=23 imodule=2 +// ibackleg=23 imodule=3 +// ibackleg=23 imodule=4 +// ibackleg=24 imodule=0 +// ibackleg=24 imodule=1 +cells.push_back({ 0,24,1, 0.066479,-0.416592 }); +cells.push_back({ 1,24,1, 0.077280,-0.416592 }); +cells.push_back({ 2,24,1, 0.088080,-0.416592 }); +cells.push_back({ 3,24,1, 0.098881,-0.416592 }); +cells.push_back({ 4,24,1, 0.109682,-0.416592 }); +cells.push_back({ 5,24,1, 0.120482,-0.416592 }); +cells.push_back({ 6,24,1, 0.131283,-0.416592 }); +cells.push_back({ 7,24,1, 0.142084,-0.416592 }); +cells.push_back({ 8,24,1, 0.152884,-0.416592 }); +cells.push_back({ 9,24,1, 0.163685,-0.416592 }); +cells.push_back({ 10,24,1, 0.174485,-0.416592 }); +cells.push_back({ 11,24,1, 0.185286,-0.416592 }); +// ibackleg=24 imodule=2 +cells.push_back({ 0,24,2, 0.066005,-0.212765 }); +cells.push_back({ 1,24,2, 0.076940,-0.212765 }); +cells.push_back({ 2,24,2, 0.087874,-0.212765 }); +cells.push_back({ 3,24,2, 0.098809,-0.212765 }); +cells.push_back({ 4,24,2, 0.109743,-0.212765 }); +cells.push_back({ 5,24,2, 0.120678,-0.212765 }); +cells.push_back({ 6,24,2, 0.131612,-0.212765 }); +cells.push_back({ 7,24,2, 0.142547,-0.212765 }); +cells.push_back({ 8,24,2, 0.153481,-0.212765 }); +cells.push_back({ 9,24,2, 0.164416,-0.212765 }); +cells.push_back({ 10,24,2, 0.175351,-0.212765 }); +cells.push_back({ 11,24,2, 0.186285,-0.212765 }); +// ibackleg=24 imodule=3 +cells.push_back({ 0,24,3, 0.066479,-0.000000 }); +cells.push_back({ 1,24,3, 0.077280,-0.000000 }); +cells.push_back({ 2,24,3, 0.088080,-0.000000 }); +cells.push_back({ 3,24,3, 0.098881,-0.000000 }); +cells.push_back({ 4,24,3, 0.109682,-0.000000 }); +cells.push_back({ 5,24,3, 0.120482,-0.000000 }); +cells.push_back({ 6,24,3, 0.131283,-0.000000 }); +cells.push_back({ 7,24,3, 0.142084,-0.000000 }); +cells.push_back({ 8,24,3, 0.152884,-0.000000 }); +cells.push_back({ 9,24,3, 0.163685,-0.000000 }); +cells.push_back({ 10,24,3, 0.174485,-0.000000 }); +cells.push_back({ 11,24,3, 0.185286,-0.000000 }); +// ibackleg=24 imodule=4 +cells.push_back({ 0,24,4, 0.186285,0.212765 }); +cells.push_back({ 1,24,4, 0.175351,0.212765 }); +cells.push_back({ 2,24,4, 0.164416,0.212765 }); +cells.push_back({ 3,24,4, 0.153481,0.212765 }); +cells.push_back({ 4,24,4, 0.142547,0.212765 }); +cells.push_back({ 5,24,4, 0.131612,0.212765 }); +cells.push_back({ 6,24,4, 0.120678,0.212765 }); +cells.push_back({ 7,24,4, 0.109743,0.212765 }); +cells.push_back({ 8,24,4, 0.098809,0.212765 }); +cells.push_back({ 9,24,4, 0.087874,0.212765 }); +cells.push_back({ 10,24,4, 0.076940,0.212765 }); +cells.push_back({ 11,24,4, 0.066005,0.212765 }); +// ibackleg=25 imodule=0 +// ibackleg=25 imodule=1 +cells.push_back({ 0,25,1, 0.254383,-0.416592 }); +cells.push_back({ 1,25,1, 0.265252,-0.416592 }); +cells.push_back({ 2,25,1, 0.276120,-0.416592 }); +cells.push_back({ 3,25,1, 0.286988,-0.416592 }); +cells.push_back({ 4,25,1, 0.297857,-0.416592 }); +cells.push_back({ 5,25,1, 0.308725,-0.416592 }); +cells.push_back({ 6,25,1, 0.319593,-0.416592 }); +cells.push_back({ 7,25,1, 0.330462,-0.416592 }); +cells.push_back({ 8,25,1, 0.341330,-0.416592 }); +cells.push_back({ 9,25,1, 0.352199,-0.416592 }); +cells.push_back({ 10,25,1, 0.363067,-0.416592 }); +cells.push_back({ 11,25,1, 0.373935,-0.416592 }); +// ibackleg=25 imodule=2 +cells.push_back({ 0,25,2, 0.253637,-0.212765 }); +cells.push_back({ 1,25,2, 0.264641,-0.212765 }); +cells.push_back({ 2,25,2, 0.275645,-0.212765 }); +cells.push_back({ 3,25,2, 0.286649,-0.212765 }); +cells.push_back({ 4,25,2, 0.297653,-0.212765 }); +cells.push_back({ 5,25,2, 0.308657,-0.212765 }); +cells.push_back({ 6,25,2, 0.319661,-0.212765 }); +cells.push_back({ 7,25,2, 0.330665,-0.212765 }); +cells.push_back({ 8,25,2, 0.341669,-0.212765 }); +cells.push_back({ 9,25,2, 0.352673,-0.212765 }); +cells.push_back({ 10,25,2, 0.363677,-0.212765 }); +cells.push_back({ 11,25,2, 0.374682,-0.212765 }); +// ibackleg=25 imodule=3 +cells.push_back({ 0,25,3, 0.254383,-0.000000 }); +cells.push_back({ 1,25,3, 0.265252,-0.000000 }); +cells.push_back({ 2,25,3, 0.276120,-0.000000 }); +cells.push_back({ 3,25,3, 0.286988,-0.000000 }); +cells.push_back({ 4,25,3, 0.297857,-0.000000 }); +cells.push_back({ 5,25,3, 0.308725,-0.000000 }); +cells.push_back({ 6,25,3, 0.319593,-0.000000 }); +cells.push_back({ 7,25,3, 0.330462,-0.000000 }); +cells.push_back({ 8,25,3, 0.341330,-0.000000 }); +cells.push_back({ 9,25,3, 0.352199,-0.000000 }); +cells.push_back({ 10,25,3, 0.363067,-0.000000 }); +cells.push_back({ 11,25,3, 0.373935,-0.000000 }); +// ibackleg=25 imodule=4 +cells.push_back({ 0,25,4, 0.374682,0.212765 }); +cells.push_back({ 1,25,4, 0.363677,0.212765 }); +cells.push_back({ 2,25,4, 0.352673,0.212765 }); +cells.push_back({ 3,25,4, 0.341669,0.212765 }); +cells.push_back({ 4,25,4, 0.330665,0.212765 }); +cells.push_back({ 5,25,4, 0.319661,0.212765 }); +cells.push_back({ 6,25,4, 0.308657,0.212765 }); +cells.push_back({ 7,25,4, 0.297653,0.212765 }); +cells.push_back({ 8,25,4, 0.286649,0.212765 }); +cells.push_back({ 9,25,4, 0.275645,0.212765 }); +cells.push_back({ 10,25,4, 0.264641,0.212765 }); +cells.push_back({ 11,25,4, 0.253637,0.212765 }); +// ibackleg=26 imodule=0 +// ibackleg=26 imodule=1 +cells.push_back({ 0,26,1, 0.462821,-0.416592 }); +cells.push_back({ 1,26,1, 0.473872,-0.416592 }); +cells.push_back({ 2,26,1, 0.484922,-0.416592 }); +cells.push_back({ 3,26,1, 0.495973,-0.416592 }); +cells.push_back({ 4,26,1, 0.507023,-0.416592 }); +cells.push_back({ 5,26,1, 0.518074,-0.416592 }); +cells.push_back({ 6,26,1, 0.529124,-0.416592 }); +cells.push_back({ 7,26,1, 0.540174,-0.416592 }); +cells.push_back({ 8,26,1, 0.551225,-0.416592 }); +cells.push_back({ 9,26,1, 0.562275,-0.416592 }); +cells.push_back({ 10,26,1, 0.573326,-0.416592 }); +cells.push_back({ 11,26,1, 0.584376,-0.416592 }); +// ibackleg=26 imodule=2 +cells.push_back({ 0,26,2, 0.462050,-0.212765 }); +cells.push_back({ 1,26,2, 0.473241,-0.212765 }); +cells.push_back({ 2,26,2, 0.484431,-0.212765 }); +cells.push_back({ 3,26,2, 0.495622,-0.212765 }); +cells.push_back({ 4,26,2, 0.506813,-0.212765 }); +cells.push_back({ 5,26,2, 0.518003,-0.212765 }); +cells.push_back({ 6,26,2, 0.529194,-0.212765 }); +cells.push_back({ 7,26,2, 0.540385,-0.212765 }); +cells.push_back({ 8,26,2, 0.551576,-0.212765 }); +cells.push_back({ 9,26,2, 0.562766,-0.212765 }); +cells.push_back({ 10,26,2, 0.573957,-0.212765 }); +cells.push_back({ 11,26,2, 0.585148,-0.212765 }); +// ibackleg=26 imodule=3 +cells.push_back({ 0,26,3, 0.462821,-0.000000 }); +cells.push_back({ 1,26,3, 0.473872,-0.000000 }); +cells.push_back({ 2,26,3, 0.484922,-0.000000 }); +cells.push_back({ 3,26,3, 0.495973,-0.000000 }); +cells.push_back({ 4,26,3, 0.507023,-0.000000 }); +cells.push_back({ 5,26,3, 0.518074,-0.000000 }); +cells.push_back({ 6,26,3, 0.529124,-0.000000 }); +cells.push_back({ 7,26,3, 0.540174,-0.000000 }); +cells.push_back({ 8,26,3, 0.551225,-0.000000 }); +cells.push_back({ 9,26,3, 0.562275,-0.000000 }); +cells.push_back({ 10,26,3, 0.573326,-0.000000 }); +cells.push_back({ 11,26,3, 0.584376,-0.000000 }); +// ibackleg=26 imodule=4 +cells.push_back({ 0,26,4, 0.585148,0.212765 }); +cells.push_back({ 1,26,4, 0.573957,0.212765 }); +cells.push_back({ 2,26,4, 0.562766,0.212765 }); +cells.push_back({ 3,26,4, 0.551576,0.212765 }); +cells.push_back({ 4,26,4, 0.540385,0.212765 }); +cells.push_back({ 5,26,4, 0.529194,0.212765 }); +cells.push_back({ 6,26,4, 0.518003,0.212765 }); +cells.push_back({ 7,26,4, 0.506813,0.212765 }); +cells.push_back({ 8,26,4, 0.495622,0.212765 }); +cells.push_back({ 9,26,4, 0.484431,0.212765 }); +cells.push_back({ 10,26,4, 0.473241,0.212765 }); +cells.push_back({ 11,26,4, 0.462050,0.212765 }); +// ibackleg=27 imodule=0 +// ibackleg=27 imodule=1 +cells.push_back({ 0,27,1, 0.672261,-0.416592 }); +cells.push_back({ 1,27,1, 0.683311,-0.416592 }); +cells.push_back({ 2,27,1, 0.694362,-0.416592 }); +cells.push_back({ 3,27,1, 0.705412,-0.416592 }); +cells.push_back({ 4,27,1, 0.716463,-0.416592 }); +cells.push_back({ 5,27,1, 0.727513,-0.416592 }); +cells.push_back({ 6,27,1, 0.738563,-0.416592 }); +cells.push_back({ 7,27,1, 0.749614,-0.416592 }); +cells.push_back({ 8,27,1, 0.760664,-0.416592 }); +cells.push_back({ 9,27,1, 0.771715,-0.416592 }); +cells.push_back({ 10,27,1, 0.782765,-0.416592 }); +cells.push_back({ 11,27,1, 0.793816,-0.416592 }); +// ibackleg=27 imodule=2 +cells.push_back({ 0,27,2, 0.671489,-0.212765 }); +cells.push_back({ 1,27,2, 0.682680,-0.212765 }); +cells.push_back({ 2,27,2, 0.693871,-0.212765 }); +cells.push_back({ 3,27,2, 0.705061,-0.212765 }); +cells.push_back({ 4,27,2, 0.716252,-0.212765 }); +cells.push_back({ 5,27,2, 0.727443,-0.212765 }); +cells.push_back({ 6,27,2, 0.738634,-0.212765 }); +cells.push_back({ 7,27,2, 0.749824,-0.212765 }); +cells.push_back({ 8,27,2, 0.761015,-0.212765 }); +cells.push_back({ 9,27,2, 0.772206,-0.212765 }); +cells.push_back({ 10,27,2, 0.783396,-0.212765 }); +cells.push_back({ 11,27,2, 0.794587,-0.212765 }); +// ibackleg=27 imodule=3 +cells.push_back({ 0,27,3, 0.672261,-0.000000 }); +cells.push_back({ 1,27,3, 0.683311,-0.000000 }); +cells.push_back({ 2,27,3, 0.694362,-0.000000 }); +cells.push_back({ 3,27,3, 0.705412,-0.000000 }); +cells.push_back({ 4,27,3, 0.716463,-0.000000 }); +cells.push_back({ 5,27,3, 0.727513,-0.000000 }); +cells.push_back({ 6,27,3, 0.738563,-0.000000 }); +cells.push_back({ 7,27,3, 0.749614,-0.000000 }); +cells.push_back({ 8,27,3, 0.760664,-0.000000 }); +cells.push_back({ 9,27,3, 0.771715,-0.000000 }); +cells.push_back({ 10,27,3, 0.782765,-0.000000 }); +cells.push_back({ 11,27,3, 0.793816,-0.000000 }); +// ibackleg=27 imodule=4 +cells.push_back({ 0,27,4, 0.794587,0.212765 }); +cells.push_back({ 1,27,4, 0.783396,0.212765 }); +cells.push_back({ 2,27,4, 0.772206,0.212765 }); +cells.push_back({ 3,27,4, 0.761015,0.212765 }); +cells.push_back({ 4,27,4, 0.749824,0.212765 }); +cells.push_back({ 5,27,4, 0.738634,0.212765 }); +cells.push_back({ 6,27,4, 0.727443,0.212765 }); +cells.push_back({ 7,27,4, 0.716252,0.212765 }); +cells.push_back({ 8,27,4, 0.705061,0.212765 }); +cells.push_back({ 9,27,4, 0.693871,0.212765 }); +cells.push_back({ 10,27,4, 0.682680,0.212765 }); +cells.push_back({ 11,27,4, 0.671489,0.212765 }); +// ibackleg=28 imodule=0 +// ibackleg=28 imodule=1 +cells.push_back({ 0,28,1, 0.881700,-0.416592 }); +cells.push_back({ 1,28,1, 0.892751,-0.416592 }); +cells.push_back({ 2,28,1, 0.903801,-0.416592 }); +cells.push_back({ 3,28,1, 0.914852,-0.416592 }); +cells.push_back({ 4,28,1, 0.925902,-0.416592 }); +cells.push_back({ 5,28,1, 0.936953,-0.416592 }); +cells.push_back({ 6,28,1, 0.948003,-0.416592 }); +cells.push_back({ 7,28,1, 0.959053,-0.416592 }); +cells.push_back({ 8,28,1, 0.970104,-0.416592 }); +cells.push_back({ 9,28,1, 0.981154,-0.416592 }); +cells.push_back({ 10,28,1, 0.992205,-0.416592 }); +cells.push_back({ 11,28,1, 1.003255,-0.416592 }); +// ibackleg=28 imodule=2 +cells.push_back({ 0,28,2, 0.880929,-0.212765 }); +cells.push_back({ 1,28,2, 0.892120,-0.212765 }); +cells.push_back({ 2,28,2, 0.903310,-0.212765 }); +cells.push_back({ 3,28,2, 0.914501,-0.212765 }); +cells.push_back({ 4,28,2, 0.925692,-0.212765 }); +cells.push_back({ 5,28,2, 0.936882,-0.212765 }); +cells.push_back({ 6,28,2, 0.948073,-0.212765 }); +cells.push_back({ 7,28,2, 0.959264,-0.212765 }); +cells.push_back({ 8,28,2, 0.970455,-0.212765 }); +cells.push_back({ 9,28,2, 0.981645,-0.212765 }); +cells.push_back({ 10,28,2, 0.992836,-0.212765 }); +cells.push_back({ 11,28,2, 1.004027,-0.212765 }); +// ibackleg=28 imodule=3 +cells.push_back({ 0,28,3, 0.881700,-0.000000 }); +cells.push_back({ 1,28,3, 0.892751,-0.000000 }); +cells.push_back({ 2,28,3, 0.903801,-0.000000 }); +cells.push_back({ 3,28,3, 0.914852,-0.000000 }); +cells.push_back({ 4,28,3, 0.925902,-0.000000 }); +cells.push_back({ 5,28,3, 0.936953,-0.000000 }); +cells.push_back({ 6,28,3, 0.948003,-0.000000 }); +cells.push_back({ 7,28,3, 0.959053,-0.000000 }); +cells.push_back({ 8,28,3, 0.970104,-0.000000 }); +cells.push_back({ 9,28,3, 0.981154,-0.000000 }); +cells.push_back({ 10,28,3, 0.992205,-0.000000 }); +cells.push_back({ 11,28,3, 1.003255,-0.000000 }); +// ibackleg=28 imodule=4 +cells.push_back({ 0,28,4, 1.004027,0.212765 }); +cells.push_back({ 1,28,4, 0.992836,0.212765 }); +cells.push_back({ 2,28,4, 0.981645,0.212765 }); +cells.push_back({ 3,28,4, 0.970455,0.212765 }); +cells.push_back({ 4,28,4, 0.959264,0.212765 }); +cells.push_back({ 5,28,4, 0.948073,0.212765 }); +cells.push_back({ 6,28,4, 0.936882,0.212765 }); +cells.push_back({ 7,28,4, 0.925692,0.212765 }); +cells.push_back({ 8,28,4, 0.914501,0.212765 }); +cells.push_back({ 9,28,4, 0.903310,0.212765 }); +cells.push_back({ 10,28,4, 0.892120,0.212765 }); +cells.push_back({ 11,28,4, 0.880929,0.212765 }); +// ibackleg=29 imodule=0 +// ibackleg=29 imodule=1 +cells.push_back({ 0,29,1, 1.091140,-0.416592 }); +cells.push_back({ 1,29,1, 1.102190,-0.416592 }); +cells.push_back({ 2,29,1, 1.113241,-0.416592 }); +cells.push_back({ 3,29,1, 1.124291,-0.416592 }); +cells.push_back({ 4,29,1, 1.135342,-0.416592 }); +cells.push_back({ 5,29,1, 1.146392,-0.416592 }); +cells.push_back({ 6,29,1, 1.157443,-0.416592 }); +cells.push_back({ 7,29,1, 1.168493,-0.416592 }); +cells.push_back({ 8,29,1, 1.179543,-0.416592 }); +cells.push_back({ 9,29,1, 1.190594,-0.416592 }); +cells.push_back({ 10,29,1, 1.201644,-0.416592 }); +cells.push_back({ 11,29,1, 1.212695,-0.416592 }); +// ibackleg=29 imodule=2 +cells.push_back({ 0,29,2, 1.090368,-0.212765 }); +cells.push_back({ 1,29,2, 1.101559,-0.212765 }); +cells.push_back({ 2,29,2, 1.112750,-0.212765 }); +cells.push_back({ 3,29,2, 1.123941,-0.212765 }); +cells.push_back({ 4,29,2, 1.135131,-0.212765 }); +cells.push_back({ 5,29,2, 1.146322,-0.212765 }); +cells.push_back({ 6,29,2, 1.157513,-0.212765 }); +cells.push_back({ 7,29,2, 1.168703,-0.212765 }); +cells.push_back({ 8,29,2, 1.179894,-0.212765 }); +cells.push_back({ 9,29,2, 1.191085,-0.212765 }); +cells.push_back({ 10,29,2, 1.202276,-0.212765 }); +cells.push_back({ 11,29,2, 1.213466,-0.212765 }); +// ibackleg=29 imodule=3 +cells.push_back({ 0,29,3, 1.091140,-0.000000 }); +cells.push_back({ 1,29,3, 1.102190,-0.000000 }); +cells.push_back({ 2,29,3, 1.113241,-0.000000 }); +cells.push_back({ 3,29,3, 1.124291,-0.000000 }); +cells.push_back({ 4,29,3, 1.135342,-0.000000 }); +cells.push_back({ 5,29,3, 1.146392,-0.000000 }); +cells.push_back({ 6,29,3, 1.157443,-0.000000 }); +cells.push_back({ 7,29,3, 1.168493,-0.000000 }); +cells.push_back({ 8,29,3, 1.179543,-0.000000 }); +cells.push_back({ 9,29,3, 1.190594,-0.000000 }); +cells.push_back({ 10,29,3, 1.201644,-0.000000 }); +cells.push_back({ 11,29,3, 1.212695,-0.000000 }); +// ibackleg=29 imodule=4 +cells.push_back({ 0,29,4, 1.213466,0.212765 }); +cells.push_back({ 1,29,4, 1.202276,0.212765 }); +cells.push_back({ 2,29,4, 1.191085,0.212765 }); +cells.push_back({ 3,29,4, 1.179894,0.212765 }); +cells.push_back({ 4,29,4, 1.168703,0.212765 }); +cells.push_back({ 5,29,4, 1.157513,0.212765 }); +cells.push_back({ 6,29,4, 1.146322,0.212765 }); +cells.push_back({ 7,29,4, 1.135131,0.212765 }); +cells.push_back({ 8,29,4, 1.123941,0.212765 }); +cells.push_back({ 9,29,4, 1.112750,0.212765 }); +cells.push_back({ 10,29,4, 1.101559,0.212765 }); +cells.push_back({ 11,29,4, 1.090368,0.212765 }); + +} diff --git a/StRoot/StGeant4Maker/tests/unit_test_mtd_response.C b/StRoot/StGeant4Maker/tests/unit_test_mtd_response.C new file mode 100644 index 00000000000..4a7476a3979 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_mtd_response.C @@ -0,0 +1,89 @@ +#include "tests/unit_tests.h" + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; + +//___________________________________________________________________ +void unit_test_mtd_response( int nevents=1000 ) { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and EPD hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + auto* chain = StMaker::GetChain(); + + TFile* file = TFile::Open("mtd.response.root","recreate"); + TH1F* hOneMuon = new TH1F("hOneMuon","Single muon incident @ E=10 GeV; dE [eV]",100,0.,10.0); + TH2F* hEtaPhi = new TH2F("hEtaPhi","Phi vs Eta; #eta; #phi",90,-180.0,180.0,100,-0.5,0.5); + + auto sumHits = [=](const char* name, float sf=1.0 ) -> double { + assert(sf>0); + float sum = 0.; + auto* table = dynamic_cast( chain->GetDataSet( "g2t_mtd_hit" ) ) ; + if (table) + for ( int i=0;iGetNRows();i++ ){ + const g2t_mtd_hit_st* hit = static_cast( table->At(i) ); + sum+=hit->de; + }; + return 1.0*1000.0*1000.*1000.*sum; + // GeV MeV keV eV + }; + + + + auto throw_particle = [=]( std::string type, int n=1, const double E=0.500, double etaMn=-0.45, double etaMx=0.45 ) { + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + for ( int i=0;iAddParticle(type.c_str()); + auto _mass = _part->GetMass(); // Get the mass of the proton + if ( E > _mass ) { + auto _pmom = TMath::Sqrt(E*E-_mass*_mass); + auto _eta = gRandom->Rndm() * ( etaMx - etaMn ) + etaMn; // random angle + auto _phi = gRandom->Rndm() * TMath::TwoPi(); + TVector3 unit(0,0,1); + unit.SetPtEtaPhi(1.0,_eta,_phi); + unit=unit.Unit(); + auto momentum=_pmom*unit; + momentum.Print(); + _part->SetPx( momentum[0] ); + _part->SetPy( momentum[1] ); + _part->SetPz( momentum[2] ); + _part->SetVx( 0 ); + _part->SetVy( 0 ); + _part->SetVz( 0 ); + } + else { + LOG_INFO << "ERROR: mass > E (no particle simulated)" << endm; + } + } + chain->Clear(); + chain->Make(); + }; + + for ( int ievent=0;ieventFill( sumHits( "g2t_mtd_hit" ) ); + auto* table = dynamic_cast( chain->GetDataSet( "g2t_mtd_hit" ) ) ; + if (table) + for ( int i=0;iGetNRows();i++ ){ + const g2t_mtd_hit_st* hit = static_cast( table->At(i) ); + // double de = hit->de * 1.0*1000.0*1000.*1000.0; + TVector3 pos( hit->x ); + double eta = pos.Eta(); + double phi = pos.Phi() * 180.0/TMath::Pi(); + if ( phi > 180.0 ) phi -= 360.0; + hEtaPhi->Fill(eta,phi); + }; + } + + file->Write(); + delete file; + +} diff --git a/StRoot/StGeant4Maker/tests/unit_test_multi_engine_emc.C b/StRoot/StGeant4Maker/tests/unit_test_multi_engine_emc.C new file mode 100644 index 00000000000..d2b2b43ae7d --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_multi_engine_emc.C @@ -0,0 +1,230 @@ +#include "tests/unit_tests.h" + +#include "StGeant4Maker.h" +#include "TMath.h" +#include "TProfile.h" + + + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set + >>; +#endif + +std::vector sampling_fraction_vs_pt; +std::vector sampling_fraction_vs_eta; +std::vector sampling_fraction_vs_phi; + +#include +//___________________________________________________________________ +const int neta = 40; +const int nphi = 120; +const double dphi = 3.0; +const double phi0 = 0.0; // not really... + + +//___________________________________________________________________ + +// Obtain a track pointer from the given hit +template const g2t_track_st* get_track( Hit* hit ) { + int index = hit->track_p - 1; + if ( index < 0 || index > track_table->GetNRows() ) { + return 0; + } + else { + return static_cast( track_table -> At( index ) ); + } +} + +//___________________________________________________________________ +std::vector mean_, median_, min_, max_, error_of_mean_, sum_; +std::vector nhits_; +void trackLoop() { + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_emc_hit") ) ; + + Accumulator_t edep; // Energy deposition + + std::map< int, double > edep_per_track; + + // Loop on all hits and accumulate all energy depositions + int nh = hit_table->GetNRows(); + nhits_.push_back(nh); + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + + // accumulate energy deposition + edep( hit->de ); + + // accumulate sampling fraction + auto* track = get_track( hit ); + if ( track ) { + double pt = track->pt; + double eta = track->eta; + if ( pt > 0.100 && pt < 10.0 ) { + LOG_INFO << "Accumulate track->id = " << track->id << " hit de = " << hit->de << std::endl; + edep_per_track[ track->id ] += hit->de; // running sum + } + } + + } + + // Fill histograms + for ( int i=0;iGetNRows(); i++ ) { + const g2t_track_st* track = static_cast( track_table->At(i) ); + if ( track ) { + double pt = track->pt; + double eta = track->eta; + // todo phi + double E = track->e + 1.0e-12; // prevent div by zero + LOG_INFO << "itrack=" << i << " idtruth=" << track->id << "Fill pt=" << pt << " eta=" << track->eta << " E=" << track->e << " edep=" << edep_per_track[ track->id ] << endm; + if ( pt > 0.100 && pt < 10.0 && eta > -0.95 && eta < 0.95 ) { + sampling_fraction_vs_pt.back()->Fill( pt, edep_per_track[ track->id ] / E ); + sampling_fraction_vs_eta.back()->Fill( eta, edep_per_track[ track->id ] / E ); + } + } + } + + + double _sum = boost::accumulators::sum(edep); + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + sum_.push_back(_sum); + mean_.push_back(_mean); + median_.push_back(_median); + min_.push_back(_min); + max_.push_back(_max); + error_of_mean_.push_back(_error_of_mean); + +} +//___________________________________________________________________ +void book_histograms() { + + const char* engines[] = { "geant3", "geant4" }; + assert(sampling_fraction_vs_pt.size() < sizeof(engines)/sizeof(const char*) ); + + TString base = Form( "%s_sampling_fraction_vs_", engines[ sampling_fraction_vs_pt.size() ] ); + TString title = Form( "EMC Sampling fraction [%s]", engines[ sampling_fraction_vs_pt.size() ] ); + + sampling_fraction_vs_pt.push_back ( new TProfile(base+"pt", title+";p_{T}", 50, 0., 10.0, 0.0, 1.0 ) ); + sampling_fraction_vs_eta.push_back( new TProfile(base+"eta", title+";#eta", 40, -0.95, 0.95, 0.0, 1.0 ) ); + sampling_fraction_vs_phi.push_back( new TProfile(base+"phi", title+";#phi", 60, 0., TMath::TwoPi(), 0.0, 1.0 ) ); + +} +//___________________________________________________________________ +void unit_test_multi_engine_emc( const char* part = "gamma", int ntracks = 10 ) { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Multi-engine testing of EMC" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << Form("GEANT3 response to %i 1 GeV photons %s",ntracks,part) << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + + auto* gm = dynamic_cast( StMaker::GetChain()->GetMaker("geant4star") ); + auto* stack = gm->stack(); + + TFile* output = new TFile(Form("unit_test_multi_engine_emc_%s.root",part),"recreate"); + + gm->SetEngineForModule( "CALB", 0 ); + book_histograms(); + throw_particle(ntracks, part, 0.09995, 10.00005, -0.55, 0.55, 0., TMath::TwoPi() ); + + stack->StackDump(); + + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_emc_hit") ) ; + + auto all_primary_tracks_have_hits = [=](g2t_track_st* begin_, g2t_track_st* end_) { + + + auto ret = PASS; + + int count = 0; + for ( const auto* track=begin_; track < end_; track++ ) { + + LOG_INFO << "Track " << track->id << " pid=" << track->eg_pid << " n emc hits = " << track-> n_emc_hit << endm; + if ( track->n_emc_hit <= 0 ) { + ret = FAIL; + } + if ( ++count == ntracks ) break; + + } + return ret; + + }; + + check_track_table( "All primary tracks have hits", all_primary_tracks_have_hits ); + + + return; + + + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Multi-engine testing of EMC" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << Form("Geant 4 response to %i 1 GeV %s",ntracks,part) << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + gm->SetEngineForModule( "CALB", 1 ); + book_histograms(); + + throw_particle(ntracks, part, 0.09995, 10.00005, -0.95, 0.95, 0., TMath::TwoPi() ); + // trackLoop(); + + output->Write(); + output->Close(); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Multi-engine testing of EMC" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << Form("GEANT3 vs Geant 4 response to %i 1 GeV %s",ntracks,part) << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + LOG_TEST << Form( "energy deposition: sum = %f %f keV", sum_[0], sum_[1] ) << std::endl; + LOG_TEST << Form( "energy deposition: mean = %f %f keV", mean_[0], mean_[1] ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f %f keV", median_[0], median_[1] ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f %f keV", min_[0], min_[1] ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f %f keV", max_[0], max_[1] ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f %f keV", error_of_mean_[0], error_of_mean_[1] ) << std::endl; + LOG_TEST << Form( "number of hits: %i %i ", nhits_[0], nhits_[1] ) << std::endl; + +} + + + diff --git a/StRoot/StGeant4Maker/tests/unit_test_muons.C b/StRoot/StGeant4Maker/tests/unit_test_muons.C new file mode 100644 index 00000000000..648611dc384 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_muons.C @@ -0,0 +1,391 @@ +#include "tests/unit_tests.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +#include + +StGeant4Maker* _g4mk = 0; + +using Accumulator_t = accumulator_set +>>; + + +const double GeV = 1; +const double MeV = 1E3; +const double keV = 1E6; +const double eV = 1E9; +const std::map scale2string = { + {GeV,"GeV"}, + {MeV,"MeV"}, + {keV,"keV"}, + {eV,"eV"} +}; + +// template double energy_deposit(const T* h) { return h->de; } +// template double path_length (const T* h) { return h->ds; } +// template double deds (const T* h) { +// double de = h->de; +// double ds = h->ds; +// double deds = -999; +// if ( ds > 0 ) deds = de / ds; +// return deds; +// } + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ +const int ntracks = 100; +//___________________________________________________________________ + +struct tpcTag { + static double energy_deposit(const g2t_tpc_hit_st* h){ return h->de; } + static double path_length(const g2t_tpc_hit_st* h){ return h->ds; } + static double de_ds(const g2t_tpc_hit_st* h ) { + double de = h->de; + double ds = h->ds; + double deds = -999; + if ( ds > 0 ) deds = de / ds; + return deds; + } +} tpc; // TPC hits +struct fstmTag { + static double energy_deposit(const g2t_fts_hit_st* h){ return h->de; } + static double path_length(const g2t_fts_hit_st* h){ return h->ds; } + static double de_ds(const g2t_fts_hit_st* h ) { + double de = h->de; + double ds = h->ds; + double deds = -999; + if ( ds > 0 ) deds = de / ds; + return deds; + } +} fstm; +struct stgcTag { + static double energy_deposit(const g2t_fts_hit_st* h){ return h->de; } + static double path_length(const g2t_fts_hit_st* h){ return h->ds; } + static double de_ds(const g2t_fts_hit_st* h ) { + double de = h->de; + double ds = h->ds; + double deds = -999; + if ( ds > 0 ) deds = de / ds; + return deds; + } +} stgc; + +struct bemcTag { + static double energy_deposit(const g2t_emc_hit_st* h){ return h->de; } +} bemc; // BEMC hits +struct bsmdTag { + static double energy_deposit(const g2t_emc_hit_st* h){ return h->de; } +} bsmd; // BSMD hits +struct eemcTag { + static double energy_deposit(const g2t_emc_hit_st* h){ return h->de; } +} eemc; // EEMC hits +struct esmdTag { + static double energy_deposit(const g2t_emc_hit_st* h){ return h->de; } +} esmd; // ESMD hits + +template struct HitTraits { + /* empty, this will not go well */ +}; +template<> struct HitTraits { + const std::string tableName = "g2t_tpc_hit"; + typedef g2t_tpc_hit_st hit_type; +}; +template<> struct HitTraits { + const std::string tableName = "g2t_emc_hit"; + typedef g2t_emc_hit_st hit_type; +}; +template<> struct HitTraits { + const std::string tableName = "g2t_smd_hit"; + typedef g2t_emc_hit_st hit_type; +}; +template<> struct HitTraits { + const std::string tableName = "g2t_eem_hit"; + typedef g2t_emc_hit_st hit_type; +}; +template<> struct HitTraits { + const std::string tableName = "g2t_esm_hit"; + typedef g2t_emc_hit_st hit_type; +}; +template<> struct HitTraits { + const std::string tableName = "g2t_fsi_hit"; + typedef g2t_fts_hit_st hit_type; +}; +template<> struct HitTraits { + const std::string tableName = "g2t_stg_hit"; + typedef g2t_fts_hit_st hit_type; +}; + +template +void check_hit_distribution( std::string message, Tag, + std::function::hit_type *)> stat, + std::function eval, + double scale=1.0, + std::function::hit_type *)> filt = [](const typename HitTraits::hit_type *){ return true; } + ) { + Accumulator_t acc; + HitTraits traits; + TTable* table = static_cast( _g4mk->GetDataSet(traits.tableName.c_str()) ); + for ( int irow=0; irowGetNRows();irow++ ) { + auto* hit = static_cast::hit_type *>( table->At(irow) ); + if ( filt(hit) ) { + acc( stat(hit)*scale ); + } + } + LOG_TEST << message << " " << eval(acc) << std::endl; + +} + +void unit_test_muons() { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + auto* chain = StMaker::GetChain(); + auto* _kine = dynamic_cast ( chain->GetMaker("StarKine") ); + _g4mk = dynamic_cast ( chain->GetMaker("geant4star") ); + + double minPt = 0.100; + double maxPt = 10.000; + int nbinPt = 100; + + // Throw 1k gammas at BEMC, EEMC + _kine->Kine(3000,"e+,e-",4.9999,5.0001,-0.95,+2.00); + + chain->Clear(); + chain->Make(); + + check_hit_distribution( "BEMC sampling fraction (e+,e-)", bemc, bemc.energy_deposit, [=](const Accumulator_t& acc){ + std::string result = PASS; result += "\n"; + double _count = boost::accumulators::count(acc); + double _sum = boost::accumulators::sum(acc); + double _sf = _sum / 1000.0 / 5.0; + result += Form("Sampling fraction @ 5 GeV = %f\n",_sf); + return result; + }); + + check_hit_distribution( "EEMC sampling fraction (e+,e-)", eemc, eemc.energy_deposit, [=](const Accumulator_t& acc){ + std::string result = PASS; result += "\n"; + double _count = boost::accumulators::count(acc); + double _sum = boost::accumulators::sum(acc); + double _sf = _sum / 1000.0 / 5.0; + result += Form("Sampling fraction @ 5 GeV = %f\n",_sf); + return result; + }); + + return; + + _kine->Kine(ntracks,"mu+,mu-",0.100,10.00,-2.0,5.0); + + chain->Clear(); + chain->Make(); + + check_hit_distribution( "TPC energy deposit [keV] (muons)", tpc, tpc.energy_deposit, [=](const Accumulator_t& acc){ + std::string result = "TPC energy deposition " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::median(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "energy deposition: mean = %f\n", _mean ); + result+= Form( "energy deposition: median = %f\n", _median ); + result+= Form( "energy deposition: min = %f\n", _min ); + result+= Form( "energy deposition: max = %f\n", _max ); + result+= Form( "energy deposition: error of mean = %f\n", _error_of_mean ); + + return result; + },keV); + check_hit_distribution( "TPC path length (muons)", tpc, tpc.path_length , [=](const Accumulator_t& acc){ + std::string result = "TPC path length " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::mean(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "path length: mean = %f\n", _mean ); + result+= Form( "path length: median = %f\n", _median ); + result+= Form( "path length: min = %f\n", _min ); + result+= Form( "path length: max = %f\n", _max ); + result+= Form( "path length: error of mean = %f\n", _error_of_mean ); + + return result; + } ); + check_hit_distribution( "TPC dE/ds [keV/cm] (muons)", tpc, tpc.de_ds, [=](const Accumulator_t& acc){ + std::string result = "TPC dE/ds " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::mean(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "de/ds: mean = %f\n", _mean ); + result+= Form( "de/ds: median = %f\n", _median ); + result+= Form( "de/ds: min = %f\n", _min ); + result+= Form( "de/ds: max = %f\n", _max ); + result+= Form( "de/ds: error of mean = %f\n", _error_of_mean ); + + return result; + }, keV, [](const g2t_tpc_hit_st* h){ return h->ds>0; }); + + check_hit_distribution( "BEMC energy deposit [MeV] (muons)", bemc, bemc.energy_deposit, [=](const Accumulator_t& acc){ + std::string result = "BEMC energy deposition " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::median(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "energy deposition: mean = %f\n", _mean ); + result+= Form( "energy deposition: median = %f\n", _median ); + result+= Form( "energy deposition: min = %f\n", _min ); + result+= Form( "energy deposition: max = %f\n", _max ); + result+= Form( "energy deposition: error of mean = %f\n", _error_of_mean ); + + return result; + },MeV); + check_hit_distribution( "EEMC energy deposit [MeV] (muons)", eemc, eemc.energy_deposit, [=](const Accumulator_t& acc){ + std::string result = "EEMC energy deposition " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::median(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "energy deposition: mean = %f\n", _mean ); + result+= Form( "energy deposition: median = %f\n", _median ); + result+= Form( "energy deposition: min = %f\n", _min ); + result+= Form( "energy deposition: max = %f\n", _max ); + result+= Form( "energy deposition: error of mean = %f\n", _error_of_mean ); + + return result; + },MeV); + + + check_hit_distribution( "FSTM energy deposit [keV] (muons)", fstm, fstm.energy_deposit, [=](const Accumulator_t& acc){ + std::string result = "FSTM energy deposition " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::median(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "energy deposition: mean = %f\n", _mean ); + result+= Form( "energy deposition: median = %f\n", _median ); + result+= Form( "energy deposition: min = %f\n", _min ); + result+= Form( "energy deposition: max = %f\n", _max ); + result+= Form( "energy deposition: error of mean = %f\n", _error_of_mean ); + + return result; + },keV); + check_hit_distribution( "FSTM path length (muons)", fstm, fstm.path_length , [=](const Accumulator_t& acc){ + std::string result = "FSTM path length " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::mean(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "path length: mean = %f\n", _mean ); + result+= Form( "path length: median = %f\n", _median ); + result+= Form( "path length: min = %f\n", _min ); + result+= Form( "path length: max = %f\n", _max ); + result+= Form( "path length: error of mean = %f\n", _error_of_mean ); + + return result; + } ); + check_hit_distribution( "FSTM dE/ds [keV/cm] (muons)", fstm, fstm.de_ds, [=](const Accumulator_t& acc){ + std::string result = "FSTM dE/ds " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::mean(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "de/ds: mean = %f\n", _mean ); + result+= Form( "de/ds: median = %f\n", _median ); + result+= Form( "de/ds: min = %f\n", _min ); + result+= Form( "de/ds: max = %f\n", _max ); + result+= Form( "de/ds: error of mean = %f\n", _error_of_mean ); + + return result; + }, keV, [](const g2t_fts_hit_st* h){ return h->ds>0; }); + + check_hit_distribution( "STGC energy deposit [keV] (muons)", stgc, stgc.energy_deposit, [=](const Accumulator_t& acc){ + std::string result = "STGC energy deposition " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::median(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "energy deposition: mean = %f\n", _mean ); + result+= Form( "energy deposition: median = %f\n", _median ); + result+= Form( "energy deposition: min = %f\n", _min ); + result+= Form( "energy deposition: max = %f\n", _max ); + result+= Form( "energy deposition: error of mean = %f\n", _error_of_mean ); + + return result; + },keV); + check_hit_distribution( "STGC path length (muons)", stgc, stgc.path_length , [=](const Accumulator_t& acc){ + std::string result = "STGC path length " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::mean(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "path length: mean = %f\n", _mean ); + result+= Form( "path length: median = %f\n", _median ); + result+= Form( "path length: min = %f\n", _min ); + result+= Form( "path length: max = %f\n", _max ); + result+= Form( "path length: error of mean = %f\n", _error_of_mean ); + + return result; + } ); + check_hit_distribution( "STGC dE/ds [keV/cm] (muons)", stgc, stgc.de_ds, [=](const Accumulator_t& acc){ + std::string result = "STGC dE/ds " + PASS; result += "\n"; + double _mean = boost::accumulators::mean(acc); + double _median = boost::accumulators::mean(acc); + double _min = boost::accumulators::min( acc ); + double _max = boost::accumulators::max( acc ); + double _error_of_mean = boost::accumulators::error_of(acc); + + result+= Form( "de/ds: mean = %f\n", _mean ); + result+= Form( "de/ds: median = %f\n", _median ); + result+= Form( "de/ds: min = %f\n", _min ); + result+= Form( "de/ds: max = %f\n", _max ); + result+= Form( "de/ds: error of mean = %f\n", _error_of_mean ); + + return result; + }, keV, [](const g2t_fts_hit_st* h){ return h->ds>0; }); + + chain->Clear(); + +} +//___________________________________________________________________ diff --git a/StRoot/StGeant4Maker/tests/unit_test_single_engine_emc.C b/StRoot/StGeant4Maker/tests/unit_test_single_engine_emc.C new file mode 100644 index 00000000000..afe25744997 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_single_engine_emc.C @@ -0,0 +1,191 @@ +#include "tests/unit_tests.h" + +#include "StGeant4Maker.h" +#include "TMath.h" +#include "TProfile.h" + + + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set + >>; +#endif + +std::vector sampling_fraction_vs_pt; +std::vector sampling_fraction_vs_eta; +std::vector sampling_fraction_vs_phi; + +#include +//___________________________________________________________________ +const int neta = 40; +const int nphi = 120; +const double dphi = 3.0; +const double phi0 = 0.0; // not really... + + +//___________________________________________________________________ + +// Obtain a track pointer from the given hit +template const g2t_track_st* get_track( Hit* hit ) { + int index = hit->track_p - 1; + if ( index < 0 || index > track_table->GetNRows() ) { + return 0; + } + else { + return static_cast( track_table -> At( index ) ); + } +} + +//___________________________________________________________________ +std::vector mean_, median_, min_, max_, error_of_mean_, sum_; +std::vector nhits_; +void trackLoop() { + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_emc_hit") ) ; + + Accumulator_t edep; // Energy deposition + + std::map< int, double > edep_per_track; + + // Loop on all hits and accumulate all energy depositions + int nh = hit_table->GetNRows(); + nhits_.push_back(nh); + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + + // accumulate energy deposition + edep( hit->de ); + + // accumulate sampling fraction + auto* track = get_track( hit ); + if ( track ) { + double pt = track->pt; + double eta = track->eta; + if ( pt > 0.100 && pt < 10.0 ) { + LOG_INFO << "Accumulate track->id = " << track->id << " hit de = " << hit->de << std::endl; + edep_per_track[ track->id ] += hit->de; // running sum + } + } + + } + + // Fill histograms + for ( int i=0;iGetNRows(); i++ ) { + const g2t_track_st* track = static_cast( track_table->At(i) ); + if ( track ) { + double pt = track->pt; + double eta = track->eta; + // todo phi + double E = track->e + 1.0e-12; // prevent div by zero + LOG_INFO << "itrack=" << i << " idtruth=" << track->id << "Fill pt=" << pt << " eta=" << track->eta << " E=" << track->e << " edep=" << edep_per_track[ track->id ] << endl; + if ( pt > 0.100 && pt < 10.0 && eta > -0.95 && eta < 0.95 ) { + sampling_fraction_vs_pt.back()->Fill( pt, edep_per_track[ track->id ] / E ); + sampling_fraction_vs_eta.back()->Fill( eta, edep_per_track[ track->id ] / E ); + } + } + } + + + double _sum = boost::accumulators::sum(edep); + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + sum_.push_back(_sum); + mean_.push_back(_mean); + median_.push_back(_median); + min_.push_back(_min); + max_.push_back(_max); + error_of_mean_.push_back(_error_of_mean); + +} +//___________________________________________________________________ +void book_histograms() { + + const char* engines[] = { "geant3", "geant4" }; + assert(sampling_fraction_vs_pt.size() < sizeof(engines)/sizeof(const char*) ); + + TString base = Form( "%s_sampling_fraction_vs_", engines[ sampling_fraction_vs_pt.size() ] ); + TString title = Form( "EMC Sampling fraction [%s]", engines[ sampling_fraction_vs_pt.size() ] ); + + sampling_fraction_vs_pt.push_back ( new TProfile(base+"pt", title+";p_{T}", 50, 0., 10.0, 0.0, 1.0 ) ); + sampling_fraction_vs_eta.push_back( new TProfile(base+"eta", title+";#eta", 40, -0.95, 0.95, 0.0, 1.0 ) ); + sampling_fraction_vs_phi.push_back( new TProfile(base+"phi", title+";#phi", 60, 0., TMath::TwoPi(), 0.0, 1.0 ) ); + +} +//___________________________________________________________________ +void unit_test_single_engine_emc( const char* part = "mu+", int ntracks = 10 ) { + + gROOT->ProcessLine("initChain();"); + + TString engineName; + if ( hasRuntimeArg("application:engine=G3") ) engineName = "GEANT3 "; + if ( hasRuntimeArg("application:engine=G4") ) engineName = "Geant 4 "; + std::cout << "Engine name = " << engineName.Data() << endl; + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Single-engine testing of EMC" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << Form("GEANT3 response to %i 1 GeV photons %s",ntracks,part) << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + + auto* gm = dynamic_cast( StMaker::GetChain()->GetMaker("geant4star") ); + + throw_particle(ntracks, part, 0.09995, 10.00005, -0.95, 0.95, 0., TMath::TwoPi() ); + + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_emc_hit") ) ; + + auto all_primary_tracks_have_hits = [=](g2t_track_st* begin_, g2t_track_st* end_) { + + int count = 0; + int hits = 0; + for ( const auto* track=begin_; track < end_; track++ ) { + + if ( track->n_emc_hit ) hits++; + if ( ++count == ntracks ) break; + + } + return (hits == count) ? PASS : FAIL; + + }; + + check_track_table( "All primary tracks have hits", all_primary_tracks_have_hits ); + + return; + +} + + + diff --git a/StRoot/StGeant4Maker/tests/unit_test_stg_hits.C b/StRoot/StGeant4Maker/tests/unit_test_stg_hits.C new file mode 100644 index 00000000000..7fa7012496a --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_stg_hits.C @@ -0,0 +1,190 @@ +#include "tests/unit_tests.h" +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ +//void throw_muon_in_stg_wedge( int wedgeid, int inout, int charge = 1 ) { +void throw_muon_in_stg_wedge( double eta, double phid ) { + + // TODO... + //double eta = 2.8; + _eta=eta; + //double phid = 15.0; + _phid=phid; + + throw_muon( eta, phid, 5.0, 1 ); // energetic + + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ) ; + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ) ; + hit_table = dynamic_cast( chain->GetDataSet("g2t_stg_hit") ) ; + +} +//___________________________________________________________________ +void unit_test_stg_hits() { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and sTGC hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + double etas[] = { 2.75, 3.25, 3.75 }; + double phis[] = { 15.0, 45.0, 75.0, 105.0, 135.0, 165.0, 195.0, 225.0, 255.0, 285.0, 315.0, 345.0 }; + + for ( auto e : etas ) { + for ( auto p : phis ) { + + throw_muon_in_stg_wedge( e, p ); + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + // Failure is tested by check_track when it tests for a valid track pointer + return PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the FST", [=](const g2t_track_st* t){ + std::string result = TODO; + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( Form("The track should have an eta=%f",_eta), [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + return TMath::Abs(t->eta-_eta)<1E-5 ?PASS:FAIL; + }); + check_track( "Expect 4 hits in the dev2021 geometry", [=](const g2t_track_st* t){ + int n = t->n_stg_hit; + std::string result = FAIL; + if ( n==4 ) result = PASS; + result = Form(" n=%i ",n) + result; + return result; + }); + + for ( int i=0;iGetNRows();i++ ) { + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + if ( 1!=hit->track_p ) continue; // not interested in secondaries + + check_stg_hit( "The hit should have a nonzero volume_id",hit,[=](const g2t_fts_hit_st* h) { + std::string result = FAIL; + if ( h->volume_id > 0 ) result = PASS; + return result; + }); + check_stg_hit( "The hit should have an energy deposit > 0",hit,[=](const g2t_fts_hit_st* h) { + std::string result = FAIL; + if ( h->de > 0 ) result = PASS; + return result; + }); + check_stg_hit( "The hit should have a path length > 0",hit,[=](const g2t_fts_hit_st* h) { + std::string result = FAIL; + if ( h->ds > 0 ) result = PASS; + return result; + }); + check_stg_hit( "The hit should have a nonzero momentum",hit,[=](const g2t_fts_hit_st* h) { + std::string result = FAIL; + if ( h->p[0] != 0 ) result = PASS; + if ( h->p[1] != 0 ) result = PASS; + if ( h->p[2] != 0 ) result = PASS; + return result; + }); + // check_stg_hit( "The volume ID should be in 1..48",hit,[=](const g2t_fts_hit_st* h) { + // std::string result=PASS; + // if ( h->volume_id<1||h->volume_id>48 ) result=FAIL; + // result = Form(" volume_id = %i ",h->volume_id) + result; + // return result; + // }); + check_stg_hit( "Track's momentum at hit should be < initial value",hit, [=](const g2t_fts_hit_st* h){ + std::string result = FAIL; + double px = h->p[0]; + double py = h->p[1]; + double pz = h->p[2]; + double p2 = px*px + py*py + pz*pz; + if ( p2 < _pmom*_pmom ) result = PASS; + return result; + }); + check_stg_hit( "Hit position should be w/in the fiducial volume of the station",hit,[=](const g2t_fts_hit_st* h){ + // TODO + return TODO; + }); + check_stg_hit( "The hit position and tof*c agree to w/in 0.15 mm ", hit,[=](const g2t_fts_hit_st* h) { + // There should be some tolerance on this, b/c of roundoff error at each tracking step + std::string result = FAIL; + double c_tof = 2.99792458E10 /* cm/s */ * h->tof; + double s_trk = + sqrt( h->x[0]*h->x[0] + + h->x[1]*h->x[1] + + h->x[2]*h->x[2] ); + double diff = TMath::Abs(c_tof-s_trk); + if ( diff < 0.015 ) result = PASS; + result = Form("c_tof=%f cm strack=%f cm diff=%f cm ",c_tof,s_trk,diff) + result; + return result; + }); + check_stg_hit( "The station should decode as 1..4",hit,[=](const g2t_fts_hit_st* h) { + std::string result=FAIL; + int station = h->volume_id / 10; + if ( station>=1 && station<=4 ) result=PASS; + result = Form(" volume_id=%i ",h->volume_id) + result; + return result; + }); + check_stg_hit( "The chamber should decode as 1..4",hit,[=](const g2t_fts_hit_st* h) { + std::string result=FAIL; + int chamber = h->volume_id % 10; + if ( chamber>=1 && chamber<=4 ) result=PASS; + result = Form(" volume_id=%i ",h->volume_id) + result; + return result; + }); + } + + } + } + +} diff --git a/StRoot/StGeant4Maker/tests/unit_test_tdm_truth.C b/StRoot/StGeant4Maker/tests/unit_test_tdm_truth.C new file mode 100644 index 00000000000..19d6d5b8b4e --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_tdm_truth.C @@ -0,0 +1,309 @@ +#include "tests/unit_tests.h" +#include + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ + +std::map idIsNotUnique; +int expectedId = 0; + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set +>>; +#endif + +struct Track_t { + double pt; + double phi; + double x0; + double y0; + double z0; +}; + +void unit_test_tdm_truth() { + + gROOT->ProcessLine("initChain();"); + + Accumulator_t edep; // Energy deposition + Accumulator_t time; // Time per throw + + auto* chain = StMaker::GetChain(); + auto* kine = dynamic_cast( chain->GetMaker("StarKine") ); + auto* pm = dynamic_cast( chain->GetMaker("PrimaryMaker") ); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks " << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + timer.Start(); + + + + std::vector input_tracks = { + { 1.0, 90.0, 0.0, 0.0, -90.0 }, + { 2.0, 90.0, 0.0, 0.0, -70.0 }, + { 3.0, 90.0, 0.0, 0.0, -50.0 }, + { 4.0, 90.0, 0.0, 0.0, -30.0 }, + { 5.0, 90.0, 0.0, 0.0, -10.0 }, + { 6.0, 90.0, 0.0, 0.0, 10.0 }, + { 7.0, 90.0, 0.0, 0.0, 30.0 }, + { 8.0, 90.0, 0.0, 0.0, 50.0 }, + { 9.0, 90.0, 0.0, 0.0, 70.0 }, + { 10., 90.0, 0.0, 0.0, 90.0 } + }; + + for ( auto t : input_tracks ) { + + pm->SetVertex( t.x0, t.y0, t.z0 ); + auto* part = kine->AddParticle("e+"); + + double px = t.pt * TMath::Cos( t.phi * TMath::Pi()/180.0 ); // required eta=0 for now + double py = t.pt * TMath::Sin( t.phi * TMath::Pi()/180.0 ); + double pz = 0.0; + + part->SetPx(px); + part->SetPy(py); + part->SetPz(pz); + + double mass = part->GetMass(); assert(mass>0); + double energy = TMath::Sqrt(px*px+py*py+mass*mass+pz*pz); + + part->SetEnergy( energy ); + + } + + chain->Clear(); + chain->Make(); + + timer.Stop(); + + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + auto emc_table = dynamic_cast( chain->GetDataSet("g2t_emc_hit") ); // EMC hits + auto tpc_table = dynamic_cast( chain->GetDataSet("g2t_tpc_hit") ); // TPC hits + + // TRACK VALIDATION + // for ( int idx=0;idxGetNRows();idx++ ) + for ( int idx=0;idx<10;idx++ ) { + + check_track( "A particle must have been processed by geant", [=](const g2t_track_st* t){ + LOG_TEST << "-----------------------------------------------------------" << std::endl; + assert(t); + std::string result = Form("particle id = %i",t->eg_pid); + return result + PASS; + }, idx); + check_track( "The track has a unique ID", [=](const g2t_track_st* t){ + std::string result = Form("unique id = %i",t->id); + if ( idIsNotUnique[ t->id ] ) result += FAIL; + else result += PASS; + idIsNotUnique[ t->id ]++; + return result; + }, idx); + check_track( "The track IDs are in numerical order", [=](const g2t_track_st* t){ + std::string result = Form("unique id = %i",t->id); + expectedId++; + if ( expectedId == t->id ) result += PASS; + else result += FAIL; + return result; + }, idx); + + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }, idx); + + + if ( idxeg_pid; + if ( pdgid == -11 ) result = PASS; + return result; + }, idx); + } + + if ( idxstart_vertex_p; + if ( idv>0 ) { + auto vertex = static_cast( vertex_table->At(idv-1) ); + auto x = vertex->ge_x[0]; + auto y = vertex->ge_x[1]; + auto r = TMath::Sqrt(x*x+y*y); + if ( r<0.01 ) result = PASS; + } + return result; + }, idx); + } + + if ( idxid; + if ( t->id==idx+1) result = PASS; + return result; + }, idx); + } + + if ( idxid; + if ( t->id==int(t->pt) ) result = PASS; + return result; + }, idx); + } + + if ( idxn_tpc_hit==int(76) ) result = PASS; + return result; + }, idx); + } + + if ( idxn_emc_hit ) result = PASS; + return result; + }, idx); + } + + check_track( "... does the track have a stop vertex?", [=](const g2t_track_st* t){ + return (t->stop_vertex_p>0)?YES:NOPE; + }, idx); + + + // check_track( "The track should have a stop vertex", [=](const g2t_track_st* t){ + // return (t->stop_vertex_p>0)?PASS:FAIL; + // }, idx); + // check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + // std::string result = FAIL; + // int istart = t->start_vertex_p; + // const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + // if ( vertex ) { + // result = PASS; + // std::cout << *vertex << std::endl; + // } + // return result; + // }, idx); + // check_track( "The stop vertex should be in the vertex table", [=](const g2t_track_st* t){ + // std::string result = FAIL; + // int istart = t->stop_vertex_p; + // const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + // if ( vertex ) { + // result = PASS; + // std::cout << *vertex << std::endl; + // } + // return result; + // }, idx); + // check_track( "The id of the START vertex is nonzero", [=](const g2t_track_st* t){ + // std::string result = FAIL; + // int istart = t->start_vertex_p; + // if ( istart > 0 ) result = PASS; + // return result; + // }, idx); + // check_track( "The START vertex records a valid medium", [=](const g2t_track_st* t){ + // auto result = FAIL; + // int istart = t->start_vertex_p; + // const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + // if ( vertex ) { + // if ( vertex->ge_medium>0 ) result = PASS; + // } + // return result; + + // }, idx); + // check_track( "The START vertex records a valid process", [=](const g2t_track_st* t){ + // auto result = FAIL; + // int istart = t->start_vertex_p; + // const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + // if ( vertex ) { + // // vertex_table->Print(istart-1,1); + // result = Form(" (ge_proc=%i %s)", vertex->ge_proc, TMCProcessName[vertex->ge_proc] ); + // if ( vertex->ge_proc >= 0 && vertex->ge_proc < 44 && vertex->ge_proc!=kPStop ) result += PASS; + // else result += FAIL; + // } + // else + // result = Form("No start vertex on track") + result; + + // return result; + // }, idx); + // check_track( "The id of the START vertex is less than the id of the STOP vertex", [=](const g2t_track_st* t){ + // std::string result = FAIL; + // int istart = t->start_vertex_p; + // int istop = t->stop_vertex_p; + // if ( istart > 0 && istop > istart ) result = PASS; + // if ( istart == istop ) result = TODO; + // return Form("(start=%i stop=%i)",istart,istop) + result; + // }, idx); + // check_track( "The STOP vertex records a valid medium", [=](const g2t_track_st* t){ + // auto result = FAIL; + // int istop = t->stop_vertex_p; + // const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + // if ( vertex ) { + // if ( vertex->ge_medium>0 ) result = PASS; + // } + // return result; + + // }, idx); + // check_track( "The STOP vertex records a valid process", [=](const g2t_track_st* t){ + // auto result = FAIL; + // int istop = t->stop_vertex_p; + // const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + // if ( vertex ) { + // result = Form(" (ge_proc=%i %s)", vertex->ge_proc, TMCProcessName[vertex->ge_proc] ); + // if ( vertex->ge_proc > 0 && vertex->ge_proc < 44 ) result += PASS; + // else result += FAIL; + // } + // else + // result = Form("No stop vertex on track") + result; + + // return result; + // }, idx); + // check_track( "The STOP vertex parent track is this track", [=](const g2t_track_st* t){ + // auto result = FAIL; + // int istop = t->stop_vertex_p; + // const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + // if ( vertex ) { + // int iparent = vertex->parent_p; + // result = Form(" track id=%i vertex parent id=%i", t->id, vertex->parent_p ); + // if ( vertex->parent_p == t->id ) result += PASS; + // else result += FAIL; + // } + // else + // result = Form("No stop vertex on track") + result; + + // return result; + // }, idx); + + + } + + // Print the track list + // track_table->Print(0, track_table->GetNRows()); + + +} +//___________________________________________________________________ diff --git a/StRoot/StGeant4Maker/tests/unit_test_tpc_hits.C b/StRoot/StGeant4Maker/tests/unit_test_tpc_hits.C new file mode 100644 index 00000000000..4aa4a64975b --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_tpc_hits.C @@ -0,0 +1,427 @@ +#include "tests/unit_tests.h" +#include + +// TODO: Implement test of prompt-hits + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set +>>; +#endif + +#include + + + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +void throw_muon_in_tpc_sector( int sectorid, int charge = 1 ) { + assert(sectorid>0 && sectorid <= 24); + const double sectors[] = { + 60.0, 30.0, 0.0, 330.0, 300.0, 270., 240.0, 210.0, 180.0, 150.0, 120.0, 90.0, + 120.0, 150.0, 180.0, 210.0, 240.0, 270.0, 300.0, 330.0, 0.0, 30.0, 60.0, 90.0 + }; + double eta = (sectorid<=12) ? 0.5 : -0.5; + _eta = eta; + double phid = sectors[sectorid-1]; + _phid = phid; + throw_muon( eta, phid, 500.0, charge ); // energetic + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_tpc_hit") ) ; + + auto* gm = dynamic_cast( StMaker::GetChain()->GetMaker("geant4star") ); + // auto* stack = gm->stack(); + // stack->StackDump(); + + assert(vertex_table); + +} +//______________________________________________________________________ +void unit_test_tpc_hits( int longtest=0 ) { + + gROOT->ProcessLine("initChain();"); + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + // Setup post stepping debug output + auto* gm = dynamic_cast( StMaker::GetChain()->GetMaker("geant4star") ); + auto* stack = gm->stack(); + + if (0) + gm->AddUserPostSteppingAction( [stack]() { + auto* nav = gGeoManager->GetCurrentNavigator(); + auto* mc = TVirtualMC::GetMC(); + const double *xyz = nav->GetCurrentPoint(); + std::string path = nav->GetPath(); + LOG_INFO << "Post step _________________________________________________________________" << endm; + LOG_INFO << "step number = " << mc->StepNumber() << endm; + LOG_INFO << "n secondaries = " << mc->NSecondaries() << endm; + LOG_INFO << "track is alive = " << mc->IsTrackAlive() << endm; + mc->Print(); + LOG_INFO << "x=" << xyz[0] << " y= " << xyz[1] << " z=" << xyz[2] << " " << path.c_str() << endm; + int current = stack->GetCurrentTrackNumber(); + LOG_INFO << "Current track = " << current << endm; + LOG_INFO << "Persistent track @ " << stack->GetCurrentPersistentTrack() << endm; + stack->StackDump(current); + }); + + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks and TPC hits on single muons" << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + Accumulator_t edep; // Energy deposition + Accumulator_t step; // Step size + Accumulator_t time; // Time per throw + + for ( int sector=1; sector<=24; sector++ ) { + + timer.Start(); + throw_muon_in_tpc_sector( sector ); + time( timer.CpuTime() ); + timer.Reset(); + + + LOG_TEST << "======================================================================================" << std::endl; + LOG_TEST << GIVEN << "A muon thrown down the center of TPC sector " << sector << std::endl; + + check_track( "A muon must have been processed by geant", [=](const g2t_track_st* t){ + std::string result = Form("sector=%i ", sector); + return result+PASS; + }); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + } + return result; + }); + check_track( "There should not be a stop vertex in the TPC", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* v = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( 0==v ) + result = PASS; + else { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 208.0 || xx2 > 208.0 ) + result = PASS; + result = Form(" r=%f ",TMath::Max(xx1,xx2)) + result; + } + return result; + }); + check_track( "The start vertex should be on the z-axis", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + + const g2t_vertex_st* v = 0; + if ( istart > 0 ) + v = static_cast( vertex_table->At(istart-1) ); + else + result = " no vertex in table " + result; + + if ( v ) { + double x1 = v->eg_x[0]; + double y1 = v->eg_x[1]; + double z1 = v->eg_x[2]; + double x2 = v->ge_x[0]; + double y2 = v->ge_x[1]; + double z2 = v->ge_x[2]; + double xx1 = sqrt(x1*x1+y1*y1); // event generator + double xx2 = sqrt(x2*x2+y2*y2); // geant vertex + if ( xx1 > 0.0001 ) { + result = Form(" EG: %f %f %f ",x1,y1,z1) + result; + } + if ( xx2 > 0.0001 ) { + result = Form(" GE: %f %f %f ",x2,y2,z2) + result; + } + if ( xx1 < 0.0001 && xx2 < 0.0001 ) { + result = PASS; + } + } + + return result; + }); + check_track( "The track should be primary", [=](const g2t_track_st* t){ + std::string result = PASS; + if ( t->eta ==-999 ) result = FAIL; + return result; + }); + check_track( Form("The track should have an eta=%f",_eta), [=](const g2t_track_st* t){ + double delta = TMath::Abs(t->eta-_eta); + return TMath::Abs(t->eta-_eta)<1E-5 ?PASS:FAIL; + }); + check_track( "Expect 76 hits in the dev2021 geometry", [=](const g2t_track_st* t){ + int n = t->n_tpc_hit; + std::string result = FAIL; + if ( n==76 ) result = PASS; + result = Form(" n=%i ",n) + result; + return result; + }); + + + + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + if ( 1!=hit->track_p ) continue; // not interested in secondaries + + LOG_TEST << "------------------------------------------------------------------" << std::endl; + LOG_TEST << GIVEN << "A hit on that track" << std::endl; + + edep( TMath::Abs(hit->de) * 1E6 ); // GeV MeV keV + step( hit->ds ); + + // check_tpc_hit( "Print the hit...", hit, [=](const g2t_tpc_hit_st* h) { + // LOG_TEST << "id=" << h->id + // << " track_p=" << h->track_p + // << " volume_id=" << h->volume_id + // << " x=" << h->x[0] + // << " y=" << h->x[1] + // << " z=" << h->x[2] + // << std::endl; + // return PASS; + // }); + check_tpc_hit( "The hit should have a nonzero volume_id",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = FAIL; + if ( h->volume_id > 0 ) result = PASS; + result = Form("id=%i vid=%i de=%f ds=%f ",h->id,h->volume_id,h->de,h->ds) + result; + return result; + }); + check_tpc_hit( "The hit should have an energy deposit > 0",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = NADA; // undetermined + double ds = h->ds; + if ( ds > 1.0 && h->de > 0 ) result = PASS; + else if ( ds > 1.0 && h->de <=0 ) result = FAIL; + return result; + }); + check_tpc_hit( "The hit should have a path length > 0",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = FAIL; + if ( h->ds > 0 ) result = PASS; + return result; + }); + check_tpc_hit( "The hit should have a nonzero momentum",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = FAIL; + if ( h->p[0] != 0 ) result = PASS; + if ( h->p[1] != 0 ) result = PASS; + if ( h->p[2] != 0 ) result = PASS; + return result; + }); + check_tpc_hit( "The hit should have a nonzero log10(gamma)",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = FAIL; + if ( h->lgam != 0 ) result = PASS; + result = Form(" lgam=%f (needs to be filled) ",h->lgam ) + result; + return result; + }); + check_tpc_hit( "The hit should have a length > 0",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = FAIL; + if ( h->length > 0 ) result = PASS; + return result; + }); + check_tpc_hit( "The hit should have adc, pad and timebucket set to zero",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = PASS; + if ( h->adc > 0 ) result = FAIL; + if ( h->pad > 0 ) result = FAIL; + if ( h->timebucket > 0 ) result = FAIL; + return result; + }); + check_tpc_hit( "Track's momentum at hit should be < initial value",hit, [=](const g2t_tpc_hit_st* h){ + std::string result = FAIL; + double px = h->p[0]; + double py = h->p[1]; + double pz = h->p[2]; + double p2 = px*px + py*py + pz*pz; + if ( p2 < _pmom*_pmom ) result = PASS; + return result; + }); + check_tpc_hit( "Hit position should be w/in the fiducial volume of the sector",hit,[=](const g2t_tpc_hit_st* h){ + double x = h->x[0]; + double y = h->x[1]; + double z = h->x[2]; + TVector3 hitpos( x, y, z ); + int rotator = (sector>12)? 12-sector : sector-12; + double rotatord = (double) rotator; + hitpos.RotateZ( rotatord * TMath::Pi() / 6.0 ); + bool isInSectorPhi = TMath::Abs(hitpos.Phi() - TMath::Pi()/2.0) < TMath::Pi()/12.0; + bool isInSectorR = TMath::Abs(hitpos.Perp() -124.0) < 76.0; + bool isInSector = isInSectorPhi && isInSectorR; + std::string result = Form("(%f %f %f / in phi=%i r=%i",x,y,z,isInSectorPhi,isInSectorR); + result += ( isInSector ) ? PASS : FAIL; + return result; + }); + check_tpc_hit( "The padrow should be 1 <= pad <= 72",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = PASS; + int padrow = h->volume_id % 100; + if ( padrow<1 || padrow > 72 ) result=FAIL; + return result; + }); + check_tpc_hit( "The sector should be 1 <= sector <= 24",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = PASS; + int sector = ( h->volume_id / 100 ) % 1000; + if ( sector<1 || sector>24 ) result=FAIL; + return result; + }); + check_tpc_hit( "The detector state is in (0,1,2)",hit,[=](const g2t_tpc_hit_st* h) { + std::string result = PASS; + int det = h->volume_id/100000; + if ( det<0||det>2 ) result = FAIL; + return result; + }); + check_tpc_hit( Form("The decoded sector number should be %i",sector),hit,[=](const g2t_tpc_hit_st* h) { + std::string result = FAIL; + int _sector = ( h->volume_id / 100 ) % 1000; + if ( sector == _sector ) result = PASS; + result = Form(" sector=%i",_sector ) + result; + return result; + }); + } + + } + + std::cout << std::endl << std::endl; + + // Print out energy deposition + { + + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + LOG_TEST << Form( "energy deposition: mean = %f keV", _mean ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f keV", _median ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f keV", _min ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f keV", _max ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f keV", _error_of_mean ) << std::endl; + + } + + // Print out step sizes + { + + double _mean = boost::accumulators::mean(step); + double _median = boost::accumulators::median(step); + double _min = boost::accumulators::min(step); + double _max = boost::accumulators::max(step); + double _error_of_mean = boost::accumulators::error_of(step); + LOG_TEST << Form( "step size: mean = %f cm", _mean ) << std::endl; + LOG_TEST << Form( "step size: median = %f cm", _median ) << std::endl; + LOG_TEST << Form( "step size: min = %f cm", _min ) << std::endl; + LOG_TEST << Form( "step size: max = %f cm", _max ) << std::endl; + LOG_TEST << Form( "step size: error of mean = %f cm", _error_of_mean ) << std::endl; + + } + + // Print out time per track + { + + double _mean = boost::accumulators::mean(time); + double _median = boost::accumulators::median(time); + double _min = boost::accumulators::min(time); + double _max = boost::accumulators::max(time); + double _error_of_mean = boost::accumulators::error_of(time); + LOG_TEST << Form( "time / muon: mean = %f s", _mean ) << std::endl; + LOG_TEST << Form( "time / muon: median = %f s", _median ) << std::endl; + LOG_TEST << Form( "time / muon: min = %f s", _min ) << std::endl; + LOG_TEST << Form( "time / muon: max = %f s", _max ) << std::endl; + LOG_TEST << Form( "time / muon: error of mean = %f s", _error_of_mean ) << std::endl; + + } + + // Reset accumulators + edep = step = time = {}; + + if ( longtest > 0 ) { + + std::cout << "-/ running long test with N pi+/pi- =" << longtest << " /-" << std::endl; + + throw_particle( longtest, "pi+,pi-", 0.200, 20.0, -1.0, 1.0, 0.0, TMath::TwoPi() ); + + auto* chain = StMaker::GetChain(); + hit_table = dynamic_cast( chain->GetDataSet("g2t_tpc_hit") ) ; + + // Accumulate + for ( int i=0;iGetNRows();i++ ) { + + auto hit = static_cast( hit_table->At(i) ); + if ( 0==hit ) continue; // skip null entries + // std::cout << *hit << std::endl; + + edep( TMath::Abs(hit->de) * 1E6 ); // GeV MeV keV + step( hit->ds ); + + } + + // Print out energy deposition + { + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + LOG_TEST << Form( "energy deposition: mean = %f keV", _mean ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f keV", _median ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f keV", _min ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f keV", _max ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f keV", _error_of_mean ) << std::endl; + + } + + // Print out step sizes + { + + double _mean = boost::accumulators::mean(step); + double _median = boost::accumulators::median(step); + double _min = boost::accumulators::min(step); + double _max = boost::accumulators::max(step); + double _error_of_mean = boost::accumulators::error_of(step); + LOG_TEST << Form( "step size: mean = %f cm", _mean ) << std::endl; + LOG_TEST << Form( "step size: median = %f cm", _median ) << std::endl; + LOG_TEST << Form( "step size: min = %f cm", _min ) << std::endl; + LOG_TEST << Form( "step size: max = %f cm", _max ) << std::endl; + LOG_TEST << Form( "step size: error of mean = %f cm", _error_of_mean ) << std::endl; + + } + + } + +} +//___________________________________________________________________ diff --git a/StRoot/StGeant4Maker/tests/unit_test_track_data_model.C b/StRoot/StGeant4Maker/tests/unit_test_track_data_model.C new file mode 100644 index 00000000000..275e8f5c0b3 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_track_data_model.C @@ -0,0 +1,309 @@ +#include "tests/unit_tests.h" +#include + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ + +std::map idIsNotUnique; +int expectedId = 0; + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set +>>; +#endif + +void unit_test_track_data_model() { + + gROOT->ProcessLine("initChain();"); + + Accumulator_t edep; // Energy deposition + Accumulator_t time; // Time per throw + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks " << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + timer.Start(); + + // // Generate 10 e+ + // for ( int i=0;i<9;i++ ) + // add_particle( "e+", 0.4251, 3.1415/4, 10.0 ); + throw_particle( "e+", 0.4251, 3.1415/4, 10.0 ); + + //throw_particle( "mu+", 0.4251, 3.1415/4, 10.0 ); + + timer.Stop(); + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_emc_hit") ); + + // TRACK VALIDATION + for ( int idx=0;idxGetNRows();idx++ ) { + + check_track( "A particle must have been processed by geant", [=](const g2t_track_st* t){ + LOG_TEST << "-----------------------------------------------------------" << std::endl; + assert(t); + std::string result = Form("particle id = %i",t->eg_pid); + return result + PASS; + }, idx); + check_track( "The track has a unique ID", [=](const g2t_track_st* t){ + std::string result = Form("unique id = %i",t->id); + if ( idIsNotUnique[ t->id ] ) result += FAIL; + else result += PASS; + idIsNotUnique[ t->id ]++; + return result; + }, idx); + check_track( "The track IDs are in numerical order", [=](const g2t_track_st* t){ + std::string result = Form("unique id = %i",t->id); + expectedId++; + if ( expectedId == t->id ) result += PASS; + else result += FAIL; + return result; + }, idx); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }, idx); + check_track( "The track should have a stop vertex", [=](const g2t_track_st* t){ + return (t->stop_vertex_p>0)?PASS:FAIL; + }, idx); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + std::cout << *vertex << std::endl; + } + return result; + }, idx); + check_track( "The stop vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + std::cout << *vertex << std::endl; + } + return result; + }, idx); + check_track( "The id of the START vertex is nonzero", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + if ( istart > 0 ) result = PASS; + return result; + }, idx); + check_track( "The START vertex records a valid medium", [=](const g2t_track_st* t){ + auto result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + if ( vertex->ge_medium>0 ) result = PASS; + } + return result; + + }, idx); + check_track( "The START vertex records a valid process", [=](const g2t_track_st* t){ + auto result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + // vertex_table->Print(istart-1,1); + result = Form(" (ge_proc=%i %s)", vertex->ge_proc, TMCProcessName[vertex->ge_proc] ); + if ( vertex->ge_proc >= 0 && vertex->ge_proc < 44 && vertex->ge_proc!=kPStop ) result += PASS; + else result += FAIL; + } + else + result = Form("No start vertex on track") + result; + + return result; + }, idx); + check_track( "The id of the START vertex is less than the id of the STOP vertex", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + int istop = t->stop_vertex_p; + if ( istart > 0 && istop > istart ) result = PASS; + if ( istart == istop ) result = TODO; + return Form("(start=%i stop=%i)",istart,istop) + result; + }, idx); + check_track( "The STOP vertex records a valid medium", [=](const g2t_track_st* t){ + auto result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( vertex ) { + if ( vertex->ge_medium>0 ) result = PASS; + } + return result; + + }, idx); + check_track( "The STOP vertex records a valid process", [=](const g2t_track_st* t){ + auto result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( vertex ) { + result = Form(" (ge_proc=%i %s)", vertex->ge_proc, TMCProcessName[vertex->ge_proc] ); + if ( vertex->ge_proc > 0 && vertex->ge_proc < 44 ) result += PASS; + else result += FAIL; + } + else + result = Form("No stop vertex on track") + result; + + return result; + }, idx); + check_track( "The STOP vertex parent track is this track", [=](const g2t_track_st* t){ + auto result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( vertex ) { + int iparent = vertex->parent_p; + result = Form(" track id=%i vertex parent id=%i", t->id, vertex->parent_p ); + if ( vertex->parent_p == t->id ) result += PASS; + else result += FAIL; + } + else + result = Form("No stop vertex on track") + result; + + return result; + }, idx); + + + } + + expectedId=0; + idIsNotUnique.clear(); + // VERTEX VALIDATION + for ( int idx=0;idxGetNRows();idx++ ) { + check_vertex( "A vertex must have been processed by geant", [=](const g2t_vertex_st* t){ + LOG_TEST << "-----------------------------------------------------------" << std::endl; + assert(t); + std::string result = PASS; + return result; + }, idx); + check_vertex( "Is this vertex intermediate?", [=](const g2t_vertex_st* v){ + LOG_TEST << "-----------------------------------------------------------" << std::endl; + return (v->is_itrmd)? YES : NOPE; + }, idx); + check_vertex( "The vertex has a unique ID", [=](const g2t_vertex_st* t){ + std::string result = Form("unique id = %i",t->id); + if ( idIsNotUnique[ t->id ] ) result += FAIL; + else result += PASS; + idIsNotUnique[ t->id ]++; + return result; + }, idx); + check_vertex( "The vertex IDs are in numerical order", [=](const g2t_vertex_st* t){ + std::string result = Form("unique id = %i",t->id); + expectedId++; + if ( expectedId == t->id ) result += PASS; + else result += FAIL; + return result; + }, idx); + check_vertex( "Primary vertex has no parents, all others do", [=](const g2t_vertex_st* v){ + std::string result; + int np = v->n_parent; + if (v->id==1) { + result = Form("primary vertex: nparent=%i ",np); + result += (np==0) ? PASS : FAIL; + } + else { + result = Form("secondary vertex: nparent=%i ",np); + result += (np==1) ? PASS : FAIL; + } + return result; + }, idx); + check_vertex( "Vertex parent track stops on this vertex if not intermediate", [=](const g2t_vertex_st* v){ + std::string result; + int np = v->n_parent; + if (v->id==1) { + result = Form("primary vertex: nparent=%i ",np); + result += (np==0) ? PASS : FAIL; + } + else { + int itrack=v->parent_p; + const g2t_track_st* track = static_cast(track_table->At(itrack-1)); + int idvert=v->id; + int idstop= (track)? track->stop_vertex_p : -1; + int isint = v->is_itrmd; + if ( isint==0 ) + result += ( idvert==idstop )? PASS : FAIL; + else + result += PASS; + } + return result; + }, idx); + check_vertex( "Intermediate vertex must have daughter tracks", [=](const g2t_vertex_st* v){ + std::string result = NADA; + if ( v->is_itrmd ) { + result = Form("(n daughter=%i proc=%i %s) ", v->n_daughter, v->ge_proc, TMCProcessName[v->ge_proc] ); + if ( v->n_daughter>0 ) result += PASS; + else { + result += FAIL; + // std::cout << *v << std::endl; + } + } + return result; + }, idx); + + + } + + // Hit accumulation + for ( int idx=0;idxGetNRows();idx++ ) { + auto hit = static_cast( hit_table->At(idx) ); + if ( 0==hit ) continue; + edep( hit->de * 1000 ); + // std::cout << "hit dE=" << hit->de << " volume_id=" << hit->volume_id << std::endl; + std::cout << *hit << std::endl; + } + + // Print out energy deposition + { + + int _count = boost::accumulators::count(edep); + double _sum = boost::accumulators::sum(edep); + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + LOG_TEST << Form( "number of hits = %i", _count) << std::endl; + LOG_TEST << Form( "energy deposition: sum = %f MeV", _sum ) << std::endl; + LOG_TEST << Form( "energy deposition: mean = %f MeV", _mean ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f MeV", _median ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f MeV", _min ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f MeV", _max ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f MeV", _error_of_mean ) << std::endl; + + } + + // Print the track list + track_table->Print(0, track_table->GetNRows()); + + +} +//___________________________________________________________________ diff --git a/StRoot/StGeant4Maker/tests/unit_test_track_data_model_ntrack.C b/StRoot/StGeant4Maker/tests/unit_test_track_data_model_ntrack.C new file mode 100644 index 00000000000..2ac3d3aaa53 --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_test_track_data_model_ntrack.C @@ -0,0 +1,361 @@ +#include "tests/unit_tests.h" +#include + +//___________________________________________________________________ +double _eta = 0; +double _phid = 0; +//___________________________________________________________________ + +std::map idIsNotUnique; +int expectedId = 0; + +#ifndef __CINT__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace boost::accumulators; + +using Accumulator_t = accumulator_set +>>; +#endif + +void unit_test_track_data_model_ntrack() { + + gROOT->ProcessLine("initChain();"); + + Accumulator_t edep; // Energy deposition + Accumulator_t time; // Time per throw + + auto* pm = dynamic_cast( StMaker::GetChain()->GetMaker("PrimaryMaker") ); + pm->SetVertex(0.,0.,0.); + pm->SetSigma(0.0,0.,0.); + + LOG_TEST << "=======================================================" << std::endl; + LOG_TEST << "Unit testing of tracks " << std::endl; + LOG_TEST << "=======================================================" << std::endl; + + timer.Start(); + + int _ntrack = 500; + double _pt = 10.0; + // for ( int i=1;i<_ntrack;i++ ) + // add_particle( "mu+", 0.4251, 3.1415/4*(1.0+0.8*double(i)), _pt ); + // throw_particle( "mu+", 0.4251, 3.1415/4, _pt ); + throw_particle( _ntrack, "mu+", 0.1, 10.0, -0.95, 0.95, 0.0, TMath::TwoPi() ); + timer.Stop(); + + auto* chain = StMaker::GetChain(); + vertex_table = dynamic_cast( chain->GetDataSet("g2t_vertex") ); + track_table = dynamic_cast( chain->GetDataSet("g2t_track") ); + hit_table = dynamic_cast( chain->GetDataSet("g2t_emc_hit") ); + + // Track table validation + check_track_table( Form("The first %i tracks should be primary muons",_ntrack), [=](g2t_track_st* begin_, g2t_track_st* end_) { + std::string result = PASS; + g2t_track_st* track = begin_; + for ( int i=0;i<_ntrack;i++ ) { + if ( track->eg_pid != -13 ) result = FAIL; + track++; + } + return result; + }); + check_track_table( Form("The first %i tracks should have 0.1 < pT < 10.0 GeV",_ntrack), [=](g2t_track_st* begin_, g2t_track_st* end_) { + std::string result = PASS; + g2t_track_st* track = begin_; + for ( int i=0;i<_ntrack;i++ ) { + //if ( TMath::Abs(track->pt - _pt) > 0.001*_pt ) result = FAIL; + if ( track->pt<0.1 || track->pt>10.0 ) result = FAIL; + track++; + } + return result; + }); + check_track_table( "80% of primary tracks should have >= 70 TPC hits", [=](g2t_track_st* begin_, g2t_track_st* end_) { + std::string result = PASS; + g2t_track_st* track = begin_; + std::vector nh; + double fail=0; + for ( int i=0;i<_ntrack;i++ ) { + if ( track->n_tpc_hit<70 ) fail+=1; + track++; + } + fail /= _ntrack; + if ( fail > 0.80 ) result = Form("fail rate=%f%% ",fail*100.0) + FAIL; + return result; + }); + + check_track_table( "Primary tracks should have < 78 hits", [=](g2t_track_st* begin_, g2t_track_st* end_) { + std::string result = PASS; + g2t_track_st* track = begin_; + std::vector nh; + double fail=0; + std::string nf = ""; + for ( int i=0;i<_ntrack;i++ ) { + if ( track->n_tpc_hit>=78 ) { fail+=1; nf += Form("%i ",track->n_tpc_hit); } + track++; + } + fail /= _ntrack; + if ( fail > 0.00 ) result = Form("fail rate=%f%% %s",fail*100.0,nf.c_str()) + FAIL; + return result; + }); + + + // TRACK VALIDATION + if (0) for ( int idx=0;idxGetNRows();idx++ ) { + + check_track( "A particle must have been processed by geant", [=](const g2t_track_st* t){ + LOG_TEST << "-----------------------------------------------------------" << std::endl; + assert(t); + std::string result = Form("particle id = %i",t->eg_pid); + return result + PASS; + }, idx); + check_track( "The track has a unique ID", [=](const g2t_track_st* t){ + std::string result = Form("unique id = %i",t->id); + if ( idIsNotUnique[ t->id ] ) result += FAIL; + else result += PASS; + idIsNotUnique[ t->id ]++; + return result; + }, idx); + check_track( "The track IDs are in numerical order", [=](const g2t_track_st* t){ + std::string result = Form("unique id = %i",t->id); + expectedId++; + if ( expectedId == t->id ) result += PASS; + else result += FAIL; + return result; + }, idx); + check_track( "The track should have a start vertex", [=](const g2t_track_st* t){ + return (t->start_vertex_p>0)?PASS:FAIL; + }, idx); + check_track( "The track should have a stop vertex", [=](const g2t_track_st* t){ + return (t->stop_vertex_p>0)?PASS:FAIL; + }, idx); + check_track( "The start vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + std::cout << *vertex << std::endl; + } + return result; + }, idx); + check_track( "The stop vertex should be in the vertex table", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + result = PASS; + std::cout << *vertex << std::endl; + } + return result; + }, idx); + check_track( "The id of the START vertex is nonzero", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + if ( istart > 0 ) result = PASS; + return result; + }, idx); + check_track( "The START vertex records a valid medium", [=](const g2t_track_st* t){ + auto result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + if ( vertex->ge_medium>0 ) result = PASS; + } + return result; + + }, idx); + check_track( "The START vertex records a valid process", [=](const g2t_track_st* t){ + auto result = FAIL; + int istart = t->start_vertex_p; + const g2t_vertex_st* vertex = (istart>0) ? static_cast( vertex_table->At(istart-1) ) : 0; + if ( vertex ) { + // vertex_table->Print(istart-1,1); + result = Form(" (ge_proc=%i %s)", vertex->ge_proc, TMCProcessName[vertex->ge_proc] ); + if ( vertex->ge_proc >= 0 && vertex->ge_proc < 44 && vertex->ge_proc!=kPStop ) result += PASS; + else result += FAIL; + } + else + result = Form("No start vertex on track") + result; + + return result; + }, idx); + check_track( "The id of the START vertex is less than the id of the STOP vertex", [=](const g2t_track_st* t){ + std::string result = FAIL; + int istart = t->start_vertex_p; + int istop = t->stop_vertex_p; + if ( istart > 0 && istop > istart ) result = PASS; + if ( istart == istop ) result = TODO; + return Form("(start=%i stop=%i)",istart,istop) + result; + }, idx); + check_track( "The STOP vertex records a valid medium", [=](const g2t_track_st* t){ + auto result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( vertex ) { + if ( vertex->ge_medium>0 ) result = PASS; + } + return result; + + }, idx); + check_track( "The STOP vertex records a valid process", [=](const g2t_track_st* t){ + auto result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( vertex ) { + result = Form(" (ge_proc=%i %s)", vertex->ge_proc, TMCProcessName[vertex->ge_proc] ); + if ( vertex->ge_proc > 0 && vertex->ge_proc < 44 ) result += PASS; + else result += FAIL; + } + else + result = Form("No stop vertex on track") + result; + + return result; + }, idx); + check_track( "The STOP vertex parent track is this track", [=](const g2t_track_st* t){ + auto result = FAIL; + int istop = t->stop_vertex_p; + const g2t_vertex_st* vertex = (istop>0) ? static_cast( vertex_table->At(istop-1) ) : 0; + if ( vertex ) { + int iparent = vertex->parent_p; + result = Form(" track id=%i vertex parent id=%i", t->id, vertex->parent_p ); + if ( vertex->parent_p == t->id ) result += PASS; + else result += FAIL; + } + else + result = Form("No stop vertex on track") + result; + + return result; + }, idx); + + } + + expectedId=0; + idIsNotUnique.clear(); + // VERTEX VALIDATION + if (0) for ( int idx=0;idxGetNRows();idx++ ) { + check_vertex( "A vertex must have been processed by geant", [=](const g2t_vertex_st* t){ + LOG_TEST << "-----------------------------------------------------------" << std::endl; + assert(t); + std::string result = PASS; + return result; + }, idx); + check_vertex( "Is this vertex intermediate?", [=](const g2t_vertex_st* v){ + LOG_TEST << "-----------------------------------------------------------" << std::endl; + return (v->is_itrmd)? YES : NOPE; + }, idx); + check_vertex( "The vertex has a unique ID", [=](const g2t_vertex_st* t){ + std::string result = Form("unique id = %i",t->id); + if ( idIsNotUnique[ t->id ] ) result += FAIL; + else result += PASS; + idIsNotUnique[ t->id ]++; + return result; + }, idx); + check_vertex( "The vertex IDs are in numerical order", [=](const g2t_vertex_st* t){ + std::string result = Form("unique id = %i",t->id); + expectedId++; + if ( expectedId == t->id ) result += PASS; + else result += FAIL; + return result; + }, idx); + check_vertex( "Primary vertex has no parents, all others do", [=](const g2t_vertex_st* v){ + std::string result; + int np = v->n_parent; + if (v->id==1) { + result = Form("primary vertex: nparent=%i ",np); + result += (np==0) ? PASS : FAIL; + } + else { + result = Form("secondary vertex: nparent=%i ",np); + result += (np==1) ? PASS : FAIL; + } + return result; + }, idx); + check_vertex( "Vertex parent track stops on this vertex if not intermediate", [=](const g2t_vertex_st* v){ + std::string result; + int np = v->n_parent; + if (v->id==1) { + result = Form("primary vertex: nparent=%i ",np); + result += (np==0) ? PASS : FAIL; + } + else { + int itrack=v->parent_p; + const g2t_track_st* track = static_cast(track_table->At(itrack-1)); + int idvert=v->id; + int idstop= (track)? track->stop_vertex_p : -1; + int isint = v->is_itrmd; + if ( isint==0 ) + result += ( idvert==idstop )? PASS : FAIL; + else + result += PASS; + } + return result; + }, idx); + check_vertex( "Intermediate vertex must have daughter tracks", [=](const g2t_vertex_st* v){ + std::string result = NADA; + if ( v->is_itrmd ) { + result = Form("(n daughter=%i proc=%i %s) ", v->n_daughter, v->ge_proc, TMCProcessName[v->ge_proc] ); + if ( v->n_daughter>0 ) result += PASS; + else { + result += FAIL; + // std::cout << *v << std::endl; + } + } + return result; + }, idx); + + + } + + // Hit accumulation + if (0) for ( int idx=0;idxGetNRows();idx++ ) { + auto hit = static_cast( hit_table->At(idx) ); + if ( 0==hit ) continue; + edep( hit->de * 1000 ); + // std::cout << "hit dE=" << hit->de << " volume_id=" << hit->volume_id << std::endl; + std::cout << *hit << std::endl; + } + + // Print out energy deposition + if (0) + { + + int _count = boost::accumulators::count(edep); + double _sum = boost::accumulators::sum(edep); + double _mean = boost::accumulators::mean(edep); + double _median = boost::accumulators::median(edep); + double _min = boost::accumulators::min(edep); + double _max = boost::accumulators::max(edep); + double _error_of_mean = boost::accumulators::error_of(edep); + + LOG_TEST << Form( "number of hits = %i", _count) << std::endl; + LOG_TEST << Form( "energy deposition: sum = %f MeV", _sum ) << std::endl; + LOG_TEST << Form( "energy deposition: mean = %f MeV", _mean ) << std::endl; + LOG_TEST << Form( "energy deposition: median = %f MeV", _median ) << std::endl; + LOG_TEST << Form( "energy deposition: min = %f MeV", _min ) << std::endl; + LOG_TEST << Form( "energy deposition: max = %f MeV", _max ) << std::endl; + LOG_TEST << Form( "energy deposition: error of mean = %f MeV", _error_of_mean ) << std::endl; + + } + + // Print the track list + if (0) + track_table->Print(0, _ntrack); + else if (0) + track_table->Print(0, track_table->GetNRows() ); + + +} +//___________________________________________________________________ diff --git a/StRoot/StGeant4Maker/tests/unit_tests.h b/StRoot/StGeant4Maker/tests/unit_tests.h new file mode 100644 index 00000000000..daa4ff68d7c --- /dev/null +++ b/StRoot/StGeant4Maker/tests/unit_tests.h @@ -0,0 +1,235 @@ +#ifndef __unit_tests__ +#define __unit_tests__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define __COLOR__ +#ifdef __COLOR__ +const std::string FAIL = "\u001b[31m -failed- \u001b[0m"; +const std::string PASS = "\u001b[32m -passed- \u001b[0m"; +const std::string NOPE = "\u001b[33m - nope - \u001b[0m"; +const std::string YES = "\u001b[33m - yes - \u001b[0m"; +const std::string UNKN = "\u001b[33m -unknown- \u001b[0m"; +const std::string TODO = "\u001b[36m -todo- \u001b[0m"; +const std::string NADA = "\u001b[36m - N/A - \u001b[0m"; +const std::string GIVEN = "\u001b[34m - given - \u001b[0m"; +#else +const std::string FAIL = " -failed- "; +const std::string PASS = " -passed- "; +const std::string UNKN = " -unknown- "; +const std::string TODO = " -todo- "; +const std::string NADA = " - n/a - "; +#endif + +std::string __PREFIX__ = " \u001b[35m | \u001b[0m"; + +bool Conditional( std::string result ) { + bool value = true; + if ( result.find(FAIL) != std::string::npos ) { + value = false; + } + return value; +} + +using namespace std; +//___________________________________________________________________ +#define LOG_TEST std::cout << __PREFIX__ +//___________________________________________________________________ +TTable* hit_table = 0; +TTable* track_table = 0; +TTable* vertex_table = 0; +static TVector3 _vector3; +//___________________________________________________________________ +TStopwatch timer; +//___________________________________________________________________ +double _pmom = 0; +void throw_muon( double eta, double phid, double pT = 25.0, int q=1 ) { + // eta = pseudorapidity + // phid = azimuthal angle in degrees + double phi = TMath::Pi() * phid / 180.0; + TVector3 momentum; + momentum.SetPtEtaPhi(pT,eta,phi); + _pmom = momentum.Mag(); + auto* chain = StMaker::GetChain(); + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + auto* particle = _kine->AddParticle( (q==1)?"mu+":"mu-" ); + particle->SetPx(momentum[0]); + particle->SetPy(momentum[1]); + particle->SetPz(momentum[2]); + double mass = particle->GetMass(); + double ener = sqrt( momentum.Mag2() + mass*mass ); + particle->SetEnergy(ener); + chain->Clear(); + chain->Make(); +} +void throw_particle( const char* part, double eta, double phid, double pT = 25.0, int q=1 ) { + // eta = pseudorapidity + // phid = azimuthal angle in degrees + double phi = TMath::Pi() * phid / 180.0; + TVector3 momentum; + momentum.SetPtEtaPhi(pT,eta,phi); + _pmom = momentum.Mag(); + auto* chain = StMaker::GetChain(); + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + auto* particle = _kine->AddParticle( part ); + particle->SetPx(momentum[0]); + particle->SetPy(momentum[1]); + particle->SetPz(momentum[2]); + double mass = particle->GetMass(); + double ener = sqrt( momentum.Mag2() + mass*mass ); + particle->SetEnergy(ener); + chain->Clear(); + chain->Make(); +} +void throw_particle( int n, const char* part, double ptmn, double ptmx, double etamn, double etamx, double phimn, double phimx ) { + auto* chain = StMaker::GetChain(); + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + _kine->Kine( n, part, ptmn, ptmx, etamn, etamx, phimn, phimx ); + chain->Clear(); + chain->Make(); +} +void add_particle( const char* part, double eta, double phid, double pT = 25.0, int q=1 ) { + double phi = TMath::Pi() * phid / 180.0; + TVector3 momentum; + momentum.SetPtEtaPhi(pT,eta,phi); + _pmom = momentum.Mag(); + auto* chain = StMaker::GetChain(); + auto* _kine = dynamic_cast( chain->GetMaker("StarKine") ); + auto* particle = _kine->AddParticle( part ); + particle->SetPx(momentum[0]); + particle->SetPy(momentum[1]); + particle->SetPz(momentum[2]); + double mass = particle->GetMass(); + double ener = sqrt( momentum.Mag2() + mass*mass ); + particle->SetEnergy(ener); +} +//___________________________________________________________________ +std::string check_track_table( std::string message, std::function f) { + g2t_track_st* first = static_cast( track_table->GetArray() ); + g2t_track_st* last = static_cast( track_table->GetArray() ) + track_table->GetNRows(); + std::string result = "\u001b[37m [" + message + "] " + (track_table? f(first,last):FAIL ); + LOG_TEST << result << std::endl; + return result; +} +//___________________________________________________________________ +std::string check_track( std::string message, std::function f, int idx=0) { + const g2t_track_st* track = static_cast( track_table->At(idx) ); + std::string result = "\u001b[37m [" + message + "] " + (track? f(track):FAIL ); + LOG_TEST << result << std::endl; + return result; +}; +//___________________________________________________________________ +std::string check_vertex( std::string message, std::function f, int idx=0) { + const g2t_vertex_st* vertex = static_cast( vertex_table->At(idx) ); + std::string result = "\u001b[37m [" + message + "] " + (vertex? f(vertex):FAIL ); + LOG_TEST << result << std::endl; + return result; +}; +//___________________________________________________________________ +std::string check_tpc_hit( std::string message, const g2t_tpc_hit_st* hit, std::function f) { + std::string result = "\u001b[37m [" + message + "] " + (hit? f(hit):FAIL); + LOG_TEST << result << std::endl; + return result; +}; +//___________________________________________________________________ +std::string check_stg_hit( std::string message, const g2t_fts_hit_st* hit, std::function f) { + std::string result = "\u001b[37m [" + message + "] " + (hit? f(hit):FAIL); + LOG_TEST << result << std::endl; + return result; +}; +//___________________________________________________________________ +std::string check_ctf_hit( std::string message, const g2t_ctf_hit_st* hit, std::function f) { + std::string result = "\u001b[37m [" + message + "] " + (hit? f(hit):FAIL); + LOG_TEST << result << std::endl; + return result; +}; +//___________________________________________________________________ +std::string check_mtd_hit( std::string message, const g2t_mtd_hit_st* hit, std::function f) { + std::string result = "\u001b[37m [" + message + "] " + (hit? f(hit):FAIL); + LOG_TEST << result << std::endl; + return result; +}; +//___________________________________________________________________ +std::string check_emc_hit( std::string message, const g2t_emc_hit_st* hit, std::function f) { + std::string result = "\u001b[37m [" + message + "] " + (hit? f(hit):FAIL); + LOG_TEST << result << std::endl; + return result; +}; +std::string check_emc_hit( std::string message, std::function f, int idx=0) { + const g2t_emc_hit_st* hit = static_cast( hit_table->At(idx) ); + std::string result = "\u001b[37m [" + message + "] " + (hit? f(hit):FAIL); + LOG_TEST << result << std::endl; + return result; +}; +//___________________________________________________________________ +std::string check_epd_hit( std::string message, const g2t_epd_hit_st* hit, std::function f) { + std::string result = "\u001b[37m [" + message + "] " + (hit? f(hit):FAIL); + LOG_TEST << result << std::endl; + return result; +}; +std::string check_epd_hit( std::string message, std::function f, int idx=0) { + const g2t_epd_hit_st* hit = static_cast( hit_table->At(idx) ); + std::string result = "\u001b[37m [" + message + "] " + (hit? f(hit):FAIL); + LOG_TEST << result << std::endl; + return result; +}; + +//___________________________________________________________________ +template +TH1F* gimmeTH1F( std::string name, std::string title, int nbin, double xmn, double xmx, + std::function filler ) { + TH1F* histo = new TH1F(name.c_str(), title.c_str(), nbin, xmn, xmx ); + for ( int i=0;iGetNRows();i++ ){ + const Hit* hit = static_cast( hit_table->At(i) ); + filler( hit, histo ); + } + return histo; +} +//___________________________________________________________________ +ostream& operator<<( ostream& os, const g2t_vertex_st& v ) { + os << Form("g2t_vertex id=%i ",v.id); + os << Form("volume=%s ",v.ge_volume); + os << Form("np=%i nd=%i itrmd=%i x=(%f, %f, %f)",v.n_parent,v.n_daughter,v.is_itrmd,v.ge_x[0],v.ge_x[1],v.ge_x[2]); + return os; +}; +//___________________________________________________________________ +ostream& operator<<( ostream& os, const g2t_tpc_hit_st& h ) { + os << Form("g2t_tpc_hit id=%i de=%f ds=%f",h.id,h.de,h.ds); + return os; +}; +//___________________________________________________________________ +ostream& operator<<( ostream& os, const g2t_emc_hit_st& h ) { + double r2 = h.x*h.x+h.y*h.y; + os << Form("g2t_emc_hit id=%i idtruth=%i volume=%i de=%f R=%f",h.id,h.track_p,h.volume_id,h.de,sqrt(r2)); + return os; +}; +//___________________________________________________________________ +// ostream& operator<<( ostream& os, const g2t_wca_hit_st& h ) { +// double r2 = h.x*h.x+h.y*h.y; +// os << Form("g2t_wca_hit id=%i idtruth=%i volume=%i de=%f R=%f",h.id,h.track_p,h.volume_id,h.de,sqrt(r2)); +// return os; +// }; +// //___________________________________________________________________ +// ostream& operator<<( ostream& os, const g2t_hca_hit_st& h ) { +// double r2 = h.x*h.x+h.y*h.y; +// os << Form("g2t_hca_hit id=%i idtruth=%i volume=%i de=%f R=%f",h.id,h.track_p,h.volume_id,h.de,sqrt(r2)); +// return os; +// }; +#endif diff --git a/StRoot/StarGenerator/BASE/StarPrimaryMaker.h b/StRoot/StarGenerator/BASE/StarPrimaryMaker.h index e673d2ca0fe..6dd35774e90 100644 --- a/StRoot/StarGenerator/BASE/StarPrimaryMaker.h +++ b/StRoot/StarGenerator/BASE/StarPrimaryMaker.h @@ -167,6 +167,8 @@ class StarPrimaryMaker : public StMaker /// Return a pointer to the event StarGenEvent *event() { return mPrimaryEvent; } + /// Return a pointer to the stack + StarParticleStack *stack(){ return mStack; } virtual const char *GetCVS() const {static const char cvs[]="Tag $Name: $ $Id: StarPrimaryMaker.h,v 1.8 2015/06/15 13:23:00 jwebb Exp $ built " __DATE__ " " __TIME__ ; return cvs;} diff --git a/StarVMC/StarAgmlLib/AgBlock.cxx b/StarVMC/StarAgmlLib/AgBlock.cxx index f6801e47086..85f8363a4cb 100644 --- a/StarVMC/StarAgmlLib/AgBlock.cxx +++ b/StarVMC/StarAgmlLib/AgBlock.cxx @@ -11,6 +11,7 @@ ClassImp(AgBlock); #include "StarAgmlStacker.h" #include "StMessMgr.h" +#include // Setup static members AgBlock *AgBlock::mCurrent=0; diff --git a/StarVMC/StarAgmlLib/AgMLExtension.cxx b/StarVMC/StarAgmlLib/AgMLExtension.cxx index 5287b9bdb3f..b3170447b10 100644 --- a/StarVMC/StarAgmlLib/AgMLExtension.cxx +++ b/StarVMC/StarAgmlLib/AgMLExtension.cxx @@ -1,4 +1,5 @@ #include "AgMLExtension.h" +#include AgMLExtension::AgMLExtension() : TGeoRCExtension(), mModuleName("none"), @@ -9,7 +10,27 @@ AgMLExtension::AgMLExtension() : TGeoRCExtension(), mBranchings(0), mVolumeId( new AgMLVolumeId ), mHitScoring(), - mGstpar() + mGstpar(), + mEngine(-1) { Grab(); } + +void AgMLExtension::Print( Option_t* opts ) const { + +//static const char* en[] = { "default", "geant3", "geant4" }; + + LOG_INFO << mModuleName.Data() << ":" + << mFamilyName.Data() << ":" + << mVolumeName.Data() << " this=" + << this << " sens=" + << mSensitive << " tracking=" + << mTracking << " nbranch=" + << mBranchings << " nuser=" + // << mHitScoring.size() << " engine=" + // << (mEngine>=0 && mEngine < 2) ? en[mEngine] : "invalid!? " + << endm; + +} + +std::map AgMLExtension::mExtensionMap; diff --git a/StarVMC/StarAgmlLib/AgMLExtension.h b/StarVMC/StarAgmlLib/AgMLExtension.h index 3d1d0bbef11..2418ad1043a 100644 --- a/StarVMC/StarAgmlLib/AgMLExtension.h +++ b/StarVMC/StarAgmlLib/AgMLExtension.h @@ -2,6 +2,8 @@ #define __AgmlExtension_h__ #include +#include + #include #include #include @@ -24,7 +26,7 @@ class AgMLExtension : public TGeoRCExtension { public: AgMLExtension(); - virtual ~AgMLExtension() { delete mVolumeId; mVolumeId = nullptr; } + virtual ~AgMLExtension(){ /* nada */ }; void SetModuleName( const char* name ){ mModuleName = name; } void SetFamilyName( const char* name ){ mFamilyName = name; } @@ -41,7 +43,7 @@ class AgMLExtension : public TGeoRCExtension { void SetBranchings( int b ) { mBranchings=b; } - void SetVolumeIdentifier( AgMLVolumeId* identifier ){ delete mVolumeId; mVolumeId = identifier; } + void SetVolumeIdentifier( AgMLVolumeId* identifier ){ mVolumeId = identifier; } void AddHitScoring( AgMLScoring* sc ){ mHitScoring.push_back( sc ); } @@ -49,7 +51,7 @@ class AgMLExtension : public TGeoRCExtension { TString GetFamilyName(){ return mFamilyName; } TString GetVolumeName(){ return mVolumeName; } - int GetVolumeId( int* numbv ){ return mVolumeId ? mVolumeId->id( numbv ) : 0; } + int GetVolumeId( int* numbv ){ return mVolumeId->id( numbv ); } bool GetSensitive() { return mSensitive; } short GetTracking() { return mTracking; } @@ -59,7 +61,20 @@ class AgMLExtension : public TGeoRCExtension { void AddCut( TString cut, double value ){ mGstpar[cut] = value; } std::map& GetCuts() { return mGstpar; } + + const static int Geant3 = 0; + const static int Geant4 = 1; + + int GetEngine(){ return mEngine; } + void SetEngine( int e ){ mEngine = e; } + void Print( Option_t* opts="" ) const; + + void extends( TGeoVolume* volume ){ mExtensionMap[volume->GetName()] = this; } + static AgMLExtension* get( TGeoVolume* volume ){ return mExtensionMap[volume->GetName()]; } + static AgMLExtension* get( TString volume ){ return mExtensionMap[volume]; } + + static const std::map< TString, AgMLExtension* >& GetMap() { return mExtensionMap; } private: protected: @@ -77,8 +92,15 @@ class AgMLExtension : public TGeoRCExtension { std::vector mHitScoring; // Vector of functors for hit scoring std::map mGstpar; // GSTPAR tracking cuts for this volume + int mEngine; + + static std::map< TString, AgMLExtension* > mExtensionMap; + ClassDef(AgMLExtension,0); }; +// Global map to agml extensions + + #endif diff --git a/StarVMC/StarAgmlLib/AgMLStructure.h b/StarVMC/StarAgmlLib/AgMLStructure.h index ee7e0ad745b..84498ec8c61 100644 --- a/StarVMC/StarAgmlLib/AgMLStructure.h +++ b/StarVMC/StarAgmlLib/AgMLStructure.h @@ -222,7 +222,7 @@ class AgMLStructure : public AgMLStructureBase AgMLStructure( const char *_name ) : AgMLStructureBase(), name(_name) { }; ~AgMLStructure() { for ( auto t : table ) { // cleanup the table - delete (t); + if (t) delete (t); } }; diff --git a/StarVMC/StarAgmlLib/AgModule.cxx b/StarVMC/StarAgmlLib/AgModule.cxx index 95c41d06912..399a18854bb 100644 --- a/StarVMC/StarAgmlLib/AgModule.cxx +++ b/StarVMC/StarAgmlLib/AgModule.cxx @@ -4,6 +4,11 @@ #include "TObjectSet.h" #include "TGenericTable.h" +#include "TGeoManager.h" +#include "TGeoVolume.h" +#include "AgMLExtension.h" +#include "StMessMgr.h" + ClassImp(AgModule); TDataSet *AgModule::mGeomSet = 0; @@ -84,7 +89,21 @@ AgModule::~AgModule() { _module = NULL; } - +//______________________________________________________________________________________________ +void AgModule::AddHitScoring( TString name, AgMLScoring* sc ) { + TString key (name(0,4)); + // LOG_INFO << "Add hit scoring " << key.Data() << endm; + mHitScoring[name] = sc; + auto* volume = gGeoManager->FindVolumeFast(key); + if (0==volume) { + LOG_WARN << "Volume " << key.Data() << " has not been created yet, no user hits defined " << name.Data() << endm; + } + else { + auto* ext = AgMLExtension::get( volume ); + ext->AddHitScoring(sc); + } +} +//______________________________________________________________________________________________ diff --git a/StarVMC/StarAgmlLib/AgModule.h b/StarVMC/StarAgmlLib/AgModule.h index dd0f3f5a1f6..480c965b2f7 100644 --- a/StarVMC/StarAgmlLib/AgModule.h +++ b/StarVMC/StarAgmlLib/AgModule.h @@ -5,7 +5,7 @@ #include "Mortran.h" #include "AgDetp.h" #include -#include "StarVMC/StarAgmlLib/AgMLExtension.h" +#include using namespace std; class TDataSet; @@ -40,7 +40,7 @@ class AgModule : public AgBlock void SetTrackingFlag( int flag ){ mTrackingFlag = flag; } int GetTrackingFlag(){ return mTrackingFlag; } - void AddHitScoring( TString name, AgMLScoring* sc ){ mHitScoring[name] = sc; } + void AddHitScoring( TString name, AgMLScoring* sc ); std::map GetHitScoring(){ return mHitScoring; } private: diff --git a/StarVMC/StarAgmlLib/AgPlacement.h b/StarVMC/StarAgmlLib/AgPlacement.h index be0734207d7..21b673ed2ab 100644 --- a/StarVMC/StarAgmlLib/AgPlacement.h +++ b/StarVMC/StarAgmlLib/AgPlacement.h @@ -74,8 +74,11 @@ class AgPlacement : public TNamed, public AgParameterList enum { kUnknown, kRot3, kRot6, kRotO }; enum { kAlphaX, kAlphaY, kAlphaZ }; + //#ifndef __CINT__ Translation mTranslation; +#if !defined(__CLING__) std::vector< Rotation > mRotation; +#endif std::vector< int > mType; double mRotationMatrix[9]; diff --git a/StarVMC/StarAgmlLib/StarTGeoStacker.cxx b/StarVMC/StarAgmlLib/StarTGeoStacker.cxx index f5f7cf71f55..895d64804d3 100644 --- a/StarVMC/StarAgmlLib/StarTGeoStacker.cxx +++ b/StarVMC/StarAgmlLib/StarTGeoStacker.cxx @@ -638,15 +638,10 @@ Bool_t StarTGeoStacker::Build( AgBlock *block ) // AgML extented volume information AgMLExtension* agmlExt = gAgMLExt[ block->GetName() ]; - if ( !agmlExt ) { + if ( 0==agmlExt ) { // Create new agml extension gAgMLExt[ block->GetName() ] = agmlExt = new AgMLExtension(); - // Add user hits to the extension - for ( auto kv : module->GetHitScoring() ) { - TString key = kv.first; - AgMLScoring* scoring = kv.second; - agmlExt -> AddHitScoring( scoring ); - } + // NOTE: user hits have not been defined at this point, add to extension at point of definition } agmlExt->SetVolumeName( nn ); agmlExt->SetFamilyName( block->GetName() ); @@ -658,8 +653,7 @@ Bool_t StarTGeoStacker::Build( AgBlock *block ) agmlExt->AddCut( kv.first, kv.second ); } - volume->SetUserExtension( agmlExt ); - + agmlExt->extends(volume); if ( mDebugOptions[block_name].Contains("shape") ) { @@ -732,7 +726,7 @@ Bool_t StarTGeoStacker::Build( AgBlock *block ) // AgML extented volume information AgMLExtension* agmlExt = gAgMLExt[ block->GetName() ]; - if ( !agmlExt ) { + if ( 0==agmlExt ) { // Create new agml extension gAgMLExt[ block->GetName() ] = agmlExt = new AgMLExtension(); // Add user hits to the extension @@ -752,7 +746,7 @@ Bool_t StarTGeoStacker::Build( AgBlock *block ) agmlExt->AddCut( kv.first, kv.second ); } - volume->SetUserExtension( agmlExt ); + agmlExt->extends(volume); } @@ -870,9 +864,8 @@ Bool_t sanityCheck( TGeoVolume *volume ) result = true; } else { - - TGeoShape *shape = volume->GetShape(); - if ( 0==shape ) { + TGeoShape *shape = volume->GetShape(); + if ( 0==shape ) { result = false; } else { @@ -882,11 +875,9 @@ Bool_t sanityCheck( TGeoVolume *volume ) else { result = false; } + } - } - if ( result == false ) { - LOG_WARN << "Invalid shape for volume " << volume->GetName() << endm; } return result; diff --git a/mgr/Conscript-standard b/mgr/Conscript-standard index 0df341f33a7..21a36d60ff4 100644 --- a/mgr/Conscript-standard +++ b/mgr/Conscript-standard @@ -720,6 +720,22 @@ if ( $pkg !~ /^sim$/ && $pkg !~ /^gen$/ ) { print "CPPPATH = $CPPPATH\n" if $param::debug; + } elsif ( $pkg =~ m/StGeant4Maker$/ ) { + + # Add G4 to include path + my $g4prefix = `geant4-config --prefix`; + chomp($g4prefix); + $CPPPATH .= $main::PATH_SEPARATOR . $g4prefix . "/include/Geant4/"; + + # Add G4 vmc to include path (presumes that spack has added this to ROOT_INCLUDE_PATH ...) + my @paths = split ":", $ENV{ROOT_INCLUDE_PATH}; + foreach my $p (@paths) { + if ($p =~ /geant4-vmc/) { + print $p, "\n"; + $CPPPATH .= $main::PATH_SEPARATOR . $p . "/geant4vmc"; + } + } + # This block can be used for ANY Maker or Pool having a 2 level # directory structure using auto-globbing for include purposes } elsif ( $pkg =~ m/^StAssociationMaker$/ ||