From 9f6027d8f2222372298c59e9519627a0e48b4313 Mon Sep 17 00:00:00 2001 From: josephbertaux Date: Tue, 10 Dec 2024 14:53:25 -0500 Subject: [PATCH] Re-organized directory for a facilitated workflow * Moved *.C files to a subdirectory (macros/) * Most macros completely unchanged, some have minor changes * Added a scripts/ suddirectory for scripts * Added a txt/ subdirectory for committing fixed versions of the localAlignmentParamsFile.txt --- TrackerMillepedeAlignment/README.md | 25 + .../macros/Fun4All_SiliconOnlyAlignment.C | 468 +++++ .../{ => macros}/INTT_transform_offsets.C | 0 .../{ => macros}/add_new_current_alignment.C | 0 .../detailed_alignment_parameter_plots.C | 12 +- .../{ => macros}/makeAlignmentParams.C | 0 .../makeAlignmentParsDifferenceFile.C | 0 .../{ => macros}/makeAlignmentParsSumFile.C | 14 +- .../{ => macros}/makePedeConstraintsFile.C | 0 .../{ => macros}/plot_alignment_residuals.C | 10 +- TrackerMillepedeAlignment/macros/plot_fits.C | 317 +++ .../{ => macros}/process_millepede_results.C | 5 +- .../subtract_updated_from_new_alignment.C | 0 .../scripts/Fun4All_SiliconOnlyAlignment.sh | 64 + .../{ => scripts}/RunAlignment.sh | 0 .../scripts/alignment_setup.sh | 39 + .../scripts/increment.sh | 11 + TrackerMillepedeAlignment/scripts/run_pede.sh | 27 + .../scripts/submit_fun4all_jobs.sh | 63 + ...eal_tracking_transforms_october25_2023.txt | 0 .../intt_survey_data_alignment_parameters.txt | 0 ...vey_transforms_Bertaux_October25_2023.root | Bin .../txt/localAlignmentParamsFile.txt | 1824 +++++++++++++++++ 23 files changed, 2867 insertions(+), 12 deletions(-) create mode 100644 TrackerMillepedeAlignment/README.md create mode 100644 TrackerMillepedeAlignment/macros/Fun4All_SiliconOnlyAlignment.C rename TrackerMillepedeAlignment/{ => macros}/INTT_transform_offsets.C (100%) rename TrackerMillepedeAlignment/{ => macros}/add_new_current_alignment.C (100%) rename TrackerMillepedeAlignment/{ => macros}/detailed_alignment_parameter_plots.C (98%) rename TrackerMillepedeAlignment/{ => macros}/makeAlignmentParams.C (100%) rename TrackerMillepedeAlignment/{ => macros}/makeAlignmentParsDifferenceFile.C (100%) rename TrackerMillepedeAlignment/{ => macros}/makeAlignmentParsSumFile.C (85%) rename TrackerMillepedeAlignment/{ => macros}/makePedeConstraintsFile.C (100%) rename TrackerMillepedeAlignment/{ => macros}/plot_alignment_residuals.C (96%) create mode 100644 TrackerMillepedeAlignment/macros/plot_fits.C rename TrackerMillepedeAlignment/{ => macros}/process_millepede_results.C (99%) rename TrackerMillepedeAlignment/{ => macros}/subtract_updated_from_new_alignment.C (100%) create mode 100755 TrackerMillepedeAlignment/scripts/Fun4All_SiliconOnlyAlignment.sh rename TrackerMillepedeAlignment/{ => scripts}/RunAlignment.sh (100%) create mode 100755 TrackerMillepedeAlignment/scripts/alignment_setup.sh create mode 100755 TrackerMillepedeAlignment/scripts/increment.sh create mode 100755 TrackerMillepedeAlignment/scripts/run_pede.sh create mode 100755 TrackerMillepedeAlignment/scripts/submit_fun4all_jobs.sh rename TrackerMillepedeAlignment/{ => txt}/ideal_tracking_transforms_october25_2023.txt (100%) rename TrackerMillepedeAlignment/{ => txt}/intt_survey_data_alignment_parameters.txt (100%) rename TrackerMillepedeAlignment/{ => txt}/intt_survey_transforms_Bertaux_October25_2023.root (100%) create mode 100644 TrackerMillepedeAlignment/txt/localAlignmentParamsFile.txt diff --git a/TrackerMillepedeAlignment/README.md b/TrackerMillepedeAlignment/README.md new file mode 100644 index 0000000..22ebdf7 --- /dev/null +++ b/TrackerMillepedeAlignment/README.md @@ -0,0 +1,25 @@ +## Alignment Workflow ## +### A directory containing scripts and macros for doing alignment ### + +Workflow: +* Edit `scripts/alignment_setup.sh` for your environment + * Define `MYINSTALL` to the location of your custom-built sPHENIX libraries (if you need custom libraries--you do not necessarily need this) + * Define `ALIGN_DATA_DIR` to the top-level directory where you want data output (.root files, pede binaries, large .txt files) + * The setup script will NOT create top-level directories if they do not already exist + * (But it will create subdirectories for you) +* Run `scripts/alignment_setup.sh` for the first time + * Check that an `iteration_0` subdirectory appears under `ALIGN_DATA_DIR` + * Check that an `txt/iteration.txt` file appers (which only contains "0") +* Run `scripts/submit_fun4all_jobs.sh` + * Copies `localAlignmentParamsFile.txt` to `ALIGN_DATA_DIR/iteration_0` (only if this is the 0th iteration) + * Creates a file list with one line per segment for each run in the `RUN_NUMS` variable + * You can edit this variable (and will likely need to edit the `FILE_FORMAT` variable depending on the range) + * This creates a job file to submit a job for each segment--the job is `scripts/Fun4All_SiliconOnlyAlignment.sh` + * The output is under `ALIGN_DATA_DIR/iteration_0/dat`, the `out` files are in `out/` +* Run `scripts/run_pede.sh` + * This runs millepede over the expansion `ALIGN_DATA_DIR/iteration_0/dat/*.bin` + * It creates the steering file with ls and sets the scale errors to the end of this file + * It then runs several macros in sequences to get the next localAlignmentParamsFile.txt and create plots +* Run `scripts/increment.sh` + * This increments the contents `txt/iteration.txt` and copies the `newLocalAlignmentParamsFile.txt` to `localAlignmentParamsFile.txt` for the next iteration + diff --git a/TrackerMillepedeAlignment/macros/Fun4All_SiliconOnlyAlignment.C b/TrackerMillepedeAlignment/macros/Fun4All_SiliconOnlyAlignment.C new file mode 100644 index 0000000..f7253d8 --- /dev/null +++ b/TrackerMillepedeAlignment/macros/Fun4All_SiliconOnlyAlignment.C @@ -0,0 +1,468 @@ +/* + * This macro shows a minimum working example of running the tracking + * hit unpackers with some basic seeding algorithms to try to put together + * tracks. There are some analysis modules run at the end which package + * hits, clusters, and clusters on tracks into trees for analysis. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +R__LOAD_LIBRARY(libfun4all.so) +R__LOAD_LIBRARY(libffamodules.so) +R__LOAD_LIBRARY(libphool.so) +R__LOAD_LIBRARY(libcdbobjects.so) +R__LOAD_LIBRARY(libmvtx.so) +R__LOAD_LIBRARY(libintt.so) +R__LOAD_LIBRARY(libtpc.so) +R__LOAD_LIBRARY(libmicromegas.so) +R__LOAD_LIBRARY(libTrackingDiagnostics.so) +R__LOAD_LIBRARY(libtrackingqa.so) +R__LOAD_LIBRARY(libtpcqa.so) + +void Fun4All_SiliconOnlyAlignment( + std::string const& segment_file = "segments.list", + int segment_line = 0, // 0-index + int const nEvents = 1E3, + std::string outfilename = "clusters_seeds", + bool const convertSeeds = true +) { + if (segment_file.empty()) { + std::cerr << __FILE__ << ":" << __LINE__ << std::endl; + return; + } + + if (!std::filesystem::exists(segment_file)) { + std::cerr << __FILE__ << ":" << __LINE__ << std::endl; + return; + } + + std::string input_file; + for (ifstream segment_stream(segment_file); std::getline(segment_stream, input_file); --segment_line) { + if (!segment_line) break; + } + if (input_file.empty()) return; + if (segment_line) return; + + G4TRACKING::convert_seeds_to_svtxtracks = convertSeeds; + std::cout << "Converting to seeds : " << G4TRACKING::convert_seeds_to_svtxtracks << std::endl; + std::pair runseg = Fun4AllUtils::GetRunSegment(input_file); + int runnumber = runseg.first; + int segment = runseg.second; + outfilename += std::string{"_"} + std::to_string(runnumber) + std::string{"_"} + std::to_string(segment); + + std::cout << input_file << std::endl; + std::cout << outfilename << std::endl; + + Enable::CDB = true; + auto rc = recoConsts::instance(); + rc->set_IntFlag("RUNNUMBER", runnumber); + rc->set_IntFlag("RUNSEGMENT", segment); + rc->set_StringFlag("CDB_GLOBALTAG", "ProdA_2024"); + rc->set_uint64Flag("TIMESTAMP", runnumber); + + TpcReadoutInit( runnumber ); + std::cout<< " run: " << runnumber + << " samples: " << TRACKING::reco_tpc_maxtime_sample + << " pre: " << TRACKING::reco_tpc_time_presample + << " vdrift: " << G4TPC::tpc_drift_velocity_reco + << std::endl; + + TRACKING::pp_mode = true; + + // distortion calibration mode + /* + * set to true to enable residuals in the TPC with + * TPC clusters not participating to the ACTS track fit + */ + G4TRACKING::SC_CALIBMODE = false; + + ACTSGEOM::mvtxMisalignment = 100; + ACTSGEOM::inttMisalignment = 100.; + ACTSGEOM::tpotMisalignment = 100.; + TString outfile = outfilename + ".root"; + std::string theOutfile = outfile.Data(); + + auto se = Fun4AllServer::instance(); + se->Verbosity(1); + + std::string geofile = CDBInterface::instance()->getUrl("Tracking_Geometry"); + Fun4AllRunNodeInputManager *ingeo = new Fun4AllRunNodeInputManager("GeoIn"); + ingeo->AddFile(geofile); + se->registerInputManager(ingeo); + + CDBInterface *cdb = CDBInterface::instance(); + std::string tpc_dv_calib_dir = cdb->getUrl("TPC_DRIFT_VELOCITY"); + if (tpc_dv_calib_dir.empty()) + { + std::cout << "No calibrated TPC drift velocity for Run " << runnumber << ". Use default value " << G4TPC::tpc_drift_velocity_reco << " cm/ns" << std::endl; + } + else + { + CDBTTree *cdbttree = new CDBTTree(tpc_dv_calib_dir); + cdbttree->LoadCalibrations(); + G4TPC::tpc_drift_velocity_reco = cdbttree->GetSingleFloatValue("tpc_drift_velocity"); + std::cout << "Use calibrated TPC drift velocity for Run " << runnumber << ": " << G4TPC::tpc_drift_velocity_reco << " cm/ns" << std::endl; + } + + G4TPC::ENABLE_MODULE_EDGE_CORRECTIONS = true; + //Flag for running the tpc hit unpacker with zero suppression on + TRACKING::tpc_zero_supp = true; + + //to turn on the default static corrections, enable the two lines below + //G4TPC::ENABLE_STATIC_CORRECTIONS = true; + //G4TPC::USE_PHI_AS_RAD_STATIC_CORRECTIONS = false; + + //to turn on the average corrections derived from simulation, enable the three lines below + //note: these are designed to be used only if static corrections are also applied + //G4TPC::ENABLE_AVERAGE_CORRECTIONS = true; + //G4TPC::USE_PHI_AS_RAD_AVERAGE_CORRECTIONS = false; + //G4TPC:average_correction_filename = std::string(getenv("CALIBRATIONROOT")) + "/distortion_maps/average_minus_static_distortion_inverted_10-new.root"; + + G4MAGNET::magfield_rescale = 1; + TrackingInit(); + + auto hitsin = new Fun4AllDstInputManager("InputManager"); + hitsin->fileopen(input_file); + // hitsin->AddFile(inputMbd); + se->registerInputManager(hitsin); + + Mvtx_HitUnpacking(); + Intt_HitUnpacking(); + // Tpc_HitUnpacking(); + // Micromegas_HitUnpacking(); + + Mvtx_Clustering(); + Intt_Clustering(); + + // auto tpcclusterizer = new TpcClusterizer; + // tpcclusterizer->Verbosity(0); + // tpcclusterizer->set_do_hit_association(G4TPC::DO_HIT_ASSOCIATION); + // tpcclusterizer->set_rawdata_reco(); + // se->registerSubsystem(tpcclusterizer); + + // Tpc_LaserEventIdentifying(); + + // Micromegas_Clustering(); + + /* + * Begin Track Seeding + */ + + /* + * Silicon Seeding + */ + + auto silicon_Seeding = new PHActsSiliconSeeding; + silicon_Seeding->Verbosity(0); + // these get us to about 83% INTT > 1 + silicon_Seeding->setinttRPhiSearchWindow(1.0); + silicon_Seeding->setinttZSearchWindow(7.0); + silicon_Seeding->seedAnalysis(false); + se->registerSubsystem(silicon_Seeding); + + auto merger = new PHSiliconSeedMerger; + merger->Verbosity(0); + se->registerSubsystem(merger); + + /* + * Tpc Seeding + */ + // auto seeder = new PHCASeeding("PHCASeeding"); + // double fieldstrength = std::numeric_limits::quiet_NaN(); // set by isConstantField if constant + // bool ConstField = isConstantField(G4MAGNET::magfield_tracking, fieldstrength); + // if (ConstField) + // { + // seeder->useConstBField(true); + // seeder->constBField(fieldstrength); + // } + // else + // { + // seeder->set_field_dir(-1 * G4MAGNET::magfield_rescale); + // seeder->useConstBField(false); + // seeder->magFieldFile(G4MAGNET::magfield_tracking); // to get charge sign right + // } + // seeder->Verbosity(0); + // seeder->SetLayerRange(7, 55); + // seeder->SetSearchWindow(2.,0.05); // z-width and phi-width, default in macro at 1.5 and 0.05 + // seeder->SetClusAdd_delta_window(3.0,0.06); // (0.5, 0.005) are default; sdzdr_cutoff, d2/dr2(phi)_cutoff + // //seeder->SetNClustersPerSeedRange(4,60); // default is 6, 6 + // seeder->SetMinHitsPerCluster(0); + // seeder->SetMinClustersPerTrack(3); + // seeder->useFixedClusterError(true); + // seeder->set_pp_mode(true); + // se->registerSubsystem(seeder); + + // expand stubs in the TPC using simple kalman filter + // auto cprop = new PHSimpleKFProp("PHSimpleKFProp"); + // cprop->set_field_dir(G4MAGNET::magfield_rescale); + // if (ConstField) + // { + // cprop->useConstBField(true); + // cprop->setConstBField(fieldstrength); + // } + // else + // { + // cprop->magFieldFile(G4MAGNET::magfield_tracking); + // cprop->set_field_dir(-1 * G4MAGNET::magfield_rescale); + // } + // cprop->useFixedClusterError(true); + // cprop->set_max_window(5.); + // cprop->Verbosity(0); + // cprop->set_pp_mode(true); + // se->registerSubsystem(cprop); + + // Always apply preliminary distortion corrections to TPC clusters before silicon matching + // and refit the trackseeds. Replace KFProp fits with the new fit parameters in the TPC seeds. + // auto prelim_distcorr = new PrelimDistortionCorrection; + // prelim_distcorr->set_pp_mode(true); + // prelim_distcorr->Verbosity(0); + // se->registerSubsystem(prelim_distcorr); + + /* + * Track Matching between silicon and TPC + */ + // The normal silicon association methods + // Match the TPC track stubs from the CA seeder to silicon track stubs from PHSiliconTruthTrackSeeding + // auto silicon_match = new PHSiliconTpcTrackMatching; + // silicon_match->Verbosity(0); + // silicon_match->set_x_search_window(2.); + // silicon_match->set_y_search_window(2.); + // silicon_match->set_z_search_window(5.); + // silicon_match->set_phi_search_window(0.2); + // silicon_match->set_eta_search_window(0.1); + // silicon_match->set_pp_mode(TRACKING::pp_mode); + // se->registerSubsystem(silicon_match); + + // Match TPC track stubs from CA seeder to clusters in the micromegas layers + // auto mm_match = new PHMicromegasTpcTrackMatching; + // mm_match->Verbosity(0); + // mm_match->set_rphi_search_window_lyr1(3.); + // mm_match->set_rphi_search_window_lyr2(15.0); + // mm_match->set_z_search_window_lyr1(30.0); + // mm_match->set_z_search_window_lyr2(3.); + + // mm_match->set_min_tpc_layer(38); // layer in TPC to start projection fit + // mm_match->set_test_windows_printout(false); // used for tuning search windows only + // se->registerSubsystem(mm_match); + + /* + * End Track Seeding + */ + + /* + * Either converts seeds to tracks with a straight line/helix fit + * or run the full Acts track kalman filter fit + */ + if (G4TRACKING::convert_seeds_to_svtxtracks) + { + auto converter = new TrackSeedTrackMapConverter; + // Default set to full SvtxTrackSeeds. Can be set to + // SiliconTrackSeedContainer or TpcTrackSeedContainer or SvtxTrackSeedContainer + converter->setTrackSeedName("SiliconTrackSeedContainer"); + converter->setFieldMap(G4MAGNET::magfield_tracking); + converter->Verbosity(0); + se->registerSubsystem(converter); + } + else + { + auto deltazcorr = new PHTpcDeltaZCorrection; + deltazcorr->Verbosity(0); + se->registerSubsystem(deltazcorr); + + // perform final track fit with ACTS + auto actsFit = new PHActsTrkFitter; + actsFit->Verbosity(0); + actsFit->commissioning(G4TRACKING::use_alignment); + // in calibration mode, fit only Silicons and Micromegas hits + actsFit->fitSiliconMMs(G4TRACKING::SC_CALIBMODE); + actsFit->setUseMicromegas(G4TRACKING::SC_USE_MICROMEGAS); + actsFit->set_pp_mode(TRACKING::pp_mode); + actsFit->set_use_clustermover(true); // default is true for now + actsFit->useActsEvaluator(false); + actsFit->useOutlierFinder(false); + actsFit->setFieldMap(G4MAGNET::magfield_tracking); + se->registerSubsystem(actsFit); + + auto cleaner = new PHTrackCleaner(); + cleaner->Verbosity(0); + cleaner->set_pp_mode(TRACKING::pp_mode); + se->registerSubsystem(cleaner); + + if (G4TRACKING::SC_CALIBMODE) + { + /* + * in calibration mode, calculate residuals between TPC and fitted tracks, + * store in dedicated structure for distortion correction + */ + auto residuals = new PHTpcResiduals; + const TString tpc_residoutfile = theOutfile + "_PhTpcResiduals.root"; + residuals->setOutputfile(tpc_residoutfile.Data()); + residuals->setUseMicromegas(G4TRACKING::SC_USE_MICROMEGAS); + + // matches Tony's analysis + residuals->setMinPt( 0.2 ); + + // reconstructed distortion grid size (phi, r, z) + residuals->setGridDimensions(36, 48, 80); + se->registerSubsystem(residuals); + } + + } + + auto finder = new PHSimpleVertexFinder; + finder->Verbosity(0); + finder->setDcaCut(0.5); + finder->setTrackPtCut(-99999.); + finder->setBeamLineCut(1); + finder->setTrackQualityCut(1000000000); + finder->setNmvtxRequired(3); + finder->zeroField(true); + finder->setOutlierPairCut(0.1); + se->registerSubsystem(finder); + + TString residoutfile = outfilename + "_resid.root"; + std::string residstring(residoutfile.Data()); + + auto resid = new TrackResiduals("TrackResiduals"); + resid->outfileName(residstring); + + resid->alignment(false); + resid->clusterTree(); + resid->noEventTree(); // Avoid segfault when running without TPC + resid->linefitAll(); + //resid->hitTree(); + resid->zeroField(); + resid->convertSeeds(G4TRACKING::convert_seeds_to_svtxtracks); + resid->Verbosity(0); + + // adjust track map name + if(G4TRACKING::SC_CALIBMODE && !G4TRACKING::convert_seeds_to_svtxtracks) + { + resid->trackmapName("SvtxSiliconMMTrackMap"); + if( G4TRACKING::SC_USE_MICROMEGAS ) + { resid->set_doMicromegasOnly(true); } + } + + se->registerSubsystem(resid); + + outfilename += "_"; + std::string hfbinstring = outfilename + "helical_out.bin"; + std::string hfsteerstring = outfilename + "helical_steer.txt"; + std::string hfntpstring = outfilename + "helical_ntuple.root"; + std::cout << hfbinstring << " " << hfsteerstring << " " << hfntpstring << std::endl; + + auto hf = new HelicalFitter(); + // hf->Verbosity(999); + hf->Verbosity(1); + hf->set_silicon_track_map_name("SiliconTrackSeedContainer"); + hf->set_datafile_name(hfbinstring); + hf->set_steeringfile_name(hfsteerstring); + hf->set_straight_line_fit(true); + + hf->set_mvtx_grouping(AlignmentDefs::mvtxGrp::snsr); + hf->set_intt_grouping(AlignmentDefs::inttGrp::lad); + // hf->set_tpc_grouping(AlignmentDefs::tpcGrp::tp); + + hf->set_layer_param_fixed(0, 0); + hf->set_layer_param_fixed(0, 1); + hf->set_layer_param_fixed(0, 2); + hf->set_layer_param_fixed(1, 0); + hf->set_layer_param_fixed(1, 1); + hf->set_layer_param_fixed(1, 2); + hf->set_layer_param_fixed(2, 0); + hf->set_layer_param_fixed(2, 1); + hf->set_layer_param_fixed(2, 2); + hf->set_layer_param_fixed(3, 0); + hf->set_layer_param_fixed(3, 1); + hf->set_layer_param_fixed(3, 2); + hf->set_layer_param_fixed(4, 0); + hf->set_layer_param_fixed(4, 1); + hf->set_layer_param_fixed(4, 2); + hf->set_layer_param_fixed(5, 0); + hf->set_layer_param_fixed(5, 1); + hf->set_layer_param_fixed(5, 2); + hf->set_layer_param_fixed(6, 0); + hf->set_layer_param_fixed(6, 1); + hf->set_layer_param_fixed(6, 2); + hf->set_intt_layer_fixed(3); // Fix 1/2 the INTT layers (1 of 2 barrels) + hf->set_intt_layer_fixed(4); + + + hf->set_use_event_vertex(true); + // hf->set_vertex_param_fixed(0); + // hf->set_vertex_param_fixed(1); + hf->set_ntuplefile_name(hfntpstring); + hf->set_fitted_subsystems(true, false, false); // silicon, tpc, all + + se->registerSubsystem(hf); + + //auto ntuplizer = new TrkrNtuplizer("TrkrNtuplizer"); + //se->registerSubsystem(ntuplizer); + + // Fun4AllOutputManager *out = new Fun4AllDstOutputManager("out", "/sphenix/tg/tg01/hf/jdosbo/tracking_development/Run24/Beam/41626/hitsets.root"); + // se->registerOutputManager(out); + // if (Enable::QA) + // { + // se->registerSubsystem(new TpcRawHitQA); + // se->registerSubsystem(new MvtxClusterQA); + // se->registerSubsystem(new InttClusterQA); + // se->registerSubsystem(new TpcClusterQA); + // se->registerSubsystem(new MicromegasClusterQA); + // auto tpcqa = new TpcSeedsQA; + // tpcqa->setTrackMapName("TpcSvtxTrackMap"); + // tpcqa->setVertexMapName("TpcSvtxVertexMap"); + // tpcqa->setSegment(rc->get_IntFlag("RUNSEGMENT")); + // se->registerSubsystem(tpcqa); + + // } + se->run(nEvents); + + se->End(); + se->PrintTimer(); + + delete se; + std::cout << "Finished" << std::endl; + gSystem->Exit(0); +} diff --git a/TrackerMillepedeAlignment/INTT_transform_offsets.C b/TrackerMillepedeAlignment/macros/INTT_transform_offsets.C similarity index 100% rename from TrackerMillepedeAlignment/INTT_transform_offsets.C rename to TrackerMillepedeAlignment/macros/INTT_transform_offsets.C diff --git a/TrackerMillepedeAlignment/add_new_current_alignment.C b/TrackerMillepedeAlignment/macros/add_new_current_alignment.C similarity index 100% rename from TrackerMillepedeAlignment/add_new_current_alignment.C rename to TrackerMillepedeAlignment/macros/add_new_current_alignment.C diff --git a/TrackerMillepedeAlignment/detailed_alignment_parameter_plots.C b/TrackerMillepedeAlignment/macros/detailed_alignment_parameter_plots.C similarity index 98% rename from TrackerMillepedeAlignment/detailed_alignment_parameter_plots.C rename to TrackerMillepedeAlignment/macros/detailed_alignment_parameter_plots.C index 5911408..8abe431 100644 --- a/TrackerMillepedeAlignment/detailed_alignment_parameter_plots.C +++ b/TrackerMillepedeAlignment/macros/detailed_alignment_parameter_plots.C @@ -69,20 +69,21 @@ static const std::array tpc_sector_mean[3] = { legvec.push_back( "Input"); col.push_back(kRed); */ - /* + finvec.push_back("tmp.root"); legvec.push_back( "ideal"); col.push_back(kBlue); - */ + /* finvec.push_back("/sphenix/tg/tg01/hf/frawley/residuals1/kshort_proc_25.rootseedresiduals.root"); legvec.push_back( "ideal"); col.push_back(kBlue); - + */ for(int ifile = 0; ifile < finvec.size(); ++ifile) { TFile *fin = new TFile(finvec[ifile].c_str()); + if (!fin) continue; for(unsigned int layer = 0; layer <3; ++layer) { @@ -255,4 +256,9 @@ static const std::array tpc_sector_mean[3] = { } } + + + cmvtx->SaveAs("cmvtx.png"); + cintt->SaveAs("cintt.png"); + ctpc->SaveAs("ctpc.png"); } diff --git a/TrackerMillepedeAlignment/makeAlignmentParams.C b/TrackerMillepedeAlignment/macros/makeAlignmentParams.C similarity index 100% rename from TrackerMillepedeAlignment/makeAlignmentParams.C rename to TrackerMillepedeAlignment/macros/makeAlignmentParams.C diff --git a/TrackerMillepedeAlignment/makeAlignmentParsDifferenceFile.C b/TrackerMillepedeAlignment/macros/makeAlignmentParsDifferenceFile.C similarity index 100% rename from TrackerMillepedeAlignment/makeAlignmentParsDifferenceFile.C rename to TrackerMillepedeAlignment/macros/makeAlignmentParsDifferenceFile.C diff --git a/TrackerMillepedeAlignment/makeAlignmentParsSumFile.C b/TrackerMillepedeAlignment/macros/makeAlignmentParsSumFile.C similarity index 85% rename from TrackerMillepedeAlignment/makeAlignmentParsSumFile.C rename to TrackerMillepedeAlignment/macros/makeAlignmentParsSumFile.C index fe1e60d..af9e5ae 100644 --- a/TrackerMillepedeAlignment/makeAlignmentParsSumFile.C +++ b/TrackerMillepedeAlignment/macros/makeAlignmentParsSumFile.C @@ -24,13 +24,19 @@ void makeAlignmentParsSumFile() std::cout << " Add new parameters to existing ones" << std::endl; - ifstream foriginal("sumAlignmentParams_run20_iter1.txt"); - if(!foriginal.is_open()) std::cout << "Unable to open original misalignment params file" << std::endl; + ifstream foriginal("localAlignmentParamsFile.txt"); + if(!foriginal.is_open()) { + std::cout << "Unable to open original misalignment params file" << std::endl; + return; + } ifstream fupdated("new_alignment_corrections.txt"); - if(!fupdated.is_open()) std::cout << "Unable to open updated params file" << std::endl; + if(!fupdated.is_open()) { + std::cout << "Unable to open updated params file" << std::endl; + return; + } - ofstream fsum("sumAlignmentParams_run20_iter2.txt"); + ofstream fsum("newLocalAlignmentParamsFile.txt"); TrkrDefs::hitsetkey key_original, key_updated; float pars_original[6], pars_updated[6]; diff --git a/TrackerMillepedeAlignment/makePedeConstraintsFile.C b/TrackerMillepedeAlignment/macros/makePedeConstraintsFile.C similarity index 100% rename from TrackerMillepedeAlignment/makePedeConstraintsFile.C rename to TrackerMillepedeAlignment/macros/makePedeConstraintsFile.C diff --git a/TrackerMillepedeAlignment/plot_alignment_residuals.C b/TrackerMillepedeAlignment/macros/plot_alignment_residuals.C similarity index 96% rename from TrackerMillepedeAlignment/plot_alignment_residuals.C rename to TrackerMillepedeAlignment/macros/plot_alignment_residuals.C index badebae..4d82319 100644 --- a/TrackerMillepedeAlignment/plot_alignment_residuals.C +++ b/TrackerMillepedeAlignment/macros/plot_alignment_residuals.C @@ -51,8 +51,7 @@ unsigned int getSensor(TrkrDefs::hitsetkey hitsetkey) } -void plot_alignment_residuals(std::string inputfilename = "data.txt", - std::string outfilename = "tmp.root") +void plot_alignment_residuals(std::string outfilename = "tmp.root") { gStyle->SetStatW(0.3); gStyle->SetStatH(0.3); @@ -68,10 +67,13 @@ void plot_alignment_residuals(std::string inputfilename = "data.txt", //ifstream fin("/sphenix/user/frawley/march17_2023/macros/detectors/sPHENIX/localAlignmentParamsFile.txt"); //ifstream fin("/sphenix/user/frawley/march17_2023/macros/detectors/sPHENIX/sumAlignmentParams_run18_iter2.txt"); // ifstream fin("/sphenix/user/frawley/march17_2023/macros/detectors/sPHENIX/sumAlignmentParams_run18_iter6_fixed_noconstraints.txt"); - ifstream fin("/sphenix/user/frawley/march17_2023/macros/detectors/sPHENIX/localAlignmentParamsFile.txt"); + ifstream fin("localAlignmentParamsFile.txt"); - if(!fin.is_open()) std::cout << "Unable to open input alignment params file" << std::endl; + if(!fin.is_open()) { + std::cout << "Unable to open input alignment params file" << std::endl; + return; + } TH2D *hpar[57][6]; for(int ilayer=0;ilayer<57;++ilayer) diff --git a/TrackerMillepedeAlignment/macros/plot_fits.C b/TrackerMillepedeAlignment/macros/plot_fits.C new file mode 100644 index 0000000..9e01e83 --- /dev/null +++ b/TrackerMillepedeAlignment/macros/plot_fits.C @@ -0,0 +1,317 @@ +#ifndef PLOT_FITS_C +#define PLOT_FITS_C + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +void plot_fits() +{ + gStyle->SetOptStat(1); + gStyle->SetOptFit(1); + + + TCut trcut(""); + //TCut phicut("track_phi < -0.5"); + TCut phicut(""); + TCut lyrcut_intt("layer > 2 && layer < 7"); + TCut lyrcut_mvtx("layer < 3"); + TCut lyrcut_tpc("layer > 6 && layer < 55"); + + TChain *ntp = new TChain("ntp"); + TChain *track_ntp = new TChain("track_ntp"); + + for (auto const& entry : std::filesystem::directory_iterator{"dat/"}) { + if (!entry.is_regular_file()) continue; + + std::string name{entry.path().filename()}; + if (name.find("helical_ntuple.root") == std::string::npos) continue; + name = entry.path(); + + std::cout << "Adding " << name << std::endl; + ntp->Add(name.c_str()); + track_ntp->Add(name.c_str()); + } + + TH2D *hglob = new TH2D("hglob","global y:x",200, -5, 5, 200, -5, 5); + TH2D *hfit = new TH2D("hfit","glob fity:fitx",200, -5, 5, 200, -5, 5); + TH2D *hsens = new TH2D("hsens","glob sensy:sensx",200, -5, 5, 200, -5, 5); + TH2D *hpoint = new TH2D("hpoint","glob pcay:pcax",200, -5, 5, 200, -5, 5); + TH2D *htang = new TH2D("htang","glob tangy:tangx",200, -5, 5, 200, -5, 5); + + double dX = 1.0; + double dY= 1.0; + double dx = 1.5; + double dy = 1.5; + double vdX = 1.5; + double vdY = 5.0; + + bool silicon = false; + if(silicon) { + dX = 0.06; + dY = 0.06; + dx = 0.5; + dy = 0.5; + vdX = 0.5; + vdY = 0.5; + } + + TCanvas *c1 = new TCanvas("c1","",50,300,1600,1600); + c1->Divide(2,2); + + c1->cd(1); + TH2D *hXb = new TH2D("hXb","Cluster X residual vs phi TPC",200,-3.5,3.5,200,-dX,dX); + ntp->Draw("fitX-X:phi>>hXb",trcut && lyrcut_tpc); + hXb->GetXaxis()->SetTitle("phi (rad)"); + hXb->DrawCopy("colz"); + + c1->cd(2); + TH2D *hYb = new TH2D("hYb","Cluster Y residual vs phi TPC",200,-3.5,3.5,200,-4,4); + ntp->Draw("fitY-Y:phi>>hYb", trcut && lyrcut_tpc); + hYb->GetXaxis()->SetTitle("phi (rad)"); + hYb->DrawCopy("colz"); + + c1->cd(3); + TH1D *hX1b = new TH1D("hX1b","Cluster X residual TPC",200,-dX, dX); + ntp->Draw("fitX-X>>hX1b",trcut && lyrcut_tpc); + hX1b->GetXaxis()->SetTitle("X residual (cm)"); + hX1b->DrawCopy("colz"); + + // TF1 *fg5 = new TF1("fg5","gaus",-0.6,0.6); + // hX1a->Fit(fg5,"R"); + + c1->cd(4); + TH1D *hY1b = new TH1D("hY1b","Cluster Y residual TPC",200,-4,4); + ntp->Draw("fitY-Y>>hY1b",trcut && lyrcut_tpc); + hY1b->GetXaxis()->SetTitle("Y residual (cm)"); + hY1b->DrawCopy("colz"); + c1->SaveAs("plot_fits_c1.png"); + + TCanvas *c2 = new TCanvas("c2","",50,300,1600,1600); + c2->Divide(2,2); + + c2->cd(1); + TH2D *hXa = new TH2D("hXa","Cluster X residual vs phi INTT",200,-3.5,3.5,200,-dX,dX); + ntp->Draw("fitX-X:phi>>hXa",trcut && lyrcut_intt); + hXa->GetXaxis()->SetTitle("phi (rad)"); + hXa->DrawCopy("colz"); + + c2->cd(2); + TH2D *hYa = new TH2D("hYa","Cluster Y residual vs phi INTT",200,-3.5,3.5,200,-4,4); + ntp->Draw("fitY-Y:phi>>hYa", trcut && lyrcut_intt); + hYa->GetXaxis()->SetTitle("phi (rad)"); + hYa->DrawCopy("colz"); + + c2->cd(3); + TH1D *hX1a = new TH1D("hX1a","Cluster X residual INTT",200,-dX, dX); + ntp->Draw("fitX-X>>hX1a",trcut && lyrcut_intt); + hX1a->GetXaxis()->SetTitle("X residual (cm)"); + hX1a->DrawCopy("colz"); + + // TF1 *fg5 = new TF1("fg5","gaus",-0.6,0.6); + // hX1a->Fit(fg5,"R"); + + c2->cd(4); + TH1D *hY1a = new TH1D("hY1a","Cluster Y residual INTT",200,-4,4); + ntp->Draw("fitY-Y>>hY1a",trcut && lyrcut_intt); + hY1a->GetXaxis()->SetTitle("Y residual (cm)"); + hY1a->DrawCopy("colz"); + c2->SaveAs("plot_fits_c2.png"); + + TCanvas *c3 = new TCanvas("c3","",50,300,1600,1600); + c3->Divide(2,2); + + c3->cd(1); + TH2D *hX = new TH2D("hX","Cluster X residual vs phi MVTX",200,-3.5,3.5,200,-dX,dX); + ntp->Draw("fitX-X:phi>>hX",trcut && lyrcut_mvtx); + hX->GetXaxis()->SetTitle("phi (rad)"); + hX->DrawCopy("colz"); + + c3->cd(2); + TH2D *hY = new TH2D("hY","Cluster Y residual vs phi MVTX",200,-3.5,3.5,200,-3*dY,3*dY); + ntp->Draw("fitY-Y:phi>>hY", trcut && lyrcut_mvtx); + hY->GetXaxis()->SetTitle("phi (rad)"); + hY->DrawCopy("colz"); + + c3->cd(3); + TH1D *hX1 = new TH1D("hX1","Cluster X residual MVTX",500,-dX, dX); + ntp->Draw("fitX-X>>hX1",trcut && lyrcut_mvtx); + hX1->GetXaxis()->SetTitle("X residual (cm)"); + hX1->DrawCopy("colz"); + + TF1 *fg3 = new TF1("fg3","gaus",-0.2,0.2); + //hX1->Fit(fg3,"R"); + + c3->cd(4); + TH1D *hY1 = new TH1D("hY1","Cluster Y residual MVTX",500,-3*dY, 3*dY); + ntp->Draw("fitY-Y>>hY1",trcut && lyrcut_mvtx); + hY1->GetXaxis()->SetTitle("Y residual (cm)"); + hY1->DrawCopy("colz"); + + TF1 *fg4 = new TF1("fg4","gaus",-0.2,0.2); + //hY1->Fit(fg4,"R"); + c3->SaveAs("plot_fits_c3.png"); + + TCanvas *c5 = new TCanvas("c5","",50,200,1600,1200); + c5->Divide(3,2); + + c5->cd(1); + gPad->SetLeftMargin(0.12); + gPad->SetRightMargin(0.13); + TH2D *hvyx = new TH2D("hvyx","event vertex y:x",200, -dx, dx, 200, -dy, dy); + track_ntp->Draw("event_yvtx:event_xvtx >> hvyx",phicut); + hvyx->GetXaxis()->SetTitle("vertex x (cm)"); + hvyx->GetYaxis()->SetTitle("vertex y (cm)"); + hvyx->DrawCopy("colz"); + + c5->cd(2); + gPad->SetLeftMargin(0.12); + gPad->SetRightMargin(0.12); + TH2D *hvryx = new TH2D("hvryx","event vertex residual Y:X",200, -vdX, vdX, 200, -vdY, vdY); + track_ntp->Draw("residual_y:residual_x >> hvryx",phicut); + hvryx->GetXaxis()->SetTitle("vertex X residual (cm)"); + hvryx->GetYaxis()->SetTitle("vertex Y residual (cm)"); + hvryx->DrawCopy("colz"); + + c5->cd(3); + gPad->SetLeftMargin(0.12); + gPad->SetRightMargin(0.12); + TH1D *hvres = new TH1D("hvres","vertex X residual ", 200, -vdX, vdX); + track_ntp->Draw("residual_x >> hvres", phicut); + hvres->GetXaxis()->SetTitle("vertex X residual (cm)"); + hvres->DrawCopy(); + + TF1 *fg1 = new TF1("fg1","gaus",-0.3,0.3); + //hvres->Fit(fg1,"R"); + + c5->cd(4); + gPad->SetLeftMargin(0.12); + gPad->SetRightMargin(0.12); + TH1D *hz = new TH1D("hz","vertex Y residual",200,-vdY,vdY); + track_ntp->Draw("residual_y>> hz", phicut); + hz->GetXaxis()->SetTitle("vertex Y residual (cm)"); + hz->DrawCopy(); + + TF1 *fg2 = new TF1("fg2","gaus",-0.045,0.045); + //hz->Fit(fg2,"R"); + + c5->cd(5); + gPad->SetLeftMargin(0.12); + gPad->SetRightMargin(0.12); + TH2D *hz1 = new TH2D("hz1","vertex X residual vs track phi",200,-3.5, 3.5, 200, -vdX, vdX); + track_ntp->Draw("residual_x:track_phi >> hz1", phicut); + hz1->GetYaxis()->SetTitle("vertex X residual (cm)"); + hz1->GetXaxis()->SetTitle("track phi (rad)"); + hz1->DrawCopy("colz"); + + c5->cd(6); + gPad->SetLeftMargin(0.12); + gPad->SetRightMargin(0.12); + TH2D *hz2 = new TH2D("hz2","vertex Y residual vs track phi",200,-3.5, 3.5, 200, -vdY, vdY); + //track_ntp->Draw("residual_y:track_zvtx >> hz2", phicut); + track_ntp->Draw("residual_y:track_phi >> hz2", phicut); + hz2->GetYaxis()->SetTitle("vertex Y residual (cm)"); + hz2->GetXaxis()->SetTitle("track phi (rad)"); + hz2->DrawCopy("colz"); + c5->SaveAs("plot_fits_c5.png"); + + /* + TCanvas *c6 = new TCanvas("c6","vtx X local derivatives", 40,40,1200,1200); + c6->Divide(2,2); + c6->cd(1); + TH2D *hdxdxys = new TH2D("hdxdxys","hdxdxys vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dXdXYs:track_phi >>hdxdxys"); + hdxdxys->DrawCopy(); + + c6->cd(2); + TH2D *hdxdy0 = new TH2D("hdxdy0","hdxdy0 vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dXdY0:track_phi >>hdxdy0"); + hdxdy0->DrawCopy(); + + c6->cd(3); + TH2D *hdxdzs = new TH2D("hdxdzs","hdxdZs vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dXdZs:track_phi >>hdxdzs"); + hdxdzs->DrawCopy(); + + c6->cd(4); + TH2D *hdxdz0 = new TH2D("hdxdz0","hdxdZ0 vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dXdZ0:track_phi >>hdxdz0"); + hdxdz0->DrawCopy(); + */ + + /* + TCanvas *c7 = new TCanvas("c7","vtx Y local derivatives", 40,40,1200,1200); + c7->Divide(2,2); + c7->cd(1); + TH2D *hdydxys = new TH2D("hdydxys","hdydxys vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dYdXYs:track_phi >>hdydxys"); + hdydxys->DrawCopy(); + + c7->cd(2); + TH2D *hdydy0 = new TH2D("hdydy0","hdydy0 vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dYdY0:track_phi >>hdydy0"); + hdydy0->DrawCopy(); + + c7->cd(3); + TH2D *hdydzs = new TH2D("hdydzs","hdydZs vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dYdZs:track_phi >>hdydzs"); + hdydzs->DrawCopy(); + + c7->cd(4); + TH2D *hdydz0 = new TH2D("hdydz0","hdydZ0 vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dYdZ0:track_phi >>hdydz0"); + hdydz0->DrawCopy(); + */ + /* + TCanvas *c8 = new TCanvas("c8","vtx global derivatives", 40,40,1200,800); + c8->Divide(3,2); + + c8->cd(1); + TH2D *hdxdx = new TH2D("hdxdx","hdxdx vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dXdx:track_phi >>hdxdx"); + hdxdx->DrawCopy(); + + c8->cd(2); + TH2D *hdxdy = new TH2D("hdxdy","hdxdy vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dXdy:track_phi >>hdxdy"); + hdxdy->DrawCopy(); + + c8->cd(3); + TH2D *hdxdz = new TH2D("hdxdz","hdxdz vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dXdz:track_phi >>hdxdz"); + hdxdz->DrawCopy(); + + c8->cd(4); + TH2D *hdydx = new TH2D("hdydx","hdydx vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dYdx:track_phi >>hdydx"); + hdydx->DrawCopy(); + + c8->cd(5); + TH2D *hdydy = new TH2D("hdydy","hdydy vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dYdy:track_phi >>hdydy"); + hdydy->DrawCopy(); + + c8->cd(6); + TH2D *hdydz = new TH2D("hdydz","hdydz vs phi",200,-3.5,3.5,200,-2,2); + track_ntp->Draw("dYdz:track_phi >>hdydz"); + hdydz->DrawCopy(); + */ + /* + TCanvas *c9 = new TCanvas("c9","",50,50,800,800); + + track_ntp->Draw("track_phi","abs(track_xvtx) < 0.1 && abs(track_yvtx) < 0.1"); + */ + + +} + +#endif//PLOT_FITS_C diff --git a/TrackerMillepedeAlignment/process_millepede_results.C b/TrackerMillepedeAlignment/macros/process_millepede_results.C similarity index 99% rename from TrackerMillepedeAlignment/process_millepede_results.C rename to TrackerMillepedeAlignment/macros/process_millepede_results.C index 00eee9d..8b4efe2 100644 --- a/TrackerMillepedeAlignment/process_millepede_results.C +++ b/TrackerMillepedeAlignment/macros/process_millepede_results.C @@ -327,7 +327,10 @@ void process_millepede_results(std::string pedefilename = "millepede.res", int nladders_layer[7] = {12, 16, 20, 12, 12, 16, 16}; ifstream fin(pedefilename); - if(!fin.is_open()) std::cout << "Unable to open file name " << pedefilename << std::endl; + if(!fin.is_open()) { + std::cout << "Unable to open file name " << pedefilename << std::endl; + return; + } int label = 0; float align = 0.0; diff --git a/TrackerMillepedeAlignment/subtract_updated_from_new_alignment.C b/TrackerMillepedeAlignment/macros/subtract_updated_from_new_alignment.C similarity index 100% rename from TrackerMillepedeAlignment/subtract_updated_from_new_alignment.C rename to TrackerMillepedeAlignment/macros/subtract_updated_from_new_alignment.C diff --git a/TrackerMillepedeAlignment/scripts/Fun4All_SiliconOnlyAlignment.sh b/TrackerMillepedeAlignment/scripts/Fun4All_SiliconOnlyAlignment.sh new file mode 100755 index 0000000..bba3ee3 --- /dev/null +++ b/TrackerMillepedeAlignment/scripts/Fun4All_SiliconOnlyAlignment.sh @@ -0,0 +1,64 @@ +#! /bin/bash + +SHOW(){ +cat << EOF +Running in directory: +$(pwd) + +Directory contents: +$(ls -1a) + +EOF +} + +if ! [ -f $1 ] || ! [[ $2 =~ ^[0-9]+$ ]]; then +cat << EOF + + usage: + $0 [file list] [line number] + Wrapper shell script to rum ../macros/Fun4All_SiliconOnlyAlignment.C + Which produces millepede residuals with its HelicalFitter SubsysReco module + + Must be run as a Condor job + +EOF + exit 0 +fi + +LIST=$1 +LINE=$2 + +if [ -z "${_CONDOR_SCRATCH_DIR}" ] || ! [ -d "${_CONDOR_SCRATCH_DIR}" ]; then +cat << EOF + + Job must run under Condor + +EOF + exit 1 +fi + +cd -- "$(dirname -- "${BASH_SOURCE[0]}")" +source alignment_setup.sh +source /opt/sphenix/core/bin/sphenix_setup.sh -n new +if [ -n "$MYINSTALL" ] && [ -d "$MYINSTALL" ]; then + source /opt/sphenix/core/bin/setup_local.sh $MYINSTALL +fi + +cd ${_CONDOR_SCRATCH_DIR} +rsync -av ${ALIGN_SOURCE_DIR}/macros/* . +rsync -av ${ALIGN_SOURCE_DIR}/${LIST} . + +# The submitter script has copied the correct thing to the DATA dir for +rsync -av ${ALIGN_DATA_DIR}/localAlignmentParamsFile.txt . +SHOW + +root -q -b "Fun4All_SiliconOnlyAlignment.C(\"$(basename "${LIST}")\", ${LINE})" +RV=$? + +SHOW +mkdir -p ${ALIGN_DATA_DIR}/dat +cp clusters_seeds* ${ALIGN_DATA_DIR}/dat/. + +echo "$0" done +exit $RV + diff --git a/TrackerMillepedeAlignment/RunAlignment.sh b/TrackerMillepedeAlignment/scripts/RunAlignment.sh similarity index 100% rename from TrackerMillepedeAlignment/RunAlignment.sh rename to TrackerMillepedeAlignment/scripts/RunAlignment.sh diff --git a/TrackerMillepedeAlignment/scripts/alignment_setup.sh b/TrackerMillepedeAlignment/scripts/alignment_setup.sh new file mode 100755 index 0000000..6113126 --- /dev/null +++ b/TrackerMillepedeAlignment/scripts/alignment_setup.sh @@ -0,0 +1,39 @@ +#! /bin/bash + +export USER="$(id -u -n)" +export LOGNAME="${USER}" +export HOME="/sphenix/u/${USER}" + +export ALIGN_SOURCE_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && cd .. && pwd)" + +mkdir -p ${ALIGN_SOURCE_DIR}/txt +if ! [ -f "${ALIGN_SOURCE_DIR}/txt/iteration.txt" ]; then + echo "0" > "${ALIGN_SOURCE_DIR}/txt/iteration.txt" +fi +export ITR=$(cat "${ALIGN_SOURCE_DIR}/txt/iteration.txt") + +# These may need to be changed for your use case +export MYINSTALL="/sphenix/user/${USER}/MYINSTALL" +export ALIGN_DATA_DIR="/sphenix/tg/tg01/hf/${USER}/alignment" + +if [ -z "${ALIGN_DATA_DIR}" ] || ! [ -d "${ALIGN_DATA_DIR}" ] || ! [ -w "${ALIGN_DATA_DIR}" ]; then +cat << EOF + + Define the variable + ALIGN_DATA_DIR + in + ${ALIGN_SOURCE_DIR}/scripts/$(basename $0) + to an existing directory (where you have write permissions) + + This script will not create one for you. + + Note that you may also wish to change the value of MYINSTALL, which is + ${MYINSTALL} + +EOF + exit 1 +fi + +export ALIGN_DATA_DIR="${ALIGN_DATA_DIR}/iteration_${ITR}" +mkdir -p ${ALIGN_DATA_DIR} + diff --git a/TrackerMillepedeAlignment/scripts/increment.sh b/TrackerMillepedeAlignment/scripts/increment.sh new file mode 100755 index 0000000..5d20e1b --- /dev/null +++ b/TrackerMillepedeAlignment/scripts/increment.sh @@ -0,0 +1,11 @@ +cd -- "$(dirname -- "${BASH_SOURCE[0]}")" +source alignment_setup.sh + +NEW_ALIGN_PARAMS=${ALIGN_DATA_DIR}/newLocalAlignmentParamsFile.txt + +ITR=$((ITR+1)) +echo "${ITR}" | tee "${ALIGN_SOURCE_DIR}/txt/iteration.txt" + +source alignment_setup.sh +cp ${NEW_ALIGN_PARAMS} ${ALIGN_DATA_DIR}/localAlignmentParamsFile.txt + diff --git a/TrackerMillepedeAlignment/scripts/run_pede.sh b/TrackerMillepedeAlignment/scripts/run_pede.sh new file mode 100755 index 0000000..c79ca63 --- /dev/null +++ b/TrackerMillepedeAlignment/scripts/run_pede.sh @@ -0,0 +1,27 @@ +#! /bin/bash + +cd -- "$(dirname -- "${BASH_SOURCE[0]}")" +source alignment_setup.sh +source /opt/sphenix/core/bin/sphenix_setup.sh -n new +if [ -n "$MYINSTALL" ] && [ -d "$MYINSTALL" ]; then + source /opt/sphenix/core/bin/setup_local.sh $MYINSTALL +fi + +cd ${ALIGN_DATA_DIR} + +# pede +STEER="steer.txt" +rm -rf ${STEER} +ls -1 dat/*.bin >> ${STEER} 2> /dev/null +echo "scaleerrors 5 5" >> ${STEER} 2> /dev/null +pede ${STEER} | tee millepede.out +echo "pede done" + +root -q -b "${ALIGN_SOURCE_DIR}/macros/process_millepede_results.C+" | tee process_millepede_results.out +root -q -b "${ALIGN_SOURCE_DIR}/macros/plot_fits.C" | tee plot_fits.out +root -q -b "${ALIGN_SOURCE_DIR}/macros/makeAlignmentParsSumFile.C+" | tee makeAlignmentParsSumFile.out +root -q -b "${ALIGN_SOURCE_DIR}/macros/plot_alignment_residuals.C+" | tee plot_alignment_residuals.out +root -q -b "${ALIGN_SOURCE_DIR}/macros/detailed_alignment_parameter_plots.C" | tee detailed_alignment_parameter_plots.out + +echo "$0 done" + diff --git a/TrackerMillepedeAlignment/scripts/submit_fun4all_jobs.sh b/TrackerMillepedeAlignment/scripts/submit_fun4all_jobs.sh new file mode 100755 index 0000000..deaea90 --- /dev/null +++ b/TrackerMillepedeAlignment/scripts/submit_fun4all_jobs.sh @@ -0,0 +1,63 @@ +#! /bin/bash + +cd -- "$(dirname -- "${BASH_SOURCE[0]}")" +source alignment_setup.sh +cd ${ALIGN_SOURCE_DIR} + +if [ ${ITR} -eq 0 ]; then + cp txt/localAlignmentParamsFile.txt ${ALIGN_DATA_DIR}/. +fi + +# RUN_NUMS="41989 41992" +# FILE_FORMAT="/sphenix/lustre01/sphnxpro/commissioning/slurp/tpcbeam/run_%08d_%08d/*%08d*" + +# RUN_NUMS="53285" +# FILE_FORMAT="/sphenix/lustre01/sphnxpro/physics/slurp/streaming/physics/new_2024p002/run_%08d_%08d/*%08d*" + +# CHANGE ME +RUN_NUMS="49708 49709 49710 49711" # 49706 49707 49708 49709 49710 49711 49712 49713 +FILE_FORMAT="/sphenix/lustre01/sphnxpro/physics/slurp/tracking/new_2024p005/run_%08d_%08d/DST_TRKR_HIT_*%08d*" + +ARGS="" +for RUN_NUM in ${RUN_NUMS}; do + ARGS="${ARGS}_${RUN_NUM}" +done + +mkdir -p list +LIST="list/segments${ARGS}.list" + +if ! [ -f ${LIST} ] || [ "$1" == "-f" ]; then + rm -rf "$LIST" + for RUN_NUM in $RUN_NUMS; do + FILE_PATTERN=$(printf ${FILE_FORMAT} $(( (RUN_NUM / 100) * 100 )) $(( (RUN_NUM / 100 + 1) * 100 )) ${RUN_NUM}) + echo "${FILE_PATTERN}" + ls -1 ${FILE_PATTERN} >> ${LIST} 2> /dev/null + done +fi + +NUM_JOB=$(wc -l ${LIST} | awk '{print $1}') + +mkdir -p job +mkdir -p out +JOB="job/fun4all${ARGS}.job" +cat << EOF > ${JOB} +universe = vanilla +executable = scripts/Fun4All_SiliconOnlyAlignment.sh +arguments = $LIST \$(process) + +notification = Never + +output = out/out${ARGS}_\$(process).out +error = out/out${ARGS}_\$(process).out +log = /tmp/${USER}_alignment${ARGS}_\$(process).log + +request_memory = 8192MB +PeriodicHold = (NumJobStarts >= 1 && JobStatus == 1) +concurrency_limits = CONCURRENCY_LIMIT_DEFAULT:100 + +queue ${NUM_JOB} +EOF + +echo "submitting job file $JOB" +condor_submit $JOB + diff --git a/TrackerMillepedeAlignment/ideal_tracking_transforms_october25_2023.txt b/TrackerMillepedeAlignment/txt/ideal_tracking_transforms_october25_2023.txt similarity index 100% rename from TrackerMillepedeAlignment/ideal_tracking_transforms_october25_2023.txt rename to TrackerMillepedeAlignment/txt/ideal_tracking_transforms_october25_2023.txt diff --git a/TrackerMillepedeAlignment/intt_survey_data_alignment_parameters.txt b/TrackerMillepedeAlignment/txt/intt_survey_data_alignment_parameters.txt similarity index 100% rename from TrackerMillepedeAlignment/intt_survey_data_alignment_parameters.txt rename to TrackerMillepedeAlignment/txt/intt_survey_data_alignment_parameters.txt diff --git a/TrackerMillepedeAlignment/intt_survey_transforms_Bertaux_October25_2023.root b/TrackerMillepedeAlignment/txt/intt_survey_transforms_Bertaux_October25_2023.root similarity index 100% rename from TrackerMillepedeAlignment/intt_survey_transforms_Bertaux_October25_2023.root rename to TrackerMillepedeAlignment/txt/intt_survey_transforms_Bertaux_October25_2023.root diff --git a/TrackerMillepedeAlignment/txt/localAlignmentParamsFile.txt b/TrackerMillepedeAlignment/txt/localAlignmentParamsFile.txt new file mode 100644 index 0000000..6f8635f --- /dev/null +++ b/TrackerMillepedeAlignment/txt/localAlignmentParamsFile.txt @@ -0,0 +1,1824 @@ +16 0 0 0 6.60507 -1.75899 -6.73163 +48 0 0 0 6.55661 -1.73985 -6.73367 +80 0 0 0 6.50994 -1.69871 -6.74236 +112 0 0 0 6.47751 -1.64083 -6.75615 +144 0 0 0 6.44373 -1.57952 -6.76826 +176 0 0 0 6.4019 -1.52084 -6.77376 +208 0 0 0 6.37797 -1.45771 -6.78481 +240 0 0 0 6.35474 -1.40429 -6.79645 +272 0 0 0 6.31793 -1.36032 -6.82253 +528 0 0 0 6.56275 -1.67516 -6.69164 +560 0 0 0 6.54324 -1.62195 -6.70115 +592 0 0 0 6.51628 -1.55209 -6.71366 +624 0 0 0 6.48082 -1.47832 -6.72739 +656 0 0 0 6.45254 -1.4042 -6.735 +688 0 0 0 6.42465 -1.3439 -6.7338 +720 0 0 0 6.39373 -1.2948 -6.73874 +752 0 0 0 6.35333 -1.25675 -6.73925 +784 0 0 0 6.29124 -1.26738 -6.75267 +1040 0 0 0 6.5944 -1.71342 -6.59005 +1072 0 0 0 6.56287 -1.6606 -6.59819 +1104 0 0 0 6.52724 -1.59658 -6.6167 +1136 0 0 0 6.48879 -1.52074 -6.62462 +1168 0 0 0 6.45275 -1.44333 -6.6346 +1200 0 0 0 6.40846 -1.36703 -6.64242 +1232 0 0 0 6.36394 -1.31208 -6.63725 +1264 0 0 0 6.31772 -1.2643 -6.63258 +1296 0 0 0 6.27394 -1.23463 -6.64893 +1552 0 0 0 5.8136 -1.2464 -6.41243 +1584 0 0 0 5.84675 -1.24062 -6.4351 +1616 0 0 0 5.88694 -1.25144 -6.43864 +1648 0 0 0 5.92878 -1.2634 -6.44608 +1680 0 0 0 5.97036 -1.29282 -6.4578 +1712 0 0 0 6.01367 -1.32316 -6.46591 +1744 0 0 0 6.0508 -1.35195 -6.47617 +1776 0 0 0 6.08198 -1.376 -6.48183 +1808 0 0 0 6.11218 -1.37837 -6.48628 +2064 0 0 0 5.98678 -1.30875 -6.32891 +2096 0 0 0 6.03938 -1.30485 -6.34846 +2128 0 0 0 6.09901 -1.30173 -6.35678 +2160 0 0 0 6.13943 -1.29348 -6.37107 +2192 0 0 0 6.17198 -1.29047 -6.38289 +2224 0 0 0 6.18611 -1.28738 -6.38823 +2256 0 0 0 6.19128 -1.27939 -6.39363 +2288 0 0 0 6.17589 -1.26059 -6.40938 +2320 0 0 0 6.14743 -1.22967 -6.40872 +2576 0 0 0 6.12262 -1.31768 -6.31654 +2608 0 0 0 6.14707 -1.29496 -6.32426 +2640 0 0 0 6.16642 -1.27504 -6.33283 +2672 0 0 0 6.18346 -1.26092 -6.34834 +2704 0 0 0 6.18699 -1.24498 -6.35066 +2736 0 0 0 6.18249 -1.23378 -6.36035 +2768 0 0 0 6.17842 -1.21879 -6.36991 +2800 0 0 0 6.1617 -1.20173 -6.38159 +2832 0 0 0 6.13818 -1.18171 -6.37983 +3088 0 0 0 6.03149 -1.26024 -6.22578 +3120 0 0 0 6.05638 -1.20651 -6.24493 +3152 0 0 0 6.0903 -1.15811 -6.26261 +3184 0 0 0 6.11115 -1.12887 -6.27429 +3216 0 0 0 6.11644 -1.11556 -6.29022 +3248 0 0 0 6.10399 -1.12014 -6.29643 +3280 0 0 0 6.08468 -1.12622 -6.30756 +3312 0 0 0 6.05437 -1.13899 -6.32295 +3344 0 0 0 6.01012 -1.14941 -6.32875 +3600 0 0 0 6.11961 -1.10599 -6.30846 +3632 0 0 0 6.14798 -1.06864 -6.28305 +3664 0 0 0 6.1532 -1.06633 -6.27789 +3696 0 0 0 6.15562 -1.0386 -6.28963 +3728 0 0 0 6.14149 -1.03885 -6.29932 +3760 0 0 0 6.13014 -1.03864 -6.30365 +3792 0 0 0 6.10923 -1.04327 -6.31701 +3824 0 0 0 6.08205 -1.05038 -6.32563 +3856 0 0 0 6.04973 -1.04902 -6.32869 +4112 0 0 0 6.2395 -0.938066 -6.24205 +4144 0 0 0 6.22307 -0.907279 -6.26988 +4176 0 0 0 6.21124 -0.925909 -6.25553 +4208 0 0 0 6.2031 -0.932353 -6.27182 +4240 0 0 0 6.19056 -0.938302 -6.27901 +4272 0 0 0 6.17637 -0.960883 -6.27828 +4304 0 0 0 6.15591 -0.978724 -6.2854 +4336 0 0 0 6.12934 -0.997234 -6.29602 +4368 0 0 0 6.10248 -0.997214 -6.30382 +4624 0 0 0 6.65412 -1.28569 -6.81446 +4656 0 0 0 6.67089 -1.27252 -6.82697 +4688 0 0 0 6.67378 -1.2391 -6.83231 +4720 0 0 0 6.67649 -1.1887 -6.83649 +4752 0 0 0 6.67482 -1.12734 -6.85121 +4784 0 0 0 6.67716 -1.05872 -6.85104 +4816 0 0 0 6.67569 -1.00401 -6.85386 +4848 0 0 0 6.67615 -0.96647 -6.86954 +4880 0 0 0 6.66659 -0.922842 -6.88522 +5136 0 0 0 6.76845 -1.23854 -6.84539 +5168 0 0 0 6.75054 -1.20534 -6.84707 +5200 0 0 0 6.73087 -1.15065 -6.85728 +5232 0 0 0 6.72195 -1.08962 -6.85639 +5264 0 0 0 6.70859 -1.02555 -6.85361 +5296 0 0 0 6.70039 -0.960448 -6.84921 +5328 0 0 0 6.69559 -0.906296 -6.85463 +5360 0 0 0 6.68191 -0.853445 -6.868 +5392 0 0 0 6.67079 -0.818398 -6.89083 +5648 0 0 0 6.84549 -1.15236 -6.79294 +5680 0 0 0 6.80656 -1.11601 -6.79047 +5712 0 0 0 6.76802 -1.06195 -6.78724 +5744 0 0 0 6.76076 -1.00252 -6.79304 +5776 0 0 0 6.73203 -0.923393 -6.79311 +5808 0 0 0 6.72796 -0.84916 -6.78289 +5840 0 0 0 6.71552 -0.788674 -6.78525 +5872 0 0 0 6.69905 -0.73542 -6.79485 +5904 0 0 0 6.69032 -0.706182 -6.80212 +65552 0 0 0 6.20906 -1.47243 -7.01485 +65584 0 0 0 6.22313 -1.45615 -7.0224 +65616 0 0 0 6.23645 -1.44104 -7.02904 +65648 0 0 0 6.25625 -1.43134 -7.04165 +65680 0 0 0 6.27318 -1.42572 -7.04861 +65712 0 0 0 6.28902 -1.41964 -7.05661 +65744 0 0 0 6.30638 -1.42211 -7.05847 +65776 0 0 0 6.33106 -1.42873 -7.05196 +65808 0 0 0 6.33485 -1.42494 -7.07973 +66064 0 0 0 6.11023 -1.48592 -7.06919 +66096 0 0 0 6.10765 -1.50016 -7.07856 +66128 0 0 0 6.12226 -1.50906 -7.09204 +66160 0 0 0 6.14306 -1.51731 -7.10641 +66192 0 0 0 6.15956 -1.52541 -7.11459 +66224 0 0 0 6.18137 -1.52047 -7.12081 +66256 0 0 0 6.21608 -1.49781 -7.11939 +66288 0 0 0 6.24329 -1.46722 -7.10198 +66320 0 0 0 6.26542 -1.4502 -7.12753 +66576 0 0 0 6.07986 -1.45514 -6.94323 +66608 0 0 0 6.09234 -1.45426 -6.9552 +66640 0 0 0 6.115 -1.44488 -6.96989 +66672 0 0 0 6.13397 -1.43636 -6.98074 +66704 0 0 0 6.15486 -1.41803 -6.99292 +66736 0 0 0 6.18084 -1.39866 -6.99989 +66768 0 0 0 6.21925 -1.37626 -7.00347 +66800 0 0 0 6.26137 -1.35906 -6.99688 +66832 0 0 0 6.29823 -1.35359 -7.00533 +67088 0 0 0 6.03628 -1.43515 -7.09979 +67120 0 0 0 6.05572 -1.40529 -7.10619 +67152 0 0 0 6.09681 -1.37305 -7.12196 +67184 0 0 0 6.14709 -1.33555 -7.12444 +67216 0 0 0 6.20449 -1.30064 -7.13913 +67248 0 0 0 6.25758 -1.27849 -7.1409 +67280 0 0 0 6.29657 -1.25302 -7.14648 +67312 0 0 0 6.32174 -1.23913 -7.14307 +67344 0 0 0 6.34884 -1.23922 -7.14162 +67600 0 0 0 6.22066 -1.10781 -6.33923 +67632 0 0 0 6.22073 -1.11246 -6.35253 +67664 0 0 0 6.23005 -1.12517 -6.36414 +67696 0 0 0 6.23486 -1.13576 -6.37702 +67728 0 0 0 6.23418 -1.13926 -6.3928 +67760 0 0 0 6.22479 -1.1446 -6.40597 +67792 0 0 0 6.20959 -1.14443 -6.41343 +67824 0 0 0 6.1995 -1.1515 -6.42885 +67856 0 0 0 6.1878 -1.14584 -6.43459 +68112 0 0 0 6.27346 -1.01465 -6.39468 +68144 0 0 0 6.24723 -1.02177 -6.41971 +68176 0 0 0 6.22995 -1.0151 -6.42648 +68208 0 0 0 6.2177 -1.01578 -6.43024 +68240 0 0 0 6.21719 -1.01372 -6.43513 +68272 0 0 0 6.21176 -1.01719 -6.43533 +68304 0 0 0 6.21311 -1.02181 -6.43478 +68336 0 0 0 6.21273 -1.02485 -6.44279 +68368 0 0 0 6.21725 -1.02384 -6.44899 +68624 0 0 0 6.24144 -0.878025 -6.31783 +68656 0 0 0 6.2128 -0.888409 -6.32664 +68688 0 0 0 6.20732 -0.901176 -6.33297 +68720 0 0 0 6.20691 -0.927107 -6.33824 +68752 0 0 0 6.21888 -0.948176 -6.33406 +68784 0 0 0 6.22856 -0.971397 -6.3278 +68816 0 0 0 6.23616 -0.988296 -6.33061 +68848 0 0 0 6.24463 -0.998116 -6.33585 +68880 0 0 0 6.25073 -1.00258 -6.34304 +69136 0 0 0 6.22654 -0.780775 -6.36454 +69168 0 0 0 6.21743 -0.806966 -6.37184 +69200 0 0 0 6.19728 -0.836893 -6.36366 +69232 0 0 0 6.19522 -0.869704 -6.35889 +69264 0 0 0 6.20723 -0.891645 -6.34991 +69296 0 0 0 6.21367 -0.916971 -6.33482 +69328 0 0 0 6.22908 -0.93856 -6.32575 +69360 0 0 0 6.25387 -0.964937 -6.33135 +69392 0 0 0 6.27364 -0.981126 -6.34018 +69648 0 0 0 5.7898 -0.719775 -6.39379 +69680 0 0 0 5.77257 -0.75195 -6.40253 +69712 0 0 0 5.78216 -0.782798 -6.41154 +69744 0 0 0 5.80525 -0.814625 -6.41179 +69776 0 0 0 5.84048 -0.83706 -6.41715 +69808 0 0 0 5.87915 -0.859356 -6.42028 +69840 0 0 0 5.91994 -0.879291 -6.41925 +69872 0 0 0 5.95649 -0.907773 -6.43113 +69904 0 0 0 5.97754 -0.935741 -6.43021 +70160 0 0 0 5.73034 -0.660397 -6.27504 +70192 0 0 0 5.71702 -0.722996 -6.28227 +70224 0 0 0 5.73415 -0.779051 -6.29147 +70256 0 0 0 5.76218 -0.826478 -6.29239 +70288 0 0 0 5.79683 -0.873829 -6.29604 +70320 0 0 0 5.84627 -0.911495 -6.29611 +70352 0 0 0 5.90427 -0.933784 -6.29887 +70384 0 0 0 5.96587 -0.950338 -6.29803 +70416 0 0 0 6.01845 -0.951465 -6.30773 +70672 0 0 0 5.74761 -0.598507 -6.20786 +70704 0 0 0 5.74561 -0.602 -6.27388 +70736 0 0 0 5.78649 -0.648414 -6.30303 +70768 0 0 0 5.83931 -0.685086 -6.29421 +70800 0 0 0 5.89584 -0.709617 -6.30103 +70832 0 0 0 5.95737 -0.743022 -6.28269 +70864 0 0 0 6.0128 -0.78144 -6.29125 +70896 0 0 0 6.07436 -0.807514 -6.29285 +70928 0 0 0 6.12364 -0.809206 -6.30954 +71184 0 0 0 5.66068 -0.740301 -6.14891 +71216 0 0 0 5.71425 -0.83716 -6.34154 +71248 0 0 0 5.77763 -0.866712 -6.36465 +71280 0 0 0 5.84771 -0.89619 -6.37116 +71312 0 0 0 5.91945 -0.888649 -6.35908 +71344 0 0 0 5.99542 -0.896012 -6.35633 +71376 0 0 0 6.06278 -0.90782 -6.35041 +71408 0 0 0 6.12485 -0.903541 -6.34895 +71440 0 0 0 6.1695 -0.890544 -6.34975 +71696 0 0 0 6.45821 -0.966641 -6.93409 +71728 0 0 0 6.47664 -0.97202 -6.98259 +71760 0 0 0 6.49268 -0.959846 -6.99363 +71792 0 0 0 6.51656 -0.945633 -6.99369 +71824 0 0 0 6.5338 -0.930031 -6.99496 +71856 0 0 0 6.56032 -0.920824 -6.98647 +71888 0 0 0 6.58572 -0.912791 -6.98688 +71920 0 0 0 6.61586 -0.905885 -6.99431 +71952 0 0 0 6.63208 -0.901585 -7.01024 +72208 0 0 0 6.44293 -1.02451 -6.93457 +72240 0 0 0 6.48073 -1.03382 -6.94747 +72272 0 0 0 6.52409 -1.04065 -6.95792 +72304 0 0 0 6.5723 -1.03516 -6.95671 +72336 0 0 0 6.61707 -1.02252 -6.95294 +72368 0 0 0 6.66011 -0.997829 -6.94405 +72400 0 0 0 6.69628 -0.976172 -6.94677 +72432 0 0 0 6.71716 -0.942177 -6.9463 +72464 0 0 0 6.72819 -0.90796 -6.95458 +72720 0 0 0 6.5153 -0.902325 -7.17632 +72752 0 0 0 6.54971 -0.880551 -7.18414 +72784 0 0 0 6.57888 -0.852079 -7.1774 +72816 0 0 0 6.59715 -0.827782 -7.17003 +72848 0 0 0 6.62209 -0.818678 -7.16409 +72880 0 0 0 6.64382 -0.807481 -7.15279 +72912 0 0 0 6.67304 -0.792718 -7.14726 +72944 0 0 0 6.70319 -0.776127 -7.14126 +72976 0 0 0 6.71616 -0.769478 -7.13627 +73232 0 0 0 6.56265 -0.855038 -7.10251 +73264 0 0 0 6.55309 -0.816373 -7.09226 +73296 0 0 0 6.5604 -0.770322 -7.08907 +73328 0 0 0 6.60896 -0.771061 -7.09167 +73360 0 0 0 6.64022 -0.73966 -7.07714 +73392 0 0 0 6.67214 -0.711709 -7.06791 +73424 0 0 0 6.70021 -0.704236 -7.04685 +73456 0 0 0 6.71437 -0.680335 -7.04006 +73488 0 0 0 6.72828 -0.67875 -7.03819 +131088 0 0 0 5.90203 -1.34704 -7.09422 +131120 0 0 0 5.89874 -1.33784 -7.1017 +131152 0 0 0 5.90845 -1.32301 -7.09189 +131184 0 0 0 5.95549 -1.30816 -7.11506 +131216 0 0 0 5.96716 -1.30642 -7.11552 +131248 0 0 0 5.98724 -1.29975 -7.11725 +131280 0 0 0 6.05838 -1.30043 -7.10562 +131312 0 0 0 6.14276 -1.3224 -7.07618 +131344 0 0 0 6.17606 -1.30377 -7.12002 +131600 0 0 0 5.86148 -1.32692 -7.08315 +131632 0 0 0 5.84092 -1.34913 -7.07195 +131664 0 0 0 5.86243 -1.36861 -7.08023 +131696 0 0 0 5.90776 -1.36546 -7.10124 +131728 0 0 0 5.93178 -1.37359 -7.11233 +131760 0 0 0 5.96227 -1.36941 -7.12195 +131792 0 0 0 6.02612 -1.35511 -7.10418 +131824 0 0 0 6.11385 -1.29778 -7.03882 +131856 0 0 0 6.13617 -1.3116 -7.11498 +132112 0 0 0 5.82897 -1.24834 -7.04029 +132144 0 0 0 5.87437 -1.25141 -7.05611 +132176 0 0 0 5.92407 -1.24812 -7.07088 +132208 0 0 0 5.96978 -1.25957 -7.07831 +132240 0 0 0 6.01522 -1.27034 -7.08375 +132272 0 0 0 6.0591 -1.26725 -7.08867 +132304 0 0 0 6.09057 -1.27731 -7.09381 +132336 0 0 0 6.15202 -1.26117 -7.04221 +132368 0 0 0 6.14976 -1.30359 -7.09529 +132624 0 0 0 5.80915 -1.23936 -7.02937 +132656 0 0 0 5.85606 -1.20627 -7.04072 +132688 0 0 0 5.90873 -1.21663 -7.04499 +132720 0 0 0 5.96821 -1.20132 -7.03452 +132752 0 0 0 6.01648 -1.18046 -7.06553 +132784 0 0 0 6.07625 -1.17929 -7.05475 +132816 0 0 0 6.12856 -1.15947 -7.06445 +132848 0 0 0 6.16159 -1.15559 -7.07975 +132880 0 0 0 6.23287 -1.13059 -7.04603 +133136 0 0 0 5.78876 -1.20338 -6.939 +133168 0 0 0 5.8197 -1.23652 -6.91805 +133200 0 0 0 5.88485 -1.21395 -6.95232 +133232 0 0 0 5.95408 -1.19593 -6.95469 +133264 0 0 0 6.01999 -1.16307 -6.98346 +133296 0 0 0 6.08618 -1.14352 -6.97706 +133328 0 0 0 6.14026 -1.13496 -6.99442 +133360 0 0 0 6.18106 -1.06627 -6.96529 +133392 0 0 0 6.23426 -1.04888 -6.97732 +133648 0 0 0 6.01539 -1.05068 -6.31242 +133680 0 0 0 6.02539 -0.996627 -6.32101 +133712 0 0 0 6.0543 -1.03497 -6.32623 +133744 0 0 0 6.07665 -0.999267 -6.33136 +133776 0 0 0 6.10846 -0.999977 -6.34655 +133808 0 0 0 6.14281 -1.02269 -6.36632 +133840 0 0 0 6.17221 -1.03006 -6.3652 +133872 0 0 0 6.19295 -1.04575 -6.39427 +133904 0 0 0 6.21722 -1.02439 -6.39892 +134160 0 0 0 6.13601 -1.08734 -6.35079 +134192 0 0 0 6.11722 -1.07166 -6.38388 +134224 0 0 0 6.12029 -1.01401 -6.38523 +134256 0 0 0 6.12584 -0.980703 -6.37703 +134288 0 0 0 6.15075 -0.952902 -6.36608 +134320 0 0 0 6.15734 -0.914569 -6.35671 +134352 0 0 0 6.1906 -0.905746 -6.35154 +134384 0 0 0 6.21433 -0.887413 -6.35049 +134416 0 0 0 6.24286 -0.865009 -6.36644 +134672 0 0 0 6.22577 -0.963167 -6.34727 +134704 0 0 0 6.22376 -0.929032 -6.34919 +134736 0 0 0 6.24158 -0.914649 -6.34654 +134768 0 0 0 6.22523 -0.884372 -6.33321 +134800 0 0 0 6.23573 -0.867044 -6.32633 +134832 0 0 0 6.24457 -0.866966 -6.31915 +134864 0 0 0 6.24726 -0.857947 -6.30869 +134896 0 0 0 6.25465 -0.854391 -6.30319 +134928 0 0 0 6.26628 -0.845404 -6.31489 +135184 0 0 0 6.24327 -0.89954 -6.35505 +135216 0 0 0 6.22971 -0.867161 -6.37519 +135248 0 0 0 6.21728 -0.85141 -6.37127 +135280 0 0 0 6.16728 -0.841849 -6.34641 +135312 0 0 0 6.21469 -0.849453 -6.33964 +135344 0 0 0 6.21253 -0.843703 -6.32016 +135376 0 0 0 6.25503 -0.8621 -6.31919 +135408 0 0 0 6.27508 -0.87116 -6.30974 +135440 0 0 0 6.30173 -0.877119 -6.35099 +135696 0 0 0 6.34578 -0.787639 -6.39329 +135728 0 0 0 6.35099 -0.779068 -6.39757 +135760 0 0 0 6.29627 -0.778677 -6.36772 +135792 0 0 0 6.31808 -0.787909 -6.36171 +135824 0 0 0 6.31518 -0.776608 -6.3251 +135856 0 0 0 6.28428 -0.775095 -6.30308 +135888 0 0 0 6.29839 -0.764079 -6.2771 +135920 0 0 0 6.30809 -0.76979 -6.29431 +135952 0 0 0 6.35645 -0.759623 -6.31706 +136208 0 0 0 5.70015 -0.768856 -6.31195 +136240 0 0 0 5.71064 -0.77274 -6.3226 +136272 0 0 0 5.75589 -0.763274 -6.32334 +136304 0 0 0 5.76975 -0.765826 -6.30236 +136336 0 0 0 5.80031 -0.772047 -6.30867 +136368 0 0 0 5.81521 -0.781803 -6.30448 +136400 0 0 0 5.85904 -0.76691 -6.29194 +136432 0 0 0 5.87915 -0.76312 -6.31089 +136464 0 0 0 5.877 -0.756997 -6.30253 +136720 0 0 0 5.79736 -0.648397 -6.33041 +136752 0 0 0 5.83414 -0.659032 -6.30625 +136784 0 0 0 5.83591 -0.672932 -6.30408 +136816 0 0 0 5.85985 -0.656939 -6.30151 +136848 0 0 0 5.87272 -0.666016 -6.29662 +136880 0 0 0 5.89224 -0.675621 -6.29656 +136912 0 0 0 5.91631 -0.677728 -6.31177 +136944 0 0 0 5.94089 -0.689018 -6.29699 +136976 0 0 0 5.94689 -0.686321 -6.30521 +137232 0 0 0 6.01158 -0.54221 -6.13695 +137264 0 0 0 5.92552 -0.449291 -6.24146 +137296 0 0 0 5.94103 -0.466739 -6.27963 +137328 0 0 0 5.96802 -0.456119 -6.26175 +137360 0 0 0 5.99058 -0.470312 -6.25186 +137392 0 0 0 6.0081 -0.504512 -6.24991 +137424 0 0 0 6.01149 -0.543579 -6.25364 +137456 0 0 0 6.02278 -0.559316 -6.24279 +137488 0 0 0 6.01014 -0.594045 -6.28676 +137744 0 0 0 5.92624 -0.309979 -5.99261 +137776 0 0 0 5.94123 -0.110981 -6.1706 +137808 0 0 0 5.9401 -0.243889 -6.24489 +137840 0 0 0 5.99576 -0.197496 -6.22996 +137872 0 0 0 6.01947 -0.219962 -6.23612 +137904 0 0 0 6.05547 -0.238123 -6.18412 +137936 0 0 0 6.07615 -0.272773 -6.19379 +137968 0 0 0 6.08477 -0.395268 -6.19108 +138000 0 0 0 6.09069 -0.384444 -6.25335 +138256 0 0 0 5.83882 -0.478488 -6.01494 +138288 0 0 0 5.8695 -0.554143 -6.38464 +138320 0 0 0 5.90206 -0.59388 -6.42307 +138352 0 0 0 5.93011 -0.648703 -6.45182 +138384 0 0 0 5.96922 -0.587112 -6.41138 +138416 0 0 0 6.01228 -0.627976 -6.39655 +138448 0 0 0 6.04853 -0.681405 -6.37508 +138480 0 0 0 6.08555 -0.73623 -6.37423 +138512 0 0 0 6.10288 -0.759134 -6.36879 +138768 0 0 0 6.13892 -0.635434 -6.71813 +138800 0 0 0 6.19621 -0.662987 -6.85872 +138832 0 0 0 6.2345 -0.649742 -6.87135 +138864 0 0 0 6.29641 -0.649106 -6.87137 +138896 0 0 0 6.33824 -0.629208 -6.87067 +138928 0 0 0 6.39185 -0.621908 -6.84757 +138960 0 0 0 6.42714 -0.625629 -6.85251 +138992 0 0 0 6.47959 -0.656239 -6.85522 +139024 0 0 0 6.49424 -0.672267 -6.88777 +139280 0 0 0 6.18364 -0.713816 -7.01002 +139312 0 0 0 6.23209 -0.713535 -7.03859 +139344 0 0 0 6.27853 -0.708923 -7.05186 +139376 0 0 0 6.32484 -0.687807 -7.04184 +139408 0 0 0 6.38314 -0.71014 -7.02673 +139440 0 0 0 6.41975 -0.684731 -7.01672 +139472 0 0 0 6.47227 -0.69572 -7.02199 +139504 0 0 0 6.50876 -0.675127 -7.01821 +139536 0 0 0 6.53264 -0.628694 -7.04439 +139792 0 0 0 6.23391 -0.628836 -7.08295 +139824 0 0 0 6.27693 -0.624919 -7.08222 +139856 0 0 0 6.33998 -0.639076 -7.08334 +139888 0 0 0 6.39433 -0.637794 -7.06885 +139920 0 0 0 6.43051 -0.62489 -7.07084 +139952 0 0 0 6.47329 -0.618291 -7.05102 +139984 0 0 0 6.53016 -0.622486 -7.05098 +140016 0 0 0 6.55909 -0.616426 -7.02259 +140048 0 0 0 6.63059 -0.641683 -6.96529 +140304 0 0 0 6.30154 -0.602729 -7.19267 +140336 0 0 0 6.37921 -0.621179 -7.22419 +140368 0 0 0 6.36474 -0.57929 -7.1914 +140400 0 0 0 6.41408 -0.565707 -7.18053 +140432 0 0 0 6.41793 -0.525143 -7.15925 +140464 0 0 0 6.45619 -0.511622 -7.12998 +140496 0 0 0 6.50621 -0.504769 -7.10146 +140528 0 0 0 6.55913 -0.498403 -7.08434 +140560 0 0 0 6.60406 -0.487189 -7.06887 +140816 0 0 0 6.39935 -0.57761 -7.27751 +140848 0 0 0 6.36054 -0.53632 -7.25391 +140880 0 0 0 6.35705 -0.470163 -7.22269 +140912 0 0 0 6.4844 -0.531765 -7.2436 +140944 0 0 0 6.47871 -0.467962 -7.20878 +140976 0 0 0 6.52901 -0.437458 -7.19304 +141008 0 0 0 6.583 -0.447624 -7.15402 +141040 0 0 0 6.57954 -0.40689 -7.12426 +141072 0 0 0 6.62305 -0.41024 -7.11488 +16974336 0 0 0 -1.45085 1.58375 -0.488781 +16975360 0 0 0 -1.69381 -0.274361 -0.267118 +16976384 0 0 0 -2.07142 -1.0377 -0.311069 +16977408 0 0 0 -1.09553 -1.06221 -0.582452 +16978432 0 0 0 1.09874 -0.617733 -1.17995 +16979456 0 0 0 1.2601 0.301308 -0.627501 +16980480 0 0 0 1.68555 0.148026 -0.538317 +16981504 0 0 0 2.21789 0.630827 -0.463832 +16982528 0 0 0 2.23221 1.25911 -0.186281 +16983552 0 0 0 2.67362 3.76282 -0.265555 +16984576 0 0 0 -0.0396632 1.6383 -0.730553 +16985600 0 0 0 -0.442545 1.59497 -0.725807 +16990720 0 0 0 -0.892816 1.43666 -0.488781 +16991744 0 0 0 -1.52101 -0.23495 -0.267118 +16992768 0 0 0 -1.81515 -0.873259 -0.311069 +16993792 0 0 0 -1.00175 -1.11959 -0.582452 +16994816 0 0 0 1.20557 -0.615742 -1.17995 +16995840 0 0 0 1.29971 0.28233 -0.627501 +16996864 0 0 0 1.94174 0.0733711 -0.538317 +16997888 0 0 0 2.29813 0.555033 -0.463832 +16998912 0 0 0 2.50173 1.39735 -0.186281 +16999936 0 0 0 2.75699 3.43544 -0.265555 +17000960 0 0 0 0.0535937 1.77522 -0.730553 +17001984 0 0 0 -0.462102 1.7826 -0.725807 +17007104 0 0 0 -1.70066 1.63316 -0.488781 +17008128 0 0 0 -1.88449 -0.346177 -0.267118 +17009152 0 0 0 -2.24638 -1.09209 -0.311069 +17010176 0 0 0 -1.25453 -1.08147 -0.582452 +17011200 0 0 0 1.00003 -0.600803 -1.17995 +17012224 0 0 0 1.20976 0.277332 -0.627501 +17013248 0 0 0 1.48866 0.232231 -0.538317 +17014272 0 0 0 2.05896 0.700579 -0.463832 +17015296 0 0 0 2.06089 1.37227 -0.186281 +17016320 0 0 0 2.40126 3.68343 -0.265555 +17017344 0 0 0 -0.353293 1.91777 -0.730553 +17018368 0 0 0 -0.592079 1.51836 -0.725807 +17023488 0 0 0 -1.64629 1.55294 -0.488781 +17024512 0 0 0 -2.17126 -0.464785 -0.267118 +17025536 0 0 0 -2.2889 -1.0815 -0.311069 +17026560 0 0 0 -1.40573 -1.07935 -0.582452 +17027584 0 0 0 0.900797 -0.412467 -1.17995 +17028608 0 0 0 1.17654 0.272276 -0.627501 +17029632 0 0 0 1.43537 0.246025 -0.538317 +17030656 0 0 0 1.55573 0.643373 -0.463832 +17031680 0 0 0 2.05902 1.57552 -0.186281 +17032704 0 0 0 2.20002 3.59753 -0.265555 +17033728 0 0 0 -0.276023 1.41139 -0.730553 +17034752 0 0 0 -0.662372 1.41925 -0.725807 +17039872 0 0 0 -1.5628 0.406122 -1.39303 +17040896 0 0 0 -1.68459 -0.357019 -0.318806 +17041920 0 0 0 -1.35812 -0.704046 -0.379702 +17042944 0 0 0 -0.846744 -0.602084 -0.276817 +17043968 0 0 0 1.20674 -0.175669 -0.614277 +17044992 0 0 0 2.55049 -0.190733 -0.667802 +17046016 0 0 0 2.60575 0.545175 -0.715142 +17047040 0 0 0 2.35134 1.11896 -1.00904 +17048064 0 0 0 2.595 2.30328 -0.192027 +17049088 0 0 0 2.20579 2.21914 -0.585043 +17050112 0 0 0 -0.49973 2.29037 -0.80606 +17051136 0 0 0 -1.16501 1.86689 -0.560742 +17056256 0 0 0 -1.6236 0.417654 -1.39303 +17057280 0 0 0 -1.64535 -0.386287 -0.318806 +17058304 0 0 0 -1.29644 -0.753341 -0.379702 +17059328 0 0 0 -0.662586 -0.358522 -0.276817 +17060352 0 0 0 1.27843 -0.205624 -0.614277 +17061376 0 0 0 2.48155 -0.16339 -0.667802 +17062400 0 0 0 2.79537 0.522286 -0.715142 +17063424 0 0 0 2.44348 1.05272 -1.00904 +17064448 0 0 0 2.92718 2.61375 -0.192027 +17065472 0 0 0 2.37774 2.31275 -0.585043 +17066496 0 0 0 -0.330099 2.26135 -0.80606 +17067520 0 0 0 -0.805233 1.78627 -0.560742 +17072640 0 0 0 -1.3475 0.437273 -1.39303 +17073664 0 0 0 -1.68637 -0.342 -0.318806 +17074688 0 0 0 -1.54119 -0.79011 -0.379702 +17075712 0 0 0 -0.97697 -0.76856 -0.276817 +17076736 0 0 0 1.1721 -0.201531 -0.614277 +17077760 0 0 0 2.33356 -0.0939286 -0.667802 +17078784 0 0 0 2.3903 0.62572 -0.715142 +17079808 0 0 0 2.27186 1.06179 -1.00904 +17080832 0 0 0 2.30423 2.20348 -0.192027 +17081856 0 0 0 1.94649 1.97719 -0.585043 +17082880 0 0 0 -0.668258 2.22773 -0.80606 +17083904 0 0 0 -1.56901 2.03035 -0.560742 +17089024 0 0 0 -2.6645 0.528835 -1.39303 +17090048 0 0 0 -1.63089 -0.292857 -0.318806 +17091072 0 0 0 -1.65919 -0.762239 -0.379702 +17092096 0 0 0 -1.06042 -0.827651 -0.276817 +17093120 0 0 0 1.164 -0.354832 -0.614277 +17094144 0 0 0 2.06175 0.0477722 -0.667802 +17095168 0 0 0 2.60324 0.667705 -0.715142 +17096192 0 0 0 2.27186 1.06179 -1.00904 +17097216 0 0 0 2.03974 2.08229 -0.192027 +17098240 0 0 0 1.82753 2.78518 -0.585043 +17099264 0 0 0 -0.848306 2.25766 -0.80606 +17100288 0 0 0 -1.72247 2.04448 -0.560742 +17105408 0 0 0 -0.878578 2.26878 -0.548698 +17106432 0 0 0 -1.90837 0.470618 -0.308255 +17107456 0 0 0 -1.7583 0.111474 -0.328181 +17108480 0 0 0 -1.3327 0.391014 -0.51894 +17109504 0 0 0 -1.23374 -0.496595 -0.58646 +17110528 0 0 0 1.08575 0.289593 -1.53387 +17111552 0 0 0 1.43056 0.128105 -0.774471 +17112576 0 0 0 2.12656 0.563954 -0.947469 +17113600 0 0 0 2.68288 0.540131 -0.729908 +17114624 0 0 0 1.5013 0.712348 -0.706275 +17115648 0 0 0 2.43121 1.33491 -1.59367 +17116672 0 0 0 2.97517 2.74463 -0.34704 +17117696 0 0 0 3.21474 4.88434 -0.253134 +17118720 0 0 0 0.402654 2.57844 -1.19727 +17119744 0 0 0 -0.507946 3.09238 -0.894886 +17120768 0 0 0 -1.17373 2.80046 -0.753402 +17121792 0 0 0 -0.320064 2.09191 -0.548698 +17122816 0 0 0 -1.72134 0.481775 -0.308255 +17123840 0 0 0 -1.77253 0.0301558 -0.328181 +17124864 0 0 0 -1.28417 0.18762 -0.51894 +17125888 0 0 0 -1.13899 -0.827887 -0.58646 +17126912 0 0 0 1.28795 0.02214 -1.53387 +17127936 0 0 0 1.63419 0.00118729 -0.774471 +17128960 0 0 0 2.21374 0.425352 -0.947469 +17129984 0 0 0 2.53793 0.57039 -0.729908 +17131008 0 0 0 1.40879 0.587864 -0.706275 +17132032 0 0 0 2.47714 1.23957 -1.59367 +17133056 0 0 0 3.03781 2.57818 -0.34704 +17134080 0 0 0 3.31467 4.10513 -0.253134 +17135104 0 0 0 2.28885 5.36172 -1.19727 +17136128 0 0 0 -0.0997138 2.7786 -0.894886 +17137152 0 0 0 -0.899717 2.77002 -0.753402 +17138176 0 0 0 -1.46417 2.4503 -0.548698 +17139200 0 0 0 -1.76659 0.495321 -0.308255 +17140224 0 0 0 -1.6006 0.296576 -0.328181 +17141248 0 0 0 -1.6452 0.32056 -0.51894 +17142272 0 0 0 -1.45536 -0.609419 -0.58646 +17143296 0 0 0 -0.96191 3.12025 -1.53387 +17144320 0 0 0 1.39901 0.0067688 -0.774471 +17145344 0 0 0 1.82229 0.635035 -0.947469 +17146368 0 0 0 2.4503 0.573233 -0.729908 +17147392 0 0 0 1.43496 0.829668 -0.706275 +17148416 0 0 0 1.279 0.624287 -1.59367 +17149440 0 0 0 2.67012 2.60538 -0.34704 +17150464 0 0 0 2.93869 5.20462 -0.253134 +17151488 0 0 0 -0.949547 1.90195 -1.19727 +17152512 0 0 0 -0.77773 3.13322 -0.894886 +17153536 0 0 0 -1.75893 3.0695 -0.753402 +17154560 0 0 0 -1.59091 2.41837 -0.548698 +17155584 0 0 0 -1.66841 0.474617 -0.308255 +17156608 0 0 0 -1.47605 0.393137 -0.328181 +17157632 0 0 0 -1.76907 0.363975 -0.51894 +17158656 0 0 0 -1.53031 -0.253026 -0.58646 +17159680 0 0 0 1.05112 0.297215 -1.53387 +17160704 0 0 0 1.36546 -0.069222 -0.774471 +17161728 0 0 0 1.61644 0.648117 -0.947469 +17162752 0 0 0 1.9415 0.698691 -0.729908 +17163776 0 0 0 1.34068 0.891116 -0.706275 +17164800 0 0 0 1.14688 0.765315 -1.59367 +17165824 0 0 0 2.35072 2.35787 -0.34704 +17166848 0 0 0 2.58203 4.81827 -0.253134 +17167872 0 0 0 0.243482 2.64637 -1.19727 +17168896 0 0 0 -0.959921 3.21457 -0.894886 +17169920 0 0 0 -1.8352 3.01428 -0.753402 +17170944 0 0 0 -1.8319 0.932848 -2.1662 +17171968 0 0 0 -1.67078 0.211866 -0.545927 +17172992 0 0 0 -2.66605 -0.900178 -0.889177 +17174016 0 0 0 -1.89796 -1.22039 -0.592123 +17175040 0 0 0 -0.8627 1.19535 -0.434206 +17176064 0 0 0 2.01921 -1.24766 -0.595335 +17177088 0 0 0 1.2271 0.76823 -0.919813 +17178112 0 0 0 2.57514 0.457771 -0.855446 +17179136 0 0 0 3.76175 0.946964 -0.769764 +17180160 0 0 0 2.29124 1.17129 -1.28876 +17181184 0 0 0 2.96493 2.127 -0.116811 +17182208 0 0 0 3.47193 4.07731 0.0173179 +17183232 0 0 0 2.70179 2.93958 -0.657762 +17184256 0 0 0 -0.032548 2.79829 -1.06383 +17185280 0 0 0 -0.421426 2.46047 -0.95796 +17186304 0 0 0 -0.898391 2.387 -0.881908 +17187328 0 0 0 -1.9344 0.808311 -2.1662 +17188352 0 0 0 -1.22496 0.356133 -0.545927 +17189376 0 0 0 -2.35681 -0.673717 -0.889177 +17190400 0 0 0 -1.55224 -0.637784 -0.592123 +17191424 0 0 0 -0.654106 1.69492 -0.434206 +17192448 0 0 0 2.0512 -1.03066 -0.595335 +17193472 0 0 0 0.804493 1.23102 -0.919813 +17194496 0 0 0 2.00215 0.704526 -0.855446 +17195520 0 0 0 4.07502 0.963329 -0.769764 +17196544 0 0 0 2.02336 0.886851 -1.28876 +17197568 0 0 0 2.93114 1.90454 -0.116811 +17198592 0 0 0 3.52393 3.65702 0.0173179 +17199616 0 0 0 2.85729 2.7478 -0.657762 +17200640 0 0 0 0.19981 2.5923 -1.06383 +17201664 0 0 0 -0.166113 2.38358 -0.95796 +17202688 0 0 0 -0.636412 2.31601 -0.881908 +17203712 0 0 0 -0.2579 1.17384 -2.1662 +17204736 0 0 0 -2.19254 0.0626075 -0.545927 +17205760 0 0 0 -2.53809 -0.786738 -0.889177 +17206784 0 0 0 -2.00259 -1.08524 -0.592123 +17207808 0 0 0 -1.12617 0.687709 -0.434206 +17208832 0 0 0 1.80154 -1.10559 -0.595335 +17209856 0 0 0 1.03431 0.826676 -0.919813 +17210880 0 0 0 2.60836 0.426438 -0.855446 +17211904 0 0 0 3.49337 1.02307 -0.769764 +17212928 0 0 0 2.46382 1.22006 -1.28876 +17213952 0 0 0 2.70075 2.12783 -0.116811 +17214976 0 0 0 3.04494 3.83769 0.0173179 +17216000 0 0 0 2.71141 3.23867 -0.657762 +17217024 0 0 0 -0.377554 3.06324 -1.06383 +17218048 0 0 0 -0.593067 2.32762 -0.95796 +17219072 0 0 0 -1.0892 2.41408 -0.881908 +17220096 0 0 0 0.245 1.19905 -2.1662 +17221120 0 0 0 -2.25114 0.0310227 -0.545927 +17222144 0 0 0 -2.53809 -0.786738 -0.889177 +17223168 0 0 0 -1.89075 -0.524447 -0.592123 +17224192 0 0 0 -1.3166 0.345235 -0.434206 +17225216 0 0 0 1.54391 -0.673742 -0.595335 +17226240 0 0 0 0.641686 1.1327 -0.919813 +17227264 0 0 0 2.36249 0.5234 -0.855446 +17228288 0 0 0 2.84051 1.04475 -0.769764 +17229312 0 0 0 2.46382 1.22006 -1.28876 +17230336 0 0 0 2.72035 2.38509 -0.116811 +17231360 0 0 0 2.43676 2.90001 0.0173179 +17232384 0 0 0 2.71141 3.23867 -0.657762 +17233408 0 0 0 -0.438947 2.78114 -1.06383 +17234432 0 0 0 -0.381815 1.93013 -0.95796 +17235456 0 0 0 -1.27256 2.45854 -0.881908 +34013184 0 0 0 0 0 0 +34013185 0 0 0 0 0 0 +34013440 0 0 0 0 0 0 +34013441 0 0 0 0 0 0 +34013696 0 0 0 0 0 0 +34013697 0 0 0 0 0 0 +34013952 0 0 0 0 0 0 +34013953 0 0 0 0 0 0 +34014208 0 0 0 0 0 0 +34014209 0 0 0 0 0 0 +34014464 0 0 0 0 0 0 +34014465 0 0 0 0 0 0 +34014720 0 0 0 0 0 0 +34014721 0 0 0 0 0 0 +34014976 0 0 0 0 0 0 +34014977 0 0 0 0 0 0 +34015232 0 0 0 0 0 0 +34015233 0 0 0 0 0 0 +34015488 0 0 0 0 0 0 +34015489 0 0 0 0 0 0 +34015744 0 0 0 0 0 0 +34015745 0 0 0 0 0 0 +34016000 0 0 0 0 0 0 +34016001 0 0 0 0 0 0 +34078720 0 0 0 0 0 0 +34078721 0 0 0 0 0 0 +34078976 0 0 0 0 0 0 +34078977 0 0 0 0 0 0 +34079232 0 0 0 0 0 0 +34079233 0 0 0 0 0 0 +34079488 0 0 0 0 0 0 +34079489 0 0 0 0 0 0 +34079744 0 0 0 0 0 0 +34079745 0 0 0 0 0 0 +34080000 0 0 0 0 0 0 +34080001 0 0 0 0 0 0 +34080256 0 0 0 0 0 0 +34080257 0 0 0 0 0 0 +34080512 0 0 0 0 0 0 +34080513 0 0 0 0 0 0 +34080768 0 0 0 0 0 0 +34080769 0 0 0 0 0 0 +34081024 0 0 0 0 0 0 +34081025 0 0 0 0 0 0 +34081280 0 0 0 0 0 0 +34081281 0 0 0 0 0 0 +34081536 0 0 0 0 0 0 +34081537 0 0 0 0 0 0 +34144256 0 0 0 0 0 0 +34144257 0 0 0 0 0 0 +34144512 0 0 0 0 0 0 +34144513 0 0 0 0 0 0 +34144768 0 0 0 0 0 0 +34144769 0 0 0 0 0 0 +34145024 0 0 0 0 0 0 +34145025 0 0 0 0 0 0 +34145280 0 0 0 0 0 0 +34145281 0 0 0 0 0 0 +34145536 0 0 0 0 0 0 +34145537 0 0 0 0 0 0 +34145792 0 0 0 0 0 0 +34145793 0 0 0 0 0 0 +34146048 0 0 0 0 0 0 +34146049 0 0 0 0 0 0 +34146304 0 0 0 0 0 0 +34146305 0 0 0 0 0 0 +34146560 0 0 0 0 0 0 +34146561 0 0 0 0 0 0 +34146816 0 0 0 0 0 0 +34146817 0 0 0 0 0 0 +34147072 0 0 0 0 0 0 +34147073 0 0 0 0 0 0 +34209792 0 0 0 0 0 0 +34209793 0 0 0 0 0 0 +34210048 0 0 0 0 0 0 +34210049 0 0 0 0 0 0 +34210304 0 0 0 0 0 0 +34210305 0 0 0 0 0 0 +34210560 0 0 0 0 0 0 +34210561 0 0 0 0 0 0 +34210816 0 0 0 0 0 0 +34210817 0 0 0 0 0 0 +34211072 0 0 0 0 0 0 +34211073 0 0 0 0 0 0 +34211328 0 0 0 0 0 0 +34211329 0 0 0 0 0 0 +34211584 0 0 0 0 0 0 +34211585 0 0 0 0 0 0 +34211840 0 0 0 0 0 0 +34211841 0 0 0 0 0 0 +34212096 0 0 0 0 0 0 +34212097 0 0 0 0 0 0 +34212352 0 0 0 0 0 0 +34212353 0 0 0 0 0 0 +34212608 0 0 0 0 0 0 +34212609 0 0 0 0 0 0 +34275328 0 0 0 0 0 0 +34275329 0 0 0 0 0 0 +34275584 0 0 0 0 0 0 +34275585 0 0 0 0 0 0 +34275840 0 0 0 0 0 0 +34275841 0 0 0 0 0 0 +34276096 0 0 0 0 0 0 +34276097 0 0 0 0 0 0 +34276352 0 0 0 0 0 0 +34276353 0 0 0 0 0 0 +34276608 0 0 0 0 0 0 +34276609 0 0 0 0 0 0 +34276864 0 0 0 0 0 0 +34276865 0 0 0 0 0 0 +34277120 0 0 0 0 0 0 +34277121 0 0 0 0 0 0 +34277376 0 0 0 0 0 0 +34277377 0 0 0 0 0 0 +34277632 0 0 0 0 0 0 +34277633 0 0 0 0 0 0 +34277888 0 0 0 0 0 0 +34277889 0 0 0 0 0 0 +34278144 0 0 0 0 0 0 +34278145 0 0 0 0 0 0 +34340864 0 0 0 0 0 0 +34340865 0 0 0 0 0 0 +34341120 0 0 0 0 0 0 +34341121 0 0 0 0 0 0 +34341376 0 0 0 0 0 0 +34341377 0 0 0 0 0 0 +34341632 0 0 0 0 0 0 +34341633 0 0 0 0 0 0 +34341888 0 0 0 0 0 0 +34341889 0 0 0 0 0 0 +34342144 0 0 0 0 0 0 +34342145 0 0 0 0 0 0 +34342400 0 0 0 0 0 0 +34342401 0 0 0 0 0 0 +34342656 0 0 0 0 0 0 +34342657 0 0 0 0 0 0 +34342912 0 0 0 0 0 0 +34342913 0 0 0 0 0 0 +34343168 0 0 0 0 0 0 +34343169 0 0 0 0 0 0 +34343424 0 0 0 0 0 0 +34343425 0 0 0 0 0 0 +34343680 0 0 0 0 0 0 +34343681 0 0 0 0 0 0 +34406400 0 0 0 0 0 0 +34406401 0 0 0 0 0 0 +34406656 0 0 0 0 0 0 +34406657 0 0 0 0 0 0 +34406912 0 0 0 0 0 0 +34406913 0 0 0 0 0 0 +34407168 0 0 0 0 0 0 +34407169 0 0 0 0 0 0 +34407424 0 0 0 0 0 0 +34407425 0 0 0 0 0 0 +34407680 0 0 0 0 0 0 +34407681 0 0 0 0 0 0 +34407936 0 0 0 0 0 0 +34407937 0 0 0 0 0 0 +34408192 0 0 0 0 0 0 +34408193 0 0 0 0 0 0 +34408448 0 0 0 0 0 0 +34408449 0 0 0 0 0 0 +34408704 0 0 0 0 0 0 +34408705 0 0 0 0 0 0 +34408960 0 0 0 0 0 0 +34408961 0 0 0 0 0 0 +34409216 0 0 0 0 0 0 +34409217 0 0 0 0 0 0 +34471936 0 0 0 0 0 0 +34471937 0 0 0 0 0 0 +34472192 0 0 0 0 0 0 +34472193 0 0 0 0 0 0 +34472448 0 0 0 0 0 0 +34472449 0 0 0 0 0 0 +34472704 0 0 0 0 0 0 +34472705 0 0 0 0 0 0 +34472960 0 0 0 0 0 0 +34472961 0 0 0 0 0 0 +34473216 0 0 0 0 0 0 +34473217 0 0 0 0 0 0 +34473472 0 0 0 0 0 0 +34473473 0 0 0 0 0 0 +34473728 0 0 0 0 0 0 +34473729 0 0 0 0 0 0 +34473984 0 0 0 0 0 0 +34473985 0 0 0 0 0 0 +34474240 0 0 0 0 0 0 +34474241 0 0 0 0 0 0 +34474496 0 0 0 0 0 0 +34474497 0 0 0 0 0 0 +34474752 0 0 0 0 0 0 +34474753 0 0 0 0 0 0 +34537472 0 0 0 0 0 0 +34537473 0 0 0 0 0 0 +34537728 0 0 0 0 0 0 +34537729 0 0 0 0 0 0 +34537984 0 0 0 0 0 0 +34537985 0 0 0 0 0 0 +34538240 0 0 0 0 0 0 +34538241 0 0 0 0 0 0 +34538496 0 0 0 0 0 0 +34538497 0 0 0 0 0 0 +34538752 0 0 0 0 0 0 +34538753 0 0 0 0 0 0 +34539008 0 0 0 0 0 0 +34539009 0 0 0 0 0 0 +34539264 0 0 0 0 0 0 +34539265 0 0 0 0 0 0 +34539520 0 0 0 0 0 0 +34539521 0 0 0 0 0 0 +34539776 0 0 0 0 0 0 +34539777 0 0 0 0 0 0 +34540032 0 0 0 0 0 0 +34540033 0 0 0 0 0 0 +34540288 0 0 0 0 0 0 +34540289 0 0 0 0 0 0 +34603008 0 0 0 0 0 0 +34603009 0 0 0 0 0 0 +34603264 0 0 0 0 0 0 +34603265 0 0 0 0 0 0 +34603520 0 0 0 0 0 0 +34603521 0 0 0 0 0 0 +34603776 0 0 0 0 0 0 +34603777 0 0 0 0 0 0 +34604032 0 0 0 0 0 0 +34604033 0 0 0 0 0 0 +34604288 0 0 0 0 0 0 +34604289 0 0 0 0 0 0 +34604544 0 0 0 0 0 0 +34604545 0 0 0 0 0 0 +34604800 0 0 0 0 0 0 +34604801 0 0 0 0 0 0 +34605056 0 0 0 0 0 0 +34605057 0 0 0 0 0 0 +34605312 0 0 0 0 0 0 +34605313 0 0 0 0 0 0 +34605568 0 0 0 0 0 0 +34605569 0 0 0 0 0 0 +34605824 0 0 0 0 0 0 +34605825 0 0 0 0 0 0 +34668544 0 0 0 0 0 0 +34668545 0 0 0 0 0 0 +34668800 0 0 0 0 0 0 +34668801 0 0 0 0 0 0 +34669056 0 0 0 0 0 0 +34669057 0 0 0 0 0 0 +34669312 0 0 0 0 0 0 +34669313 0 0 0 0 0 0 +34669568 0 0 0 0 0 0 +34669569 0 0 0 0 0 0 +34669824 0 0 0 0 0 0 +34669825 0 0 0 0 0 0 +34670080 0 0 0 0 0 0 +34670081 0 0 0 0 0 0 +34670336 0 0 0 0 0 0 +34670337 0 0 0 0 0 0 +34670592 0 0 0 0 0 0 +34670593 0 0 0 0 0 0 +34670848 0 0 0 0 0 0 +34670849 0 0 0 0 0 0 +34671104 0 0 0 0 0 0 +34671105 0 0 0 0 0 0 +34671360 0 0 0 0 0 0 +34671361 0 0 0 0 0 0 +34734080 0 0 0 0 0 0 +34734081 0 0 0 0 0 0 +34734336 0 0 0 0 0 0 +34734337 0 0 0 0 0 0 +34734592 0 0 0 0 0 0 +34734593 0 0 0 0 0 0 +34734848 0 0 0 0 0 0 +34734849 0 0 0 0 0 0 +34735104 0 0 0 0 0 0 +34735105 0 0 0 0 0 0 +34735360 0 0 0 0 0 0 +34735361 0 0 0 0 0 0 +34735616 0 0 0 0 0 0 +34735617 0 0 0 0 0 0 +34735872 0 0 0 0 0 0 +34735873 0 0 0 0 0 0 +34736128 0 0 0 0 0 0 +34736129 0 0 0 0 0 0 +34736384 0 0 0 0 0 0 +34736385 0 0 0 0 0 0 +34736640 0 0 0 0 0 0 +34736641 0 0 0 0 0 0 +34736896 0 0 0 0 0 0 +34736897 0 0 0 0 0 0 +34799616 0 0 0 0 0 0 +34799617 0 0 0 0 0 0 +34799872 0 0 0 0 0 0 +34799873 0 0 0 0 0 0 +34800128 0 0 0 0 0 0 +34800129 0 0 0 0 0 0 +34800384 0 0 0 0 0 0 +34800385 0 0 0 0 0 0 +34800640 0 0 0 0 0 0 +34800641 0 0 0 0 0 0 +34800896 0 0 0 0 0 0 +34800897 0 0 0 0 0 0 +34801152 0 0 0 0 0 0 +34801153 0 0 0 0 0 0 +34801408 0 0 0 0 0 0 +34801409 0 0 0 0 0 0 +34801664 0 0 0 0 0 0 +34801665 0 0 0 0 0 0 +34801920 0 0 0 0 0 0 +34801921 0 0 0 0 0 0 +34802176 0 0 0 0 0 0 +34802177 0 0 0 0 0 0 +34802432 0 0 0 0 0 0 +34802433 0 0 0 0 0 0 +34865152 0 0 0 0 0 0 +34865153 0 0 0 0 0 0 +34865408 0 0 0 0 0 0 +34865409 0 0 0 0 0 0 +34865664 0 0 0 0 0 0 +34865665 0 0 0 0 0 0 +34865920 0 0 0 0 0 0 +34865921 0 0 0 0 0 0 +34866176 0 0 0 0 0 0 +34866177 0 0 0 0 0 0 +34866432 0 0 0 0 0 0 +34866433 0 0 0 0 0 0 +34866688 0 0 0 0 0 0 +34866689 0 0 0 0 0 0 +34866944 0 0 0 0 0 0 +34866945 0 0 0 0 0 0 +34867200 0 0 0 0 0 0 +34867201 0 0 0 0 0 0 +34867456 0 0 0 0 0 0 +34867457 0 0 0 0 0 0 +34867712 0 0 0 0 0 0 +34867713 0 0 0 0 0 0 +34867968 0 0 0 0 0 0 +34867969 0 0 0 0 0 0 +34930688 0 0 0 0 0 0 +34930689 0 0 0 0 0 0 +34930944 0 0 0 0 0 0 +34930945 0 0 0 0 0 0 +34931200 0 0 0 0 0 0 +34931201 0 0 0 0 0 0 +34931456 0 0 0 0 0 0 +34931457 0 0 0 0 0 0 +34931712 0 0 0 0 0 0 +34931713 0 0 0 0 0 0 +34931968 0 0 0 0 0 0 +34931969 0 0 0 0 0 0 +34932224 0 0 0 0 0 0 +34932225 0 0 0 0 0 0 +34932480 0 0 0 0 0 0 +34932481 0 0 0 0 0 0 +34932736 0 0 0 0 0 0 +34932737 0 0 0 0 0 0 +34932992 0 0 0 0 0 0 +34932993 0 0 0 0 0 0 +34933248 0 0 0 0 0 0 +34933249 0 0 0 0 0 0 +34933504 0 0 0 0 0 0 +34933505 0 0 0 0 0 0 +34996224 0 0 0 0 0 0 +34996225 0 0 0 0 0 0 +34996480 0 0 0 0 0 0 +34996481 0 0 0 0 0 0 +34996736 0 0 0 0 0 0 +34996737 0 0 0 0 0 0 +34996992 0 0 0 0 0 0 +34996993 0 0 0 0 0 0 +34997248 0 0 0 0 0 0 +34997249 0 0 0 0 0 0 +34997504 0 0 0 0 0 0 +34997505 0 0 0 0 0 0 +34997760 0 0 0 0 0 0 +34997761 0 0 0 0 0 0 +34998016 0 0 0 0 0 0 +34998017 0 0 0 0 0 0 +34998272 0 0 0 0 0 0 +34998273 0 0 0 0 0 0 +34998528 0 0 0 0 0 0 +34998529 0 0 0 0 0 0 +34998784 0 0 0 0 0 0 +34998785 0 0 0 0 0 0 +34999040 0 0 0 0 0 0 +34999041 0 0 0 0 0 0 +35061760 0 0 0 0 0 0 +35061761 0 0 0 0 0 0 +35062016 0 0 0 0 0 0 +35062017 0 0 0 0 0 0 +35062272 0 0 0 0 0 0 +35062273 0 0 0 0 0 0 +35062528 0 0 0 0 0 0 +35062529 0 0 0 0 0 0 +35062784 0 0 0 0 0 0 +35062785 0 0 0 0 0 0 +35063040 0 0 0 0 0 0 +35063041 0 0 0 0 0 0 +35063296 0 0 0 0 0 0 +35063297 0 0 0 0 0 0 +35063552 0 0 0 0 0 0 +35063553 0 0 0 0 0 0 +35063808 0 0 0 0 0 0 +35063809 0 0 0 0 0 0 +35064064 0 0 0 0 0 0 +35064065 0 0 0 0 0 0 +35064320 0 0 0 0 0 0 +35064321 0 0 0 0 0 0 +35064576 0 0 0 0 0 0 +35064577 0 0 0 0 0 0 +35127296 0 0 0 0 0 0 +35127297 0 0 0 0 0 0 +35127552 0 0 0 0 0 0 +35127553 0 0 0 0 0 0 +35127808 0 0 0 0 0 0 +35127809 0 0 0 0 0 0 +35128064 0 0 0 0 0 0 +35128065 0 0 0 0 0 0 +35128320 0 0 0 0 0 0 +35128321 0 0 0 0 0 0 +35128576 0 0 0 0 0 0 +35128577 0 0 0 0 0 0 +35128832 0 0 0 0 0 0 +35128833 0 0 0 0 0 0 +35129088 0 0 0 0 0 0 +35129089 0 0 0 0 0 0 +35129344 0 0 0 0 0 0 +35129345 0 0 0 0 0 0 +35129600 0 0 0 0 0 0 +35129601 0 0 0 0 0 0 +35129856 0 0 0 0 0 0 +35129857 0 0 0 0 0 0 +35130112 0 0 0 0 0 0 +35130113 0 0 0 0 0 0 +35192832 0 0 0 0 0 0 +35192833 0 0 0 0 0 0 +35193088 0 0 0 0 0 0 +35193089 0 0 0 0 0 0 +35193344 0 0 0 0 0 0 +35193345 0 0 0 0 0 0 +35193600 0 0 0 0 0 0 +35193601 0 0 0 0 0 0 +35193856 0 0 0 0 0 0 +35193857 0 0 0 0 0 0 +35194112 0 0 0 0 0 0 +35194113 0 0 0 0 0 0 +35194368 0 0 0 0 0 0 +35194369 0 0 0 0 0 0 +35194624 0 0 0 0 0 0 +35194625 0 0 0 0 0 0 +35194880 0 0 0 0 0 0 +35194881 0 0 0 0 0 0 +35195136 0 0 0 0 0 0 +35195137 0 0 0 0 0 0 +35195392 0 0 0 0 0 0 +35195393 0 0 0 0 0 0 +35195648 0 0 0 0 0 0 +35195649 0 0 0 0 0 0 +35258368 0 0 0 0 0 0 +35258369 0 0 0 0 0 0 +35258624 0 0 0 0 0 0 +35258625 0 0 0 0 0 0 +35258880 0 0 0 0 0 0 +35258881 0 0 0 0 0 0 +35259136 0 0 0 0 0 0 +35259137 0 0 0 0 0 0 +35259392 0 0 0 0 0 0 +35259393 0 0 0 0 0 0 +35259648 0 0 0 0 0 0 +35259649 0 0 0 0 0 0 +35259904 0 0 0 0 0 0 +35259905 0 0 0 0 0 0 +35260160 0 0 0 0 0 0 +35260161 0 0 0 0 0 0 +35260416 0 0 0 0 0 0 +35260417 0 0 0 0 0 0 +35260672 0 0 0 0 0 0 +35260673 0 0 0 0 0 0 +35260928 0 0 0 0 0 0 +35260929 0 0 0 0 0 0 +35261184 0 0 0 0 0 0 +35261185 0 0 0 0 0 0 +35323904 0 0 0 0 0 0 +35323905 0 0 0 0 0 0 +35324160 0 0 0 0 0 0 +35324161 0 0 0 0 0 0 +35324416 0 0 0 0 0 0 +35324417 0 0 0 0 0 0 +35324672 0 0 0 0 0 0 +35324673 0 0 0 0 0 0 +35324928 0 0 0 0 0 0 +35324929 0 0 0 0 0 0 +35325184 0 0 0 0 0 0 +35325185 0 0 0 0 0 0 +35325440 0 0 0 0 0 0 +35325441 0 0 0 0 0 0 +35325696 0 0 0 0 0 0 +35325697 0 0 0 0 0 0 +35325952 0 0 0 0 0 0 +35325953 0 0 0 0 0 0 +35326208 0 0 0 0 0 0 +35326209 0 0 0 0 0 0 +35326464 0 0 0 0 0 0 +35326465 0 0 0 0 0 0 +35326720 0 0 0 0 0 0 +35326721 0 0 0 0 0 0 +35389440 0 0 0 0 0 0 +35389441 0 0 0 0 0 0 +35389696 0 0 0 0 0 0 +35389697 0 0 0 0 0 0 +35389952 0 0 0 0 0 0 +35389953 0 0 0 0 0 0 +35390208 0 0 0 0 0 0 +35390209 0 0 0 0 0 0 +35390464 0 0 0 0 0 0 +35390465 0 0 0 0 0 0 +35390720 0 0 0 0 0 0 +35390721 0 0 0 0 0 0 +35390976 0 0 0 0 0 0 +35390977 0 0 0 0 0 0 +35391232 0 0 0 0 0 0 +35391233 0 0 0 0 0 0 +35391488 0 0 0 0 0 0 +35391489 0 0 0 0 0 0 +35391744 0 0 0 0 0 0 +35391745 0 0 0 0 0 0 +35392000 0 0 0 0 0 0 +35392001 0 0 0 0 0 0 +35392256 0 0 0 0 0 0 +35392257 0 0 0 0 0 0 +35454976 0 0 0 0 0 0 +35454977 0 0 0 0 0 0 +35455232 0 0 0 0 0 0 +35455233 0 0 0 0 0 0 +35455488 0 0 0 0 0 0 +35455489 0 0 0 0 0 0 +35455744 0 0 0 0 0 0 +35455745 0 0 0 0 0 0 +35456000 0 0 0 0 0 0 +35456001 0 0 0 0 0 0 +35456256 0 0 0 0 0 0 +35456257 0 0 0 0 0 0 +35456512 0 0 0 0 0 0 +35456513 0 0 0 0 0 0 +35456768 0 0 0 0 0 0 +35456769 0 0 0 0 0 0 +35457024 0 0 0 0 0 0 +35457025 0 0 0 0 0 0 +35457280 0 0 0 0 0 0 +35457281 0 0 0 0 0 0 +35457536 0 0 0 0 0 0 +35457537 0 0 0 0 0 0 +35457792 0 0 0 0 0 0 +35457793 0 0 0 0 0 0 +35520512 0 0 0 0 0 0 +35520513 0 0 0 0 0 0 +35520768 0 0 0 0 0 0 +35520769 0 0 0 0 0 0 +35521024 0 0 0 0 0 0 +35521025 0 0 0 0 0 0 +35521280 0 0 0 0 0 0 +35521281 0 0 0 0 0 0 +35521536 0 0 0 0 0 0 +35521537 0 0 0 0 0 0 +35521792 0 0 0 0 0 0 +35521793 0 0 0 0 0 0 +35522048 0 0 0 0 0 0 +35522049 0 0 0 0 0 0 +35522304 0 0 0 0 0 0 +35522305 0 0 0 0 0 0 +35522560 0 0 0 0 0 0 +35522561 0 0 0 0 0 0 +35522816 0 0 0 0 0 0 +35522817 0 0 0 0 0 0 +35523072 0 0 0 0 0 0 +35523073 0 0 0 0 0 0 +35523328 0 0 0 0 0 0 +35523329 0 0 0 0 0 0 +35586048 0 0 0 0 0 0 +35586049 0 0 0 0 0 0 +35586304 0 0 0 0 0 0 +35586305 0 0 0 0 0 0 +35586560 0 0 0 0 0 0 +35586561 0 0 0 0 0 0 +35586816 0 0 0 0 0 0 +35586817 0 0 0 0 0 0 +35587072 0 0 0 0 0 0 +35587073 0 0 0 0 0 0 +35587328 0 0 0 0 0 0 +35587329 0 0 0 0 0 0 +35587584 0 0 0 0 0 0 +35587585 0 0 0 0 0 0 +35587840 0 0 0 0 0 0 +35587841 0 0 0 0 0 0 +35588096 0 0 0 0 0 0 +35588097 0 0 0 0 0 0 +35588352 0 0 0 0 0 0 +35588353 0 0 0 0 0 0 +35588608 0 0 0 0 0 0 +35588609 0 0 0 0 0 0 +35588864 0 0 0 0 0 0 +35588865 0 0 0 0 0 0 +35651584 0 0 0 0 0 0 +35651585 0 0 0 0 0 0 +35651840 0 0 0 0 0 0 +35651841 0 0 0 0 0 0 +35652096 0 0 0 0 0 0 +35652097 0 0 0 0 0 0 +35652352 0 0 0 0 0 0 +35652353 0 0 0 0 0 0 +35652608 0 0 0 0 0 0 +35652609 0 0 0 0 0 0 +35652864 0 0 0 0 0 0 +35652865 0 0 0 0 0 0 +35653120 0 0 0 0 0 0 +35653121 0 0 0 0 0 0 +35653376 0 0 0 0 0 0 +35653377 0 0 0 0 0 0 +35653632 0 0 0 0 0 0 +35653633 0 0 0 0 0 0 +35653888 0 0 0 0 0 0 +35653889 0 0 0 0 0 0 +35654144 0 0 0 0 0 0 +35654145 0 0 0 0 0 0 +35654400 0 0 0 0 0 0 +35654401 0 0 0 0 0 0 +35717120 0 0 0 0 0 0 +35717121 0 0 0 0 0 0 +35717376 0 0 0 0 0 0 +35717377 0 0 0 0 0 0 +35717632 0 0 0 0 0 0 +35717633 0 0 0 0 0 0 +35717888 0 0 0 0 0 0 +35717889 0 0 0 0 0 0 +35718144 0 0 0 0 0 0 +35718145 0 0 0 0 0 0 +35718400 0 0 0 0 0 0 +35718401 0 0 0 0 0 0 +35718656 0 0 0 0 0 0 +35718657 0 0 0 0 0 0 +35718912 0 0 0 0 0 0 +35718913 0 0 0 0 0 0 +35719168 0 0 0 0 0 0 +35719169 0 0 0 0 0 0 +35719424 0 0 0 0 0 0 +35719425 0 0 0 0 0 0 +35719680 0 0 0 0 0 0 +35719681 0 0 0 0 0 0 +35719936 0 0 0 0 0 0 +35719937 0 0 0 0 0 0 +35782656 0 0 0 0 0 0 +35782657 0 0 0 0 0 0 +35782912 0 0 0 0 0 0 +35782913 0 0 0 0 0 0 +35783168 0 0 0 0 0 0 +35783169 0 0 0 0 0 0 +35783424 0 0 0 0 0 0 +35783425 0 0 0 0 0 0 +35783680 0 0 0 0 0 0 +35783681 0 0 0 0 0 0 +35783936 0 0 0 0 0 0 +35783937 0 0 0 0 0 0 +35784192 0 0 0 0 0 0 +35784193 0 0 0 0 0 0 +35784448 0 0 0 0 0 0 +35784449 0 0 0 0 0 0 +35784704 0 0 0 0 0 0 +35784705 0 0 0 0 0 0 +35784960 0 0 0 0 0 0 +35784961 0 0 0 0 0 0 +35785216 0 0 0 0 0 0 +35785217 0 0 0 0 0 0 +35785472 0 0 0 0 0 0 +35785473 0 0 0 0 0 0 +35848192 0 0 0 0 0 0 +35848193 0 0 0 0 0 0 +35848448 0 0 0 0 0 0 +35848449 0 0 0 0 0 0 +35848704 0 0 0 0 0 0 +35848705 0 0 0 0 0 0 +35848960 0 0 0 0 0 0 +35848961 0 0 0 0 0 0 +35849216 0 0 0 0 0 0 +35849217 0 0 0 0 0 0 +35849472 0 0 0 0 0 0 +35849473 0 0 0 0 0 0 +35849728 0 0 0 0 0 0 +35849729 0 0 0 0 0 0 +35849984 0 0 0 0 0 0 +35849985 0 0 0 0 0 0 +35850240 0 0 0 0 0 0 +35850241 0 0 0 0 0 0 +35850496 0 0 0 0 0 0 +35850497 0 0 0 0 0 0 +35850752 0 0 0 0 0 0 +35850753 0 0 0 0 0 0 +35851008 0 0 0 0 0 0 +35851009 0 0 0 0 0 0 +35913728 0 0 0 0 0 0 +35913729 0 0 0 0 0 0 +35913984 0 0 0 0 0 0 +35913985 0 0 0 0 0 0 +35914240 0 0 0 0 0 0 +35914241 0 0 0 0 0 0 +35914496 0 0 0 0 0 0 +35914497 0 0 0 0 0 0 +35914752 0 0 0 0 0 0 +35914753 0 0 0 0 0 0 +35915008 0 0 0 0 0 0 +35915009 0 0 0 0 0 0 +35915264 0 0 0 0 0 0 +35915265 0 0 0 0 0 0 +35915520 0 0 0 0 0 0 +35915521 0 0 0 0 0 0 +35915776 0 0 0 0 0 0 +35915777 0 0 0 0 0 0 +35916032 0 0 0 0 0 0 +35916033 0 0 0 0 0 0 +35916288 0 0 0 0 0 0 +35916289 0 0 0 0 0 0 +35916544 0 0 0 0 0 0 +35916545 0 0 0 0 0 0 +35979264 0 0 0 0 0 0 +35979265 0 0 0 0 0 0 +35979520 0 0 0 0 0 0 +35979521 0 0 0 0 0 0 +35979776 0 0 0 0 0 0 +35979777 0 0 0 0 0 0 +35980032 0 0 0 0 0 0 +35980033 0 0 0 0 0 0 +35980288 0 0 0 0 0 0 +35980289 0 0 0 0 0 0 +35980544 0 0 0 0 0 0 +35980545 0 0 0 0 0 0 +35980800 0 0 0 0 0 0 +35980801 0 0 0 0 0 0 +35981056 0 0 0 0 0 0 +35981057 0 0 0 0 0 0 +35981312 0 0 0 0 0 0 +35981313 0 0 0 0 0 0 +35981568 0 0 0 0 0 0 +35981569 0 0 0 0 0 0 +35981824 0 0 0 0 0 0 +35981825 0 0 0 0 0 0 +35982080 0 0 0 0 0 0 +35982081 0 0 0 0 0 0 +36044800 0 0 0 0 0 0 +36044801 0 0 0 0 0 0 +36045056 0 0 0 0 0 0 +36045057 0 0 0 0 0 0 +36045312 0 0 0 0 0 0 +36045313 0 0 0 0 0 0 +36045568 0 0 0 0 0 0 +36045569 0 0 0 0 0 0 +36045824 0 0 0 0 0 0 +36045825 0 0 0 0 0 0 +36046080 0 0 0 0 0 0 +36046081 0 0 0 0 0 0 +36046336 0 0 0 0 0 0 +36046337 0 0 0 0 0 0 +36046592 0 0 0 0 0 0 +36046593 0 0 0 0 0 0 +36046848 0 0 0 0 0 0 +36046849 0 0 0 0 0 0 +36047104 0 0 0 0 0 0 +36047105 0 0 0 0 0 0 +36047360 0 0 0 0 0 0 +36047361 0 0 0 0 0 0 +36047616 0 0 0 0 0 0 +36047617 0 0 0 0 0 0 +36110336 0 0 0 0 0 0 +36110337 0 0 0 0 0 0 +36110592 0 0 0 0 0 0 +36110593 0 0 0 0 0 0 +36110848 0 0 0 0 0 0 +36110849 0 0 0 0 0 0 +36111104 0 0 0 0 0 0 +36111105 0 0 0 0 0 0 +36111360 0 0 0 0 0 0 +36111361 0 0 0 0 0 0 +36111616 0 0 0 0 0 0 +36111617 0 0 0 0 0 0 +36111872 0 0 0 0 0 0 +36111873 0 0 0 0 0 0 +36112128 0 0 0 0 0 0 +36112129 0 0 0 0 0 0 +36112384 0 0 0 0 0 0 +36112385 0 0 0 0 0 0 +36112640 0 0 0 0 0 0 +36112641 0 0 0 0 0 0 +36112896 0 0 0 0 0 0 +36112897 0 0 0 0 0 0 +36113152 0 0 0 0 0 0 +36113153 0 0 0 0 0 0 +36175872 0 0 0 0 0 0 +36175873 0 0 0 0 0 0 +36176128 0 0 0 0 0 0 +36176129 0 0 0 0 0 0 +36176384 0 0 0 0 0 0 +36176385 0 0 0 0 0 0 +36176640 0 0 0 0 0 0 +36176641 0 0 0 0 0 0 +36176896 0 0 0 0 0 0 +36176897 0 0 0 0 0 0 +36177152 0 0 0 0 0 0 +36177153 0 0 0 0 0 0 +36177408 0 0 0 0 0 0 +36177409 0 0 0 0 0 0 +36177664 0 0 0 0 0 0 +36177665 0 0 0 0 0 0 +36177920 0 0 0 0 0 0 +36177921 0 0 0 0 0 0 +36178176 0 0 0 0 0 0 +36178177 0 0 0 0 0 0 +36178432 0 0 0 0 0 0 +36178433 0 0 0 0 0 0 +36178688 0 0 0 0 0 0 +36178689 0 0 0 0 0 0 +36241408 0 0 0 0 0 0 +36241409 0 0 0 0 0 0 +36241664 0 0 0 0 0 0 +36241665 0 0 0 0 0 0 +36241920 0 0 0 0 0 0 +36241921 0 0 0 0 0 0 +36242176 0 0 0 0 0 0 +36242177 0 0 0 0 0 0 +36242432 0 0 0 0 0 0 +36242433 0 0 0 0 0 0 +36242688 0 0 0 0 0 0 +36242689 0 0 0 0 0 0 +36242944 0 0 0 0 0 0 +36242945 0 0 0 0 0 0 +36243200 0 0 0 0 0 0 +36243201 0 0 0 0 0 0 +36243456 0 0 0 0 0 0 +36243457 0 0 0 0 0 0 +36243712 0 0 0 0 0 0 +36243713 0 0 0 0 0 0 +36243968 0 0 0 0 0 0 +36243969 0 0 0 0 0 0 +36244224 0 0 0 0 0 0 +36244225 0 0 0 0 0 0 +36306944 0 0 0 0 0 0 +36306945 0 0 0 0 0 0 +36307200 0 0 0 0 0 0 +36307201 0 0 0 0 0 0 +36307456 0 0 0 0 0 0 +36307457 0 0 0 0 0 0 +36307712 0 0 0 0 0 0 +36307713 0 0 0 0 0 0 +36307968 0 0 0 0 0 0 +36307969 0 0 0 0 0 0 +36308224 0 0 0 0 0 0 +36308225 0 0 0 0 0 0 +36308480 0 0 0 0 0 0 +36308481 0 0 0 0 0 0 +36308736 0 0 0 0 0 0 +36308737 0 0 0 0 0 0 +36308992 0 0 0 0 0 0 +36308993 0 0 0 0 0 0 +36309248 0 0 0 0 0 0 +36309249 0 0 0 0 0 0 +36309504 0 0 0 0 0 0 +36309505 0 0 0 0 0 0 +36309760 0 0 0 0 0 0 +36309761 0 0 0 0 0 0 +36372480 0 0 0 0 0 0 +36372481 0 0 0 0 0 0 +36372736 0 0 0 0 0 0 +36372737 0 0 0 0 0 0 +36372992 0 0 0 0 0 0 +36372993 0 0 0 0 0 0 +36373248 0 0 0 0 0 0 +36373249 0 0 0 0 0 0 +36373504 0 0 0 0 0 0 +36373505 0 0 0 0 0 0 +36373760 0 0 0 0 0 0 +36373761 0 0 0 0 0 0 +36374016 0 0 0 0 0 0 +36374017 0 0 0 0 0 0 +36374272 0 0 0 0 0 0 +36374273 0 0 0 0 0 0 +36374528 0 0 0 0 0 0 +36374529 0 0 0 0 0 0 +36374784 0 0 0 0 0 0 +36374785 0 0 0 0 0 0 +36375040 0 0 0 0 0 0 +36375041 0 0 0 0 0 0 +36375296 0 0 0 0 0 0 +36375297 0 0 0 0 0 0 +36438016 0 0 0 0 0 0 +36438017 0 0 0 0 0 0 +36438272 0 0 0 0 0 0 +36438273 0 0 0 0 0 0 +36438528 0 0 0 0 0 0 +36438529 0 0 0 0 0 0 +36438784 0 0 0 0 0 0 +36438785 0 0 0 0 0 0 +36439040 0 0 0 0 0 0 +36439041 0 0 0 0 0 0 +36439296 0 0 0 0 0 0 +36439297 0 0 0 0 0 0 +36439552 0 0 0 0 0 0 +36439553 0 0 0 0 0 0 +36439808 0 0 0 0 0 0 +36439809 0 0 0 0 0 0 +36440064 0 0 0 0 0 0 +36440065 0 0 0 0 0 0 +36440320 0 0 0 0 0 0 +36440321 0 0 0 0 0 0 +36440576 0 0 0 0 0 0 +36440577 0 0 0 0 0 0 +36440832 0 0 0 0 0 0 +36440833 0 0 0 0 0 0 +36503552 0 0 0 0 0 0 +36503553 0 0 0 0 0 0 +36503808 0 0 0 0 0 0 +36503809 0 0 0 0 0 0 +36504064 0 0 0 0 0 0 +36504065 0 0 0 0 0 0 +36504320 0 0 0 0 0 0 +36504321 0 0 0 0 0 0 +36504576 0 0 0 0 0 0 +36504577 0 0 0 0 0 0 +36504832 0 0 0 0 0 0 +36504833 0 0 0 0 0 0 +36505088 0 0 0 0 0 0 +36505089 0 0 0 0 0 0 +36505344 0 0 0 0 0 0 +36505345 0 0 0 0 0 0 +36505600 0 0 0 0 0 0 +36505601 0 0 0 0 0 0 +36505856 0 0 0 0 0 0 +36505857 0 0 0 0 0 0 +36506112 0 0 0 0 0 0 +36506113 0 0 0 0 0 0 +36506368 0 0 0 0 0 0 +36506369 0 0 0 0 0 0 +36569088 0 0 0 0 0 0 +36569089 0 0 0 0 0 0 +36569344 0 0 0 0 0 0 +36569345 0 0 0 0 0 0 +36569600 0 0 0 0 0 0 +36569601 0 0 0 0 0 0 +36569856 0 0 0 0 0 0 +36569857 0 0 0 0 0 0 +36570112 0 0 0 0 0 0 +36570113 0 0 0 0 0 0 +36570368 0 0 0 0 0 0 +36570369 0 0 0 0 0 0 +36570624 0 0 0 0 0 0 +36570625 0 0 0 0 0 0 +36570880 0 0 0 0 0 0 +36570881 0 0 0 0 0 0 +36571136 0 0 0 0 0 0 +36571137 0 0 0 0 0 0 +36571392 0 0 0 0 0 0 +36571393 0 0 0 0 0 0 +36571648 0 0 0 0 0 0 +36571649 0 0 0 0 0 0 +36571904 0 0 0 0 0 0 +36571905 0 0 0 0 0 0 +36634624 0 0 0 0 0 0 +36634625 0 0 0 0 0 0 +36634880 0 0 0 0 0 0 +36634881 0 0 0 0 0 0 +36635136 0 0 0 0 0 0 +36635137 0 0 0 0 0 0 +36635392 0 0 0 0 0 0 +36635393 0 0 0 0 0 0 +36635648 0 0 0 0 0 0 +36635649 0 0 0 0 0 0 +36635904 0 0 0 0 0 0 +36635905 0 0 0 0 0 0 +36636160 0 0 0 0 0 0 +36636161 0 0 0 0 0 0 +36636416 0 0 0 0 0 0 +36636417 0 0 0 0 0 0 +36636672 0 0 0 0 0 0 +36636673 0 0 0 0 0 0 +36636928 0 0 0 0 0 0 +36636929 0 0 0 0 0 0 +36637184 0 0 0 0 0 0 +36637185 0 0 0 0 0 0 +36637440 0 0 0 0 0 0 +36637441 0 0 0 0 0 0 +36700160 0 0 0 0 0 0 +36700161 0 0 0 0 0 0 +36700416 0 0 0 0 0 0 +36700417 0 0 0 0 0 0 +36700672 0 0 0 0 0 0 +36700673 0 0 0 0 0 0 +36700928 0 0 0 0 0 0 +36700929 0 0 0 0 0 0 +36701184 0 0 0 0 0 0 +36701185 0 0 0 0 0 0 +36701440 0 0 0 0 0 0 +36701441 0 0 0 0 0 0 +36701696 0 0 0 0 0 0 +36701697 0 0 0 0 0 0 +36701952 0 0 0 0 0 0 +36701953 0 0 0 0 0 0 +36702208 0 0 0 0 0 0 +36702209 0 0 0 0 0 0 +36702464 0 0 0 0 0 0 +36702465 0 0 0 0 0 0 +36702720 0 0 0 0 0 0 +36702721 0 0 0 0 0 0 +36702976 0 0 0 0 0 0 +36702977 0 0 0 0 0 0 +36765696 0 0 0 0 0 0 +36765697 0 0 0 0 0 0 +36765952 0 0 0 0 0 0 +36765953 0 0 0 0 0 0 +36766208 0 0 0 0 0 0 +36766209 0 0 0 0 0 0 +36766464 0 0 0 0 0 0 +36766465 0 0 0 0 0 0 +36766720 0 0 0 0 0 0 +36766721 0 0 0 0 0 0 +36766976 0 0 0 0 0 0 +36766977 0 0 0 0 0 0 +36767232 0 0 0 0 0 0 +36767233 0 0 0 0 0 0 +36767488 0 0 0 0 0 0 +36767489 0 0 0 0 0 0 +36767744 0 0 0 0 0 0 +36767745 0 0 0 0 0 0 +36768000 0 0 0 0 0 0 +36768001 0 0 0 0 0 0 +36768256 0 0 0 0 0 0 +36768257 0 0 0 0 0 0 +36768512 0 0 0 0 0 0 +36768513 0 0 0 0 0 0 +36831232 0 0 0 0 0 0 +36831233 0 0 0 0 0 0 +36831488 0 0 0 0 0 0 +36831489 0 0 0 0 0 0 +36831744 0 0 0 0 0 0 +36831745 0 0 0 0 0 0 +36832000 0 0 0 0 0 0 +36832001 0 0 0 0 0 0 +36832256 0 0 0 0 0 0 +36832257 0 0 0 0 0 0 +36832512 0 0 0 0 0 0 +36832513 0 0 0 0 0 0 +36832768 0 0 0 0 0 0 +36832769 0 0 0 0 0 0 +36833024 0 0 0 0 0 0 +36833025 0 0 0 0 0 0 +36833280 0 0 0 0 0 0 +36833281 0 0 0 0 0 0 +36833536 0 0 0 0 0 0 +36833537 0 0 0 0 0 0 +36833792 0 0 0 0 0 0 +36833793 0 0 0 0 0 0 +36834048 0 0 0 0 0 0 +36834049 0 0 0 0 0 0 +36896768 0 0 0 0 0 0 +36896769 0 0 0 0 0 0 +36897024 0 0 0 0 0 0 +36897025 0 0 0 0 0 0 +36897280 0 0 0 0 0 0 +36897281 0 0 0 0 0 0 +36897536 0 0 0 0 0 0 +36897537 0 0 0 0 0 0 +36897792 0 0 0 0 0 0 +36897793 0 0 0 0 0 0 +36898048 0 0 0 0 0 0 +36898049 0 0 0 0 0 0 +36898304 0 0 0 0 0 0 +36898305 0 0 0 0 0 0 +36898560 0 0 0 0 0 0 +36898561 0 0 0 0 0 0 +36898816 0 0 0 0 0 0 +36898817 0 0 0 0 0 0 +36899072 0 0 0 0 0 0 +36899073 0 0 0 0 0 0 +36899328 0 0 0 0 0 0 +36899329 0 0 0 0 0 0 +36899584 0 0 0 0 0 0 +36899585 0 0 0 0 0 0 +36962304 0 0 0 0 0 0 +36962305 0 0 0 0 0 0 +36962560 0 0 0 0 0 0 +36962561 0 0 0 0 0 0 +36962816 0 0 0 0 0 0 +36962817 0 0 0 0 0 0 +36963072 0 0 0 0 0 0 +36963073 0 0 0 0 0 0 +36963328 0 0 0 0 0 0 +36963329 0 0 0 0 0 0 +36963584 0 0 0 0 0 0 +36963585 0 0 0 0 0 0 +36963840 0 0 0 0 0 0 +36963841 0 0 0 0 0 0 +36964096 0 0 0 0 0 0 +36964097 0 0 0 0 0 0 +36964352 0 0 0 0 0 0 +36964353 0 0 0 0 0 0 +36964608 0 0 0 0 0 0 +36964609 0 0 0 0 0 0 +36964864 0 0 0 0 0 0 +36964865 0 0 0 0 0 0 +36965120 0 0 0 0 0 0 +36965121 0 0 0 0 0 0 +37027840 0 0 0 0 0 0 +37027841 0 0 0 0 0 0 +37028096 0 0 0 0 0 0 +37028097 0 0 0 0 0 0 +37028352 0 0 0 0 0 0 +37028353 0 0 0 0 0 0 +37028608 0 0 0 0 0 0 +37028609 0 0 0 0 0 0 +37028864 0 0 0 0 0 0 +37028865 0 0 0 0 0 0 +37029120 0 0 0 0 0 0 +37029121 0 0 0 0 0 0 +37029376 0 0 0 0 0 0 +37029377 0 0 0 0 0 0 +37029632 0 0 0 0 0 0 +37029633 0 0 0 0 0 0 +37029888 0 0 0 0 0 0 +37029889 0 0 0 0 0 0 +37030144 0 0 0 0 0 0 +37030145 0 0 0 0 0 0 +37030400 0 0 0 0 0 0 +37030401 0 0 0 0 0 0 +37030656 0 0 0 0 0 0 +37030657 0 0 0 0 0 0 +37093376 0 0 0 0 0 0 +37093377 0 0 0 0 0 0 +37093632 0 0 0 0 0 0 +37093633 0 0 0 0 0 0 +37093888 0 0 0 0 0 0 +37093889 0 0 0 0 0 0 +37094144 0 0 0 0 0 0 +37094145 0 0 0 0 0 0 +37094400 0 0 0 0 0 0 +37094401 0 0 0 0 0 0 +37094656 0 0 0 0 0 0 +37094657 0 0 0 0 0 0 +37094912 0 0 0 0 0 0 +37094913 0 0 0 0 0 0 +37095168 0 0 0 0 0 0 +37095169 0 0 0 0 0 0 +37095424 0 0 0 0 0 0 +37095425 0 0 0 0 0 0 +37095680 0 0 0 0 0 0 +37095681 0 0 0 0 0 0 +37095936 0 0 0 0 0 0 +37095937 0 0 0 0 0 0 +37096192 0 0 0 0 0 0 +37096193 0 0 0 0 0 0 +53936384 0 0 0 0 0 0 +53936385 0 0 0 0 0 0 +53936386 0 0 0 0 0 0 +53936387 0 0 0 0 0 0 +53936388 0 0 0 0 0 0 +53936389 0 0 0 0 0 0 +53936390 0 0 0 0 0 0 +53936391 0 0 0 0 0 0 +54001664 0 0 0 0 0 0 +54001665 0 0 0 0 0 0 +54001666 0 0 0 0 0 0 +54001667 0 0 0 0 0 0 +54001668 0 0 0 0 0 0 +54001669 0 0 0 0 0 0 +54001670 0 0 0 0 0 0 +54001671 0 0 0 0 0 0