diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..3d4c3df93 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,12 @@ +## Describe your changes + +## Checklist before submitting your PR +- [ ] This PR implements a single change (one new/modified Tool, or a set of changes to implement one new/modified feature) +- [ ] This PR alters the minimum number of files to affect this change +- [ ] If this PR includes a new Tool, a README and minimal demonstration ToolChain is provided +- [ ] If a new Tool/ToolChain requires model or configuration files, their paths are not hard-coded, and means of generating those files is described in the readme, with examples provided on /pnfs/annie/persistent +- [ ] For every `new` usage, there is a reason the data must be on the heap +- [ ] For every `new` there is a `delete`, unless I explicitly know why (e.g. ROOT or a BoostStore takes ownership) + +## Additional Material +Attach any validation or demonstration files here. You may also link to relavant docdb articles. diff --git a/DataModel/ANNIEGeometry.cpp b/DataModel/ANNIEGeometry.cpp index 27e2c66c3..eeeb105ba 100644 --- a/DataModel/ANNIEGeometry.cpp +++ b/DataModel/ANNIEGeometry.cpp @@ -190,8 +190,8 @@ void ANNIEGeometry::SetGeometry(){ //WCSim fCylRadius = 152.0; //cm fCylLength = 396.0; //cm - fCylFiducialRadius = 0.0; - fCylFiducialLength = 0.0; + fCylFiducialRadius = 100.0; //cm + fCylFiducialLength = 200.0; //cm fXoffset = 0.0; fYoffset = 0.0; fZoffset = 0.0; @@ -337,11 +337,11 @@ bool ANNIEGeometry::InsideDetector(double x, double y, double z) bool ANNIEGeometry::InsideFiducialVolume(double x, double y, double z) { if( fGeoType==ANNIEGeometry::kCylinder ){ - if( z>=-0.5*fCylFiducialLength && z<=+0.5*fCylFiducialLength - && x*x+y*y<=fCylFiducialRadius*fCylFiducialRadius ){ + if( y>=-0.5*fCylFiducialLength && y<=+0.5*fCylFiducialLength + && x*x+z*z<=fCylFiducialRadius*fCylFiducialRadius ){ return 1; } - } else std::cout<<"WTF ANNIE Should Be A Cylinder!!!!"<dr ) dr = fCylRadius; if( 0.5*fCylLength>dr ) dr = 0.5*fCylLength; - if( -sqrt(x*x+y*y)+fCylRadius=-0.5*fCylLength && z<=+0.5*fCylLength ){ - return -sqrt(x*x+y*y)+fCylRadius; + if( y>=-0.5*fCylLength && y<=+0.5*fCylLength ){ + return -sqrt(x*x+z*z)+fCylRadius; } - // top region - if( z<=-0.5*fCylLength - && x*x+y*y=+0.5*fCylLength - && x*x+y*y=+0.5*fCylLength + && x*x+z*z=+0.5*fCylLength - && x*x+y*y>=fCylRadius ){ - double dr = sqrt(x*x+y*y)-fCylRadius; - double dz = -z+0.5*fCylLength; - return -sqrt(dr*dr+dz*dz); + if( y>=+0.5*fCylLength + && x*x+z*z>=fCylRadius ){ + double dr = sqrt(x*x+z*z)-fCylRadius; + double dy = -y+0.5*fCylLength; + return -sqrt(dr*dr+dy*dy); } - if( z<=-0.5*fCylLength - && x*x+y*y>=fCylRadius ){ - double dr = sqrt(x*x+y*y)-fCylRadius; - double dz = +z+0.5*fCylLength; - return -sqrt(dr*dr+dz*dz); + if( y<=-0.5*fCylLength + && x*x+z*z>=fCylRadius ){ + double dr = sqrt(x*x+z*z)-fCylRadius; + double dy = y+0.5*fCylLength; + return -sqrt(dr*dr+dy*dy); } } } diff --git a/GetToolDAQ.sh b/GetToolDAQ.sh index 543fcff50..7bd2292b3 100644 --- a/GetToolDAQ.sh +++ b/GetToolDAQ.sh @@ -497,6 +497,7 @@ then pip3 install uproot==4.3.7 pip3 install xgboost==1.6.2 pip3 install tensorflow==2.10.0 + pip3 install torch==1.12.1 pip3 install PyQt5 # set tensorflow verbosity to suppress info messages about not having a GPU or maximal acceleration # https://stackoverflow.com/questions/35911252/disable-tensorflow-debugging-information/42121886#42121886 diff --git a/Setup.sh b/Setup.sh index f9554f8fd..8ff308195 100644 --- a/Setup.sh +++ b/Setup.sh @@ -4,6 +4,8 @@ ToolDAQapp=`pwd` +ulimit -n 4096 + export LIBGL_ALWAYS_INDIRECT=1 source ${ToolDAQapp}/ToolDAQ/root-6.24.06/install/bin/thisroot.sh diff --git a/UserTools/AssignBunchTimingMC/AssignBunchTimingMC.cpp b/UserTools/AssignBunchTimingMC/AssignBunchTimingMC.cpp new file mode 100644 index 000000000..e92b2adb6 --- /dev/null +++ b/UserTools/AssignBunchTimingMC/AssignBunchTimingMC.cpp @@ -0,0 +1,245 @@ +#include "AssignBunchTimingMC.h" + +AssignBunchTimingMC::AssignBunchTimingMC():Tool(){} + +//------------------------------------------------------------------------------ + +bool AssignBunchTimingMC::Initialise(std::string configfile, DataModel &data){ + + // Get configuration variables and set default values if necessary + + if ( !configfile.empty() ) m_variables.Initialise(configfile); + m_data = &data; + + bool got_verbosity = m_variables.Get("verbosity", verbosity); + bool got_width = m_variables.Get("bunchwidth", fbunchwidth); + bool got_interval = m_variables.Get("bunchinterval", fbunchinterval); + bool got_count = m_variables.Get("bunchcount", fbunchcount); + bool got_sample = m_variables.Get("sampletype", fsample); + bool got_trigger = m_variables.Get("prompttriggertime", ftriggertime); + + if (!got_verbosity) { + verbosity = 0; + logmessage = "Warning (AssignBunchTimingMC): \"verbosity\" not set in the config, defaulting to 0"; + Log(logmessage, v_warning, verbosity); + } + + + // default bunch parameters from MicroBooNE paper: https://doi.org/10.1103/PhysRevD.108.052010 + + if (!got_width) { + fbunchwidth = 1.308; // ns + logmessage = ("Warning (AssignBunchTimingMC): \"bunchwidth\" not " + "set in the config file. Using default: 1.308ns"); + Log(logmessage, v_warning, verbosity); + } + + if (!got_interval) { + fbunchinterval = 18.936; // ns + logmessage = ("Warning (AssignBunchTimingMC): \"bunchinterval\" not " + "set in the config file. Using default: 18.936ns"); + Log(logmessage, v_warning, verbosity); + } + + if (!got_count) { + fbunchwidth = 81; + logmessage = ("Warning (AssignBunchTimingMC): \"bunchcount\" not " + "set in the config file. Using default: 81"); + Log(logmessage, v_warning, verbosity); + } + + if (!got_sample) { + fsample = 0; // assume they are using the Tank samples + logmessage = ("Warning (AssignBunchTimingMC): \"sampletype\" not " + "set in the config file. Using default: 0 (GENIE tank samples)"); + Log(logmessage, v_warning, verbosity); + } + + if (!got_trigger) { + ftriggertime = 0; // assume they are using the old WCSim prompt trigger time (t = 0, first particle arrival) + logmessage = ("Warning (AssignBunchTimingMC): \"prompttriggertime\" not " + "set in the config file. Using default: 0 (WCSim prompt trigger time = 0)"); + Log(logmessage, v_warning, verbosity); + } + + + if (verbosity >= v_message) { + std::cout<<"------------------------------------"<<"\n"; + std::cout<<"AssignBunchTimingMC: Config settings"<<"\n"; + std::cout<<"------------------------------------"<<"\n"; + std::cout<<"bunch width = "<; // set up pointer; Store will handle deletion in Finalize + + return true; +} + +//------------------------------------------------------------------------------ + + +bool AssignBunchTimingMC::Execute() +{ + + if (verbosity >= v_debug) { + std::cout << "AssignBunchTimingMC: Executing tool..." << std::endl; + } + + if (!LoadStores()) // Load info from store + return false; + if (verbosity >= v_debug) { + std::cout << "AssignBunchTimingMC: Store info loading successful" << std::endl; + } + + fbunchTimes->clear(); // clear map + + BNBtiming(); // grab BNB structure + if (verbosity >= v_debug) { + std::cout << "AssignBunchTimingMC: BNB timing successful" << std::endl; + } + + for (std::pair>&& apair : *fClusterMapMC) { + double totalHitTime = 0; + int hitCount = 0; + int totalHits = apair.second.size(); + + CalculateClusterAndBunchTimes(apair.second, totalHitTime, hitCount, totalHits); + + // store the cluster time in a map (e.g., keyed by cluster identifier) + fbunchTimes->emplace(apair.first, bunchTime); + } + + if (verbosity >= v_debug) { + std::cout << "AssignBunchTimingMC: Assigned bunch time successfully. Writing to Store..." << std::endl; + } + + // send to store + m_data->Stores.at("ANNIEEvent")->Set("bunchTimes", fbunchTimes); + + return true; + +} + + +//------------------------------------------------------------------------------ + +bool AssignBunchTimingMC::Finalise() +{ + return true; +} + +//------------------------------------------------------------------------------ + + + + +bool AssignBunchTimingMC::LoadStores() +{ + // grab necessary information from Stores + + bool get_MCClusters = m_data->CStore.Get("ClusterMapMC", fClusterMapMC); + if (!get_MCClusters) { + Log("AssignBunchTimingMC: no ClusterMapMC in the CStore! Are you sure you ran the ClusterFinder tool?", v_error, verbosity); + return false; + } + + bool get_AnnieEvent = m_data->Stores.count("ANNIEEvent"); + if (!get_AnnieEvent) { + Log("AssignBunchTimingMC: no ANNIEEvent store!", v_error, verbosity); + return false; + } + + bool get_MCHits = m_data->Stores.at("ANNIEEvent")->Get("MCHits", fMCHitsMap); + if (!get_MCHits) { + Log("AssignBunchTimingMC: no MCHits in the ANNIEEvent!", v_error, verbosity); + return false; + } + + bool get_neutrino_vtxt = m_data->Stores["GenieInfo"]->Get("NuIntxVtx_T",TrueNuIntxVtx_T); // grab neutrino interaction time + if (!get_neutrino_vtxt) { + Log("AssignBunchTimingMC: no GENIE neutrino interaction time info in the ANNIEEvent! Are you sure you ran the LoadGENIEEvent tool?", v_error, verbosity); + return false; + } + + return true; +} + + +//------------------------------------------------------------------------------ + + +void AssignBunchTimingMC::BNBtiming() +{ + // Determined from GENIE samples (as of Oct 2024) + const double tank_time = 67.0; // Tank neutrino arrival time: 67ns + const double world_time = 33.0; // WORLD neutrino arrival time: 33ns + + if (ftriggertime == 0) { + new_nu_time = (fsample == 0) ? (TrueNuIntxVtx_T - tank_time) : (TrueNuIntxVtx_T - world_time); + } else if (ftriggertime == 1) { + new_nu_time = (fsample == 0) ? -tank_time : -world_time; + } + + // seed random number generator with the current time + unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); + generator.seed(seed); + if (verbosity >= v_debug) { + std::cout << "AssignBunchTimingMC: Random seed selected: " << seed << std::endl; + } + + + // per event, assign BNB structure (random bunch number + jitter based on intrinsic bunch width + new_nu_time) + bunchNumber = rand() % fbunchcount; + std::normal_distribution distribution(0, fbunchwidth); + jitter = distribution(generator); + + if (verbosity >= v_message) { + std::string logmessage = "AssignBunchTimingMC: bunchNumber = " + std::to_string(bunchNumber) + " | t0 = " + std::to_string(new_nu_time); + Log(logmessage, v_debug, verbosity); + } + +} + + +//------------------------------------------------------------------------------ + + +void AssignBunchTimingMC::CalculateClusterAndBunchTimes(std::vector const &mchits, double &totalHitTime, int &hitCount, int &totalHits) +{ + + // loop over the hits to get their times + for (auto mchit : mchits) { + double hitTime = mchit.GetTime(); + totalHitTime += hitTime; + hitCount++; + if (verbosity >= v_debug) { + std::string logmessage = "AssignBunchTimingMC: (" + std::to_string(hitCount) + "/" + std::to_string(totalHits) + ") MCHit time = " + std::to_string(hitTime); + Log(logmessage, v_debug, verbosity); + } + } + + // find nominal cluster time (average hit time) + double clusterTime = (hitCount > 0) ? totalHitTime / hitCount : -9999; + if (verbosity >= v_debug) { + std::string logmessage = "AssignBunchTimingMC: ClusterTime = " + std::to_string(clusterTime); + Log(logmessage, v_debug, verbosity); + } + + // calculate BunchTime + bunchTime = fbunchinterval * bunchNumber + clusterTime + jitter + new_nu_time ; + if (verbosity >= v_debug) { + std::string logmessage = "AssignBunchTimingMC: bunchTime = " + std::to_string(bunchTime); + Log(logmessage, v_debug, verbosity); + } + +} + + +//------------------------------------------------------------------------------ + +// done diff --git a/UserTools/AssignBunchTimingMC/AssignBunchTimingMC.h b/UserTools/AssignBunchTimingMC/AssignBunchTimingMC.h new file mode 100644 index 000000000..69373d644 --- /dev/null +++ b/UserTools/AssignBunchTimingMC/AssignBunchTimingMC.h @@ -0,0 +1,67 @@ +#ifndef AssignBunchTimingMC_H +#define AssignBunchTimingMC_H + +#include +#include +#include + +#include "Tool.h" +#include "Hit.h" + + +/** + * \class AssignBunchTimingMC + * + * A tool to assign BNB bunch structure to GENIE events +* +* $Author: S.Doran $ +* $Date: 2024/10/09 $ +* Contact: doran@iastate.edu +*/ +class AssignBunchTimingMC: public Tool { + + public: + + AssignBunchTimingMC(); ///< Simple constructor + bool Initialise(std::string configfile,DataModel &data); ///< Initialise Function for setting up Tool resources. @param configfile The path and name of the dynamic configuration file to read in. @param data A reference to the transient data class used to pass information between Tools. + bool Execute(); ///< Execute function used to perform Tool purpose. + bool Finalise(); ///< Finalise function used to clean up resources. + + bool LoadStores(); ///< Loads all relevant information from the store, away from the Execute function + void BNBtiming(); ///< Calculates the appropriate BNB timing to apply to the clusters + void CalculateClusterAndBunchTimes(std::vector const &mchits, double &totalHitTime, int &hitCount, int &totalHits); ///< Loops through the MCHits, finds the cluster times (avg hit time), and calculates the new bunch timing + + private: + + std::map> *fMCHitsMap = nullptr; ///< All of the MCHits keyed by channel number + std::map> *fClusterMapMC = nullptr; ///< All MC clusters + double TrueNuIntxVtx_T; ///< true neutrino interaction time in ns, from GenieInfo store + + std::map *fbunchTimes = nullptr; ///< Bunch-realistic timing from the cluster times; + /// map linking updated bunch time to normal cluster time + + std::default_random_engine generator; ///< Random number generator for bunch number + + double fbunchwidth; ///< BNB intrinsic bunch width in ns + double fbunchinterval; ///< BNB bunch spacing in ns + int fbunchcount; ///< number of BNB bunches per spill + int fsample; ///< GENIE Tank or WORLD samples + int ftriggertime; ///< whether the samples used the default WCSim prompt trigger = 0 (when particles enter the volume), or the adjusted prompt trigger based on the start of the beam dump + + double new_nu_time; ///< offset needed to make the cluster times beam realistic + int bunchNumber; ///< randomly assigned bunch number + double jitter; ///< random jitter based on the intrinsic bunch width + double bunchTime; ///< individual bunch time assigned for a specific cluster + + /// \brief verbosity levels: if 'verbosity' < this level, the message type will be logged. + int verbosity; + int v_error=0; // STOP THE SHOW + int v_warning=1; // this and below the show will go on + int v_message=2; + int v_debug=3; + std::string logmessage; + +}; + + +#endif \ No newline at end of file diff --git a/UserTools/AssignBunchTimingMC/README.md b/UserTools/AssignBunchTimingMC/README.md new file mode 100644 index 000000000..5ca1644e9 --- /dev/null +++ b/UserTools/AssignBunchTimingMC/README.md @@ -0,0 +1,31 @@ +# AssignBunchTimingMC + +`AssignBunchTimingMC` applies the spill structure of the BNB to MC clusters. Currently, all MC events are "triggered" at the same time in WCSim; for certain analyses revolving around beam timing it may be necessary to have a beam-realistic simulation. The tool works by taking in a cluster produced by the `ClusterFinder` tool of form std::map> from the CStore ("ClusterMapMC"), and applies a corrective timing factor to each event. The tool also leverages the true neutrino interaction vertex time from GENIE to accurately create a spill structure. For this reason, both the `LoadGenieEvent` and `ClusterFinder` tools must be ran beforehand. This tool is designed for use on Genie Tank and World WCSim samples. + +## Data + +`AssignBunchTimingMC` produces a map of spill-adjusted cluster times and puts them into the ANNIEEvent store (all map keys are the original cluster time): + +**fbunchTimes** `std::map` + + +## Configuration +``` +# AssignBunchTimingMC Config File + +verbosity 0 + +# BNB properties taken from: MicroBooNE https://doi.org/10.1103/PhysRevD.108.052010 +bunchwidth 1.308 # BNB instrinic bunch spread [ns] +bunchinterval 18.936 # BNB bunch spacings [ns] +bunchcount 81 # number of BNB bunches per spill + +sampletype 0 # Tank (0) or World (1) genie samples you are running over +prompttriggertime 0 # WCSim prompt trigger settings: (0 = default, t0 = 0 when a particle enters the volume) + # (1 = modified, t0 = 0 when the neutrino beam dump begins) +``` + + +## Additional information + +The "bunchTimes" have a spill structure that starts at ~0 ns and extends to M ns (depending on the bunch spacing and number of bunches). The tool is currently configured to the most recent Genie sample production (tank: 2023, world: early 2024) for both the WCSim tank and world events (both of which have different "beam dump" starting times and prompt trigger times). diff --git a/UserTools/BackTracker/BackTracker.cpp b/UserTools/BackTracker/BackTracker.cpp new file mode 100644 index 000000000..ce80ada9b --- /dev/null +++ b/UserTools/BackTracker/BackTracker.cpp @@ -0,0 +1,213 @@ +#include "BackTracker.h" + +BackTracker::BackTracker():Tool(){} + +// To sort +struct sort_by_charge { + bool operator()(const std::pair &left, const std::pair &right) { + return left.second < right.second; + } +}; + + +bool BackTracker::Initialise(std::string configfile, DataModel &data){ + + /////////////////// Useful header /////////////////////// + if(configfile!="") m_variables.Initialise(configfile); // loading config file + //m_variables.Print(); + + m_data= &data; //assigning transient data pointer + ///////////////////////////////////////////////////////////////// + + // Load my config parameters + bool gotVerbosity = m_variables.Get("verbosity",verbosity); + if (!gotVerbosity) { + verbosity = 0; + logmessage = "BackTracker::Initialize: \"verbosity\" not set in the config, defaulting to 0"; + Log(logmessage, v_error, verbosity); + } + + + // Set up the pointers we're going to save. No need to + // delete them at Finalize, the store will handle it + fClusterToBestParticleID = new std::map; + fClusterToBestParticlePDG = new std::map; + fClusterEfficiency = new std::map; + fClusterPurity = new std::map; + fClusterTotalCharge = new std::map; + + return true; +} + +//------------------------------------------------------------------------------ +bool BackTracker::Execute() +{ + if (!LoadFromStores()) + return false; + + fClusterToBestParticleID ->clear(); + fClusterToBestParticlePDG->clear(); + fClusterEfficiency ->clear(); + fClusterPurity ->clear(); + fClusterTotalCharge ->clear(); + + fParticleToTankTotalCharge.clear(); + SumParticleTankCharge(); + + + // Loop over the clusters and do the things + for (std::pair>&& apair : *fClusterMapMC) { + int prtId = -5; + int prtPdg = -5; + double eff = -5; + double pur = -5; + double totalCharge = 0; + + MatchMCParticle(apair.second, prtId, prtPdg, eff, pur, totalCharge); + + fClusterToBestParticleID ->emplace(apair.first, prtId); + fClusterToBestParticlePDG->emplace(apair.first, prtPdg); + fClusterEfficiency ->emplace(apair.first, eff); + fClusterPurity ->emplace(apair.first, pur); + fClusterTotalCharge ->emplace(apair.first, totalCharge); + } + + m_data->Stores.at("ANNIEEvent")->Set("ClusterToBestParticleID", fClusterToBestParticleID ); + m_data->Stores.at("ANNIEEvent")->Set("ClusterToBestParticlePDG", fClusterToBestParticlePDG); + m_data->Stores.at("ANNIEEvent")->Set("ClusterEfficiency", fClusterEfficiency ); + m_data->Stores.at("ANNIEEvent")->Set("ClusterPurity", fClusterPurity ); + m_data->Stores.at("ANNIEEvent")->Set("ClusterTotalCharge", fClusterTotalCharge ); + + return true; +} + +//------------------------------------------------------------------------------ +bool BackTracker::Finalise() +{ + + return true; +} + +//------------------------------------------------------------------------------ +void BackTracker::SumParticleTankCharge() +{ + for (auto mcHitsIt : *fMCHitsMap) { + std::vector mcHits = mcHitsIt.second; + for (uint mcHitIdx = 0; mcHitIdx < mcHits.size(); ++mcHitIdx) { + + // technically a MCHit could have multiple parents, but they don't appear to in practice + // skip any cases we come across + std::vector parentIdxs = *(mcHits[mcHitIdx].GetParents()); + if (parentIdxs.size() != 1) continue; + + int particleId = -5; + for (auto it : *fMCParticleIndexMap) { + if (it.second == parentIdxs[0]) particleId = it.first; + } + if (particleId == -5) continue; + + double depositedCharge = mcHits[mcHitIdx].GetCharge(); + if (!fParticleToTankTotalCharge.count(particleId)) + fParticleToTankTotalCharge.emplace(particleId, depositedCharge); + else + fParticleToTankTotalCharge.at(particleId) += depositedCharge; + } + } +} + +//------------------------------------------------------------------------------ +void BackTracker::MatchMCParticle(std::vector const &mchits, int &prtId, int &prtPdg, double &eff, double &pur, double &totalCharge) +{ + // Loop over the hits and get all of their parents and the energy that each one contributed + // be sure to bunch up all neutronic contributions + std::map mapParticleToTotalClusterCharge; + totalCharge = 0; + + for (auto mchit : mchits) { + std::vector parentIdxs = *(mchit.GetParents()); + if (parentIdxs.size() != 1) { + logmessage = "BackTracker::MatchMCParticle: this MCHit has "; + logmessage += std::to_string(parentIdxs.size()) + " parents!"; + Log(logmessage, v_debug, verbosity); + continue; + } + + int particleId = -5; + for (auto it : *fMCParticleIndexMap) { + if (it.second == parentIdxs[0]) particleId = it.first; + } + if (particleId == -5) continue; + + double depositedCharge = mchit.GetCharge(); + totalCharge += depositedCharge; + + if (mapParticleToTotalClusterCharge.count(particleId) == 0) + mapParticleToTotalClusterCharge.emplace(particleId, depositedCharge); + else + mapParticleToTotalClusterCharge[particleId] += depositedCharge; + } + + // Loop over the particleIds to find the primary contributer to the cluster + double maxCharge = 0; + for (auto apair : mapParticleToTotalClusterCharge) { + if (apair.second > maxCharge) { + maxCharge = apair.second; + prtId = apair.first; + } + } + + // Check that we have some charge, if not then something is wrong so pass back all -5 + if (totalCharge > 0) { + eff = maxCharge/fParticleToTankTotalCharge.at(prtId); + pur = maxCharge/totalCharge; + prtPdg = (fMCParticles->at(fMCParticleIndexMap->at(prtId))).GetPdgCode(); + } else { + prtId = -5; + eff = -5; + pur = -5; + totalCharge = -5; + } + + logmessage = "BackTracker::MatchMCParticle: best particleId is : "; + logmessage += std::to_string(prtId) + " which has PDG: " + std::to_string(prtPdg); + Log(logmessage, v_message, verbosity); + +} + +//------------------------------------------------------------------------------ +bool BackTracker::LoadFromStores() +{ + // Grab the stuff we need from the stores + bool goodMCClusters = m_data->CStore.Get("ClusterMapMC", fClusterMapMC); + if (!goodMCClusters) { + std::cerr<<"BackTracker: no ClusterMapMC in the CStore!"<Stores.count("ANNIEEvent"); + if (!goodAnnieEvent) { + std::cerr<<"BackTracker: no ANNIEEvent store!"<Stores.at("ANNIEEvent")->Get("MCHits", fMCHitsMap); + if (!goodMCHits) { + std::cerr<<"BackTracker: no MCHits in the ANNIEEvent!"<Stores.at("ANNIEEvent")->Get("MCParticles", fMCParticles); + if (!goodMCParticles) { + std::cerr<<"BackTracker: no MCParticles in the ANNIEEvent!"<Stores.at("ANNIEEvent")->Get("TrackId_to_MCParticleIndex", fMCParticleIndexMap); + if (!goodMCParticleIndexMap) { + std::cerr<<"BackTracker: no TrackId_to_MCParticleIndex in the ANNIEEvent!"< +#include + +#include "Tool.h" +#include "Hit.h" +#include "Particle.h" + + +/** + * \class BackTracker + * + * A tool to link reco info to the paticle(s) that generated the light +* +* $Author: A.Sutton $ +* $Date: 2024/06/16 $ +* Contact: atcsutton@gmail.com +*/ +class BackTracker: public Tool { + + + public: + + BackTracker(); ///< Simple constructor + bool Initialise(std::string configfile,DataModel &data); ///< Initialise Function for setting up Tool resources. @param configfile The path and name of the dynamic configuration file to read in. @param data A reference to the transient data class used to pass information between Tools. + bool Execute(); ///< Execute function used to perform Tool purpose. + bool Finalise(); ///< Finalise function used to clean up resources. + + bool LoadFromStores(); ///< Does all the loading so I can move it away from the Execute function + void SumParticleTankCharge(); + void MatchMCParticle(std::vector const &mchits, int &prtId, int &prtPdg, double &eff, double &pur, double &totalCharge); ///< The meat and potatoes + + private: + + // Things we need to pull out of the store + std::map> *fMCHitsMap = nullptr; ///< All of the MCHits keyed by channel number + std::map> *fClusterMapMC = nullptr; ///< Clusters that we will be linking MCParticles to + std::vector *fMCParticles = nullptr; ///< The true particles from the event + std::map *fMCParticleIndexMap = nullptr; ///< Map between the particle Id and it's position in MCParticles vector + + // We'll calculate this map from MCHit parent particle to the total charge deposited throughout the tank + // technically a MCHit could have multiple parents, but they don't appear to in practice + // the key is particle Id and value is total tank charge + std::map fParticleToTankTotalCharge; + + // We'll save out maps between the local cluster time and + // the ID and PDG of the particle that contributed the most energy + // the efficiency of capturing all light from the best matched particle in that cluster + // the the purity based on the best matched particle + // the total deposited charge in the cluster + // the ammount of cluster charge due to neutrons + std::map *fClusterToBestParticleID = nullptr; + std::map *fClusterToBestParticlePDG = nullptr; + std::map *fClusterEfficiency = nullptr; + std::map *fClusterPurity = nullptr; + std::map *fClusterTotalCharge = nullptr; + + /// \brief verbosity levels: if 'verbosity' < this level, the message type will be logged. + int verbosity; + int v_error=0; + int v_warning=1; + int v_message=2; + int v_debug=3; + std::string logmessage; + +}; + + +#endif diff --git a/UserTools/BackTracker/README.md b/UserTools/BackTracker/README.md new file mode 100644 index 000000000..0c5a1776d --- /dev/null +++ b/UserTools/BackTracker/README.md @@ -0,0 +1,28 @@ +# BackTracker + +`BackTracker` links reconstructed clusters (vectors of hits) to the MC particle that contributed the most energy to said cluster. Right now, it takes in a cluster of form std::map>, specifically it uses the CStore cluster produced by the ClusterFinder tool, which has the label "ClusterMapMC". That map is indexed by the cluster time and that index is in turn used to ID all of the data products that BackTracker produces. + +## Data + +`BackTracker` produces a number of maps to link MC information to the associated cluster and puts them into the ANNIEEvent store (all map keys are the cluster time): + +**fClusterToBestParticleID** `std::map` +* The MCParticle ID (ie. the ParticleID from the MCParticle class, which is returned via the `MCParticle::GetParticleID()` function) of the best matched particle + +**fClusterToBestParticlePDG** `std::map` +* The PDG value of the best matched particle + +**fClusterEfficiency** `std::map` +* Efficiency of the clustering where the numerator is the number total charge in the cluster contributed by the best matched particle, and the denominator is the total charge that the best matched particle deposited anywhere in the tank + +**fClusterPurity** `std::map` +* Purity of the clustering where the numerator is the number total charge in the cluster contributed by the best matched particle, and the denominator is the total charge of all hits in the cluster + +**fClusterCharge** `std::map` +* Total deposited charge of all hits in the cluster + + +## Configuration +``` +verbosity 1 # Verbosity level of the tool +``` diff --git a/UserTools/BeamQuality/BeamQuality.cpp b/UserTools/BeamQuality/BeamQuality.cpp new file mode 100644 index 000000000..4b8b33e99 --- /dev/null +++ b/UserTools/BeamQuality/BeamQuality.cpp @@ -0,0 +1,256 @@ +#include "BeamQuality.h" + +BeamQuality::BeamQuality():Tool(){} + +//------------------------------------------------------------------------------ +bool BeamQuality::Initialise(std::string configfile, DataModel &data) +{ + // Load configuration file variables + if ( !configfile.empty() ) m_variables.Initialise(configfile); + + // Assign a transient data pointer + m_data = &data; + + // Get the things + bool got_verbosity = m_variables.Get("verbose", verbosity); + bool got_potmin = m_variables.Get("POTMin", fPOTMin); + bool got_potmax = m_variables.Get("POTMax", fPOTMax); + bool got_hornmin = m_variables.Get("HornCurrentMin", fHornCurrMin); + bool got_hornmax = m_variables.Get("HornCurrentMax", fHornCurrMax); + bool got_beamloss = m_variables.Get("BeamLossTolerance", fBeamLoss); + + // Check the config parameters and set default values if necessary + if (!got_verbosity) verbosity = 1; + + if (!got_potmin) { + fPOTMin = 5e11; + + logmessage = ("Warning (BeamQuality): POTMin not " + "set in the config file. Using default: 5e11"); + Log(logmessage, v_warning, verbosity); + } + + if (!got_potmax) { + fPOTMax = 8e12; + + logmessage = ("Warning (BeamQuality): POTMax not " + "set in the config file. Using default: 8e12"); + Log(logmessage, v_warning, verbosity); + } + + if (!got_hornmin) { + fHornCurrMin = 172; + + logmessage = ("Warning (BeamQuality): HornCurrentMin not " + "set in the config file. Using default: 172"); + Log(logmessage, v_warning, verbosity); + } + + if (!got_hornmax) { + fHornCurrMax = 176; + + logmessage = ("Warning (BeamQuality): HornCurrentMax not " + "set in the config file. Using default: 176"); + Log(logmessage, v_warning, verbosity); + } + + if (!got_beamloss) { + fBeamLoss = 0.05; + + logmessage = ("Warning (BeamQuality): BeamLossTolerance not " + "set in the config file. Using default: 0.05"); + Log(logmessage, v_warning, verbosity); + } + + // Necessary initialization + m_data->CStore.Set("NewBeamStatusAvailable", false); + fLastTimestamp = 0; + BeamStatusMap = new std::map; + + return true; +} + +//------------------------------------------------------------------------------ +bool BeamQuality::Execute() +{ + m_data->CStore.Set("NewBeamStatusAvailable", false); + + // Check for CTC timestamps and beam DB info + bool got_ctc = m_data->CStore.Get("NewCTCDataAvailable", fNewCTCData); + bool got_beamdb = m_data->CStore.Get("NewBeamDataAvailable", fNewBeamData); + + // Make sure we have the info we need + if (!got_ctc) { + logmessage = ("Error (BeamQuality): Did not find NewCTCDataAvailable " + "entry in the CStore. Aborting."); + Log(logmessage, v_error, verbosity); + + return false; + } + + if (!got_beamdb) { + logmessage = ("Error (BeamQuality): Did not find NewBeamDataAvailable " + "entry in the CStore. Make sure to run BeamFetcherV2 in " + "your tool chain. Aborting."); + Log(logmessage, v_error, verbosity); + + return false; + } + + + // Start doing the things + if (!fNewCTCData) { + logmessage = ("Message (BeamQuality): No new CTC data is available. " + "Nothing to do for now"); + Log(logmessage, v_message, verbosity); + + return true; + } + + // Need to get the trigger times and loop over them + bool got_triggers = m_data->CStore.Get("TimeToTriggerWordMap", TimeToTriggerWordMap); + bool got_beamdata = m_data->CStore.Get("BeamDataMap", BeamDataMap); + + // Keep track of which timestamps we've seen so we can clear out the BeamDataMap + std::set completed_timestamps; + + // But start from the fLastTimestamp to save time + for (auto iterator = TimeToTriggerWordMap->lower_bound(fLastTimestamp); + iterator != TimeToTriggerWordMap->end(); ++iterator) { + + // Grab the timestamp and check the trigger words + uint64_t timestamp = iterator->first; + uint64_t timestamp_ms = timestamp/1E6; + fLastTimestamp = timestamp; + completed_timestamps.insert(timestamp); + + // Check for trigger word 14 (undelayed beam trigger) + // If it's not there then it isn't a beam trigger and there's nothing more to do + if (std::find(iterator->second.begin(), iterator->second.end(), 14) == iterator->second.end()) { + BeamStatus tempStatus(TimeClass(timestamp), 0., BeamCondition::NonBeamMinibuffer); + BeamStatusMap->emplace(timestamp, tempStatus); + continue; + } + + // Have we already saved this timestamp? If so then continue to the next one + if (BeamStatusMap->find(timestamp) != BeamStatusMap->end()) + continue; + + // Check for the existence of beam DB info + if (!fNewBeamData) { + logmessage = ("Warning (BeamQuality): No new Beam DB data is available. " + "Setting it to \"Missing\". "); + Log(logmessage, v_warning, verbosity); + + BeamStatus tempStatus(TimeClass(timestamp), 0., BeamCondition::Missing); + BeamStatusMap->emplace(timestamp, tempStatus); + } + + // Check for beam DB info associated with the timestamp + if (BeamDataMap->find(timestamp_ms) != BeamDataMap->end()) { + // Got the goods, now use it + BeamStatus tempStatus = assess_beam_quality(timestamp); + BeamStatusMap->emplace(timestamp, tempStatus); + + } else { + logmessage = ("Warning (BeamQuality): No Beam DB info found for timestamp: " + + std::to_string(timestamp_ms) + ". Setting it to \"Missing\". "); + Log(logmessage, v_warning, verbosity); + + BeamStatus tempStatus(TimeClass(timestamp), 0., BeamCondition::Missing); + BeamStatusMap->emplace(timestamp, tempStatus); + } // end if found timestamp in BeamDataMap + } // end loop over TimeToTriggerWordMap + + // Clear out the BeamDataMap to free up memory + for (auto ts : completed_timestamps) + BeamDataMap->erase(ts/1E6); + + // Save the status + m_data->CStore.Set("BeamStatusMap", BeamStatusMap); + + logmessage = ("Message (BeamQuality): BeamStatusMap size: " + + std::to_string(BeamStatusMap->size())); + Log(logmessage, v_message, verbosity); + + + return true; +} + +//------------------------------------------------------------------------------ +bool BeamQuality::Finalise() +{ + + return true; +} + +//------------------------------------------------------------------------------ +BeamStatus BeamQuality::assess_beam_quality(uint64_t timestamp) +{ + // initialize the beamstatus that we'll return + BeamStatus retStatus; + retStatus.set_time(TimeClass(timestamp)); + + + // Check for and grab the quatities we want from the BeamDataMap + uint64_t timestamp_ms = timestamp/1E6; + auto BeamDataPointMap = BeamDataMap->at(timestamp_ms); + + std::string device_name = ""; + + // POT downstream toroid + device_name = "E:TOR875"; + double pot_ds_toroid = 0; + if (BeamDataPointMap.find(device_name) != BeamDataPointMap.end()) { + auto bdp = BeamDataPointMap[device_name]; + retStatus.add_measurement(device_name, timestamp_ms, bdp); + retStatus.set_pot(bdp.value); + pot_ds_toroid = bdp.value; + } + + // POT upstream toroid + device_name = "E:TOR860"; + double pot_us_toroid = 0; + if (BeamDataPointMap.find(device_name) != BeamDataPointMap.end()) { + auto bdp = BeamDataPointMap[device_name]; + retStatus.add_measurement(device_name, timestamp_ms, bdp); + pot_us_toroid = bdp.value; + } + + // Horn current + device_name = "E:THCURR"; + double horn_current = 0; + if (BeamDataPointMap.find(device_name) != BeamDataPointMap.end()) { + auto bdp = BeamDataPointMap[device_name]; + retStatus.add_measurement(device_name, timestamp_ms, bdp); + horn_current = bdp.value; + } + + + // Perform the cuts + retStatus.add_cut("POT in range", + (retStatus.pot() >= fPOTMin && retStatus.pot() <= fPOTMax)); + + retStatus.add_cut("Horn current in range", + (horn_current >= fHornCurrMin && horn_current <= fHornCurrMax)); + + double beam_loss_frac = std::abs(pot_ds_toroid - pot_us_toroid) / (pot_ds_toroid + pot_us_toroid); + retStatus.add_cut("Beam loss acceptable", + (beam_loss_frac < fBeamLoss)); + + + // Finish up the beam status + if (retStatus.passed_all_cuts()) { + retStatus.set_condition(BeamCondition::Ok); + } else { + logmessage = ("Message (BeamQuality): Bad beam spill at trigger timestamp " + + std::to_string(timestamp)); + Log(logmessage, v_message, verbosity); + if (verbosity >=v_debug) + retStatus.Print(); + + retStatus.set_condition(BeamCondition::Bad); + } + + return retStatus; +} diff --git a/UserTools/BeamQuality/BeamQuality.h b/UserTools/BeamQuality/BeamQuality.h new file mode 100644 index 000000000..deb37b314 --- /dev/null +++ b/UserTools/BeamQuality/BeamQuality.h @@ -0,0 +1,78 @@ +#ifndef BeamQuality_H +#define BeamQuality_H + +#include +#include +#include +#include +#include +#include + +#include "Tool.h" +#include "BeamStatus.h" +#include "MinibufferLabel.h" +#include "ANNIEconstants.h" +#include "BeamDataPoint.h" +#include "TimeClass.h" + +#include "Tool.h" + + +/** +* \class BeamQuality +* +* Tool to apply quality cuts to the results of BeamFetcherV2 +* +* $Author: A.Sutton $ +* $Date: 2024/04/1 $ +*/ +class BeamQuality: public Tool { + + + public: + + BeamQuality(); ///< Simple constructor + bool Initialise(std::string configfile,DataModel &data); ///< Initialise Function for setting up Tool resources. @param configfile The path and name of the dynamic configuration file to read in. @param data A reference to the transient data class used to pass information between Tools. + bool Execute(); ///< Execute function used to perform Tool purpose. + bool Finalise(); ///< Finalise function used to clean up resources. + + protected: + BeamStatus assess_beam_quality(uint64_t timestamp); + + + private: + + // Config variables + int verbosity; + + // Cut values from config + // Extend this for additional cuts + double fPOTMin; + double fPOTMax; + double fHornCurrMin; + double fHornCurrMax; + double fBeamLoss; + + + // CStore things + bool fNewCTCData; + bool fNewBeamData; + std::map> *TimeToTriggerWordMap; ///< Trigger information + std::map> *BeamDataMap; ///< BeamDB information + std::map *BeamStatusMap; ///< Map containing the beam status information that will be saved to the CStore + + // Keep the last timestamp around to make sure we don't double process things + uint64_t fLastTimestamp; + + + // Verbosity things + int v_error = 0; + int v_warning = 1; + int v_message = 2; + int v_debug = 3; + int vv_debug = 4; + std::string logmessage; +}; + + +#endif diff --git a/UserTools/BeamQuality/README.md b/UserTools/BeamQuality/README.md new file mode 100644 index 000000000..cd3ed350b --- /dev/null +++ b/UserTools/BeamQuality/README.md @@ -0,0 +1,33 @@ +# BeamQuality + +The `BeamQuality` tool is part of the Event Building chain in ANNIE and forwards information about the Beam Status to the `ANNIEEventBuilder` tool. It uses information that was previously retrieved from the beam database with the `BeamFetcherV2` tool. This mimic the `BeamQuality` tool that is used for the original `BeamFetcher`. + +The information is saved in the form of the `BeamStatus` class. This class contains some basic information like the POT for the timestamp in question and some more detailed information about the horn currents. It is possible to already choose some beam quality cuts for the timestamp tolerance, horn currents, and POT values. However, some beam information will be stored in the object, so it will be possible to use slightly different cuts when analyzing the data later. + +## Data + +The Beam Status information is stored in the `BeamStatusMap` object and put in the CStore. The `ANNIEEventBuilder` tool can access the object in the CStore and write the information to the ANNIEEvent BoostStore. + +The `BeamQuality` tool goes through the decoded trigger timestamps and searches for the beam status at each of these trigger timestamps (in case there was a beam trigger). The properties of the beam are then saved in the BeamStatus object and put into the `BeamStatusMap`. It then deletes the used BeamData to free up memory. + +**BeamStatusMap** `map` +* Beam status for the trigger timestamps + +The `BeamStatusMap` is stored in the form of a pointer, and the `ANNIEEventBuilder` will delete already built entries from the map to free up memory. + +## Configuration + +BeamQuality has the following configuration variables: + +``` +# BeamQuality config file +verbose 1 +# POT window for "good" beam +POTMin 5e11 +POTMax 8e12 +# Horn current window for "good" beam (in kA) +HornCurrentMin 172 +HornCurrentMax 176 +# Fractional difference between the upstream and downstream POT measurements +BeamLossTolerance 0.05 +``` diff --git a/UserTools/EventSelector/EventSelector.cpp b/UserTools/EventSelector/EventSelector.cpp index 580929850..97efba7a6 100644 --- a/UserTools/EventSelector/EventSelector.cpp +++ b/UserTools/EventSelector/EventSelector.cpp @@ -42,7 +42,12 @@ bool EventSelector::Initialise(std::string configfile, DataModel &data){ m_variables.Get("NoVeto",fNoVetoCut); m_variables.Get("Veto",fVetoCut); m_variables.Get("ThroughGoing",fThroughGoing); - m_variables.Get("TriggerWord",fTriggerWord); + bool got_trigger_word = m_variables.Get("TriggerWord",fTriggerWord); + if (!got_trigger_word) { + Log("EventSelector Tool: Woah there, buddy! We set TriggerWord around these parts. Come back when you've done that. \n If you're not sure what they might need to be, check out Table 3.6 in Michael Nieslony's thesis."); + m_data->vars.Set("StopLoop",1); + return false; + } m_variables.Get("SaveStatusToStore", fSaveStatusToStore); m_variables.Get("IsMC",fIsMC); m_variables.Get("RecoPDG",fRecoPDG); diff --git a/UserTools/Factory/Factory.cpp b/UserTools/Factory/Factory.cpp index 805aad1be..21157af0a 100644 --- a/UserTools/Factory/Factory.cpp +++ b/UserTools/Factory/Factory.cpp @@ -1,12 +1,178 @@ #include "Factory.h" Tool* Factory(std::string tool) { - Tool* ret = 0; - if (tool=="PlotWaveforms") ret=new PlotWaveforms; - if (tool=="LoadGeometry") ret=new LoadGeometry; - if (tool=="LoadWCSim") ret=new LoadWCSim; - if (tool=="PMTWaveformSim") ret=new PMTWaveformSim; - if (tool=="PhaseIIADCHitFinder") ret=new PhaseIIADCHitFinder; +Tool* ret = 0; - return ret; +// if (tool=="Type") tool=new Type; +if (tool=="DummyTool") ret=new DummyTool; +if (tool=="ExampleGenerateData") ret=new ExampleGenerateData; +if (tool=="ExampleSaveStore") ret=new ExampleSaveStore; +if (tool=="ExampleSaveRoot") ret=new ExampleSaveRoot; +if (tool=="ExampleloadStore") ret=new ExampleloadStore; +if (tool=="ExamplePrintData") ret=new ExamplePrintData; +if (tool=="ExampleLoadRoot") ret=new ExampleLoadRoot; +if (tool=="LAPPDParseScope") ret=new LAPPDParseScope; +if (tool=="LAPPDParseACC") ret=new LAPPDParseACC; +if (tool=="LAPPDFindPeak") ret=new LAPPDFindPeak; +if (tool=="SaveANNIEEvent") ret=new SaveANNIEEvent; +if (tool=="LAPPDSim") ret=new LAPPDSim; +if (tool=="LoadWCSim") ret=new LoadWCSim; +if (tool=="FindMrdTracks") ret=new FindMrdTracks; +if (tool=="PrintANNIEEvent") ret=new PrintANNIEEvent; +if (tool=="GenerateHits") ret=new GenerateHits; +if (tool=="LAPPDcfd") ret=new LAPPDcfd; +if (tool=="LAPPDBaselineSubtract") ret=new LAPPDBaselineSubtract; +if (tool=="NeutronStudyReadSandbox") ret=new NeutronStudyReadSandbox; +if (tool=="NeutronStudyPMCS") ret=new NeutronStudyPMCS; +if (tool=="NeutronStudyWriteTree") ret=new NeutronStudyWriteTree; +if (tool=="BeamTimeAna") ret=new BeamTimeAna; +if (tool=="BeamTimeTreeMaker") ret=new BeamTimeTreeMaker; +if (tool=="BeamTimeTreeReader") ret=new BeamTimeTreeReader; +if (tool=="RawLoader") ret=new RawLoader; +if (tool=="LAPPDBaselineSubtract") ret=new LAPPDBaselineSubtract; +if (tool=="LAPPDSaveROOT") ret=new LAPPDSaveROOT; +if (tool=="LAPPDFilter") ret=new LAPPDFilter; +if (tool=="LAPPDIntegratePulse") ret=new LAPPDIntegratePulse; +if (tool=="ADCCalibrator") ret=new ADCCalibrator; +if (tool=="ADCHitFinder") ret=new ADCHitFinder; +if (tool=="BeamChecker") ret=new BeamChecker; +if (tool=="BeamFetcher") ret=new BeamFetcher; +if (tool=="FindTrackLengthInWater") ret=new FindTrackLengthInWater; +if (tool=="LoadANNIEEvent") ret=new LoadANNIEEvent; +if (tool=="PhaseITreeMaker") ret=new PhaseITreeMaker; +if (tool=="MrdPaddlePlot") ret=new MrdPaddlePlot; +if (tool=="LoadWCSimLAPPD") ret=new LoadWCSimLAPPD; +if (tool=="WCSimDemo") ret=new WCSimDemo; +if (tool=="DigitBuilder") ret=new DigitBuilder; +if (tool=="VtxSeedGenerator") ret=new VtxSeedGenerator; +if (tool=="VtxPointPositionFinder") ret=new VtxPointPositionFinder; +if (tool=="LAPPDlasertestHitFinder") ret=new LAPPDlasertestHitFinder; +if (tool=="RawLoadToRoot") ret=new RawLoadToRoot; +if (tool=="MRDPulseFinder") ret=new MRDPulseFinder; +if (tool=="LAPPDAnalysis") ret=new LAPPDAnalysis; +if (tool=="ExampleOverTool") ret=new ExampleOverTool; +if (tool=="PhaseIITreeMaker") ret=new PhaseIITreeMaker; +if (tool=="VertexGeometryCheck") ret=new VertexGeometryCheck; +if (tool=="LikelihoodFitterCheck") ret=new LikelihoodFitterCheck; +if (tool=="EventSelector") ret=new EventSelector; +if (tool=="SaveRecoEvent") ret=new SaveRecoEvent; +if (tool=="VtxExtendedVertexFinder") ret=new VtxExtendedVertexFinder; +if (tool=="VtxPointDirectionFinder") ret=new VtxPointDirectionFinder; +if (tool=="VtxPointVertexFinder") ret=new VtxPointVertexFinder; +if (tool=="LoadCCData") ret=new LoadCCData; +if (tool=="HitCleaner") ret=new HitCleaner; +if (tool=="HitResiduals") ret=new HitResiduals; +if (tool=="MonitorReceive") ret=new MonitorReceive; +if (tool=="MonitorSimReceive") ret=new MonitorSimReceive; +if (tool=="DigitBuilderDoE") ret=new DigitBuilderDoE; +if (tool=="EventSelectorDoE") ret=new EventSelectorDoE; +if (tool=="MonitorMRDTime") ret=new MonitorMRDTime; +if (tool=="MonitorMRDLive") ret=new MonitorMRDLive; +if (tool=="PulseSimulation") ret=new PulseSimulation; +if (tool=="PlotLAPPDTimesFromStore") ret=new PlotLAPPDTimesFromStore; +if (tool=="CheckDetectorCounts") ret=new CheckDetectorCounts; +if (tool=="MrdDistributions") ret=new MrdDistributions; +if (tool=="MCParticleProperties") ret=new MCParticleProperties; +if (tool=="DigitBuilderROOT") ret=new DigitBuilderROOT; +if (tool=="MrdEfficiency") ret=new MrdEfficiency; +if (tool=="EventDisplay") ret=new EventDisplay; +if (tool=="TankCalibrationDiffuser") ret=new TankCalibrationDiffuser; +if (tool=="TotalLightMap") ret=new TotalLightMap; +if (tool=="MrdDiscriminatorScan") ret=new MrdDiscriminatorScan; +if (tool=="MCRecoEventLoader") ret=new MCRecoEventLoader; +if (tool=="MonitorMRDEventDisplay") ret=new MonitorMRDEventDisplay; +if (tool=="LoadGeometry") ret=new LoadGeometry; +if (tool=="LoadRATPAC") ret=new LoadRATPAC; +if (tool=="TimeClustering") ret=new TimeClustering; +if (tool=="GracefulStop") ret=new GracefulStop; +if (tool=="PhaseIIADCHitFinder") ret=new PhaseIIADCHitFinder; +if (tool=="TrackCombiner") ret=new TrackCombiner; +if (tool=="SimulatedWaveformDemo") ret=new SimulatedWaveformDemo; +if (tool=="CNNImage") ret=new CNNImage; +if (tool=="MonitorTankTime") ret=new MonitorTankTime; +if (tool=="PhaseIIADCCalibrator") ret=new PhaseIIADCCalibrator; +if (tool=="MCHitToHitComparer") ret=new MCHitToHitComparer; +if (tool=="MCPropertiesToTree") ret=new MCPropertiesToTree; +if (tool=="CalcClassificationVars") ret=new CalcClassificationVars; +if (tool=="StoreClassificationVars") ret=new StoreClassificationVars; +if (tool=="LoadGenieEvent") ret=new LoadGenieEvent; +if (tool=="PrintGenieEvent") ret=new PrintGenieEvent; +if (tool=="PlotWaveforms") ret=new PlotWaveforms; +if (tool=="PMTDataDecoder") ret=new PMTDataDecoder; +if (tool=="ANNIEEventBuilder") ret=new ANNIEEventBuilder; +if (tool=="MRDDataDecoder") ret=new MRDDataDecoder; +if (tool=="PrintADCData") ret=new PrintADCData; +if (tool=="ClusterFinder") ret=new ClusterFinder; +if (tool=="PrintRecoEvent") ret=new PrintRecoEvent; +if (tool=="RunValidation") ret=new RunValidation; +if (tool=="AmBeRunStatistics") ret=new AmBeRunStatistics; +if (tool=="SimpleTankEnergyCalibrator") ret=new SimpleTankEnergyCalibrator; +if (tool=="BeamClusterPlots") ret=new BeamClusterPlots; +if (tool=="MrdPaddleEfficiencyPreparer") ret=new MrdPaddleEfficiencyPreparer; +if (tool=="MrdPaddleEfficiencyCalc") ret=new MrdPaddleEfficiencyCalc; +if (tool=="FMVEfficiency") ret=new FMVEfficiency; +if (tool=="LoadRawData") ret=new LoadRawData; +if (tool=="TriggerDataDecoder") ret=new TriggerDataDecoder; +if (tool=="ClusterClassifiers") ret=new ClusterClassifiers; +if (tool=="MRDLoopbackAnalysis") ret=new MRDLoopbackAnalysis; +if (tool=="VetoEfficiency") ret=new VetoEfficiency; +if (tool=="EnergyExtractor") ret=new EnergyExtractor; +if (tool=="MonitorTrigger") ret=new MonitorTrigger; +if (tool=="LAPPDPlotWaveForms") ret=new LAPPDPlotWaveForms; +if (tool=="LAPPDReorderData") ret=new LAPPDReorderData; +if (tool=="LAPPDStoreReorderData") ret=new LAPPDStoreReorderData; +if (tool=="LAPPDFindT0") ret=new LAPPDFindT0; +if (tool=="LAPPDStoreFindT0") ret=new LAPPDStoreFindT0; +if (tool=="LAPPDStoreReadIn") ret=new LAPPDStoreReadIn; +if (tool=="ClusterDummy") ret=new ClusterDummy; +if (tool=="LAPPDCluster") ret=new LAPPDCluster; +if (tool=="LAPPDMakePeds") ret=new LAPPDMakePeds; +if (tool=="EventClassification") ret=new EventClassification; +if (tool=="DataSummary") ret=new DataSummary; +if (tool=="MaxPEPlots") ret=new MaxPEPlots; +if (tool=="StoreDecodedTimestamps") ret=new StoreDecodedTimestamps; +if (tool=="PlotDecodedTimestamps") ret=new PlotDecodedTimestamps; +if (tool=="MonitorDAQ") ret=new MonitorDAQ; +if (tool=="MonitorSimReceiveLAPPD") ret=new MonitorSimReceiveLAPPD; +if (tool=="MonitorLAPPDSC") ret=new MonitorLAPPDSC; +if (tool=="MonitorLAPPDData") ret=new MonitorLAPPDData; +if (tool=="ParseDataMonitoring") ret=new ParseDataMonitoring; +if (tool=="LAPPDClusterTree") ret=new LAPPDClusterTree; +if (tool=="LAPPDPlotWaveForms2D") ret=new LAPPDPlotWaveForms2D; +if (tool=="LAPPDGausBaselineSubtraction") ret=new LAPPDGausBaselineSubtraction; +if (tool=="LAPPDASCIIReadIn") ret=new LAPPDASCIIReadIn; +if (tool=="BeamDecoder") ret=new BeamDecoder; +if (tool=="LoadRunInfo") ret=new LoadRunInfo; +if (tool=="ApplyMRDEff") ret=new ApplyMRDEff; +if (tool=="SimpleReconstruction") ret=new SimpleReconstruction; +if (tool=="LAPPDnnlsPeak") ret=new LAPPDnnlsPeak; +if (tool=="LAPPDLocateHit") ret=new LAPPDLocateHit; +if (tool=="LAPPDOtherSimp") ret=new LAPPDOtherSimp; +if (tool=="LAPPDTraceMax") ret=new LAPPDTraceMax; +if (tool=="saveLAPPDInfo") ret=new saveLAPPDInfo; +if (tool=="parseLAPPDData") ret=new parseLAPPDData; +if (tool=="checkLAPPDStatus") ret=new checkLAPPDStatus; +if (tool=="GetLAPPDEvents") ret=new GetLAPPDEvents; +if (tool=="LAPPDDataDecoder") ret=new LAPPDDataDecoder; +if (tool=="PythonScript") ret=new PythonScript; +if (tool=="MeanTimeCheck") ret=new MeanTimeCheck; +if (tool=="LoadReweightGenieEvent") ret=new LoadReweightGenieEvent; +if (tool=="ReweightFlux") ret=new ReweightFlux; +if (tool=="FilterLAPPDEvents") ret=new FilterLAPPDEvents; +if (tool=="VtxSeedFineGrid") ret=new VtxSeedFineGrid; +if (tool=="FilterEvents") ret=new FilterEvents; +if (tool=="Stage1DataBuilder") ret=new Stage1DataBuilder; +if (tool=="BeamFetcherV2") ret=new BeamFetcherV2; +if (tool=="FindNeutrons") ret=new FindNeutrons; +if (tool=="NeutronMultiplicity") ret=new NeutronMultiplicity; +if (tool=="PlotsTrackLengthAndEnergy") ret=new PlotsTrackLengthAndEnergy; +if (tool=="SaveConfigInfo") ret=new SaveConfigInfo; +if (tool=="ReadConfigInfo") ret=new ReadConfigInfo; +if (tool=="MuonFitter") ret=new MuonFitter; +if (tool=="BeamQuality") ret=new BeamQuality; +if (tool=="BackTracker") ret=new BackTracker; +if (tool=="PrintDQ") ret=new PrintDQ; +if (tool=="AssignBunchTimingMC") ret=new AssignBunchTimingMC; +if (tool=="PMTWaveformSim") ret=new PMTWaveformSim; +return ret; } diff --git a/UserTools/FitRWMWaveform/FitRWMWaveform.cpp b/UserTools/FitRWMWaveform/FitRWMWaveform.cpp new file mode 100644 index 000000000..45035356e --- /dev/null +++ b/UserTools/FitRWMWaveform/FitRWMWaveform.cpp @@ -0,0 +1,395 @@ +#include "FitRWMWaveform.h" + +FitRWMWaveform::FitRWMWaveform() : Tool() {} + +bool FitRWMWaveform::Initialise(std::string configfile, DataModel &data) +{ + + if (configfile != "") + m_variables.Initialise(configfile); + + m_data = &data; + + m_variables.Get("verbosityFitRWMWaveform", verbosityFitRWMWaveform); + m_variables.Get("printToRootFile", printToRootFile); + + maxPrintNumber = 100; + m_variables.Get("maxPrintNumber", maxPrintNumber); + + output_filename = "RWMBRFWaveforms.root"; + m_variables.Get("output_filename", output_filename); + + return true; +} + +bool FitRWMWaveform::Execute() +{ + + Log("FitRWMWaveform: Execute()", v_debug, verbosityFitRWMWaveform); + m_data->Stores["ANNIEEvent"]->Get("RWMRawWaveform", RWMRawWaveform); + m_data->Stores["ANNIEEvent"]->Get("BRFRawWaveform", BRFRawWaveform); + + uint64_t WaveformTime = 0; + m_data->Stores["ANNIEEvent"]->Get("EventTimeTank", WaveformTime); + + if (printToRootFile && ToBePrintedRWMWaveforms.size() < maxPrintNumber) + { + + ToBePrintedRWMWaveforms.emplace(WaveformTime, RWMRawWaveform); + ToBePrintedBRFWaveforms.emplace(WaveformTime, BRFRawWaveform); + Log("FitRWMWaveform: Execute(): Added RWM and BRF waveforms to be printed to root file", v_debug, verbosityFitRWMWaveform); + } + + RWMRisingStart = 0; + RWMRisingEnd = 0; + RWMHalfRising = 0; + RWMFHWM = 0; + RWMFirstPeak = 0; + + BRFFirstPeak = 0; + BRFAveragePeak = 0; + BRFFirstPeakFit = 0; + + // Fit the RWM waveform, find the rising start, rising end and half rising time + FitRWM(); + + FitBRF(); + + m_data->Stores["ANNIEEvent"]->Set("RWMRisingStart", RWMRisingStart); + m_data->Stores["ANNIEEvent"]->Set("RWMRisingEnd", RWMRisingEnd); + m_data->Stores["ANNIEEvent"]->Set("RWMHalfRising", RWMHalfRising); + m_data->Stores["ANNIEEvent"]->Set("RWMFHWM", RWMFHWM); + m_data->Stores["ANNIEEvent"]->Set("RWMFirstPeak", RWMFirstPeak); + + m_data->Stores["ANNIEEvent"]->Set("BRFFirstPeak", BRFFirstPeak); + m_data->Stores["ANNIEEvent"]->Set("BRFAveragePeak", BRFAveragePeak); + m_data->Stores["ANNIEEvent"]->Set("BRFFirstPeakFit", BRFFirstPeakFit); + + return true; +} +bool FitRWMWaveform::Finalise() +{ + if (printToRootFile) + { + TFile *fOutput_tfile = new TFile(output_filename.c_str(), "recreate"); + + // Loop ToBePrintedRWMWaveforms and ToBePrintedBRFWaveforms, fill each waveform to a histogram and save it to the root file + // Use the RWM+event number + key as the name of the histogram + int RWMCount = 0; + for (const auto &kv : ToBePrintedRWMWaveforms) + { + const auto &key = kv.first; + const auto &val = kv.second; + TH1D *hRWM = new TH1D(Form("RWM_%d_%lu", RWMCount, key), Form("RWM_%d_%lu", RWMCount, key), val.size(), 0, val.size()); + for (int i = 0; i < val.size(); i++) + { + hRWM->SetBinContent(i + 1, val[i]); // Note the 1-based index + } + hRWM->Write(); + delete hRWM; + RWMCount++; + } + + int BRFCount = 0; + for (const auto &kv : ToBePrintedBRFWaveforms) + { + const auto &key = kv.first; + const auto &val = kv.second; + TH1D *hBRF = new TH1D(Form("BRF_%d_%lu", BRFCount, key), Form("BRF_%d_%lu", BRFCount, key), val.size(), 0, val.size()); + for (int i = 0; i < val.size(); i++) + { + hBRF->SetBinContent(i + 1, val[i]); // Note the 1-based index + } + hBRF->Write(); + delete hBRF; + BRFCount++; + } + + fOutput_tfile->Close(); + delete fOutput_tfile; + } + + return true; +} + +void FitRWMWaveform::FitRWM() +{ + Log("FitRWMWaveform: FitRWM()", v_debug, verbosityFitRWMWaveform); + if (RWMRawWaveform.size() == 0) + { + Log("FitRWMWaveform: FitRWM(): RWMRawWaveform is empty", v_message, verbosityFitRWMWaveform); + return; + } + int threshold = 50; + int bin_size = 2; // 2ns per bin + int max_bin_RWM = RWMRawWaveform.size(); + + // RWM + RWMRisingStart = 300; + for (int i = 300; i < max_bin_RWM; ++i) + { + if (RWMRawWaveform[i] > 400 && RWMRawWaveform[i] - RWMRawWaveform[i - 1] > threshold) + { + RWMRisingStart = i - 1; + break; + } + } + + RWMRisingEnd = RWMRisingStart; + for (int i = RWMRisingStart; i < RWMRisingStart + 60 && i < max_bin_RWM; ++i) + { + if (RWMRawWaveform[i] > RWMRawWaveform[RWMRisingEnd]) + { + RWMRisingEnd = i; + } + } + if (!(RWMRisingStart > 200 && RWMRisingStart < 600) || !(RWMRisingEnd > 200 && RWMRisingEnd < 600)) + { + Log("FitRWMWaveform: FitRWM(): RWMRisingStart or RWMRisingEnd out of range, found at " + std::to_string(RWMRisingStart) + " and " + std::to_string(RWMRisingEnd), v_message, verbosityFitRWMWaveform); + return; + } + + Log("FitRWMWaveform: FitRWM(): Found rising start and end at " + std::to_string(RWMRisingStart) + " and " + std::to_string(RWMRisingEnd) + " with rising start value " + std::to_string(RWMRawWaveform[RWMRisingStart]), v_debug, verbosityFitRWMWaveform); + double RWMBottom = std::accumulate(RWMRawWaveform.begin(), RWMRawWaveform.begin() + RWMRisingStart, 0.0) / RWMRisingStart; + double RWMTop = std::accumulate(RWMRawWaveform.begin() + RWMRisingEnd + 50, RWMRawWaveform.begin() + RWMRisingEnd + 400, 0.0) / 350; + double RWMHalf = (RWMBottom + RWMTop) / 2; + + int best_bin_RWM = RWMRisingStart; + double best_diff_RWM = std::abs(RWMRawWaveform[RWMRisingStart] - RWMHalf); + + for (int i = RWMRisingStart; i <= RWMRisingEnd; ++i) + { + double diff = std::abs(RWMRawWaveform[i] - RWMHalf); + if (diff < best_diff_RWM) + { + best_bin_RWM = i; + best_diff_RWM = diff; + } + } + + int best_interval_RWM = 0; + double interval_size = 1.0 / 400; + double min_diff_RWM = std::numeric_limits::max(); + Log("FitRWMWaveform: FitRWM(): Found best bin at " + std::to_string(best_bin_RWM), v_debug, verbosityFitRWMWaveform); + + for (int i = -200; i < 200; ++i) + { + // Log("FitRWMWaveform: FitRWM(): Interpolating value at " + std::to_string(i),v_debug, verbosityFitRWMWaveform); + double interpolated_value = RWMRawWaveform[best_bin_RWM] + (RWMRawWaveform[best_bin_RWM + (i < 0 ? -1 : 1)] - RWMRawWaveform[best_bin_RWM]) * (std::abs(i) * interval_size); + double diff = std::abs(interpolated_value - RWMHalf); + if (diff < min_diff_RWM) + { + min_diff_RWM = diff; + best_interval_RWM = i; + } + } + + double RWMHalfTimeInPs = (best_bin_RWM + best_interval_RWM * interval_size) * 10 + RWMRisingStart * 2000; + + RWMHalfRising = RWMHalfTimeInPs; + Log("FitRWMWaveform: FitRWM(): Found RWMHalfRising = " + std::to_string(RWMHalfRising), v_debug, verbosityFitRWMWaveform); + // finding the falling half + // Finding the falling end + int RWMFallingStart = RWMRisingEnd; + for (int i = RWMRisingEnd; i < max_bin_RWM; ++i) + { + if (RWMRawWaveform[i] < 1000) + { + RWMFallingStart = i; + break; + } + } + Log("FitRWMWaveform: FitRWM(): Found falling start", v_debug, verbosityFitRWMWaveform); + int bin_close = RWMFallingStart; + double best_diff_fall = std::abs(RWMRawWaveform[RWMFallingStart] - RWMHalf); + + for (int i = RWMFallingStart - 20; i <= RWMFallingStart + 20 && i < max_bin_RWM; ++i) + { + double diff = std::abs(RWMRawWaveform[i] - RWMHalf); + if (diff < best_diff_fall) + { + bin_close = i; + best_diff_fall = diff; + } + } + if (!(bin_close < 950)) + { + Log("FitRWMWaveform: FitRWM(): falling bin out of range, found at " + std::to_string(bin_close), v_message, verbosityFitRWMWaveform); + return; + } + Log("FitRWMWaveform: FitRWM(): Found falling close", v_debug, verbosityFitRWMWaveform); + + best_interval_RWM = 0; + min_diff_RWM = std::numeric_limits::max(); + + for (int i = -200; i < 200; ++i) + { + double interpolated_value = RWMRawWaveform[bin_close] + (RWMRawWaveform[bin_close + (i < 0 ? -1 : 1)] - RWMRawWaveform[bin_close]) * (std::abs(i) * interval_size); + double diff = std::abs(interpolated_value - RWMHalf); + if (diff < min_diff_RWM) + { + min_diff_RWM = diff; + best_interval_RWM = i; + } + } + Log("FitRWMWaveform: FitRWM(): Found falling end", v_debug, verbosityFitRWMWaveform); + double RWMHalfEnd = (bin_close * 2000) + (best_interval_RWM * 10); + RWMFHWM = RWMHalfEnd - RWMHalfRising; + + int RWMFirstPeakBin = -1; + for (int i = 0; i < RWMRawWaveform.size(); ++i) + { + if (RWMRawWaveform[i] > 1600) + { + RWMFirstPeakBin = i; + break; + } + } + + // change the unit from bin number to ns or ps + RWMRisingStart = RWMRisingStart * 2; + RWMRisingEnd = RWMRisingEnd * 2; + RWMFirstPeak = RWMFirstPeakBin * 2; +} + +void FitRWMWaveform::FitBRF() +{ + // fit the first peak, and the average of peaks of std::vector BRFRawWaveform. + // find the size of the vector, in the first 10 bin interval, find the bin with highest value, as the first peak + // for each 10 bin interval, find the highest value bin position in each interval, and minus the beginning of the interval, and average them. + double maximum = 0; + double first_peak = 0; + double average = 0; + int bin_size = 2; // 2ns per bin + + if (BRFRawWaveform.size() == 0) + { + Log("FitRWMWaveform: FitBRF(): BRFRawWaveform is empty", v_message, verbosityFitRWMWaveform); + return; + } + + int max_bin_BRF = BRFRawWaveform.size(); + + // Find the first peak in the first 10 bin interval + for (int i = 0; i < 10 && i < max_bin_BRF; ++i) + { + if (BRFRawWaveform[i] > maximum) + { + maximum = BRFRawWaveform[i]; + first_peak = i; + } + } + + // Find the highest value bin position in each 10 bin interval and calculate the average + int interval_count = 0; + for (int i = 0; i <= max_bin_BRF - 10; i += 10) + { + double max = 0; + int max_bin = 0; + for (int j = i; j < i + 10; ++j) + { + if (BRFRawWaveform[j] > max) + { + max = BRFRawWaveform[j]; + max_bin = j; + } + } + average += (max_bin - i); + ++interval_count; + } + + if (interval_count > 0) + { + average /= interval_count; + } + + // Logging results + Log("FitRWMWaveform: FitBRF(): First peak at bin = " + std::to_string(first_peak), v_debug, verbosityFitRWMWaveform); + Log("FitRWMWaveform: FitBRF(): Average peak position = " + std::to_string(average), v_debug, verbosityFitRWMWaveform); + + BRFFirstPeak = first_peak * bin_size; + BRFAveragePeak = average * bin_size; + + BRFFirstPeakFit = 0; + // now, we use a simple Gaussian fit to find the first peak in the first 10 bins (before understanding the Booster RF properties) + // first, in the first 10 bins, find the maximum value and its position, if the maximum value is smaller than 3050, return + // then check the side bins. check from the max bin to zero, find the first bin with value less than 2920, or until the first bin, save this bin as fitting start bin + // then check from the max bin to the 10th bin, find the first bin with value less than 3020. check if the next bin has value less than this bin, if yes, set next bin as the fitting end, if not, set this bin as fitting end. + // in the fitting range, fit the waveform with a Gaussian function, and find the peak position. + // save the peak position as BRFFirstPeakFit + + if (maximum < 3050) + return; + + int fit_start_bin = 0; + for (int i = first_peak; i >= 0; --i) + { + if (BRFRawWaveform[i] < 2920) + { + fit_start_bin = i; + break; + } + } + + int fit_end_bin = first_peak; + for (int i = first_peak; i < 10 && i < max_bin_BRF; ++i) + { + if (BRFRawWaveform[i] < 3020) + { + if (BRFRawWaveform[i + 1] < BRFRawWaveform[i]) + { + fit_end_bin = i + 1; + } + else + { + fit_end_bin = i; + } + break; + } + } + + if (fit_end_bin <= fit_start_bin) + return; + + std::vector x_vals, y_vals; + for (int i = fit_start_bin; i <= fit_end_bin; ++i) + { + x_vals.push_back(i * bin_size); + y_vals.push_back(BRFRawWaveform[i]); + } + + // Find the bin with the minimum value between the 5th and 15th bins + auto min_it = std::min_element(BRFRawWaveform.begin() + 4, BRFRawWaveform.begin() + 15); + int bin_minimum = std::distance(BRFRawWaveform.begin(), min_it); + + // Find the bin with the maximum value between bin_minimum + 2 and bin_minimum + 4 + auto max_it = std::max_element(BRFRawWaveform.begin() + bin_minimum + 2, BRFRawWaveform.begin() + bin_minimum + 5); + int bin_maximum = std::distance(BRFRawWaveform.begin(), max_it); + + // Calculate the half height + double half_height = (BRFRawWaveform[bin_minimum] + BRFRawWaveform[bin_maximum]) / 2.0; + + // Perform linear interpolation + const int intervals_per_bin = 2000; + double min_difference = std::numeric_limits::max(); + int min_difference_bin = -1; + + for (int bin = bin_minimum; bin < bin_maximum; ++bin) + { + for (int interval = 0; interval < intervals_per_bin; ++interval) + { + double fraction = interval / static_cast(intervals_per_bin); + double interpolated_value = BRFRawWaveform[bin] + fraction * (BRFRawWaveform[bin + 1] - BRFRawWaveform[bin]); + double difference = std::abs(interpolated_value - half_height); + + if (difference < min_difference) + { + min_difference = difference; + min_difference_bin = bin * intervals_per_bin + interval; + } + } + } + + double BRFRisingHalfLinearFit = min_difference_bin; // in ps + BRFFirstPeakFit = BRFRisingHalfLinearFit; +} diff --git a/UserTools/FitRWMWaveform/FitRWMWaveform.h b/UserTools/FitRWMWaveform/FitRWMWaveform.h new file mode 100644 index 000000000..629b81883 --- /dev/null +++ b/UserTools/FitRWMWaveform/FitRWMWaveform.h @@ -0,0 +1,63 @@ +#ifndef FitRWMWaveform_H +#define FitRWMWaveform_H + +#include +#include + +#include "Tool.h" +#include "TFile.h" +#include "TH1D.h" +#include // for std::accumulate +#include +#include + +/** + * \class FitRWMWaveform + * + * This is a blank template for a Tool used by the script to generate a new custom tool. Please fill out the description and author information. + * + * $Author: B.Richards $ + * $Date: 2019/05/28 10:44:00 $ + * Contact: b.richards@qmul.ac.uk + */ +class FitRWMWaveform : public Tool +{ + +public: + FitRWMWaveform(); ///< Simple constructor + bool Initialise(std::string configfile, DataModel &data); ///< Initialise Function for setting up Tool resources. @param configfile The path and name of the dynamic configuration file to read in. @param data A reference to the transient data class used to pass information between Tools. + bool Execute(); ///< Execute function used to perform Tool purpose. + bool Finalise(); ///< Finalise function used to clean up resources. + + void FitRWM(); + void FitBRF(); + +private: + int verbosityFitRWMWaveform; + int v_message = 1; + int v_warning = 2; + int v_error = 3; + int v_debug = 4; + + bool printToRootFile; + int maxPrintNumber; + std::string output_filename; + + std::vector RWMRawWaveform; + std::vector BRFRawWaveform; + + std::map> ToBePrintedRWMWaveforms; + std::map> ToBePrintedBRFWaveforms; + + double RWMRisingStart; + double RWMRisingEnd; + double RWMHalfRising; + double RWMFHWM; + double RWMFirstPeak; + + double BRFFirstPeak; + double BRFAveragePeak; + double BRFFirstPeakFit; +}; + +#endif diff --git a/UserTools/FitRWMWaveform/README.md b/UserTools/FitRWMWaveform/README.md new file mode 100644 index 000000000..798057458 --- /dev/null +++ b/UserTools/FitRWMWaveform/README.md @@ -0,0 +1,35 @@ +# FitRWMWaveform + +FitRWMWaveform tool takes the auxilliary channel waveforms saved in the Processed Data and peforms rising edge fitting to determine the rising edge time. + +Currently the two auxillary waveforms are the Booster RF and the Booster RWM signals (https://github.com/ANNIEsoft/ToolAnalysis/blob/ff86893aa905652621594f8ac093be45f3bd13b5/configfiles/LoadGeometry/AuxChannels.csv#L5). + +Motivation for this tool and details of the waveform shape and fitting can be found here: https://annie-docdb.fnal.gov/cgi-bin/sso/ProcessDocumentAdd + +## Data + +The tool will populate the following objects (all `double` datatype): + +### RWM fits +* **RWMRisingStart**: Time where the RWM trace crosses predefined threshold +* **RWMRisingEnd**: Time where RWM trace crosses below predefined threshold (at the end) +* **RWMHalfRising**: Time where the RWM rising edge crosses 50% of its maximum above baseline. +* **RWMFHWM**: FWHM of the RWM waveform (sorry for the typo). +* **RWMFirstPeak**: After the rising edge of the RWM trace, there is often a sharp peak. This the time of this first peak. + +### BRF fit +* **BRFFirstPeak**: For the BRF waveform, fit of the first BRF pulse. +* **BRFAveragePeak** The average (or baseline) y-value (in ADC) of the signal across the entire window. +* **BRFFirstPeakFit** Fit for the half-rising time of the first BRF pulse. + + +## Configuration + +Configuration variables for FitRWMWaveform. + +``` +verbosityFitRWMWaveform 0 # verbosity level +printToRootFile 1 # 1 to print the RWM and BRF waveforms to an output root file, 0 for no printing +maxPrintNumber 100 # maximum number of waveforms to save to the output root file +output_filename RWMBRFWaveforms.root # name of the output root file +``` diff --git a/UserTools/LoadGenieEvent/LoadGenieEvent.cpp b/UserTools/LoadGenieEvent/LoadGenieEvent.cpp index 7995901fc..40279c0ab 100644 --- a/UserTools/LoadGenieEvent/LoadGenieEvent.cpp +++ b/UserTools/LoadGenieEvent/LoadGenieEvent.cpp @@ -308,6 +308,10 @@ bool LoadGenieEvent::Execute(){ neutcode=thegenieinfo.neutinteractioncode; // currently disabled to prevent excessive verbosity eventq2=thegenieinfo.Q2; //MeV + eventw2=thegenieinfo.W2; //MeV + eventbj_x = thegenieinfo.x; + eventelastic_y = thegenieinfo.y; + TrueTargetZ = thegenieinfo.targetnucleusZ; eventEnu=thegenieinfo.probeenergy; //MeV eventPnu=thegenieinfo.probethreemomentum; //MeV neutrinopdg=thegenieinfo.probepdg; @@ -426,6 +430,14 @@ bool LoadGenieEvent::Execute(){ geniestore->Set("NuVtxInTank",isintank); geniestore->Set("NuVtxInFidVol",isinfiducialvol); geniestore->Set("EventQ2",eventq2); + geniestore->Set("EventW2",eventw2); + geniestore->Set("EventBjx",eventbj_x); + geniestore->Set("Eventy",eventelastic_y); + geniestore->Set("TargetZ",TrueTargetZ); + geniestore->Set("Eventq0",eventq0); + geniestore->Set("Eventq3",eventq3); + geniestore->Set("pdg_vector", pdgs); + geniestore->Set("Pmag_vector",Pmag); geniestore->Set("NeutrinoEnergy",eventEnu); geniestore->Set("NeutrinoMomentum",eventPnu); geniestore->Set("NeutrinoPDG",neutrinopdg); @@ -458,6 +470,8 @@ bool LoadGenieEvent::Execute(){ Log("Tool LoadGenieEvent: Clearing genieintx",v_debug,verbosity); genieintx->Clear(); // REQUIRED TO PREVENT MEMORY LEAK + pdgs.clear(); + Pmag.clear(); Log("Tool LoadGenieEvent: done",v_debug,verbosity); return true; @@ -645,44 +659,66 @@ void LoadGenieEvent::GetGenieEntryInfo(genie::EventRecord* gevtRec, genie::Inter genie::GHepParticle * p = 0; //Loop over event particles + /// Kolanoski, Hermann, and Norbert Wermes, Particle Detectors: Fundamentals and Applications + // (Oxford, 2020; online edn, Oxford Academic, 17 Sept. 2020), + /// https://doi.org/10.1093/oso/9780198858362.001.0001, accessed 15 Aug. 2024. + // Using the equation P_th = Mass[GeV/C] / sqrt(n^2-1), where "n" is the index for refraction + /// rounding to 2 SigFigs + double wclimit_pion = 0.16; //water Cherenkov momentum threshold GeV + double wclimit_proton = 1.1; //water Cherenkov momentum threshold GeV + double wclimit_kaon = .56; //water Cherenkov momentum threshold GeV **THe the charged and neutral kaons thresholds are the same to 2 sigfigs while ((p = dynamic_cast(iter.Next()))) { int pdgc = p->Pdg(); + double pipx = p->Px(); + double pipy = p->Py(); + double pipz = p->Pz(); + double P_mag = std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz); int status = p->Status(); double wclimit = 0.160; //water Cherenkov momentum threshold GeV if (status != genie::kIStStableFinalState) continue; if (pdgc == genie::kPdgNeutron) thegenieinfo.numfsneutrons++; - else if (pdgc == genie::kPdgProton) thegenieinfo.numfsprotons++; + else if (pdgc == genie::kPdgProton) { + thegenieinfo.numfsprotons++; + if (P_mag > wclimit_proton) { + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + } + } else if (pdgc == genie::kPdgPiP) { thegenieinfo.numfspiplus++; - double pipx = p->Px(); - double pipy = p->Py(); - double pipz = p->Pz(); - if (std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz) > wclimit) thegenieinfo.numfspipluscher++; + if (P_mag > wclimit_pion){ + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + thegenieinfo.numfspipluscher++; + } } else if (pdgc == genie::kPdgPiM) { thegenieinfo.numfspiminus++; - double pipx = p->Px(); - double pipy = p->Py(); - double pipz = p->Pz(); - if (std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz) > wclimit) thegenieinfo.numfspiminuscher++; + if (P_mag > wclimit_pion) { + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + thegenieinfo.numfspiminuscher++; + } } else if (pdgc == genie::kPdgPi0) thegenieinfo.numfspi0++; else if (pdgc == genie::kPdgKP) { thegenieinfo.numfskplus++; - double pipx = p->Px(); - double pipy = p->Py(); - double pipz = p->Pz(); - if (std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz) > wclimit) thegenieinfo.numfskpluscher++; + if (P_mag > wclimit_kaon) { + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + thegenieinfo.numfskpluscher++; + } } else if (pdgc == genie::kPdgKM) { thegenieinfo.numfskminus++; - double pipx = p->Px(); - double pipy = p->Py(); - double pipz = p->Pz(); - if (std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz) > wclimit) thegenieinfo.numfskminuscher++; + if (P_mag > wclimit_kaon){ + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + thegenieinfo.numfskminuscher++; + } } } @@ -703,6 +739,14 @@ void LoadGenieEvent::GetGenieEntryInfo(genie::EventRecord* gevtRec, genie::Inter // q=k1-k2, 4-p transfer /*TLorentzVector*/ thegenieinfo.q = TLorentzVectorToFourVector((*k1)-(*k2)); // /*Double_t*/ thegenieinfo.Q2 = genieint->Kine().Q2(); // not set in our GENIE files! + double q0 = (gevtRec->Probe()->P4()->E()*1000.) - (gevtRec->FinalStatePrimaryLepton()->P4()->E()*1000.); + double px1 = (gevtRec->FinalStatePrimaryLepton()->P4()->Px()*1000.) - (gevtRec->Probe()->P4()->Px()*1000.); + double py1 = (gevtRec->FinalStatePrimaryLepton()->P4()->Py()*1000.) - (gevtRec->Probe()->P4()->Py()*1000.); + double pz1 = (gevtRec->FinalStatePrimaryLepton()->P4()->Pz()*1000.) - (gevtRec->Probe()->P4()->Pz()*1000.); + double q3 = sqrt(px1*px1+py1*py1+pz1*pz1); + thegenieinfo.Q2 = q3*q3 - q0*q0; // MeV + eventq0 = q0; + eventq3 = q3; // momemtum transfer /*Double_t*/ thegenieinfo.Q2 = -1 * thegenieinfo.q.M2(); // E transfer to the nucleus diff --git a/UserTools/LoadGenieEvent/LoadGenieEvent.h b/UserTools/LoadGenieEvent/LoadGenieEvent.h index 1a0582570..304984eae 100644 --- a/UserTools/LoadGenieEvent/LoadGenieEvent.h +++ b/UserTools/LoadGenieEvent/LoadGenieEvent.h @@ -159,6 +159,14 @@ class LoadGenieEvent: public Tool { bool isintank=false; bool isinfiducialvol=false; double eventq2=-1; + double eventw2=-1; + int TrueTargetZ = -1; + double eventbj_x=-1; + double eventelastic_y=-1; + double eventq0=-1; + double eventq3=-1; + std::vectorpdgs; + std::vectorPmag; double eventEnu=-1; Direction eventPnu; int neutrinopdg=-1; diff --git a/UserTools/LoadRawData/LoadRawData.cpp b/UserTools/LoadRawData/LoadRawData.cpp index bbddfcde9..d99d04225 100644 --- a/UserTools/LoadRawData/LoadRawData.cpp +++ b/UserTools/LoadRawData/LoadRawData.cpp @@ -63,7 +63,7 @@ bool LoadRawData::Initialise(std::string configfile, DataModel &data){ MRDEntriesCompleted = false; TrigEntriesCompleted = false; LAPPDEntriesCompleted = false; - + JumpBecauseLAPPD = false; LAPPDPaused = 0; m_data->CStore.Set("FileProcessingComplete",false); @@ -78,7 +78,7 @@ bool LoadRawData::Execute(){ //Check if we've reached the end of our file list or single file bool ProcessingComplete = false; if(FileCompleted) ProcessingComplete = this->InitializeNewFile(); - if(ProcessingComplete) { + if(BuildType != "LAPPDMerging" && ProcessingComplete) { Log("LoadRawData Tool: All files have been processed.",v_message,verbosity); m_data->CStore.Set("FileProcessingComplete",true); return true; @@ -113,6 +113,9 @@ bool LoadRawData::Execute(){ std::cout << "LoadRawData tool ERROR: no files in file list to parse! Stopping toolchain" << std::endl; m_data->vars.Set("StopLoop",1); return false; + if(BuildType == "LAPPDMerging" && FileCompleted){ + return true; + } } if(FileCompleted || CurrentFile=="NONE"){ Log("LoadRawData tool: Moving to next file.",v_message,verbosity); @@ -127,10 +130,63 @@ bool LoadRawData::Execute(){ this->LoadPMTMRDData(); this->LoadTriggerData(); this->LoadLAPPDData(); + + { + // extract run number and file number from filename + std::regex runNumber_regex("RAWDataR(\\d{4})"); + std::regex subrunNUmber_regex("S(\\d{1,4})p"); + std::regex rawFileNumber_regex("p(\\d{1,4})"); + std::smatch match; + if (std::regex_search(CurrentFile, match, runNumber_regex) && match.size() > 1) + { + int runNumber = std::stoi(match.str(1)); + if(verbosity > 0) std::cout << "runNumber: " << runNumber << std::endl; + m_data->CStore.Set("runNumber", runNumber); + } + else + { + std::cout << "runNumber not found" << std::endl; + m_data->CStore.Set("rawFileNumber", -9999); + } + + if (std::regex_search(CurrentFile, match, subrunNUmber_regex) && match.size() > 1) + { + int subrunNumber = std::stoi(match.str(1)); + if(verbosity > 0) std::cout << "subrunNumber: " << subrunNumber << std::endl; + m_data->CStore.Set("subrunNumber", subrunNumber); + } + else + { + std::cout << "subrunNumber not found" << std::endl; + m_data->CStore.Set("subrunNumber", -9999); + } + + if (std::regex_search(CurrentFile, match, rawFileNumber_regex) && match.size() > 1) + { + int rawFileNumber = std::stoi(match.str(1)); + if(verbosity > 0) std::cout << "rawFileNumber: " << rawFileNumber << std::endl; + m_data->CStore.Set("rawFileNumber", rawFileNumber); + } + else + { + std::cout << "rawFileNumber not found" << std::endl; + m_data->CStore.Set("runNumber", -9999); + } + } + } else { if(verbosity>v_message) std::cout << "LoadRawDataTool: continuing file " << OrganizedFileList.at(FileNum) << std::endl; } FileCompleted = false; + if (JumpBecauseLAPPD){ + //sometimes the LAPPD data in raw data file may have a very large entry number due to overflow + //then the whole loader will be stuck in the loop, so we need to jump to the next file + //only set while loading with LAPPD, won't affect others + FileCompleted = true; + JumpBecauseLAPPD = false; + cout<<"LoadRawData: Jumping to next file because there is something wrong about LAPPD data"< tanktotalentries && BuildType != "MRD"){ + if (mrdtotalentries > tanktotalentries && BuildType != "MRD" && BuildType != "MRDAndCTC"){ std::cout << "LoadRawData tool ERROR: More MRD entries than VME entries! Stopping toolchain" << std::endl; m_data->vars.Set("StopLoop",1); } @@ -258,16 +314,15 @@ bool LoadRawData::Execute(){ Log("LoadRawData Tool: ALL LAPPD ENTRIES COLLECTED.",v_debug, verbosity); LAPPDEntriesCompleted = true; LAPPDPaused = true; - if(TrigEntryNum < trigtotalentries) CTCPaused = false; + //if(TrigEntryNum < trigtotalentries) CTCPaused = false; + //when using ANNIEEventBuilder, the CTC data are usually pulsed at ~10 entries + //but if we also load the LAPPD data, the pulse will be canceled here + //and there is no need to recheck everything is not paused again if(TankEntryNum < tanktotalentries) TankPaused = false; if(MRDEntryNum < mrdtotalentries) MRDPaused = false; } - if (LAPPDEntryNum == lappdtotalentries){ - Log("LoadRawData Tool: ALL LAPPD ENTRIES COLLECTED.",v_debug, verbosity); + if (lappdtotalentries < 0){ //some times the lappd broken data can give negative value LAPPDEntriesCompleted = true; - LAPPDPaused = true; - if(TankEntryNum < tanktotalentries) TankPaused = false; - if(MRDEntryNum < mrdtotalentries) MRDPaused = false; } m_data->CStore.Set("PauseTankDecoding",TankPaused); @@ -281,6 +336,10 @@ bool LoadRawData::Execute(){ //Set if the raw data file has been completed if (TankEntriesCompleted && BuildType == "Tank") FileCompleted = true; if (MRDEntriesCompleted && BuildType == "MRD") FileCompleted = true; + if (LAPPDEntriesCompleted && BuildType == "LAPPD") FileCompleted = true; + if ((LAPPDEntriesCompleted && TrigEntriesCompleted) && (BuildType == "LAPPDAndCTC" || BuildType == "CTCAndLAPPD")) FileCompleted = true; + if (lappdtotalentries == 0 && (BuildType == "LAPPD" || BuildType == "LAPPDMerging" || BuildType == "LAPPDAndCTC" || BuildType == "CTCAndLAPPD")) FileCompleted = true; + if (LAPPDEntriesCompleted && BuildType == "LAPPDMerging") FileCompleted = true; if ((TankEntriesCompleted && MRDEntriesCompleted) && (BuildType == "TankAndMRD")) FileCompleted = true; if ((TrigEntriesCompleted && TankEntriesCompleted) && (BuildType == "TankAndCTC")) FileCompleted = true; if ((TrigEntriesCompleted && MRDEntriesCompleted) && (BuildType == "MRDAndCTC")) FileCompleted = true; @@ -396,12 +455,28 @@ void LoadRawData::LoadTriggerData(){ void LoadRawData::LoadLAPPDData(){ Log("LoadRawData Tool: Accessing LAPPD Data in raw data",v_message,verbosity); - if((BuildType == "TankAndMRDAndCTCAndLAPPD")){ + if(BuildType == "TankAndMRDAndCTCAndLAPPD" || BuildType == "LAPPD" || BuildType == "LAPPDMerging" || BuildType == "LAPPDAndCTC" || BuildType == "CTCAndLAPPD"){ Log("LoadRawData Tool: Accessing LAPPD Data in raw data",v_message,verbosity); try{ RawData->Get("LAPPDData",*LAPPDData); LAPPDData->Header->Get("TotalEntries",lappdtotalentries); - if(verbosity>3) LAPPDData->Print(false); + if(verbosity>3) { + Log("LoadRawData Tool: LAPPDData printing",v_message,verbosity); + LAPPDData->Print(false); + Log("LoadRawData Tool: LAPPDData Header printing",v_message,verbosity); + LAPPDData->Header->Print(false); + } + if(lappdtotalentries < 0){ //some time the lappd broken data can give negative value + lappdtotalentries = 0; + LAPPDEntriesCompleted = true; + }else{ + Log("LoadRawData Tool: in loading, LAPPDData has "+std::to_string(lappdtotalentries)+" entries",v_message,verbosity); + if(lappdtotalentries > 100000){ + Log("LoadRawData Tool: LAPPDData has "+std::to_string(lappdtotalentries)+" entries. This is a large wrong number of entries. May be a corrupted file.",v_warning,verbosity); + JumpBecauseLAPPD = true; //if loading LAPPD data and the LAPPD data in this file was broken, jump to next file + return; + } + } } catch (...) { Log("LoadRawData: Did not find LAPPDData in raw data file! (Maybe corrupted!!!) Don't process LAPPDData",0,0); lappdtotalentries=0; @@ -516,8 +591,16 @@ TrigData->Close(); TrigData->Delete(); delete TrigData; TrigData = new BoostStor EndOfProcessing = true; } if(Mode == "FileList" && FileNum == int(OrganizedFileList.size())){ + //In Merging LAPPD with event building data, loading LAPPD from raw data will be finished before finishing merging + //so set the FileNum == to >=, and minus 1 to not disturb other code relate to FileNum Log("LoadRawData Tool: Full file list parsed. Ending toolchain after this loop.",v_message, verbosity); - m_data->vars.Set("StopLoop",1); + m_data->CStore.Set("LAPPDanaData",false); //while use loading raw data to merge LAPPD data with other data, after reading all LAPPD data, set later LAPPDReadIn to stop. + if(BuildType != "LAPPDMerging"){ + m_data->vars.Set("StopLoop",1); + }else{ + Log("LoadRawData Tool: in LAPPD Merging mode, do not stop tool chain",v_message, verbosity); + FileNum -= 1; + } EndOfProcessing = true; } //No need to stop the loop in continous mode @@ -529,7 +612,7 @@ TrigData->Close(); TrigData->Delete(); delete TrigData; TrigData = new BoostStor } void LoadRawData::GetNextDataEntries(){ - std::cout <<"BuildType: "<0) std::cout <<"BuildType: "<GetEntry(LAPPDEntryNum); - LAPPDData->Get("LAPPDData",*Ldata); - m_data->CStore.Set("LAPPDData",Ldata,true); - LAPPDEntryNum+=1; - } - } - //Get next TrigData Entry - if((BuildType == "TankAndMRDAndCTC" || BuildType == "TankAndCTC" || BuildType == "MRDAndCTC" || BuildType == "CTC" || BuildType == "TankAndMRDAndCTCAndLAPPD") && !TrigEntriesCompleted && !CTCPaused){ + if((BuildType == "TankAndMRDAndCTC" || BuildType == "TankAndCTC" || BuildType == "MRDAndCTC" || BuildType == "CTC" || BuildType == "TankAndMRDAndCTCAndLAPPD" || BuildType == "CTCAndLAPPD" || BuildType == "LAPPDAndCTC") && !TrigEntriesCompleted && !CTCPaused){ Log("LoadRawData Tool: Procesing TrigData Entry "+to_string(TrigEntryNum)+"/"+to_string(trigtotalentries),v_debug, verbosity); if (storetrigoverlap && TrigEntryNum == 0 && extract_part != 0){ TrigData->GetEntry(TrigEntryNum); @@ -613,12 +685,15 @@ void LoadRawData::GetNextDataEntries(){ } //Get next LAPPDData Entry - if(BuildType == "LAPPD" || BuildType == "TankAndLAPPD" || BuildType == "MRDAndLAPPD" || BuildType == "TankAndMRDAndLAPPD" || BuildType == "TankAndMRDAndLAPPDAndCTC"){ - Log("LoadRawData Tool: Processing LAPPDData Entry "+to_string(LAPPDEntryNum)+"/"+to_string(lappdtotalentries),v_debug,verbosity); - LAPPDData->GetEntry(LAPPDEntryNum); - LAPPDData->Get("LAPPDData", *Ldata); - m_data->CStore.Set("LAPPDData", Ldata); - LAPPDEntryNum+=1; + if(BuildType == "LAPPD" || BuildType == "TankAndLAPPD" || BuildType == "MRDAndLAPPD" || BuildType == "TankAndMRDAndLAPPD" || BuildType == "TankAndMRDAndCTCAndLAPPD" || BuildType == "CTCAndLAPPD" || BuildType == "LAPPDMerging" || BuildType == "LAPPDAndCTC" ){ + if(!LAPPDPaused && !LAPPDEntriesCompleted){ + Log("LoadRawData Tool: Processing LAPPDData Entry "+to_string(LAPPDEntryNum)+"/"+to_string(lappdtotalentries),v_debug,verbosity); + LAPPDData->GetEntry(LAPPDEntryNum); + LAPPDData->Get("LAPPDData", *Ldata); + m_data->CStore.Set("LAPPDData", Ldata); + m_data->CStore.Set("LAPPDanaData",true); + LAPPDEntryNum+=1; + } } return; } diff --git a/UserTools/LoadRawData/LoadRawData.h b/UserTools/LoadRawData/LoadRawData.h index 95204fed2..54308c5e0 100644 --- a/UserTools/LoadRawData/LoadRawData.h +++ b/UserTools/LoadRawData/LoadRawData.h @@ -63,6 +63,7 @@ class LoadRawData: public Tool { bool TrigEntriesCompleted; bool LAPPDEntriesCompleted; bool FileCompleted; + bool JumpBecauseLAPPD; int TankEntryNum = 0; int MRDEntryNum = 0; int TrigEntryNum = 0; diff --git a/UserTools/LoadReweightGenieEvent/LoadReweightGenieEvent.cpp b/UserTools/LoadReweightGenieEvent/LoadReweightGenieEvent.cpp index 9279ca6bd..85768367a 100644 --- a/UserTools/LoadReweightGenieEvent/LoadReweightGenieEvent.cpp +++ b/UserTools/LoadReweightGenieEvent/LoadReweightGenieEvent.cpp @@ -555,6 +555,10 @@ bool LoadReweightGenieEvent::Execute(){ neutcode=thegenieinfo.neutinteractioncode; // currently disabled to prevent excessive verbosity eventq2=thegenieinfo.Q2; //MeV + eventw2=thegenieinfo.W2; //MeV + eventbj_x = thegenieinfo.x; + eventelastic_y = thegenieinfo.y; + TrueTargetZ = thegenieinfo.targetnucleusZ; eventEnu=thegenieinfo.probeenergy; //MeV eventPnu=thegenieinfo.probethreemomentum; //MeV neutrinopdg=thegenieinfo.probepdg; @@ -706,6 +710,14 @@ bool LoadReweightGenieEvent::Execute(){ geniestore->Set("NuVtxInTank",isintank); geniestore->Set("NuVtxInFidVol",isinfiducialvol); geniestore->Set("EventQ2",eventq2); + geniestore->Set("EventW2",eventw2); + geniestore->Set("EventBjx",eventbj_x); + geniestore->Set("Eventy",eventelastic_y); + geniestore->Set("TargetZ",TrueTargetZ); + geniestore->Set("Eventq0",eventq0); + geniestore->Set("Eventq3",eventq3); + geniestore->Set("pdg_vector", pdgs); + geniestore->Set("Pmag_vector",Pmag); geniestore->Set("NeutrinoEnergy",eventEnu); geniestore->Set("NeutrinoMomentum",eventPnu); geniestore->Set("NeutrinoPDG",neutrinopdg); @@ -739,6 +751,8 @@ bool LoadReweightGenieEvent::Execute(){ Log("Tool LoadReweightGenieEvent: Clearing genieintx",v_debug,verbosity); genieintx->Clear(); // REQUIRED TO PREVENT MEMORY LEAK + pdgs.clear(); + Pmag.clear(); Log("Tool LoadReweightGenieEvent: done",v_debug,verbosity); return true; @@ -925,44 +939,66 @@ void LoadReweightGenieEvent::GetGenieEntryInfo(genie::EventRecord* gevtRec, geni genie::GHepParticle * p = 0; //Loop over event particles + /// Kolanoski, Hermann, and Norbert Wermes, Particle Detectors: Fundamentals and Applications + // (Oxford, 2020; online edn, Oxford Academic, 17 Sept. 2020), + /// https://doi.org/10.1093/oso/9780198858362.001.0001, accessed 15 Aug. 2024. + // Using the equation P_th = Mass[GeV/C] / sqrt(n^2-1), where "n" is the index for refraction + /// rounding to 2 SigFigs + double wclimit_pion = 0.16; //water Cherenkov momentum threshold GeV + double wclimit_proton = 1.1; //water Cherenkov momentum threshold GeV + double wclimit_kaon = .56; //water Cherenkov momentum threshold GeV **THe the charged and neutral kaons thresholds are the same to 2 sigfigs while ((p = dynamic_cast(iter.Next()))) { int pdgc = p->Pdg(); + double pipx = p->Px(); + double pipy = p->Py(); + double pipz = p->Pz(); + double P_mag = std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz); int status = p->Status(); double wclimit = 0.160; //water Cherenkov momentum threshold GeV if (status != genie::kIStStableFinalState) continue; if (pdgc == genie::kPdgNeutron) thegenieinfo.numfsneutrons++; - else if (pdgc == genie::kPdgProton) thegenieinfo.numfsprotons++; + else if (pdgc == genie::kPdgProton) { + thegenieinfo.numfsprotons++; + if (P_mag > wclimit_proton) { + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + } + } else if (pdgc == genie::kPdgPiP) { thegenieinfo.numfspiplus++; - double pipx = p->Px(); - double pipy = p->Py(); - double pipz = p->Pz(); - if (std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz) > wclimit) thegenieinfo.numfspipluscher++; + if (P_mag > wclimit_pion){ + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + thegenieinfo.numfspipluscher++; + } } else if (pdgc == genie::kPdgPiM) { thegenieinfo.numfspiminus++; - double pipx = p->Px(); - double pipy = p->Py(); - double pipz = p->Pz(); - if (std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz) > wclimit) thegenieinfo.numfspiminuscher++; + if (P_mag > wclimit_pion) { + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + thegenieinfo.numfspiminuscher++; + } } else if (pdgc == genie::kPdgPi0) thegenieinfo.numfspi0++; else if (pdgc == genie::kPdgKP) { thegenieinfo.numfskplus++; - double pipx = p->Px(); - double pipy = p->Py(); - double pipz = p->Pz(); - if (std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz) > wclimit) thegenieinfo.numfskpluscher++; + if (P_mag > wclimit_kaon) { + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + thegenieinfo.numfskpluscher++; + } } else if (pdgc == genie::kPdgKM) { thegenieinfo.numfskminus++; - double pipx = p->Px(); - double pipy = p->Py(); - double pipz = p->Pz(); - if (std::sqrt(pipx*pipx + pipy*pipy + pipz*pipz) > wclimit) thegenieinfo.numfskminuscher++; + if (P_mag > wclimit_kaon){ + pdgs.push_back(pdgc); + Pmag.push_back(P_mag); + thegenieinfo.numfskminuscher++; + } } } @@ -983,6 +1019,14 @@ void LoadReweightGenieEvent::GetGenieEntryInfo(genie::EventRecord* gevtRec, geni // q=k1-k2, 4-p transfer /*TLorentzVector*/ thegenieinfo.q = TLorentzVectorToFourVectorRW((*k1)-(*k2)); // /*Double_t*/ thegenieinfo.Q2 = genieint->Kine().Q2(); // not set in our GENIE files! + double q0 = (gevtRec->Probe()->P4()->E()*1000.) - (gevtRec->FinalStatePrimaryLepton()->P4()->E()*1000.); + double px1 = (gevtRec->FinalStatePrimaryLepton()->P4()->Px()*1000.) - (gevtRec->Probe()->P4()->Px()*1000.); + double py1 = (gevtRec->FinalStatePrimaryLepton()->P4()->Py()*1000.) - (gevtRec->Probe()->P4()->Py()*1000.); + double pz1 = (gevtRec->FinalStatePrimaryLepton()->P4()->Pz()*1000.) - (gevtRec->Probe()->P4()->Pz()*1000.); + double q3 = sqrt(px1*px1+py1*py1+pz1*pz1); + thegenieinfo.Q2 = q3*q3 - q0*q0; // MeV + eventq0 = q0; + eventq3 = q3; // momemtum transfer /*Double_t*/ thegenieinfo.Q2 = -1 * thegenieinfo.q.M2(); // E transfer to the nucleus @@ -1296,7 +1340,6 @@ void LoadReweightGenieEvent::SetupWeightCalculators(genie::rew::GReWeight& rw, c rw.AdoptWghtCalc( "hadro_intranuke", new GReWeightINuke ); rw.AdoptWghtCalc( "hadro_agky", new GReWeightAGKY ); rw.AdoptWghtCalc( "xsec_nc", new GReWeightNuXSecNC ); - rw.AdoptWghtCalc( "res_dk", new GReWeightResonanceDecay ); rw.AdoptWghtCalc( "xsec_empmec", new GReWeightXSecEmpiricalMEC ); // GReWeightDISNuclMod::CalcWeight() is not implemented, so we won't // bother to use it here. - S. Gardiner, 9 Dec 2019 diff --git a/UserTools/LoadReweightGenieEvent/LoadReweightGenieEvent.h b/UserTools/LoadReweightGenieEvent/LoadReweightGenieEvent.h index 6376abc88..177f898fe 100644 --- a/UserTools/LoadReweightGenieEvent/LoadReweightGenieEvent.h +++ b/UserTools/LoadReweightGenieEvent/LoadReweightGenieEvent.h @@ -210,6 +210,15 @@ class LoadReweightGenieEvent: public Tool { bool isintank=false; bool isinfiducialvol=false; double eventq2=-1; + double eventw2=-1; + int TrueTargetZ = -1; + double eventbj_x=-1; + double eventelastic_y=-1; + double eventq0=-1; + double eventq3=-1; + std::vectorpdgs; + std::vectorPmag; + double eventEnu=-1; Direction eventPnu; int neutrinopdg=-1; diff --git a/UserTools/MuonFitter/MuonFitter.cpp b/UserTools/MuonFitter/MuonFitter.cpp new file mode 100644 index 000000000..c01a2fb51 --- /dev/null +++ b/UserTools/MuonFitter/MuonFitter.cpp @@ -0,0 +1,2569 @@ +#include "MuonFitter.h" + +/* ***************************************************************** + * tool name: MuonFitter + * author: Julie He + * + * desc: This tool takes + * + * versions: + * ... + * 240331v1JH: fixed line of code defining reco_mu_e (prev defined + * using mrdEnergyLoss) + * 240401v2JH: removed unnecessary code, old algorithms + * 240405v1JH: add option to use simple energy reco (just add eloss) + * 240407v1JH: reco mode no longer includes finding muon, added + * cluster_time to m_tank_track_fits + * 240425v1JH: incorporated scattering effects into MRD track length + * 240503v1JH: added SimpleReco* variables for NeutronMultiplicity + * toolchain + * 240506v1JH: adjusted nlyrs method (additional 0.5 iron layer) + * 240508v1JH: I am once again, updating the dEdx + * 240514v1JH: Removed FMV and spherical FV cut + * 240515v1JH: Added in FMV cut from EventSelector + * 240516v1JH: Reorganized script, added spherical FV cut back in + * 240520v1JH: added original veto cut back in + * 240520v2JH: removed original veto cut + * 240520v3JH: added different FV cuts + * 240524v1JH: fixed FV cut logic, added more plots to NM tool + * ***************************************************************** + */ + +MuonFitter::MuonFitter():Tool(){} + + +bool MuonFitter::Initialise(std::string configfile, DataModel &data){ + + ///////////////////////// Useful header ///////////////////////// + //-- Load config file + if(configfile!="") m_variables.Initialise(configfile); + //m_variables.Print(); + + m_data= &data; //assigning transient data pointer + ///////////////////////////////////////////////////////////////// + + //-- Set default values + verbosity = 3; + isData = true; + PMTMRDOffset = 745.; + + // ------------------------------------------------------------- + // --- Retrieve config variables ------------------------------- + // ------------------------------------------------------------- + m_variables.Get("verbosity", verbosity); + m_variables.Get("IsData", isData); + m_variables.Get("LuxArea", LUX_AREA); + m_variables.Get("EtelArea", ETEL_AREA); + m_variables.Get("HamamatsuArea", HAMAMATSU_AREA); + m_variables.Get("WatchboyArea", WATCHBOY_AREA); + m_variables.Get("WatchmanArea", WATCHMAN_AREA); + m_variables.Get("PMTMRDOffset", PMTMRDOffset); + m_variables.Get("Plot3D", plot3d); + m_variables.Get("Draw3DFMV", draw3d_fmv); + m_variables.Get("Draw3DMRD", draw3d_mrd); + m_variables.Get("SaveHistograms", save_hists); + m_variables.Get("StepSizeAi", step_size_ai); + m_variables.Get("InsideAngle", insideAngle); + m_variables.Get("OutsideAngle", outsideAngle); + m_variables.Get("PMTChargeThreshold", PMTQCut); + m_variables.Get("EtaThreshold", EtaThreshold); + m_variables.Get("DisplayTruth", display_truth); + m_variables.Get("RecoMode", reco_mode); + m_variables.Get("AiEtaFile", aiEtaFile); + m_variables.Get("TankTrackFitFile", tankTrackFitFile); + m_variables.Get("UseNumLayers", use_nlyrs); + m_variables.Get("UsePCA", use_pca); + m_variables.Get("UseConnDots", use_conn_dots); + m_variables.Get("UseELoss", use_eloss); + m_variables.Get("UseSimpleEReco", use_simple_ereco); + m_variables.Get("RecoEnergyShift", ERECO_SHIFT); + + Log("MuonFitter Tool: Version 240524v1", v_message, verbosity); + if (use_nlyrs) Log("MuonFitter Tool: Using num layers to determine MRD track length", v_message, verbosity); + if (use_pca) Log("MuonFitter Tool: Using PCA to determine MRD track angle", v_message, verbosity); + if (use_conn_dots) Log("MuonFitter Tool: Using connect the dots method to determine MRD track angle", v_message, verbosity); + if (use_eloss) Log("MuonFitter Tool: Using current ANNIE tools to determine MRD energy loss", v_message, verbosity); + if (use_simple_ereco) Log("MuonFitter Tool: Just add tank and MRD energy depositions (don't update dEdx values)", v_message, verbosity); + + + // Output ROOT file + std::string outfile; + m_variables.Get("OutputFile", outfile); + Log("MuonFitter Tool: Saving output into " + outfile, v_message, verbosity); + root_outp = new TFile(outfile.c_str(), "RECREATE"); + + + // ------------------------------------------------------------- + // --- Initialize canvases, graphs, histograms ----------------- + // ------------------------------------------------------------- + this->InitCanvases(); + this->InitHistograms(); + this->InitGraphs(); + + + // ------------------------------------------------------------- + // --- Retrieve Store variables -------------------------------- + // ------------------------------------------------------------- + m_data->CStore.Get("ChannelNumToTankPMTSPEChargeMap", ChannelKeyToSPEMap); //same for data and mc + + + // ------------------------------------------------------------- + // --- Get Geometry -------------------------------------------- + // ------------------------------------------------------------- + //-- Code based on UserTools/EventDisplay/EventDisplay.cpp + auto get_geo = m_data->Stores["ANNIEEvent"]->Header->Get("AnnieGeometry", geom); + if (!get_geo) + { + Log("MuonFitter Tool: Error retrieving Geometry from ANNIEEvent!", v_error, verbosity); + return false; + } + tank_radius = geom->GetTankRadius(); + tank_height = geom->GetTankHalfheight(); + tank_height *= 2; + detector_version = geom->GetVersion(); + Log("MuonFitter Tool: Using detector version " + std::to_string(detector_version), v_message, verbosity); + double barrel_compression = 0.82; + //-- Use compressed barrel radius for ANNIEp2v6 detector configuration (only MC) + if (detector_config == "ANNIEp2v6" && !isData) { tank_height *= barrel_compression; } + else if (isData) { tank_height = 1.2833; } + //-- Set tank radius to standard value of old anniev2 configuration (v4/v6 seems to have very different radius?) + if (tank_radius < 1. || isData) { tank_radius = 1.37504; } + + Position detector_center = geom->GetTankCentre(); + tank_center_x = 100.*detector_center.X(); //convert to cm + tank_center_y = 100.*detector_center.Y(); + tank_center_z = 100.*detector_center.Z(); + //-- QA: Check tank center, radius, and height being used + std::cout << " MuonFitter Tool: tank_center xyz [cm]: " << tank_center_x << "," << tank_center_y << "," << tank_center_z << std::endl; + std::cout << " MuonFitter Tool: tank_radius [m]: " << tank_radius << std::endl; + std::cout << " MuonFitter Tool: tank_height [m]: " << tank_height << std::endl; + + //-- QA: Check number of PMTs in each subdetector + n_tank_pmts = geom->GetNumDetectorsInSet("Tank"); + n_mrd_pmts = geom->GetNumDetectorsInSet("MRD"); + n_veto_pmts = geom->GetNumDetectorsInSet("Veto"); + std::cout << " MuonFitter Tool: Number of Tank / MRD / Veto PMTs in this geometry: " << n_tank_pmts << " / " << n_mrd_pmts << " / " << n_veto_pmts << std::endl; + + + // ------------------------------------------------------------- + // --- ANNIE in 3D --------------------------------------------- + // ------------------------------------------------------------- + // --- Set up 3D geometry for viewing + Log("MuonFitter Tool: Creating 3D Geometry", v_debug, verbosity); + ageom = new TGeoManager("ageom", "ANNIE in 3D"); + TGeoNode *node; + + //-- material + vacuum = new TGeoMaterial("vacuum",0,0,0); + Fe = new TGeoMaterial("Fe",55.845,26,7.87); + + //-- create media + Air = new TGeoMedium("Vacuum",0,vacuum); + Iron = new TGeoMedium("Iron",1,Fe); + + //-- create volume + EXPH = ageom->MakeBox("EXPH",Air,300,300,300); + ageom->SetTopVolume(EXPH); + ageom->SetTopVisible(0); + //-- If you want to see the boundary, input the number 1 instead of 0: + // geom->SetTopVisible(1); + + //-- draw CANVAS/TOP CENTER + bBlock = ageom->MakeSphere("EXPH_vol_center", Iron, 0,3,0,180,0,360); + bBlock->SetLineColor(1); + EXPH->AddNodeOverlap(bBlock,N++,new TGeoTranslation(0,0,0)); + + //-- draw TANK + TGeoVolume *annietank = ageom->MakeTubs("annietank", Iron, 0, tank_radius*100., tank_height*100., 0, 360); //convert to cm + annietank->SetLineColor(38); + EXPH->AddNodeOverlap(annietank,N++,new TGeoCombiTrans(0,0,0,new TGeoRotation("annietank",0,90,0))); + node = EXPH->GetNode(N-1); + + + // ------------------------------------------------------------- + // --- Read in TANK PMTs --------------------------------------- + // ------------------------------------------------------------- + //-- Code based on UserTools/EventDisplay/EventDisplay.cpp + std::map> *Detectors = geom->GetDetectors(); + + Log("MuonFitter Tool: Adding tank PMTs to 3D geometry", v_debug, verbosity); + for (std::map::iterator it = Detectors->at("Tank").begin(); it != Detectors->at("Tank").end(); ++it) + { + Detector *apmt = it->second; + unsigned long detkey = it->first; + std::string det_type = apmt->GetDetectorType(); + Position position_PMT = apmt->GetDetectorPosition(); //in meters + //-- PMT xyz corrected by tank center, in cm + x_pmt.insert(std::pair(detkey, 100.*position_PMT.X()-tank_center_x)); + y_pmt.insert(std::pair(detkey, 100.*position_PMT.Y()-tank_center_y)); + z_pmt.insert(std::pair(detkey, 100.*position_PMT.Z()-tank_center_z)); + //-- PMT orientation + Direction direction_PMT = apmt->GetDetectorDirection(); + x_pmt_dir.insert(std::pair(detkey, direction_PMT.X())); + y_pmt_dir.insert(std::pair(detkey, direction_PMT.Y())); + z_pmt_dir.insert(std::pair(detkey, direction_PMT.Z())); + + //-- Get PMT areas for ring area overlap later + double det_area = 0.; + if (det_type == "LUX" || det_type == "ANNIEp2v7-glassFaceWCPMT_R7081") { det_area = LUX_AREA; } + else if (det_type == "ETEL" || det_type == "ANNIEp2v7-glassFaceWCPMT_D784KFLB") { det_area = ETEL_AREA; } + else if (det_type == "Hamamatsu" || det_type == "ANNIEp2v7-glassFaceWCPMT_R5912HQE") { det_area = HAMAMATSU_AREA; } + else if (det_type == "Watchboy" || det_type == "ANNIEp2v7-glassFaceWCPMT_R7081") { det_area = WATCHBOY_AREA; } + else if (det_type == "Watchman" || det_type == "ANNIEp2v7-glassFaceWCPMT_R7081HQE") { det_area = WATCHMAN_AREA; } + else { Log("MuonFitter Tool: Unrecognized detector type! Setting det_area to 0.", v_error, verbosity); } + m_pmt_area.insert(std::pair(detkey, det_area)); + + //-- ANNIE in 3D: Drawing TANK PMTs + sprintf(blockName,"tank_pmt%lu",detkey); + bBlock = ageom->MakeSphere(blockName, Iron, 0,1.5,0,180,0,360); + bBlock->SetLineColor(41); + EXPH->AddNodeOverlap(bBlock,1,new TGeoTranslation(x_pmt[detkey], y_pmt[detkey], z_pmt[detkey])); + detkey_to_node.insert(std::pair(detkey, N++)); + } + + + // ------------------------------------------------------------- + // --- Read in MRD PMTs ---------------------------------------- + // ------------------------------------------------------------- + //-- Code based on UserTools/EventDisplay/EventDisplay.cpp + Log("MuonFitter Tool: Adding MRD PMTs to 3D geoemtry", v_debug, verbosity); + for (std::map::iterator it = Detectors->at("MRD").begin(); it != Detectors->at("MRD").end(); ++it) + { + Detector *amrdpmt = it->second; + unsigned long detkey = it->first; + unsigned long chankey = amrdpmt->GetChannels()->begin()->first; + Paddle *mrdpaddle = (Paddle *)geom->GetDetectorPaddle(detkey); + + //-- Retrieve xyz bounds of paddle, orientation, etc + //-- NOTE: so far this has not been used + double xmin = mrdpaddle->GetXmin(); + double xmax = mrdpaddle->GetXmax(); + double ymin = mrdpaddle->GetYmin(); + double ymax = mrdpaddle->GetYmax(); + double zmin = mrdpaddle->GetZmin(); + double zmax = mrdpaddle->GetZmax(); + int orientation = mrdpaddle->GetOrientation(); //0:horizontal,1:vertical + int half = mrdpaddle->GetHalf(); //0 or 1 + int side = mrdpaddle->GetSide(); + + std::vector xdim{xmin,xmax}; + std::vector ydim{ymin,ymax}; + std::vector zdim{zmin,zmax}; + + //-- Store the detkey and the bounds of the MRD paddle + //-- NOTE: mrd_{xyz} is type std::vector> + mrd_x.emplace(detkey,xdim); + mrd_y.emplace(detkey,ydim); + mrd_z.emplace(detkey,zdim); + + //-- Store detkey and paddle center xyz (tank center corrected) + mrd_center_x.emplace(detkey,100.*(mrdpaddle->GetOrigin()).X()-tank_center_x); + mrd_center_y.emplace(detkey,100.*(mrdpaddle->GetOrigin()).Y()-tank_center_y); + mrd_center_z.emplace(detkey,100.*(mrdpaddle->GetOrigin()).Z()-tank_center_z); + + + //-- ANNIE in 3D: drawing MRD + if (draw3d_mrd) + { + Position position_MRD = mrdpaddle->GetOrigin(); + sprintf(blockName,"mrd_pmt%lu",detkey); + bBlock = ageom->MakeBox(blockName, Iron, (xmax-xmin)*100., (ymax-ymin)*100., (zmax-zmin)*100.); + bBlock->SetLineColor(16); + EXPH->AddNodeOverlap(bBlock,detkey,new TGeoTranslation(100.*position_MRD.X()-tank_center_x, 100.*position_MRD.Y()-tank_center_y, 100.*position_MRD.Z()-tank_center_z)); + detkey_to_node.insert(std::pair(detkey, N++)); + + //-- QA: Check detkey_to_node map + if (verbosity > v_debug) + { + std::cout << " [debug] blockName: " << blockName << std::endl; + std::cout << " [debug] detkey_to_node[detkey]: " << detkey_to_node[detkey] << std::endl; + } + } + } + + // ------------------------------------------------------------ + // --- Read in FMV PMTs --------------------------------------- + // ------------------------------------------------------------ + //-- Code based on UserTools/EventDisplay/EventDisplay.cpp + Log("MuonFitter Tool: Adding FMV PMTs to 3D geoemtry", v_debug, verbosity); + for (std::map::iterator it = Detectors->at("Veto").begin(); it != Detectors->at("Veto").end(); ++it) + { + Detector *avetopmt = it->second; + unsigned long detkey = it->first; + unsigned long chankey = avetopmt->GetChannels()->begin()->first; + Paddle *vetopaddle = (Paddle *)geom->GetDetectorPaddle(detkey); + + double xmin = vetopaddle->GetXmin(); + double xmax = vetopaddle->GetXmax(); + double ymin = vetopaddle->GetYmin(); + double ymax = vetopaddle->GetYmax(); + double zmin = vetopaddle->GetZmin(); + double zmax = vetopaddle->GetZmax(); + + //-- ANNIE in 3D: drawing FMV + if (draw3d_fmv) + { + Position position_FMV = vetopaddle->GetOrigin(); + sprintf(blockName,"fmv_pmt%lu",detkey); + bBlock = ageom->MakeBox(blockName, Iron, (xmax-xmin)*100., (ymax-ymin)*100., (zmax-zmin)*100.); + bBlock->SetLineColor(20); + EXPH->AddNodeOverlap(bBlock,detkey,new TGeoTranslation(100.*position_FMV.X()-tank_center_x, 100.*position_FMV.Y()-tank_center_y, 100.*position_FMV.Z()-tank_center_z)); + detkey_to_node.insert(std::pair(detkey, N++)); + + //-- QA: Check detkey_to_node map + if (verbosity > v_debug) + { + std::cout << " [debug] blockName: " << blockName << std::endl; + std::cout << " [debug] detkey_to_node[detkey]: " << detkey_to_node[detkey] << std::endl; + } + } + } + + //-- ANNIE in 3D: Set max number of nodes + maxN = N; + Log("MuonFitter Tool: Number of nodes in 3D geometry: " + std::to_string(maxN), v_debug, verbosity); + + + //-- Save 3D plots + ageom->CloseGeometry(); //close 3d geometry + EXPH->SetVisibility(0); + if (plot3d) + { + canvas_3d = new TCanvas("canvas_3d", "3D Event Display", 800, 600); + canvas_3d->cd(1); + EXPH->Draw(); + canvas_3d->Modified(); + canvas_3d->Update(); + } + + // ------------------------------------------------------------ + // --- Create txt files for separate analyses ----------------- + // ------------------------------------------------------------ + //-- Save start & stop vertices to file; Save (ai,eta) values + //std::string pos_fname = "posFile.txt"; + //pos_file.open(pos_fname.c_str()); + //pos_file << "##evnum,startX,startY,startZ,stopX,stopY,stopZ" << std::endl; + //std::string pos_fname = "ev_ai_eta.txt"; + std::string pos_fname = aiEtaFile.c_str(); + pos_file.open(pos_fname.c_str(), std::ostream::app); + if (!pos_file) + { + std::cout << " [pos_file] File " << pos_fname << " does not exist! Creating now.." << std::endl; + pos_file.open(pos_fname.c_str()); + pos_file << "##ev_id,cluster_time,ai,eta" << std::endl; + } + + //-- Save avg eta to left and right of true tank track length + if (!isData) + { + truetrack_file.open("true_track_len.txt", std::ostream::app); + if (!truetrack_file) + { + std::cout << " [debug] true_track_len.txt does not exist! Creating now..." << std::endl; + truetrack_file.open("true_track_len.txt"); + truetrack_file << "#event_id,true_track_len,left_avg,right_avg" << std::endl; + } + } + + + //-- Save info about events with Ediff > 200 MeV + if (!isData) + { + lg_ediff_file.open("lg_ediff.txt", std::ostream::app); + if (!lg_ediff_file) + { + std::cout << "File lg_ediff.txt does not exist! Creating now..." << std::endl; + lg_ediff_file.open("lg_ediff.txt"); + lg_ediff_file << "##event_id,ediff,pions,tanktrackF,tanktrackT,mrdtrackF,mrdtrackT,muonEF,muonET" << std::endl; + } + } + + // ------------------------------------------------------------ + // --- Load vertex fits (RECO MODE ONLY) ---------------------- + // ------------------------------------------------------------ + if (reco_mode) + { + if (this->FileExists(tankTrackFitFile)) + { + //-- Load event part, number and track fit + std::cout << "MuonFitter Tool: Loading tank track fits from " << tankTrackFitFile << std::endl; + this->LoadTankTrackFits(); + } + else + { + Log("MuonFitter Tool: File for tank track fit does not exist! Continuing tool NOT in RECO MODE.", v_error, verbosity); + reco_mode = false; + } + } + + Log("MuonFitter Tool: Initialization complete", v_debug, verbosity); + + return true; +} + + +bool MuonFitter::Execute(){ + Log("MuonFitter Tool: Executing", v_debug, verbosity); + + //-- Retrieve ANNIEEvent + int eventExists = m_data->Stores.count("ANNIEEvent"); + if (!eventExists) + { + Log("MuonFitter Tool: No ANNIEEvent store!", v_error, verbosity); + return false; + } + + // ------------------------------------------------------------ + // --- Reset variables ---------------------------------------- + // ------------------------------------------------------------ + this->ResetVariables(); + + bool drawEvent = false; //-- Make graphs for this event (e.g. ev displays, eta vs ai) + + gr_eta_ai->Set(0); + gr_running_avg->Set(0); + + if (h_tzero) h_tzero->Delete(); + h_tzero = new TH1D("h_tzero", "t0", 60, -15, 15); + h_tzero->GetXaxis()->SetTitle("[ns]"); + + //-- Initialize tank track length and muon vertex to be saved in + //-- CStore for downstream tools + Position dummy_vtx(-888, -888, -888); + m_data->CStore.Set("FittedTrackLengthInWater", -888.); + m_data->CStore.Set("FittedMuonVertex", dummy_vtx); + m_data->CStore.Set("RecoMuonKE", -888.); + m_data->CStore.Set("NLyrs", -888); + + + // ------------------------------------------------------------- + // --- Get event info (DATA) ----------------------------------- + // ------------------------------------------------------------- + int get_ok = false; + if (isData) + { + get_ok = m_data->Stores["ANNIEEvent"]->Get("EventNumber", evnum); + std::cout << "MuonFitter Tool: Working on event " << evnum << std::endl; + if (not get_ok) { Log("MuonFitter Tool: Error retrieving EventNumber from ANNIEEvent!", v_error, verbosity); return false; } + get_ok = m_data->Stores["ANNIEEvent"]->Get("RunNumber", runnumber); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving RunNumber from ANNIEEvent!", v_error, verbosity); return false; } + get_ok = m_data->Stores["ANNIEEvent"]->Get("PartNumber", partnumber); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving PartNumber from ANNIEEvent!", v_error, verbosity); partnumber = -1; } + } + + // ------------------------------------------------------------- + // --- Get event info (MC) ------------------------------------- + // ------------------------------------------------------------- + TVector3 trueTrackDir; + RecoVertex *truevtx = 0; + if (!isData) + { + get_ok = m_data->Stores["ANNIEEvent"]->Get("MCParticles", mcParticles); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving MCParticles from ANNIEEvent!", v_error, verbosity); return false; } //<< needed to retrieve true vertex and direction + get_ok = m_data->Stores["ANNIEEvent"]->Get("MCEventNum", mcevnum); + std::cout << "MuonFitter Tool: Working on event " << mcevnum << std::endl; + if (not get_ok) { Log("MuonFitter Tool: Error retrieving MCEventNum from ANNIEEvent!", v_error, verbosity); return false; } + get_ok = m_data->Stores["ANNIEEvent"]->Get("MCTriggernum", mctrignum); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving MCTriggernum from ANNIEEvent!", v_error, verbosity); return false; } + get_ok = m_data->Stores["ANNIEEvent"]->Get("MCFile", mcFile); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving MCFile from ANNIEEvent!", v_error, verbosity); mcFile = "-1"; } + + //-- Extract file part number + //-- NOTE: event numbers weren't incrementing properly... + std::string delim = "."; + std::string end = ".root"; + std::string tmp_str = mcFile.erase(mcFile.rfind(delim), end.length()); + partnumber = stoi(tmp_str.substr(0, tmp_str.find(delim))); + + /*for(unsigned int particlei=0; particleisize(); particlei++){ + + MCParticle aparticle = mcParticles->at(particlei); + std::string logmessage = "EventDisplay tool: Particle # "+std::to_string(particlei)+", parent ID = "+std::to_string(aparticle.GetParentPdg())+", pdg = "+std::to_string(aparticle.GetPdgCode())+", flag = "+std::to_string(aparticle.GetFlag()); + Log(logmessage,v_message,verbosity); + }*/ + + //-- Get RecoEvent variables + get_ok = m_data->Stores["RecoEvent"]->Get("TrueVertex", truevtx); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving TrueVertex from RecoEvent Store!", v_error, verbosity); return false; } + trueVtxX = truevtx->GetPosition().X(); //already in cm + trueVtxY = truevtx->GetPosition().Y(); //and center corrected + trueVtxZ = truevtx->GetPosition().Z(); + trueVtxTime = truevtx->GetTime(); + trueDirX = truevtx->GetDirection().X(); + trueDirY = truevtx->GetDirection().Y(); + trueDirZ = truevtx->GetDirection().Z(); + trueTrackDir = TVector3(trueDirX,trueDirY,trueDirZ).Unit(); + + trueAngleRad = TMath::ACos(trueDirZ); //calculated like this in other tools + trueAngleDeg = trueAngleRad/(TMath::Pi()/180.); + h_truevtx_angle->Fill(trueAngleDeg); + + RecoVertex *truestopvtx = 0; + get_ok = m_data->Stores["RecoEvent"]->Get("TrueStopVertex", truestopvtx); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving TrueStopVertex from RecoEvent Store!", v_error, verbosity); return false; } + trueStopVtxX = truestopvtx->GetPosition().X(); //already in cm + trueStopVtxY = truestopvtx->GetPosition().Y(); + trueStopVtxZ = truestopvtx->GetPosition().Z(); + + get_ok = m_data->Stores["RecoEvent"]->Get("TrueTrackLengthInWater", trueTrackLengthInWater); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving TrueTrackLengthInWater from RecoEvent Store!", v_error, verbosity); trueTrackLengthInWater = -1; } + trueTrackLengthInWater = trueTrackLengthInWater*100.; //convert to cm + h_true_tanktrack_len->Fill(trueTrackLengthInWater); + + get_ok = m_data->Stores["RecoEvent"]->Get("TrueTrackLengthInMRD", trueTrackLengthInMRD); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving TrueTrackLengthInMRD from RecoEvent Store!", v_error, verbosity); trueTrackLengthInMRD = -1; } + + get_ok = m_data->Stores["RecoEvent"]->Get("TrueMuonEnergy", trueMuonEnergy); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving TrueMuonEnergy from RecoEvent Store!", v_error, verbosity); trueMuonEnergy = -1; } + + get_ok = m_data->Stores["RecoEvent"]->Get("NRings", nrings); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving NRings, true from RecoEvent!", v_error, verbosity); } + get_ok = m_data->Stores["RecoEvent"]->Get("IndexParticlesRing", particles_ring); + if (not get_ok) { Log("MuonFitter Tool: Error retrieving IndexParticlesRing, true from RecoEvent!", v_error, verbosity); } + } + + //-- Get ev_id for matching + std::stringstream ev_id; + ev_id << "p" << partnumber << "_"; + if (isData) ev_id << evnum; + else ev_id << mcevnum; + std::cout << "MuonFitter Tool: Working on event " << ev_id.str() << std::endl; + + if (reco_mode) + { + //-- Skip events that weren't fitted to make processing faster + std::map>::iterator it = m_tank_track_fits.find(ev_id.str()); + if (it == m_tank_track_fits.end()) return true; + } + + // ------------------------------------------------------------ + // --- Get event info (both) ---------------------------------- + // ------------------------------------------------------------ + uint32_t trigword; + get_ok = m_data->Stores.at("ANNIEEvent")->Get("TriggerWord",trigword); + std::cout << " trigword: " << trigword << std::endl; + + + // ------------------------------------------------------------ + // --- CUT: Select beam only events --------------------------- + // ------------------------------------------------------------ + if (trigword != 5) return true; + + + // ------------------------------------------------------------ + // --- Check for particles other than muon (MC ONLY) ---------- + // ------------------------------------------------------------ + bool hasPion = false; + int n_rings = 0; + if (!isData) + { + for (unsigned int mcp_i = 0; mcp_i < mcParticles->size(); mcp_i++) + { + MCParticle aparticle = mcParticles->at(mcp_i); + //-- QA: Check MC evnum and particle PDG code + //std::cout << " [debug] Ev " << mcevnum << ", particle pdg code: " << aparticle.GetPdgCode() << std::endl; + if (std::find(particles_ring.begin(), particles_ring.end(), mcp_i) != particles_ring.end()) + { + //-- Use number of rings to determine if there are particles other than muon + ++n_rings; + } + } + std::cout << " [debug] n_rings (my counter): " << n_rings << std::endl; + if (n_rings > 1) hasPion = true; //might include other particles + } + if (hasPion) std::cout << " [debug] has pion / other particle!" << std::endl; + + + // ------------------------------------------------------------ + // --- CUT: Check for FMV hits -------------------------------- + // ------------------------------------------------------------ + get_ok = m_data->Stores["ANNIEEvent"]->Get("TDCData", tdcdata); //'TDCData' for both data and MC + if (!get_ok) { Log("MuonFitter Tool: No TDCData object in ANNIEEvent! Abort!", v_error, verbosity); return true; } + + bool passVetoCut = false; + get_ok = m_data->Stores.at("RecoEvent")->Get("NoVeto", passVetoCut); + if (!get_ok) { Log("MuonFitter Tool: Could not retrieve NoVeto variable", v_error, verbosity); } + + //-- Skip event if there is a veto hit + //-- NOTE: Will let EventSelector tool determine whether FMV was hit + //-- since it uses timing information + if (!passVetoCut) + { + Log("MuonFitter Tool: Found FMV/Veto hit!", v_debug, verbosity); + return true; + } + + + // ------------------------------------------------------------ + // --- CUT: Check for MRD tracks ------------------------------ + // ------------------------------------------------------------ + //get_ok = m_data->Stores["ANNIEEvent"]->Get("MRDTriggerType", mrdTriggerType); //XXX:care about this? not defined yet + get_ok = m_data->Stores["MRDTracks"]->Get("NumMrdTracks", numTracksInEv); + get_ok = m_data->Stores["MRDTracks"]->Get("MRDTracks", mrdTracks); //XXX:might need MC version + + if (!get_ok) { Log("MuonFitter Tool: Couldn't retrieve MRD tracks info. Did you run TimeClustering/FindMRDTracks first?", v_debug, verbosity); return false; } + + //-- Skip event if num tracks not equal to 1 in MRD + if (numTracksInEv != 1) + { + Log("MuonFitter Tool: More than 1 reconstructed track found!", v_debug, verbosity); + return true; + } + + + // ------------------------------------------------------------ + // --- Get MRD track params ----------------------------------- + // ------------------------------------------------------------ + double reco_mrd_track = 0.; + double nlyrs_mrd_track = 0.; + double conn_dots_mrd_track = 0.; + bool isMrdStopped; + bool isMrdPenetrating; + bool isMrdSideExit; + + for(int track_i = 0; track_i < numTracksInEv; track_i++) + { + BoostStore* thisTrackAsBoostStore = &(mrdTracks->at(track_i)); + + thisTrackAsBoostStore->Get("StartVertex", mrdStartVertex); //m + thisTrackAsBoostStore->Get("StopVertex", mrdStopVertex); //m + thisTrackAsBoostStore->Get("MrdEntryPoint", mrdEntryPoint); //m + thisTrackAsBoostStore->Get("TankExitPoint", tankExitPoint); //m + thisTrackAsBoostStore->Get("StartTime", mrdStartTime); + thisTrackAsBoostStore->Get("TrackAngle", trackAngleRad); + thisTrackAsBoostStore->Get("TrackAngleError", trackAngleError); + thisTrackAsBoostStore->Get("PenetrationDepth", penetrationDepth); + thisTrackAsBoostStore->Get("NumLayersHit", numLayersHit); + thisTrackAsBoostStore->Get("LayersHit", LayersHit); + thisTrackAsBoostStore->Get("PMTsHit", MrdPMTsHit); + thisTrackAsBoostStore->Get("EnergyLoss", mrdEnergyLoss); + thisTrackAsBoostStore->Get("EnergyLossError", mrdEnergyLossError); + thisTrackAsBoostStore->Get("IsMrdStopped", isMrdStopped); + thisTrackAsBoostStore->Get("IsMrdPenetrating", isMrdPenetrating); + thisTrackAsBoostStore->Get("IsMrdSideExit", isMrdSideExit); + + //-- Calculate MRD track length using MRD track start and stop + //-- NOTE: this was done in other tools + reco_mrd_track = sqrt(pow((mrdStopVertex.X()-mrdStartVertex.X()),2)+pow(mrdStopVertex.Y()-mrdStartVertex.Y(),2)+pow(mrdStopVertex.Z()-mrdStartVertex.Z(),2)); + + //-- Do some conversions + reco_mrd_track = reco_mrd_track*100.; //convert to cm + penetrationDepth = penetrationDepth*100.; + trackAngleDeg = trackAngleRad*180./TMath::Pi(); + + //-- QA: Check MRD track variables + std::cout << " [debug] mrdStartVertex: " << mrdStartVertex.X() << "," << mrdStartVertex.Y() << "," << mrdStartVertex.Z() << std::endl; + std::cout << " [debug] mrdStopVertex: " << mrdStopVertex.X() << "," << mrdStopVertex.Y() << "," << mrdStopVertex.Z() << std::endl; + std::cout << " [debug] tankExitPoint: " << tankExitPoint.X() << "," << tankExitPoint.Y() << "," << tankExitPoint.Z() << std::endl; + std::cout << " [debug] mrdEntryPoint: " << mrdEntryPoint.X() << "," << mrdEntryPoint.Y() << "," << mrdEntryPoint.Z() << std::endl; + std::cout << " [debug] mrdStartTime: " << mrdStartTime << std::endl; + std::cout << " [debug] trackAngleRad: " << trackAngleRad << std::endl; + std::cout << " [debug] penetrationDepth: " << penetrationDepth << std::endl; + std::cout << " [debug] reco_mrd_track (ANNIE tools): " << reco_mrd_track << std::endl; + std::cout << " [debug] mrdEnergyLoss: " << mrdEnergyLoss << std::endl; + std::cout << " [debug] isMrdStopped: " << isMrdStopped << std::endl; + std::cout << " [debug] isMrdPenetrating: " << isMrdPenetrating << std::endl; + std::cout << " [debug] isMrdSideExit: " << isMrdSideExit << std::endl; + std::cout << " [debug] numLayersHit: " << numLayersHit << std::endl; + std::cout << " [debug] LayersHit.size(): " << LayersHit.size() << std::endl; + std::cout << " [debug] MrdPMTsHit.size(): " << MrdPMTsHit.size() << std::endl; + + } //-- Done retrieving MRD track params + + //-- QA: Check the values of LayersHit vector + for (int i = 0; i < LayersHit.size(); ++i) + { + std::cout << " [debug] LayersHit at " << i << ": " << LayersHit.at(i) << std::endl; + } //-- returns numbers from 0-11 (layer number ordered) + + //-- Histogram number of layers traversed + h_num_mrd_layers->Fill(LayersHit.size()); + + + //-- QA: Check the values of MrdPMTsHit vector + for (int i = 0; i < MrdPMTsHit.size(); ++i) + { + std::cout << " [debug] MrdPMTsHit at " << i << ": " << MrdPMTsHit.at(i) << std::endl; + } //-- returns unsorted list of MRD detkeys + + + //-- Use num layers to determine amount of track length in iron + //-- NOTE: this is an "effective" track length + //-- (5cm)*(num layers)/cos(theta) << 5cm is thickness of iron slab + nlyrs_mrd_track = 5.*(LayersHit.size()+0.5)/abs(TMath::Cos(trackAngleRad)); + + //-- Compare MRD tracks reconstructed w/ ANNIE methods and num layers + double pcaAngleRad = this->PCATrackAngle(MrdPMTsHit); + double pcaAngleDeg = pcaAngleRad*180./TMath::Pi(); + std::cout << " [debug] PCA angle (rad): " << pcaAngleRad << std::endl; + std::cout << " [debug] PCA angle (deg): " << pcaAngleDeg << std::endl; + h_pca_angle->Fill(pcaAngleDeg); + + //-- Update nlyrs_mrd_track so that it uses the PCA-reconstructed track angle + double pca_mrd_track = 5.*(LayersHit.size()+0.5)/abs(TMath::Cos(pcaAngleRad)); + std::cout << " [debug] PCA nlyrs_mrd_track: " << pca_mrd_track << std::endl; + if (use_pca) { nlyrs_mrd_track = pca_mrd_track; } + + + //TODO:Move to separate function + //-- Determine MRD track length by "connecting the dots" + conn_dots_mrd_track = this->MRDConnectDots(MrdPMTsHit); + std::cout << " [debug] FINAL conn_dots_mrd_track: " << conn_dots_mrd_track << std::endl; + std::cout << " [debug] FINAL nlyrs_mrd_track: " << nlyrs_mrd_track << std::endl; + + + //-- Select for tracks that end in MRD + if (!isMrdStopped) + { + std::cout << " MuonFitter Tool: MUON DID NOT STOP IN MRD. Skipping..." << std::endl; + return true; + } + + if (isMrdSideExit) //<< Not working + { + std::cout << " MuonFitter Tool: MUON EXITTED SIDE OF MRD. Skipping..." << std::endl; + //return true; + } + + + // ------------------------------------------------------------ + // --- Now look at tank exit and MRD points ------------------- + // ------------------------------------------------------------ + double tankExitPointX = 100.*tankExitPoint.X()-tank_center_x; + double tankExitPointY = 100.*tankExitPoint.Y()-tank_center_y; + double tankExitPointZ = 100.*tankExitPoint.Z()-tank_center_z; + TVector3 tankExit(tankExitPointX, tankExitPointY, tankExitPointZ); + h_tankExitX->Fill(tankExitPointX); + h_tankExitY->Fill(tankExitPointY); + h_tankExitZ->Fill(tankExitPointZ); + + double mrdEntryPointX = 100.*mrdEntryPoint.X()-tank_center_x; + double mrdEntryPointY = 100.*mrdEntryPoint.Y()-tank_center_y; + double mrdEntryPointZ = 100.*mrdEntryPoint.Z()-tank_center_z; + + //-- Create vectors for MRD start/stop + TVector3 mrdStart(100.*mrdStartVertex.X()-tank_center_x, 100.*mrdStartVertex.Y()-tank_center_y, 100.*mrdStartVertex.Z()-tank_center_z); //cm + TVector3 mrdStop(100.*mrdStopVertex.X()-tank_center_x, 100.*mrdStopVertex.Y()-tank_center_y, 100.*mrdStopVertex.Z()-tank_center_z); + //-- Get track direction from MRD start/stop + TVector3 mrdTrackDir = (mrdStop - mrdStart).Unit(); + //-- QA:Compare angle from mrdTrackDir to trackAngleRad + std::cout << " [debug] mrdTrackDir, trackAngleRad: " << mrdTrackDir.Angle(TVector3(0,0,1)) << "," << trackAngleRad << std::endl; + + //-- ANNIE in 3D: Add mrdStart and mrdStop to 3D geo + if (isData) sprintf(blockName,"mrdStart_%u",evnum); + else sprintf(blockName,"mrdStart_%u",mcevnum); + bBlock = ageom->MakeSphere(blockName, Iron, 0,1.5,0,180,0,360); + bBlock->SetLineColor(8); + EXPH->AddNodeOverlap(bBlock,69,new TGeoTranslation(mrdStart.X(), mrdStart.Y(), mrdStart.Z())); + N++; + + if (isData) sprintf(blockName,"mrdStop_%u",evnum); + else sprintf(blockName,"mrdStop_%u",mcevnum); + bBlock = ageom->MakeSphere(blockName, Iron, 0,1.5,0,180,0,360); + bBlock->SetLineColor(2); + EXPH->AddNodeOverlap(bBlock,69,new TGeoTranslation(mrdStop.X(), mrdStop.Y(), mrdStop.Z())); + N++; + + + // ------------------------------------------------------------ + // --- Calculate several vertex candidates -------------------- + // ------------------------------------------------------------ + //-- This is kind of like an angle cut + std::vector vtxCandidates; + int c = 1; + bool outsideTank = false; + bool inFV = false; //FV around tank center + while (!outsideTank) + { + TVector3 v = mrdStart - c*10.*mrdTrackDir; //cm + if (c <= 5) { vtxCandidates.push_back(v); } //get into tank first + else if (c > 5) + { + //-- Check that vtx is contained in tank cylinder + if ((pow(v.X(),2) + pow(v.Z(),2) >= pow(tank_radius*100.,2)) || (v.Y() > tank_height*100.) || (v.Y() < -tank_height*100.)) + { + outsideTank = true; + } + else { vtxCandidates.push_back(v); } + + //-- Check if any vtx intersects FV around center + if ((v.Y() > -100.)&&(v.Y() < 100.)&&(100. > std::sqrt(v.X()*v.X() + v.Z()*v.Z()))) + { + inFV = true; + } + } + c++; + } //-- Done calculating vtx candidates + + //-- CUT: Make sure track originates in tank + if (!inFV) + { + std::cout << "MuonFitter Tool: Not in FV!" << std::endl; + return true; + } + + std::cout << "MuonFitter Tool: Num of vtxCandidates: " << vtxCandidates.size() << std::endl; + + //-- Check distance btwn vertices to make sure it's 10cm +/* for (int i = 1; i < vtxCandidates.size(); ++i) + { + TVector3 v0(vtxCandidates.at(i-1)); + TVector3 v1(vtxCandidates.at(i)); + double d = TMath::Sqrt(pow(v1.X()-v0.X(),2) + pow(v1.Y()-v0.Y(),2) + pow(v1.Z()-v0.Z(),2)); + std::cout << " [debug] distance btwn candidate vtx: " << d << std::endl; + } //-- yes, it's 10cm */ + + + // ------------------------------------------------------------ + // --- Load Tank Clusters ------------------------------------- + // ------------------------------------------------------------ + bool has_clusters = false; + if (isData) { has_clusters = m_data->CStore.Get("ClusterMap", m_all_clusters); } + else { has_clusters = m_data->CStore.Get("ClusterMapMC", m_all_clusters_MC); } + if (!has_clusters) + { + std::cout << " MuonFitter Tool: No clusters found in CStore! Did you run ClusterFinder tool before this?" << std::endl; + return false; + } + + has_clusters = m_data->CStore.Get("ClusterMapDetkey", m_all_clusters_detkeys); //same for data and mc + if (!has_clusters) + { + std::cout << " MuonFitter Tool: No cluster detkeys found in CStore! Did you run ClusterFinder tool before this?" << std::endl; + return false; + } + + Log("MuonFitter Tool: Accessing pairs in all_clusters map", v_debug, verbosity); + int cluster_num = 0; + int cluster_size = 0; + if (isData) { cluster_size = (int)m_all_clusters->size(); } + else { cluster_size = (int)m_all_clusters_MC->size(); } + std::cout << " [debug] cluster_size (num clusters in event): " << cluster_size << std::endl; + + + // ------------------------------------------------------------ + // --- Find main cluster when more than one cluster ----------- + // ------------------------------------------------------------ + //-- Max charge and in [0..2000ns] time window + //-- Code based on UserTools/EventDisplay/EventDisplay.cpp + bool found_muon = false; + double main_cluster_time = 0; + double main_cluster_charge = 0; + double main_cluster_hits = 0; + + //bool found_muon = false; + double earliest_hittime = 0; + std::vector v_cluster_times; + if (isData) + { + for (std::pair>&& apair : *m_all_clusters) + { + std::vector& cluster_hits = apair.second; + double temp_time = 0; + double temp_charge = 0; + int temp_hits = 0; + + for (int ihit = 0; ihit < cluster_hits.size(); ihit++) + { + temp_hits++; + temp_time += cluster_hits.at(ihit).GetTime(); + temp_charge += cluster_hits.at(ihit).GetCharge(); + + //XXX: check single cluster hit positions + int chankey = cluster_hits.at(ihit).GetTubeId(); + std::map::iterator it = ChannelKeyToSPEMap.find(chankey); + if (it != ChannelKeyToSPEMap.end()) + { + Detector* this_detector = geom->ChannelToDetector(chankey); + unsigned long detkey = this_detector->GetDetectorID(); //chankey same as detkey + } + } + if (temp_hits > 0) temp_time /= temp_hits; //mean time + std::cout << " [debug] temp_time [ns]: " << temp_time << std::endl; + if (temp_time > 2000. || temp_time < 0.) continue; // not in time window + if (temp_charge > main_cluster_charge) + { + found_muon = true; + main_cluster_charge = temp_charge; //sum of all charges + main_cluster_time = apair.first; //same as mean time above + main_cluster_hits = cluster_hits.size(); + } + } + } + else //is MC + { + for (std::pair>&& apair : *m_all_clusters_MC) + { + std::vector& cluster_hits_MC = apair.second; + double temp_time = 0; + double temp_charge = 0; + int temp_hits = 0; + std::vector v_cluster_hits; + + for (int ihit = 0; ihit < cluster_hits_MC.size(); ihit++) + { + temp_hits++; + v_cluster_hits.push_back(cluster_hits_MC.at(ihit).GetTime()); + temp_time += cluster_hits_MC.at(ihit).GetTime(); + temp_charge += cluster_hits_MC.at(ihit).GetCharge(); + + //XXX: check single cluster hit positions + int chankey = cluster_hits_MC.at(ihit).GetTubeId(); + std::map::iterator it = ChannelKeyToSPEMap.find(chankey); + if (it != ChannelKeyToSPEMap.end()) + { + Detector* this_detector = geom->ChannelToDetector(chankey); + unsigned long detkey = this_detector->GetDetectorID(); //chankey same as detkey + + //-- QA: Check if coordinates are the same. If so, just use existing map + Position det_pos = this_detector->GetDetectorPosition(); + } + } + + //-- Sort cluster hit times to determine diff btwn earliest and latest times + sort(v_cluster_hits.begin(), v_cluster_hits.end()); + std::cout << " [debug] all MC cluster hit times (sorted): "; + for (int ct = 0; ct < v_cluster_hits.size(); ++ct) + { + std::cout << v_cluster_hits.at(ct) << ","; + } + std::cout << std::endl; + h_clusterhit_timespread->Fill(v_cluster_hits.at(v_cluster_hits.size()-1)-v_cluster_hits.at(0)); + + if (temp_hits > 0) temp_time /= temp_hits; //mean time + v_cluster_times.push_back(temp_time); + if (temp_time > 2000. || temp_time < 0.) continue; // not in time window + if (temp_charge > main_cluster_charge) + { + found_muon = true; + main_cluster_charge = temp_charge; + main_cluster_time = apair.first; //same as mean time above + main_cluster_hits = cluster_hits_MC.size(); + earliest_hittime = v_cluster_hits.at(0); + std::cout << " [debug] earliest_hittime: " << earliest_hittime << std::endl; + } + } + } + //-- QA: Check cluster times, main cluster time, charge, num hits + std::cout << " [debug] all cluster times: "; + for (int ct = 0; ct < v_cluster_times.size(); ++ct) + { + std::cout << v_cluster_times.at(ct) << ","; + } + std::cout << std::endl; + std::cout << " [debug] main_cluster_time [ns]: " << main_cluster_time << std::endl; + std::cout << " [debug] main_cluster_charge [nC/pe]: " << main_cluster_charge << std::endl; + std::cout << " [debug] main_cluster_hits [#]: " << main_cluster_hits << std::endl; + + + // ------------------------------------------------------------ + // --- Check coincidence tank and MRD activity ---------------- + // ------------------------------------------------------------ + //-- Select events that are within +/- 50ns of PMTMRDOffset + //-- in data: PMTMRDOffset ~745ns; in MC: PMTMRDOffset = 0 + //-- Code based on UserTools/EventSelector/EventSelector.cpp + double tankmrd_tdiff = mrdStartTime - main_cluster_time; + std::cout << " MuonFitter Tool: Time difference between tank and MRD activity [ns]: " << tankmrd_tdiff << std::endl; + if ((tankmrd_tdiff > PMTMRDOffset-50) && (tankmrd_tdiff < PMTMRDOffset+50)) + { + std::cout << "MuonFitter Tool: Main cluster is coincident with MRD cluster!" << std::endl; + } + else + { + found_muon = false; + std::cout << "MuonFitter Tool: Main cluster is NOT coincident with MRD cluster! " + << "Tank cluster and MRD cluster times are too different." << std::endl; + } + + //-- Save num hits and charge of main/max cluster + //-- NOTE: in MC, charge is given in PE + //h_total_pe_hits->Fill(main_cluster_hits, main_cluster_charge); + + + // ------------------------------------------------------------ + // --- FOUND MUON CANDIDATE ----------------------------------- + // ------------------------------------------------------------ + double max_eta = 0.; //for plotting + + if (!reco_mode) + { + if (found_muon) + { + std::cout << "MuonFitter Tool: Found muon candidate! Event: p" << partnumber << "_"; + if (isData) std::cout << evnum; + else std::cout << mcevnum; + std::cout << std::endl; + drawEvent = true; + + //-- Save nhits, cluster_charge to txt files + //-- TODO: get rid of this + /*pehits_file << "p" << partnumber << "_"; + if (isData) pehits_file << evnum; + else pehits_file << mcevnum; + pehits_file << "," << main_cluster_hits << "," << main_cluster_charge << std::endl;*/ + + //-- Save main cluster charge + h_clusterPE->Fill(main_cluster_charge); + + + // ------------------------------------------------------------ + // --- Load MAIN cluster hits and detkeys --------------------- + // ------------------------------------------------------------ + std::vector cluster_hits; + std::vector cluster_hits_MC; + if (isData) { cluster_hits = m_all_clusters->at(main_cluster_time); } + else { cluster_hits_MC = m_all_clusters_MC->at(main_cluster_time); } + std::vector cluster_detkeys = m_all_clusters_detkeys->at(main_cluster_time); + std::vector x_hits, y_hits, z_hits; + + // ------------------------------------------------------------ + // --- Ring Imaging: Calculate ai for each PMT ---------------- + // ------------------------------------------------------------ + std::map charge; //-- used for making charge cuts at PMT level + std::map> hittime; //-- used for t0 calc + std::map> m_PE_ai; + std::map> m_fpmt_ai; + + charge.clear(); + hittime.clear(); + for (unsigned long detkey = 332; detkey < 464; ++detkey) + { + charge.emplace(detkey, 0.); + hittime.emplace(detkey, std::vector{-99.}); + } + + //-- First collect all the charges seen by the PMT in the cluster + if (isData) + { + for (int i = 0; i < (int)cluster_hits.size(); ++i) + { + //for each cluster hit + int chankey = cluster_hits.at(i).GetTubeId(); + std::map::iterator it = ChannelKeyToSPEMap.find(chankey); + if (it != ChannelKeyToSPEMap.end()) + { + Detector* this_detector = geom->ChannelToDetector(chankey); + unsigned long detkey = this_detector->GetDetectorID(); //chankey same as detkey + double hit_charge = cluster_hits.at(i).GetCharge(); + double hit_PE = hit_charge / ChannelKeyToSPEMap.at(chankey); + double hit_time = cluster_hits.at(i).GetTime(); + hittime[detkey].push_back(hit_time); + + // keep track of total charge seen by each PMT + charge[detkey] += hit_PE; + + } //end if ChannelKeyToSPEMap + } //end cluster_hits loop + } + else //is MC + { + for (int i = 0; i < (int)cluster_hits_MC.size(); ++i) + { + //for each cluster hit + int chankey = cluster_hits_MC.at(i).GetTubeId(); + std::map::iterator it = ChannelKeyToSPEMap.find(chankey); + if (it != ChannelKeyToSPEMap.end()) + { + Detector* this_detector = geom->ChannelToDetector(chankey); + unsigned long detkey = this_detector->GetDetectorID(); //chankey same as detkey + double hit_PE = cluster_hits_MC.at(i).GetCharge(); //charge in MC is in PE + double hit_charge = hit_PE * ChannelKeyToSPEMap.at(chankey); + double hit_time = cluster_hits_MC.at(i).GetTime(); + hittime[detkey].push_back(hit_time); + + // keep track of total charge seen by each PMT + charge[detkey] += hit_PE; + + } //end if ChannelKetToSPEMap + } //end cluster_hits_MC loop + } + + //-- Now go through charge, hittime maps + int gi = 0; //counter for TGraph + int nhits = 0, nhits_incone = 0; + double totalpe = 0, totalpe_incone = 0; + std::vector v_tzero; + + for (unsigned long detkey = 332; detkey < 464; ++detkey) + { + //-- Get the charge for this PMT + double pmt_PE = charge[detkey]; + + //-- NOTE: there are PMTs w/ 0pe from charge map initialization + if (pmt_PE == 0) continue; + + std::vector v_hittimes = hittime[detkey]; + double pmt_t = 0; + int nhits_pmt = v_hittimes.size(); + std::cout << " [debug] all hit times for detkey " << detkey << ": "; + for (int ht = 0; ht < nhits_pmt; ++ht) { std::cout << v_hittimes.at(ht) << ","; } + std::cout << std::endl; + + //-- Get earliest hit time bc Cherenkov radiation is usu earliest + sort(v_hittimes.begin(), v_hittimes.end()); + pmt_t = v_hittimes.at(0); + if (pmt_t == -99.) pmt_t = v_hittimes.at(1); + std::cout << " MuonFitter Tool: Earliest time for this PMT: " << pmt_t << std::endl; + + + //-- CUT: Skip PMTs in this cluster that don't see enough light + if (pmt_PE < PMTQCut) + { + std::cout << " MuonFitter Tool: SKIPPING charge[" << detkey << "] < " << PMTQCut << "pe: " << charge[detkey] << std::endl; + pmt_PE = 0.; //set PMT charge to 0 + continue; //skip PMT entirely + } + + //-- Keep track of total hits, PE that meet cut in this cluster + nhits += 1; + totalpe += pmt_PE; + + //-- Get position and direction of PMT + double hitX = x_pmt[detkey]; + double hitY = y_pmt[detkey]; + double hitZ = z_pmt[detkey]; + double dirPMTX = x_pmt_dir[detkey]; + double dirPMTY = y_pmt_dir[detkey]; + double dirPMTZ = z_pmt_dir[detkey]; + + TVector3 pmt_dir = TVector3(dirPMTX, dirPMTY, dirPMTZ).Unit(); + + //-- Get vector from tankExitPoint to PMT (Ri) + TVector3 vec_Ri = TVector3(hitX,hitY,hitZ) - tankExit; + double Ri = vec_Ri.Mag(); + h_tankexit_to_pmt->Fill(Ri); + //-- QA: Check that vector was calculated correctly + std::cout << " [debug] hitXYZ: " << hitX << "," << hitY << "," << hitZ << std::endl; + std::cout << " [debug] tankExitXYZ: " << tankExit.X() << "," << tankExit.Y() << "," << tankExit.Z() << std::endl; + std::cout << " [debug] vec_Ri: " << vec_Ri.X() << "," << vec_Ri.Y() << "," << vec_Ri.Z() << std::endl; + std::cout << " [debug] vec_Ri direction: " << vec_Ri.Unit().X() << "," << vec_Ri.Unit().Y() << "," << vec_Ri.Unit().Z() << std::endl; + + //-- Get angle btwn Ri and muon direction (ai) + double ang_alpha = vec_Ri.Angle(-mrdTrackDir); //rad + double ai = Ri * TMath::Sin(ang_alpha) / TMath::Tan(CHER_ANGLE_RAD) + Ri * TMath::Cos(ang_alpha); + h_tanktrack_ai->Fill(ai); + + //-- Get the vector from vertex of ai to the PMT (bi) + TVector3 vec_ai = tankExit - ai*mrdTrackDir; + TVector3 vec_bi = TVector3(hitX,hitY,hitZ) - vec_ai; + double bi = TMath::Sqrt(pow(hitX-vec_ai.X(),2) + pow(hitY-vec_ai.Y(),2) + pow(hitZ-vec_ai.Z(),2)); + //-- QA: Check that vector was calculated correctly + std::cout << " [debug] vec_ai: " << vec_ai.X() << "," << vec_ai.Y() << "," << vec_ai.Z() << std::endl; + std::cout << " [debug] ai: " << ai << std::endl; + std::cout << " [debug] vec_bi: " << vec_bi.X() << "," << vec_bi.Y() << "," << vec_bi.Z() << std::endl; + std::cout << " [debug] bi: " << bi << std::endl; + + + //-- Find angle btwn true vertex and hit (MC ONLY) + //-- not sure what is being done w this rn + if (!isData) + { + TVector3 vec_truevtx_hit = TVector3(hitX,hitY,hitZ) - TVector3(trueVtxX,trueVtxY,trueVtxZ); + double anglePmtTrueVtx = vec_truevtx_hit.Angle(mrdTrackDir)*180./TMath::Pi(); + } + + //-- Get angle btwn vector bi and PMT direction + double psi = vec_bi.Angle(-pmt_dir); //used only to get angle; don't use for magnitude + if (psi > TMath::Pi()/2.) psi = TMath::Pi()-psi; + //-- QA: Check that angle was calculated correctly + //std::cout << " [debug] psi(+), psi(-): " << psi*180./TMath::Pi() << ", " << vec_bi.Angle(pmt_dir)*180./TMath::Pi() << std::endl; + + //-- Calculate the area of PMT & frustum (ring) + double eff_area_pmt = 0.5 * m_pmt_area[detkey] * (1. + TMath::Cos(psi)); // effective area seen by photons from emission point + h_eff_area_pmt->Fill(eff_area_pmt); + double area_frustum = 2. * TMath::Pi() * step_size_ai * Ri; + double f_pmt = eff_area_pmt / area_frustum; //fraction of photocathode of total frustrum (ring) area + h_fpmt->Fill(f_pmt); + + + //-- For each distance (ai) from tank exit point bin, collect the + //-- charges associated w/ this distance + for (int a = 55; a < 500; a+=step_size_ai) + { + if (ai >= a-step_size_ai/2 && ai < a+step_size_ai/2) + { + m_PE_ai[a].push_back(pmt_PE); + m_fpmt_ai[a].push_back(f_pmt); + } + } + + ++gi; + + } //-- Done going through charge[detkey] map + + // ------------------------------------------------------------ + // -- Make eta vs ai (tank track segment) graphs for fitting -- + // ------------------------------------------------------------ + //-- eta represents photon density. In principle, it should be + //-- a high, constant value inside Cherenkov disc, and should + //-- drop off once outside the disc + int j = 0; + double running_avg = 0; + + //-- Go thru ai and PMT area fraction maps and add up fractions + //-- and charges seen at each track segment (ai) + for (auto const &pair: m_fpmt_ai) + { + double total_PE_ai = 0; + double total_fpmt_ai = 0; + for (int e = 0; e < pair.second.size(); ++e) + { + total_fpmt_ai += pair.second.at(e); + total_PE_ai += m_PE_ai[pair.first].at(e); + } + //-- Calculate photon density at this track segment (ai) + double total_eta = total_PE_ai / total_fpmt_ai; + + //-- Used to indicate where highest photon density occurs + if (total_eta > max_eta) max_eta = total_eta; //for plotting + + //-- Plot (ai,eta) pair + gr_eta_ai->SetPoint(j, pair.first, total_eta); + + //-- Save (ev_id,cluster_time,ai,eta) data to txt file for ML scripts + pos_file << "p" << partnumber << "_"; + if (isData) pos_file << evnum; + else pos_file << mcevnum; + pos_file << "," << main_cluster_time << "," << pair.first << "," << total_eta << std::endl; + + //-- Get the overall avg photon density (eta) + avg_eta += total_eta; + + if (j == 0) running_avg = avg_eta; + else + { + std::cout << " [debug] avg_eta (before dividing j, so right now it is total eta): " << avg_eta << std::endl; + running_avg = avg_eta / (j+1); + } + + std::cout << " [debug] ai, running_avg: " << pair.first << ", " << running_avg << std::endl; + gr_running_avg->SetPoint(j, pair.first, running_avg); + + //-- Keep track of avg eta to the left and right of the trueTrackLegnthInWater: + if (!isData) + { + if (pair.first < trueTrackLengthInWater) //left of true track length + { + std::cout << " [debug] total_eta (left): " << total_eta << std::endl; + num_left_eta++; + left_avg_eta += total_eta; + } + if (pair.first > trueTrackLengthInWater) //right of true track length + { + std::cout << " [debug] total_eta (right): " << total_eta << std::endl; + num_right_eta++; + right_avg_eta += total_eta; + } + } + j+=1; + } + avg_eta /= j; + h_avg_eta->Fill(avg_eta); + std::cout << " [debug] avg eta: " << avg_eta << ", j: " << j << std::endl; + + //-- Keep track of avg eta to the left and right of the trueTrackLegnthInWater: + if (!isData) + { + std::cout << " [debug] num pmts (left, right): " << num_left_eta << ", " << num_right_eta << std::endl; + if (num_left_eta != 0) left_avg_eta /= num_left_eta; + if (num_right_eta != 0) right_avg_eta /= num_right_eta; + std::cout << " [debug] left avg: " << left_avg_eta << ", right avg: " << right_avg_eta << std::endl; + } + + //-- Save truth info to txt files + if (!isData) + { + truetrack_file << "p" << partnumber << "_" << mcevnum << ","; + truetrack_file << trueTrackLengthInWater << "," << trueTrackLengthInMRD << "," << trueMuonEnergy << std::endl; + //truetrack_file << trueTrackLengthInWater << "," << left_avg_eta << "," << right_avg_eta << std::endl; + } + } //-- End if found_muon + }//-- End !reco_mode + + + // ------------------------------------------------------------ + // --- RECO MODE: Fit tank track, muon energy, vertex --------- + // ------------------------------------------------------------ + double fitted_tank_track = -999.; + TVector3 fitted_vtx(-999,-999,-999); + double reco_muon_ke = -999.; + int num_mrd_lyrs = -999.; + num_mrd_lyrs = LayersHit.size(); + if (reco_mode) + { + double t0 = -999.; + bool save_t0 = false; + + //-- Get ev_id for matching << this has been moved further up in script + /*std::stringstream ev_id; + ev_id << "p" << partnumber << "_"; + if (isData) ev_id << evnum; + else ev_id << mcevnum;*/ + + if (abs(trackAngleRad*180./TMath::Pi()) > 5.) + { + std::cout << " [debug] angle more than 5 degrees! Event: p" << partnumber << "_"; + if (isData) std::cout << evnum; + else std::cout << mcevnum; + std::cout << std::endl; + } + + //-- Get the fitted tank track length for this event from file + std::map>::iterator it = m_tank_track_fits.find(ev_id.str()); + if (it != m_tank_track_fits.end()) + { + std::vector v_fit_ctime = m_tank_track_fits.at(ev_id.str()); + double fit_cluster_time = (double)v_fit_ctime.at(0); + fitted_tank_track = (double)v_fit_ctime.at(1); + std::cout << " MuonFitter Tool: Found track, cluster time for " << ev_id.str() << ": " << fitted_tank_track << ", " << fit_cluster_time << endl; + h_fitted_tank_track->Fill(fitted_tank_track); + + //-- Skip the bad fits + //-- NOTE: This may no longer be needed if using RNN to fit; might need different cuts + if (fitted_tank_track < 0) return false; + + if (!isData) + { + //-- Check diff btwn reco and true info + } + + //-- Load cluster + //-- NOTE: Must use main_cluster_time from above since precision is lost when saving to file + std::vector cluster_hits; + std::vector cluster_hits_MC; + if (isData) + { + cluster_hits = m_all_clusters->at(main_cluster_time); + //main_cluster_nhits = cluster_hits.size(); + for (int ihit = 0; ihit < cluster_hits.size(); ihit++) + { + main_cluster_charge += cluster_hits.at(ihit).GetCharge(); + } + } + else + { + cluster_hits_MC = m_all_clusters_MC->at(main_cluster_time); + //main_cluster_nhits = cluster_hits_MC.size(); + for (int ihit = 0; ihit < cluster_hits.size(); ihit++) + { + main_cluster_charge += cluster_hits_MC.at(ihit).GetCharge(); + } + } + std::vector cluster_detkeys = m_all_clusters_detkeys->at(main_cluster_time); + + //-- Save main cluster charge for fitted events + h_clusterPE_fit->Fill(main_cluster_charge); + if (hasPion) h_clusterPE_fit_haspion->Fill(main_cluster_charge); //look at charge for events with pions + + // ------------------------------------------------------------ + // --- Fit muon vertex from fitted tank track length ---------- + // ------------------------------------------------------------ + //-- Start from tank exit point and move backwards into tank + fitted_vtx = tankExit - fitted_tank_track * mrdTrackDir; + std::cout << " MuonFitter Tool: Fitted vtx xyz: " << fitted_vtx.X() << "," << fitted_vtx.Y() << "," << fitted_vtx.Z() << std::endl; + + //-- Check if hit falls inside cone of FITTED vertex + TVector3 vtx2tankExit = tankExit - fitted_vtx; //similar to ai vector +/* TVector3 vtx2pmt = TVector3(hitX,hitY,hitZ) - fitted_vtx; + + double ang = vtx2pmt.Angle(mrdTrackDir); + + if (!isData && display_truth) + { + std::cout << " [debug] vtx2tankExit (before truth): " << vtx2tankExit.X() << "," << vtx2tankExit.Y() << "," << vtx2tankExit.Z() << std::endl; + vtx2tankExit = TVector3(trueStopVtxX,trueStopVtxY,trueStopVtxZ) - TVector3(trueVtxX,trueVtxY,trueVtxZ); + vtx2pmt = TVector3(hitX,hitY,hitZ) - TVector3(trueVtxX,trueVtxY,trueVtxZ); + std::cout << " [debug] vtx2tankExit (after truth): " << vtx2tankExit.X() << "," << vtx2tankExit.Y() << "," << vtx2tankExit.Z() << std::endl; + ang = vtx2pmt.Angle(trueTrackDir); + std::cout << " [debug] ang (w/ trueTrackDir, w/ vtx2tankExit): " << ang << "," << vtx2pmt.Angle(vtx2tankExit) << std::endl; + } + + if (ang <= CHER_ANGLE_RAD) + { + //t0 = pmt_t - (TVector3(hitX,hitY,hitZ).Dot(mrdTrackDir) + ai) - TMath::Sqrt(1.33*1.33-1)*TVector3(hitX,hitY,hitZ).Cross(mrdTrackDir).Mag(); + t0 = pmt_t - (vtx2pmt.Dot(mrdTrackDir) + TMath::Sqrt(1.33*1.33-1)*vtx2pmt.Cross(mrdTrackDir).Mag()) / 30.; + + if (!isData && display_truth) + { + t0 = pmt_t - (vtx2pmt.Dot(trueTrackDir) + TMath::Sqrt(1.33*1.33-1)*vtx2pmt.Cross(trueTrackDir).Mag()) / 30.; + } + std::cout << " [debug] pmt_t made it inside cone! " << pmt_t << "," << t0 << std::endl; + v_tzero.push_back(t0); + nhits_incone += 1; + totalpe_incone += pmt_PE; + } + else { std::cout << " [debug] pmt_t did not make it inside cone! " << pmt_t << std::endl; } +*/ + + // ------------------------------------------------------------ + // --- Reconstruct Muon Energy -------------------------------- + // ------------------------------------------------------------ + //-- Calculate initial MIP energy loss in TANK from tank track length + double tank_track = fitted_tank_track; + if (!isData && display_truth) + { + // Check energy calc with trueTrackLengthInWater + tank_track = trueTrackLengthInWater; + } + double tank_dEdx = 2.000; //1.992 MeV/cm + double tank_edep = tank_track * tank_dEdx; + double tank_mrd_dist = TMath::Sqrt(pow(tankExitPointX-mrdEntryPointX,2) + pow(tankExitPointY-mrdEntryPointY,2) + pow(tankExitPointZ-mrdEntryPointZ,2)); + double outtank_edep = tank_mrd_dist * 1.05; //this should be dE/dx in air..; currently not used + std::cout << " [debug] tank_mrd_dist [cm]: " << tank_mrd_dist << std::endl; + std::cout << " [debug] outtank_edep: " << outtank_edep << std::endl; + + //-- Calculate initial MIP energy loss in MRD from MRD track length + //-- TODO: Use another dEdx value for iron? + double mrd_track = reco_mrd_track; + if (use_nlyrs) mrd_track = nlyrs_mrd_track; + if (use_conn_dots) mrd_track = conn_dots_mrd_track; + + double mrd_dEdx = 11.5; //MeV/cm; 10.1, 11.3 + double mrd_edep = mrd_track * mrd_dEdx; + if (use_eloss) mrd_edep = mrdEnergyLoss; //use official ANNIE tool reco MRD energy loss as the starting point + std::cout << " [debug] mrd_edep: " << mrd_edep << std::endl; //check which MRD energy is used + + if (use_nlyrs) + { + std::cout << " [debug] Adjust MRD track length based on initial mrd_edep" << std::endl; + if (mrd_edep >= 400.) + { + mrd_track = mrd_track / 0.95; + } + else if (mrd_edep < 400.) + { + mrd_track = mrd_track / 0.80; + } + + // Update with new track length + mrd_edep = mrd_track * mrd_dEdx; + std::cout << " [debug] nlyrs upd mrd_track: " << mrd_track << std::endl; + std::cout << " [debug] nlyrs upd mrd_edep: " << mrd_edep << std::endl; + } + + //-- Get initial reco muon energy by adding tank and MRD energy depositions + double reco_mu_e = tank_edep + mrd_edep; + + + //-- Fine-tune reconstructed muon energy by finding best dE/dx + //-- and updating the muon energy until it doesn't change by 2% + double T_before = reco_mu_e; + bool eres_ok = false; + int n_tries = 0; + std::cout << " [debug] initial tank_dEdx: " << tank_dEdx << std::endl; + +/* while (!eres_ok) + { + double new_dEdx = CalcTankdEdx(T_before); + std::cout << " [debug] new_dEdx: " << new_dEdx << std::endl; + double T_after = tank_track*new_dEdx + mrdEnergyLoss + tank_mrd_dist*new_dEdx; + double E_res = TMath::Abs(T_after-T_before)/T_before; + std::cout << " [debug] T_before: " << T_before << std::endl; + std::cout << " [debug] T_after: " << T_after << std::endl; + std::cout << " [debug] Eres: " << E_res << std::endl; + if (E_res <= 0.02) + { + reco_mu_e = T_after; //set as new reco muon energy + eres_ok = true; + } + else + { + T_before = T_after; + n_tries++; + if (n_tries > 10) + { + std::cout << " [debug] Did 10 tries!" << std::endl; + eres_ok = true; + } + } + } //end while eres_ok loop +*/ + + // ------------------------------------------------------------ + // --- Fine-tune reco muon energy by finding dEdx for changing + // --- muon energy after traveling some distance dx ----------- + // ------------------------------------------------------------ + std::cout << " MuonFitter Tool: Calculating muon energy iteratively..." << std::endl; + double dx = 10; //cm; step size to update dE/dx + double input_Emu = reco_mu_e; //input energy for dE/dx calculation + + //-- Use true energy minus muon's rest mass as initial input energy + //if (!isData && display_truth) { input_Emu = trueMuonEnergy-105.66; } + + //-- Start with energy deposition in tank + double sum_tank_Emu = 0.; //keep track of new reco muon energy in tank + double d_tanktrack = fitted_tank_track; //this will be used to keep track (haha get it) of remaining tank track length + if (!isData && display_truth) + { + //-- Check energy calc with true track length in water + d_tanktrack = trueTrackLengthInWater; + } + std::cout << " [debug] Initial d_tanktrack: " << d_tanktrack << std::endl; + + while (d_tanktrack > 0) + { + if (d_tanktrack < dx) + { + std::cout << " [debug] remaining d_tanktrack: " << d_tanktrack << std::endl; + + double deltaE = CalcTankdEdx(input_Emu) * d_tanktrack; + sum_tank_Emu += deltaE; + //-- Calculate new input energy for MRD energy calc + input_Emu -= deltaE; + d_tanktrack -= d_tanktrack; + std::cout << " [debug] input_Emu: " << input_Emu << std::endl; + std::cout << " [debug] sum_tank_Emu: " << sum_tank_Emu << std::endl; + std::cout << " [debug] d_tanktrack: " << d_tanktrack << std::endl; //should be 0 + std::cout << " [debug] final dEdx: " << deltaE/dx << std::endl; + } + else + { + double deltaE = CalcTankdEdx(input_Emu) * dx; + sum_tank_Emu += deltaE; + //-- Calculate new input energy and remaining tank track length + input_Emu -= deltaE; + d_tanktrack -= dx; + std::cout << " [debug] input_Emu: " << input_Emu << std::endl; + std::cout << " [debug] sum_tank_Emu: " << sum_tank_Emu << std::endl; + std::cout << " [debug] d_tanktrack: " << d_tanktrack << std::endl; + std::cout << " [debug] dEdx: " << deltaE/dx << std::endl; + } + } + std::cout << " [debug] input_Emu (for MRD): " << input_Emu << "," << reco_mu_e-sum_tank_Emu << std::endl; //should be equal + std::cout << " [debug] Initial reconstructed Emu: " << reco_mu_e << std::endl; + //-- Update reco muon energy with the new tank energy (same initial MRD energy deposition) + reco_mu_e = sum_tank_Emu + mrd_edep; + std::cout << " [debug] New reconstructed Emu (updated tank energy): " << reco_mu_e << std::endl; + + //-- Now update energy deposition in MRD + std::cout << " [debug] Now calculating muon energy in MRD..." << std::endl; + double d_mrdtrack = mrd_track; + double sum_mrd_Emu = 0.; + //-- Use trueTrackLengthInMRD to check energy calculation + //if (!isData && display_truth) { d_mrdtrack = trueTrackLengthInMRD; } + + std::cout << " [debug] Initial d_mrdtrack: " << d_mrdtrack << std::endl; + while (d_mrdtrack > 0) + { + if (input_Emu < 0) break; + + //-- TODO: Need condition on remaining track length + if (input_Emu < 20.) + { + std::cout << " [debug] input_Emu is LESS THAN 20 MeV: " << input_Emu << std::endl; + std::cout << " [debug] Remaining d_mrdtrack: " << d_mrdtrack << std::endl; + + /*if (use_nlyrs && (d_mrdtrack > dx)) + { + // Up the remaining energy since we still have a lot of track left + input_Emu = d_mrdtrack * 10.1; + }*/ + + //-- If input energy < 20 MeV, just add remaining energy + sum_mrd_Emu += input_Emu; + + //-- If input energy < 20, add (remaining track)*(previous dE/dx) + //sum_mrd_Emu += d_mrdtrack * mrd_dEdx; + + std::cout << " [debug] sum_mrd_Emu: " << sum_mrd_Emu << std::endl; + input_Emu -= input_Emu; + + //-- hist: How much track length do we have left? + h_remainder_track_last20MeV->Fill(d_mrdtrack); + //-- hist: What is the diff btwn reco_mu_e now and true_mu_e? + h_true_reco_Ediff_last20MeV->Fill((sum_tank_Emu+sum_mrd_Emu)-(trueMuonEnergy-105.66)); + h_remainder_track_Ediff_last20MeV->Fill((sum_tank_Emu+sum_mrd_Emu)-(trueMuonEnergy-105.66), d_mrdtrack); + break; + } + + if (d_mrdtrack < dx) + { + std::cout << " [debug] remaining d_mrdtrack: " << d_mrdtrack << std::endl; + double deltaE = CalcMRDdEdx(input_Emu) * d_mrdtrack; + sum_mrd_Emu += deltaE; + input_Emu -= deltaE; + d_mrdtrack -= d_mrdtrack; + mrd_dEdx = deltaE/dx; //save for remaining track length calc + + std::cout << " [debug] input_Emu: " << input_Emu << std::endl; + std::cout << " [debug] sum_mrd_Emu: " << sum_mrd_Emu << std::endl; + std::cout << " [debug] d_mrdtrack: " << d_mrdtrack << std::endl; + std::cout << " [debug] final dEdx: " << deltaE/dx << std::endl; + } + else + { + double deltaE = CalcMRDdEdx(input_Emu) * dx; + sum_mrd_Emu += deltaE; + input_Emu -= deltaE; + d_mrdtrack -= dx; + mrd_dEdx = deltaE/dx; + + std::cout << " [debug] input_Emu: " << input_Emu << std::endl; + std::cout << " [debug] sum_mrd_Emu: " << sum_mrd_Emu << std::endl; + std::cout << " [debug] d_mrdtrack: " << d_mrdtrack << std::endl; + std::cout << " [debug] dEdx: " << deltaE/dx << std::endl; + } + } //-- Done updating MRD energy + std::cout << " [debug] Updated reconstructed MRD energy (mrd_edep) vs mrdEnergyLoss: " << mrd_edep << "," << mrdEnergyLoss << std::endl; + //-- Update reconstructed muon energy with new MRD energy deposition + reco_mu_e = sum_tank_Emu + sum_mrd_Emu; + std::cout << " [debug] New reconstructed Emu (after updating MRD): " << reco_mu_e << std::endl; + + if (use_simple_ereco) + { + reco_mu_e = tank_edep + mrd_edep; //-- mrd_edep diff if use_eloss is 1 + //reco_mu_e = sum_tank_Emu + mrd_edep; //-- TODO:later do this where tank gets dynamically updated but MRD doesn't + std::cout << " [debug] reconstructed Emu (Simple E Reco): " << reco_mu_e << std::endl; + } + + reco_muon_ke = reco_mu_e; //-- store for CStore + + h_mrd_eloss_diff->Fill(sum_mrd_Emu - mrdEnergyLoss); //-- Diff btwn const dE/dx and ANNIE method + + //-- Calculated deltaR and other variables (MC ONLY -- requires truth info) + if (!isData) + { + //-- Calculate spatial resolution (deltaR) + double deltaR = TMath::Sqrt(pow(fitted_vtx.X()-trueVtxX,2) + pow(fitted_vtx.Y()-trueVtxY,2) + pow(fitted_vtx.Z()-trueVtxZ,2)); + h_deltaR->Fill(deltaR); + + TVector3 true_vtx = TVector3(trueVtxX,trueVtxY,trueVtxZ); + double transverse = deltaR * TMath::Sin((true_vtx-fitted_vtx).Angle(mrdTrackDir)); + h_transverse->Fill(TMath::Abs(transverse)); + + double parallel = deltaR * TMath::Cos((true_vtx-fitted_vtx).Angle(mrdTrackDir)); + h_parallel->Fill(TMath::Abs(parallel)); + + //-- Compare with true muon energy + double true_mu_e = trueMuonEnergy - 105.66; //minus rest mass + reco_mu_e = reco_mu_e + ERECO_SHIFT; + double ediff = reco_mu_e - true_mu_e; + h_true_reco_E->Fill(true_mu_e, reco_mu_e); + h_true_reco_Ediff->Fill(ediff); + + //-- Use timing to select good vertex fits + /*if (h_tzero->GetStdDev() < 2.) + { + std::cout << " [debug] h_t0 width: " << h_tzero->GetStdDev() << std::endl; + h_true_reco_E->Fill(true_mu_e, reco_mu_e); + h_true_reco_Ediff->Fill(ediff); + //if (main_cluster_charge < 3500.) h_true_reco_Ediff->Fill(ediff); //make a charge cut + }*/ + + if (abs(ediff) > 100) + { + std::cout << " !!HEY! THERE IS A HUGE ENERGY DIFFERENCE!! Event: " << ev_id.str() <<", Ediff: " << ediff << std::endl; + std::cout << " >> TANK track lengths (reco; true): " << tank_track << "; " << trueTrackLengthInWater << std::endl; + std::cout << " >> MRD track lengths (reco; true): " << mrd_track << "; " << trueTrackLengthInMRD << std::endl; + std::cout << " >> Muon energy (reco; true): " << reco_mu_e << "; " << true_mu_e << std::endl; + std::cout << " >> Muon vertex (reco; true): " << fitted_vtx.X() << "," << fitted_vtx.Y() << "," << fitted_vtx.Z() << "; " << trueVtxX << "," << trueVtxY << "," << trueVtxZ << std::endl; + + h_tank_track_diff_large->Fill(tank_track-trueTrackLengthInWater); + + + //-- Save info to file + //save_t0 = true; + lg_ediff_file << ev_id.str() << "," + << ediff << "," + << hasPion << "," + << tank_track << "," + << trueTrackLengthInWater << "," + << mrd_track << "," + << trueTrackLengthInMRD << "," + << reco_mu_e << "," + << true_mu_e << std::endl; + + //-- Save main_cluster_charge of events with ediff > 100 and/or has pion + h_clusterPE_lrg_ediff->Fill(main_cluster_charge); + if (hasPion) h_clusterPE_lrg_ediff_haspion->Fill(main_cluster_charge); + } + else + { + //-- Save info for events with ediff < 100 + h_tank_track_diff_small->Fill(tank_track-trueTrackLengthInWater); + } + + + //-- Look at fractions of the tank and MRD track lengths out of entire track length + double f_tanktrack = (tank_track + tank_mrd_dist) / (tank_track + tank_mrd_dist + reco_mrd_track); + double f_mrdtrack = (reco_mrd_track) / (tank_track + tank_mrd_dist + reco_mrd_track); + + } + //-- histogram: Compare energy deposition in MRD and tank + h_tank_mrd_E->Fill(mrdEnergyLoss, tank_edep); + } + else std::cout << " MuonFitter Tool: womp womp. No fitted track found for: " << ev_id.str() << std::endl; + + + // Find mean t0 and subtract to center hist around 0 + //double mean_t0 = 0.; +/* for (int t = 0; t < v_tzero.size(); ++t) { mean_t0 += v_tzero.at(t); } + if (v_tzero.size() != 0) mean_t0 /= v_tzero.size(); + std::cout << " [debug] mean_t0: " << mean_t0 << std::endl; + + for (int t = 0; t < v_tzero.size(); ++t) { h_tzero->Fill(v_tzero.at(t)-mean_t0); } + + h_uber_t0widths->Fill(h_tzero->GetStdDev()); + if (!isData && reco_mode && save_t0) + { + lg_ediff_file << "," << h_tzero->GetStdDev() << std::endl; + } +*/ + //save_t0 = false; //reset + + + // find which pmt charges are inside/outside cone of true track direction +/* if (!isData) + { + for (unsigned long detkey = 332; detkey < 464; ++detkey) + { + if (charge[detkey] != 0.) + { + // find vector from true vertex to PMT + TVector3 vec_pmt = TVector3(x_pmt[detkey],y_pmt[detkey],z_pmt[detkey]) - TVector3(trueVtxX,trueVtxY,trueVtxZ); + std::cout << " [debug] xyz_pmt[detkey] " << detkey << ": " << x_pmt[detkey] << "," << y_pmt[detkey] << "," << z_pmt[detkey] << std::endl; + // find angle between pmt vector (vec_pmt) and true track direction + double pmt_angle = vec_pmt.Angle(trueTrackDir)*180./TMath::Pi(); + std::cout << " [debug] vec_pmt: " << vec_pmt.X() << "," << vec_pmt.Y() << "," << vec_pmt.Z() << std::endl; + std::cout << " [debug] pmt_angle: " << pmt_angle << std::endl; + std::cout << " [debug] trueTrackDir: " << trueTrackDir.X() << "," << trueTrackDir.Y() << "," << trueTrackDir.Z() << std::endl; + std::cout << " [debug] trueVtx: " << trueVtxX << "," << trueVtxY << "," << trueVtxZ << std::endl; + std::cout << " [debug] trueStopVtx: " << trueStopVtxX << "," << trueStopVtxY << "," << trueStopVtxZ << std::endl; + + if (pmt_angle < CHER_ANGLE_DEG+insideAngle) h_qincone_truevtx->Fill(charge[detkey]); + if (pmt_angle > CHER_ANGLE_DEG+outsideAngle) h_qoutcone_truevtx->Fill(charge[detkey]); + } + } + }*/ + + } //-- End reco_mode + + + // ------------------------------------------------------------ + // --- Store variables to CStore for downstream tools --------- + // ------------------------------------------------------------ + std::cout << " MuonFitter Tool: Setting FittedTrackLengthInWater to CStore: " << fitted_tank_track << std::endl; + m_data->CStore.Set("FittedTrackLengthInWater", fitted_tank_track); //could be -888 or -999 if no fit + std::cout << " MuonFitter Tool: Setting FittedMuonVertex to CStore" << std::endl; + Position fitted_muon_vtx(fitted_vtx.X(), fitted_vtx.Y(), fitted_vtx.Z()); //could be -888 or -999 if no fit + m_data->CStore.Set("FittedMuonVertex", fitted_muon_vtx); + std::cout << " MuonFitter Tool: Setting RecoMuonKE to CStore: " << reco_muon_ke << std::endl; + m_data->CStore.Set("RecoMuonKE", reco_muon_ke); //could be -888 or -999 if no fit + m_data->CStore.Set("NLyers", num_mrd_lyrs); + + + // ------------------------------------------------------------ + // --- SimpleReconstruction variables ------------------------- + // ------------------------------------------------------------ + // -- Code based on SimpleReconstruction tool + // if able to fit a vertex, set SimpleRecoFlag (int) to 1 + if (fitted_tank_track > 0) SimpleRecoFlag = 1; + std::cout << " [debug] SimpleRecoFlag: " << SimpleRecoFlag << std::endl; + + SimpleRecoEnergy = reco_muon_ke; + + Position reco_vtx(fitted_vtx.X()/100., fitted_vtx.Y()/100. - 0.1446, fitted_vtx.Z()/100. + 1.681); //convert to [m] and set in same reference frame as Michael's SimpleRecoVtx + SimpleRecoVtx = reco_vtx; + SimpleRecoStopVtx = mrdStopVertex; //already in [m] + + SimpleRecoCosTheta = TMath::Cos(trackAngleRad); //diff from dirz in SimpleReco by factor of 2 + + double SimpleRecoTotalEnergy = SimpleRecoEnergy + 105.66; + SimpleRecoPt = sqrt((1-SimpleRecoCosTheta*SimpleRecoCosTheta)*(SimpleRecoTotalEnergy*SimpleRecoTotalEnergy-105.66*105.66)); + + std::cout << " [debug] DownstreamFV (before): " << DownstreamFV << std::endl; + std::cout << " [debug] FullCylFV (before): " << FullCylFV << std::endl; + + //if (sqrt(fitted_vtx.X()*fitted_vtx.X()+(fitted_vtx.Z()-1.681)*(fitted_vtx.Z()-1.681))<1.0 && fabs(fitted_vtx.Y())<0.5 && ((fitted_vtx.Z()-1.681) < 0.)) SimpleRecoFV = true; //original FV cut with center correction + // FV 1 - upstream half cylinder + if (sqrt(reco_vtx.X()*reco_vtx.X()+reco_vtx.Z()*reco_vtx.Z())<1.0 && fabs(reco_vtx.Y())<0.5 && (reco_vtx.Z()<0.)) + { //no tank center correction needed + std::cout << " MuonFitter Tool: Made FV cut!" << std::endl; + SimpleRecoFV = true; + std::cout << " MuonFitter Tool: Found in FV region 1 (upstream half of cylinder)! " << reco_vtx.X() << "," << reco_vtx.Y() << "," << reco_vtx.Z() << std::endl; + } + else { std::cout << " MuonFitter Tool: Did not make FV cut! reco_vtx(x,y,z): " << reco_vtx.X() << "," << reco_vtx.Y() << "," << reco_vtx.Z() << std::endl; } + + // FV 2 - downstream half cylinder + if (sqrt(reco_vtx.X()*reco_vtx.X()+reco_vtx.Z()*reco_vtx.Z())<1.0 && fabs(reco_vtx.Y())<0.5 && (reco_vtx.Z()>0.) && (reco_vtx.Z()<1.)) + { + DownstreamFV = 1; + std::cout << " MuonFitter Tool: Found in FV region 2 (downstream half of cylinder)! " << reco_vtx.X() << "," << reco_vtx.Y() << "," << reco_vtx.Z() << std::endl; + } + // FV 3 - 1m full right cylinder + if (sqrt(reco_vtx.X()*reco_vtx.X()+reco_vtx.Z()*reco_vtx.Z())<1.0 && fabs(reco_vtx.Y())<0.5) + { + FullCylFV = 1; + std::cout << " MuonFitter Tool: Found in FV region 3 (full cylinder volume)! " << reco_vtx.X() << "," << reco_vtx.Y() << "," << reco_vtx.Z() << std::endl; + } + + std::cout << " [debug] DownstreamFV (after): " << DownstreamFV << std::endl; + std::cout << " [debug] FullCylFV (after): " << FullCylFV << std::endl; + + SimpleRecoMrdEnergyLoss = mrdEnergyLoss; //placeholder; not used in NM tool + SimpleRecoTrackLengthInMRD = reco_mrd_track/100.; //placeholder; not used in NM tool + SimpleRecoMRDStart = mrdStartVertex; + SimpleRecoMRDStop = mrdStopVertex; + + SimpleRecoNeutrinoEnergy = this->CalcNeutrinoEnergy(SimpleRecoTotalEnergy, SimpleRecoCosTheta); + SimpleRecoQ2 = this->CalcQ2(SimpleRecoTotalEnergy, SimpleRecoCosTheta, SimpleRecoNeutrinoEnergy); + + //Set variables in RecoEvent Store + m_data->Stores["RecoEvent"]->Set("SimpleRecoFlag",SimpleRecoFlag); + m_data->Stores["RecoEvent"]->Set("SimpleRecoEnergy",SimpleRecoEnergy); + m_data->Stores["RecoEvent"]->Set("SimpleRecoVtx",SimpleRecoVtx); + m_data->Stores["RecoEvent"]->Set("SimpleRecoStopVtx",SimpleRecoStopVtx); + m_data->Stores["RecoEvent"]->Set("SimpleRecoCosTheta",SimpleRecoCosTheta); + m_data->Stores["RecoEvent"]->Set("SimpleRecoPt",SimpleRecoPt); + m_data->Stores["RecoEvent"]->Set("SimpleRecoFV",SimpleRecoFV); + m_data->Stores["RecoEvent"]->Set("SimpleRecoMrdEnergyLoss",SimpleRecoMrdEnergyLoss); + m_data->Stores["RecoEvent"]->Set("SimpleRecoTrackLengthInMRD",SimpleRecoTrackLengthInMRD); + m_data->Stores["RecoEvent"]->Set("SimpleRecoMRDStart",SimpleRecoMRDStart); + m_data->Stores["RecoEvent"]->Set("SimpleRecoMRDStop",SimpleRecoMRDStop); + m_data->Stores["RecoEvent"]->Set("DownstreamFV",DownstreamFV); + m_data->Stores["RecoEvent"]->Set("FullCylFV",FullCylFV); + m_data->Stores["RecoEvent"]->Set("SimpleRecoNeutrinoEnergy",SimpleRecoNeutrinoEnergy); + m_data->Stores["RecoEvent"]->Set("SimpleRecoQ2",SimpleRecoQ2); + + int test_fv = -1; + m_data->Stores["RecoEvent"]->Get("DownstreamFV", test_fv); + std::cout << " [debug] test_fv (DownstreamFV): " << test_fv << std::endl; + m_data->Stores["RecoEvent"]->Get("FullCylFV", test_fv); + std::cout << " [debug] test_fv (FullCylFV): " << test_fv << std::endl; + + //Fill Particles object with muon + if (SimpleRecoFlag){ + + //Define muon particle + int muon_pdg = 13; + tracktype muon_tracktype = tracktype::CONTAINED; + double muon_E_start = SimpleRecoEnergy; + double muon_E_stop = 0; + Position muon_vtx_start = SimpleRecoVtx; + Position muon_vtx_stop = SimpleRecoStopVtx; + Position muon_dir = SimpleRecoStopVtx - SimpleRecoVtx; + Direction muon_start_dir = Direction(muon_dir.X(),muon_dir.Y(),muon_dir.Z()); + double muon_start_time; + m_data->Stores["RecoEvent"]->Get("PromptMuonTime", muon_start_time); + double muon_tracklength = muon_dir.Mag(); + double muon_stop_time = muon_start_time + muon_tracklength/3.E8*1.33; + + Particle muon(muon_pdg,muon_E_start,muon_E_stop,muon_vtx_start,muon_vtx_stop,muon_start_time,muon_stop_time,muon_start_dir,muon_tracklength,muon_tracktype); + if (verbosity > 2){ + Log(" MuonFitter Tool: Added muon with the following properties as a particle:",v_message,verbosity); + muon.Print(); + } + + //Add muon particle to Particles collection + std::vector Particles; + get_ok = m_data->Stores["ANNIEEvent"]->Get("Particles",Particles); + if (!get_ok){ + Particles = {muon}; + } else { + Particles.push_back(muon); + } + m_data->Stores["ANNIEEvent"]->Set("Particles",Particles); + } + + + // ------------------------------------------------------------ + // --- Draw event --------------------------------------------- + // ------------------------------------------------------------ + root_outp->cd(); + this->SaveHistograms(); + + //-- ANNIE in 3D + //-- Code based on UserTools/EventDisplay/EventDisplay.cpp + if (plot3d && drawEvent) + { + if (verbosity > v_debug) { std::cout << "MuonFitter Tool: Saving 3D plots..." << std::endl; } + + std::stringstream ss_evdisplay3d_title, ss_evdisplay3d_name; + ss_evdisplay3d_title << "evdisplay3d_ev"; + ss_evdisplay3d_name << "canvas_evdisplay3d_p" << partnumber << "_ev"; + if (!isData) + { + ss_evdisplay3d_title << mcevnum; + ss_evdisplay3d_name << mcevnum; + } + else + { + ss_evdisplay3d_title << evnum; + ss_evdisplay3d_name << evnum; + } + canvas_3d->SetTitle(ss_evdisplay3d_title.str().c_str()); + canvas_3d->SetName(ss_evdisplay3d_name.str().c_str()); + ageom->DrawTracks(); + canvas_3d->Modified(); + canvas_3d->Update(); + canvas_3d->Write(); + } + + //-- Save canvases/graphs for fitting + if (!reco_mode && found_muon) + { + //------------------------------------------------------------ + //-- Photon density (eta) vs tank track segment (ai) --------- + //------------------------------------------------------------ + + c_eta_ai->cd(); + std::stringstream ss_eta_title, ss_eta_ai_name, ss_truetrack; + ss_eta_title << "#eta: #PE Divided By f (tot PMT charge > " << PMTQCut << ") Ev_"; + ss_eta_ai_name << "c_eta_ai"; + if (isData) ss_eta_ai_name << "_r" << runnumber; + else ss_eta_ai_name << "_wcsim"; + ss_eta_ai_name << "_p" << partnumber << "_ev"; + if (isData) + { + ss_eta_title << evnum; + ss_eta_ai_name << evnum; + } + else + { + ss_eta_title << mcevnum; + ss_eta_ai_name << mcevnum; + ss_truetrack << "true track length in water: " << trueTrackLengthInWater << " cm"; + if (display_truth) gr_eta_ai->SetTitle(ss_truetrack.str().c_str()); + } + gr_eta_ai->Draw("alp"); + gr_eta_ai->GetXaxis()->SetLimits(45., 505.); + gr_eta_ai->GetHistogram()->SetMinimum(0.); + //gr_running_avg->Draw("lp"); + c_eta_ai->Modified(); + c_eta_ai->Update(); + c_eta_ai->SetTitle(ss_eta_title.str().c_str()); + c_eta_ai->SetName(ss_eta_ai_name.str().c_str()); + + TLegend *legend = new TLegend(0.55, 0.65, 0.89, 0.89); + legend->AddEntry(gr_eta_ai, "#eta", "lp"); + //legend->AddEntry(gr_running_avg, "running avg #eta", "lp"); + + if (!isData) + { //indicate distance btwn trueVtx and tankExitPoint + /*TLine *lTrueTankTrack = new TLine(trueTrackLengthInWater, 0, trueTrackLengthInWater, max_eta+1); + lTrueTankTrack->SetLineColor(4); + lTrueTankTrack->SetLineWidth(2); + if (display_truth) + { + lTrueTankTrack->Draw(); + legend->AddEntry(lTrueTankTrack, "true tank track length", "l"); + }*/ + + TLine *lLeftAvgEta = new TLine(50, left_avg_eta, trueTrackLengthInWater, left_avg_eta); + lLeftAvgEta->SetLineColor(2); + lLeftAvgEta->SetLineWidth(2); + if (display_truth) + { + lLeftAvgEta->Draw(); + legend->AddEntry(lLeftAvgEta, "avg #eta to left of true track length", "l"); + } + + TLine *lRightAvgEta = new TLine(trueTrackLengthInWater, right_avg_eta, 455, right_avg_eta); + lRightAvgEta->SetLineColor(8); + lRightAvgEta->SetLineWidth(2); + if (display_truth) + { + lRightAvgEta->Draw(); + legend->AddEntry(lRightAvgEta, "avg #eta to right of true track length", "l"); + } + } + TLine *lAvgEta = new TLine(55, avg_eta, 500-step_size_ai/2, avg_eta); + lAvgEta->SetLineColor(46); + lAvgEta->SetLineWidth(2); + lAvgEta->Draw(); + legend->AddEntry(lAvgEta, "avg #eta", "l"); + legend->Draw(); + c_eta_ai->Write(); + if (!isData && display_truth) ss_eta_ai_name << "_truth"; + ss_eta_ai_name << ".png"; + c_eta_ai->SaveAs(ss_eta_ai_name.str().c_str()); + } //-- End !reco_mode + + + if (reco_mode) + { + c_h_tzero->cd(); + std::stringstream ss_t0_title, ss_t0_name; + ss_t0_title << "t0" << " p" << partnumber << "_ev"; + ss_t0_name << "c_h_tzero"; + if (isData) ss_t0_name << "_r" << runnumber; + else ss_t0_name << "_wcsim"; + ss_t0_name << "_p" << partnumber << "_ev"; + if (isData) + { + ss_t0_title << evnum; + ss_t0_name << evnum; + } + else + { + ss_t0_title << mcevnum; + ss_t0_name << mcevnum; + } + h_tzero->Draw(); + c_h_tzero->Modified(); + c_h_tzero->Update(); + c_h_tzero->SetTitle(ss_t0_title.str().c_str()); + if (!isData && display_truth) ss_t0_name << "_truth"; + c_h_tzero->SetName(ss_t0_name.str().c_str()); + c_h_tzero->Write(); + ss_t0_name << ".png"; + c_h_tzero->SaveAs(ss_t0_name.str().c_str()); + } + + return true; +} + + +bool MuonFitter::Finalise(){ + // Save output + root_outp->cd(); + + // Close 3D canvas + if (plot3d) + { + canvas_3d->Clear(); + canvas_3d->Close(); + delete canvas_3d; + } + + delete c_eta_ai; + delete c_h_tzero; + + root_outp->Close(); + pos_file.close(); + if (!isData) truetrack_file.close(); + if (!isData) lg_ediff_file.close(); + + Log("MuonFitter Tool: Exiting", v_message, verbosity); + return true; +} + + +//------------------------------------------------------------ +//--- Custom Functions --------------------------------------- +//------------------------------------------------------------ + +Position MuonFitter::Line3D(double x1, double y1, double z1, double x2, double y2, double z2, double C, std::string coord) +{ + // returns the XYZ coordinates of a new point in a 3D line + // given two initial points and one X,Y,Z value + double a = x2-x1; + double b = y2-y1; + double c = z2-z1; + double x = -69., y = -69., z = -69., L = -69.; + + if (coord == "x" || coord == "X") + { + L = (C-x1)/a; + x = C; + y = b*L+y1; + z = c*L+z1; + } + else if (coord == "y" || coord == "Y") + { + L = (C-y1)/b; + x = a*L+x1; + y = C; + z = c*L+z1; + } + else if (coord == "z" || coord == "Z") + { + L = (C-z1)/c; + x = a*L+x1; + y = b*L+y1; + z = C; + } + else { Log("MuonFitter Tool: Unable to recognize coordinate!", v_debug, verbosity); } + + return(Position(x,y,z)); +} + +void MuonFitter::reset_3d() +{ + //reset TANK PMTs + TGeoNode *node; + TGeoSphere *sphere; + for (unsigned long detkey=332; detkey<464; detkey++) + { + node = EXPH->GetNode(detkey_to_node[detkey]); + sphere = (TGeoSphere *)(node->GetVolume()->GetShape()); + sphere->SetSphDimensions(0,1.5,0,180,0,180); + node->GetVolume()->SetLineColor(41); + } + + //remove extra node(s) + if (N > maxN) + { + while (N > maxN) + { + node = EXPH->GetNode(maxN); + EXPH->RemoveNode(node); + --N; + } + } + + //remove tracks + if(ageom->GetNtracks() > 0) + { + ageom->ClearTracks(); + if (verbosity > v_debug) { std::cout << "Clearing tracks... current number: " << ageom->GetNtracks() << std::endl; } + } + + canvas_3d->Modified(); + canvas_3d->Update(); + +} + +bool MuonFitter::FileExists(std::string fname) +{ + ifstream myfile(fname.c_str()); + return myfile.good(); +} + +void MuonFitter::LoadTankTrackFits() +{ + ifstream myfile(tankTrackFitFile.c_str()); + std::cout << "opened file" << std::endl; + std::string line; + if (myfile.is_open()) + { + // Loop over lines, get event id, fit (should only be one line here) + while (getline(myfile, line)) + { + //if (verbosity > 3) std::cout << line << std::endl; //has our stuff + if (line.find("#") != std::string::npos) continue; + std::vector fileLine; + boost::split(fileLine, line, boost::is_any_of(","), boost::token_compress_on); + std::string event_id = ""; + double tank_track_fit = -9999.; + double cluster_time = -9999.; + event_id = fileLine.at(0); + cluster_time = std::stod(fileLine.at(1)); + tank_track_fit = std::stod(fileLine.at(2)); + std::vector v_fit_ctime{cluster_time, tank_track_fit}; + if (verbosity > 5) std::cout << "Loading tank track fit: " << event_id << ", " << cluster_time << ", " << tank_track_fit << std::endl; + m_tank_track_fits.insert(std::pair>(event_id, v_fit_ctime)); + } + } + return; +} + +double MuonFitter::CalcTankdEdx(double input_E) +{ + double gamma = (input_E+105.66)/105.66; + std::cout << " [debug] water dEdx: gamma: " << gamma << std::endl; + double beta = TMath::Sqrt(gamma*gamma-1.)/gamma; + std::cout << " [debug] water dEdx: beta: " << beta << std::endl; + double Tmax = (2.*0.511*beta*beta*gamma*gamma)/(1.+2.*0.511*gamma/105.66 + pow(0.511/105.66,2)); + std::cout << " [debug] water dEdx: Tmax: " << Tmax << std::endl; + double ox_ln = TMath::Log(2.*0.511*beta*beta*gamma*gamma*Tmax/(I_O*I_O)); + std::cout << " [debug] water dEdx: log factory oxy: " << ox_ln << std::endl; + double ox_dEdx = (0.999)*(16./18.)*WATER_DENSITY*0.307*0.5*pow(1./beta,2)*(0.5*ox_ln-beta*beta-0.5); + std::cout << " [debug] water dEdx: dE/dx oxy: " << ox_dEdx << std::endl; + double h_ln = TMath::Log(2.*0.511*beta*beta*gamma*gamma*Tmax/(I_H*I_H)); + std::cout << " [debug] water dEdx: log factor H: " << h_ln << std::endl; + double h_dEdx = (0.999)*(2./18.)*WATER_DENSITY*0.307*1.0*pow(1./beta,2)*(0.5*h_ln-beta*beta-0.5); + std::cout << " [debug] water dEdx: dE/dx H: " << h_dEdx << std::endl; + + // including Gd2(SO4)3 + double gd_ln = TMath::Log(2.*0.511*beta*beta*gamma*gamma*Tmax/(I_GD*I_GD)); + double gd_dEdx = (0.001)*(314./602.)*1.0*0.307*0.5*pow(1./beta,2)*(0.5*gd_ln-beta*beta-0.5); + //double s_ln = TMath::Log(2.*0.511*beta*beta*gamma*gamma*Tmax/(I_S*I_S)); + //double s_dEdx = (0.001)*(96./602.)*1.0*0.307*0.5*pow(1./beta,2)*(0.5*s_ln-beta*beta-0.5); + //double gdox_dEdx = (0.001)*(192./602.)*1.0*0.307*0.5*pow(1./beta,2)*(0.5*ox_ln-beta*beta-0.5); + + //return (ox_dEdx + h_dEdx + gd_dEdx + s_dEdx + gdox_dEdx); + return (ox_dEdx + h_dEdx + gd_dEdx); +} + +double MuonFitter::CalcMRDdEdx(double input_E) +{ + // Using iterative dE/dx method + double gamma = (input_E+105.66)/105.66; + double beta = TMath::Sqrt(gamma*gamma-1.)/gamma; + double Tmax = (2.*0.511*beta*beta*gamma*gamma)/(1.+2.*0.511*gamma/105.66 + pow(0.511/105.66,2)); + double fe_ln = TMath::Log(2.*0.511*beta*beta*gamma*gamma*Tmax/(I_FE*I_FE)); + double fe_dEdx = 7.874*0.307*0.464*pow(1./beta,2)*(0.5*fe_ln-beta*beta-0.5); + double b_tot = 1.0338*TMath::Log(input_E/1000.) + 0.89287; //fitted + if (b_tot < 0.) b_tot = 0; + //fe_dEdx = fe_dEdx + b_tot*input_E*7.874; + + return fe_dEdx; +} + +void MuonFitter::ResetVariables() +{ + // photon density (eta) variables + avg_eta = 0; + left_avg_eta = 0.; + right_avg_eta = 0.; + num_left_eta = 0; + num_right_eta = 0; + + // 3D plotting + if (plot3d) { reset_3d(); } + + // Set default values for reconstruction variables + SimpleRecoFlag = -9999; + SimpleRecoEnergy = -9999; + SimpleRecoVtx.SetX(-9999); + SimpleRecoVtx.SetY(-9999); + SimpleRecoVtx.SetZ(-9999); + SimpleRecoCosTheta = -9999; + SimpleRecoPt = -9999; + SimpleRecoStopVtx.SetX(-9999); + SimpleRecoStopVtx.SetY(-9999); + SimpleRecoStopVtx.SetZ(-9999); + SimpleRecoFV = false; + SimpleRecoMrdEnergyLoss = -9999; + SimpleRecoTrackLengthInMRD = -9999; + SimpleRecoMRDStart.SetX(-9999); + SimpleRecoMRDStart.SetY(-9999); + SimpleRecoMRDStart.SetZ(-9999); + SimpleRecoMRDStop.SetX(-9999); + SimpleRecoMRDStop.SetY(-9999); + SimpleRecoMRDStop.SetZ(-9999); + DownstreamFV = -9999; + FullCylFV = -9999; + SimpleRecoNeutrinoEnergy = -9999; + SimpleRecoQ2 = -9999; + +} + +void MuonFitter::InitHistograms() +{ + //-- Initialize Histograms + h_num_mrd_layers = new TH1D("h_num_mrd_layers", "Num MRD Layers Hit", 50, 0, 50.); + h_num_mrd_layers->GetXaxis()->SetTitle("# layers"); + + h_truevtx_angle = new TH1D("h_truevtx_angle", "Angle of True Muon Vertex", 360, -180., 180.); + h_truevtx_angle->GetXaxis()->SetTitle("angle [deg]"); + + h_tankexit_to_pmt = new TH1D("h_tankexit_to_pmt", "Distance from Tank Exit Point to PMT Position", 350, 0., 350.); + h_tankexit_to_pmt->GetXaxis()->SetTitle("Ri [cm]"); + + h_tanktrack_ai = new TH1D("h_tanktrack_ai", "Segment of Tank Track (a_{i})", 250, 0., 500.); + h_tanktrack_ai->GetXaxis()->SetTitle("a_{i} [cm]"); + + h_eff_area_pmt = new TH1D("h_eff_area_pmt", "Effective Area of PMT Seen by Photons", 650, 0., 650.); + h_eff_area_pmt->GetXaxis()->SetTitle("effective area [cm^2]"); + + h_fpmt = new TH1D("h_fpmt", "area fraction f", 100, 0., 1.); + h_fpmt->GetXaxis()->SetTitle("f"); + + h_clusterhit_timespread = new TH1D("h_clusterhit_timespread", "Time Spread of Clusters (Latest - Earliest)", 200, 0, 200); + h_clusterhit_timespread->GetXaxis()->SetTitle("latest t - earliest t [ns]"); + + h_avg_eta = new TH1D("h_avg_eta", "Overall Average Eta", 100, 0, 5000); + h_avg_eta->GetXaxis()->SetTitle("eta [PE/cm]"); + + h_tdiff = new TH1D("h_tdiff", "Time Residuals", 1000, -1000., 1000.); + h_tdiff->GetXaxis()->SetTitle("time residual [ns]"); + + h_uber_t0widths = new TH1D("h_uber_t0widths", "Distribution of Timing Distribution Widths", 31, -1., 30.); + h_uber_t0widths->GetXaxis()->SetTitle("std devs [ns]"); + + h_true_tanktrack_len = new TH1D("h_true_tanktrack_len", "Distribution of True Track Lengths", 400, 0, 2000); + h_true_tanktrack_len->GetXaxis()->SetTitle("track length [cm]"); + + h_fitted_tank_track = new TH1D("h_fitted_tank_track", "Distribution of Fitted Track Length", 200, 0, 400); + h_fitted_tank_track->GetXaxis()->SetTitle("track length [cm]"); + + h_deltaR = new TH1D("h_deltaR", "#Deltar", 75, 0., 150.); + h_deltaR->GetXaxis()->SetTitle("#Deltar [cm]"); + + h_transverse = new TH1D("h_transverse", "transverse distance", 75, 0., 150.); + h_transverse->GetXaxis()->SetTitle("[cm]"); + + h_parallel = new TH1D("h_parallel", "parallel distance", 75, 0., 150.); + h_parallel->GetXaxis()->SetTitle("[cm]"); + + h_true_reco_E = new TH2D("h_true_reco_E", "Reco vs True #mu Energy", 250, 0., 5000., 250, 0., 5000.); + h_true_reco_E->GetXaxis()->SetTitle("TrueE [MeV]"); + h_true_reco_E->GetYaxis()->SetTitle("RecoE (tank+mrd) [MeV]"); + + h_true_reco_Ediff = new TH1D("h_true_reco_Ediff", "Diff in Reco and True #mu Energy", 100, -500, 500); + h_true_reco_Ediff->GetXaxis()->SetTitle("recoE - trueE [MeV]"); + + h_tank_mrd_E = new TH2D("h_tank_mrd_E", "Reco #mu Energy in Tank vs in MRD", 250, 0., 5000., 250, 0., 5000.); + h_tank_mrd_E->GetXaxis()->SetTitle("Reco MrdE [MeV]"); + h_tank_mrd_E->GetYaxis()->SetTitle("Reco TankE [MeV]"); + + h_mrd_eloss_diff = new TH1D("h_mrd_eloss_diff", "diff in MRD energy loss", 200, -500, 1500); + h_mrd_eloss_diff->GetXaxis()->SetTitle("[MeV]"); + + h_tank_track_diff_small = new TH1D("h_tank_track_diff_small", "Difference in TANK track lengths (Reco-True) When E_{diff} < 200 MeV", 150, -150, 150); + h_tank_track_diff_small->GetXaxis()->SetTitle("reco-truth [cm]"); + + h_tank_track_diff_large = new TH1D("h_tank_track_diff_large", "Difference in TANK track lengths (Reco-True) When E_{diff} > 200 MeV", 150, -150, 150); + h_tank_track_diff_large->GetXaxis()->SetTitle("reco-truth [cm]"); + + h_clusterPE = new TH1D("h_clusterPE", "Cluster PE of Events with Found Muon", 100, 0, 10000); + h_clusterPE->GetXaxis()->SetTitle("cluster PE [p.e.]"); + + h_clusterPE_fit = new TH1D("h_clusterPE_fit", "Cluster PE of Events with Tank Track Fits", 100, 0, 10000); + h_clusterPE_fit->GetXaxis()->SetTitle("cluster PE [p.e.]"); + + h_clusterPE_fit_haspion = new TH1D("h_clusterPE_fit_haspion", "Cluster PE of Events with Tank Track Fits", 100, 0, 10000); + h_clusterPE_fit_haspion->GetXaxis()->SetTitle("cluster PE [p.e.]"); + + h_clusterPE_lrg_ediff = new TH1D("h_clusterPE_lrg_ediff", "Cluster PE of Events with Large E Diff", 100, 0, 10000); + h_clusterPE_lrg_ediff->GetXaxis()->SetTitle("cluster PE [p.e.]"); + + h_clusterPE_lrg_ediff_haspion = new TH1D("h_clusterPE_lrg_ediff_haspion", "Cluster PE of Events with Large E Diff and Has Pion", 100, 0, 10000); + h_clusterPE_lrg_ediff_haspion->GetXaxis()->SetTitle("cluster PE [p.e.]"); + + h_pca_angle = new TH1D("h_pca_angle", "Reconstructed Muon Direction Angle Using PCA", 200, -50, 50); + h_pca_angle->GetXaxis()->SetTitle("pca angle [deg]"); + + h_remainder_track_last20MeV = new TH1D("h_remainder_track_last20MeV", "Remaining Track Length in MRD When Input E_{#mu} < 20 MeV", 25, 0, 50); + h_remainder_track_last20MeV->GetXaxis()->SetTitle("remaining MRD track [cm]"); + + h_true_reco_Ediff_last20MeV = new TH1D("h_true_reco_Ediff_last20MeV", "Energy Difference Btwn True and Reco Energy When Input E_{#mu} < 20 MeV", 100, -500, 500); + h_true_reco_Ediff_last20MeV->GetXaxis()->SetTitle("E diff (reco-true) [MeV]"); + + h_remainder_track_Ediff_last20MeV = new TH2D("h_remainder_track_Ediff_last20MeV", "Remaining MRD Track Length vs True/Reco Energy Diff When Input E_{#mu} < 20 MeV", 100, -500, 500, 25, 0, 50); + h_remainder_track_Ediff_last20MeV->GetXaxis()->SetTitle("E diff (reco-true) [MeV]"); + h_remainder_track_Ediff_last20MeV->GetYaxis()->SetTitle("remaining MRD track [cm]"); + + h_tankExitX = new TH1D("h_tankExitX", "Tank Exit Point X", 200, -500, 500); + h_tankExitX->GetXaxis()->SetTitle("x [cm]"); + + h_tankExitY = new TH1D("h_tankExitY", "Tank Exit Point Y", 200, -500, 500); + h_tankExitY->GetXaxis()->SetTitle("y [cm]"); + + h_tankExitZ = new TH1D("h_tankExitZ", "Tank Exit Point Z", 200, -500, 500); + h_tankExitZ->GetXaxis()->SetTitle("z [cm]"); + +} + +void MuonFitter::SaveHistograms() +{ + h_num_mrd_layers->Write(); + //h_clusterhit_timespread->Write(); + if (!isData) + { + //h_truevtx_angle->Write(); + h_true_tanktrack_len->Write(); + h_clusterPE->Write(); + h_clusterPE_fit->Write(); + h_clusterPE_fit_haspion->Write(); + h_clusterPE_lrg_ediff->Write(); + h_clusterPE_lrg_ediff_haspion->Write(); + h_pca_angle->Write(); + h_remainder_track_last20MeV->Write(); + h_true_reco_Ediff_last20MeV->Write(); + h_remainder_track_Ediff_last20MeV->Write(); + } + h_tankexit_to_pmt->Write(); + h_tanktrack_ai->Write(); + h_eff_area_pmt->Write(); + h_fpmt->Write(); + //h_tdiff->Write(); + if (reco_mode) + { + h_uber_t0widths->Write(); + h_fitted_tank_track->Write(); + h_tank_mrd_E->Write(); + if (!isData) + { + h_deltaR->Write(); + h_transverse->Write(); + h_parallel->Write(); + h_true_reco_E->Write(); + h_true_reco_Ediff->Write(); + h_mrd_eloss_diff->Write(); + h_tank_track_diff_small->Write(); + h_tank_track_diff_large->Write(); + } + } +} + +void MuonFitter::InitCanvases() +{ + //-- Canvases + c_eta_ai = new TCanvas("c_eta_ai", "Charge per cm (#eta)", 800, 600); + c_h_tzero = new TCanvas("c_h_tzero", "t0", 800, 600); +} + +void MuonFitter::SaveCanvases() +{ + +} + +void MuonFitter::InitGraphs() +{ + //-- Graphs + // photon density (eta) vs tank track segment (ai) plot + gr_eta_ai = new TGraph(); + gr_eta_ai->SetLineWidth(0); + gr_eta_ai->SetMarkerStyle(25); + gr_eta_ai->SetMarkerColor(46); + gr_eta_ai->SetFillColor(0); + gr_eta_ai->GetXaxis()->SetTitle("a_{i} [cm]"); + gr_eta_ai->GetYaxis()->SetTitle("#eta (n_{PE}/f)"); + + // running avg of photon density (eta) + gr_running_avg = new TGraph(); + gr_running_avg->SetLineWidth(0); + gr_running_avg->SetMarkerStyle(8); + gr_running_avg->SetMarkerColor(38); + gr_running_avg->SetFillColor(0); + gr_running_avg->GetXaxis()->SetTitle("a_{i} [cm]"); + gr_running_avg->GetYaxis()->SetTitle("#eta (n_{PE}/f)"); + +} + +double MuonFitter::PCATrackAngle(std::vector v_MrdPMTsHit) +{ + // ------------------------------------------------------------ + // --- Use PCA to determine track angle in MRD ---------------- + // ------------------------------------------------------------ + //-- Code based on https://github.com/JaydipSingh/EnergyStudies/blob/main/trackAna_module.cc#L468 + //-- First define vectors to store xyz of each hit + std::vector fRec_SpacePoint_X; + std::vector fRec_SpacePoint_Y; + std::vector fRec_SpacePoint_Z; + + for (int i = 0; i < v_MrdPMTsHit.size(); ++i) + { + unsigned long detkey = (unsigned long)v_MrdPMTsHit.at(i); + //std::cout << " [debug] PCA algorithm - detkey: " << detkey << std::endl; + if (detkey < 26) continue; //skip FMV hits + Paddle *mrdpaddle = (Paddle *)geom->GetDetectorPaddle(detkey); + Position position_MRD = mrdpaddle->GetOrigin(); + + fRec_SpacePoint_X.push_back(mrd_center_x[detkey]); + fRec_SpacePoint_Y.push_back(mrd_center_y[detkey]); + fRec_SpacePoint_Z.push_back(mrd_center_z[detkey]); + } + + //-- Put all the xyz info into one array + double *xyz[3]; + TVector3 pos(0,0,0); + TVector3 dir; + xyz[0] = fRec_SpacePoint_X.data(); + xyz[1] = fRec_SpacePoint_Y.data(); + xyz[2] = fRec_SpacePoint_Z.data(); + size_t npts = fRec_SpacePoint_X.size(); + + if (npts < 2) + { + //throw std::exception("tpcvechitfinder2_module.cc: too few TPCClusters to fit a line in linefit"); + std::cout << " MuonFitter Tool: PCA Method: Too few TPCClusters to fit a line in linefit" << std::endl; + } + + TMatrixDSym covmat(3); //covariance matrix (use symmetric version) + + // position is just the average of the coordinates + double psum[3] = {0,0,0}; + for (size_t ipoint=0; ipoint v_MrdPMTsHit) +{ + //-- Calculate MRD track by "connecting the dots (hits)" + + double conn_dots_mrd_track = 0; + + //-- First sort MRD PMTs IDs; MrdPMTsHit is type std::vector + std::sort(v_MrdPMTsHit.begin(), v_MrdPMTsHit.end()); + + //-- QA: Check that MRD pmts have been sorted + std::cout << " [debug] sorted MRD PMTs: "; + for (int i = 0; i < v_MrdPMTsHit.size(); ++i) { std::cout << v_MrdPMTsHit.at(i) << ","; } + std::cout << std::endl; + + //-- Now connect the dots + for (int i = 1; i < v_MrdPMTsHit.size(); ++i) + { + unsigned long detkey1 = (unsigned long)v_MrdPMTsHit.at(i-1); + unsigned long detkey2 = (unsigned long)v_MrdPMTsHit.at(i); + + //-- XXX:For some reason, there are FMV PMTs in these clusters + if (detkey1 < 26) continue; + + double dist_btwn_lyrs = TMath::Sqrt(pow((mrd_center_x[detkey2]-mrd_center_x[detkey1]),2) + pow((mrd_center_y[detkey2]-mrd_center_y[detkey1]),2) + pow((mrd_center_z[detkey2]-mrd_center_z[detkey1]),2)); + + conn_dots_mrd_track += dist_btwn_lyrs; + + //-- QA: Check calculations + std::cout << " [debug] detkey 1,2: " << detkey1 << "," << detkey2 << std::endl; + std::cout << " [debug] dist_btwn_lyrs: " << dist_btwn_lyrs << std::endl; + std::cout << " [debug] conn_dots_mrd_track: " << conn_dots_mrd_track << std::endl; + } //-- Done connecting the dots + + return conn_dots_mrd_track; +} + +double MuonFitter::CalcNeutrinoEnergy(double Emu, double cosT) +{ + //-- Calculate the neutrino energy from reconstructed muon energy + //-- and track angle + //-- Emu: SimpleRecoTotalEnergy + //-- cosT: SimpleRecoCosTheta + + double Ev = 0; + double Mp = 938.272; //MeV + double Mn = 939.565; //MeV + double Eb = 26; + double Mmu = 105.658; //MeV + double pmu = sqrt(Emu*Emu-Mmu*Mmu); + Ev = ((Mp*Mp-pow((Mn-Eb),2)-Mmu*Mmu+2*(Mn-Eb)*Emu)/(2*(Mn-Eb-Emu+pmu*cosT))); + std::cout <<"Emu: "< +#include +#include +//#include +#include + +#include "Tool.h" + +#include "TFile.h" +#include "TCanvas.h" +#include "TEllipse.h" +#include "TGraph.h" +#include "TH1D.h" +#include "TH2D.h" +#include "TLegend.h" +#include "TLine.h" +#include "TMath.h" +#include "TMarker.h" +#include "TPolyMarker.h" +#include "TTree.h" +#include "TVector3.h" +#include "TVectorD.h" +#include "TPolyLine3D.h" +#include "TGeoManager.h" +#include "TGeoMaterial.h" +#include "TGeoMedium.h" +#include "TGeoVolume.h" +#include "TGeoNode.h" +#include "TGeoSphere.h" +#include "TVirtualGeoTrack.h" +#include "TLatex.h" +#include "TMatrixD.h" +#include "TMatrixDSym.h" + +#include "Hit.h" + +/** + * \class MuonFitter + * + * $ Author: J.He $ + * $ Last Updated: 2024/05/03 $ + * Contact: juhe@ucdavis.edu +*/ + +class MuonFitter: public Tool { + + + public: + + MuonFitter(); ///< Simple constructor + bool Initialise(std::string configfile,DataModel &data); + bool Execute(); + bool Finalise(); + Position Line3D(double x1, double y1, double z1, double x2, double y2, double z2, double C, std::string coord); + void reset_3d(); + bool FileExists(std::string fname); + void LoadTankTrackFits(); + double CalcTankdEdx(double input_E); + double CalcMRDdEdx(double input_E); + void ResetVariables(); + void InitHistograms(); + void SaveHistograms(); + void InitCanvases(); + void SaveCanvases(); + void InitGraphs(); + double PCATrackAngle(std::vector v_MrdPMTHits); + double MRDConnectDots(std::vector v_MrdPMTHits); + double CalcNeutrinoEnergy(double Emu, double cosT); + double CalcQ2(double Emu, double cosT, double Ev); + + + private: + + //constants + double LUX_AREA = 470.; //10-inch R7081 Hamamatsu + double ETEL_AREA = 613.; //11-inch D784UKFLB ETEL + double HAMAMATSU_AREA = 330.; //8-inch R5912-100 Hamamatsu + double WATCHBOY_AREA = 470.; //10-inch R7081 Hamamatsu + double WATCHMAN_AREA = 470.; //10-inch R7081-100 Hamamatsu + + double PHOTON_DENSITY = 328.; // [#photons/cm] + double CHER_ANGLE_DEG = 41.; //[deg] 41 or 42? + double CHER_ANGLE_RAD = CHER_ANGLE_DEG*TMath::Pi()/180.; //[rads] + double ALPHA_FACTOR = PHOTON_DENSITY / (4.*TMath::Pi()*TMath::Sin(CHER_ANGLE_RAD)*TMath::Tan(CHER_ANGLE_RAD)); + + double I_O = 9.200e-5; //=11.5*8*0.000001 + double I_H = 1.920e-5; //=19.2*1*0.000001 + double I_GD = 5.888e-4; //=19.2*1*0.000001 + double I_S = 1.632e-4; //=10.6*16*0.000001 + double I_FE = 2.86e-4; //=11*26*0.000001 + double WATER_DENSITY = 1.0; //g/cm3 + double IRON_DENSITY = 7.874; //g/cm3 + + double ERECO_SHIFT = 0.; + + + //logging + int verbosity; + int v_error = 0; + int v_warning = 1; + int v_message = 2; + int v_debug = 3; + std::string logmessage; + + //config variables + bool isData; + bool plot3d = false; + bool draw3d_fmv = false; + bool draw3d_mrd = false; + bool save_hists = false; + double PMTMRDOffset; + double step_size_ai = 5.; + double insideAngle = -5.; + double outsideAngle = 5.; + double PMTQCut = 3.; + double EtaThreshold = 500.; + bool display_truth = false; + bool reco_mode = false; + std::string tankTrackFitFile; + std::string aiEtaFile; + bool use_nlyrs = false; + bool use_pca = false; + bool use_conn_dots = false; + bool use_eloss = true; + bool use_simple_ereco = false; + + //text files + std::ofstream pos_file; + std::ofstream truetrack_file; + std::ofstream lg_ediff_file; + + //root,plots + TFile *root_outp = nullptr; + + TCanvas *canvas_3d; + TCanvas *c_eta_ai; + TCanvas *c_h_tzero; + + TGraph *gr_eta_ai = nullptr; + TGraph *gr_running_avg = nullptr; + + TH1D *h_tzero = nullptr; + TH1D *h_num_mrd_layers = nullptr; + TH1D *h_truevtx_angle = nullptr; + TH1D *h_tankexit_to_pmt = nullptr; + TH1D *h_tanktrack_ai = nullptr; + TH1D *h_eff_area_pmt = nullptr; + TH1D *h_fpmt = nullptr; + TH1D *h_clusterhit_timespread = nullptr; + TH1D *h_avg_eta = nullptr; + TH1D *h_tdiff = nullptr; + TH1D *h_uber_t0widths = nullptr; + TH1D *h_true_tanktrack_len = nullptr; + TH1D *h_fitted_tank_track = nullptr; + TH1D *h_deltaR = nullptr; + TH1D *h_transverse = nullptr; + TH1D *h_parallel = nullptr; + TH2D *h_true_reco_E = nullptr; + TH1D *h_true_reco_Ediff = nullptr; + TH2D *h_tank_mrd_E = nullptr; + TH1D *h_mrd_eloss_diff = nullptr; + TH1D *h_tank_track_diff_small = nullptr; + TH1D *h_tank_track_diff_large = nullptr; + TH1D *h_clusterPE = nullptr; + TH1D *h_clusterPE_fit = nullptr; + TH1D *h_clusterPE_fit_haspion = nullptr; + TH1D *h_clusterPE_lrg_ediff = nullptr; + TH1D *h_clusterPE_lrg_ediff_haspion = nullptr; + TH1D *h_pca_angle = nullptr; + TH1D *h_remainder_track_last20MeV = nullptr; + TH1D *h_true_reco_Ediff_last20MeV = nullptr; + TH2D *h_remainder_track_Ediff_last20MeV = nullptr; + TH1D *h_tankExitX = nullptr; + TH1D *h_tankExitY = nullptr; + TH1D *h_tankExitZ = nullptr; + + //event variables + int partnumber; + uint32_t evnum; + int runnumber; + int subrunnumber; + int mcevnum; + uint16_t mctrignum; + std::string mcFile; + double trueVtxTime; + double trueVtxX, trueVtxY, trueVtxZ; + double trueDirX, trueDirY, trueDirZ; + double trueStopVtxX, trueStopVtxY, trueStopVtxZ; + double trueAngleRad, trueAngleDeg; + double trueTrackLengthInWater; + double trueTrackLengthInMRD; + double trueMuonEnergy; + int nrings; + std::vector particles_ring; + std::map>* m_hits = nullptr; + + //geometry + Geometry *geom = nullptr; + double tank_height; + double tank_radius; + double tank_center_x; + double tank_center_y; + double tank_center_z; + double detector_version; + std::string detector_config; + int n_tank_pmts; + int n_mrd_pmts; + int n_veto_pmts; + + //3d geometry + TGeoManager *ageom = nullptr; + TGeoMaterial *vacuum = nullptr; + TGeoMaterial *Fe = nullptr; + TGeoMedium *Air = nullptr; + TGeoMedium *Iron = nullptr; + TGeoVolume *EXPH = nullptr; //experimental hall + char blockName[100]; //char array to form strings w/ sprintf + int N = 0, maxN = 0; //Nth node + TGeoVolume *bBlock = nullptr; //building block of PMTs + std::map detkey_to_node; + std::map x_pmt, y_pmt, z_pmt; + std::map x_pmt_dir, y_pmt_dir, z_pmt_dir; + Int_t track_index = 0; + Int_t ntracks = 0; + TVirtualGeoTrack *track = nullptr; + std::map> mrd_x, mrd_y, mrd_z; + std::map mrd_center_x, mrd_center_y, mrd_center_z; + + //maps,vectors + std::map ChannelKeyToSPEMap; + std::map> *tdcdata = nullptr; + std::map m_pmt_area; + std::map> *m_all_clusters = nullptr; + std::map> *m_all_clusters_MC = nullptr; + std::map> *m_all_clusters_detkeys = nullptr; + std::map> m_tank_track_fits; + std::vector *mcParticles = nullptr; + std::vector LayersHit; + std::vector MrdPMTsHit; + + //mrd + int numTracksInEv = 0; + std::vector* mrdTracks; //the reconstructed tracks + Position mrdStartVertex; + Position mrdStopVertex; + Position tankExitPoint; + double trackAngleRad = -69., trackAngleDeg = -69.; + double trackAngleError = -69.; + double penetrationDepth = -69.; + Position mrdEntryPoint; + int numLayersHit = 0; + double mrdEnergyLoss = 0.; + double mrdEnergyLossError = 0.; + double mrdStartTime = -69.; + + //misc + double avg_eta; + double left_avg_eta; + double right_avg_eta; + int num_left_eta; + int num_right_eta; + + // reconstruction variables (for NeutronMultiplicity toolchain) + int SimpleRecoFlag; + double SimpleRecoEnergy; + Position SimpleRecoVtx; + Position SimpleRecoStopVtx; + double SimpleRecoCosTheta; + double SimpleRecoPt; + bool SimpleRecoFV; + double SimpleRecoMrdEnergyLoss; + double SimpleRecoTrackLengthInMRD; + Position SimpleRecoMRDStart; + Position SimpleRecoMRDStop; + int DownstreamFV; + int FullCylFV; + double SimpleRecoNeutrinoEnergy; + double SimpleRecoQ2; + +}; + + +#endif diff --git a/UserTools/PMTDataDecoder/PMTDataDecoder.cpp b/UserTools/PMTDataDecoder/PMTDataDecoder.cpp index ee4629f5b..00c6db28b 100644 --- a/UserTools/PMTDataDecoder/PMTDataDecoder.cpp +++ b/UserTools/PMTDataDecoder/PMTDataDecoder.cpp @@ -46,6 +46,13 @@ bool PMTDataDecoder::Initialise(std::string configfile, DataModel &data){ m_data->CStore.Set("FIFOError1",fifo1); m_data->CStore.Set("FIFOError2",fifo2); + saveRWMRaw = true; + saveBRFRaw = true; + m_variables.Get("saveRWMRaw",saveRWMRaw); + m_variables.Get("saveBRFRaw",saveBRFRaw); + RWMRawWaveforms = new std::map>; + BRFRawWaveforms = new std::map>; + std::cout << "PMTDataDecoder Tool: Initialized successfully" << std::endl; return true; } @@ -305,6 +312,46 @@ bool PMTDataDecoder::Execute(){ m_data->CStore.Set("FIFOPMTWaves",FIFOPMTWaves); m_data->CStore.Set("TimestampsFromTheFuture",TimestampsFromTheFuture); + // loop the FinishedPMTWaves, for each timestamp, put the RWM and BRF waveform to RWMRawWaveforms and BRFRawWaveforms + if(saveBRFRaw || saveRWMRaw) + { + for (std::map, std::vector>>::iterator it = FinishedPMTWaves->begin(); it != FinishedPMTWaves->end(); it++) + { + uint64_t timestamp = it->first; + std::map, std::vector> afinishedPMTWaves = FinishedPMTWaves->at(timestamp); + for (std::pair, std::vector> apair : afinishedPMTWaves) + { + int CardID = apair.first.at(0); + int ChannelID = apair.first.at(1); + int SlotNum = CardID % 100; + int CrateNum = CardID / 1000; + unsigned int uCrateNum = (unsigned int)CrateNum; + unsigned int uSlotNum = (unsigned int)SlotNum; + unsigned int uChannelID = (unsigned int)ChannelID; + + + //in MonitorTankTime tool, it load a file about active slot and crate, if not active, don't find the waveform in it. not sure do we need it or not + if(saveBRFRaw){ + if(uCrateNum == 1 && uSlotNum == 15 && ChannelID == 1) + { + std::vector BRFWaveform = apair.second; + (*BRFRawWaveforms)[timestamp] = BRFWaveform; + } + } + if(saveRWMRaw){ + if(uCrateNum == 1 && uSlotNum == 15 && ChannelID == 2) + { + std::vector RWMWaveform = apair.second; + (*RWMRawWaveforms)[timestamp] = RWMWaveform; + } + } + } + } + } + + m_data->CStore.Set("RWMRawWaveforms",RWMRawWaveforms); + m_data->CStore.Set("BRFRawWaveforms",BRFRawWaveforms); + //Check the size of the WaveBank to see if things are bloating Log("PMTDataDecoder Tool: Size of WaveBank (# waveforms partially built): " + to_string(WaveBank.size()),v_message, verbosity); diff --git a/UserTools/PMTDataDecoder/PMTDataDecoder.h b/UserTools/PMTDataDecoder/PMTDataDecoder.h index 0e3274a57..8972b3950 100644 --- a/UserTools/PMTDataDecoder/PMTDataDecoder.h +++ b/UserTools/PMTDataDecoder/PMTDataDecoder.h @@ -132,6 +132,12 @@ class PMTDataDecoder: public Tool { int vv_debug=4; std::string logmessage; + //option about whether to save raw RWM and BRF waveforms + bool saveRWMRaw; + bool saveBRFRaw; + std::map>* RWMRawWaveforms; //Key: MTCTime, Value: RWM waveform + std::map>* BRFRawWaveforms; //Key: MTCTime, Value: BRF waveform + }; diff --git a/UserTools/PhaseIITreeMaker/PhaseIITreeMaker.cpp b/UserTools/PhaseIITreeMaker/PhaseIITreeMaker.cpp index ec8c4c5f4..4212820c4 100644 --- a/UserTools/PhaseIITreeMaker/PhaseIITreeMaker.cpp +++ b/UserTools/PhaseIITreeMaker/PhaseIITreeMaker.cpp @@ -13,10 +13,12 @@ bool PhaseIITreeMaker::Initialise(std::string configfile, DataModel &data){ ///////////////////////////////////////////////////////////////// hasGenie = false; + hasBNBtimingMC = false; m_variables.Get("verbose", verbosity); m_variables.Get("IsData",isData); m_variables.Get("HasGenie",hasGenie); + m_variables.Get("HasBNBtimingMC",hasBNBtimingMC); m_variables.Get("TankHitInfo_fill", TankHitInfo_fill); m_variables.Get("MRDHitInfo_fill", MRDHitInfo_fill); m_variables.Get("fillCleanEventsOnly", fillCleanEventsOnly); @@ -106,7 +108,10 @@ bool PhaseIITreeMaker::Initialise(std::string configfile, DataModel &data){ fPhaseIITankClusterTree->Branch("SiPM1NPulses",&fSiPM1NPulses,"SiPM1NPulses/I"); fPhaseIITankClusterTree->Branch("SiPM2NPulses",&fSiPM2NPulses,"SiPM2NPulses/I"); } - + // MC BNB spill structure timing - AssignBunchTimingMC tool + if(hasBNBtimingMC){ + fPhaseIITankClusterTree->Branch("bunchTimes",&fbunchTimes,"bunchTimes/D"); + } } if(MRDClusterProcessing){ @@ -391,6 +396,12 @@ bool PhaseIITreeMaker::Initialise(std::string configfile, DataModel &data){ fPhaseIITrigTree->Branch("trueKPlusCher",&fTrueKPlusCher,"trueKPlusCher/I"); fPhaseIITrigTree->Branch("trueKMinus",&fTrueKMinus,"trueKMinus/I"); fPhaseIITrigTree->Branch("trueKMinusCher",&fTrueKMinusCher,"trueKMinusCher/I"); + fPhaseIITrigTree->Branch("trueBJx",&fTrueBJx,"trueBJx/D"); + fPhaseIITrigTree->Branch("truey",&fTruey,"truey/D"); + fPhaseIITrigTree->Branch("trueq0",&fTrueq0,"trueq0/D"); + fPhaseIITrigTree->Branch("trueq3",&fTrueq3,"trueq3/D"); + fPhaseIITrigTree->Branch("trueTargetZ",&fTrueTarget,"trueTargetZ/I"); + fPhaseIITrigTree->Branch("trueW2",&fTrueW2,"trueW2/D"); } if (Reweight_fill){ @@ -638,6 +649,10 @@ bool PhaseIITreeMaker::Execute(){ if(!good_class){ if(verbosity>3) Log("PhaseIITreeMaker Tool: No cluster classifiers. Continuing tree",v_debug,verbosity); } + bool good_bunch = this->LoadBNBtimingMC(it_cluster_pair_mc->first); + if(!good_bunch){ + if(verbosity>v_debug) Log("PhaseIITreeMaker Tool: BNB timing (MC). Continuing tree",v_debug,verbosity); + } } if(SiPMPulseInfo_fill) this->LoadSiPMHits(); @@ -952,6 +967,10 @@ void PhaseIITreeMaker::ResetVariables() { fSiPMNum.clear(); } + if(hasBNBtimingMC){ + fbunchTimes = -9999; + } + if(TankClusterProcessing){ fClusterMaxPE = -9999; fClusterChargePointX = -9999; @@ -1032,6 +1051,12 @@ void PhaseIITreeMaker::ResetVariables() { fTrueKPlusCher = -9999; fTrueKMinus = -9999; fTrueKMinusCher = -9999; + fTrueW2 = -9999; + fTrueBJx = -9999; + fTruey = -9999; + fTrueTarget = -9999; + fTrueq0 = -9999; + fTrueq3 = -9999; } if (Reweight_fill){ @@ -1225,6 +1250,18 @@ bool PhaseIITreeMaker::LoadTankClusterClassifiers(double cluster_time){ return good_classifiers; } +bool PhaseIITreeMaker::LoadBNBtimingMC(double cluster_time){ + Log("PhaseITreeMaker tool: Getting BNB timing (MC)", v_debug, verbosity); + bool got_bnb_times = m_data->Stores.at("ANNIEEvent")->Get("bunchTimes", bunchTimes); + if(!got_bnb_times){ + Log("PhaseITreeMaker tool: BNB timing (MC) not found!", v_debug, verbosity); + } else { + Log("PhaseITreeMaker tool: Setting fbunchTimes variables", v_debug, verbosity); + fbunchTimes = bunchTimes.at(cluster_time); + } + return got_bnb_times; +} + void PhaseIITreeMaker::LoadTankClusterHits(std::vector cluster_hits){ Position detector_center=geom->GetTankCentre(); double tank_center_x = detector_center.X(); @@ -1951,6 +1988,9 @@ bool PhaseIITreeMaker::FillMCTruthInfo() { bool TrueCC, TrueNC, TrueQEL, TrueDIS, TrueCOH, TrueMEC, TrueRES; int fsNeutrons, fsProtons, fsPi0, fsPiPlus, fsPiPlusCher, fsPiMinus, fsPiMinusCher; int fsKPlus, fsKPlusCher, fsKMinus, fsKMinusCher, TrueNuPDG, TrueFSLeptonPdg; + int TrueTarget; + double TrueW2, TrueBJx, Truey, Trueq0, Trueq3; + double TrueNuIntxVtxDisToEdge; Position TrueFSLeptonVtx; Direction TrueFSLeptonMomentum; Direction TrueNeutrinoMomentum; @@ -1985,11 +2025,18 @@ bool PhaseIITreeMaker::FillMCTruthInfo() { bool get_fsl_mass = m_data->Stores["GenieInfo"]->Get("FSLeptonMass",TrueFSLeptonMass); bool get_fsl_pdg = m_data->Stores["GenieInfo"]->Get("FSLeptonPdg",TrueFSLeptonPdg); bool get_fsl_energy = m_data->Stores["GenieInfo"]->Get("FSLeptonEnergy",TrueFSLeptonEnergy); + bool get_w = m_data->Stores["GenieInfo"]->Get("EventW2",TrueW2); + bool get_bjx = m_data->Stores["GenieInfo"]->Get("EventBjx",TrueBJx); + bool get_y = m_data->Stores["GenieInfo"]->Get("Eventy",Truey); + bool get_targetZ = m_data->Stores["GenieInfo"]->Get("TargetZ",TrueTarget); + bool get_q0 = m_data->Stores["GenieInfo"]->Get("Eventq0",Trueq0); + bool get_q3 = m_data->Stores["GenieInfo"]->Get("Eventq3",Trueq3); + bool get_nu_pdg = m_data->Stores["GenieInfo"]->Get("NeutrinoPDG",TrueNuPDG); std::cout <<"get_neutrino_energy: "< cluster_hits); void LoadTankClusterHitsMC(std::vector cluster_hits,std::vector cluster_detkeys); bool LoadTankClusterClassifiers(double cluster_time); + bool LoadBNBtimingMC(double cluster_time); void LoadAllTankHits(bool IsData); void LoadSiPMHits(); @@ -85,6 +86,7 @@ class PhaseIITreeMaker: public Tool { //General variables bool isData; bool hasGenie; + bool hasBNBtimingMC; std::map* AuxChannelNumToTypeMap; std::map ChannelKeyToSPEMap; @@ -206,6 +208,10 @@ class PhaseIITreeMaker: public Tool { std::vector fADCWaveformChankeys; std::vector fADCWaveformSamples; + // ************** MC BNB Spill Structure ************* // + std::map bunchTimes; + double fbunchTimes; + // ************ Muon reconstruction level information ******** // std::string MRDTriggertype; std::vector* theMrdTracks; // the reconstructed tracks @@ -313,6 +319,12 @@ class PhaseIITreeMaker: public Tool { int fTrueFSLPdg; double fTrueFSLEnergy; double fTrueQ2; + double fTrueW2; + double fTrueBJx; + double fTruey; + double fTrueq0; + double fTrueq3; + int fTrueTarget; int fTrueCC; int fTrueNC; int fTrueQEL; diff --git a/UserTools/PhaseIITreeMaker/README.md b/UserTools/PhaseIITreeMaker/README.md index 7ba859e72..15ad8e003 100644 --- a/UserTools/PhaseIITreeMaker/README.md +++ b/UserTools/PhaseIITreeMaker/README.md @@ -18,35 +18,44 @@ verbose (1 or 0) Defines the level of verbosity for outputs of PhaseIITreeMaker algorithm. OutputFile TestFile.ntuple.root -ClusterProcessing 1 -Process cluster-level trees. Each ntuple entry contains all the PMT hits observed +Output filename + +TankClusterProcessing 1 +Process PMT cluster-level trees. Each ntuple entry contains all the PMT hits observed in a cluster (as defined in the ClusterFinder tool) as well as cluster classifiers (as defined in the ClusterClassifiers tool), along with other general information -(run/subrun number, nhits, SiPM hits, trigger time). +(run/subrun number, nhits, SiPM hits, trigger time). + +MRDClusterProcessing 1 +Process MRD cluster-level trees. Each ntuple entry contains all the MRD hits observed +in a cluster (as defined in the TimeClustering tool), along with other general information +(run/subrun number, nhits, trigger time). TriggerProcessing 1 Process trigger-level trees. Each ntuple entry contains all PMT hits observed for a given trigger, along with other general information (run/subrun number, -nhits,trigger time). - +nhits,trigger time,beam parameters). -HitInfo_fill 1 -Fill in hit information for all hits (Time,Charge,PE,Position). +TankHitInfo_fill 1 +Fill in PMT hit information for all hits (Time,Charge,PE,Position). +MRDHitInfo_fill 1 +Fill in MRD hit information for all hits (Time,Channel ID). SiPMPulseInfo_fill 1 Fill in SiPM pulse information (charge/time/SiPM number). +MRDReco_fill 0 +Fill in track reconstruction parameters defined by the FindMRDTracks tool. + fillCleanEventsOnly (1 or 0) Only fill tree with events that pass the event selection defined in the EventSelector tool. - Reco_fill 0 Fill in final reconstruction parameters estimated using the Tank Reconstruction algorithms. - MCTruth_fill (1 or 0) Input will determine if Truth information from files given is saved to the reco tree. Will output to tree if 1. @@ -69,4 +78,15 @@ reconstruction chain are saved to the tree. Values include seeds from SeedVtxFi fits from PointPosFinder, and FOMs for likelihood fits at each reconstruction step. Will output to tree if 1. +IsData (1 or 0) +Whether the data we are processing is real (Hits) or MC (MCHits). + +HasGenie (1 or 0) +Input determines whether GENIE-level information is loaded by the LoadGENIEEvent tool. + +HasBNBtimingMC (1 or 0) +Input determines whether cluster times (MC) are spill-corrected to produce a BNB-realistic timing structure. +Must have HasGenie 1 and TankClusterProcessing 1 enabled. +(as defined in the AssignBunchTimingMC tool). + ``` diff --git a/UserTools/PrintDQ/PrintDQ.cpp b/UserTools/PrintDQ/PrintDQ.cpp new file mode 100644 index 000000000..92bf31753 --- /dev/null +++ b/UserTools/PrintDQ/PrintDQ.cpp @@ -0,0 +1,446 @@ +#include "PrintDQ.h" + +PrintDQ::PrintDQ():Tool(){} + +//------------------------------------------------------------------------------ + +bool PrintDQ::Initialise(std::string configfile, DataModel &data){ + + // Get configuration variables and set default values if necessary + + if ( !configfile.empty() ) m_variables.Initialise(configfile); + m_data = &data; + + bool got_verbosity = m_variables.Get("verbosity", verbosity); + + if (!got_verbosity) { + verbosity = 0; + logmessage = "Warning (PrintDQ): \"verbosity\" not set in the config, defaulting to 0"; + Log(logmessage, v_warning, verbosity); + } + + // initialize counts + totalclusters = 0; + totalevents = 0; + totalclusters_in_prompt = 0; + totalclusters_in_ext = 0; + totalext_rate_1 = 0; + totalext_rate_2 = 0; + totalokay_beam = 0; + totaltmrd_coinc = 0; + totalveto_hit = 0; + totalveto_tmrd_coinc = 0; + totalhas_track = 0; + totalhas_lappd = 0; + totalhas_BRF = 0; + totaltimezero = 0; + totalclusters_in_spill = 0; + + return true; +} + +//------------------------------------------------------------------------------ + + +bool PrintDQ::Execute() +{ + + if (verbosity >= v_debug) { + std::cout << "PrintDQ: Executing tool..." << std::endl; + } + + ResetVariables(); + if (verbosity >= v_debug) { + std::cout << "PrintDQ: Succesfully reset variables" << std::endl; + } + + if (!LoadStores()) // Load info from store + return false; + if (verbosity >= v_debug) { + std::cout << "PrintDQ: Store info loading successful" << std::endl; + } + + if (!GrabVariables()) // Assign variable information for more complex objects + return false; + if (verbosity >= v_debug) { + std::cout << "PrintDQ: Tricky variables assigned successfully" << std::endl; + } + + FindCounts(); + if (verbosity >= v_debug) { + std::cout << "PrintDQ: Succesfully found counts for that ANNIEEvent" << std::endl; + } + + return true; + +} + + +//------------------------------------------------------------------------------ + +bool PrintDQ::Finalise() +{ + + if (verbosity >= v_debug) { + std::cout << "PrintDQ: Calculating rates" << std::endl; + } + + // calculate rates + float_t events_per_cluster = totalclusters / totalevents; + float_t ext_rate_1 = totalext_rate_1 * 100 / totalevents; + float_t ext_rate_2 = totalext_rate_2 * 100 / totalevents; + float_t okay_beam = totalokay_beam * 100 / totalevents; + float_t has_track = totalhas_track * 100 / totalevents; + float_t has_lappd = totalhas_lappd * 100 / totalevents; + float_t has_BRF = totalhas_BRF * 100 / totalevents; + float_t timezero = totaltimezero * 100 / totalevents; + float_t tmrd_coinc = totaltmrd_coinc * 100 / totalevents; + float_t veto_hit = totalveto_hit * 100 / totalevents; + float_t veto_tmrd_coinc = totalveto_tmrd_coinc * 100 / totalevents; + float_t clusters_in_spill = totalclusters_in_spill * 100 / totalclusters; + float_t clusters_in_prompt = totalclusters_in_prompt * 100 / totalclusters; + float_t clusters_in_ext = totalclusters_in_ext * 100 / totalclusters; + + if (verbosity >= v_debug) { + std::cout << "PrintDQ: Calculating errors" << std::endl; + } + + // and errors + float_t er_events_per_cluster = CalculateStatError(totalclusters, totalevents) / 100; // clusters per event is a true rate, not a % + float_t er_ext_rate_1 = CalculateStatError(totalext_rate_1, totalevents); + float_t er_ext_rate_2 = CalculateStatError(totalext_rate_2, totalevents); + float_t er_okay_beam = CalculateStatError(totalokay_beam, totalevents); + float_t er_has_lappd = CalculateStatError(totalhas_lappd, totalevents); + float_t er_has_BRF = CalculateStatError(totalhas_BRF, totalevents); + float_t er_timezero = CalculateStatError(totaltimezero, totalevents); + float_t er_tmrd_coinc = CalculateStatError(totaltmrd_coinc, totalevents); + float_t er_veto_hit = CalculateStatError(totalveto_hit, totalevents); + float_t er_veto_tmrd_coinc = CalculateStatError(totalveto_tmrd_coinc, totalevents); + float_t er_has_track = CalculateStatError(totalhas_track, totalevents); + float_t er_clusters_in_spill = CalculateStatError(totalclusters_in_spill, totalclusters); + float_t er_clusters_in_prompt = CalculateStatError(totalclusters_in_prompt, totalclusters); + float_t er_clusters_in_ext = CalculateStatError(totalclusters_in_ext, totalclusters); + + // output + std::cout << "" << std::endl; + std::cout << "" << std::endl; + std::cout << "**************************************" << std::endl; + std::cout << "Run " << fRunNumber << std::endl; + std::cout << "**************************************" << std::endl; + std::cout << "" << std::endl; + std::cout << "total events: " << totalevents << std::endl; + std::cout << "has LAPPD data: " << totalhas_lappd << " (" << has_lappd << "% +/- " << er_has_lappd << "%)" << std::endl; + std::cout << "has BRF fit: " << totalhas_BRF << " (" << has_BRF << "% +/- " << er_has_BRF << "%)" << std::endl; + std::cout << "eventTimeTank = 0: " << totaltimezero << " (" << timezero << "% +/- " << er_timezero << "%)" << std::endl; + std::cout << "beam_ok: " << totalokay_beam << " (" << okay_beam << "% +/- " << er_okay_beam << "%)" << std::endl; + std::cout << "total clusters: " << totalclusters << " (" << events_per_cluster << " +/- " << er_events_per_cluster << ")" << std::endl; + std::cout << "prompt clusters: " << totalclusters_in_prompt << " (" << clusters_in_prompt << "% +/- " << er_clusters_in_prompt << "%)" << std::endl; + std::cout << "spill clusters: " << totalclusters_in_spill << " (" << clusters_in_spill << "% +/- " << er_clusters_in_spill << "%)" << std::endl; + std::cout << "ext clusters: " << totalclusters_in_ext << " (" << clusters_in_ext << "% +/- " << er_clusters_in_ext << "%)" << std::endl; + std::cout << "extended (CC): " << totalext_rate_1 << " (" << ext_rate_1 << "% +/- " << er_ext_rate_1 << "%)" << std::endl; + std::cout << "extended (NC): " << totalext_rate_2 << " (" << ext_rate_2 << "% +/- " << er_ext_rate_2 << "%)" << std::endl; + std::cout << "Tank+MRD coinc: " << totaltmrd_coinc << " (" << tmrd_coinc << "% +/- " << er_tmrd_coinc << "%)" << std::endl; + std::cout << "1 MRD track: " << totalhas_track << " (" << has_track << "% +/- " << er_has_track << "%)" << std::endl; + std::cout << "Tank+Veto coinc: " << totalveto_hit << " (" << veto_hit << "% +/- " << er_veto_hit << "%)" << std::endl; + std::cout << "Tank+MRD+Veto coinc: " << totalveto_tmrd_coinc << " (" << veto_tmrd_coinc << "% +/- " << er_veto_tmrd_coinc << "%)" << std::endl; + std::cout << "" << std::endl; + std::cout << "" << std::endl; + + return true; +} + +//------------------------------------------------------------------------------ + +void PrintDQ::FindCounts() { + + // total beam triggers (UBT only) + int trigger_index = -1; // Default to -1 if not found + if (!fGroupedTriggerWord.empty()) { + for (size_t k = 0; k < fGroupedTriggerWord.size(); k++) { + if ((fGroupedTriggerWord)[k] == 14) { + trigger_index = static_cast(k); + break; + } + } + } + + if (trigger_index != -1) { // There is a beam trigger + Log("PrintDQ: We found an undelayed beam trigger!", v_debug, verbosity); + + totalevents++; + + + if (fBeamok == 1) { + totalokay_beam++; // all subsequent rates are based on the number of "good" beam triggers + Log("PrintDQ: beam_ok = 1 for this event", v_debug, verbosity); + } + + + // events with eventTimeTank == 0 (weird issue where ADV waveforms don't get timestamps) + if (fEventTimeTank == 0){ + totaltimezero++; + Log("PrintDQ: eventTimeTank = 0 for this event", v_debug, verbosity); + } + + + // Extended readout rates (1 = charge-based, 2 = forced, random) + if (fExtended == 1){ + totalext_rate_1++; + Log("PrintDQ: ext = 1 for this event", v_debug, verbosity); + } + if (fExtended == 2){ + totalext_rate_2++; + Log("PrintDQ: ext = 2 for this event", v_debug, verbosity); + } + + + // Does the event have LAPPDs? + if (fHasLAPPD == 1) { + totalhas_lappd++; + Log("PrintDQ: ext = 2 for this event", v_debug, verbosity); + } + + + // coincidences + if (fNoVeto == 0) { + totalveto_hit++; // opposite logic to NoVeto + Log("PrintDQ: Tank+Veto coincidence for this event", v_debug, verbosity); + } + if (fPMTMRDCoinc == 1) { + totaltmrd_coinc++; // Tank + MRD + if (fNoVeto == 0) { + totalveto_tmrd_coinc++; // Veto + Tank + MRD + Log("PrintDQ: Tank+Veto+MRD coincidence for this event", v_debug, verbosity); + } + // find MRD tracks + // Search through the MRD cluster array to see if any of them had a single track. If thats the case (and there was TankMRDCoinc), we can say there was a track + if (std::find(fNumClusterTracks.begin(), fNumClusterTracks.end(), 1) != fNumClusterTracks.end()) { + totalhas_track++; + Log("PrintDQ: Tank+MRD coincidence + 1 MRD Track for this event", v_debug, verbosity); + } + } + + + // Does the event have a usable BRF signal (+ fit) + if (fBRFFirstPeakFit != 0) { + totalhas_BRF++; + Log("PrintDQ: BRF fit found for this event", v_debug, verbosity); + } + + + // find total number of clusters, and how many of the prompt clusters are in the beam spill + Log("*************** Looking at clusters *****************", v_debug, verbosity); + for (size_t j = 0; j < fClusterTime.size(); j++) { // loop over all clusters + Log("######################################################", v_debug, verbosity); + + totalclusters++; + + std::ostringstream ct_message; + ct_message << "PrintDQ: PMT Cluster found, with time " << fClusterTime.at(j) << " ns"; + Log(ct_message.str(), v_debug, verbosity); + + if (fClusterTime[j] < 2000) { // cluster is in prompt window + totalclusters_in_prompt++; + Log("PrintDQ: cluster is in the prompt window (<2us)", v_debug, verbosity); + + if (fClusterTime[j] > 190 && fClusterTime[j] < 1750) { // based on expected beam spill structure from data + totalclusters_in_spill++; + Log("PrintDQ: cluster is in the beam spill (190:1750ns)", v_debug, verbosity); + } + } + else { + totalclusters_in_ext++; // clusters in the ext window + + Log("PrintDQ: cluster is in the ext window (>2us)", v_debug, verbosity); + } + } + Log("*****************************************************", v_debug, verbosity); + + } + +} + + +//------------------------------------------------------------------------------ + +float PrintDQ::CalculateStatError(float numerator, float denominator) { + + // return 0 if denom/numerator = 0 to avoid errors + if (denominator == 0 || numerator == 0) { + return 0; + } + + // Calculate stat error: sqrt( (dN/N)^2 + (dD/D)^2 ) * (N/D), where N/D is the rate + float relative_error_numerator = sqrt(numerator) / numerator; + float relative_error_denominator = sqrt(denominator) / denominator; + float total_relative_error = sqrt((relative_error_numerator * relative_error_numerator) + + (relative_error_denominator * relative_error_denominator)); + + // The error in the ratio is: ratio * total_relative_error + float ratio = 100 * numerator / denominator; // (needs to be multiplied by 100 as we are expressing them as %'s) + return ratio * total_relative_error; +} + + +//------------------------------------------------------------------------------ + +bool PrintDQ::LoadStores() +{ + // grab necessary information from Stores, and calculate other necessary parameters + + bool get_run = m_data->Stores["ANNIEEvent"]->Get("RunNumber", fRunNumber); + if (!get_run) { + Log("PrintDQ: RunNumber not found in the ANNIEEvent!", v_debug, verbosity); + } + + bool get_ext = m_data->Stores["ANNIEEvent"]->Get("TriggerExtended",fExtended); + if (!get_ext) { + Log("PrintDQ: no Extended Variable in the ANNIEEvent!", v_debug, verbosity); + } + + bool get_ETT = m_data->Stores["ANNIEEvent"]->Get("EventTimeTank", fEventTimeTank); + if (!get_ETT) { + Log("PrintDQ: no EventTimeTank in the ANNIEEvent!", v_debug, verbosity); + } + + bool get_veto = m_data->Stores["RecoEvent"]->Get("NoVeto", fNoVeto); + if (!get_veto) { + Log("PrintDQ: NoVeto not present in the RecoEvent! Are you sure you ran the EventSelector tool?", v_debug, verbosity); + } + + bool get_coinc = m_data->Stores["RecoEvent"]->Get("PMTMRDCoinc", fPMTMRDCoinc); + if (!get_coinc) { + Log("PrintDQ: PMTMRDCoinc not present in the RecoEvent! Are you sure you ran the EventSelector tool?", v_debug, verbosity); + } + + bool get_lappd = m_data->Stores["ANNIEEvent"]->Get("DataStreams", fDataStreams); + if (!get_lappd) { + Log("PrintDQ: DataStreams (used for hasLAPPD) not present in the ANNIEEvent!", v_debug, verbosity); + } + + bool get_BRF = m_data->Stores["ANNIEEvent"]->Get("BRFFirstPeakFit", fBRFFirstPeakFit); + if (!get_BRF) { + Log("PrintDQ: BRFFirstPeakFit not present in the ANNIEEvent! Are you sure you ran the FitRWMWaveform tool?", v_debug, verbosity); + } + + bool get_beam = m_data->Stores["ANNIEEvent"]->Get("beam_good", fBeamok); + if (!get_beam) { + Log("PrintDQ: no beam_good in the ANNIEEvent!", v_debug, verbosity); + } + + // Grouped Triggers + bool get_GT = m_data->Stores["ANNIEEvent"]->Get("GroupedTrigger", fGroupedTrigger); + if (!get_GT) { + Log("PrintDQ: no GroupedTrigger in the ANNIEEvent!", v_debug, verbosity); + } + + // PMT clusters (need the ClusterFinder tool) + bool get_Clusters = m_data->CStore.Get("ClusterMap", fClusterMap); + if (!get_Clusters) { + Log("PrintDQ: no ClusterMap in the CStore! Did you run the ClusterFinder tool?", v_debug, verbosity); + } + + // MRD Tracks (TimeClustering and FindMRDTracks tools) + bool get_mrdclusters = m_data->CStore.Get("MrdTimeClusters", fMrdTimeClusters); + if (!get_mrdclusters) { + Log("PrintDQ: No MRD clusters found! Did you run the TimeClustering tool?", v_debug, verbosity); + } + + return true; + +} + + +//------------------------------------------------------------------------------ + +void PrintDQ::ResetVariables() { + + // initialize to 0; if we dont find them in the Store, we want their counts to be 0 + fRunNumber = 0; + fExtended = 0; + fEventTimeTank = 0; + fNoVeto = 0; + fPMTMRDCoinc = 0; + fHasLAPPD = 0; + fBRFFirstPeakFit = 0; + fBeamok = 0; + + fClusterTime.clear(); + fGroupedTrigger.clear(); + fGroupedTriggerTime.clear(); + fGroupedTriggerWord.clear(); + fNumClusterTracks.clear(); + fDataStreams.clear(); + +} + + +//------------------------------------------------------------------------------ + +bool PrintDQ::GrabVariables() { + + // HasLAPPD + Log("PrintDQ: Seeing if DataStreams has LAPPDs", v_debug, verbosity); + if (fDataStreams["LAPPD"] == 1) + fHasLAPPD = 1; + else + fHasLAPPD = 0; + + // load grouped trigger info + Log("PrintDQ: Accessing GroupedTriggers", v_debug, verbosity); + for (std::map::iterator it = fGroupedTrigger.begin(); it != fGroupedTrigger.end(); ++it) + { + uint64_t key = it->first; + uint32_t value = it->second; + + fGroupedTriggerTime.push_back(key); + fGroupedTriggerWord.push_back(value); + } + + // load cluster time info + Log("PrintDQ: Accessing pairs in the cluster map", v_debug, verbosity); + for (std::pair>&& apair : *fClusterMap) { + double thisClusterTime = apair.first; // grab avg hit time of the cluster (clusterTime) + fClusterTime.push_back(thisClusterTime); + } + + // load MRD clusters and tracks + Log("PrintDQ: Accessing MRD Clusters", v_debug, verbosity); + int SubEventID; + for (int i = 0; i < (int)fMrdTimeClusters.size(); i++) { + + SubEventID = i; + + // Check for valid Track criteria + bool get_tracks = m_data->Stores["MRDTracks"]->Get("MRDTracks", ftheMrdTracks); + bool get_numtracks = m_data->Stores["MRDTracks"]->Get("NumMrdTracks", fnumtracksinev); + + int NumClusterTracks = 0; + Log("PrintDQ: Finding MRD Tracks", v_debug, verbosity); + for (int tracki = 0; tracki < fnumtracksinev; tracki++) { + + NumClusterTracks += 1; + BoostStore *thisTrackAsBoostStore = &(ftheMrdTracks->at(tracki)); + int TrackEventID = -1; + thisTrackAsBoostStore->Get("MrdSubEventID", TrackEventID); + if (TrackEventID != SubEventID) + continue; + + // If we're here, this track is associated with this cluster + + NumClusterTracks += 1; + } + + // get the track info + int ThisMRDClusterTrackNum = NumClusterTracks; + fNumClusterTracks.push_back(ThisMRDClusterTrackNum); + + } + + return true; +} + + +// ************************************************************************* // + +// done diff --git a/UserTools/PrintDQ/PrintDQ.h b/UserTools/PrintDQ/PrintDQ.h new file mode 100644 index 000000000..507d74082 --- /dev/null +++ b/UserTools/PrintDQ/PrintDQ.h @@ -0,0 +1,88 @@ +#ifndef PrintDQ_H +#define PrintDQ_H + +#include +#include + +#include "Tool.h" +#include "Hit.h" + + +/** + * \class PrintDQ + * + * A tool to print out statistics about processed runs for better Data Quality monitoring +* +* $Author: S.Doran $ +* $Date: 2024/10/17 $ +* Contact: doran@iastate.edu +*/ +class PrintDQ: public Tool { + + public: + + PrintDQ(); ///< Simple constructor + bool Initialise(std::string configfile,DataModel &data); ///< Initialise Function for setting up Tool resources. @param configfile The path and name of the dynamic configuration file to read in. @param data A reference to the transient data class used to pass information between Tools. + bool Execute(); ///< Execute function used to perform Tool purpose. + bool Finalise(); ///< Finalise function used to clean up resources. + + bool LoadStores(); ///< Loads all relevant information from the store and some other parameters, away from the Execute function + void ResetVariables(); ///< Clearing maps and resetting variables + bool GrabVariables(); ///< Assign values to tricky variables (clusterTime, Grouped Triggers, MRD Tracks) + void FindCounts(); ///< Loop over extracted event information and count them up + float CalculateStatError(float numerator, float denominator); ///< Statistical error calculation for the rates + + private: + + std::map> *fClusterMap = nullptr; ///< All clusters + std::vector> fMrdTimeClusters; ///< All MRD clusters + std::vector *ftheMrdTracks; ///< the reconstructed MRD tracks + std::map fDataStreams; ///< Tank, MRD, LAPPD data streams + std::map fGroupedTrigger; ///< collection of triggers for a single event + vector fGroupedTriggerTime; ///< corresponding timestamp for each trigger + vector fGroupedTriggerWord; ///< corresponding trigger number for each trigger + vector fClusterTime; ///< PMT cluster times + std::vector fNumClusterTracks; ///< MRD Tracks corresponding to MRD clusters (NumClusterTracks) + + int fRunNumber; ///< run number (tool assumes you're running over 1 run at a time) + int fExtended; ///< extended window trigger (0 = none, 1 = charge-based, 2 = forced) + ULong64_t fEventTimeTank; ///< ADC waveform timestamp + bool fNoVeto; ///< was the veto hit in coincidence with tank PMT activity? (NoVeto = 1 is no coincidence activity) + bool fPMTMRDCoinc; ///< was there an MRD cluster in coincidence with tank PMT activity? + double fBRFFirstPeakFit; ///< first peak of the BRF waveform, Gaussian fit + int fBeamok; ///< beam "ok" condition: (0.5e12 < pot < 8e12), (172 < horn val < 176), (downstream/upstream toroids within 5%) + int fnumtracksinev; ///< number of MRD tracks found in the event + int fHasLAPPD; ///< whether DataStreams contains LAPPDs + + /// *** description of print output from the tool *** + // counts across all events /// total counts (% / rate) --> other variables expressed as out of "total events" are out of "total events with undelayed beam triggers" + float_t totalclusters; ///< total clusters (clusters per event; not a %) + float_t totalevents; ///< total events with an undelayed beam trigger (no rate/%) + float_t totalclusters_in_prompt; ///< total clusters in prompt window (% out of total clusters) + float_t totalclusters_in_ext; ///< total clusters in ext window (% out of total clusters) + float_t totalclusters_in_spill; ///< total clusters in spill (190:1750ns) (% out of total clusters) + float_t totalext_rate_1; ///< total extended windows (CC, charge based) (% out of total events) + float_t totalext_rate_2; ///< total extended windows (NC, forced readout) (% out of total events) + float_t totalokay_beam; ///< total events with "beam_ok" condition (% out of total events) + float_t totaltmrd_coinc; ///< total events with PMT+MRD coincidence (% out of total events) + float_t totalveto_hit; ///< total events with PMR+Veto coicidence (% out of total events) + float_t totalveto_tmrd_coinc; ///< total events with PMT+MRD+Veto coincidence (% out of total events) + float_t totalhas_track; ///< total events with at least one instance of a single MRD track for a given MRD cluster (% out of total events) + float_t totalhas_lappd; ///< total events with LAPPD data present in the data stream (% out of total events) + float_t totalhas_BRF; ///< total events with a fit to the BRF waveform (% out of total events) + float_t totaltimezero; ///< total events with no timestamp for the ADC waveforms (% out of total events) + + + + /// \brief verbosity levels: if 'verbosity' < this level, the message type will be logged. + int verbosity; + int v_error=0; // STOP THE SHOW + int v_warning=1; // this and below the show will go on + int v_message=2; + int v_debug=3; + std::string logmessage; + +}; + + +#endif \ No newline at end of file diff --git a/UserTools/PrintDQ/README.md b/UserTools/PrintDQ/README.md new file mode 100644 index 000000000..e30a57774 --- /dev/null +++ b/UserTools/PrintDQ/README.md @@ -0,0 +1,64 @@ +# PrintDQ + +`PrintDQ` is a quick, easy to use data quality (DQ) tool that prints out run statistics. It's to be used over the beam ProcessedData created by the event building toolchain. This tool works by loading in `ANNIEEvent`, `RecoEvent`, `ClusterMap`, and `MrdTimeClusters` information, counting and calculating rates based on how many events fit various selection criteria. `PrintDQ` accesses PMT/MRD clusters, MRD tracks, and BRF fitting results, so it is necessary to run the following tools beforehand to ensure it executes properly: + +- `LoadANNIEEvent` +- `LoadGeometry` +- `TimeClustering` +- `FindMRDTracks` +- `ClusterFinder` +- `ClusterClassifiers` +- `EventSelector` +- `FitRWMWaveform` (new, PR #289) + +## Data + +`PrintDQ` currently just prints out the run statistics and does not add anything to the Store. Here's an example of the print output from the tool: +``` +************************************** +Run 4314 +************************************** + +total events: 6336 +has LAPPD data: 121 (1.90972% +/- 0.175261%) +has BRF fit: 6324 (99.8106% +/- 1.77415%) +eventTimeTank = 0: 29 (0.457702% +/- 0.0851874%) +beam_ok: 5018 (79.1982% +/- 1.49664%) +total clusters: 279 (0.0440341 +/- 0.00269367) +prompt clusters: 273 (97.8495% +/- 8.32999%) +spill clusters: 236 (84.5878% +/- 7.48089%) +ext clusters: 6 (2.15054% +/- 0.887344%) +extended (CC): 0 (0% +/- 0%) +extended (NC): 31 (0.489268% +/- 0.0880898%) +Tank+MRD coinc: 14 (0.22096% +/- 0.0591191%) +1 MRD track: 5 (0.0789141% +/- 0.0353054%) +Tank+Veto coinc: 30 (0.473485% +/- 0.0866505%) +Tank+MRD+Veto coinc: 4 (0.0631313% +/- 0.0315756%) +``` + +- `total events` = total events with an undelayed beam trigger (14) +- `has LAPPD data` = events where the Data Steams contains LAPPDs (% given out of total undelayed beam trigger events) +- `has BRF fit` = events where the BRF auxiliary waveform was successfully fit (% given out of total undelayed beam trigger events) +- `eventTimeTank` = events that have no timestamps for their ADC waveform for some reason (% given out of total undelayed beam trigger events) +- `beam_ok` = events with "good" beam conditions, as extracted by the BeamFetcherV2 tool (% given out of total undelayed beam trigger events). Good beam conditions are defined as: (0.5e12 < pot < 8e12), (172 < horn val < 176), (downstream/upstream toroids within 5%) +- `total clusters` = total number of clusters found in the events with an undelayed beam trigger (rate given as clusters per event) +- `prompt clusters` = total number of clusters found in the prompt 2us window (% given out of the total number of clusters) +- `spill clusters` = total number of clusters found in the beam spill: 190:1750ns (% given out of the total number of clusters) +- `ext clusters` = total number of clusters found in the extended window: >2us (% given out of the total number of clusters) +- `extended (CC)` = total number of events with an extended window, CC/charge-based readout (% given out of total undelayed beam trigger events) +- `extended (NC)` = total number of events with an extended window, NC/random/forced readout (% given out of total undelayed beam trigger events) +- `Tank+MRD coinc` = total number of events with Tank + MRD coincidence (% given out of total undelayed beam trigger events) - coincidence defined in the `EventSelector` tool. +- `1 MRD Track` = total events with at least one instance of a single MRD track for a given MRD cluster (% given out of total undelayed beam trigger events) +- `Tank+Veto coinc` = total number of events with Tank + Veto coincidence (% given out of total undelayed beam trigger events) - coincidence defined in the `EventSelector` tool. +- `Tank+MRD+Veto coinc` = total number of events with Tank + MRD + Veto coincidence (% given out of total undelayed beam trigger events) - coincidences defined in the `EventSelector` tool. + +## Configuration +``` +# PrintDQ Config File + +verbosity 0 +``` + +## Additional information + +This tool is meant for quick feedback on beam runs. Various statistics will be blank/missing if ran over source runs (but the tool should still work). The `LoadANNIEEvent` tool (to be run beforehand) loads in the ProcessedData via a `my_inputs.txt` file - make sure to populate this list with a single run's worth of part files. The tool is intended to be used over just one run at a time to provide an accurate snapshot of the run's conditions. This tool within a suitable toolchain may take several minutes depending on how many part files are present in the run (and on verbosity levels). diff --git a/UserTools/TriggerDataDecoder/TriggerDataDecoder.cpp b/UserTools/TriggerDataDecoder/TriggerDataDecoder.cpp index 56dae396a..98ac956f6 100644 --- a/UserTools/TriggerDataDecoder/TriggerDataDecoder.cpp +++ b/UserTools/TriggerDataDecoder/TriggerDataDecoder.cpp @@ -60,11 +60,17 @@ bool TriggerDataDecoder::Initialise(std::string configfile, DataModel &data){ bool TriggerDataDecoder::Execute(){ if (mode == "EventBuilding"){ + + processed_sources.clear(); + processed_ns.clear(); + m_data->CStore.Set("NewCTCDataAvailable",false); bool PauseCTCDecoding = false; m_data->CStore.Get("PauseCTCDecoding",PauseCTCDecoding); if (PauseCTCDecoding){ + if(verbosity > 0){ std::cout << "TriggerDataDecoder tool: Pausing trigger decoding to let Tank and MRD data catch up..." << std::endl; + } return true; } //Clear decoding maps if a new run/subrun is encountered @@ -98,7 +104,7 @@ bool TriggerDataDecoder::Execute(){ } bool new_ts_available = false; std::vector aTimeStampData = Tdata->TimeStampData; - std::cout <<"aTimeStampData.size(): "<0) std::cout <<"aTimeStampData.size(): "<v_debug) std::cout<<"TriggerDataDecoder Tool: Loading next TrigData from entry's index " << i <AddWord(aTimeStampData.at(i)); diff --git a/UserTools/Unity.h b/UserTools/Unity.h index ea6856348..10b5839b8 100644 --- a/UserTools/Unity.h +++ b/UserTools/Unity.h @@ -1,7 +1,184 @@ +#include "DummyTool.h" +#include "ExampleGenerateData.h" +#include "ExampleSaveStore.h" +#include "ExampleSaveRoot.h" +#include "ExampleloadStore.h" +#include "ExamplePrintData.h" +#include "ExampleLoadRoot.h" +#include "LAPPDBaselineSubtract.h" +#include "LAPPDcfd.h" +#include "TSplineFit.h" +#include "TPoly3.h" +#include "TZigZag.h" +#include "TOnePadDisplay.h" +#include "TBandedLE.h" +#include "LAPPDFilter.h" +#include "LAPPDFindPeak.h" +#include "LAPPDIntegratePulse.h" +#include "LAPPDParseACC.h" +#include "LAPPDParseScope.h" +#include "LAPPDSaveROOT.h" +#include "SaveANNIEEvent.h" +#include "LAPPDSim.h" +#include "LAPPDresponse.h" +#include "BeamTimeAna.h" +#include "BeamTimeTreeMaker.h" +#include "BeamTimeTreeReader.h" +#include "FindMrdTracks.h" +#include "LoadWCSim.h" +#include "wcsimT.h" +#include "PrintANNIEEvent.h" +#include "GenerateHits.h" +#include "NeutronStudyReadSandbox.h" +#include "NeutronStudyPMCS.h" +#include "NeutronStudyWriteTree.h" +#include "RawLoader.h" +#include "HeftyTreeReader.h" #include "Unity_recoANNIE.h" -#include "PlotWaveforms.h" -#include "Factory.h" +#include "ADCCalibrator.h" +#include "ADCHitFinder.h" +#include "BeamChecker.h" +#include "IFBeamDBInterface.h" +#include "BeamFetcher.h" +#include "FindTrackLengthInWater.h" +#include "LoadANNIEEvent.h" +#include "PhaseITreeMaker.h" +#include "MrdPaddlePlot.h" +#include "LoadWCSimLAPPD.h" +#include "LAPPDTree.h" +#include "WCSimDemo.h" +#include "DigitBuilder.h" +#include "VtxSeedGenerator.h" +#include "VtxPointPositionFinder.h" +#include "LAPPDlasertestHitFinder.h" +#include "RawLoadToRoot.h" +#include "MRDPulseFinder.h" +#include "LAPPDAnalysis.h" +#include "ExampleOverTool.h" +#include "PhaseIITreeMaker.h" +#include "VertexGeometryCheck.h" +#include "LikelihoodFitterCheck.h" +#include "EventSelector.h" +#include "SaveRecoEvent.h" +#include "VtxExtendedVertexFinder.h" +#include "VtxPointDirectionFinder.h" +#include "VtxPointVertexFinder.h" +#include "LoadCCData.h" +#include "MRDTree.h" +#include "PMTData.h" +//#include "LoadCCData/RunInformation.h" +//#include "LoadCCData/TrigData.h" +#include "HitCleaner.h" +#include "HitResiduals.h" +#include "MonitorReceive.h" +#include "MonitorSimReceive.h" +#include "EventSelectorDoE.h" +#include "DigitBuilderDoE.h" +#include "MonitorMRDTime.h" +#include "MonitorMRDLive.h" +#include "PulseSimulation.h" +#include "PlotLAPPDTimesFromStore.h" +#include "CheckDetectorCounts.h" +#include "MrdDistributions.h" +#include "MCParticleProperties.h" +#include "DigitBuilderROOT.h" +#include "MrdEfficiency.h" +#include "EventDisplay.h" +#include "TankCalibrationDiffuser.h" +#include "TotalLightMap.h" +#include "MrdDiscriminatorScan.h" +#include "MCRecoEventLoader.h" +#include "MonitorMRDEventDisplay.h" #include "LoadGeometry.h" -#include "LoadWCSim.h" -#include "PMTWaveformSim.h" +#include "LoadRATPAC.h" +#include "TimeClustering.h" +#include "GracefulStop.h" #include "PhaseIIADCHitFinder.h" +#include "TrackCombiner.h" +#include "SimulatedWaveformDemo.h" +#include "CNNImage.h" +#include "MonitorTankTime.h" +#include "PhaseIIADCCalibrator.h" +#include "MCHitToHitComparer.h" +#include "MCPropertiesToTree.h" +#include "CalcClassificationVars.h" +#include "StoreClassificationVars.h" +#include "LoadGenieEvent.h" +#include "PrintGenieEvent.h" +#include "PlotWaveforms.h" +#include "PMTDataDecoder.h" +#include "ANNIEEventBuilder.h" +#include "MRDDataDecoder.h" +#include "PrintADCData.h" +#include "ClusterFinder.h" +#include "RunValidation.h" +#include "AmBeRunStatistics.h" +#include "SimpleTankEnergyCalibrator.h" +#include "BeamClusterPlots.h" +#include "PrintRecoEvent.h" +#include "MrdPaddleEfficiencyPreparer.h" +#include "MrdPaddleEfficiencyCalc.h" +#include "FMVEfficiency.h" +#include "LoadRawData.h" +#include "TriggerDataDecoder.h" +#include "ClusterClassifiers.h" +#include "MRDLoopbackAnalysis.h" +#include "VetoEfficiency.h" +#include "EnergyExtractor.h" +#include "MonitorTrigger.h" +#include "EventClassification.h" +#include "DataSummary.h" +#include "MaxPEPlots.h" +#include "StoreDecodedTimestamps.h" +#include "PlotDecodedTimestamps.h" +#include "MonitorDAQ.h" +#include "MonitorSimReceiveLAPPD.h" +#include "MonitorLAPPDSC.h" +#include "MonitorLAPPDData.h" +#include "ParseDataMonitoring.h" +#include "LAPPDReorderData.h" +#include "LAPPDStoreReorderData.h" +#include "LAPPDStoreReadIn.h" +#include "LAPPDPlotWaveForms.h" +#include "LAPPDFindT0.h" +#include "LAPPDStoreFindT0.h" +#include "ClusterDummy.h" +#include "LAPPDMakePeds.h" +#include "LAPPDCluster.h" +#include "LAPPDClusterTree.h" +#include "LAPPDPlotWaveForms2D.h" +#include "LAPPDGausBaselineSubtraction.h" +#include "LAPPDASCIIReadIn.h" +#include "BeamDecoder.h" +#include "LoadRunInfo.h" +#include "ApplyMRDEff.h" +#include "SimpleReconstruction.h" +#include "LAPPDnnlsPeak.h" +#include "LAPPDLocateHit.h" +#include "LAPPDOtherSimp.h" +#include "LAPPDTraceMax.h" +#include "saveLAPPDInfo.h" +#include "parseLAPPDData.h" +#include "checkLAPPDStatus.h" +#include "GetLAPPDEvents.h" +#include "LAPPDDataDecoder.h" +#include "PythonScript.h" +#include "MeanTimeCheck.h" +#include "LoadReweightGenieEvent.h" +#include "ReweightFlux.h" +#include "FilterLAPPDEvents.h" +#include "VtxSeedFineGrid.h" +#include "FilterEvents.h" +#include "Stage1DataBuilder.h" +#include "BeamFetcherV2.h" +#include "FindNeutrons.h" +#include "NeutronMultiplicity.h" +#include "PlotsTrackLengthAndEnergy.h" +#include "SaveConfigInfo.h" +#include "ReadConfigInfo.h" +#include "MuonFitter.h" +#include "BeamQuality.h" +#include "BackTracker.h" +#include "PrintDQ.h" +#include "AssignBunchTimingMC.h" +#include "PMTWaveformSim.h" diff --git a/configfiles/BeamFetcherV2/BeamFetcherV2Config b/configfiles/BeamFetcherV2/BeamFetcherV2Config new file mode 100644 index 000000000..b49564534 --- /dev/null +++ b/configfiles/BeamFetcherV2/BeamFetcherV2Config @@ -0,0 +1,8 @@ +# BeamFetcher config file +verbose 5 +DevicesFile ./configfiles/BeamFetcherV2/devices.txt # File containing one device per line or a bundle +IsBundle 1 # bool stating whether DevicesFile contains bundles or individual devices +FetchFromTimes 0 # bool defining how to grab the data (from input times (1) or trigger(0)) +TimeChunkStepInMilliseconds 3600000 # one hour +SaveROOT 1 # bool, do you want to write a ROOT file with the timestamps and devices? +DeleteCTCData 1 diff --git a/configfiles/BeamFetcherV2/DefaultTriggerMask.txt b/configfiles/BeamFetcherV2/DefaultTriggerMask.txt new file mode 100644 index 000000000..05f190104 --- /dev/null +++ b/configfiles/BeamFetcherV2/DefaultTriggerMask.txt @@ -0,0 +1,3 @@ +#Triggers are given by Jonathan; place one number per line. Values are index + 1 +#4+1: Delayed beam. 32+1: LED trigger. 34+1: AmBe and Cosmic trigger. 35+1: MRD_CR_Trigger. 30+1: LED_Start. 45+1, 46+1: Laser. 14+1: AmBe external trigger +14 diff --git a/configfiles/BeamFetcherV2/LoadRawDataConfig b/configfiles/BeamFetcherV2/LoadRawDataConfig new file mode 100644 index 000000000..cff346d06 --- /dev/null +++ b/configfiles/BeamFetcherV2/LoadRawDataConfig @@ -0,0 +1,8 @@ +verbosity 11 +BuildType CTC +Mode FileList +InputFile ./configfiles/BeamFetcherV2/my_files.txt +DummyRunInfo 1 +StoreTrigOverlap 0 +ReadTrigOverlap 0 +StoreRawData 0 diff --git a/configfiles/BeamFetcherV2/README.md b/configfiles/BeamFetcherV2/README.md new file mode 100644 index 000000000..3c4bbe337 --- /dev/null +++ b/configfiles/BeamFetcherV2/README.md @@ -0,0 +1,9 @@ +# Configure files + +*********************** +#Description +********************** + +See the BeamFetcherV2 tool for description/usage. + +Loads CTC triggers from the TriggerDataDecoder tool, then fetches the beam database entries through queries based on the CTC trigger timestamps. diff --git a/configfiles/BeamFetcherV2/ToolChainConfig b/configfiles/BeamFetcherV2/ToolChainConfig new file mode 100644 index 000000000..32618da66 --- /dev/null +++ b/configfiles/BeamFetcherV2/ToolChainConfig @@ -0,0 +1,26 @@ +#ToolChain dynamic setup file + +##### Runtime Parameters ##### +verbose 1 ## Verbosity level of ToolChain +error_level 0 # 0= do not exit, 1= exit on unhandled errors only, 2= exit on unhandled errors and handled errors +attempt_recover 1 ## 1= will attempt to finalise if an execute fails +remote_port 24002 +IO_Threads 1 ## Number of threads for network traffic (~ 1/Gbps) + +###### Logging ##### +log_mode Interactive # Interactive=cout , Remote= remote logging system "serservice_name Remote_Logging" , Local = local file log; +log_local_path ./log +log_service LogStore + + +###### Service discovery ##### Ignore these settings for local analysis +service_publish_sec -1 +service_kick_sec -1 + +##### Tools To Add ##### +Tools_File configfiles/BeamFetcherV2/ToolsConfig ## list of tools to run and their config files + +##### Run Type ##### +Inline -1 ## number of Execute steps in program, -1 infinite loop that is ended by user +Interactive 0 ## set to 1 if you want to run the code interactively + diff --git a/configfiles/BeamFetcherV2/ToolsConfig b/configfiles/BeamFetcherV2/ToolsConfig new file mode 100644 index 000000000..2141e92ed --- /dev/null +++ b/configfiles/BeamFetcherV2/ToolsConfig @@ -0,0 +1,4 @@ +LoadGeometry LoadGeometry ./configfiles/LoadGeometry/LoadGeometryConfig +LoadRawData LoadRawData ./configfiles/BeamFetcherV2/LoadRawDataConfig +TriggerDataDecoder TriggerDataDecoder ./configfiles/BeamFetcherV2/TriggerDataDecoderConfig +BeamFetcherV2 BeamFetcherV2 ./configfiles/BeamFetcherV2/BeamFetcherV2Config diff --git a/configfiles/BeamFetcherV2/TriggerDataDecoderConfig b/configfiles/BeamFetcherV2/TriggerDataDecoderConfig new file mode 100644 index 000000000..843bb5357 --- /dev/null +++ b/configfiles/BeamFetcherV2/TriggerDataDecoderConfig @@ -0,0 +1,4 @@ +verbosity 0 +TriggerMaskFile ./configfiles/BeamFetcherV2/DefaultTriggerMask.txt +StoreTrigOverlap 0 +ReadTrigOverlap 0 diff --git a/configfiles/BeamFetcherV2/devices.txt b/configfiles/BeamFetcherV2/devices.txt new file mode 100644 index 000000000..0bf9117bd --- /dev/null +++ b/configfiles/BeamFetcherV2/devices.txt @@ -0,0 +1 @@ +BoosterNeutrinoBeam_read diff --git a/configfiles/BeamFetcherV2/my_files.txt b/configfiles/BeamFetcherV2/my_files.txt new file mode 100644 index 000000000..509031822 --- /dev/null +++ b/configfiles/BeamFetcherV2/my_files.txt @@ -0,0 +1,4 @@ +/pnfs/annie/persistent/raw/raw/4774/RAWDataR4774S0p1 +/pnfs/annie/persistent/raw/raw/4774/RAWDataR4774S0p2 +/pnfs/annie/persistent/raw/raw/4774/RAWDataR4774S0p3 +/pnfs/annie/persistent/raw/raw/4774/RAWDataR4774S0p4 diff --git a/configfiles/EventBuilder/BeamDecoderConfig b/configfiles/EventBuilder/BeamDecoderConfig deleted file mode 100644 index 3866c2b30..000000000 --- a/configfiles/EventBuilder/BeamDecoderConfig +++ /dev/null @@ -1,17 +0,0 @@ -# BeamDecoder config file -verbosity 0 -# Names of devices needed for beam quality cuts -HornCurrentDevice E:THCURR -# The "first" toroid is the one farther upstream from the target -FirstToroid E:TOR860 -SecondToroid E:TOR875 -# POT window -CutPOTMin 5e11 -CutPOTMax 8e12 -# Peak horn current window (in kA) -CutPeakHornCurrentMin 172 -CutPeakHornCurrentMax 176 -# Toroid agreement tolerance (fractional error) -CutToroidAgreement 0.05 -# DB vs DAQ timestamp agreement tolerance (ms) -CutTimestampAgreement 100 diff --git a/configfiles/EventBuilder/BeamDevices.txt b/configfiles/EventBuilder/BeamDevices.txt new file mode 100644 index 000000000..0bf9117bd --- /dev/null +++ b/configfiles/EventBuilder/BeamDevices.txt @@ -0,0 +1 @@ +BoosterNeutrinoBeam_read diff --git a/configfiles/EventBuilder/BeamFetcherV2Config b/configfiles/EventBuilder/BeamFetcherV2Config new file mode 100644 index 000000000..8a0bb9e7b --- /dev/null +++ b/configfiles/EventBuilder/BeamFetcherV2Config @@ -0,0 +1,17 @@ +# BeamFetcher config file +verbose 0 +# +# File containing one device per line or a bundle +DevicesFile ./configfiles/EventBuilder/BeamDevices.txt +# +# bool stating whether DevicesFile contains bundles or individual devices +IsBundle 1 +# +# bool defining how to grab the data (from input times (1) or trigger(0)) +FetchFromTimes 0 +# +# How much data to pull in one query (set to 1 hr) +TimeChunkStepInMilliseconds 3600000 +# +# bool, do you want to write a ROOT file with the timestamps and devices? +SaveROOT 0 \ No newline at end of file diff --git a/configfiles/EventBuilder/BeamQualityConfig b/configfiles/EventBuilder/BeamQualityConfig new file mode 100644 index 000000000..f478a3b2b --- /dev/null +++ b/configfiles/EventBuilder/BeamQualityConfig @@ -0,0 +1,13 @@ +# BeamQuality config file +verbose 0 +# +# POT window for "good" beam +POTMin 5e11 +POTMax 8e12 +# +# Horn current window for "good" beam (in kA) +HornCurrentMin 172 +HornCurrentMax 176 +# +# Fractional difference between the upstream and downstream POT measurements +BeamLossTolerance 0.05 \ No newline at end of file diff --git a/configfiles/EventBuilder/MRDDataDecoderConfig b/configfiles/EventBuilder/MRDDataDecoderConfig index 4f4260f01..d9937ca9a 100644 --- a/configfiles/EventBuilder/MRDDataDecoderConfig +++ b/configfiles/EventBuilder/MRDDataDecoderConfig @@ -1,2 +1,2 @@ -verbosity 2 +verbosity 0 DaylightSavingsSpring 1 diff --git a/configfiles/EventBuilder/README.md b/configfiles/EventBuilder/README.md index 089e9c8a2..6d0350575 100644 --- a/configfiles/EventBuilder/README.md +++ b/configfiles/EventBuilder/README.md @@ -4,7 +4,7 @@ ## Description ********************** -The `EventBuilder` toolchain is used to event build for ANNIE. The toolchain reads in RAWData files, time match, and creates processed ANNIEEvents with Tank, CTC, and MRD information (currently no LAPPD information is included). This toolchain consolidated efforts to create an official event building toolchain, and should replace the `DataDecoder` toolchain which is now considered depreciated. +The `EventBuilder` toolchain is used to create ANNIEEvents. The toolchain reads in RAWData files, time match, and creates processed ANNIEEvents with Tank, CTC, MRD, and Beam information (no LAPPD information is included in this toolchain). This toolchain replaces the `DataDecoder` toolchain which is now considered depreciated. Please consult the following ANNIE wiki page on how to event build: https://cdcvs.fnal.gov/redmine/projects/annie_experiment/wiki/Event_Building_with_ToolAnalysis @@ -20,6 +20,8 @@ LoadRawData PMTDataDecoder MRDDataDecoder TriggerDataDecoder +BeamFetcherV2 +BeamQuality PhaseIIADCCalibrator PhaseIIADCHitFinder SaveConfigInfo diff --git a/configfiles/EventBuilder/ToolsConfig b/configfiles/EventBuilder/ToolsConfig index 95cc19f24..9d62fd3c6 100644 --- a/configfiles/EventBuilder/ToolsConfig +++ b/configfiles/EventBuilder/ToolsConfig @@ -3,6 +3,8 @@ LoadRawData LoadRawData ./configfiles/EventBuilder/LoadRawDataConfig PMTDataDecoder PMTDataDecoder ./configfiles/EventBuilder/PMTDataDecoderConfig MRDDataDecoder MRDDataDecoder ./configfiles/EventBuilder/MRDDataDecoderConfig TriggerDataDecoder TriggerDataDecoder ./configfiles/EventBuilder/TriggerDataDecoderConfig +BeamFetcherV2 BeamFetcherV2 ./configfiles/EventBuilder/BeamFetcherV2Config +BeamQuality BeamQuality ./configfiles/EventBuilder/BeamQualityConfig PhaseIIADCCalibrator PhaseIIADCCalibrator ./configfiles/EventBuilder/PhaseIIADCCalibratorConfig PhaseIIADCHitFinder PhaseIIADCHitFinder ./configfiles/EventBuilder/PhaseIIADCHitFinderConfig SaveConfigInfo SaveConfigInfo ./configfiles/EventBuilder/SaveConfigInfoConfig diff --git a/configfiles/EventBuilderRaw/LoadRawDataConfig b/configfiles/EventBuilderRaw/LoadRawDataConfig index ffaf99fbd..050c4681e 100644 --- a/configfiles/EventBuilderRaw/LoadRawDataConfig +++ b/configfiles/EventBuilderRaw/LoadRawDataConfig @@ -1,9 +1,8 @@ verbosity 0 BuildType TankAndCTC -#BuildType CTC Mode FileList -InputFile ./configfiles/DataDecoder/my_files.txt +InputFile ./configfiles/EventBuilderRaw/my_files.txt DummyRunInfo 1 StoreTrigOverlap 0 -ReadTrigOverlap 1 -StoreRawData 0 +ReadTrigOverlap 0 +StoreRawData 1 diff --git a/configfiles/LoadGeometry/LAPPDGeometry.csv b/configfiles/LoadGeometry/LAPPDGeometry.csv index 4fec97347..df2b434c8 100644 --- a/configfiles/LoadGeometry/LAPPDGeometry.csv +++ b/configfiles/LoadGeometry/LAPPDGeometry.csv @@ -1,1445 +1,1445 @@ -LEGEND_LINE -detector_num,detector_position_x,detector_position_y,detector_position_z,detector_direction_x,detector_direction_y,detector_direction_z,detector_type,detector_status,channel_num,channel_position_x,channel_position_y,channel_position_z,channel_strip_side,channel_strip_num,channel_signal_crate,channel_signal_card,channel_signal_channel,channel_level2_crate,channel_level2_card,channel_level2_channel,channel_hv_crate,channel_hv_card,channel_hv_channel,channel_status - -DATA_START -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,0,100,-300,0,0,0,0,0,1,0,0,32669,0,0,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,1,100,-290,0,0,1,0,0,2,0,0,32669,0,0,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,2,100,-280,0,0,2,0,0,3,0,0,32669,0,0,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,3,100,-270,0,0,3,0,0,4,0,0,32669,0,1,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,4,100,-260,0,0,4,0,0,5,0,0,32669,0,1,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,5,100,-250,0,0,5,0,0,6,0,0,32669,0,1,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,6,100,-240,0,0,6,0,0,7,0,0,32669,0,1,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,7,100,-230,0,0,7,0,0,8,0,0,32669,0,2,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,8,100,-220,0,0,8,0,0,9,0,0,32669,0,2,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,9,100,-210,0,0,9,0,0,10,0,0,32669,0,2,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,10,100,-200,0,0,10,0,0,11,0,0,32669,0,2,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,11,100,-190,0,0,11,0,0,12,0,0,32669,0,3,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,12,100,-180,0,0,12,0,0,13,0,0,32669,0,3,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,13,100,-170,0,0,13,0,0,14,0,0,32669,0,3,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,14,100,-160,0,0,14,0,0,15,0,0,32669,0,3,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,15,100,-150,0,0,15,0,0,16,0,0,32669,0,4,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,16,100,-140,0,0,16,0,0,17,0,0,32669,0,4,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,17,100,-130,0,0,17,0,0,18,0,0,32669,0,4,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,18,100,-120,0,0,18,0,0,19,0,0,32669,0,4,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,19,100,-110,0,0,19,0,0,20,0,0,32669,0,5,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,20,100,-100,0,0,20,0,0,21,0,0,32669,0,5,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,21,100,-90,0,0,21,0,0,22,0,0,32669,0,5,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,22,100,-80,0,0,22,0,0,23,0,0,32669,0,5,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,23,100,-70,0,0,23,0,0,24,0,0,32669,0,6,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,24,100,-60,0,0,24,0,0,25,0,0,32669,0,6,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,25,100,-50,0,0,25,0,0,26,0,0,32669,0,6,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,26,100,-40,0,0,26,0,0,27,0,0,32669,0,6,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,27,100,-30,0,0,27,0,0,28,0,0,32669,0,7,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,28,100,-20,0,0,28,0,0,29,0,0,32669,0,7,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,29,100,-10,0,0,29,0,1,0,0,0,32669,0,7,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,30,-100,-300,0,1,0,0,1,1,0,0,32669,0,7,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,31,-100,-290,0,1,1,0,1,2,0,0,32669,0,8,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,32,-100,-280,0,1,2,0,1,3,0,0,32669,0,8,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,33,-100,-270,0,1,3,0,1,4,0,0,32669,0,8,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,34,-100,-260,0,1,4,0,1,5,0,0,32669,0,8,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,35,-100,-250,0,1,5,0,1,6,0,0,32669,0,9,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,36,-100,-240,0,1,6,0,1,7,0,0,32669,0,9,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,37,-100,-230,0,1,7,0,1,8,0,0,32669,0,9,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,38,-100,-220,0,1,8,0,1,9,0,0,32669,0,9,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,39,-100,-210,0,1,9,0,1,10,0,0,32669,1,0,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,40,-100,-200,0,1,10,0,1,11,0,0,32669,1,0,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,41,-100,-190,0,1,11,0,1,12,0,0,32669,1,0,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,42,-100,-180,0,1,12,0,1,13,0,0,32669,1,0,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,43,-100,-170,0,1,13,0,1,14,0,0,32669,1,1,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,44,-100,-160,0,1,14,0,1,15,0,0,32669,1,1,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,45,-100,-150,0,1,15,0,1,16,0,0,32669,1,1,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,46,-100,-140,0,1,16,0,1,17,0,0,32669,1,1,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,47,-100,-130,0,1,17,0,1,18,0,0,32669,1,2,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,48,-100,-120,0,1,18,0,1,19,0,0,32669,1,2,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,49,-100,-110,0,1,19,0,1,20,0,0,32669,1,2,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,50,-100,-100,0,1,20,0,1,21,0,0,32669,1,2,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,51,-100,-90,0,1,21,0,1,22,0,0,32669,1,3,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,52,-100,-80,0,1,22,0,1,23,0,0,32669,1,3,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,53,-100,-70,0,1,23,0,1,24,0,0,32669,1,3,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,54,-100,-60,0,1,24,0,1,25,0,0,32669,1,3,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,55,-100,-50,0,1,25,0,1,26,0,0,32669,1,4,0,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,56,-100,-40,0,1,26,0,1,27,0,0,32669,1,4,1,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,57,-100,-30,0,1,27,0,1,28,0,0,32669,1,4,2,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,58,-100,-20,0,1,28,0,1,29,0,0,32669,1,4,3,ON -0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,59,-100,-10,0,1,29,0,2,0,0,0,32669,1,5,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,60,100,-300,0,0,0,0,2,1,0,0,32669,1,5,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,61,100,-290,0,0,1,0,2,2,0,0,32669,1,5,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,62,100,-280,0,0,2,0,2,3,0,0,32669,1,5,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,63,100,-270,0,0,3,0,2,4,0,0,32669,1,6,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,64,100,-260,0,0,4,0,2,5,0,0,32669,1,6,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,65,100,-250,0,0,5,0,2,6,0,0,32669,1,6,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,66,100,-240,0,0,6,0,2,7,0,0,32669,1,6,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,67,100,-230,0,0,7,0,2,8,0,0,32669,1,7,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,68,100,-220,0,0,8,0,2,9,0,0,32669,1,7,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,69,100,-210,0,0,9,0,2,10,0,0,32669,1,7,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,70,100,-200,0,0,10,0,2,11,0,0,32669,1,7,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,71,100,-190,0,0,11,0,2,12,0,0,32669,1,8,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,72,100,-180,0,0,12,0,2,13,0,0,32669,1,8,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,73,100,-170,0,0,13,0,2,14,0,0,32669,1,8,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,74,100,-160,0,0,14,0,2,15,0,0,32669,1,8,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,75,100,-150,0,0,15,0,2,16,0,0,32669,1,9,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,76,100,-140,0,0,16,0,2,17,0,0,32669,1,9,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,77,100,-130,0,0,17,0,2,18,0,0,32669,1,9,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,78,100,-120,0,0,18,0,2,19,0,0,32669,1,9,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,79,100,-110,0,0,19,0,2,20,0,0,32669,2,0,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,80,100,-100,0,0,20,0,2,21,0,0,32669,2,0,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,81,100,-90,0,0,21,0,2,22,0,0,32669,2,0,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,82,100,-80,0,0,22,0,2,23,0,0,32669,2,0,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,83,100,-70,0,0,23,0,2,24,0,0,32669,2,1,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,84,100,-60,0,0,24,0,2,25,0,0,32669,2,1,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,85,100,-50,0,0,25,0,2,26,0,0,32669,2,1,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,86,100,-40,0,0,26,0,2,27,0,0,32669,2,1,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,87,100,-30,0,0,27,0,2,28,0,0,32669,2,2,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,88,100,-20,0,0,28,0,2,29,0,0,32669,2,2,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,89,100,-10,0,0,29,0,3,0,0,0,32669,2,2,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,90,-100,-300,0,1,0,0,3,1,0,0,32669,2,2,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,91,-100,-290,0,1,1,0,3,2,0,0,32669,2,3,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,92,-100,-280,0,1,2,0,3,3,0,0,32669,2,3,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,93,-100,-270,0,1,3,0,3,4,0,0,32669,2,3,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,94,-100,-260,0,1,4,0,3,5,0,0,32669,2,3,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,95,-100,-250,0,1,5,0,3,6,0,0,32669,2,4,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,96,-100,-240,0,1,6,0,3,7,0,0,32669,2,4,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,97,-100,-230,0,1,7,0,3,8,0,0,32669,2,4,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,98,-100,-220,0,1,8,0,3,9,0,0,32669,2,4,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,99,-100,-210,0,1,9,0,3,10,0,0,32669,2,5,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,100,-100,-200,0,1,10,0,3,11,0,0,32669,2,5,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,101,-100,-190,0,1,11,0,3,12,0,0,32669,2,5,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,102,-100,-180,0,1,12,0,3,13,0,0,32669,2,5,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,103,-100,-170,0,1,13,0,3,14,0,0,32669,2,6,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,104,-100,-160,0,1,14,0,3,15,0,0,32669,2,6,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,105,-100,-150,0,1,15,0,3,16,0,0,32669,2,6,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,106,-100,-140,0,1,16,0,3,17,0,0,32669,2,6,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,107,-100,-130,0,1,17,0,3,18,0,0,32669,2,7,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,108,-100,-120,0,1,18,0,3,19,0,0,32669,2,7,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,109,-100,-110,0,1,19,0,3,20,0,0,32669,2,7,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,110,-100,-100,0,1,20,0,3,21,0,0,32669,2,7,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,111,-100,-90,0,1,21,0,3,22,0,0,32669,2,8,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,112,-100,-80,0,1,22,0,3,23,0,0,32669,2,8,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,113,-100,-70,0,1,23,0,3,24,0,0,32669,2,8,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,114,-100,-60,0,1,24,0,3,25,0,0,32669,2,8,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,115,-100,-50,0,1,25,0,3,26,0,0,32669,2,9,0,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,116,-100,-40,0,1,26,0,3,27,0,0,32669,2,9,1,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,117,-100,-30,0,1,27,0,3,28,0,0,32669,2,9,2,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,118,-100,-20,0,1,28,0,3,29,0,0,32669,2,9,3,ON -1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,119,-100,-10,0,1,29,0,4,0,0,0,32669,3,0,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,120,100,-300,0,0,0,0,4,1,0,0,32669,3,0,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,121,100,-290,0,0,1,0,4,2,0,0,32669,3,0,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,122,100,-280,0,0,2,0,4,3,0,0,32669,3,0,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,123,100,-270,0,0,3,0,4,4,0,0,32669,3,1,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,124,100,-260,0,0,4,0,4,5,0,0,32669,3,1,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,125,100,-250,0,0,5,0,4,6,0,0,32669,3,1,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,126,100,-240,0,0,6,0,4,7,0,0,32669,3,1,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,127,100,-230,0,0,7,0,4,8,0,0,32669,3,2,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,128,100,-220,0,0,8,0,4,9,0,0,32669,3,2,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,129,100,-210,0,0,9,0,4,10,0,0,32669,3,2,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,130,100,-200,0,0,10,0,4,11,0,0,32669,3,2,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,131,100,-190,0,0,11,0,4,12,0,0,32669,3,3,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,132,100,-180,0,0,12,0,4,13,0,0,32669,3,3,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,133,100,-170,0,0,13,0,4,14,0,0,32669,3,3,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,134,100,-160,0,0,14,0,4,15,0,0,32669,3,3,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,135,100,-150,0,0,15,0,4,16,0,0,32669,3,4,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,136,100,-140,0,0,16,0,4,17,0,0,32669,3,4,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,137,100,-130,0,0,17,0,4,18,0,0,32669,3,4,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,138,100,-120,0,0,18,0,4,19,0,0,32669,3,4,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,139,100,-110,0,0,19,0,4,20,0,0,32669,3,5,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,140,100,-100,0,0,20,0,4,21,0,0,32669,3,5,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,141,100,-90,0,0,21,0,4,22,0,0,32669,3,5,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,142,100,-80,0,0,22,0,4,23,0,0,32669,3,5,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,143,100,-70,0,0,23,0,4,24,0,0,32669,3,6,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,144,100,-60,0,0,24,0,4,25,0,0,32669,3,6,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,145,100,-50,0,0,25,0,4,26,0,0,32669,3,6,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,146,100,-40,0,0,26,0,4,27,0,0,32669,3,6,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,147,100,-30,0,0,27,0,4,28,0,0,32669,3,7,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,148,100,-20,0,0,28,0,4,29,0,0,32669,3,7,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,149,100,-10,0,0,29,0,5,0,0,0,32669,3,7,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,150,-100,-300,0,1,0,0,5,1,0,0,32669,3,7,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,151,-100,-290,0,1,1,0,5,2,0,0,32669,3,8,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,152,-100,-280,0,1,2,0,5,3,0,0,32669,3,8,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,153,-100,-270,0,1,3,0,5,4,0,0,32669,3,8,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,154,-100,-260,0,1,4,0,5,5,0,0,32669,3,8,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,155,-100,-250,0,1,5,0,5,6,0,0,32669,3,9,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,156,-100,-240,0,1,6,0,5,7,0,0,32669,3,9,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,157,-100,-230,0,1,7,0,5,8,0,0,32669,3,9,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,158,-100,-220,0,1,8,0,5,9,0,0,32669,3,9,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,159,-100,-210,0,1,9,0,5,10,0,0,32669,4,0,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,160,-100,-200,0,1,10,0,5,11,0,0,32669,4,0,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,161,-100,-190,0,1,11,0,5,12,0,0,32669,4,0,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,162,-100,-180,0,1,12,0,5,13,0,0,32669,4,0,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,163,-100,-170,0,1,13,0,5,14,0,0,32669,4,1,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,164,-100,-160,0,1,14,0,5,15,0,0,32669,4,1,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,165,-100,-150,0,1,15,0,5,16,0,0,32669,4,1,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,166,-100,-140,0,1,16,0,5,17,0,0,32669,4,1,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,167,-100,-130,0,1,17,0,5,18,0,0,32669,4,2,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,168,-100,-120,0,1,18,0,5,19,0,0,32669,4,2,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,169,-100,-110,0,1,19,0,5,20,0,0,32669,4,2,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,170,-100,-100,0,1,20,0,5,21,0,0,32669,4,2,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,171,-100,-90,0,1,21,0,5,22,0,0,32669,4,3,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,172,-100,-80,0,1,22,0,5,23,0,0,32669,4,3,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,173,-100,-70,0,1,23,0,5,24,0,0,32669,4,3,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,174,-100,-60,0,1,24,0,5,25,0,0,32669,4,3,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,175,-100,-50,0,1,25,0,5,26,0,0,32669,4,4,0,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,176,-100,-40,0,1,26,0,5,27,0,0,32669,4,4,1,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,177,-100,-30,0,1,27,0,5,28,0,0,32669,4,4,2,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,178,-100,-20,0,1,28,0,5,29,0,0,32669,4,4,3,ON -2,0,0.637851,0.404,0,0,1,lappd_v1,ON,179,-100,-10,0,1,29,0,6,0,0,0,32669,4,5,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,180,100,-300,0,0,0,0,6,1,0,0,32669,4,5,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,181,100,-290,0,0,1,0,6,2,0,0,32669,4,5,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,182,100,-280,0,0,2,0,6,3,0,0,32669,4,5,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,183,100,-270,0,0,3,0,6,4,0,0,32669,4,6,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,184,100,-260,0,0,4,0,6,5,0,0,32669,4,6,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,185,100,-250,0,0,5,0,6,6,0,0,32669,4,6,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,186,100,-240,0,0,6,0,6,7,0,0,32669,4,6,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,187,100,-230,0,0,7,0,6,8,0,0,32669,4,7,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,188,100,-220,0,0,8,0,6,9,0,0,32669,4,7,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,189,100,-210,0,0,9,0,6,10,0,0,32669,4,7,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,190,100,-200,0,0,10,0,6,11,0,0,32669,4,7,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,191,100,-190,0,0,11,0,6,12,0,0,32669,4,8,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,192,100,-180,0,0,12,0,6,13,0,0,32669,4,8,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,193,100,-170,0,0,13,0,6,14,0,0,32669,4,8,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,194,100,-160,0,0,14,0,6,15,0,0,32669,4,8,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,195,100,-150,0,0,15,0,6,16,0,0,32669,4,9,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,196,100,-140,0,0,16,0,6,17,0,0,32669,4,9,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,197,100,-130,0,0,17,0,6,18,0,0,32669,4,9,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,198,100,-120,0,0,18,0,6,19,0,0,32669,4,9,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,199,100,-110,0,0,19,0,6,20,0,0,32669,5,0,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,200,100,-100,0,0,20,0,6,21,0,0,32669,5,0,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,201,100,-90,0,0,21,0,6,22,0,0,32669,5,0,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,202,100,-80,0,0,22,0,6,23,0,0,32669,5,0,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,203,100,-70,0,0,23,0,6,24,0,0,32669,5,1,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,204,100,-60,0,0,24,0,6,25,0,0,32669,5,1,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,205,100,-50,0,0,25,0,6,26,0,0,32669,5,1,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,206,100,-40,0,0,26,0,6,27,0,0,32669,5,1,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,207,100,-30,0,0,27,0,6,28,0,0,32669,5,2,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,208,100,-20,0,0,28,0,6,29,0,0,32669,5,2,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,209,100,-10,0,0,29,0,7,0,0,0,32669,5,2,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,210,-100,-300,0,1,0,0,7,1,0,0,32669,5,2,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,211,-100,-290,0,1,1,0,7,2,0,0,32669,5,3,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,212,-100,-280,0,1,2,0,7,3,0,0,32669,5,3,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,213,-100,-270,0,1,3,0,7,4,0,0,32669,5,3,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,214,-100,-260,0,1,4,0,7,5,0,0,32669,5,3,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,215,-100,-250,0,1,5,0,7,6,0,0,32669,5,4,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,216,-100,-240,0,1,6,0,7,7,0,0,32669,5,4,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,217,-100,-230,0,1,7,0,7,8,0,0,32669,5,4,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,218,-100,-220,0,1,8,0,7,9,0,0,32669,5,4,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,219,-100,-210,0,1,9,0,7,10,0,0,32669,5,5,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,220,-100,-200,0,1,10,0,7,11,0,0,32669,5,5,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,221,-100,-190,0,1,11,0,7,12,0,0,32669,5,5,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,222,-100,-180,0,1,12,0,7,13,0,0,32669,5,5,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,223,-100,-170,0,1,13,0,7,14,0,0,32669,5,6,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,224,-100,-160,0,1,14,0,7,15,0,0,32669,5,6,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,225,-100,-150,0,1,15,0,7,16,0,0,32669,5,6,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,226,-100,-140,0,1,16,0,7,17,0,0,32669,5,6,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,227,-100,-130,0,1,17,0,7,18,0,0,32669,5,7,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,228,-100,-120,0,1,18,0,7,19,0,0,32669,5,7,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,229,-100,-110,0,1,19,0,7,20,0,0,32669,5,7,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,230,-100,-100,0,1,20,0,7,21,0,0,32669,5,7,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,231,-100,-90,0,1,21,0,7,22,0,0,32669,5,8,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,232,-100,-80,0,1,22,0,7,23,0,0,32669,5,8,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,233,-100,-70,0,1,23,0,7,24,0,0,32669,5,8,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,234,-100,-60,0,1,24,0,7,25,0,0,32669,5,8,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,235,-100,-50,0,1,25,0,7,26,0,0,32669,5,9,0,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,236,-100,-40,0,1,26,0,7,27,0,0,32669,5,9,1,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,237,-100,-30,0,1,27,0,7,28,0,0,32669,5,9,2,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,238,-100,-20,0,1,28,0,7,29,0,0,32669,5,9,3,ON -3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,239,-100,-10,0,1,29,0,8,0,0,1,32669,6,0,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,240,100,-300,0,0,0,0,8,1,0,1,32669,6,0,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,241,100,-290,0,0,1,0,8,2,0,1,32669,6,0,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,242,100,-280,0,0,2,0,8,3,0,1,32669,6,0,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,243,100,-270,0,0,3,0,8,4,0,1,32669,6,1,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,244,100,-260,0,0,4,0,8,5,0,1,32669,6,1,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,245,100,-250,0,0,5,0,8,6,0,1,32669,6,1,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,246,100,-240,0,0,6,0,8,7,0,1,32669,6,1,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,247,100,-230,0,0,7,0,8,8,0,1,32669,6,2,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,248,100,-220,0,0,8,0,8,9,0,1,32669,6,2,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,249,100,-210,0,0,9,0,8,10,0,1,32669,6,2,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,250,100,-200,0,0,10,0,8,11,0,1,32669,6,2,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,251,100,-190,0,0,11,0,8,12,0,1,32669,6,3,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,252,100,-180,0,0,12,0,8,13,0,1,32669,6,3,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,253,100,-170,0,0,13,0,8,14,0,1,32669,6,3,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,254,100,-160,0,0,14,0,8,15,0,1,32669,6,3,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,255,100,-150,0,0,15,0,8,16,0,1,32669,6,4,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,256,100,-140,0,0,16,0,8,17,0,1,32669,6,4,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,257,100,-130,0,0,17,0,8,18,0,1,32669,6,4,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,258,100,-120,0,0,18,0,8,19,0,1,32669,6,4,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,259,100,-110,0,0,19,0,8,20,0,1,32669,6,5,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,260,100,-100,0,0,20,0,8,21,0,1,32669,6,5,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,261,100,-90,0,0,21,0,8,22,0,1,32669,6,5,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,262,100,-80,0,0,22,0,8,23,0,1,32669,6,5,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,263,100,-70,0,0,23,0,8,24,0,1,32669,6,6,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,264,100,-60,0,0,24,0,8,25,0,1,32669,6,6,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,265,100,-50,0,0,25,0,8,26,0,1,32669,6,6,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,266,100,-40,0,0,26,0,8,27,0,1,32669,6,6,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,267,100,-30,0,0,27,0,8,28,0,1,32669,6,7,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,268,100,-20,0,0,28,0,8,29,0,1,32669,6,7,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,269,100,-10,0,0,29,0,9,0,0,1,32669,6,7,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,270,-100,-300,0,1,0,0,9,1,0,1,32669,6,7,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,271,-100,-290,0,1,1,0,9,2,0,1,32669,6,8,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,272,-100,-280,0,1,2,0,9,3,0,1,32669,6,8,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,273,-100,-270,0,1,3,0,9,4,0,1,32669,6,8,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,274,-100,-260,0,1,4,0,9,5,0,1,32669,6,8,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,275,-100,-250,0,1,5,0,9,6,0,1,32669,6,9,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,276,-100,-240,0,1,6,0,9,7,0,1,32669,6,9,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,277,-100,-230,0,1,7,0,9,8,0,1,32669,6,9,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,278,-100,-220,0,1,8,0,9,9,0,1,32669,6,9,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,279,-100,-210,0,1,9,0,9,10,0,1,32669,7,0,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,280,-100,-200,0,1,10,0,9,11,0,1,32669,7,0,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,281,-100,-190,0,1,11,0,9,12,0,1,32669,7,0,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,282,-100,-180,0,1,12,0,9,13,0,1,32669,7,0,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,283,-100,-170,0,1,13,0,9,14,0,1,32669,7,1,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,284,-100,-160,0,1,14,0,9,15,0,1,32669,7,1,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,285,-100,-150,0,1,15,0,9,16,0,1,32669,7,1,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,286,-100,-140,0,1,16,0,9,17,0,1,32669,7,1,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,287,-100,-130,0,1,17,0,9,18,0,1,32669,7,2,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,288,-100,-120,0,1,18,0,9,19,0,1,32669,7,2,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,289,-100,-110,0,1,19,0,9,20,0,1,32669,7,2,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,290,-100,-100,0,1,20,0,9,21,0,1,32669,7,2,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,291,-100,-90,0,1,21,0,9,22,0,1,32669,7,3,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,292,-100,-80,0,1,22,0,9,23,0,1,32669,7,3,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,293,-100,-70,0,1,23,0,9,24,0,1,32669,7,3,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,294,-100,-60,0,1,24,0,9,25,0,1,32669,7,3,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,295,-100,-50,0,1,25,0,9,26,0,1,32669,7,4,0,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,296,-100,-40,0,1,26,0,9,27,0,1,32669,7,4,1,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,297,-100,-30,0,1,27,0,9,28,0,1,32669,7,4,2,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,298,-100,-20,0,1,28,0,9,29,0,1,32669,7,4,3,ON -4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,299,-100,-10,0,1,29,0,10,0,0,1,32669,7,5,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,300,100,-300,0,0,0,0,10,1,0,1,32669,7,5,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,301,100,-290,0,0,1,0,10,2,0,1,32669,7,5,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,302,100,-280,0,0,2,0,10,3,0,1,32669,7,5,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,303,100,-270,0,0,3,0,10,4,0,1,32669,7,6,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,304,100,-260,0,0,4,0,10,5,0,1,32669,7,6,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,305,100,-250,0,0,5,0,10,6,0,1,32669,7,6,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,306,100,-240,0,0,6,0,10,7,0,1,32669,7,6,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,307,100,-230,0,0,7,0,10,8,0,1,32669,7,7,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,308,100,-220,0,0,8,0,10,9,0,1,32669,7,7,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,309,100,-210,0,0,9,0,10,10,0,1,32669,7,7,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,310,100,-200,0,0,10,0,10,11,0,1,32669,7,7,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,311,100,-190,0,0,11,0,10,12,0,1,32669,7,8,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,312,100,-180,0,0,12,0,10,13,0,1,32669,7,8,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,313,100,-170,0,0,13,0,10,14,0,1,32669,7,8,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,314,100,-160,0,0,14,0,10,15,0,1,32669,7,8,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,315,100,-150,0,0,15,0,10,16,0,1,32669,7,9,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,316,100,-140,0,0,16,0,10,17,0,1,32669,7,9,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,317,100,-130,0,0,17,0,10,18,0,1,32669,7,9,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,318,100,-120,0,0,18,0,10,19,0,1,32669,7,9,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,319,100,-110,0,0,19,0,10,20,0,1,32669,8,0,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,320,100,-100,0,0,20,0,10,21,0,1,32669,8,0,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,321,100,-90,0,0,21,0,10,22,0,1,32669,8,0,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,322,100,-80,0,0,22,0,10,23,0,1,32669,8,0,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,323,100,-70,0,0,23,0,10,24,0,1,32669,8,1,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,324,100,-60,0,0,24,0,10,25,0,1,32669,8,1,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,325,100,-50,0,0,25,0,10,26,0,1,32669,8,1,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,326,100,-40,0,0,26,0,10,27,0,1,32669,8,1,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,327,100,-30,0,0,27,0,10,28,0,1,32669,8,2,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,328,100,-20,0,0,28,0,10,29,0,1,32669,8,2,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,329,100,-10,0,0,29,0,11,0,0,1,32669,8,2,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,330,-100,-300,0,1,0,0,11,1,0,1,32669,8,2,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,331,-100,-290,0,1,1,0,11,2,0,1,32669,8,3,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,332,-100,-280,0,1,2,0,11,3,0,1,32669,8,3,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,333,-100,-270,0,1,3,0,11,4,0,1,32669,8,3,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,334,-100,-260,0,1,4,0,11,5,0,1,32669,8,3,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,335,-100,-250,0,1,5,0,11,6,0,1,32669,8,4,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,336,-100,-240,0,1,6,0,11,7,0,1,32669,8,4,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,337,-100,-230,0,1,7,0,11,8,0,1,32669,8,4,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,338,-100,-220,0,1,8,0,11,9,0,1,32669,8,4,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,339,-100,-210,0,1,9,0,11,10,0,1,32669,8,5,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,340,-100,-200,0,1,10,0,11,11,0,1,32669,8,5,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,341,-100,-190,0,1,11,0,11,12,0,1,32669,8,5,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,342,-100,-180,0,1,12,0,11,13,0,1,32669,8,5,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,343,-100,-170,0,1,13,0,11,14,0,1,32669,8,6,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,344,-100,-160,0,1,14,0,11,15,0,1,32669,8,6,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,345,-100,-150,0,1,15,0,11,16,0,1,32669,8,6,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,346,-100,-140,0,1,16,0,11,17,0,1,32669,8,6,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,347,-100,-130,0,1,17,0,11,18,0,1,32669,8,7,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,348,-100,-120,0,1,18,0,11,19,0,1,32669,8,7,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,349,-100,-110,0,1,19,0,11,20,0,1,32669,8,7,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,350,-100,-100,0,1,20,0,11,21,0,1,32669,8,7,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,351,-100,-90,0,1,21,0,11,22,0,1,32669,8,8,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,352,-100,-80,0,1,22,0,11,23,0,1,32669,8,8,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,353,-100,-70,0,1,23,0,11,24,0,1,32669,8,8,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,354,-100,-60,0,1,24,0,11,25,0,1,32669,8,8,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,355,-100,-50,0,1,25,0,11,26,0,1,32669,8,9,0,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,356,-100,-40,0,1,26,0,11,27,0,1,32669,8,9,1,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,357,-100,-30,0,1,27,0,11,28,0,1,32669,8,9,2,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,358,-100,-20,0,1,28,0,11,29,0,1,32669,8,9,3,ON -5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,359,-100,-10,0,1,29,0,12,0,0,1,32669,9,0,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,360,100,-300,0,0,0,0,12,1,0,1,32669,9,0,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,361,100,-290,0,0,1,0,12,2,0,1,32669,9,0,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,362,100,-280,0,0,2,0,12,3,0,1,32669,9,0,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,363,100,-270,0,0,3,0,12,4,0,1,32669,9,1,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,364,100,-260,0,0,4,0,12,5,0,1,32669,9,1,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,365,100,-250,0,0,5,0,12,6,0,1,32669,9,1,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,366,100,-240,0,0,6,0,12,7,0,1,32669,9,1,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,367,100,-230,0,0,7,0,12,8,0,1,32669,9,2,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,368,100,-220,0,0,8,0,12,9,0,1,32669,9,2,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,369,100,-210,0,0,9,0,12,10,0,1,32669,9,2,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,370,100,-200,0,0,10,0,12,11,0,1,32669,9,2,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,371,100,-190,0,0,11,0,12,12,0,1,32669,9,3,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,372,100,-180,0,0,12,0,12,13,0,1,32669,9,3,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,373,100,-170,0,0,13,0,12,14,0,1,32669,9,3,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,374,100,-160,0,0,14,0,12,15,0,1,32669,9,3,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,375,100,-150,0,0,15,0,12,16,0,1,32669,9,4,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,376,100,-140,0,0,16,0,12,17,0,1,32669,9,4,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,377,100,-130,0,0,17,0,12,18,0,1,32669,9,4,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,378,100,-120,0,0,18,0,12,19,0,1,32669,9,4,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,379,100,-110,0,0,19,0,12,20,0,1,32669,9,5,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,380,100,-100,0,0,20,0,12,21,0,1,32669,9,5,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,381,100,-90,0,0,21,0,12,22,0,1,32669,9,5,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,382,100,-80,0,0,22,0,12,23,0,1,32669,9,5,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,383,100,-70,0,0,23,0,12,24,0,1,32669,9,6,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,384,100,-60,0,0,24,0,12,25,0,1,32669,9,6,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,385,100,-50,0,0,25,0,12,26,0,1,32669,9,6,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,386,100,-40,0,0,26,0,12,27,0,1,32669,9,6,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,387,100,-30,0,0,27,0,12,28,0,1,32669,9,7,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,388,100,-20,0,0,28,0,12,29,0,1,32669,9,7,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,389,100,-10,0,0,29,0,13,0,0,1,32669,9,7,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,390,-100,-300,0,1,0,0,13,1,0,1,32669,9,7,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,391,-100,-290,0,1,1,0,13,2,0,1,32669,9,8,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,392,-100,-280,0,1,2,0,13,3,0,1,32669,9,8,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,393,-100,-270,0,1,3,0,13,4,0,1,32669,9,8,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,394,-100,-260,0,1,4,0,13,5,0,1,32669,9,8,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,395,-100,-250,0,1,5,0,13,6,0,1,32669,9,9,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,396,-100,-240,0,1,6,0,13,7,0,1,32669,9,9,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,397,-100,-230,0,1,7,0,13,8,0,1,32669,9,9,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,398,-100,-220,0,1,8,0,13,9,0,1,32669,9,9,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,399,-100,-210,0,1,9,0,13,10,0,1,32669,10,0,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,400,-100,-200,0,1,10,0,13,11,0,1,32669,10,0,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,401,-100,-190,0,1,11,0,13,12,0,1,32669,10,0,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,402,-100,-180,0,1,12,0,13,13,0,1,32669,10,0,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,403,-100,-170,0,1,13,0,13,14,0,1,32669,10,1,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,404,-100,-160,0,1,14,0,13,15,0,1,32669,10,1,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,405,-100,-150,0,1,15,0,13,16,0,1,32669,10,1,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,406,-100,-140,0,1,16,0,13,17,0,1,32669,10,1,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,407,-100,-130,0,1,17,0,13,18,0,1,32669,10,2,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,408,-100,-120,0,1,18,0,13,19,0,1,32669,10,2,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,409,-100,-110,0,1,19,0,13,20,0,1,32669,10,2,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,410,-100,-100,0,1,20,0,13,21,0,1,32669,10,2,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,411,-100,-90,0,1,21,0,13,22,0,1,32669,10,3,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,412,-100,-80,0,1,22,0,13,23,0,1,32669,10,3,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,413,-100,-70,0,1,23,0,13,24,0,1,32669,10,3,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,414,-100,-60,0,1,24,0,13,25,0,1,32669,10,3,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,415,-100,-50,0,1,25,0,13,26,0,1,32669,10,4,0,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,416,-100,-40,0,1,26,0,13,27,0,1,32669,10,4,1,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,417,-100,-30,0,1,27,0,13,28,0,1,32669,10,4,2,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,418,-100,-20,0,1,28,0,13,29,0,1,32669,10,4,3,ON -6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,419,-100,-10,0,1,29,0,14,0,0,1,32669,10,5,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,420,100,-300,0,0,0,0,14,1,0,1,32669,10,5,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,421,100,-290,0,0,1,0,14,2,0,1,32669,10,5,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,422,100,-280,0,0,2,0,14,3,0,1,32669,10,5,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,423,100,-270,0,0,3,0,14,4,0,1,32669,10,6,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,424,100,-260,0,0,4,0,14,5,0,1,32669,10,6,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,425,100,-250,0,0,5,0,14,6,0,1,32669,10,6,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,426,100,-240,0,0,6,0,14,7,0,1,32669,10,6,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,427,100,-230,0,0,7,0,14,8,0,1,32669,10,7,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,428,100,-220,0,0,8,0,14,9,0,1,32669,10,7,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,429,100,-210,0,0,9,0,14,10,0,1,32669,10,7,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,430,100,-200,0,0,10,0,14,11,0,1,32669,10,7,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,431,100,-190,0,0,11,0,14,12,0,1,32669,10,8,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,432,100,-180,0,0,12,0,14,13,0,1,32669,10,8,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,433,100,-170,0,0,13,0,14,14,0,1,32669,10,8,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,434,100,-160,0,0,14,0,14,15,0,1,32669,10,8,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,435,100,-150,0,0,15,0,14,16,0,1,32669,10,9,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,436,100,-140,0,0,16,0,14,17,0,1,32669,10,9,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,437,100,-130,0,0,17,0,14,18,0,1,32669,10,9,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,438,100,-120,0,0,18,0,14,19,0,1,32669,10,9,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,439,100,-110,0,0,19,0,14,20,0,1,32669,11,0,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,440,100,-100,0,0,20,0,14,21,0,1,32669,11,0,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,441,100,-90,0,0,21,0,14,22,0,1,32669,11,0,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,442,100,-80,0,0,22,0,14,23,0,1,32669,11,0,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,443,100,-70,0,0,23,0,14,24,0,1,32669,11,1,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,444,100,-60,0,0,24,0,14,25,0,1,32669,11,1,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,445,100,-50,0,0,25,0,14,26,0,1,32669,11,1,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,446,100,-40,0,0,26,0,14,27,0,1,32669,11,1,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,447,100,-30,0,0,27,0,14,28,0,1,32669,11,2,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,448,100,-20,0,0,28,0,14,29,0,1,32669,11,2,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,449,100,-10,0,0,29,0,15,0,0,1,32669,11,2,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,450,-100,-300,0,1,0,0,15,1,0,1,32669,11,2,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,451,-100,-290,0,1,1,0,15,2,0,1,32669,11,3,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,452,-100,-280,0,1,2,0,15,3,0,1,32669,11,3,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,453,-100,-270,0,1,3,0,15,4,0,1,32669,11,3,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,454,-100,-260,0,1,4,0,15,5,0,1,32669,11,3,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,455,-100,-250,0,1,5,0,15,6,0,1,32669,11,4,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,456,-100,-240,0,1,6,0,15,7,0,1,32669,11,4,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,457,-100,-230,0,1,7,0,15,8,0,1,32669,11,4,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,458,-100,-220,0,1,8,0,15,9,0,1,32669,11,4,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,459,-100,-210,0,1,9,0,15,10,0,1,32669,11,5,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,460,-100,-200,0,1,10,0,15,11,0,1,32669,11,5,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,461,-100,-190,0,1,11,0,15,12,0,1,32669,11,5,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,462,-100,-180,0,1,12,0,15,13,0,1,32669,11,5,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,463,-100,-170,0,1,13,0,15,14,0,1,32669,11,6,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,464,-100,-160,0,1,14,0,15,15,0,1,32669,11,6,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,465,-100,-150,0,1,15,0,15,16,0,1,32669,11,6,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,466,-100,-140,0,1,16,0,15,17,0,1,32669,11,6,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,467,-100,-130,0,1,17,0,15,18,0,1,32669,11,7,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,468,-100,-120,0,1,18,0,15,19,0,1,32669,11,7,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,469,-100,-110,0,1,19,0,15,20,0,1,32669,11,7,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,470,-100,-100,0,1,20,0,15,21,0,1,32669,11,7,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,471,-100,-90,0,1,21,0,15,22,0,1,32669,11,8,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,472,-100,-80,0,1,22,0,15,23,0,1,32669,11,8,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,473,-100,-70,0,1,23,0,15,24,0,1,32669,11,8,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,474,-100,-60,0,1,24,0,15,25,0,1,32669,11,8,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,475,-100,-50,0,1,25,0,15,26,0,1,32669,11,9,0,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,476,-100,-40,0,1,26,0,15,27,0,1,32669,11,9,1,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,477,-100,-30,0,1,27,0,15,28,0,1,32669,11,9,2,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,478,-100,-20,0,1,28,0,15,29,0,1,32669,11,9,3,ON -7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,479,-100,-10,0,1,29,0,16,0,0,2,32669,12,0,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,480,100,-300,0,0,0,0,16,1,0,2,32669,12,0,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,481,100,-290,0,0,1,0,16,2,0,2,32669,12,0,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,482,100,-280,0,0,2,0,16,3,0,2,32669,12,0,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,483,100,-270,0,0,3,0,16,4,0,2,32669,12,1,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,484,100,-260,0,0,4,0,16,5,0,2,32669,12,1,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,485,100,-250,0,0,5,0,16,6,0,2,32669,12,1,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,486,100,-240,0,0,6,0,16,7,0,2,32669,12,1,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,487,100,-230,0,0,7,0,16,8,0,2,32669,12,2,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,488,100,-220,0,0,8,0,16,9,0,2,32669,12,2,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,489,100,-210,0,0,9,0,16,10,0,2,32669,12,2,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,490,100,-200,0,0,10,0,16,11,0,2,32669,12,2,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,491,100,-190,0,0,11,0,16,12,0,2,32669,12,3,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,492,100,-180,0,0,12,0,16,13,0,2,32669,12,3,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,493,100,-170,0,0,13,0,16,14,0,2,32669,12,3,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,494,100,-160,0,0,14,0,16,15,0,2,32669,12,3,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,495,100,-150,0,0,15,0,16,16,0,2,32669,12,4,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,496,100,-140,0,0,16,0,16,17,0,2,32669,12,4,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,497,100,-130,0,0,17,0,16,18,0,2,32669,12,4,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,498,100,-120,0,0,18,0,16,19,0,2,32669,12,4,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,499,100,-110,0,0,19,0,16,20,0,2,32669,12,5,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,500,100,-100,0,0,20,0,16,21,0,2,32669,12,5,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,501,100,-90,0,0,21,0,16,22,0,2,32669,12,5,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,502,100,-80,0,0,22,0,16,23,0,2,32669,12,5,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,503,100,-70,0,0,23,0,16,24,0,2,32669,12,6,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,504,100,-60,0,0,24,0,16,25,0,2,32669,12,6,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,505,100,-50,0,0,25,0,16,26,0,2,32669,12,6,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,506,100,-40,0,0,26,0,16,27,0,2,32669,12,6,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,507,100,-30,0,0,27,0,16,28,0,2,32669,12,7,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,508,100,-20,0,0,28,0,16,29,0,2,32669,12,7,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,509,100,-10,0,0,29,0,17,0,0,2,32669,12,7,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,510,-100,-300,0,1,0,0,17,1,0,2,32669,12,7,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,511,-100,-290,0,1,1,0,17,2,0,2,32669,12,8,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,512,-100,-280,0,1,2,0,17,3,0,2,32669,12,8,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,513,-100,-270,0,1,3,0,17,4,0,2,32669,12,8,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,514,-100,-260,0,1,4,0,17,5,0,2,32669,12,8,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,515,-100,-250,0,1,5,0,17,6,0,2,32669,12,9,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,516,-100,-240,0,1,6,0,17,7,0,2,32669,12,9,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,517,-100,-230,0,1,7,0,17,8,0,2,32669,12,9,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,518,-100,-220,0,1,8,0,17,9,0,2,32669,12,9,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,519,-100,-210,0,1,9,0,17,10,0,2,32669,13,0,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,520,-100,-200,0,1,10,0,17,11,0,2,32669,13,0,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,521,-100,-190,0,1,11,0,17,12,0,2,32669,13,0,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,522,-100,-180,0,1,12,0,17,13,0,2,32669,13,0,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,523,-100,-170,0,1,13,0,17,14,0,2,32669,13,1,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,524,-100,-160,0,1,14,0,17,15,0,2,32669,13,1,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,525,-100,-150,0,1,15,0,17,16,0,2,32669,13,1,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,526,-100,-140,0,1,16,0,17,17,0,2,32669,13,1,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,527,-100,-130,0,1,17,0,17,18,0,2,32669,13,2,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,528,-100,-120,0,1,18,0,17,19,0,2,32669,13,2,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,529,-100,-110,0,1,19,0,17,20,0,2,32669,13,2,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,530,-100,-100,0,1,20,0,17,21,0,2,32669,13,2,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,531,-100,-90,0,1,21,0,17,22,0,2,32669,13,3,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,532,-100,-80,0,1,22,0,17,23,0,2,32669,13,3,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,533,-100,-70,0,1,23,0,17,24,0,2,32669,13,3,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,534,-100,-60,0,1,24,0,17,25,0,2,32669,13,3,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,535,-100,-50,0,1,25,0,17,26,0,2,32669,13,4,0,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,536,-100,-40,0,1,26,0,17,27,0,2,32669,13,4,1,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,537,-100,-30,0,1,27,0,17,28,0,2,32669,13,4,2,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,538,-100,-20,0,1,28,0,17,29,0,2,32669,13,4,3,ON -8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,539,-100,-10,0,1,29,0,18,0,0,2,32669,13,5,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,540,100,-300,0,0,0,0,18,1,0,2,32669,13,5,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,541,100,-290,0,0,1,0,18,2,0,2,32669,13,5,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,542,100,-280,0,0,2,0,18,3,0,2,32669,13,5,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,543,100,-270,0,0,3,0,18,4,0,2,32669,13,6,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,544,100,-260,0,0,4,0,18,5,0,2,32669,13,6,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,545,100,-250,0,0,5,0,18,6,0,2,32669,13,6,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,546,100,-240,0,0,6,0,18,7,0,2,32669,13,6,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,547,100,-230,0,0,7,0,18,8,0,2,32669,13,7,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,548,100,-220,0,0,8,0,18,9,0,2,32669,13,7,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,549,100,-210,0,0,9,0,18,10,0,2,32669,13,7,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,550,100,-200,0,0,10,0,18,11,0,2,32669,13,7,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,551,100,-190,0,0,11,0,18,12,0,2,32669,13,8,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,552,100,-180,0,0,12,0,18,13,0,2,32669,13,8,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,553,100,-170,0,0,13,0,18,14,0,2,32669,13,8,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,554,100,-160,0,0,14,0,18,15,0,2,32669,13,8,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,555,100,-150,0,0,15,0,18,16,0,2,32669,13,9,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,556,100,-140,0,0,16,0,18,17,0,2,32669,13,9,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,557,100,-130,0,0,17,0,18,18,0,2,32669,13,9,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,558,100,-120,0,0,18,0,18,19,0,2,32669,13,9,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,559,100,-110,0,0,19,0,18,20,0,2,32669,14,0,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,560,100,-100,0,0,20,0,18,21,0,2,32669,14,0,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,561,100,-90,0,0,21,0,18,22,0,2,32669,14,0,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,562,100,-80,0,0,22,0,18,23,0,2,32669,14,0,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,563,100,-70,0,0,23,0,18,24,0,2,32669,14,1,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,564,100,-60,0,0,24,0,18,25,0,2,32669,14,1,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,565,100,-50,0,0,25,0,18,26,0,2,32669,14,1,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,566,100,-40,0,0,26,0,18,27,0,2,32669,14,1,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,567,100,-30,0,0,27,0,18,28,0,2,32669,14,2,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,568,100,-20,0,0,28,0,18,29,0,2,32669,14,2,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,569,100,-10,0,0,29,0,19,0,0,2,32669,14,2,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,570,-100,-300,0,1,0,0,19,1,0,2,32669,14,2,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,571,-100,-290,0,1,1,0,19,2,0,2,32669,14,3,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,572,-100,-280,0,1,2,0,19,3,0,2,32669,14,3,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,573,-100,-270,0,1,3,0,19,4,0,2,32669,14,3,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,574,-100,-260,0,1,4,0,19,5,0,2,32669,14,3,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,575,-100,-250,0,1,5,0,19,6,0,2,32669,14,4,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,576,-100,-240,0,1,6,0,19,7,0,2,32669,14,4,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,577,-100,-230,0,1,7,0,19,8,0,2,32669,14,4,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,578,-100,-220,0,1,8,0,19,9,0,2,32669,14,4,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,579,-100,-210,0,1,9,0,19,10,0,2,32669,14,5,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,580,-100,-200,0,1,10,0,19,11,0,2,32669,14,5,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,581,-100,-190,0,1,11,0,19,12,0,2,32669,14,5,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,582,-100,-180,0,1,12,0,19,13,0,2,32669,14,5,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,583,-100,-170,0,1,13,0,19,14,0,2,32669,14,6,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,584,-100,-160,0,1,14,0,19,15,0,2,32669,14,6,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,585,-100,-150,0,1,15,0,19,16,0,2,32669,14,6,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,586,-100,-140,0,1,16,0,19,17,0,2,32669,14,6,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,587,-100,-130,0,1,17,0,19,18,0,2,32669,14,7,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,588,-100,-120,0,1,18,0,19,19,0,2,32669,14,7,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,589,-100,-110,0,1,19,0,19,20,0,2,32669,14,7,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,590,-100,-100,0,1,20,0,19,21,0,2,32669,14,7,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,591,-100,-90,0,1,21,0,19,22,0,2,32669,14,8,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,592,-100,-80,0,1,22,0,19,23,0,2,32669,14,8,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,593,-100,-70,0,1,23,0,19,24,0,2,32669,14,8,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,594,-100,-60,0,1,24,0,19,25,0,2,32669,14,8,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,595,-100,-50,0,1,25,0,19,26,0,2,32669,14,9,0,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,596,-100,-40,0,1,26,0,19,27,0,2,32669,14,9,1,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,597,-100,-30,0,1,27,0,19,28,0,2,32669,14,9,2,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,598,-100,-20,0,1,28,0,19,29,0,2,32669,14,9,3,ON -9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,599,-100,-10,0,1,29,1,0,0,0,2,32669,15,0,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,600,100,-300,0,0,0,1,0,1,0,2,32669,15,0,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,601,100,-290,0,0,1,1,0,2,0,2,32669,15,0,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,602,100,-280,0,0,2,1,0,3,0,2,32669,15,0,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,603,100,-270,0,0,3,1,0,4,0,2,32669,15,1,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,604,100,-260,0,0,4,1,0,5,0,2,32669,15,1,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,605,100,-250,0,0,5,1,0,6,0,2,32669,15,1,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,606,100,-240,0,0,6,1,0,7,0,2,32669,15,1,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,607,100,-230,0,0,7,1,0,8,0,2,32669,15,2,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,608,100,-220,0,0,8,1,0,9,0,2,32669,15,2,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,609,100,-210,0,0,9,1,0,10,0,2,32669,15,2,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,610,100,-200,0,0,10,1,0,11,0,2,32669,15,2,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,611,100,-190,0,0,11,1,0,12,0,2,32669,15,3,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,612,100,-180,0,0,12,1,0,13,0,2,32669,15,3,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,613,100,-170,0,0,13,1,0,14,0,2,32669,15,3,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,614,100,-160,0,0,14,1,0,15,0,2,32669,15,3,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,615,100,-150,0,0,15,1,0,16,0,2,32669,15,4,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,616,100,-140,0,0,16,1,0,17,0,2,32669,15,4,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,617,100,-130,0,0,17,1,0,18,0,2,32669,15,4,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,618,100,-120,0,0,18,1,0,19,0,2,32669,15,4,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,619,100,-110,0,0,19,1,0,20,0,2,32669,15,5,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,620,100,-100,0,0,20,1,0,21,0,2,32669,15,5,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,621,100,-90,0,0,21,1,0,22,0,2,32669,15,5,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,622,100,-80,0,0,22,1,0,23,0,2,32669,15,5,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,623,100,-70,0,0,23,1,0,24,0,2,32669,15,6,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,624,100,-60,0,0,24,1,0,25,0,2,32669,15,6,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,625,100,-50,0,0,25,1,0,26,0,2,32669,15,6,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,626,100,-40,0,0,26,1,0,27,0,2,32669,15,6,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,627,100,-30,0,0,27,1,0,28,0,2,32669,15,7,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,628,100,-20,0,0,28,1,0,29,0,2,32669,15,7,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,629,100,-10,0,0,29,1,1,0,0,2,32669,15,7,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,630,-100,-300,0,1,0,1,1,1,0,2,32669,15,7,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,631,-100,-290,0,1,1,1,1,2,0,2,32669,15,8,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,632,-100,-280,0,1,2,1,1,3,0,2,32669,15,8,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,633,-100,-270,0,1,3,1,1,4,0,2,32669,15,8,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,634,-100,-260,0,1,4,1,1,5,0,2,32669,15,8,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,635,-100,-250,0,1,5,1,1,6,0,2,32669,15,9,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,636,-100,-240,0,1,6,1,1,7,0,2,32669,15,9,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,637,-100,-230,0,1,7,1,1,8,0,2,32669,15,9,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,638,-100,-220,0,1,8,1,1,9,0,2,32669,15,9,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,639,-100,-210,0,1,9,1,1,10,0,2,32669,16,0,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,640,-100,-200,0,1,10,1,1,11,0,2,32669,16,0,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,641,-100,-190,0,1,11,1,1,12,0,2,32669,16,0,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,642,-100,-180,0,1,12,1,1,13,0,2,32669,16,0,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,643,-100,-170,0,1,13,1,1,14,0,2,32669,16,1,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,644,-100,-160,0,1,14,1,1,15,0,2,32669,16,1,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,645,-100,-150,0,1,15,1,1,16,0,2,32669,16,1,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,646,-100,-140,0,1,16,1,1,17,0,2,32669,16,1,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,647,-100,-130,0,1,17,1,1,18,0,2,32669,16,2,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,648,-100,-120,0,1,18,1,1,19,0,2,32669,16,2,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,649,-100,-110,0,1,19,1,1,20,0,2,32669,16,2,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,650,-100,-100,0,1,20,1,1,21,0,2,32669,16,2,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,651,-100,-90,0,1,21,1,1,22,0,2,32669,16,3,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,652,-100,-80,0,1,22,1,1,23,0,2,32669,16,3,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,653,-100,-70,0,1,23,1,1,24,0,2,32669,16,3,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,654,-100,-60,0,1,24,1,1,25,0,2,32669,16,3,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,655,-100,-50,0,1,25,1,1,26,0,2,32669,16,4,0,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,656,-100,-40,0,1,26,1,1,27,0,2,32669,16,4,1,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,657,-100,-30,0,1,27,1,1,28,0,2,32669,16,4,2,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,658,-100,-20,0,1,28,1,1,29,0,2,32669,16,4,3,ON -10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,659,-100,-10,0,1,29,1,2,0,0,2,32669,16,5,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,660,100,-300,0,0,0,1,2,1,0,2,32669,16,5,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,661,100,-290,0,0,1,1,2,2,0,2,32669,16,5,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,662,100,-280,0,0,2,1,2,3,0,2,32669,16,5,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,663,100,-270,0,0,3,1,2,4,0,2,32669,16,6,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,664,100,-260,0,0,4,1,2,5,0,2,32669,16,6,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,665,100,-250,0,0,5,1,2,6,0,2,32669,16,6,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,666,100,-240,0,0,6,1,2,7,0,2,32669,16,6,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,667,100,-230,0,0,7,1,2,8,0,2,32669,16,7,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,668,100,-220,0,0,8,1,2,9,0,2,32669,16,7,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,669,100,-210,0,0,9,1,2,10,0,2,32669,16,7,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,670,100,-200,0,0,10,1,2,11,0,2,32669,16,7,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,671,100,-190,0,0,11,1,2,12,0,2,32669,16,8,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,672,100,-180,0,0,12,1,2,13,0,2,32669,16,8,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,673,100,-170,0,0,13,1,2,14,0,2,32669,16,8,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,674,100,-160,0,0,14,1,2,15,0,2,32669,16,8,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,675,100,-150,0,0,15,1,2,16,0,2,32669,16,9,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,676,100,-140,0,0,16,1,2,17,0,2,32669,16,9,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,677,100,-130,0,0,17,1,2,18,0,2,32669,16,9,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,678,100,-120,0,0,18,1,2,19,0,2,32669,16,9,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,679,100,-110,0,0,19,1,2,20,0,2,32669,17,0,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,680,100,-100,0,0,20,1,2,21,0,2,32669,17,0,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,681,100,-90,0,0,21,1,2,22,0,2,32669,17,0,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,682,100,-80,0,0,22,1,2,23,0,2,32669,17,0,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,683,100,-70,0,0,23,1,2,24,0,2,32669,17,1,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,684,100,-60,0,0,24,1,2,25,0,2,32669,17,1,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,685,100,-50,0,0,25,1,2,26,0,2,32669,17,1,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,686,100,-40,0,0,26,1,2,27,0,2,32669,17,1,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,687,100,-30,0,0,27,1,2,28,0,2,32669,17,2,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,688,100,-20,0,0,28,1,2,29,0,2,32669,17,2,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,689,100,-10,0,0,29,1,3,0,0,2,32669,17,2,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,690,-100,-300,0,1,0,1,3,1,0,2,32669,17,2,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,691,-100,-290,0,1,1,1,3,2,0,2,32669,17,3,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,692,-100,-280,0,1,2,1,3,3,0,2,32669,17,3,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,693,-100,-270,0,1,3,1,3,4,0,2,32669,17,3,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,694,-100,-260,0,1,4,1,3,5,0,2,32669,17,3,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,695,-100,-250,0,1,5,1,3,6,0,2,32669,17,4,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,696,-100,-240,0,1,6,1,3,7,0,2,32669,17,4,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,697,-100,-230,0,1,7,1,3,8,0,2,32669,17,4,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,698,-100,-220,0,1,8,1,3,9,0,2,32669,17,4,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,699,-100,-210,0,1,9,1,3,10,0,2,32669,17,5,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,700,-100,-200,0,1,10,1,3,11,0,2,32669,17,5,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,701,-100,-190,0,1,11,1,3,12,0,2,32669,17,5,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,702,-100,-180,0,1,12,1,3,13,0,2,32669,17,5,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,703,-100,-170,0,1,13,1,3,14,0,2,32669,17,6,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,704,-100,-160,0,1,14,1,3,15,0,2,32669,17,6,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,705,-100,-150,0,1,15,1,3,16,0,2,32669,17,6,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,706,-100,-140,0,1,16,1,3,17,0,2,32669,17,6,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,707,-100,-130,0,1,17,1,3,18,0,2,32669,17,7,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,708,-100,-120,0,1,18,1,3,19,0,2,32669,17,7,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,709,-100,-110,0,1,19,1,3,20,0,2,32669,17,7,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,710,-100,-100,0,1,20,1,3,21,0,2,32669,17,7,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,711,-100,-90,0,1,21,1,3,22,0,2,32669,17,8,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,712,-100,-80,0,1,22,1,3,23,0,2,32669,17,8,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,713,-100,-70,0,1,23,1,3,24,0,2,32669,17,8,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,714,-100,-60,0,1,24,1,3,25,0,2,32669,17,8,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,715,-100,-50,0,1,25,1,3,26,0,2,32669,17,9,0,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,716,-100,-40,0,1,26,1,3,27,0,2,32669,17,9,1,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,717,-100,-30,0,1,27,1,3,28,0,2,32669,17,9,2,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,718,-100,-20,0,1,28,1,3,29,0,2,32669,17,9,3,ON -11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,719,-100,-10,0,1,29,1,4,0,0,3,32669,18,0,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,720,100,-300,0,0,0,1,4,1,0,3,32669,18,0,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,721,100,-290,0,0,1,1,4,2,0,3,32669,18,0,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,722,100,-280,0,0,2,1,4,3,0,3,32669,18,0,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,723,100,-270,0,0,3,1,4,4,0,3,32669,18,1,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,724,100,-260,0,0,4,1,4,5,0,3,32669,18,1,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,725,100,-250,0,0,5,1,4,6,0,3,32669,18,1,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,726,100,-240,0,0,6,1,4,7,0,3,32669,18,1,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,727,100,-230,0,0,7,1,4,8,0,3,32669,18,2,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,728,100,-220,0,0,8,1,4,9,0,3,32669,18,2,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,729,100,-210,0,0,9,1,4,10,0,3,32669,18,2,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,730,100,-200,0,0,10,1,4,11,0,3,32669,18,2,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,731,100,-190,0,0,11,1,4,12,0,3,32669,18,3,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,732,100,-180,0,0,12,1,4,13,0,3,32669,18,3,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,733,100,-170,0,0,13,1,4,14,0,3,32669,18,3,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,734,100,-160,0,0,14,1,4,15,0,3,32669,18,3,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,735,100,-150,0,0,15,1,4,16,0,3,32669,18,4,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,736,100,-140,0,0,16,1,4,17,0,3,32669,18,4,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,737,100,-130,0,0,17,1,4,18,0,3,32669,18,4,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,738,100,-120,0,0,18,1,4,19,0,3,32669,18,4,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,739,100,-110,0,0,19,1,4,20,0,3,32669,18,5,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,740,100,-100,0,0,20,1,4,21,0,3,32669,18,5,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,741,100,-90,0,0,21,1,4,22,0,3,32669,18,5,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,742,100,-80,0,0,22,1,4,23,0,3,32669,18,5,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,743,100,-70,0,0,23,1,4,24,0,3,32669,18,6,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,744,100,-60,0,0,24,1,4,25,0,3,32669,18,6,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,745,100,-50,0,0,25,1,4,26,0,3,32669,18,6,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,746,100,-40,0,0,26,1,4,27,0,3,32669,18,6,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,747,100,-30,0,0,27,1,4,28,0,3,32669,18,7,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,748,100,-20,0,0,28,1,4,29,0,3,32669,18,7,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,749,100,-10,0,0,29,1,5,0,0,3,32669,18,7,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,750,-100,-300,0,1,0,1,5,1,0,3,32669,18,7,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,751,-100,-290,0,1,1,1,5,2,0,3,32669,18,8,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,752,-100,-280,0,1,2,1,5,3,0,3,32669,18,8,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,753,-100,-270,0,1,3,1,5,4,0,3,32669,18,8,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,754,-100,-260,0,1,4,1,5,5,0,3,32669,18,8,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,755,-100,-250,0,1,5,1,5,6,0,3,32669,18,9,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,756,-100,-240,0,1,6,1,5,7,0,3,32669,18,9,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,757,-100,-230,0,1,7,1,5,8,0,3,32669,18,9,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,758,-100,-220,0,1,8,1,5,9,0,3,32669,18,9,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,759,-100,-210,0,1,9,1,5,10,0,3,32669,19,0,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,760,-100,-200,0,1,10,1,5,11,0,3,32669,19,0,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,761,-100,-190,0,1,11,1,5,12,0,3,32669,19,0,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,762,-100,-180,0,1,12,1,5,13,0,3,32669,19,0,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,763,-100,-170,0,1,13,1,5,14,0,3,32669,19,1,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,764,-100,-160,0,1,14,1,5,15,0,3,32669,19,1,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,765,-100,-150,0,1,15,1,5,16,0,3,32669,19,1,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,766,-100,-140,0,1,16,1,5,17,0,3,32669,19,1,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,767,-100,-130,0,1,17,1,5,18,0,3,32669,19,2,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,768,-100,-120,0,1,18,1,5,19,0,3,32669,19,2,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,769,-100,-110,0,1,19,1,5,20,0,3,32669,19,2,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,770,-100,-100,0,1,20,1,5,21,0,3,32669,19,2,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,771,-100,-90,0,1,21,1,5,22,0,3,32669,19,3,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,772,-100,-80,0,1,22,1,5,23,0,3,32669,19,3,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,773,-100,-70,0,1,23,1,5,24,0,3,32669,19,3,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,774,-100,-60,0,1,24,1,5,25,0,3,32669,19,3,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,775,-100,-50,0,1,25,1,5,26,0,3,32669,19,4,0,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,776,-100,-40,0,1,26,1,5,27,0,3,32669,19,4,1,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,777,-100,-30,0,1,27,1,5,28,0,3,32669,19,4,2,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,778,-100,-20,0,1,28,1,5,29,0,3,32669,19,4,3,ON -12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,779,-100,-10,0,1,29,1,6,0,0,3,32669,19,5,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,780,100,-300,0,0,0,1,6,1,0,3,32669,19,5,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,781,100,-290,0,0,1,1,6,2,0,3,32669,19,5,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,782,100,-280,0,0,2,1,6,3,0,3,32669,19,5,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,783,100,-270,0,0,3,1,6,4,0,3,32669,19,6,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,784,100,-260,0,0,4,1,6,5,0,3,32669,19,6,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,785,100,-250,0,0,5,1,6,6,0,3,32669,19,6,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,786,100,-240,0,0,6,1,6,7,0,3,32669,19,6,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,787,100,-230,0,0,7,1,6,8,0,3,32669,19,7,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,788,100,-220,0,0,8,1,6,9,0,3,32669,19,7,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,789,100,-210,0,0,9,1,6,10,0,3,32669,19,7,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,790,100,-200,0,0,10,1,6,11,0,3,32669,19,7,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,791,100,-190,0,0,11,1,6,12,0,3,32669,19,8,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,792,100,-180,0,0,12,1,6,13,0,3,32669,19,8,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,793,100,-170,0,0,13,1,6,14,0,3,32669,19,8,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,794,100,-160,0,0,14,1,6,15,0,3,32669,19,8,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,795,100,-150,0,0,15,1,6,16,0,3,32669,19,9,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,796,100,-140,0,0,16,1,6,17,0,3,32669,19,9,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,797,100,-130,0,0,17,1,6,18,0,3,32669,19,9,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,798,100,-120,0,0,18,1,6,19,0,3,32669,19,9,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,799,100,-110,0,0,19,1,6,20,0,3,32669,20,0,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,800,100,-100,0,0,20,1,6,21,0,3,32669,20,0,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,801,100,-90,0,0,21,1,6,22,0,3,32669,20,0,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,802,100,-80,0,0,22,1,6,23,0,3,32669,20,0,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,803,100,-70,0,0,23,1,6,24,0,3,32669,20,1,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,804,100,-60,0,0,24,1,6,25,0,3,32669,20,1,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,805,100,-50,0,0,25,1,6,26,0,3,32669,20,1,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,806,100,-40,0,0,26,1,6,27,0,3,32669,20,1,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,807,100,-30,0,0,27,1,6,28,0,3,32669,20,2,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,808,100,-20,0,0,28,1,6,29,0,3,32669,20,2,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,809,100,-10,0,0,29,1,7,0,0,3,32669,20,2,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,810,-100,-300,0,1,0,1,7,1,0,3,32669,20,2,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,811,-100,-290,0,1,1,1,7,2,0,3,32669,20,3,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,812,-100,-280,0,1,2,1,7,3,0,3,32669,20,3,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,813,-100,-270,0,1,3,1,7,4,0,3,32669,20,3,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,814,-100,-260,0,1,4,1,7,5,0,3,32669,20,3,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,815,-100,-250,0,1,5,1,7,6,0,3,32669,20,4,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,816,-100,-240,0,1,6,1,7,7,0,3,32669,20,4,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,817,-100,-230,0,1,7,1,7,8,0,3,32669,20,4,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,818,-100,-220,0,1,8,1,7,9,0,3,32669,20,4,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,819,-100,-210,0,1,9,1,7,10,0,3,32669,20,5,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,820,-100,-200,0,1,10,1,7,11,0,3,32669,20,5,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,821,-100,-190,0,1,11,1,7,12,0,3,32669,20,5,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,822,-100,-180,0,1,12,1,7,13,0,3,32669,20,5,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,823,-100,-170,0,1,13,1,7,14,0,3,32669,20,6,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,824,-100,-160,0,1,14,1,7,15,0,3,32669,20,6,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,825,-100,-150,0,1,15,1,7,16,0,3,32669,20,6,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,826,-100,-140,0,1,16,1,7,17,0,3,32669,20,6,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,827,-100,-130,0,1,17,1,7,18,0,3,32669,20,7,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,828,-100,-120,0,1,18,1,7,19,0,3,32669,20,7,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,829,-100,-110,0,1,19,1,7,20,0,3,32669,20,7,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,830,-100,-100,0,1,20,1,7,21,0,3,32669,20,7,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,831,-100,-90,0,1,21,1,7,22,0,3,32669,20,8,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,832,-100,-80,0,1,22,1,7,23,0,3,32669,20,8,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,833,-100,-70,0,1,23,1,7,24,0,3,32669,20,8,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,834,-100,-60,0,1,24,1,7,25,0,3,32669,20,8,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,835,-100,-50,0,1,25,1,7,26,0,3,32669,20,9,0,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,836,-100,-40,0,1,26,1,7,27,0,3,32669,20,9,1,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,837,-100,-30,0,1,27,1,7,28,0,3,32669,20,9,2,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,838,-100,-20,0,1,28,1,7,29,0,3,32669,20,9,3,ON -13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,839,-100,-10,0,1,29,1,8,0,0,3,32669,21,0,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,840,100,-300,0,0,0,1,8,1,0,3,32669,21,0,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,841,100,-290,0,0,1,1,8,2,0,3,32669,21,0,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,842,100,-280,0,0,2,1,8,3,0,3,32669,21,0,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,843,100,-270,0,0,3,1,8,4,0,3,32669,21,1,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,844,100,-260,0,0,4,1,8,5,0,3,32669,21,1,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,845,100,-250,0,0,5,1,8,6,0,3,32669,21,1,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,846,100,-240,0,0,6,1,8,7,0,3,32669,21,1,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,847,100,-230,0,0,7,1,8,8,0,3,32669,21,2,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,848,100,-220,0,0,8,1,8,9,0,3,32669,21,2,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,849,100,-210,0,0,9,1,8,10,0,3,32669,21,2,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,850,100,-200,0,0,10,1,8,11,0,3,32669,21,2,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,851,100,-190,0,0,11,1,8,12,0,3,32669,21,3,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,852,100,-180,0,0,12,1,8,13,0,3,32669,21,3,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,853,100,-170,0,0,13,1,8,14,0,3,32669,21,3,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,854,100,-160,0,0,14,1,8,15,0,3,32669,21,3,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,855,100,-150,0,0,15,1,8,16,0,3,32669,21,4,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,856,100,-140,0,0,16,1,8,17,0,3,32669,21,4,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,857,100,-130,0,0,17,1,8,18,0,3,32669,21,4,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,858,100,-120,0,0,18,1,8,19,0,3,32669,21,4,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,859,100,-110,0,0,19,1,8,20,0,3,32669,21,5,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,860,100,-100,0,0,20,1,8,21,0,3,32669,21,5,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,861,100,-90,0,0,21,1,8,22,0,3,32669,21,5,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,862,100,-80,0,0,22,1,8,23,0,3,32669,21,5,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,863,100,-70,0,0,23,1,8,24,0,3,32669,21,6,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,864,100,-60,0,0,24,1,8,25,0,3,32669,21,6,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,865,100,-50,0,0,25,1,8,26,0,3,32669,21,6,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,866,100,-40,0,0,26,1,8,27,0,3,32669,21,6,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,867,100,-30,0,0,27,1,8,28,0,3,32669,21,7,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,868,100,-20,0,0,28,1,8,29,0,3,32669,21,7,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,869,100,-10,0,0,29,1,9,0,0,3,32669,21,7,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,870,-100,-300,0,1,0,1,9,1,0,3,32669,21,7,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,871,-100,-290,0,1,1,1,9,2,0,3,32669,21,8,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,872,-100,-280,0,1,2,1,9,3,0,3,32669,21,8,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,873,-100,-270,0,1,3,1,9,4,0,3,32669,21,8,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,874,-100,-260,0,1,4,1,9,5,0,3,32669,21,8,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,875,-100,-250,0,1,5,1,9,6,0,3,32669,21,9,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,876,-100,-240,0,1,6,1,9,7,0,3,32669,21,9,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,877,-100,-230,0,1,7,1,9,8,0,3,32669,21,9,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,878,-100,-220,0,1,8,1,9,9,0,3,32669,21,9,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,879,-100,-210,0,1,9,1,9,10,0,3,32669,22,0,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,880,-100,-200,0,1,10,1,9,11,0,3,32669,22,0,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,881,-100,-190,0,1,11,1,9,12,0,3,32669,22,0,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,882,-100,-180,0,1,12,1,9,13,0,3,32669,22,0,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,883,-100,-170,0,1,13,1,9,14,0,3,32669,22,1,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,884,-100,-160,0,1,14,1,9,15,0,3,32669,22,1,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,885,-100,-150,0,1,15,1,9,16,0,3,32669,22,1,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,886,-100,-140,0,1,16,1,9,17,0,3,32669,22,1,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,887,-100,-130,0,1,17,1,9,18,0,3,32669,22,2,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,888,-100,-120,0,1,18,1,9,19,0,3,32669,22,2,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,889,-100,-110,0,1,19,1,9,20,0,3,32669,22,2,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,890,-100,-100,0,1,20,1,9,21,0,3,32669,22,2,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,891,-100,-90,0,1,21,1,9,22,0,3,32669,22,3,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,892,-100,-80,0,1,22,1,9,23,0,3,32669,22,3,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,893,-100,-70,0,1,23,1,9,24,0,3,32669,22,3,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,894,-100,-60,0,1,24,1,9,25,0,3,32669,22,3,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,895,-100,-50,0,1,25,1,9,26,0,3,32669,22,4,0,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,896,-100,-40,0,1,26,1,9,27,0,3,32669,22,4,1,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,897,-100,-30,0,1,27,1,9,28,0,3,32669,22,4,2,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,898,-100,-20,0,1,28,1,9,29,0,3,32669,22,4,3,ON -14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,899,-100,-10,0,1,29,1,10,0,0,3,32669,22,5,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,900,100,-300,0,0,0,1,10,1,0,3,32669,22,5,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,901,100,-290,0,0,1,1,10,2,0,3,32669,22,5,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,902,100,-280,0,0,2,1,10,3,0,3,32669,22,5,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,903,100,-270,0,0,3,1,10,4,0,3,32669,22,6,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,904,100,-260,0,0,4,1,10,5,0,3,32669,22,6,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,905,100,-250,0,0,5,1,10,6,0,3,32669,22,6,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,906,100,-240,0,0,6,1,10,7,0,3,32669,22,6,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,907,100,-230,0,0,7,1,10,8,0,3,32669,22,7,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,908,100,-220,0,0,8,1,10,9,0,3,32669,22,7,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,909,100,-210,0,0,9,1,10,10,0,3,32669,22,7,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,910,100,-200,0,0,10,1,10,11,0,3,32669,22,7,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,911,100,-190,0,0,11,1,10,12,0,3,32669,22,8,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,912,100,-180,0,0,12,1,10,13,0,3,32669,22,8,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,913,100,-170,0,0,13,1,10,14,0,3,32669,22,8,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,914,100,-160,0,0,14,1,10,15,0,3,32669,22,8,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,915,100,-150,0,0,15,1,10,16,0,3,32669,22,9,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,916,100,-140,0,0,16,1,10,17,0,3,32669,22,9,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,917,100,-130,0,0,17,1,10,18,0,3,32669,22,9,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,918,100,-120,0,0,18,1,10,19,0,3,32669,22,9,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,919,100,-110,0,0,19,1,10,20,0,3,32669,23,0,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,920,100,-100,0,0,20,1,10,21,0,3,32669,23,0,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,921,100,-90,0,0,21,1,10,22,0,3,32669,23,0,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,922,100,-80,0,0,22,1,10,23,0,3,32669,23,0,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,923,100,-70,0,0,23,1,10,24,0,3,32669,23,1,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,924,100,-60,0,0,24,1,10,25,0,3,32669,23,1,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,925,100,-50,0,0,25,1,10,26,0,3,32669,23,1,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,926,100,-40,0,0,26,1,10,27,0,3,32669,23,1,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,927,100,-30,0,0,27,1,10,28,0,3,32669,23,2,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,928,100,-20,0,0,28,1,10,29,0,3,32669,23,2,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,929,100,-10,0,0,29,1,11,0,0,3,32669,23,2,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,930,-100,-300,0,1,0,1,11,1,0,3,32669,23,2,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,931,-100,-290,0,1,1,1,11,2,0,3,32669,23,3,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,932,-100,-280,0,1,2,1,11,3,0,3,32669,23,3,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,933,-100,-270,0,1,3,1,11,4,0,3,32669,23,3,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,934,-100,-260,0,1,4,1,11,5,0,3,32669,23,3,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,935,-100,-250,0,1,5,1,11,6,0,3,32669,23,4,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,936,-100,-240,0,1,6,1,11,7,0,3,32669,23,4,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,937,-100,-230,0,1,7,1,11,8,0,3,32669,23,4,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,938,-100,-220,0,1,8,1,11,9,0,3,32669,23,4,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,939,-100,-210,0,1,9,1,11,10,0,3,32669,23,5,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,940,-100,-200,0,1,10,1,11,11,0,3,32669,23,5,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,941,-100,-190,0,1,11,1,11,12,0,3,32669,23,5,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,942,-100,-180,0,1,12,1,11,13,0,3,32669,23,5,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,943,-100,-170,0,1,13,1,11,14,0,3,32669,23,6,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,944,-100,-160,0,1,14,1,11,15,0,3,32669,23,6,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,945,-100,-150,0,1,15,1,11,16,0,3,32669,23,6,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,946,-100,-140,0,1,16,1,11,17,0,3,32669,23,6,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,947,-100,-130,0,1,17,1,11,18,0,3,32669,23,7,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,948,-100,-120,0,1,18,1,11,19,0,3,32669,23,7,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,949,-100,-110,0,1,19,1,11,20,0,3,32669,23,7,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,950,-100,-100,0,1,20,1,11,21,0,3,32669,23,7,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,951,-100,-90,0,1,21,1,11,22,0,3,32669,23,8,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,952,-100,-80,0,1,22,1,11,23,0,3,32669,23,8,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,953,-100,-70,0,1,23,1,11,24,0,3,32669,23,8,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,954,-100,-60,0,1,24,1,11,25,0,3,32669,23,8,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,955,-100,-50,0,1,25,1,11,26,0,3,32669,23,9,0,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,956,-100,-40,0,1,26,1,11,27,0,3,32669,23,9,1,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,957,-100,-30,0,1,27,1,11,28,0,3,32669,23,9,2,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,958,-100,-20,0,1,28,1,11,29,0,3,32669,23,9,3,ON -15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,959,-100,-10,0,1,29,1,12,0,0,4,32669,24,0,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,960,100,-300,0,0,0,1,12,1,0,4,32669,24,0,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,961,100,-290,0,0,1,1,12,2,0,4,32669,24,0,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,962,100,-280,0,0,2,1,12,3,0,4,32669,24,0,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,963,100,-270,0,0,3,1,12,4,0,4,32669,24,1,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,964,100,-260,0,0,4,1,12,5,0,4,32669,24,1,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,965,100,-250,0,0,5,1,12,6,0,4,32669,24,1,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,966,100,-240,0,0,6,1,12,7,0,4,32669,24,1,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,967,100,-230,0,0,7,1,12,8,0,4,32669,24,2,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,968,100,-220,0,0,8,1,12,9,0,4,32669,24,2,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,969,100,-210,0,0,9,1,12,10,0,4,32669,24,2,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,970,100,-200,0,0,10,1,12,11,0,4,32669,24,2,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,971,100,-190,0,0,11,1,12,12,0,4,32669,24,3,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,972,100,-180,0,0,12,1,12,13,0,4,32669,24,3,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,973,100,-170,0,0,13,1,12,14,0,4,32669,24,3,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,974,100,-160,0,0,14,1,12,15,0,4,32669,24,3,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,975,100,-150,0,0,15,1,12,16,0,4,32669,24,4,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,976,100,-140,0,0,16,1,12,17,0,4,32669,24,4,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,977,100,-130,0,0,17,1,12,18,0,4,32669,24,4,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,978,100,-120,0,0,18,1,12,19,0,4,32669,24,4,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,979,100,-110,0,0,19,1,12,20,0,4,32669,24,5,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,980,100,-100,0,0,20,1,12,21,0,4,32669,24,5,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,981,100,-90,0,0,21,1,12,22,0,4,32669,24,5,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,982,100,-80,0,0,22,1,12,23,0,4,32669,24,5,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,983,100,-70,0,0,23,1,12,24,0,4,32669,24,6,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,984,100,-60,0,0,24,1,12,25,0,4,32669,24,6,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,985,100,-50,0,0,25,1,12,26,0,4,32669,24,6,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,986,100,-40,0,0,26,1,12,27,0,4,32669,24,6,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,987,100,-30,0,0,27,1,12,28,0,4,32669,24,7,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,988,100,-20,0,0,28,1,12,29,0,4,32669,24,7,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,989,100,-10,0,0,29,1,13,0,0,4,32669,24,7,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,990,-100,-300,0,1,0,1,13,1,0,4,32669,24,7,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,991,-100,-290,0,1,1,1,13,2,0,4,32669,24,8,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,992,-100,-280,0,1,2,1,13,3,0,4,32669,24,8,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,993,-100,-270,0,1,3,1,13,4,0,4,32669,24,8,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,994,-100,-260,0,1,4,1,13,5,0,4,32669,24,8,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,995,-100,-250,0,1,5,1,13,6,0,4,32669,24,9,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,996,-100,-240,0,1,6,1,13,7,0,4,32669,24,9,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,997,-100,-230,0,1,7,1,13,8,0,4,32669,24,9,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,998,-100,-220,0,1,8,1,13,9,0,4,32669,24,9,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,999,-100,-210,0,1,9,1,13,10,0,4,32669,25,0,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1000,-100,-200,0,1,10,1,13,11,0,4,32669,25,0,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1001,-100,-190,0,1,11,1,13,12,0,4,32669,25,0,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1002,-100,-180,0,1,12,1,13,13,0,4,32669,25,0,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1003,-100,-170,0,1,13,1,13,14,0,4,32669,25,1,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1004,-100,-160,0,1,14,1,13,15,0,4,32669,25,1,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1005,-100,-150,0,1,15,1,13,16,0,4,32669,25,1,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1006,-100,-140,0,1,16,1,13,17,0,4,32669,25,1,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1007,-100,-130,0,1,17,1,13,18,0,4,32669,25,2,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1008,-100,-120,0,1,18,1,13,19,0,4,32669,25,2,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1009,-100,-110,0,1,19,1,13,20,0,4,32669,25,2,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1010,-100,-100,0,1,20,1,13,21,0,4,32669,25,2,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1011,-100,-90,0,1,21,1,13,22,0,4,32669,25,3,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1012,-100,-80,0,1,22,1,13,23,0,4,32669,25,3,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1013,-100,-70,0,1,23,1,13,24,0,4,32669,25,3,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1014,-100,-60,0,1,24,1,13,25,0,4,32669,25,3,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1015,-100,-50,0,1,25,1,13,26,0,4,32669,25,4,0,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1016,-100,-40,0,1,26,1,13,27,0,4,32669,25,4,1,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1017,-100,-30,0,1,27,1,13,28,0,4,32669,25,4,2,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1018,-100,-20,0,1,28,1,13,29,0,4,32669,25,4,3,ON -16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1019,-100,-10,0,1,29,1,14,0,0,4,32669,25,5,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1020,100,-300,0,0,0,1,14,1,0,4,32669,25,5,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1021,100,-290,0,0,1,1,14,2,0,4,32669,25,5,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1022,100,-280,0,0,2,1,14,3,0,4,32669,25,5,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1023,100,-270,0,0,3,1,14,4,0,4,32669,25,6,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1024,100,-260,0,0,4,1,14,5,0,4,32669,25,6,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1025,100,-250,0,0,5,1,14,6,0,4,32669,25,6,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1026,100,-240,0,0,6,1,14,7,0,4,32669,25,6,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1027,100,-230,0,0,7,1,14,8,0,4,32669,25,7,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1028,100,-220,0,0,8,1,14,9,0,4,32669,25,7,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1029,100,-210,0,0,9,1,14,10,0,4,32669,25,7,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1030,100,-200,0,0,10,1,14,11,0,4,32669,25,7,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1031,100,-190,0,0,11,1,14,12,0,4,32669,25,8,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1032,100,-180,0,0,12,1,14,13,0,4,32669,25,8,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1033,100,-170,0,0,13,1,14,14,0,4,32669,25,8,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1034,100,-160,0,0,14,1,14,15,0,4,32669,25,8,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1035,100,-150,0,0,15,1,14,16,0,4,32669,25,9,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1036,100,-140,0,0,16,1,14,17,0,4,32669,25,9,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1037,100,-130,0,0,17,1,14,18,0,4,32669,25,9,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1038,100,-120,0,0,18,1,14,19,0,4,32669,25,9,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1039,100,-110,0,0,19,1,14,20,0,4,32669,26,0,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1040,100,-100,0,0,20,1,14,21,0,4,32669,26,0,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1041,100,-90,0,0,21,1,14,22,0,4,32669,26,0,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1042,100,-80,0,0,22,1,14,23,0,4,32669,26,0,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1043,100,-70,0,0,23,1,14,24,0,4,32669,26,1,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1044,100,-60,0,0,24,1,14,25,0,4,32669,26,1,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1045,100,-50,0,0,25,1,14,26,0,4,32669,26,1,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1046,100,-40,0,0,26,1,14,27,0,4,32669,26,1,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1047,100,-30,0,0,27,1,14,28,0,4,32669,26,2,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1048,100,-20,0,0,28,1,14,29,0,4,32669,26,2,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1049,100,-10,0,0,29,1,15,0,0,4,32669,26,2,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1050,-100,-300,0,1,0,1,15,1,0,4,32669,26,2,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1051,-100,-290,0,1,1,1,15,2,0,4,32669,26,3,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1052,-100,-280,0,1,2,1,15,3,0,4,32669,26,3,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1053,-100,-270,0,1,3,1,15,4,0,4,32669,26,3,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1054,-100,-260,0,1,4,1,15,5,0,4,32669,26,3,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1055,-100,-250,0,1,5,1,15,6,0,4,32669,26,4,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1056,-100,-240,0,1,6,1,15,7,0,4,32669,26,4,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1057,-100,-230,0,1,7,1,15,8,0,4,32669,26,4,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1058,-100,-220,0,1,8,1,15,9,0,4,32669,26,4,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1059,-100,-210,0,1,9,1,15,10,0,4,32669,26,5,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1060,-100,-200,0,1,10,1,15,11,0,4,32669,26,5,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1061,-100,-190,0,1,11,1,15,12,0,4,32669,26,5,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1062,-100,-180,0,1,12,1,15,13,0,4,32669,26,5,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1063,-100,-170,0,1,13,1,15,14,0,4,32669,26,6,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1064,-100,-160,0,1,14,1,15,15,0,4,32669,26,6,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1065,-100,-150,0,1,15,1,15,16,0,4,32669,26,6,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1066,-100,-140,0,1,16,1,15,17,0,4,32669,26,6,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1067,-100,-130,0,1,17,1,15,18,0,4,32669,26,7,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1068,-100,-120,0,1,18,1,15,19,0,4,32669,26,7,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1069,-100,-110,0,1,19,1,15,20,0,4,32669,26,7,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1070,-100,-100,0,1,20,1,15,21,0,4,32669,26,7,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1071,-100,-90,0,1,21,1,15,22,0,4,32669,26,8,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1072,-100,-80,0,1,22,1,15,23,0,4,32669,26,8,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1073,-100,-70,0,1,23,1,15,24,0,4,32669,26,8,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1074,-100,-60,0,1,24,1,15,25,0,4,32669,26,8,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1075,-100,-50,0,1,25,1,15,26,0,4,32669,26,9,0,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1076,-100,-40,0,1,26,1,15,27,0,4,32669,26,9,1,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1077,-100,-30,0,1,27,1,15,28,0,4,32669,26,9,2,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1078,-100,-20,0,1,28,1,15,29,0,4,32669,26,9,3,ON -17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1079,-100,-10,0,1,29,1,16,0,0,4,32669,27,0,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1080,100,-300,0,0,0,1,16,1,0,4,32669,27,0,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1081,100,-290,0,0,1,1,16,2,0,4,32669,27,0,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1082,100,-280,0,0,2,1,16,3,0,4,32669,27,0,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1083,100,-270,0,0,3,1,16,4,0,4,32669,27,1,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1084,100,-260,0,0,4,1,16,5,0,4,32669,27,1,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1085,100,-250,0,0,5,1,16,6,0,4,32669,27,1,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1086,100,-240,0,0,6,1,16,7,0,4,32669,27,1,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1087,100,-230,0,0,7,1,16,8,0,4,32669,27,2,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1088,100,-220,0,0,8,1,16,9,0,4,32669,27,2,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1089,100,-210,0,0,9,1,16,10,0,4,32669,27,2,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1090,100,-200,0,0,10,1,16,11,0,4,32669,27,2,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1091,100,-190,0,0,11,1,16,12,0,4,32669,27,3,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1092,100,-180,0,0,12,1,16,13,0,4,32669,27,3,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1093,100,-170,0,0,13,1,16,14,0,4,32669,27,3,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1094,100,-160,0,0,14,1,16,15,0,4,32669,27,3,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1095,100,-150,0,0,15,1,16,16,0,4,32669,27,4,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1096,100,-140,0,0,16,1,16,17,0,4,32669,27,4,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1097,100,-130,0,0,17,1,16,18,0,4,32669,27,4,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1098,100,-120,0,0,18,1,16,19,0,4,32669,27,4,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1099,100,-110,0,0,19,1,16,20,0,4,32669,27,5,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1100,100,-100,0,0,20,1,16,21,0,4,32669,27,5,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1101,100,-90,0,0,21,1,16,22,0,4,32669,27,5,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1102,100,-80,0,0,22,1,16,23,0,4,32669,27,5,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1103,100,-70,0,0,23,1,16,24,0,4,32669,27,6,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1104,100,-60,0,0,24,1,16,25,0,4,32669,27,6,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1105,100,-50,0,0,25,1,16,26,0,4,32669,27,6,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1106,100,-40,0,0,26,1,16,27,0,4,32669,27,6,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1107,100,-30,0,0,27,1,16,28,0,4,32669,27,7,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1108,100,-20,0,0,28,1,16,29,0,4,32669,27,7,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1109,100,-10,0,0,29,1,17,0,0,4,32669,27,7,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1110,-100,-300,0,1,0,1,17,1,0,4,32669,27,7,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1111,-100,-290,0,1,1,1,17,2,0,4,32669,27,8,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1112,-100,-280,0,1,2,1,17,3,0,4,32669,27,8,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1113,-100,-270,0,1,3,1,17,4,0,4,32669,27,8,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1114,-100,-260,0,1,4,1,17,5,0,4,32669,27,8,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1115,-100,-250,0,1,5,1,17,6,0,4,32669,27,9,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1116,-100,-240,0,1,6,1,17,7,0,4,32669,27,9,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1117,-100,-230,0,1,7,1,17,8,0,4,32669,27,9,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1118,-100,-220,0,1,8,1,17,9,0,4,32669,27,9,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1119,-100,-210,0,1,9,1,17,10,0,4,32669,28,0,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1120,-100,-200,0,1,10,1,17,11,0,4,32669,28,0,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1121,-100,-190,0,1,11,1,17,12,0,4,32669,28,0,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1122,-100,-180,0,1,12,1,17,13,0,4,32669,28,0,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1123,-100,-170,0,1,13,1,17,14,0,4,32669,28,1,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1124,-100,-160,0,1,14,1,17,15,0,4,32669,28,1,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1125,-100,-150,0,1,15,1,17,16,0,4,32669,28,1,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1126,-100,-140,0,1,16,1,17,17,0,4,32669,28,1,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1127,-100,-130,0,1,17,1,17,18,0,4,32669,28,2,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1128,-100,-120,0,1,18,1,17,19,0,4,32669,28,2,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1129,-100,-110,0,1,19,1,17,20,0,4,32669,28,2,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1130,-100,-100,0,1,20,1,17,21,0,4,32669,28,2,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1131,-100,-90,0,1,21,1,17,22,0,4,32669,28,3,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1132,-100,-80,0,1,22,1,17,23,0,4,32669,28,3,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1133,-100,-70,0,1,23,1,17,24,0,4,32669,28,3,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1134,-100,-60,0,1,24,1,17,25,0,4,32669,28,3,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1135,-100,-50,0,1,25,1,17,26,0,4,32669,28,4,0,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1136,-100,-40,0,1,26,1,17,27,0,4,32669,28,4,1,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1137,-100,-30,0,1,27,1,17,28,0,4,32669,28,4,2,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1138,-100,-20,0,1,28,1,17,29,0,4,32669,28,4,3,ON -18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1139,-100,-10,0,1,29,1,18,0,0,4,32669,28,5,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1140,100,-300,0,0,0,1,18,1,0,4,32669,28,5,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1141,100,-290,0,0,1,1,18,2,0,4,32669,28,5,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1142,100,-280,0,0,2,1,18,3,0,4,32669,28,5,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1143,100,-270,0,0,3,1,18,4,0,4,32669,28,6,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1144,100,-260,0,0,4,1,18,5,0,4,32669,28,6,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1145,100,-250,0,0,5,1,18,6,0,4,32669,28,6,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1146,100,-240,0,0,6,1,18,7,0,4,32669,28,6,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1147,100,-230,0,0,7,1,18,8,0,4,32669,28,7,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1148,100,-220,0,0,8,1,18,9,0,4,32669,28,7,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1149,100,-210,0,0,9,1,18,10,0,4,32669,28,7,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1150,100,-200,0,0,10,1,18,11,0,4,32669,28,7,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1151,100,-190,0,0,11,1,18,12,0,4,32669,28,8,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1152,100,-180,0,0,12,1,18,13,0,4,32669,28,8,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1153,100,-170,0,0,13,1,18,14,0,4,32669,28,8,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1154,100,-160,0,0,14,1,18,15,0,4,32669,28,8,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1155,100,-150,0,0,15,1,18,16,0,4,32669,28,9,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1156,100,-140,0,0,16,1,18,17,0,4,32669,28,9,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1157,100,-130,0,0,17,1,18,18,0,4,32669,28,9,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1158,100,-120,0,0,18,1,18,19,0,4,32669,28,9,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1159,100,-110,0,0,19,1,18,20,0,4,32669,29,0,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1160,100,-100,0,0,20,1,18,21,0,4,32669,29,0,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1161,100,-90,0,0,21,1,18,22,0,4,32669,29,0,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1162,100,-80,0,0,22,1,18,23,0,4,32669,29,0,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1163,100,-70,0,0,23,1,18,24,0,4,32669,29,1,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1164,100,-60,0,0,24,1,18,25,0,4,32669,29,1,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1165,100,-50,0,0,25,1,18,26,0,4,32669,29,1,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1166,100,-40,0,0,26,1,18,27,0,4,32669,29,1,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1167,100,-30,0,0,27,1,18,28,0,4,32669,29,2,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1168,100,-20,0,0,28,1,18,29,0,4,32669,29,2,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1169,100,-10,0,0,29,1,19,0,0,4,32669,29,2,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1170,-100,-300,0,1,0,1,19,1,0,4,32669,29,2,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1171,-100,-290,0,1,1,1,19,2,0,4,32669,29,3,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1172,-100,-280,0,1,2,1,19,3,0,4,32669,29,3,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1173,-100,-270,0,1,3,1,19,4,0,4,32669,29,3,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1174,-100,-260,0,1,4,1,19,5,0,4,32669,29,3,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1175,-100,-250,0,1,5,1,19,6,0,4,32669,29,4,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1176,-100,-240,0,1,6,1,19,7,0,4,32669,29,4,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1177,-100,-230,0,1,7,1,19,8,0,4,32669,29,4,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1178,-100,-220,0,1,8,1,19,9,0,4,32669,29,4,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1179,-100,-210,0,1,9,1,19,10,0,4,32669,29,5,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1180,-100,-200,0,1,10,1,19,11,0,4,32669,29,5,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1181,-100,-190,0,1,11,1,19,12,0,4,32669,29,5,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1182,-100,-180,0,1,12,1,19,13,0,4,32669,29,5,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1183,-100,-170,0,1,13,1,19,14,0,4,32669,29,6,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1184,-100,-160,0,1,14,1,19,15,0,4,32669,29,6,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1185,-100,-150,0,1,15,1,19,16,0,4,32669,29,6,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1186,-100,-140,0,1,16,1,19,17,0,4,32669,29,6,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1187,-100,-130,0,1,17,1,19,18,0,4,32669,29,7,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1188,-100,-120,0,1,18,1,19,19,0,4,32669,29,7,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1189,-100,-110,0,1,19,1,19,20,0,4,32669,29,7,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1190,-100,-100,0,1,20,1,19,21,0,4,32669,29,7,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1191,-100,-90,0,1,21,1,19,22,0,4,32669,29,8,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1192,-100,-80,0,1,22,1,19,23,0,4,32669,29,8,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1193,-100,-70,0,1,23,1,19,24,0,4,32669,29,8,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1194,-100,-60,0,1,24,1,19,25,0,4,32669,29,8,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1195,-100,-50,0,1,25,1,19,26,0,4,32669,29,9,0,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1196,-100,-40,0,1,26,1,19,27,0,4,32669,29,9,1,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1197,-100,-30,0,1,27,1,19,28,0,4,32669,29,9,2,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1198,-100,-20,0,1,28,1,19,29,0,4,32669,29,9,3,ON -19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1199,-100,-10,0,1,29,2,0,0,0,5,32669,30,0,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1200,100,-300,0,0,0,2,0,1,0,5,32669,30,0,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1201,100,-290,0,0,1,2,0,2,0,5,32669,30,0,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1202,100,-280,0,0,2,2,0,3,0,5,32669,30,0,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1203,100,-270,0,0,3,2,0,4,0,5,32669,30,1,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1204,100,-260,0,0,4,2,0,5,0,5,32669,30,1,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1205,100,-250,0,0,5,2,0,6,0,5,32669,30,1,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1206,100,-240,0,0,6,2,0,7,0,5,32669,30,1,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1207,100,-230,0,0,7,2,0,8,0,5,32669,30,2,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1208,100,-220,0,0,8,2,0,9,0,5,32669,30,2,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1209,100,-210,0,0,9,2,0,10,0,5,32669,30,2,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1210,100,-200,0,0,10,2,0,11,0,5,32669,30,2,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1211,100,-190,0,0,11,2,0,12,0,5,32669,30,3,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1212,100,-180,0,0,12,2,0,13,0,5,32669,30,3,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1213,100,-170,0,0,13,2,0,14,0,5,32669,30,3,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1214,100,-160,0,0,14,2,0,15,0,5,32669,30,3,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1215,100,-150,0,0,15,2,0,16,0,5,32669,30,4,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1216,100,-140,0,0,16,2,0,17,0,5,32669,30,4,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1217,100,-130,0,0,17,2,0,18,0,5,32669,30,4,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1218,100,-120,0,0,18,2,0,19,0,5,32669,30,4,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1219,100,-110,0,0,19,2,0,20,0,5,32669,30,5,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1220,100,-100,0,0,20,2,0,21,0,5,32669,30,5,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1221,100,-90,0,0,21,2,0,22,0,5,32669,30,5,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1222,100,-80,0,0,22,2,0,23,0,5,32669,30,5,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1223,100,-70,0,0,23,2,0,24,0,5,32669,30,6,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1224,100,-60,0,0,24,2,0,25,0,5,32669,30,6,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1225,100,-50,0,0,25,2,0,26,0,5,32669,30,6,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1226,100,-40,0,0,26,2,0,27,0,5,32669,30,6,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1227,100,-30,0,0,27,2,0,28,0,5,32669,30,7,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1228,100,-20,0,0,28,2,0,29,0,5,32669,30,7,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1229,100,-10,0,0,29,2,1,0,0,5,32669,30,7,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1230,-100,-300,0,1,0,2,1,1,0,5,32669,30,7,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1231,-100,-290,0,1,1,2,1,2,0,5,32669,30,8,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1232,-100,-280,0,1,2,2,1,3,0,5,32669,30,8,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1233,-100,-270,0,1,3,2,1,4,0,5,32669,30,8,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1234,-100,-260,0,1,4,2,1,5,0,5,32669,30,8,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1235,-100,-250,0,1,5,2,1,6,0,5,32669,30,9,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1236,-100,-240,0,1,6,2,1,7,0,5,32669,30,9,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1237,-100,-230,0,1,7,2,1,8,0,5,32669,30,9,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1238,-100,-220,0,1,8,2,1,9,0,5,32669,30,9,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1239,-100,-210,0,1,9,2,1,10,0,5,32669,31,0,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1240,-100,-200,0,1,10,2,1,11,0,5,32669,31,0,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1241,-100,-190,0,1,11,2,1,12,0,5,32669,31,0,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1242,-100,-180,0,1,12,2,1,13,0,5,32669,31,0,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1243,-100,-170,0,1,13,2,1,14,0,5,32669,31,1,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1244,-100,-160,0,1,14,2,1,15,0,5,32669,31,1,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1245,-100,-150,0,1,15,2,1,16,0,5,32669,31,1,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1246,-100,-140,0,1,16,2,1,17,0,5,32669,31,1,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1247,-100,-130,0,1,17,2,1,18,0,5,32669,31,2,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1248,-100,-120,0,1,18,2,1,19,0,5,32669,31,2,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1249,-100,-110,0,1,19,2,1,20,0,5,32669,31,2,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1250,-100,-100,0,1,20,2,1,21,0,5,32669,31,2,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1251,-100,-90,0,1,21,2,1,22,0,5,32669,31,3,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1252,-100,-80,0,1,22,2,1,23,0,5,32669,31,3,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1253,-100,-70,0,1,23,2,1,24,0,5,32669,31,3,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1254,-100,-60,0,1,24,2,1,25,0,5,32669,31,3,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1255,-100,-50,0,1,25,2,1,26,0,5,32669,31,4,0,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1256,-100,-40,0,1,26,2,1,27,0,5,32669,31,4,1,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1257,-100,-30,0,1,27,2,1,28,0,5,32669,31,4,2,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1258,-100,-20,0,1,28,2,1,29,0,5,32669,31,4,3,ON -20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1259,-100,-10,0,1,29,2,2,0,0,5,32669,31,5,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1260,100,-300,0,0,0,2,2,1,0,5,32669,31,5,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1261,100,-290,0,0,1,2,2,2,0,5,32669,31,5,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1262,100,-280,0,0,2,2,2,3,0,5,32669,31,5,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1263,100,-270,0,0,3,2,2,4,0,5,32669,31,6,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1264,100,-260,0,0,4,2,2,5,0,5,32669,31,6,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1265,100,-250,0,0,5,2,2,6,0,5,32669,31,6,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1266,100,-240,0,0,6,2,2,7,0,5,32669,31,6,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1267,100,-230,0,0,7,2,2,8,0,5,32669,31,7,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1268,100,-220,0,0,8,2,2,9,0,5,32669,31,7,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1269,100,-210,0,0,9,2,2,10,0,5,32669,31,7,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1270,100,-200,0,0,10,2,2,11,0,5,32669,31,7,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1271,100,-190,0,0,11,2,2,12,0,5,32669,31,8,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1272,100,-180,0,0,12,2,2,13,0,5,32669,31,8,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1273,100,-170,0,0,13,2,2,14,0,5,32669,31,8,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1274,100,-160,0,0,14,2,2,15,0,5,32669,31,8,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1275,100,-150,0,0,15,2,2,16,0,5,32669,31,9,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1276,100,-140,0,0,16,2,2,17,0,5,32669,31,9,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1277,100,-130,0,0,17,2,2,18,0,5,32669,31,9,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1278,100,-120,0,0,18,2,2,19,0,5,32669,31,9,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1279,100,-110,0,0,19,2,2,20,0,5,32669,32,0,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1280,100,-100,0,0,20,2,2,21,0,5,32669,32,0,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1281,100,-90,0,0,21,2,2,22,0,5,32669,32,0,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1282,100,-80,0,0,22,2,2,23,0,5,32669,32,0,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1283,100,-70,0,0,23,2,2,24,0,5,32669,32,1,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1284,100,-60,0,0,24,2,2,25,0,5,32669,32,1,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1285,100,-50,0,0,25,2,2,26,0,5,32669,32,1,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1286,100,-40,0,0,26,2,2,27,0,5,32669,32,1,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1287,100,-30,0,0,27,2,2,28,0,5,32669,32,2,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1288,100,-20,0,0,28,2,2,29,0,5,32669,32,2,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1289,100,-10,0,0,29,2,3,0,0,5,32669,32,2,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1290,-100,-300,0,1,0,2,3,1,0,5,32669,32,2,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1291,-100,-290,0,1,1,2,3,2,0,5,32669,32,3,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1292,-100,-280,0,1,2,2,3,3,0,5,32669,32,3,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1293,-100,-270,0,1,3,2,3,4,0,5,32669,32,3,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1294,-100,-260,0,1,4,2,3,5,0,5,32669,32,3,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1295,-100,-250,0,1,5,2,3,6,0,5,32669,32,4,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1296,-100,-240,0,1,6,2,3,7,0,5,32669,32,4,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1297,-100,-230,0,1,7,2,3,8,0,5,32669,32,4,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1298,-100,-220,0,1,8,2,3,9,0,5,32669,32,4,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1299,-100,-210,0,1,9,2,3,10,0,5,32669,32,5,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1300,-100,-200,0,1,10,2,3,11,0,5,32669,32,5,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1301,-100,-190,0,1,11,2,3,12,0,5,32669,32,5,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1302,-100,-180,0,1,12,2,3,13,0,5,32669,32,5,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1303,-100,-170,0,1,13,2,3,14,0,5,32669,32,6,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1304,-100,-160,0,1,14,2,3,15,0,5,32669,32,6,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1305,-100,-150,0,1,15,2,3,16,0,5,32669,32,6,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1306,-100,-140,0,1,16,2,3,17,0,5,32669,32,6,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1307,-100,-130,0,1,17,2,3,18,0,5,32669,32,7,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1308,-100,-120,0,1,18,2,3,19,0,5,32669,32,7,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1309,-100,-110,0,1,19,2,3,20,0,5,32669,32,7,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1310,-100,-100,0,1,20,2,3,21,0,5,32669,32,7,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1311,-100,-90,0,1,21,2,3,22,0,5,32669,32,8,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1312,-100,-80,0,1,22,2,3,23,0,5,32669,32,8,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1313,-100,-70,0,1,23,2,3,24,0,5,32669,32,8,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1314,-100,-60,0,1,24,2,3,25,0,5,32669,32,8,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1315,-100,-50,0,1,25,2,3,26,0,5,32669,32,9,0,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1316,-100,-40,0,1,26,2,3,27,0,5,32669,32,9,1,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1317,-100,-30,0,1,27,2,3,28,0,5,32669,32,9,2,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1318,-100,-20,0,1,28,2,3,29,0,5,32669,32,9,3,ON -21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1319,-100,-10,0,1,29,2,4,0,0,5,32669,33,0,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1320,100,-300,0,0,0,2,4,1,0,5,32669,33,0,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1321,100,-290,0,0,1,2,4,2,0,5,32669,33,0,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1322,100,-280,0,0,2,2,4,3,0,5,32669,33,0,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1323,100,-270,0,0,3,2,4,4,0,5,32669,33,1,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1324,100,-260,0,0,4,2,4,5,0,5,32669,33,1,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1325,100,-250,0,0,5,2,4,6,0,5,32669,33,1,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1326,100,-240,0,0,6,2,4,7,0,5,32669,33,1,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1327,100,-230,0,0,7,2,4,8,0,5,32669,33,2,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1328,100,-220,0,0,8,2,4,9,0,5,32669,33,2,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1329,100,-210,0,0,9,2,4,10,0,5,32669,33,2,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1330,100,-200,0,0,10,2,4,11,0,5,32669,33,2,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1331,100,-190,0,0,11,2,4,12,0,5,32669,33,3,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1332,100,-180,0,0,12,2,4,13,0,5,32669,33,3,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1333,100,-170,0,0,13,2,4,14,0,5,32669,33,3,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1334,100,-160,0,0,14,2,4,15,0,5,32669,33,3,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1335,100,-150,0,0,15,2,4,16,0,5,32669,33,4,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1336,100,-140,0,0,16,2,4,17,0,5,32669,33,4,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1337,100,-130,0,0,17,2,4,18,0,5,32669,33,4,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1338,100,-120,0,0,18,2,4,19,0,5,32669,33,4,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1339,100,-110,0,0,19,2,4,20,0,5,32669,33,5,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1340,100,-100,0,0,20,2,4,21,0,5,32669,33,5,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1341,100,-90,0,0,21,2,4,22,0,5,32669,33,5,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1342,100,-80,0,0,22,2,4,23,0,5,32669,33,5,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1343,100,-70,0,0,23,2,4,24,0,5,32669,33,6,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1344,100,-60,0,0,24,2,4,25,0,5,32669,33,6,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1345,100,-50,0,0,25,2,4,26,0,5,32669,33,6,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1346,100,-40,0,0,26,2,4,27,0,5,32669,33,6,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1347,100,-30,0,0,27,2,4,28,0,5,32669,33,7,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1348,100,-20,0,0,28,2,4,29,0,5,32669,33,7,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1349,100,-10,0,0,29,2,5,0,0,5,32669,33,7,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1350,-100,-300,0,1,0,2,5,1,0,5,32669,33,7,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1351,-100,-290,0,1,1,2,5,2,0,5,32669,33,8,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1352,-100,-280,0,1,2,2,5,3,0,5,32669,33,8,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1353,-100,-270,0,1,3,2,5,4,0,5,32669,33,8,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1354,-100,-260,0,1,4,2,5,5,0,5,32669,33,8,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1355,-100,-250,0,1,5,2,5,6,0,5,32669,33,9,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1356,-100,-240,0,1,6,2,5,7,0,5,32669,33,9,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1357,-100,-230,0,1,7,2,5,8,0,5,32669,33,9,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1358,-100,-220,0,1,8,2,5,9,0,5,32669,33,9,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1359,-100,-210,0,1,9,2,5,10,0,5,32669,34,0,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1360,-100,-200,0,1,10,2,5,11,0,5,32669,34,0,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1361,-100,-190,0,1,11,2,5,12,0,5,32669,34,0,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1362,-100,-180,0,1,12,2,5,13,0,5,32669,34,0,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1363,-100,-170,0,1,13,2,5,14,0,5,32669,34,1,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1364,-100,-160,0,1,14,2,5,15,0,5,32669,34,1,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1365,-100,-150,0,1,15,2,5,16,0,5,32669,34,1,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1366,-100,-140,0,1,16,2,5,17,0,5,32669,34,1,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1367,-100,-130,0,1,17,2,5,18,0,5,32669,34,2,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1368,-100,-120,0,1,18,2,5,19,0,5,32669,34,2,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1369,-100,-110,0,1,19,2,5,20,0,5,32669,34,2,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1370,-100,-100,0,1,20,2,5,21,0,5,32669,34,2,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1371,-100,-90,0,1,21,2,5,22,0,5,32669,34,3,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1372,-100,-80,0,1,22,2,5,23,0,5,32669,34,3,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1373,-100,-70,0,1,23,2,5,24,0,5,32669,34,3,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1374,-100,-60,0,1,24,2,5,25,0,5,32669,34,3,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1375,-100,-50,0,1,25,2,5,26,0,5,32669,34,4,0,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1376,-100,-40,0,1,26,2,5,27,0,5,32669,34,4,1,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1377,-100,-30,0,1,27,2,5,28,0,5,32669,34,4,2,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1378,-100,-20,0,1,28,2,5,29,0,5,32669,34,4,3,ON -22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1379,-100,-10,0,1,29,2,6,0,0,5,32669,34,5,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1380,100,-300,0,0,0,2,6,1,0,5,32669,34,5,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1381,100,-290,0,0,1,2,6,2,0,5,32669,34,5,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1382,100,-280,0,0,2,2,6,3,0,5,32669,34,5,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1383,100,-270,0,0,3,2,6,4,0,5,32669,34,6,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1384,100,-260,0,0,4,2,6,5,0,5,32669,34,6,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1385,100,-250,0,0,5,2,6,6,0,5,32669,34,6,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1386,100,-240,0,0,6,2,6,7,0,5,32669,34,6,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1387,100,-230,0,0,7,2,6,8,0,5,32669,34,7,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1388,100,-220,0,0,8,2,6,9,0,5,32669,34,7,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1389,100,-210,0,0,9,2,6,10,0,5,32669,34,7,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1390,100,-200,0,0,10,2,6,11,0,5,32669,34,7,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1391,100,-190,0,0,11,2,6,12,0,5,32669,34,8,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1392,100,-180,0,0,12,2,6,13,0,5,32669,34,8,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1393,100,-170,0,0,13,2,6,14,0,5,32669,34,8,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1394,100,-160,0,0,14,2,6,15,0,5,32669,34,8,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1395,100,-150,0,0,15,2,6,16,0,5,32669,34,9,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1396,100,-140,0,0,16,2,6,17,0,5,32669,34,9,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1397,100,-130,0,0,17,2,6,18,0,5,32669,34,9,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1398,100,-120,0,0,18,2,6,19,0,5,32669,34,9,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1399,100,-110,0,0,19,2,6,20,0,5,32669,35,0,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1400,100,-100,0,0,20,2,6,21,0,5,32669,35,0,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1401,100,-90,0,0,21,2,6,22,0,5,32669,35,0,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1402,100,-80,0,0,22,2,6,23,0,5,32669,35,0,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1403,100,-70,0,0,23,2,6,24,0,5,32669,35,1,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1404,100,-60,0,0,24,2,6,25,0,5,32669,35,1,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1405,100,-50,0,0,25,2,6,26,0,5,32669,35,1,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1406,100,-40,0,0,26,2,6,27,0,5,32669,35,1,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1407,100,-30,0,0,27,2,6,28,0,5,32669,35,2,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1408,100,-20,0,0,28,2,6,29,0,5,32669,35,2,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1409,100,-10,0,0,29,2,7,0,0,5,32669,35,2,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1410,-100,-300,0,1,0,2,7,1,0,5,32669,35,2,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1411,-100,-290,0,1,1,2,7,2,0,5,32669,35,3,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1412,-100,-280,0,1,2,2,7,3,0,5,32669,35,3,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1413,-100,-270,0,1,3,2,7,4,0,5,32669,35,3,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1414,-100,-260,0,1,4,2,7,5,0,5,32669,35,3,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1415,-100,-250,0,1,5,2,7,6,0,5,32669,35,4,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1416,-100,-240,0,1,6,2,7,7,0,5,32669,35,4,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1417,-100,-230,0,1,7,2,7,8,0,5,32669,35,4,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1418,-100,-220,0,1,8,2,7,9,0,5,32669,35,4,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1419,-100,-210,0,1,9,2,7,10,0,5,32669,35,5,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1420,-100,-200,0,1,10,2,7,11,0,5,32669,35,5,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1421,-100,-190,0,1,11,2,7,12,0,5,32669,35,5,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1422,-100,-180,0,1,12,2,7,13,0,5,32669,35,5,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1423,-100,-170,0,1,13,2,7,14,0,5,32669,35,6,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1424,-100,-160,0,1,14,2,7,15,0,5,32669,35,6,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1425,-100,-150,0,1,15,2,7,16,0,5,32669,35,6,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1426,-100,-140,0,1,16,2,7,17,0,5,32669,35,6,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1427,-100,-130,0,1,17,2,7,18,0,5,32669,35,7,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1428,-100,-120,0,1,18,2,7,19,0,5,32669,35,7,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1429,-100,-110,0,1,19,2,7,20,0,5,32669,35,7,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1430,-100,-100,0,1,20,2,7,21,0,5,32669,35,7,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1431,-100,-90,0,1,21,2,7,22,0,5,32669,35,8,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1432,-100,-80,0,1,22,2,7,23,0,5,32669,35,8,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1433,-100,-70,0,1,23,2,7,24,0,5,32669,35,8,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1434,-100,-60,0,1,24,2,7,25,0,5,32669,35,8,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1435,-100,-50,0,1,25,2,7,26,0,5,32669,35,9,0,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1436,-100,-40,0,1,26,2,7,27,0,5,32669,35,9,1,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1437,-100,-30,0,1,27,2,7,28,0,5,32669,35,9,2,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1438,-100,-20,0,1,28,2,7,29,0,5,32669,35,9,3,ON -23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1439,-100,-10,0,1,29,2,8,0,0,6,32669,36,0,0,ON -DATA_END +LEGEND_LINE,,,,,,,,,,,,,,,,,,,,,,,, +detector_num,detector_position_x,detector_position_y,detector_position_z,detector_direction_x,detector_direction_y,detector_direction_z,detector_type,detector_status,channel_num,channel_position_x,channel_position_y,channel_position_z,channel_strip_side,channel_strip_num,channel_signal_crate,channel_signal_card,channel_signal_channel,channel_level2_crate,channel_level2_card,channel_level2_channel,channel_hv_crate,channel_hv_card,channel_hv_channel,channel_status +,,,,,,,,,,,,,,,,,,,,,,,, +DATA_START,,,,,,,,,,,,,,,,,,,,,,,, +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,4,100,-300,0,0,0,0,0,1,0,0,32669,0,0,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,3,100,-290,0,0,1,0,0,2,0,0,32669,0,0,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,2,100,-280,0,0,2,0,0,3,0,0,32669,0,0,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,1,100,-270,0,0,3,0,0,4,0,0,32669,0,1,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,0,100,-260,0,0,4,0,0,5,0,0,32669,0,1,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,11,100,-250,0,0,5,0,0,6,0,0,32669,0,1,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,10,100,-240,0,0,6,0,0,7,0,0,32669,0,1,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,9,100,-230,0,0,7,0,0,8,0,0,32669,0,2,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,8,100,-220,0,0,8,0,0,9,0,0,32669,0,2,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,7,100,-210,0,0,9,0,0,10,0,0,32669,0,2,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,6,100,-200,0,0,10,0,0,11,0,0,32669,0,2,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,17,100,-190,0,0,11,0,0,12,0,0,32669,0,3,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,16,100,-180,0,0,12,0,0,13,0,0,32669,0,3,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,15,100,-170,0,0,13,0,0,14,0,0,32669,0,3,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,14,100,-160,0,0,14,0,0,15,0,0,32669,0,3,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,43,100,-150,0,0,15,0,0,16,0,0,32669,0,4,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,42,100,-140,0,0,16,0,0,17,0,0,32669,0,4,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,53,100,-130,0,0,17,0,0,18,0,0,32669,0,4,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,52,100,-120,0,0,18,0,0,19,0,0,32669,0,4,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,51,100,-110,0,0,19,0,0,20,0,0,32669,0,5,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,50,100,-100,0,0,20,0,0,21,0,0,32669,0,5,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,49,100,-90,0,0,21,0,0,22,0,0,32669,0,5,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,48,100,-80,0,0,22,0,0,23,0,0,32669,0,5,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,59,100,-70,0,0,23,0,0,24,0,0,32669,0,6,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,58,100,-60,0,0,24,0,0,25,0,0,32669,0,6,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,57,100,-50,0,0,25,0,0,26,0,0,32669,0,6,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,56,100,-40,0,0,26,0,0,27,0,0,32669,0,6,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,55,100,-30,0,0,27,0,0,28,0,0,32669,0,7,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,54,100,-20,0,0,28,0,0,29,0,0,32669,0,7,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,34,100,-10,0,0,29,0,1,0,0,0,32669,0,7,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,5,-100,-300,0,1,0,0,1,1,0,0,32669,0,7,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,24,-100,-290,0,1,1,0,1,2,0,0,32669,0,8,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,25,-100,-280,0,1,2,0,1,3,0,0,32669,0,8,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,26,-100,-270,0,1,3,0,1,4,0,0,32669,0,8,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,27,-100,-260,0,1,4,0,1,5,0,0,32669,0,8,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,28,-100,-250,0,1,5,0,1,6,0,0,32669,0,9,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,29,-100,-240,0,1,6,0,1,7,0,0,32669,0,9,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,18,-100,-230,0,1,7,0,1,8,0,0,32669,0,9,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,19,-100,-220,0,1,8,0,1,9,0,0,32669,0,9,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,20,-100,-210,0,1,9,0,1,10,0,0,32669,1,0,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,21,-100,-200,0,1,10,0,1,11,0,0,32669,1,0,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,22,-100,-190,0,1,11,0,1,12,0,0,32669,1,0,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,23,-100,-180,0,1,12,0,1,13,0,0,32669,1,0,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,12,-100,-170,0,1,13,0,1,14,0,0,32669,1,1,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,13,-100,-160,0,1,14,0,1,15,0,0,32669,1,1,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,44,-100,-150,0,1,15,0,1,16,0,0,32669,1,1,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,45,-100,-140,0,1,16,0,1,17,0,0,32669,1,1,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,46,-100,-130,0,1,17,0,1,18,0,0,32669,1,2,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,47,-100,-120,0,1,18,0,1,19,0,0,32669,1,2,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,36,-100,-110,0,1,19,0,1,20,0,0,32669,1,2,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,37,-100,-100,0,1,20,0,1,21,0,0,32669,1,2,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,38,-100,-90,0,1,21,0,1,22,0,0,32669,1,3,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,39,-100,-80,0,1,22,0,1,23,0,0,32669,1,3,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,40,-100,-70,0,1,23,0,1,24,0,0,32669,1,3,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,41,-100,-60,0,1,24,0,1,25,0,0,32669,1,3,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,30,-100,-50,0,1,25,0,1,26,0,0,32669,1,4,0,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,31,-100,-40,0,1,26,0,1,27,0,0,32669,1,4,1,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,32,-100,-30,0,1,27,0,1,28,0,0,32669,1,4,2,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,33,-100,-20,0,1,28,0,1,29,0,0,32669,1,4,3,ON +0,0,-0.927149,0.404,0,0,1,lappd_v1,ON,35,-100,-10,0,1,29,0,2,0,0,0,32669,1,5,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,60,100,-300,0,0,0,0,2,1,0,0,32669,1,5,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,61,100,-290,0,0,1,0,2,2,0,0,32669,1,5,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,62,100,-280,0,0,2,0,2,3,0,0,32669,1,5,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,63,100,-270,0,0,3,0,2,4,0,0,32669,1,6,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,64,100,-260,0,0,4,0,2,5,0,0,32669,1,6,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,65,100,-250,0,0,5,0,2,6,0,0,32669,1,6,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,66,100,-240,0,0,6,0,2,7,0,0,32669,1,6,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,67,100,-230,0,0,7,0,2,8,0,0,32669,1,7,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,68,100,-220,0,0,8,0,2,9,0,0,32669,1,7,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,69,100,-210,0,0,9,0,2,10,0,0,32669,1,7,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,70,100,-200,0,0,10,0,2,11,0,0,32669,1,7,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,71,100,-190,0,0,11,0,2,12,0,0,32669,1,8,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,72,100,-180,0,0,12,0,2,13,0,0,32669,1,8,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,73,100,-170,0,0,13,0,2,14,0,0,32669,1,8,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,74,100,-160,0,0,14,0,2,15,0,0,32669,1,8,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,75,100,-150,0,0,15,0,2,16,0,0,32669,1,9,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,76,100,-140,0,0,16,0,2,17,0,0,32669,1,9,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,77,100,-130,0,0,17,0,2,18,0,0,32669,1,9,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,78,100,-120,0,0,18,0,2,19,0,0,32669,1,9,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,79,100,-110,0,0,19,0,2,20,0,0,32669,2,0,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,80,100,-100,0,0,20,0,2,21,0,0,32669,2,0,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,81,100,-90,0,0,21,0,2,22,0,0,32669,2,0,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,82,100,-80,0,0,22,0,2,23,0,0,32669,2,0,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,83,100,-70,0,0,23,0,2,24,0,0,32669,2,1,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,84,100,-60,0,0,24,0,2,25,0,0,32669,2,1,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,85,100,-50,0,0,25,0,2,26,0,0,32669,2,1,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,86,100,-40,0,0,26,0,2,27,0,0,32669,2,1,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,87,100,-30,0,0,27,0,2,28,0,0,32669,2,2,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,88,100,-20,0,0,28,0,2,29,0,0,32669,2,2,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,89,100,-10,0,0,29,0,3,0,0,0,32669,2,2,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,90,-100,-300,0,1,0,0,3,1,0,0,32669,2,2,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,91,-100,-290,0,1,1,0,3,2,0,0,32669,2,3,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,92,-100,-280,0,1,2,0,3,3,0,0,32669,2,3,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,93,-100,-270,0,1,3,0,3,4,0,0,32669,2,3,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,94,-100,-260,0,1,4,0,3,5,0,0,32669,2,3,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,95,-100,-250,0,1,5,0,3,6,0,0,32669,2,4,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,96,-100,-240,0,1,6,0,3,7,0,0,32669,2,4,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,97,-100,-230,0,1,7,0,3,8,0,0,32669,2,4,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,98,-100,-220,0,1,8,0,3,9,0,0,32669,2,4,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,99,-100,-210,0,1,9,0,3,10,0,0,32669,2,5,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,100,-100,-200,0,1,10,0,3,11,0,0,32669,2,5,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,101,-100,-190,0,1,11,0,3,12,0,0,32669,2,5,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,102,-100,-180,0,1,12,0,3,13,0,0,32669,2,5,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,103,-100,-170,0,1,13,0,3,14,0,0,32669,2,6,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,104,-100,-160,0,1,14,0,3,15,0,0,32669,2,6,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,105,-100,-150,0,1,15,0,3,16,0,0,32669,2,6,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,106,-100,-140,0,1,16,0,3,17,0,0,32669,2,6,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,107,-100,-130,0,1,17,0,3,18,0,0,32669,2,7,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,108,-100,-120,0,1,18,0,3,19,0,0,32669,2,7,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,109,-100,-110,0,1,19,0,3,20,0,0,32669,2,7,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,110,-100,-100,0,1,20,0,3,21,0,0,32669,2,7,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,111,-100,-90,0,1,21,0,3,22,0,0,32669,2,8,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,112,-100,-80,0,1,22,0,3,23,0,0,32669,2,8,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,113,-100,-70,0,1,23,0,3,24,0,0,32669,2,8,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,114,-100,-60,0,1,24,0,3,25,0,0,32669,2,8,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,115,-100,-50,0,1,25,0,3,26,0,0,32669,2,9,0,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,116,-100,-40,0,1,26,0,3,27,0,0,32669,2,9,1,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,117,-100,-30,0,1,27,0,3,28,0,0,32669,2,9,2,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,118,-100,-20,0,1,28,0,3,29,0,0,32669,2,9,3,ON +1,0,-0.144649,0.404,0,0,1,lappd_v1,ON,119,-100,-10,0,1,29,0,4,0,0,0,32669,3,0,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,120,100,-300,0,0,0,0,4,1,0,0,32669,3,0,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,121,100,-290,0,0,1,0,4,2,0,0,32669,3,0,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,122,100,-280,0,0,2,0,4,3,0,0,32669,3,0,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,123,100,-270,0,0,3,0,4,4,0,0,32669,3,1,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,124,100,-260,0,0,4,0,4,5,0,0,32669,3,1,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,125,100,-250,0,0,5,0,4,6,0,0,32669,3,1,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,126,100,-240,0,0,6,0,4,7,0,0,32669,3,1,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,127,100,-230,0,0,7,0,4,8,0,0,32669,3,2,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,128,100,-220,0,0,8,0,4,9,0,0,32669,3,2,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,129,100,-210,0,0,9,0,4,10,0,0,32669,3,2,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,130,100,-200,0,0,10,0,4,11,0,0,32669,3,2,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,131,100,-190,0,0,11,0,4,12,0,0,32669,3,3,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,132,100,-180,0,0,12,0,4,13,0,0,32669,3,3,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,133,100,-170,0,0,13,0,4,14,0,0,32669,3,3,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,134,100,-160,0,0,14,0,4,15,0,0,32669,3,3,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,135,100,-150,0,0,15,0,4,16,0,0,32669,3,4,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,136,100,-140,0,0,16,0,4,17,0,0,32669,3,4,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,137,100,-130,0,0,17,0,4,18,0,0,32669,3,4,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,138,100,-120,0,0,18,0,4,19,0,0,32669,3,4,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,139,100,-110,0,0,19,0,4,20,0,0,32669,3,5,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,140,100,-100,0,0,20,0,4,21,0,0,32669,3,5,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,141,100,-90,0,0,21,0,4,22,0,0,32669,3,5,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,142,100,-80,0,0,22,0,4,23,0,0,32669,3,5,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,143,100,-70,0,0,23,0,4,24,0,0,32669,3,6,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,144,100,-60,0,0,24,0,4,25,0,0,32669,3,6,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,145,100,-50,0,0,25,0,4,26,0,0,32669,3,6,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,146,100,-40,0,0,26,0,4,27,0,0,32669,3,6,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,147,100,-30,0,0,27,0,4,28,0,0,32669,3,7,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,148,100,-20,0,0,28,0,4,29,0,0,32669,3,7,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,149,100,-10,0,0,29,0,5,0,0,0,32669,3,7,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,150,-100,-300,0,1,0,0,5,1,0,0,32669,3,7,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,151,-100,-290,0,1,1,0,5,2,0,0,32669,3,8,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,152,-100,-280,0,1,2,0,5,3,0,0,32669,3,8,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,153,-100,-270,0,1,3,0,5,4,0,0,32669,3,8,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,154,-100,-260,0,1,4,0,5,5,0,0,32669,3,8,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,155,-100,-250,0,1,5,0,5,6,0,0,32669,3,9,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,156,-100,-240,0,1,6,0,5,7,0,0,32669,3,9,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,157,-100,-230,0,1,7,0,5,8,0,0,32669,3,9,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,158,-100,-220,0,1,8,0,5,9,0,0,32669,3,9,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,159,-100,-210,0,1,9,0,5,10,0,0,32669,4,0,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,160,-100,-200,0,1,10,0,5,11,0,0,32669,4,0,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,161,-100,-190,0,1,11,0,5,12,0,0,32669,4,0,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,162,-100,-180,0,1,12,0,5,13,0,0,32669,4,0,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,163,-100,-170,0,1,13,0,5,14,0,0,32669,4,1,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,164,-100,-160,0,1,14,0,5,15,0,0,32669,4,1,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,165,-100,-150,0,1,15,0,5,16,0,0,32669,4,1,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,166,-100,-140,0,1,16,0,5,17,0,0,32669,4,1,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,167,-100,-130,0,1,17,0,5,18,0,0,32669,4,2,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,168,-100,-120,0,1,18,0,5,19,0,0,32669,4,2,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,169,-100,-110,0,1,19,0,5,20,0,0,32669,4,2,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,170,-100,-100,0,1,20,0,5,21,0,0,32669,4,2,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,171,-100,-90,0,1,21,0,5,22,0,0,32669,4,3,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,172,-100,-80,0,1,22,0,5,23,0,0,32669,4,3,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,173,-100,-70,0,1,23,0,5,24,0,0,32669,4,3,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,174,-100,-60,0,1,24,0,5,25,0,0,32669,4,3,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,175,-100,-50,0,1,25,0,5,26,0,0,32669,4,4,0,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,176,-100,-40,0,1,26,0,5,27,0,0,32669,4,4,1,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,177,-100,-30,0,1,27,0,5,28,0,0,32669,4,4,2,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,178,-100,-20,0,1,28,0,5,29,0,0,32669,4,4,3,ON +2,0,0.637851,0.404,0,0,1,lappd_v1,ON,179,-100,-10,0,1,29,0,6,0,0,0,32669,4,5,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,180,100,-300,0,0,0,0,6,1,0,0,32669,4,5,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,181,100,-290,0,0,1,0,6,2,0,0,32669,4,5,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,182,100,-280,0,0,2,0,6,3,0,0,32669,4,5,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,183,100,-270,0,0,3,0,6,4,0,0,32669,4,6,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,184,100,-260,0,0,4,0,6,5,0,0,32669,4,6,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,185,100,-250,0,0,5,0,6,6,0,0,32669,4,6,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,186,100,-240,0,0,6,0,6,7,0,0,32669,4,6,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,187,100,-230,0,0,7,0,6,8,0,0,32669,4,7,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,188,100,-220,0,0,8,0,6,9,0,0,32669,4,7,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,189,100,-210,0,0,9,0,6,10,0,0,32669,4,7,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,190,100,-200,0,0,10,0,6,11,0,0,32669,4,7,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,191,100,-190,0,0,11,0,6,12,0,0,32669,4,8,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,192,100,-180,0,0,12,0,6,13,0,0,32669,4,8,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,193,100,-170,0,0,13,0,6,14,0,0,32669,4,8,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,194,100,-160,0,0,14,0,6,15,0,0,32669,4,8,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,195,100,-150,0,0,15,0,6,16,0,0,32669,4,9,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,196,100,-140,0,0,16,0,6,17,0,0,32669,4,9,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,197,100,-130,0,0,17,0,6,18,0,0,32669,4,9,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,198,100,-120,0,0,18,0,6,19,0,0,32669,4,9,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,199,100,-110,0,0,19,0,6,20,0,0,32669,5,0,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,200,100,-100,0,0,20,0,6,21,0,0,32669,5,0,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,201,100,-90,0,0,21,0,6,22,0,0,32669,5,0,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,202,100,-80,0,0,22,0,6,23,0,0,32669,5,0,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,203,100,-70,0,0,23,0,6,24,0,0,32669,5,1,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,204,100,-60,0,0,24,0,6,25,0,0,32669,5,1,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,205,100,-50,0,0,25,0,6,26,0,0,32669,5,1,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,206,100,-40,0,0,26,0,6,27,0,0,32669,5,1,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,207,100,-30,0,0,27,0,6,28,0,0,32669,5,2,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,208,100,-20,0,0,28,0,6,29,0,0,32669,5,2,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,209,100,-10,0,0,29,0,7,0,0,0,32669,5,2,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,210,-100,-300,0,1,0,0,7,1,0,0,32669,5,2,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,211,-100,-290,0,1,1,0,7,2,0,0,32669,5,3,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,212,-100,-280,0,1,2,0,7,3,0,0,32669,5,3,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,213,-100,-270,0,1,3,0,7,4,0,0,32669,5,3,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,214,-100,-260,0,1,4,0,7,5,0,0,32669,5,3,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,215,-100,-250,0,1,5,0,7,6,0,0,32669,5,4,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,216,-100,-240,0,1,6,0,7,7,0,0,32669,5,4,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,217,-100,-230,0,1,7,0,7,8,0,0,32669,5,4,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,218,-100,-220,0,1,8,0,7,9,0,0,32669,5,4,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,219,-100,-210,0,1,9,0,7,10,0,0,32669,5,5,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,220,-100,-200,0,1,10,0,7,11,0,0,32669,5,5,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,221,-100,-190,0,1,11,0,7,12,0,0,32669,5,5,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,222,-100,-180,0,1,12,0,7,13,0,0,32669,5,5,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,223,-100,-170,0,1,13,0,7,14,0,0,32669,5,6,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,224,-100,-160,0,1,14,0,7,15,0,0,32669,5,6,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,225,-100,-150,0,1,15,0,7,16,0,0,32669,5,6,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,226,-100,-140,0,1,16,0,7,17,0,0,32669,5,6,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,227,-100,-130,0,1,17,0,7,18,0,0,32669,5,7,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,228,-100,-120,0,1,18,0,7,19,0,0,32669,5,7,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,229,-100,-110,0,1,19,0,7,20,0,0,32669,5,7,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,230,-100,-100,0,1,20,0,7,21,0,0,32669,5,7,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,231,-100,-90,0,1,21,0,7,22,0,0,32669,5,8,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,232,-100,-80,0,1,22,0,7,23,0,0,32669,5,8,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,233,-100,-70,0,1,23,0,7,24,0,0,32669,5,8,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,234,-100,-60,0,1,24,0,7,25,0,0,32669,5,8,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,235,-100,-50,0,1,25,0,7,26,0,0,32669,5,9,0,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,236,-100,-40,0,1,26,0,7,27,0,0,32669,5,9,1,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,237,-100,-30,0,1,27,0,7,28,0,0,32669,5,9,2,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,238,-100,-20,0,1,28,0,7,29,0,0,32669,5,9,3,ON +3,0.902975,-0.927149,0.778025,-0.707107,0,0.707107,lappd_v1,ON,239,-100,-10,0,1,29,0,8,0,0,1,32669,6,0,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,240,100,-300,0,0,0,0,8,1,0,1,32669,6,0,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,241,100,-290,0,0,1,0,8,2,0,1,32669,6,0,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,242,100,-280,0,0,2,0,8,3,0,1,32669,6,0,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,243,100,-270,0,0,3,0,8,4,0,1,32669,6,1,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,244,100,-260,0,0,4,0,8,5,0,1,32669,6,1,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,245,100,-250,0,0,5,0,8,6,0,1,32669,6,1,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,246,100,-240,0,0,6,0,8,7,0,1,32669,6,1,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,247,100,-230,0,0,7,0,8,8,0,1,32669,6,2,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,248,100,-220,0,0,8,0,8,9,0,1,32669,6,2,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,249,100,-210,0,0,9,0,8,10,0,1,32669,6,2,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,250,100,-200,0,0,10,0,8,11,0,1,32669,6,2,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,251,100,-190,0,0,11,0,8,12,0,1,32669,6,3,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,252,100,-180,0,0,12,0,8,13,0,1,32669,6,3,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,253,100,-170,0,0,13,0,8,14,0,1,32669,6,3,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,254,100,-160,0,0,14,0,8,15,0,1,32669,6,3,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,255,100,-150,0,0,15,0,8,16,0,1,32669,6,4,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,256,100,-140,0,0,16,0,8,17,0,1,32669,6,4,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,257,100,-130,0,0,17,0,8,18,0,1,32669,6,4,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,258,100,-120,0,0,18,0,8,19,0,1,32669,6,4,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,259,100,-110,0,0,19,0,8,20,0,1,32669,6,5,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,260,100,-100,0,0,20,0,8,21,0,1,32669,6,5,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,261,100,-90,0,0,21,0,8,22,0,1,32669,6,5,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,262,100,-80,0,0,22,0,8,23,0,1,32669,6,5,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,263,100,-70,0,0,23,0,8,24,0,1,32669,6,6,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,264,100,-60,0,0,24,0,8,25,0,1,32669,6,6,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,265,100,-50,0,0,25,0,8,26,0,1,32669,6,6,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,266,100,-40,0,0,26,0,8,27,0,1,32669,6,6,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,267,100,-30,0,0,27,0,8,28,0,1,32669,6,7,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,268,100,-20,0,0,28,0,8,29,0,1,32669,6,7,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,269,100,-10,0,0,29,0,9,0,0,1,32669,6,7,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,270,-100,-300,0,1,0,0,9,1,0,1,32669,6,7,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,271,-100,-290,0,1,1,0,9,2,0,1,32669,6,8,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,272,-100,-280,0,1,2,0,9,3,0,1,32669,6,8,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,273,-100,-270,0,1,3,0,9,4,0,1,32669,6,8,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,274,-100,-260,0,1,4,0,9,5,0,1,32669,6,8,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,275,-100,-250,0,1,5,0,9,6,0,1,32669,6,9,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,276,-100,-240,0,1,6,0,9,7,0,1,32669,6,9,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,277,-100,-230,0,1,7,0,9,8,0,1,32669,6,9,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,278,-100,-220,0,1,8,0,9,9,0,1,32669,6,9,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,279,-100,-210,0,1,9,0,9,10,0,1,32669,7,0,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,280,-100,-200,0,1,10,0,9,11,0,1,32669,7,0,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,281,-100,-190,0,1,11,0,9,12,0,1,32669,7,0,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,282,-100,-180,0,1,12,0,9,13,0,1,32669,7,0,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,283,-100,-170,0,1,13,0,9,14,0,1,32669,7,1,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,284,-100,-160,0,1,14,0,9,15,0,1,32669,7,1,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,285,-100,-150,0,1,15,0,9,16,0,1,32669,7,1,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,286,-100,-140,0,1,16,0,9,17,0,1,32669,7,1,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,287,-100,-130,0,1,17,0,9,18,0,1,32669,7,2,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,288,-100,-120,0,1,18,0,9,19,0,1,32669,7,2,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,289,-100,-110,0,1,19,0,9,20,0,1,32669,7,2,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,290,-100,-100,0,1,20,0,9,21,0,1,32669,7,2,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,291,-100,-90,0,1,21,0,9,22,0,1,32669,7,3,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,292,-100,-80,0,1,22,0,9,23,0,1,32669,7,3,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,293,-100,-70,0,1,23,0,9,24,0,1,32669,7,3,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,294,-100,-60,0,1,24,0,9,25,0,1,32669,7,3,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,295,-100,-50,0,1,25,0,9,26,0,1,32669,7,4,0,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,296,-100,-40,0,1,26,0,9,27,0,1,32669,7,4,1,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,297,-100,-30,0,1,27,0,9,28,0,1,32669,7,4,2,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,298,-100,-20,0,1,28,0,9,29,0,1,32669,7,4,3,ON +4,0.902975,-0.144649,0.778025,-0.707107,0,0.707107,lappd_v1,ON,299,-100,-10,0,1,29,0,10,0,0,1,32669,7,5,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,300,100,-300,0,0,0,0,10,1,0,1,32669,7,5,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,301,100,-290,0,0,1,0,10,2,0,1,32669,7,5,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,302,100,-280,0,0,2,0,10,3,0,1,32669,7,5,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,303,100,-270,0,0,3,0,10,4,0,1,32669,7,6,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,304,100,-260,0,0,4,0,10,5,0,1,32669,7,6,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,305,100,-250,0,0,5,0,10,6,0,1,32669,7,6,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,306,100,-240,0,0,6,0,10,7,0,1,32669,7,6,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,307,100,-230,0,0,7,0,10,8,0,1,32669,7,7,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,308,100,-220,0,0,8,0,10,9,0,1,32669,7,7,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,309,100,-210,0,0,9,0,10,10,0,1,32669,7,7,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,310,100,-200,0,0,10,0,10,11,0,1,32669,7,7,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,311,100,-190,0,0,11,0,10,12,0,1,32669,7,8,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,312,100,-180,0,0,12,0,10,13,0,1,32669,7,8,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,313,100,-170,0,0,13,0,10,14,0,1,32669,7,8,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,314,100,-160,0,0,14,0,10,15,0,1,32669,7,8,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,315,100,-150,0,0,15,0,10,16,0,1,32669,7,9,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,316,100,-140,0,0,16,0,10,17,0,1,32669,7,9,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,317,100,-130,0,0,17,0,10,18,0,1,32669,7,9,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,318,100,-120,0,0,18,0,10,19,0,1,32669,7,9,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,319,100,-110,0,0,19,0,10,20,0,1,32669,8,0,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,320,100,-100,0,0,20,0,10,21,0,1,32669,8,0,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,321,100,-90,0,0,21,0,10,22,0,1,32669,8,0,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,322,100,-80,0,0,22,0,10,23,0,1,32669,8,0,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,323,100,-70,0,0,23,0,10,24,0,1,32669,8,1,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,324,100,-60,0,0,24,0,10,25,0,1,32669,8,1,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,325,100,-50,0,0,25,0,10,26,0,1,32669,8,1,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,326,100,-40,0,0,26,0,10,27,0,1,32669,8,1,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,327,100,-30,0,0,27,0,10,28,0,1,32669,8,2,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,328,100,-20,0,0,28,0,10,29,0,1,32669,8,2,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,329,100,-10,0,0,29,0,11,0,0,1,32669,8,2,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,330,-100,-300,0,1,0,0,11,1,0,1,32669,8,2,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,331,-100,-290,0,1,1,0,11,2,0,1,32669,8,3,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,332,-100,-280,0,1,2,0,11,3,0,1,32669,8,3,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,333,-100,-270,0,1,3,0,11,4,0,1,32669,8,3,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,334,-100,-260,0,1,4,0,11,5,0,1,32669,8,3,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,335,-100,-250,0,1,5,0,11,6,0,1,32669,8,4,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,336,-100,-240,0,1,6,0,11,7,0,1,32669,8,4,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,337,-100,-230,0,1,7,0,11,8,0,1,32669,8,4,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,338,-100,-220,0,1,8,0,11,9,0,1,32669,8,4,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,339,-100,-210,0,1,9,0,11,10,0,1,32669,8,5,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,340,-100,-200,0,1,10,0,11,11,0,1,32669,8,5,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,341,-100,-190,0,1,11,0,11,12,0,1,32669,8,5,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,342,-100,-180,0,1,12,0,11,13,0,1,32669,8,5,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,343,-100,-170,0,1,13,0,11,14,0,1,32669,8,6,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,344,-100,-160,0,1,14,0,11,15,0,1,32669,8,6,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,345,-100,-150,0,1,15,0,11,16,0,1,32669,8,6,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,346,-100,-140,0,1,16,0,11,17,0,1,32669,8,6,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,347,-100,-130,0,1,17,0,11,18,0,1,32669,8,7,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,348,-100,-120,0,1,18,0,11,19,0,1,32669,8,7,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,349,-100,-110,0,1,19,0,11,20,0,1,32669,8,7,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,350,-100,-100,0,1,20,0,11,21,0,1,32669,8,7,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,351,-100,-90,0,1,21,0,11,22,0,1,32669,8,8,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,352,-100,-80,0,1,22,0,11,23,0,1,32669,8,8,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,353,-100,-70,0,1,23,0,11,24,0,1,32669,8,8,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,354,-100,-60,0,1,24,0,11,25,0,1,32669,8,8,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,355,-100,-50,0,1,25,0,11,26,0,1,32669,8,9,0,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,356,-100,-40,0,1,26,0,11,27,0,1,32669,8,9,1,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,357,-100,-30,0,1,27,0,11,28,0,1,32669,8,9,2,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,358,-100,-20,0,1,28,0,11,29,0,1,32669,8,9,3,ON +5,0.902975,0.637851,0.778025,-0.707107,0,0.707107,lappd_v1,ON,359,-100,-10,0,1,29,0,12,0,0,1,32669,9,0,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,360,100,-300,0,0,0,0,12,1,0,1,32669,9,0,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,361,100,-290,0,0,1,0,12,2,0,1,32669,9,0,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,362,100,-280,0,0,2,0,12,3,0,1,32669,9,0,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,363,100,-270,0,0,3,0,12,4,0,1,32669,9,1,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,364,100,-260,0,0,4,0,12,5,0,1,32669,9,1,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,365,100,-250,0,0,5,0,12,6,0,1,32669,9,1,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,366,100,-240,0,0,6,0,12,7,0,1,32669,9,1,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,367,100,-230,0,0,7,0,12,8,0,1,32669,9,2,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,368,100,-220,0,0,8,0,12,9,0,1,32669,9,2,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,369,100,-210,0,0,9,0,12,10,0,1,32669,9,2,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,370,100,-200,0,0,10,0,12,11,0,1,32669,9,2,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,371,100,-190,0,0,11,0,12,12,0,1,32669,9,3,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,372,100,-180,0,0,12,0,12,13,0,1,32669,9,3,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,373,100,-170,0,0,13,0,12,14,0,1,32669,9,3,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,374,100,-160,0,0,14,0,12,15,0,1,32669,9,3,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,375,100,-150,0,0,15,0,12,16,0,1,32669,9,4,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,376,100,-140,0,0,16,0,12,17,0,1,32669,9,4,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,377,100,-130,0,0,17,0,12,18,0,1,32669,9,4,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,378,100,-120,0,0,18,0,12,19,0,1,32669,9,4,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,379,100,-110,0,0,19,0,12,20,0,1,32669,9,5,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,380,100,-100,0,0,20,0,12,21,0,1,32669,9,5,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,381,100,-90,0,0,21,0,12,22,0,1,32669,9,5,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,382,100,-80,0,0,22,0,12,23,0,1,32669,9,5,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,383,100,-70,0,0,23,0,12,24,0,1,32669,9,6,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,384,100,-60,0,0,24,0,12,25,0,1,32669,9,6,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,385,100,-50,0,0,25,0,12,26,0,1,32669,9,6,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,386,100,-40,0,0,26,0,12,27,0,1,32669,9,6,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,387,100,-30,0,0,27,0,12,28,0,1,32669,9,7,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,388,100,-20,0,0,28,0,12,29,0,1,32669,9,7,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,389,100,-10,0,0,29,0,13,0,0,1,32669,9,7,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,390,-100,-300,0,1,0,0,13,1,0,1,32669,9,7,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,391,-100,-290,0,1,1,0,13,2,0,1,32669,9,8,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,392,-100,-280,0,1,2,0,13,3,0,1,32669,9,8,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,393,-100,-270,0,1,3,0,13,4,0,1,32669,9,8,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,394,-100,-260,0,1,4,0,13,5,0,1,32669,9,8,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,395,-100,-250,0,1,5,0,13,6,0,1,32669,9,9,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,396,-100,-240,0,1,6,0,13,7,0,1,32669,9,9,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,397,-100,-230,0,1,7,0,13,8,0,1,32669,9,9,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,398,-100,-220,0,1,8,0,13,9,0,1,32669,9,9,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,399,-100,-210,0,1,9,0,13,10,0,1,32669,10,0,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,400,-100,-200,0,1,10,0,13,11,0,1,32669,10,0,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,401,-100,-190,0,1,11,0,13,12,0,1,32669,10,0,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,402,-100,-180,0,1,12,0,13,13,0,1,32669,10,0,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,403,-100,-170,0,1,13,0,13,14,0,1,32669,10,1,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,404,-100,-160,0,1,14,0,13,15,0,1,32669,10,1,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,405,-100,-150,0,1,15,0,13,16,0,1,32669,10,1,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,406,-100,-140,0,1,16,0,13,17,0,1,32669,10,1,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,407,-100,-130,0,1,17,0,13,18,0,1,32669,10,2,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,408,-100,-120,0,1,18,0,13,19,0,1,32669,10,2,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,409,-100,-110,0,1,19,0,13,20,0,1,32669,10,2,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,410,-100,-100,0,1,20,0,13,21,0,1,32669,10,2,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,411,-100,-90,0,1,21,0,13,22,0,1,32669,10,3,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,412,-100,-80,0,1,22,0,13,23,0,1,32669,10,3,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,413,-100,-70,0,1,23,0,13,24,0,1,32669,10,3,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,414,-100,-60,0,1,24,0,13,25,0,1,32669,10,3,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,415,-100,-50,0,1,25,0,13,26,0,1,32669,10,4,0,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,416,-100,-40,0,1,26,0,13,27,0,1,32669,10,4,1,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,417,-100,-30,0,1,27,0,13,28,0,1,32669,10,4,2,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,418,-100,-20,0,1,28,0,13,29,0,1,32669,10,4,3,ON +6,1.277,-0.927149,1.681,-1,0,0,lappd_v1,ON,419,-100,-10,0,1,29,0,14,0,0,1,32669,10,5,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,420,100,-300,0,0,0,0,14,1,0,1,32669,10,5,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,421,100,-290,0,0,1,0,14,2,0,1,32669,10,5,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,422,100,-280,0,0,2,0,14,3,0,1,32669,10,5,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,423,100,-270,0,0,3,0,14,4,0,1,32669,10,6,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,424,100,-260,0,0,4,0,14,5,0,1,32669,10,6,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,425,100,-250,0,0,5,0,14,6,0,1,32669,10,6,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,426,100,-240,0,0,6,0,14,7,0,1,32669,10,6,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,427,100,-230,0,0,7,0,14,8,0,1,32669,10,7,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,428,100,-220,0,0,8,0,14,9,0,1,32669,10,7,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,429,100,-210,0,0,9,0,14,10,0,1,32669,10,7,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,430,100,-200,0,0,10,0,14,11,0,1,32669,10,7,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,431,100,-190,0,0,11,0,14,12,0,1,32669,10,8,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,432,100,-180,0,0,12,0,14,13,0,1,32669,10,8,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,433,100,-170,0,0,13,0,14,14,0,1,32669,10,8,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,434,100,-160,0,0,14,0,14,15,0,1,32669,10,8,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,435,100,-150,0,0,15,0,14,16,0,1,32669,10,9,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,436,100,-140,0,0,16,0,14,17,0,1,32669,10,9,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,437,100,-130,0,0,17,0,14,18,0,1,32669,10,9,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,438,100,-120,0,0,18,0,14,19,0,1,32669,10,9,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,439,100,-110,0,0,19,0,14,20,0,1,32669,11,0,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,440,100,-100,0,0,20,0,14,21,0,1,32669,11,0,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,441,100,-90,0,0,21,0,14,22,0,1,32669,11,0,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,442,100,-80,0,0,22,0,14,23,0,1,32669,11,0,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,443,100,-70,0,0,23,0,14,24,0,1,32669,11,1,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,444,100,-60,0,0,24,0,14,25,0,1,32669,11,1,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,445,100,-50,0,0,25,0,14,26,0,1,32669,11,1,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,446,100,-40,0,0,26,0,14,27,0,1,32669,11,1,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,447,100,-30,0,0,27,0,14,28,0,1,32669,11,2,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,448,100,-20,0,0,28,0,14,29,0,1,32669,11,2,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,449,100,-10,0,0,29,0,15,0,0,1,32669,11,2,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,450,-100,-300,0,1,0,0,15,1,0,1,32669,11,2,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,451,-100,-290,0,1,1,0,15,2,0,1,32669,11,3,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,452,-100,-280,0,1,2,0,15,3,0,1,32669,11,3,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,453,-100,-270,0,1,3,0,15,4,0,1,32669,11,3,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,454,-100,-260,0,1,4,0,15,5,0,1,32669,11,3,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,455,-100,-250,0,1,5,0,15,6,0,1,32669,11,4,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,456,-100,-240,0,1,6,0,15,7,0,1,32669,11,4,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,457,-100,-230,0,1,7,0,15,8,0,1,32669,11,4,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,458,-100,-220,0,1,8,0,15,9,0,1,32669,11,4,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,459,-100,-210,0,1,9,0,15,10,0,1,32669,11,5,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,460,-100,-200,0,1,10,0,15,11,0,1,32669,11,5,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,461,-100,-190,0,1,11,0,15,12,0,1,32669,11,5,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,462,-100,-180,0,1,12,0,15,13,0,1,32669,11,5,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,463,-100,-170,0,1,13,0,15,14,0,1,32669,11,6,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,464,-100,-160,0,1,14,0,15,15,0,1,32669,11,6,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,465,-100,-150,0,1,15,0,15,16,0,1,32669,11,6,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,466,-100,-140,0,1,16,0,15,17,0,1,32669,11,6,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,467,-100,-130,0,1,17,0,15,18,0,1,32669,11,7,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,468,-100,-120,0,1,18,0,15,19,0,1,32669,11,7,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,469,-100,-110,0,1,19,0,15,20,0,1,32669,11,7,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,470,-100,-100,0,1,20,0,15,21,0,1,32669,11,7,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,471,-100,-90,0,1,21,0,15,22,0,1,32669,11,8,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,472,-100,-80,0,1,22,0,15,23,0,1,32669,11,8,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,473,-100,-70,0,1,23,0,15,24,0,1,32669,11,8,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,474,-100,-60,0,1,24,0,15,25,0,1,32669,11,8,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,475,-100,-50,0,1,25,0,15,26,0,1,32669,11,9,0,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,476,-100,-40,0,1,26,0,15,27,0,1,32669,11,9,1,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,477,-100,-30,0,1,27,0,15,28,0,1,32669,11,9,2,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,478,-100,-20,0,1,28,0,15,29,0,1,32669,11,9,3,ON +7,1.277,-0.144649,1.681,-1,0,0,lappd_v1,ON,479,-100,-10,0,1,29,0,16,0,0,2,32669,12,0,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,480,100,-300,0,0,0,0,16,1,0,2,32669,12,0,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,481,100,-290,0,0,1,0,16,2,0,2,32669,12,0,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,482,100,-280,0,0,2,0,16,3,0,2,32669,12,0,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,483,100,-270,0,0,3,0,16,4,0,2,32669,12,1,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,484,100,-260,0,0,4,0,16,5,0,2,32669,12,1,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,485,100,-250,0,0,5,0,16,6,0,2,32669,12,1,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,486,100,-240,0,0,6,0,16,7,0,2,32669,12,1,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,487,100,-230,0,0,7,0,16,8,0,2,32669,12,2,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,488,100,-220,0,0,8,0,16,9,0,2,32669,12,2,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,489,100,-210,0,0,9,0,16,10,0,2,32669,12,2,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,490,100,-200,0,0,10,0,16,11,0,2,32669,12,2,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,491,100,-190,0,0,11,0,16,12,0,2,32669,12,3,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,492,100,-180,0,0,12,0,16,13,0,2,32669,12,3,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,493,100,-170,0,0,13,0,16,14,0,2,32669,12,3,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,494,100,-160,0,0,14,0,16,15,0,2,32669,12,3,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,495,100,-150,0,0,15,0,16,16,0,2,32669,12,4,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,496,100,-140,0,0,16,0,16,17,0,2,32669,12,4,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,497,100,-130,0,0,17,0,16,18,0,2,32669,12,4,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,498,100,-120,0,0,18,0,16,19,0,2,32669,12,4,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,499,100,-110,0,0,19,0,16,20,0,2,32669,12,5,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,500,100,-100,0,0,20,0,16,21,0,2,32669,12,5,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,501,100,-90,0,0,21,0,16,22,0,2,32669,12,5,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,502,100,-80,0,0,22,0,16,23,0,2,32669,12,5,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,503,100,-70,0,0,23,0,16,24,0,2,32669,12,6,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,504,100,-60,0,0,24,0,16,25,0,2,32669,12,6,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,505,100,-50,0,0,25,0,16,26,0,2,32669,12,6,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,506,100,-40,0,0,26,0,16,27,0,2,32669,12,6,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,507,100,-30,0,0,27,0,16,28,0,2,32669,12,7,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,508,100,-20,0,0,28,0,16,29,0,2,32669,12,7,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,509,100,-10,0,0,29,0,17,0,0,2,32669,12,7,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,510,-100,-300,0,1,0,0,17,1,0,2,32669,12,7,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,511,-100,-290,0,1,1,0,17,2,0,2,32669,12,8,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,512,-100,-280,0,1,2,0,17,3,0,2,32669,12,8,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,513,-100,-270,0,1,3,0,17,4,0,2,32669,12,8,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,514,-100,-260,0,1,4,0,17,5,0,2,32669,12,8,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,515,-100,-250,0,1,5,0,17,6,0,2,32669,12,9,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,516,-100,-240,0,1,6,0,17,7,0,2,32669,12,9,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,517,-100,-230,0,1,7,0,17,8,0,2,32669,12,9,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,518,-100,-220,0,1,8,0,17,9,0,2,32669,12,9,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,519,-100,-210,0,1,9,0,17,10,0,2,32669,13,0,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,520,-100,-200,0,1,10,0,17,11,0,2,32669,13,0,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,521,-100,-190,0,1,11,0,17,12,0,2,32669,13,0,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,522,-100,-180,0,1,12,0,17,13,0,2,32669,13,0,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,523,-100,-170,0,1,13,0,17,14,0,2,32669,13,1,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,524,-100,-160,0,1,14,0,17,15,0,2,32669,13,1,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,525,-100,-150,0,1,15,0,17,16,0,2,32669,13,1,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,526,-100,-140,0,1,16,0,17,17,0,2,32669,13,1,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,527,-100,-130,0,1,17,0,17,18,0,2,32669,13,2,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,528,-100,-120,0,1,18,0,17,19,0,2,32669,13,2,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,529,-100,-110,0,1,19,0,17,20,0,2,32669,13,2,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,530,-100,-100,0,1,20,0,17,21,0,2,32669,13,2,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,531,-100,-90,0,1,21,0,17,22,0,2,32669,13,3,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,532,-100,-80,0,1,22,0,17,23,0,2,32669,13,3,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,533,-100,-70,0,1,23,0,17,24,0,2,32669,13,3,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,534,-100,-60,0,1,24,0,17,25,0,2,32669,13,3,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,535,-100,-50,0,1,25,0,17,26,0,2,32669,13,4,0,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,536,-100,-40,0,1,26,0,17,27,0,2,32669,13,4,1,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,537,-100,-30,0,1,27,0,17,28,0,2,32669,13,4,2,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,538,-100,-20,0,1,28,0,17,29,0,2,32669,13,4,3,ON +8,1.277,0.637851,1.681,-1,0,0,lappd_v1,ON,539,-100,-10,0,1,29,0,18,0,0,2,32669,13,5,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,540,100,-300,0,0,0,0,18,1,0,2,32669,13,5,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,541,100,-290,0,0,1,0,18,2,0,2,32669,13,5,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,542,100,-280,0,0,2,0,18,3,0,2,32669,13,5,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,543,100,-270,0,0,3,0,18,4,0,2,32669,13,6,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,544,100,-260,0,0,4,0,18,5,0,2,32669,13,6,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,545,100,-250,0,0,5,0,18,6,0,2,32669,13,6,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,546,100,-240,0,0,6,0,18,7,0,2,32669,13,6,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,547,100,-230,0,0,7,0,18,8,0,2,32669,13,7,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,548,100,-220,0,0,8,0,18,9,0,2,32669,13,7,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,549,100,-210,0,0,9,0,18,10,0,2,32669,13,7,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,550,100,-200,0,0,10,0,18,11,0,2,32669,13,7,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,551,100,-190,0,0,11,0,18,12,0,2,32669,13,8,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,552,100,-180,0,0,12,0,18,13,0,2,32669,13,8,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,553,100,-170,0,0,13,0,18,14,0,2,32669,13,8,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,554,100,-160,0,0,14,0,18,15,0,2,32669,13,8,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,555,100,-150,0,0,15,0,18,16,0,2,32669,13,9,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,556,100,-140,0,0,16,0,18,17,0,2,32669,13,9,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,557,100,-130,0,0,17,0,18,18,0,2,32669,13,9,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,558,100,-120,0,0,18,0,18,19,0,2,32669,13,9,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,559,100,-110,0,0,19,0,18,20,0,2,32669,14,0,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,560,100,-100,0,0,20,0,18,21,0,2,32669,14,0,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,561,100,-90,0,0,21,0,18,22,0,2,32669,14,0,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,562,100,-80,0,0,22,0,18,23,0,2,32669,14,0,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,563,100,-70,0,0,23,0,18,24,0,2,32669,14,1,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,564,100,-60,0,0,24,0,18,25,0,2,32669,14,1,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,565,100,-50,0,0,25,0,18,26,0,2,32669,14,1,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,566,100,-40,0,0,26,0,18,27,0,2,32669,14,1,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,567,100,-30,0,0,27,0,18,28,0,2,32669,14,2,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,568,100,-20,0,0,28,0,18,29,0,2,32669,14,2,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,569,100,-10,0,0,29,0,19,0,0,2,32669,14,2,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,570,-100,-300,0,1,0,0,19,1,0,2,32669,14,2,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,571,-100,-290,0,1,1,0,19,2,0,2,32669,14,3,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,572,-100,-280,0,1,2,0,19,3,0,2,32669,14,3,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,573,-100,-270,0,1,3,0,19,4,0,2,32669,14,3,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,574,-100,-260,0,1,4,0,19,5,0,2,32669,14,3,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,575,-100,-250,0,1,5,0,19,6,0,2,32669,14,4,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,576,-100,-240,0,1,6,0,19,7,0,2,32669,14,4,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,577,-100,-230,0,1,7,0,19,8,0,2,32669,14,4,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,578,-100,-220,0,1,8,0,19,9,0,2,32669,14,4,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,579,-100,-210,0,1,9,0,19,10,0,2,32669,14,5,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,580,-100,-200,0,1,10,0,19,11,0,2,32669,14,5,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,581,-100,-190,0,1,11,0,19,12,0,2,32669,14,5,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,582,-100,-180,0,1,12,0,19,13,0,2,32669,14,5,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,583,-100,-170,0,1,13,0,19,14,0,2,32669,14,6,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,584,-100,-160,0,1,14,0,19,15,0,2,32669,14,6,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,585,-100,-150,0,1,15,0,19,16,0,2,32669,14,6,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,586,-100,-140,0,1,16,0,19,17,0,2,32669,14,6,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,587,-100,-130,0,1,17,0,19,18,0,2,32669,14,7,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,588,-100,-120,0,1,18,0,19,19,0,2,32669,14,7,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,589,-100,-110,0,1,19,0,19,20,0,2,32669,14,7,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,590,-100,-100,0,1,20,0,19,21,0,2,32669,14,7,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,591,-100,-90,0,1,21,0,19,22,0,2,32669,14,8,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,592,-100,-80,0,1,22,0,19,23,0,2,32669,14,8,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,593,-100,-70,0,1,23,0,19,24,0,2,32669,14,8,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,594,-100,-60,0,1,24,0,19,25,0,2,32669,14,8,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,595,-100,-50,0,1,25,0,19,26,0,2,32669,14,9,0,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,596,-100,-40,0,1,26,0,19,27,0,2,32669,14,9,1,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,597,-100,-30,0,1,27,0,19,28,0,2,32669,14,9,2,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,598,-100,-20,0,1,28,0,19,29,0,2,32669,14,9,3,ON +9,0.902975,-0.927149,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,599,-100,-10,0,1,29,1,0,0,0,2,32669,15,0,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,600,100,-300,0,0,0,1,0,1,0,2,32669,15,0,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,601,100,-290,0,0,1,1,0,2,0,2,32669,15,0,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,602,100,-280,0,0,2,1,0,3,0,2,32669,15,0,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,603,100,-270,0,0,3,1,0,4,0,2,32669,15,1,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,604,100,-260,0,0,4,1,0,5,0,2,32669,15,1,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,605,100,-250,0,0,5,1,0,6,0,2,32669,15,1,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,606,100,-240,0,0,6,1,0,7,0,2,32669,15,1,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,607,100,-230,0,0,7,1,0,8,0,2,32669,15,2,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,608,100,-220,0,0,8,1,0,9,0,2,32669,15,2,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,609,100,-210,0,0,9,1,0,10,0,2,32669,15,2,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,610,100,-200,0,0,10,1,0,11,0,2,32669,15,2,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,611,100,-190,0,0,11,1,0,12,0,2,32669,15,3,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,612,100,-180,0,0,12,1,0,13,0,2,32669,15,3,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,613,100,-170,0,0,13,1,0,14,0,2,32669,15,3,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,614,100,-160,0,0,14,1,0,15,0,2,32669,15,3,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,615,100,-150,0,0,15,1,0,16,0,2,32669,15,4,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,616,100,-140,0,0,16,1,0,17,0,2,32669,15,4,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,617,100,-130,0,0,17,1,0,18,0,2,32669,15,4,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,618,100,-120,0,0,18,1,0,19,0,2,32669,15,4,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,619,100,-110,0,0,19,1,0,20,0,2,32669,15,5,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,620,100,-100,0,0,20,1,0,21,0,2,32669,15,5,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,621,100,-90,0,0,21,1,0,22,0,2,32669,15,5,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,622,100,-80,0,0,22,1,0,23,0,2,32669,15,5,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,623,100,-70,0,0,23,1,0,24,0,2,32669,15,6,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,624,100,-60,0,0,24,1,0,25,0,2,32669,15,6,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,625,100,-50,0,0,25,1,0,26,0,2,32669,15,6,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,626,100,-40,0,0,26,1,0,27,0,2,32669,15,6,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,627,100,-30,0,0,27,1,0,28,0,2,32669,15,7,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,628,100,-20,0,0,28,1,0,29,0,2,32669,15,7,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,629,100,-10,0,0,29,1,1,0,0,2,32669,15,7,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,630,-100,-300,0,1,0,1,1,1,0,2,32669,15,7,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,631,-100,-290,0,1,1,1,1,2,0,2,32669,15,8,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,632,-100,-280,0,1,2,1,1,3,0,2,32669,15,8,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,633,-100,-270,0,1,3,1,1,4,0,2,32669,15,8,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,634,-100,-260,0,1,4,1,1,5,0,2,32669,15,8,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,635,-100,-250,0,1,5,1,1,6,0,2,32669,15,9,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,636,-100,-240,0,1,6,1,1,7,0,2,32669,15,9,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,637,-100,-230,0,1,7,1,1,8,0,2,32669,15,9,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,638,-100,-220,0,1,8,1,1,9,0,2,32669,15,9,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,639,-100,-210,0,1,9,1,1,10,0,2,32669,16,0,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,640,-100,-200,0,1,10,1,1,11,0,2,32669,16,0,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,641,-100,-190,0,1,11,1,1,12,0,2,32669,16,0,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,642,-100,-180,0,1,12,1,1,13,0,2,32669,16,0,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,643,-100,-170,0,1,13,1,1,14,0,2,32669,16,1,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,644,-100,-160,0,1,14,1,1,15,0,2,32669,16,1,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,645,-100,-150,0,1,15,1,1,16,0,2,32669,16,1,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,646,-100,-140,0,1,16,1,1,17,0,2,32669,16,1,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,647,-100,-130,0,1,17,1,1,18,0,2,32669,16,2,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,648,-100,-120,0,1,18,1,1,19,0,2,32669,16,2,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,649,-100,-110,0,1,19,1,1,20,0,2,32669,16,2,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,650,-100,-100,0,1,20,1,1,21,0,2,32669,16,2,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,651,-100,-90,0,1,21,1,1,22,0,2,32669,16,3,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,652,-100,-80,0,1,22,1,1,23,0,2,32669,16,3,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,653,-100,-70,0,1,23,1,1,24,0,2,32669,16,3,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,654,-100,-60,0,1,24,1,1,25,0,2,32669,16,3,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,655,-100,-50,0,1,25,1,1,26,0,2,32669,16,4,0,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,656,-100,-40,0,1,26,1,1,27,0,2,32669,16,4,1,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,657,-100,-30,0,1,27,1,1,28,0,2,32669,16,4,2,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,658,-100,-20,0,1,28,1,1,29,0,2,32669,16,4,3,ON +10,0.902975,-0.144649,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,659,-100,-10,0,1,29,1,2,0,0,2,32669,16,5,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,660,100,-300,0,0,0,1,2,1,0,2,32669,16,5,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,661,100,-290,0,0,1,1,2,2,0,2,32669,16,5,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,662,100,-280,0,0,2,1,2,3,0,2,32669,16,5,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,663,100,-270,0,0,3,1,2,4,0,2,32669,16,6,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,664,100,-260,0,0,4,1,2,5,0,2,32669,16,6,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,665,100,-250,0,0,5,1,2,6,0,2,32669,16,6,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,666,100,-240,0,0,6,1,2,7,0,2,32669,16,6,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,667,100,-230,0,0,7,1,2,8,0,2,32669,16,7,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,668,100,-220,0,0,8,1,2,9,0,2,32669,16,7,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,669,100,-210,0,0,9,1,2,10,0,2,32669,16,7,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,670,100,-200,0,0,10,1,2,11,0,2,32669,16,7,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,671,100,-190,0,0,11,1,2,12,0,2,32669,16,8,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,672,100,-180,0,0,12,1,2,13,0,2,32669,16,8,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,673,100,-170,0,0,13,1,2,14,0,2,32669,16,8,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,674,100,-160,0,0,14,1,2,15,0,2,32669,16,8,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,675,100,-150,0,0,15,1,2,16,0,2,32669,16,9,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,676,100,-140,0,0,16,1,2,17,0,2,32669,16,9,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,677,100,-130,0,0,17,1,2,18,0,2,32669,16,9,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,678,100,-120,0,0,18,1,2,19,0,2,32669,16,9,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,679,100,-110,0,0,19,1,2,20,0,2,32669,17,0,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,680,100,-100,0,0,20,1,2,21,0,2,32669,17,0,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,681,100,-90,0,0,21,1,2,22,0,2,32669,17,0,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,682,100,-80,0,0,22,1,2,23,0,2,32669,17,0,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,683,100,-70,0,0,23,1,2,24,0,2,32669,17,1,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,684,100,-60,0,0,24,1,2,25,0,2,32669,17,1,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,685,100,-50,0,0,25,1,2,26,0,2,32669,17,1,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,686,100,-40,0,0,26,1,2,27,0,2,32669,17,1,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,687,100,-30,0,0,27,1,2,28,0,2,32669,17,2,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,688,100,-20,0,0,28,1,2,29,0,2,32669,17,2,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,689,100,-10,0,0,29,1,3,0,0,2,32669,17,2,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,690,-100,-300,0,1,0,1,3,1,0,2,32669,17,2,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,691,-100,-290,0,1,1,1,3,2,0,2,32669,17,3,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,692,-100,-280,0,1,2,1,3,3,0,2,32669,17,3,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,693,-100,-270,0,1,3,1,3,4,0,2,32669,17,3,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,694,-100,-260,0,1,4,1,3,5,0,2,32669,17,3,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,695,-100,-250,0,1,5,1,3,6,0,2,32669,17,4,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,696,-100,-240,0,1,6,1,3,7,0,2,32669,17,4,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,697,-100,-230,0,1,7,1,3,8,0,2,32669,17,4,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,698,-100,-220,0,1,8,1,3,9,0,2,32669,17,4,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,699,-100,-210,0,1,9,1,3,10,0,2,32669,17,5,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,700,-100,-200,0,1,10,1,3,11,0,2,32669,17,5,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,701,-100,-190,0,1,11,1,3,12,0,2,32669,17,5,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,702,-100,-180,0,1,12,1,3,13,0,2,32669,17,5,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,703,-100,-170,0,1,13,1,3,14,0,2,32669,17,6,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,704,-100,-160,0,1,14,1,3,15,0,2,32669,17,6,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,705,-100,-150,0,1,15,1,3,16,0,2,32669,17,6,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,706,-100,-140,0,1,16,1,3,17,0,2,32669,17,6,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,707,-100,-130,0,1,17,1,3,18,0,2,32669,17,7,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,708,-100,-120,0,1,18,1,3,19,0,2,32669,17,7,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,709,-100,-110,0,1,19,1,3,20,0,2,32669,17,7,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,710,-100,-100,0,1,20,1,3,21,0,2,32669,17,7,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,711,-100,-90,0,1,21,1,3,22,0,2,32669,17,8,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,712,-100,-80,0,1,22,1,3,23,0,2,32669,17,8,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,713,-100,-70,0,1,23,1,3,24,0,2,32669,17,8,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,714,-100,-60,0,1,24,1,3,25,0,2,32669,17,8,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,715,-100,-50,0,1,25,1,3,26,0,2,32669,17,9,0,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,716,-100,-40,0,1,26,1,3,27,0,2,32669,17,9,1,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,717,-100,-30,0,1,27,1,3,28,0,2,32669,17,9,2,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,718,-100,-20,0,1,28,1,3,29,0,2,32669,17,9,3,ON +11,0.902975,0.637851,2.58398,-0.707107,0,-0.707107,lappd_v1,ON,719,-100,-10,0,1,29,1,4,0,0,3,32669,18,0,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,720,100,-300,0,0,0,1,4,1,0,3,32669,18,0,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,721,100,-290,0,0,1,1,4,2,0,3,32669,18,0,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,722,100,-280,0,0,2,1,4,3,0,3,32669,18,0,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,723,100,-270,0,0,3,1,4,4,0,3,32669,18,1,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,724,100,-260,0,0,4,1,4,5,0,3,32669,18,1,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,725,100,-250,0,0,5,1,4,6,0,3,32669,18,1,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,726,100,-240,0,0,6,1,4,7,0,3,32669,18,1,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,727,100,-230,0,0,7,1,4,8,0,3,32669,18,2,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,728,100,-220,0,0,8,1,4,9,0,3,32669,18,2,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,729,100,-210,0,0,9,1,4,10,0,3,32669,18,2,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,730,100,-200,0,0,10,1,4,11,0,3,32669,18,2,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,731,100,-190,0,0,11,1,4,12,0,3,32669,18,3,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,732,100,-180,0,0,12,1,4,13,0,3,32669,18,3,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,733,100,-170,0,0,13,1,4,14,0,3,32669,18,3,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,734,100,-160,0,0,14,1,4,15,0,3,32669,18,3,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,735,100,-150,0,0,15,1,4,16,0,3,32669,18,4,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,736,100,-140,0,0,16,1,4,17,0,3,32669,18,4,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,737,100,-130,0,0,17,1,4,18,0,3,32669,18,4,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,738,100,-120,0,0,18,1,4,19,0,3,32669,18,4,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,739,100,-110,0,0,19,1,4,20,0,3,32669,18,5,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,740,100,-100,0,0,20,1,4,21,0,3,32669,18,5,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,741,100,-90,0,0,21,1,4,22,0,3,32669,18,5,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,742,100,-80,0,0,22,1,4,23,0,3,32669,18,5,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,743,100,-70,0,0,23,1,4,24,0,3,32669,18,6,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,744,100,-60,0,0,24,1,4,25,0,3,32669,18,6,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,745,100,-50,0,0,25,1,4,26,0,3,32669,18,6,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,746,100,-40,0,0,26,1,4,27,0,3,32669,18,6,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,747,100,-30,0,0,27,1,4,28,0,3,32669,18,7,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,748,100,-20,0,0,28,1,4,29,0,3,32669,18,7,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,749,100,-10,0,0,29,1,5,0,0,3,32669,18,7,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,750,-100,-300,0,1,0,1,5,1,0,3,32669,18,7,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,751,-100,-290,0,1,1,1,5,2,0,3,32669,18,8,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,752,-100,-280,0,1,2,1,5,3,0,3,32669,18,8,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,753,-100,-270,0,1,3,1,5,4,0,3,32669,18,8,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,754,-100,-260,0,1,4,1,5,5,0,3,32669,18,8,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,755,-100,-250,0,1,5,1,5,6,0,3,32669,18,9,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,756,-100,-240,0,1,6,1,5,7,0,3,32669,18,9,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,757,-100,-230,0,1,7,1,5,8,0,3,32669,18,9,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,758,-100,-220,0,1,8,1,5,9,0,3,32669,18,9,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,759,-100,-210,0,1,9,1,5,10,0,3,32669,19,0,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,760,-100,-200,0,1,10,1,5,11,0,3,32669,19,0,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,761,-100,-190,0,1,11,1,5,12,0,3,32669,19,0,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,762,-100,-180,0,1,12,1,5,13,0,3,32669,19,0,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,763,-100,-170,0,1,13,1,5,14,0,3,32669,19,1,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,764,-100,-160,0,1,14,1,5,15,0,3,32669,19,1,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,765,-100,-150,0,1,15,1,5,16,0,3,32669,19,1,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,766,-100,-140,0,1,16,1,5,17,0,3,32669,19,1,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,767,-100,-130,0,1,17,1,5,18,0,3,32669,19,2,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,768,-100,-120,0,1,18,1,5,19,0,3,32669,19,2,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,769,-100,-110,0,1,19,1,5,20,0,3,32669,19,2,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,770,-100,-100,0,1,20,1,5,21,0,3,32669,19,2,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,771,-100,-90,0,1,21,1,5,22,0,3,32669,19,3,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,772,-100,-80,0,1,22,1,5,23,0,3,32669,19,3,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,773,-100,-70,0,1,23,1,5,24,0,3,32669,19,3,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,774,-100,-60,0,1,24,1,5,25,0,3,32669,19,3,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,775,-100,-50,0,1,25,1,5,26,0,3,32669,19,4,0,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,776,-100,-40,0,1,26,1,5,27,0,3,32669,19,4,1,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,777,-100,-30,0,1,27,1,5,28,0,3,32669,19,4,2,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,778,-100,-20,0,1,28,1,5,29,0,3,32669,19,4,3,ON +12,0,-0.927149,2.958,0,0,-1,lappd_v1,ON,779,-100,-10,0,1,29,1,6,0,0,3,32669,19,5,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,780,100,-300,0,0,0,1,6,1,0,3,32669,19,5,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,781,100,-290,0,0,1,1,6,2,0,3,32669,19,5,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,782,100,-280,0,0,2,1,6,3,0,3,32669,19,5,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,783,100,-270,0,0,3,1,6,4,0,3,32669,19,6,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,784,100,-260,0,0,4,1,6,5,0,3,32669,19,6,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,785,100,-250,0,0,5,1,6,6,0,3,32669,19,6,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,786,100,-240,0,0,6,1,6,7,0,3,32669,19,6,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,787,100,-230,0,0,7,1,6,8,0,3,32669,19,7,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,788,100,-220,0,0,8,1,6,9,0,3,32669,19,7,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,789,100,-210,0,0,9,1,6,10,0,3,32669,19,7,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,790,100,-200,0,0,10,1,6,11,0,3,32669,19,7,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,791,100,-190,0,0,11,1,6,12,0,3,32669,19,8,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,792,100,-180,0,0,12,1,6,13,0,3,32669,19,8,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,793,100,-170,0,0,13,1,6,14,0,3,32669,19,8,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,794,100,-160,0,0,14,1,6,15,0,3,32669,19,8,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,795,100,-150,0,0,15,1,6,16,0,3,32669,19,9,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,796,100,-140,0,0,16,1,6,17,0,3,32669,19,9,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,797,100,-130,0,0,17,1,6,18,0,3,32669,19,9,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,798,100,-120,0,0,18,1,6,19,0,3,32669,19,9,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,799,100,-110,0,0,19,1,6,20,0,3,32669,20,0,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,800,100,-100,0,0,20,1,6,21,0,3,32669,20,0,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,801,100,-90,0,0,21,1,6,22,0,3,32669,20,0,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,802,100,-80,0,0,22,1,6,23,0,3,32669,20,0,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,803,100,-70,0,0,23,1,6,24,0,3,32669,20,1,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,804,100,-60,0,0,24,1,6,25,0,3,32669,20,1,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,805,100,-50,0,0,25,1,6,26,0,3,32669,20,1,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,806,100,-40,0,0,26,1,6,27,0,3,32669,20,1,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,807,100,-30,0,0,27,1,6,28,0,3,32669,20,2,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,808,100,-20,0,0,28,1,6,29,0,3,32669,20,2,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,809,100,-10,0,0,29,1,7,0,0,3,32669,20,2,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,810,-100,-300,0,1,0,1,7,1,0,3,32669,20,2,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,811,-100,-290,0,1,1,1,7,2,0,3,32669,20,3,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,812,-100,-280,0,1,2,1,7,3,0,3,32669,20,3,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,813,-100,-270,0,1,3,1,7,4,0,3,32669,20,3,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,814,-100,-260,0,1,4,1,7,5,0,3,32669,20,3,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,815,-100,-250,0,1,5,1,7,6,0,3,32669,20,4,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,816,-100,-240,0,1,6,1,7,7,0,3,32669,20,4,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,817,-100,-230,0,1,7,1,7,8,0,3,32669,20,4,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,818,-100,-220,0,1,8,1,7,9,0,3,32669,20,4,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,819,-100,-210,0,1,9,1,7,10,0,3,32669,20,5,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,820,-100,-200,0,1,10,1,7,11,0,3,32669,20,5,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,821,-100,-190,0,1,11,1,7,12,0,3,32669,20,5,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,822,-100,-180,0,1,12,1,7,13,0,3,32669,20,5,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,823,-100,-170,0,1,13,1,7,14,0,3,32669,20,6,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,824,-100,-160,0,1,14,1,7,15,0,3,32669,20,6,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,825,-100,-150,0,1,15,1,7,16,0,3,32669,20,6,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,826,-100,-140,0,1,16,1,7,17,0,3,32669,20,6,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,827,-100,-130,0,1,17,1,7,18,0,3,32669,20,7,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,828,-100,-120,0,1,18,1,7,19,0,3,32669,20,7,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,829,-100,-110,0,1,19,1,7,20,0,3,32669,20,7,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,830,-100,-100,0,1,20,1,7,21,0,3,32669,20,7,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,831,-100,-90,0,1,21,1,7,22,0,3,32669,20,8,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,832,-100,-80,0,1,22,1,7,23,0,3,32669,20,8,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,833,-100,-70,0,1,23,1,7,24,0,3,32669,20,8,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,834,-100,-60,0,1,24,1,7,25,0,3,32669,20,8,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,835,-100,-50,0,1,25,1,7,26,0,3,32669,20,9,0,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,836,-100,-40,0,1,26,1,7,27,0,3,32669,20,9,1,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,837,-100,-30,0,1,27,1,7,28,0,3,32669,20,9,2,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,838,-100,-20,0,1,28,1,7,29,0,3,32669,20,9,3,ON +13,0,-0.144649,2.958,0,0,-1,lappd_v1,ON,839,-100,-10,0,1,29,1,8,0,0,3,32669,21,0,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,840,100,-300,0,0,0,1,8,1,0,3,32669,21,0,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,841,100,-290,0,0,1,1,8,2,0,3,32669,21,0,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,842,100,-280,0,0,2,1,8,3,0,3,32669,21,0,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,843,100,-270,0,0,3,1,8,4,0,3,32669,21,1,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,844,100,-260,0,0,4,1,8,5,0,3,32669,21,1,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,845,100,-250,0,0,5,1,8,6,0,3,32669,21,1,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,846,100,-240,0,0,6,1,8,7,0,3,32669,21,1,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,847,100,-230,0,0,7,1,8,8,0,3,32669,21,2,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,848,100,-220,0,0,8,1,8,9,0,3,32669,21,2,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,849,100,-210,0,0,9,1,8,10,0,3,32669,21,2,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,850,100,-200,0,0,10,1,8,11,0,3,32669,21,2,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,851,100,-190,0,0,11,1,8,12,0,3,32669,21,3,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,852,100,-180,0,0,12,1,8,13,0,3,32669,21,3,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,853,100,-170,0,0,13,1,8,14,0,3,32669,21,3,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,854,100,-160,0,0,14,1,8,15,0,3,32669,21,3,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,855,100,-150,0,0,15,1,8,16,0,3,32669,21,4,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,856,100,-140,0,0,16,1,8,17,0,3,32669,21,4,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,857,100,-130,0,0,17,1,8,18,0,3,32669,21,4,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,858,100,-120,0,0,18,1,8,19,0,3,32669,21,4,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,859,100,-110,0,0,19,1,8,20,0,3,32669,21,5,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,860,100,-100,0,0,20,1,8,21,0,3,32669,21,5,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,861,100,-90,0,0,21,1,8,22,0,3,32669,21,5,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,862,100,-80,0,0,22,1,8,23,0,3,32669,21,5,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,863,100,-70,0,0,23,1,8,24,0,3,32669,21,6,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,864,100,-60,0,0,24,1,8,25,0,3,32669,21,6,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,865,100,-50,0,0,25,1,8,26,0,3,32669,21,6,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,866,100,-40,0,0,26,1,8,27,0,3,32669,21,6,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,867,100,-30,0,0,27,1,8,28,0,3,32669,21,7,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,868,100,-20,0,0,28,1,8,29,0,3,32669,21,7,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,869,100,-10,0,0,29,1,9,0,0,3,32669,21,7,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,870,-100,-300,0,1,0,1,9,1,0,3,32669,21,7,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,871,-100,-290,0,1,1,1,9,2,0,3,32669,21,8,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,872,-100,-280,0,1,2,1,9,3,0,3,32669,21,8,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,873,-100,-270,0,1,3,1,9,4,0,3,32669,21,8,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,874,-100,-260,0,1,4,1,9,5,0,3,32669,21,8,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,875,-100,-250,0,1,5,1,9,6,0,3,32669,21,9,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,876,-100,-240,0,1,6,1,9,7,0,3,32669,21,9,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,877,-100,-230,0,1,7,1,9,8,0,3,32669,21,9,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,878,-100,-220,0,1,8,1,9,9,0,3,32669,21,9,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,879,-100,-210,0,1,9,1,9,10,0,3,32669,22,0,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,880,-100,-200,0,1,10,1,9,11,0,3,32669,22,0,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,881,-100,-190,0,1,11,1,9,12,0,3,32669,22,0,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,882,-100,-180,0,1,12,1,9,13,0,3,32669,22,0,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,883,-100,-170,0,1,13,1,9,14,0,3,32669,22,1,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,884,-100,-160,0,1,14,1,9,15,0,3,32669,22,1,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,885,-100,-150,0,1,15,1,9,16,0,3,32669,22,1,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,886,-100,-140,0,1,16,1,9,17,0,3,32669,22,1,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,887,-100,-130,0,1,17,1,9,18,0,3,32669,22,2,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,888,-100,-120,0,1,18,1,9,19,0,3,32669,22,2,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,889,-100,-110,0,1,19,1,9,20,0,3,32669,22,2,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,890,-100,-100,0,1,20,1,9,21,0,3,32669,22,2,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,891,-100,-90,0,1,21,1,9,22,0,3,32669,22,3,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,892,-100,-80,0,1,22,1,9,23,0,3,32669,22,3,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,893,-100,-70,0,1,23,1,9,24,0,3,32669,22,3,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,894,-100,-60,0,1,24,1,9,25,0,3,32669,22,3,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,895,-100,-50,0,1,25,1,9,26,0,3,32669,22,4,0,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,896,-100,-40,0,1,26,1,9,27,0,3,32669,22,4,1,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,897,-100,-30,0,1,27,1,9,28,0,3,32669,22,4,2,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,898,-100,-20,0,1,28,1,9,29,0,3,32669,22,4,3,ON +14,0,0.637851,2.958,0,0,-1,lappd_v1,ON,899,-100,-10,0,1,29,1,10,0,0,3,32669,22,5,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,900,100,-300,0,0,0,1,10,1,0,3,32669,22,5,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,901,100,-290,0,0,1,1,10,2,0,3,32669,22,5,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,902,100,-280,0,0,2,1,10,3,0,3,32669,22,5,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,903,100,-270,0,0,3,1,10,4,0,3,32669,22,6,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,904,100,-260,0,0,4,1,10,5,0,3,32669,22,6,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,905,100,-250,0,0,5,1,10,6,0,3,32669,22,6,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,906,100,-240,0,0,6,1,10,7,0,3,32669,22,6,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,907,100,-230,0,0,7,1,10,8,0,3,32669,22,7,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,908,100,-220,0,0,8,1,10,9,0,3,32669,22,7,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,909,100,-210,0,0,9,1,10,10,0,3,32669,22,7,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,910,100,-200,0,0,10,1,10,11,0,3,32669,22,7,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,911,100,-190,0,0,11,1,10,12,0,3,32669,22,8,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,912,100,-180,0,0,12,1,10,13,0,3,32669,22,8,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,913,100,-170,0,0,13,1,10,14,0,3,32669,22,8,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,914,100,-160,0,0,14,1,10,15,0,3,32669,22,8,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,915,100,-150,0,0,15,1,10,16,0,3,32669,22,9,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,916,100,-140,0,0,16,1,10,17,0,3,32669,22,9,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,917,100,-130,0,0,17,1,10,18,0,3,32669,22,9,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,918,100,-120,0,0,18,1,10,19,0,3,32669,22,9,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,919,100,-110,0,0,19,1,10,20,0,3,32669,23,0,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,920,100,-100,0,0,20,1,10,21,0,3,32669,23,0,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,921,100,-90,0,0,21,1,10,22,0,3,32669,23,0,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,922,100,-80,0,0,22,1,10,23,0,3,32669,23,0,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,923,100,-70,0,0,23,1,10,24,0,3,32669,23,1,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,924,100,-60,0,0,24,1,10,25,0,3,32669,23,1,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,925,100,-50,0,0,25,1,10,26,0,3,32669,23,1,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,926,100,-40,0,0,26,1,10,27,0,3,32669,23,1,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,927,100,-30,0,0,27,1,10,28,0,3,32669,23,2,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,928,100,-20,0,0,28,1,10,29,0,3,32669,23,2,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,929,100,-10,0,0,29,1,11,0,0,3,32669,23,2,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,930,-100,-300,0,1,0,1,11,1,0,3,32669,23,2,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,931,-100,-290,0,1,1,1,11,2,0,3,32669,23,3,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,932,-100,-280,0,1,2,1,11,3,0,3,32669,23,3,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,933,-100,-270,0,1,3,1,11,4,0,3,32669,23,3,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,934,-100,-260,0,1,4,1,11,5,0,3,32669,23,3,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,935,-100,-250,0,1,5,1,11,6,0,3,32669,23,4,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,936,-100,-240,0,1,6,1,11,7,0,3,32669,23,4,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,937,-100,-230,0,1,7,1,11,8,0,3,32669,23,4,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,938,-100,-220,0,1,8,1,11,9,0,3,32669,23,4,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,939,-100,-210,0,1,9,1,11,10,0,3,32669,23,5,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,940,-100,-200,0,1,10,1,11,11,0,3,32669,23,5,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,941,-100,-190,0,1,11,1,11,12,0,3,32669,23,5,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,942,-100,-180,0,1,12,1,11,13,0,3,32669,23,5,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,943,-100,-170,0,1,13,1,11,14,0,3,32669,23,6,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,944,-100,-160,0,1,14,1,11,15,0,3,32669,23,6,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,945,-100,-150,0,1,15,1,11,16,0,3,32669,23,6,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,946,-100,-140,0,1,16,1,11,17,0,3,32669,23,6,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,947,-100,-130,0,1,17,1,11,18,0,3,32669,23,7,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,948,-100,-120,0,1,18,1,11,19,0,3,32669,23,7,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,949,-100,-110,0,1,19,1,11,20,0,3,32669,23,7,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,950,-100,-100,0,1,20,1,11,21,0,3,32669,23,7,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,951,-100,-90,0,1,21,1,11,22,0,3,32669,23,8,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,952,-100,-80,0,1,22,1,11,23,0,3,32669,23,8,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,953,-100,-70,0,1,23,1,11,24,0,3,32669,23,8,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,954,-100,-60,0,1,24,1,11,25,0,3,32669,23,8,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,955,-100,-50,0,1,25,1,11,26,0,3,32669,23,9,0,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,956,-100,-40,0,1,26,1,11,27,0,3,32669,23,9,1,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,957,-100,-30,0,1,27,1,11,28,0,3,32669,23,9,2,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,958,-100,-20,0,1,28,1,11,29,0,3,32669,23,9,3,ON +15,-0.902975,-0.927149,2.58398,0.707107,0,-0.707107,lappd_v1,ON,959,-100,-10,0,1,29,1,12,0,0,4,32669,24,0,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,960,100,-300,0,0,0,1,12,1,0,4,32669,24,0,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,961,100,-290,0,0,1,1,12,2,0,4,32669,24,0,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,962,100,-280,0,0,2,1,12,3,0,4,32669,24,0,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,963,100,-270,0,0,3,1,12,4,0,4,32669,24,1,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,964,100,-260,0,0,4,1,12,5,0,4,32669,24,1,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,965,100,-250,0,0,5,1,12,6,0,4,32669,24,1,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,966,100,-240,0,0,6,1,12,7,0,4,32669,24,1,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,967,100,-230,0,0,7,1,12,8,0,4,32669,24,2,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,968,100,-220,0,0,8,1,12,9,0,4,32669,24,2,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,969,100,-210,0,0,9,1,12,10,0,4,32669,24,2,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,970,100,-200,0,0,10,1,12,11,0,4,32669,24,2,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,971,100,-190,0,0,11,1,12,12,0,4,32669,24,3,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,972,100,-180,0,0,12,1,12,13,0,4,32669,24,3,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,973,100,-170,0,0,13,1,12,14,0,4,32669,24,3,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,974,100,-160,0,0,14,1,12,15,0,4,32669,24,3,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,975,100,-150,0,0,15,1,12,16,0,4,32669,24,4,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,976,100,-140,0,0,16,1,12,17,0,4,32669,24,4,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,977,100,-130,0,0,17,1,12,18,0,4,32669,24,4,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,978,100,-120,0,0,18,1,12,19,0,4,32669,24,4,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,979,100,-110,0,0,19,1,12,20,0,4,32669,24,5,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,980,100,-100,0,0,20,1,12,21,0,4,32669,24,5,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,981,100,-90,0,0,21,1,12,22,0,4,32669,24,5,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,982,100,-80,0,0,22,1,12,23,0,4,32669,24,5,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,983,100,-70,0,0,23,1,12,24,0,4,32669,24,6,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,984,100,-60,0,0,24,1,12,25,0,4,32669,24,6,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,985,100,-50,0,0,25,1,12,26,0,4,32669,24,6,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,986,100,-40,0,0,26,1,12,27,0,4,32669,24,6,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,987,100,-30,0,0,27,1,12,28,0,4,32669,24,7,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,988,100,-20,0,0,28,1,12,29,0,4,32669,24,7,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,989,100,-10,0,0,29,1,13,0,0,4,32669,24,7,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,990,-100,-300,0,1,0,1,13,1,0,4,32669,24,7,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,991,-100,-290,0,1,1,1,13,2,0,4,32669,24,8,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,992,-100,-280,0,1,2,1,13,3,0,4,32669,24,8,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,993,-100,-270,0,1,3,1,13,4,0,4,32669,24,8,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,994,-100,-260,0,1,4,1,13,5,0,4,32669,24,8,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,995,-100,-250,0,1,5,1,13,6,0,4,32669,24,9,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,996,-100,-240,0,1,6,1,13,7,0,4,32669,24,9,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,997,-100,-230,0,1,7,1,13,8,0,4,32669,24,9,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,998,-100,-220,0,1,8,1,13,9,0,4,32669,24,9,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,999,-100,-210,0,1,9,1,13,10,0,4,32669,25,0,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1000,-100,-200,0,1,10,1,13,11,0,4,32669,25,0,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1001,-100,-190,0,1,11,1,13,12,0,4,32669,25,0,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1002,-100,-180,0,1,12,1,13,13,0,4,32669,25,0,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1003,-100,-170,0,1,13,1,13,14,0,4,32669,25,1,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1004,-100,-160,0,1,14,1,13,15,0,4,32669,25,1,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1005,-100,-150,0,1,15,1,13,16,0,4,32669,25,1,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1006,-100,-140,0,1,16,1,13,17,0,4,32669,25,1,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1007,-100,-130,0,1,17,1,13,18,0,4,32669,25,2,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1008,-100,-120,0,1,18,1,13,19,0,4,32669,25,2,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1009,-100,-110,0,1,19,1,13,20,0,4,32669,25,2,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1010,-100,-100,0,1,20,1,13,21,0,4,32669,25,2,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1011,-100,-90,0,1,21,1,13,22,0,4,32669,25,3,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1012,-100,-80,0,1,22,1,13,23,0,4,32669,25,3,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1013,-100,-70,0,1,23,1,13,24,0,4,32669,25,3,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1014,-100,-60,0,1,24,1,13,25,0,4,32669,25,3,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1015,-100,-50,0,1,25,1,13,26,0,4,32669,25,4,0,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1016,-100,-40,0,1,26,1,13,27,0,4,32669,25,4,1,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1017,-100,-30,0,1,27,1,13,28,0,4,32669,25,4,2,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1018,-100,-20,0,1,28,1,13,29,0,4,32669,25,4,3,ON +16,-0.902975,-0.144649,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1019,-100,-10,0,1,29,1,14,0,0,4,32669,25,5,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1020,100,-300,0,0,0,1,14,1,0,4,32669,25,5,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1021,100,-290,0,0,1,1,14,2,0,4,32669,25,5,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1022,100,-280,0,0,2,1,14,3,0,4,32669,25,5,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1023,100,-270,0,0,3,1,14,4,0,4,32669,25,6,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1024,100,-260,0,0,4,1,14,5,0,4,32669,25,6,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1025,100,-250,0,0,5,1,14,6,0,4,32669,25,6,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1026,100,-240,0,0,6,1,14,7,0,4,32669,25,6,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1027,100,-230,0,0,7,1,14,8,0,4,32669,25,7,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1028,100,-220,0,0,8,1,14,9,0,4,32669,25,7,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1029,100,-210,0,0,9,1,14,10,0,4,32669,25,7,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1030,100,-200,0,0,10,1,14,11,0,4,32669,25,7,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1031,100,-190,0,0,11,1,14,12,0,4,32669,25,8,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1032,100,-180,0,0,12,1,14,13,0,4,32669,25,8,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1033,100,-170,0,0,13,1,14,14,0,4,32669,25,8,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1034,100,-160,0,0,14,1,14,15,0,4,32669,25,8,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1035,100,-150,0,0,15,1,14,16,0,4,32669,25,9,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1036,100,-140,0,0,16,1,14,17,0,4,32669,25,9,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1037,100,-130,0,0,17,1,14,18,0,4,32669,25,9,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1038,100,-120,0,0,18,1,14,19,0,4,32669,25,9,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1039,100,-110,0,0,19,1,14,20,0,4,32669,26,0,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1040,100,-100,0,0,20,1,14,21,0,4,32669,26,0,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1041,100,-90,0,0,21,1,14,22,0,4,32669,26,0,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1042,100,-80,0,0,22,1,14,23,0,4,32669,26,0,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1043,100,-70,0,0,23,1,14,24,0,4,32669,26,1,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1044,100,-60,0,0,24,1,14,25,0,4,32669,26,1,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1045,100,-50,0,0,25,1,14,26,0,4,32669,26,1,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1046,100,-40,0,0,26,1,14,27,0,4,32669,26,1,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1047,100,-30,0,0,27,1,14,28,0,4,32669,26,2,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1048,100,-20,0,0,28,1,14,29,0,4,32669,26,2,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1049,100,-10,0,0,29,1,15,0,0,4,32669,26,2,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1050,-100,-300,0,1,0,1,15,1,0,4,32669,26,2,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1051,-100,-290,0,1,1,1,15,2,0,4,32669,26,3,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1052,-100,-280,0,1,2,1,15,3,0,4,32669,26,3,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1053,-100,-270,0,1,3,1,15,4,0,4,32669,26,3,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1054,-100,-260,0,1,4,1,15,5,0,4,32669,26,3,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1055,-100,-250,0,1,5,1,15,6,0,4,32669,26,4,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1056,-100,-240,0,1,6,1,15,7,0,4,32669,26,4,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1057,-100,-230,0,1,7,1,15,8,0,4,32669,26,4,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1058,-100,-220,0,1,8,1,15,9,0,4,32669,26,4,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1059,-100,-210,0,1,9,1,15,10,0,4,32669,26,5,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1060,-100,-200,0,1,10,1,15,11,0,4,32669,26,5,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1061,-100,-190,0,1,11,1,15,12,0,4,32669,26,5,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1062,-100,-180,0,1,12,1,15,13,0,4,32669,26,5,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1063,-100,-170,0,1,13,1,15,14,0,4,32669,26,6,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1064,-100,-160,0,1,14,1,15,15,0,4,32669,26,6,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1065,-100,-150,0,1,15,1,15,16,0,4,32669,26,6,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1066,-100,-140,0,1,16,1,15,17,0,4,32669,26,6,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1067,-100,-130,0,1,17,1,15,18,0,4,32669,26,7,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1068,-100,-120,0,1,18,1,15,19,0,4,32669,26,7,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1069,-100,-110,0,1,19,1,15,20,0,4,32669,26,7,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1070,-100,-100,0,1,20,1,15,21,0,4,32669,26,7,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1071,-100,-90,0,1,21,1,15,22,0,4,32669,26,8,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1072,-100,-80,0,1,22,1,15,23,0,4,32669,26,8,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1073,-100,-70,0,1,23,1,15,24,0,4,32669,26,8,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1074,-100,-60,0,1,24,1,15,25,0,4,32669,26,8,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1075,-100,-50,0,1,25,1,15,26,0,4,32669,26,9,0,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1076,-100,-40,0,1,26,1,15,27,0,4,32669,26,9,1,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1077,-100,-30,0,1,27,1,15,28,0,4,32669,26,9,2,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1078,-100,-20,0,1,28,1,15,29,0,4,32669,26,9,3,ON +17,-0.902975,0.637851,2.58398,0.707107,0,-0.707107,lappd_v1,ON,1079,-100,-10,0,1,29,1,16,0,0,4,32669,27,0,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1080,100,-300,0,0,0,1,16,1,0,4,32669,27,0,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1081,100,-290,0,0,1,1,16,2,0,4,32669,27,0,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1082,100,-280,0,0,2,1,16,3,0,4,32669,27,0,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1083,100,-270,0,0,3,1,16,4,0,4,32669,27,1,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1084,100,-260,0,0,4,1,16,5,0,4,32669,27,1,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1085,100,-250,0,0,5,1,16,6,0,4,32669,27,1,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1086,100,-240,0,0,6,1,16,7,0,4,32669,27,1,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1087,100,-230,0,0,7,1,16,8,0,4,32669,27,2,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1088,100,-220,0,0,8,1,16,9,0,4,32669,27,2,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1089,100,-210,0,0,9,1,16,10,0,4,32669,27,2,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1090,100,-200,0,0,10,1,16,11,0,4,32669,27,2,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1091,100,-190,0,0,11,1,16,12,0,4,32669,27,3,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1092,100,-180,0,0,12,1,16,13,0,4,32669,27,3,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1093,100,-170,0,0,13,1,16,14,0,4,32669,27,3,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1094,100,-160,0,0,14,1,16,15,0,4,32669,27,3,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1095,100,-150,0,0,15,1,16,16,0,4,32669,27,4,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1096,100,-140,0,0,16,1,16,17,0,4,32669,27,4,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1097,100,-130,0,0,17,1,16,18,0,4,32669,27,4,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1098,100,-120,0,0,18,1,16,19,0,4,32669,27,4,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1099,100,-110,0,0,19,1,16,20,0,4,32669,27,5,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1100,100,-100,0,0,20,1,16,21,0,4,32669,27,5,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1101,100,-90,0,0,21,1,16,22,0,4,32669,27,5,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1102,100,-80,0,0,22,1,16,23,0,4,32669,27,5,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1103,100,-70,0,0,23,1,16,24,0,4,32669,27,6,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1104,100,-60,0,0,24,1,16,25,0,4,32669,27,6,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1105,100,-50,0,0,25,1,16,26,0,4,32669,27,6,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1106,100,-40,0,0,26,1,16,27,0,4,32669,27,6,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1107,100,-30,0,0,27,1,16,28,0,4,32669,27,7,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1108,100,-20,0,0,28,1,16,29,0,4,32669,27,7,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1109,100,-10,0,0,29,1,17,0,0,4,32669,27,7,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1110,-100,-300,0,1,0,1,17,1,0,4,32669,27,7,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1111,-100,-290,0,1,1,1,17,2,0,4,32669,27,8,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1112,-100,-280,0,1,2,1,17,3,0,4,32669,27,8,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1113,-100,-270,0,1,3,1,17,4,0,4,32669,27,8,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1114,-100,-260,0,1,4,1,17,5,0,4,32669,27,8,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1115,-100,-250,0,1,5,1,17,6,0,4,32669,27,9,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1116,-100,-240,0,1,6,1,17,7,0,4,32669,27,9,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1117,-100,-230,0,1,7,1,17,8,0,4,32669,27,9,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1118,-100,-220,0,1,8,1,17,9,0,4,32669,27,9,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1119,-100,-210,0,1,9,1,17,10,0,4,32669,28,0,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1120,-100,-200,0,1,10,1,17,11,0,4,32669,28,0,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1121,-100,-190,0,1,11,1,17,12,0,4,32669,28,0,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1122,-100,-180,0,1,12,1,17,13,0,4,32669,28,0,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1123,-100,-170,0,1,13,1,17,14,0,4,32669,28,1,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1124,-100,-160,0,1,14,1,17,15,0,4,32669,28,1,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1125,-100,-150,0,1,15,1,17,16,0,4,32669,28,1,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1126,-100,-140,0,1,16,1,17,17,0,4,32669,28,1,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1127,-100,-130,0,1,17,1,17,18,0,4,32669,28,2,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1128,-100,-120,0,1,18,1,17,19,0,4,32669,28,2,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1129,-100,-110,0,1,19,1,17,20,0,4,32669,28,2,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1130,-100,-100,0,1,20,1,17,21,0,4,32669,28,2,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1131,-100,-90,0,1,21,1,17,22,0,4,32669,28,3,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1132,-100,-80,0,1,22,1,17,23,0,4,32669,28,3,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1133,-100,-70,0,1,23,1,17,24,0,4,32669,28,3,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1134,-100,-60,0,1,24,1,17,25,0,4,32669,28,3,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1135,-100,-50,0,1,25,1,17,26,0,4,32669,28,4,0,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1136,-100,-40,0,1,26,1,17,27,0,4,32669,28,4,1,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1137,-100,-30,0,1,27,1,17,28,0,4,32669,28,4,2,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1138,-100,-20,0,1,28,1,17,29,0,4,32669,28,4,3,ON +18,-1.277,-0.927149,1.681,1,0,0,lappd_v1,ON,1139,-100,-10,0,1,29,1,18,0,0,4,32669,28,5,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1140,100,-300,0,0,0,1,18,1,0,4,32669,28,5,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1141,100,-290,0,0,1,1,18,2,0,4,32669,28,5,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1142,100,-280,0,0,2,1,18,3,0,4,32669,28,5,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1143,100,-270,0,0,3,1,18,4,0,4,32669,28,6,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1144,100,-260,0,0,4,1,18,5,0,4,32669,28,6,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1145,100,-250,0,0,5,1,18,6,0,4,32669,28,6,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1146,100,-240,0,0,6,1,18,7,0,4,32669,28,6,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1147,100,-230,0,0,7,1,18,8,0,4,32669,28,7,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1148,100,-220,0,0,8,1,18,9,0,4,32669,28,7,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1149,100,-210,0,0,9,1,18,10,0,4,32669,28,7,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1150,100,-200,0,0,10,1,18,11,0,4,32669,28,7,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1151,100,-190,0,0,11,1,18,12,0,4,32669,28,8,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1152,100,-180,0,0,12,1,18,13,0,4,32669,28,8,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1153,100,-170,0,0,13,1,18,14,0,4,32669,28,8,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1154,100,-160,0,0,14,1,18,15,0,4,32669,28,8,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1155,100,-150,0,0,15,1,18,16,0,4,32669,28,9,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1156,100,-140,0,0,16,1,18,17,0,4,32669,28,9,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1157,100,-130,0,0,17,1,18,18,0,4,32669,28,9,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1158,100,-120,0,0,18,1,18,19,0,4,32669,28,9,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1159,100,-110,0,0,19,1,18,20,0,4,32669,29,0,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1160,100,-100,0,0,20,1,18,21,0,4,32669,29,0,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1161,100,-90,0,0,21,1,18,22,0,4,32669,29,0,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1162,100,-80,0,0,22,1,18,23,0,4,32669,29,0,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1163,100,-70,0,0,23,1,18,24,0,4,32669,29,1,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1164,100,-60,0,0,24,1,18,25,0,4,32669,29,1,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1165,100,-50,0,0,25,1,18,26,0,4,32669,29,1,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1166,100,-40,0,0,26,1,18,27,0,4,32669,29,1,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1167,100,-30,0,0,27,1,18,28,0,4,32669,29,2,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1168,100,-20,0,0,28,1,18,29,0,4,32669,29,2,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1169,100,-10,0,0,29,1,19,0,0,4,32669,29,2,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1170,-100,-300,0,1,0,1,19,1,0,4,32669,29,2,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1171,-100,-290,0,1,1,1,19,2,0,4,32669,29,3,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1172,-100,-280,0,1,2,1,19,3,0,4,32669,29,3,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1173,-100,-270,0,1,3,1,19,4,0,4,32669,29,3,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1174,-100,-260,0,1,4,1,19,5,0,4,32669,29,3,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1175,-100,-250,0,1,5,1,19,6,0,4,32669,29,4,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1176,-100,-240,0,1,6,1,19,7,0,4,32669,29,4,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1177,-100,-230,0,1,7,1,19,8,0,4,32669,29,4,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1178,-100,-220,0,1,8,1,19,9,0,4,32669,29,4,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1179,-100,-210,0,1,9,1,19,10,0,4,32669,29,5,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1180,-100,-200,0,1,10,1,19,11,0,4,32669,29,5,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1181,-100,-190,0,1,11,1,19,12,0,4,32669,29,5,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1182,-100,-180,0,1,12,1,19,13,0,4,32669,29,5,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1183,-100,-170,0,1,13,1,19,14,0,4,32669,29,6,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1184,-100,-160,0,1,14,1,19,15,0,4,32669,29,6,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1185,-100,-150,0,1,15,1,19,16,0,4,32669,29,6,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1186,-100,-140,0,1,16,1,19,17,0,4,32669,29,6,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1187,-100,-130,0,1,17,1,19,18,0,4,32669,29,7,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1188,-100,-120,0,1,18,1,19,19,0,4,32669,29,7,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1189,-100,-110,0,1,19,1,19,20,0,4,32669,29,7,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1190,-100,-100,0,1,20,1,19,21,0,4,32669,29,7,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1191,-100,-90,0,1,21,1,19,22,0,4,32669,29,8,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1192,-100,-80,0,1,22,1,19,23,0,4,32669,29,8,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1193,-100,-70,0,1,23,1,19,24,0,4,32669,29,8,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1194,-100,-60,0,1,24,1,19,25,0,4,32669,29,8,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1195,-100,-50,0,1,25,1,19,26,0,4,32669,29,9,0,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1196,-100,-40,0,1,26,1,19,27,0,4,32669,29,9,1,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1197,-100,-30,0,1,27,1,19,28,0,4,32669,29,9,2,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1198,-100,-20,0,1,28,1,19,29,0,4,32669,29,9,3,ON +19,-1.277,-0.144649,1.681,1,0,0,lappd_v1,ON,1199,-100,-10,0,1,29,2,0,0,0,5,32669,30,0,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1200,100,-300,0,0,0,2,0,1,0,5,32669,30,0,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1201,100,-290,0,0,1,2,0,2,0,5,32669,30,0,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1202,100,-280,0,0,2,2,0,3,0,5,32669,30,0,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1203,100,-270,0,0,3,2,0,4,0,5,32669,30,1,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1204,100,-260,0,0,4,2,0,5,0,5,32669,30,1,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1205,100,-250,0,0,5,2,0,6,0,5,32669,30,1,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1206,100,-240,0,0,6,2,0,7,0,5,32669,30,1,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1207,100,-230,0,0,7,2,0,8,0,5,32669,30,2,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1208,100,-220,0,0,8,2,0,9,0,5,32669,30,2,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1209,100,-210,0,0,9,2,0,10,0,5,32669,30,2,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1210,100,-200,0,0,10,2,0,11,0,5,32669,30,2,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1211,100,-190,0,0,11,2,0,12,0,5,32669,30,3,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1212,100,-180,0,0,12,2,0,13,0,5,32669,30,3,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1213,100,-170,0,0,13,2,0,14,0,5,32669,30,3,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1214,100,-160,0,0,14,2,0,15,0,5,32669,30,3,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1215,100,-150,0,0,15,2,0,16,0,5,32669,30,4,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1216,100,-140,0,0,16,2,0,17,0,5,32669,30,4,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1217,100,-130,0,0,17,2,0,18,0,5,32669,30,4,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1218,100,-120,0,0,18,2,0,19,0,5,32669,30,4,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1219,100,-110,0,0,19,2,0,20,0,5,32669,30,5,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1220,100,-100,0,0,20,2,0,21,0,5,32669,30,5,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1221,100,-90,0,0,21,2,0,22,0,5,32669,30,5,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1222,100,-80,0,0,22,2,0,23,0,5,32669,30,5,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1223,100,-70,0,0,23,2,0,24,0,5,32669,30,6,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1224,100,-60,0,0,24,2,0,25,0,5,32669,30,6,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1225,100,-50,0,0,25,2,0,26,0,5,32669,30,6,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1226,100,-40,0,0,26,2,0,27,0,5,32669,30,6,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1227,100,-30,0,0,27,2,0,28,0,5,32669,30,7,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1228,100,-20,0,0,28,2,0,29,0,5,32669,30,7,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1229,100,-10,0,0,29,2,1,0,0,5,32669,30,7,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1230,-100,-300,0,1,0,2,1,1,0,5,32669,30,7,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1231,-100,-290,0,1,1,2,1,2,0,5,32669,30,8,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1232,-100,-280,0,1,2,2,1,3,0,5,32669,30,8,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1233,-100,-270,0,1,3,2,1,4,0,5,32669,30,8,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1234,-100,-260,0,1,4,2,1,5,0,5,32669,30,8,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1235,-100,-250,0,1,5,2,1,6,0,5,32669,30,9,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1236,-100,-240,0,1,6,2,1,7,0,5,32669,30,9,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1237,-100,-230,0,1,7,2,1,8,0,5,32669,30,9,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1238,-100,-220,0,1,8,2,1,9,0,5,32669,30,9,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1239,-100,-210,0,1,9,2,1,10,0,5,32669,31,0,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1240,-100,-200,0,1,10,2,1,11,0,5,32669,31,0,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1241,-100,-190,0,1,11,2,1,12,0,5,32669,31,0,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1242,-100,-180,0,1,12,2,1,13,0,5,32669,31,0,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1243,-100,-170,0,1,13,2,1,14,0,5,32669,31,1,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1244,-100,-160,0,1,14,2,1,15,0,5,32669,31,1,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1245,-100,-150,0,1,15,2,1,16,0,5,32669,31,1,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1246,-100,-140,0,1,16,2,1,17,0,5,32669,31,1,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1247,-100,-130,0,1,17,2,1,18,0,5,32669,31,2,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1248,-100,-120,0,1,18,2,1,19,0,5,32669,31,2,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1249,-100,-110,0,1,19,2,1,20,0,5,32669,31,2,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1250,-100,-100,0,1,20,2,1,21,0,5,32669,31,2,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1251,-100,-90,0,1,21,2,1,22,0,5,32669,31,3,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1252,-100,-80,0,1,22,2,1,23,0,5,32669,31,3,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1253,-100,-70,0,1,23,2,1,24,0,5,32669,31,3,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1254,-100,-60,0,1,24,2,1,25,0,5,32669,31,3,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1255,-100,-50,0,1,25,2,1,26,0,5,32669,31,4,0,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1256,-100,-40,0,1,26,2,1,27,0,5,32669,31,4,1,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1257,-100,-30,0,1,27,2,1,28,0,5,32669,31,4,2,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1258,-100,-20,0,1,28,2,1,29,0,5,32669,31,4,3,ON +20,-1.277,0.637851,1.681,1,0,0,lappd_v1,ON,1259,-100,-10,0,1,29,2,2,0,0,5,32669,31,5,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1260,100,-300,0,0,0,2,2,1,0,5,32669,31,5,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1261,100,-290,0,0,1,2,2,2,0,5,32669,31,5,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1262,100,-280,0,0,2,2,2,3,0,5,32669,31,5,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1263,100,-270,0,0,3,2,2,4,0,5,32669,31,6,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1264,100,-260,0,0,4,2,2,5,0,5,32669,31,6,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1265,100,-250,0,0,5,2,2,6,0,5,32669,31,6,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1266,100,-240,0,0,6,2,2,7,0,5,32669,31,6,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1267,100,-230,0,0,7,2,2,8,0,5,32669,31,7,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1268,100,-220,0,0,8,2,2,9,0,5,32669,31,7,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1269,100,-210,0,0,9,2,2,10,0,5,32669,31,7,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1270,100,-200,0,0,10,2,2,11,0,5,32669,31,7,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1271,100,-190,0,0,11,2,2,12,0,5,32669,31,8,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1272,100,-180,0,0,12,2,2,13,0,5,32669,31,8,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1273,100,-170,0,0,13,2,2,14,0,5,32669,31,8,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1274,100,-160,0,0,14,2,2,15,0,5,32669,31,8,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1275,100,-150,0,0,15,2,2,16,0,5,32669,31,9,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1276,100,-140,0,0,16,2,2,17,0,5,32669,31,9,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1277,100,-130,0,0,17,2,2,18,0,5,32669,31,9,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1278,100,-120,0,0,18,2,2,19,0,5,32669,31,9,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1279,100,-110,0,0,19,2,2,20,0,5,32669,32,0,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1280,100,-100,0,0,20,2,2,21,0,5,32669,32,0,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1281,100,-90,0,0,21,2,2,22,0,5,32669,32,0,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1282,100,-80,0,0,22,2,2,23,0,5,32669,32,0,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1283,100,-70,0,0,23,2,2,24,0,5,32669,32,1,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1284,100,-60,0,0,24,2,2,25,0,5,32669,32,1,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1285,100,-50,0,0,25,2,2,26,0,5,32669,32,1,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1286,100,-40,0,0,26,2,2,27,0,5,32669,32,1,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1287,100,-30,0,0,27,2,2,28,0,5,32669,32,2,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1288,100,-20,0,0,28,2,2,29,0,5,32669,32,2,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1289,100,-10,0,0,29,2,3,0,0,5,32669,32,2,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1290,-100,-300,0,1,0,2,3,1,0,5,32669,32,2,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1291,-100,-290,0,1,1,2,3,2,0,5,32669,32,3,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1292,-100,-280,0,1,2,2,3,3,0,5,32669,32,3,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1293,-100,-270,0,1,3,2,3,4,0,5,32669,32,3,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1294,-100,-260,0,1,4,2,3,5,0,5,32669,32,3,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1295,-100,-250,0,1,5,2,3,6,0,5,32669,32,4,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1296,-100,-240,0,1,6,2,3,7,0,5,32669,32,4,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1297,-100,-230,0,1,7,2,3,8,0,5,32669,32,4,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1298,-100,-220,0,1,8,2,3,9,0,5,32669,32,4,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1299,-100,-210,0,1,9,2,3,10,0,5,32669,32,5,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1300,-100,-200,0,1,10,2,3,11,0,5,32669,32,5,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1301,-100,-190,0,1,11,2,3,12,0,5,32669,32,5,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1302,-100,-180,0,1,12,2,3,13,0,5,32669,32,5,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1303,-100,-170,0,1,13,2,3,14,0,5,32669,32,6,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1304,-100,-160,0,1,14,2,3,15,0,5,32669,32,6,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1305,-100,-150,0,1,15,2,3,16,0,5,32669,32,6,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1306,-100,-140,0,1,16,2,3,17,0,5,32669,32,6,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1307,-100,-130,0,1,17,2,3,18,0,5,32669,32,7,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1308,-100,-120,0,1,18,2,3,19,0,5,32669,32,7,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1309,-100,-110,0,1,19,2,3,20,0,5,32669,32,7,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1310,-100,-100,0,1,20,2,3,21,0,5,32669,32,7,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1311,-100,-90,0,1,21,2,3,22,0,5,32669,32,8,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1312,-100,-80,0,1,22,2,3,23,0,5,32669,32,8,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1313,-100,-70,0,1,23,2,3,24,0,5,32669,32,8,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1314,-100,-60,0,1,24,2,3,25,0,5,32669,32,8,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1315,-100,-50,0,1,25,2,3,26,0,5,32669,32,9,0,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1316,-100,-40,0,1,26,2,3,27,0,5,32669,32,9,1,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1317,-100,-30,0,1,27,2,3,28,0,5,32669,32,9,2,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1318,-100,-20,0,1,28,2,3,29,0,5,32669,32,9,3,ON +21,-0.902975,-0.927149,0.778025,0.707107,0,0.707107,lappd_v1,ON,1319,-100,-10,0,1,29,2,4,0,0,5,32669,33,0,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1320,100,-300,0,0,0,2,4,1,0,5,32669,33,0,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1321,100,-290,0,0,1,2,4,2,0,5,32669,33,0,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1322,100,-280,0,0,2,2,4,3,0,5,32669,33,0,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1323,100,-270,0,0,3,2,4,4,0,5,32669,33,1,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1324,100,-260,0,0,4,2,4,5,0,5,32669,33,1,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1325,100,-250,0,0,5,2,4,6,0,5,32669,33,1,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1326,100,-240,0,0,6,2,4,7,0,5,32669,33,1,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1327,100,-230,0,0,7,2,4,8,0,5,32669,33,2,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1328,100,-220,0,0,8,2,4,9,0,5,32669,33,2,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1329,100,-210,0,0,9,2,4,10,0,5,32669,33,2,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1330,100,-200,0,0,10,2,4,11,0,5,32669,33,2,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1331,100,-190,0,0,11,2,4,12,0,5,32669,33,3,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1332,100,-180,0,0,12,2,4,13,0,5,32669,33,3,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1333,100,-170,0,0,13,2,4,14,0,5,32669,33,3,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1334,100,-160,0,0,14,2,4,15,0,5,32669,33,3,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1335,100,-150,0,0,15,2,4,16,0,5,32669,33,4,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1336,100,-140,0,0,16,2,4,17,0,5,32669,33,4,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1337,100,-130,0,0,17,2,4,18,0,5,32669,33,4,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1338,100,-120,0,0,18,2,4,19,0,5,32669,33,4,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1339,100,-110,0,0,19,2,4,20,0,5,32669,33,5,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1340,100,-100,0,0,20,2,4,21,0,5,32669,33,5,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1341,100,-90,0,0,21,2,4,22,0,5,32669,33,5,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1342,100,-80,0,0,22,2,4,23,0,5,32669,33,5,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1343,100,-70,0,0,23,2,4,24,0,5,32669,33,6,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1344,100,-60,0,0,24,2,4,25,0,5,32669,33,6,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1345,100,-50,0,0,25,2,4,26,0,5,32669,33,6,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1346,100,-40,0,0,26,2,4,27,0,5,32669,33,6,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1347,100,-30,0,0,27,2,4,28,0,5,32669,33,7,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1348,100,-20,0,0,28,2,4,29,0,5,32669,33,7,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1349,100,-10,0,0,29,2,5,0,0,5,32669,33,7,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1350,-100,-300,0,1,0,2,5,1,0,5,32669,33,7,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1351,-100,-290,0,1,1,2,5,2,0,5,32669,33,8,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1352,-100,-280,0,1,2,2,5,3,0,5,32669,33,8,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1353,-100,-270,0,1,3,2,5,4,0,5,32669,33,8,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1354,-100,-260,0,1,4,2,5,5,0,5,32669,33,8,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1355,-100,-250,0,1,5,2,5,6,0,5,32669,33,9,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1356,-100,-240,0,1,6,2,5,7,0,5,32669,33,9,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1357,-100,-230,0,1,7,2,5,8,0,5,32669,33,9,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1358,-100,-220,0,1,8,2,5,9,0,5,32669,33,9,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1359,-100,-210,0,1,9,2,5,10,0,5,32669,34,0,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1360,-100,-200,0,1,10,2,5,11,0,5,32669,34,0,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1361,-100,-190,0,1,11,2,5,12,0,5,32669,34,0,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1362,-100,-180,0,1,12,2,5,13,0,5,32669,34,0,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1363,-100,-170,0,1,13,2,5,14,0,5,32669,34,1,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1364,-100,-160,0,1,14,2,5,15,0,5,32669,34,1,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1365,-100,-150,0,1,15,2,5,16,0,5,32669,34,1,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1366,-100,-140,0,1,16,2,5,17,0,5,32669,34,1,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1367,-100,-130,0,1,17,2,5,18,0,5,32669,34,2,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1368,-100,-120,0,1,18,2,5,19,0,5,32669,34,2,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1369,-100,-110,0,1,19,2,5,20,0,5,32669,34,2,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1370,-100,-100,0,1,20,2,5,21,0,5,32669,34,2,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1371,-100,-90,0,1,21,2,5,22,0,5,32669,34,3,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1372,-100,-80,0,1,22,2,5,23,0,5,32669,34,3,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1373,-100,-70,0,1,23,2,5,24,0,5,32669,34,3,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1374,-100,-60,0,1,24,2,5,25,0,5,32669,34,3,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1375,-100,-50,0,1,25,2,5,26,0,5,32669,34,4,0,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1376,-100,-40,0,1,26,2,5,27,0,5,32669,34,4,1,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1377,-100,-30,0,1,27,2,5,28,0,5,32669,34,4,2,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1378,-100,-20,0,1,28,2,5,29,0,5,32669,34,4,3,ON +22,-0.902975,-0.144649,0.778025,0.707107,0,0.707107,lappd_v1,ON,1379,-100,-10,0,1,29,2,6,0,0,5,32669,34,5,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1380,100,-300,0,0,0,2,6,1,0,5,32669,34,5,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1381,100,-290,0,0,1,2,6,2,0,5,32669,34,5,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1382,100,-280,0,0,2,2,6,3,0,5,32669,34,5,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1383,100,-270,0,0,3,2,6,4,0,5,32669,34,6,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1384,100,-260,0,0,4,2,6,5,0,5,32669,34,6,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1385,100,-250,0,0,5,2,6,6,0,5,32669,34,6,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1386,100,-240,0,0,6,2,6,7,0,5,32669,34,6,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1387,100,-230,0,0,7,2,6,8,0,5,32669,34,7,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1388,100,-220,0,0,8,2,6,9,0,5,32669,34,7,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1389,100,-210,0,0,9,2,6,10,0,5,32669,34,7,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1390,100,-200,0,0,10,2,6,11,0,5,32669,34,7,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1391,100,-190,0,0,11,2,6,12,0,5,32669,34,8,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1392,100,-180,0,0,12,2,6,13,0,5,32669,34,8,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1393,100,-170,0,0,13,2,6,14,0,5,32669,34,8,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1394,100,-160,0,0,14,2,6,15,0,5,32669,34,8,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1395,100,-150,0,0,15,2,6,16,0,5,32669,34,9,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1396,100,-140,0,0,16,2,6,17,0,5,32669,34,9,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1397,100,-130,0,0,17,2,6,18,0,5,32669,34,9,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1398,100,-120,0,0,18,2,6,19,0,5,32669,34,9,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1399,100,-110,0,0,19,2,6,20,0,5,32669,35,0,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1400,100,-100,0,0,20,2,6,21,0,5,32669,35,0,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1401,100,-90,0,0,21,2,6,22,0,5,32669,35,0,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1402,100,-80,0,0,22,2,6,23,0,5,32669,35,0,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1403,100,-70,0,0,23,2,6,24,0,5,32669,35,1,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1404,100,-60,0,0,24,2,6,25,0,5,32669,35,1,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1405,100,-50,0,0,25,2,6,26,0,5,32669,35,1,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1406,100,-40,0,0,26,2,6,27,0,5,32669,35,1,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1407,100,-30,0,0,27,2,6,28,0,5,32669,35,2,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1408,100,-20,0,0,28,2,6,29,0,5,32669,35,2,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1409,100,-10,0,0,29,2,7,0,0,5,32669,35,2,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1410,-100,-300,0,1,0,2,7,1,0,5,32669,35,2,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1411,-100,-290,0,1,1,2,7,2,0,5,32669,35,3,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1412,-100,-280,0,1,2,2,7,3,0,5,32669,35,3,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1413,-100,-270,0,1,3,2,7,4,0,5,32669,35,3,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1414,-100,-260,0,1,4,2,7,5,0,5,32669,35,3,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1415,-100,-250,0,1,5,2,7,6,0,5,32669,35,4,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1416,-100,-240,0,1,6,2,7,7,0,5,32669,35,4,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1417,-100,-230,0,1,7,2,7,8,0,5,32669,35,4,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1418,-100,-220,0,1,8,2,7,9,0,5,32669,35,4,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1419,-100,-210,0,1,9,2,7,10,0,5,32669,35,5,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1420,-100,-200,0,1,10,2,7,11,0,5,32669,35,5,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1421,-100,-190,0,1,11,2,7,12,0,5,32669,35,5,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1422,-100,-180,0,1,12,2,7,13,0,5,32669,35,5,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1423,-100,-170,0,1,13,2,7,14,0,5,32669,35,6,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1424,-100,-160,0,1,14,2,7,15,0,5,32669,35,6,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1425,-100,-150,0,1,15,2,7,16,0,5,32669,35,6,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1426,-100,-140,0,1,16,2,7,17,0,5,32669,35,6,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1427,-100,-130,0,1,17,2,7,18,0,5,32669,35,7,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1428,-100,-120,0,1,18,2,7,19,0,5,32669,35,7,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1429,-100,-110,0,1,19,2,7,20,0,5,32669,35,7,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1430,-100,-100,0,1,20,2,7,21,0,5,32669,35,7,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1431,-100,-90,0,1,21,2,7,22,0,5,32669,35,8,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1432,-100,-80,0,1,22,2,7,23,0,5,32669,35,8,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1433,-100,-70,0,1,23,2,7,24,0,5,32669,35,8,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1434,-100,-60,0,1,24,2,7,25,0,5,32669,35,8,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1435,-100,-50,0,1,25,2,7,26,0,5,32669,35,9,0,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1436,-100,-40,0,1,26,2,7,27,0,5,32669,35,9,1,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1437,-100,-30,0,1,27,2,7,28,0,5,32669,35,9,2,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1438,-100,-20,0,1,28,2,7,29,0,5,32669,35,9,3,ON +23,-0.902975,0.637851,0.778025,0.707107,0,0.707107,lappd_v1,ON,1439,-100,-10,0,1,29,2,8,0,0,6,32669,36,0,0,ON +DATA_END,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/configfiles/MuonFitter/README.md b/configfiles/MuonFitter/README.md new file mode 100644 index 000000000..0421158c1 --- /dev/null +++ b/configfiles/MuonFitter/README.md @@ -0,0 +1,43 @@ +#MuonFitter Config + +*********************** +#Description +********************** + +Date created: 2024-10-02 +The MuonFitter toolchain makes an attempt to fit muons using hit information. + +The Tool has 2 modes. The first mode is pre-reconstruction. It takes input information from the ANNIEEvent and generates a text file containing hit information for the RNN. It is advisable to include minimal tools in this ToolChain, as the same data must be re-analysed with ToolAnalysis later. + +This text file produced in this step is then processed by a standalone python script (Fit_data.py), which outputs fitted information into a new text file. + +The second mode is reconstruction. In this mode the Tool reads information from the ANNIEEvent, along with both text files from the previous two steps (the first mode and the python script) and reconstructs the vertex based on the fitted paths. The resulting muon fit information is passed into the DataModel. + +More detailed instructions are below. + +************************ +#Usage +************************ + +To generate (train) a model: +============================ + +1. Data_prepare.py + +2. RNN_train.py + +NOTE: Data_prepare.py requires input files that do not yet exist on the ANNIE gpvms; as a result the model cannot at present be re-trained. +Previously generated models are stored in /pnfs/annie/persistent/simulations/models/MuonFitter/ which may be used. + +Please update any paths in the Tool configuration and Fit_data.py accordingly, or copy the appropriate model files to the configfiles/MuonFitter/RNNFit directory. + +To analyse data: +================ + +1. First, run a ToolChain containing the MuonFitter Tool configured in "RecoMode 0". This will generate a file: ev_ai_eta_R{RUN}.txt with a {RUN} number corresponding to the WCSim run number. You should not include any Tools further along the ToolChain for this step. + +2. Second, run "python3 Fit_data.py ev_ai_eta_R{RUN}.txt". This will apply the fitting and generate another textfile to be ran in ToolAnalysis: tanktrackfitfile_r{RUN}_RNN.txt. Again: please update any paths such that all files and models are available. + +NOTE: the script RNNFit/rnn_fit.sh can act as a helper to process multiple ev_ai_eta_R{RUN}.txt files. Be sure to update the path in the script to point to your ev_ai_eta text files from step 1. + +3. Finally, run a ToolChain containing the MuonFitter Tool configured in "RecoMode 1". Please set the paths for the ev_ai_eta_R{RUN}.txt and tanktrackfitfile_r{RUN}_RNN.txt in the MuonFitter config file accordingly. You may include any downstream tools you desire for further analysis. See the UserTools/MuonFitter/README.md for short descriptions of information saved to the DataModel and how to access them. diff --git a/configfiles/MuonFitter/RNNFit/Data_prepare.py b/configfiles/MuonFitter/RNNFit/Data_prepare.py new file mode 100644 index 000000000..e3d519dce --- /dev/null +++ b/configfiles/MuonFitter/RNNFit/Data_prepare.py @@ -0,0 +1,49 @@ +# coding: utf-8 + +# # Import modules +import pandas as pd +import json + + +# # Prepare data into pandas DataFrame +dataX = pd.read_csv("/home/jhe/annie/analysis/Muon_vertex/X.txt",sep=',',header=None,names=['id','ai','eta']) #ai is track segment +dataY = pd.read_csv("/home/jhe/annie/analysis/Muon_vertex/Y.txt",sep=',',header=None,names=['id','truetracklen']) +# dataX['combine'] = dataX[['X','Y']].values.tolist() + + +# ### Preview dataframes +dataX.head(5) +dataY.head(5) + + +# # Aggregate data and filter out extremely long and negative tracks +grouped = dataX.groupby('id').agg(list).reset_index() +data = pd.merge(grouped, dataY, on='id') +print("after merge: " + str(len(data))) +criteria = data['truetracklen'] > 1000 +data = data[~criteria] +print("after first filter (>1000): " + str(len(data))) +critiera = data['truetracklen'] < 0 +data = data[~criteria] +print("after second filter (<0): " + str(len(data))) +print(data.columns) +data.head(10) + + +# # Prepare data into json format +json_data = data.to_json(orient='index') + + +# # Save json data into .json file +file_path = './data.json' +with open(file_path, 'w') as json_file: + json_file.write(json_data) + + +# # Save pandas DataFrame as csv file +data.to_csv('./data.csv', index=False) + + +# # Save data into h5 file << USE THIS ONE +data.to_hdf("./data.h5",key='df') + diff --git a/configfiles/MuonFitter/RNNFit/Fit_data.py b/configfiles/MuonFitter/RNNFit/Fit_data.py new file mode 100644 index 000000000..6bccecd82 --- /dev/null +++ b/configfiles/MuonFitter/RNNFit/Fit_data.py @@ -0,0 +1,77 @@ +# coding: utf-8 +import numpy as np +import pandas as pd +import torch +from torch.utils.data import DataLoader +from torch.utils.data import Dataset +import torch.nn as nn +import torch.optim as optim +from sklearn.model_selection import train_test_split +import matplotlib.pyplot as plt +import time +import sys + +if (len(sys.argv) != 2): + print(" @@@@@ MISSING ev_ai_eta_R{RUN}.txt FILE !! @@@@@ ") + print(" syntax: python3 Fit_data.py ev_ai_eta_R{RUN}.txt") + print(" path: ~/annie/analysis/FILE") + exit(-1) + +DATAFILE = sys.argv[-1] + +# ## Extract run number from filename +# ## NOTE: Assumes filename has this structure: ev_ai_eta_R{RUN}.txt +RUN = DATAFILE[12:-4] + +# ## Define ManyToOneRNN class +class ManyToOneRNN(nn.Module): + def __init__(self, input_size, hidden_size, num_layers, output_size): + super(ManyToOneRNN, self).__init__() + self.hidden_size = hidden_size + self.num_layers = num_layers + self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True,nonlinearity='relu') + self.fc = nn.Linear(hidden_size, output_size) + + def forward(self, x): + # Initialize hidden state with zeros + h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) + # Forward propagate the RNN + out, _ = self.rnn(x,h0) + + # Decode the hidden state of the last time step + out = self.fc(out[:, -1, :]) + return out + + +# ## Load model +model = torch.load('model.pth') +model.eval() + + +# ## Load data (needs to be in Tensor format) +data = pd.read_csv(DATAFILE, header=None, names=['evid','cluster_time','ai','eta']) +print(data.head(5)) + +data = data.groupby(['evid', 'cluster_time']).agg(list).reset_index() +print(data.head(5)) + +print(data.iloc[0,2:]) + +# ## Do the fit +# open output file +OUTFILENAME = "tanktrackfitfile_r" + RUN + "_RNN.txt" +out_f = open(OUTFILENAME, "a") + +for idx in range(len(data)): + dataT = torch.tensor(data.iloc[idx,2:]).t() + dataT.unsqueeze_(0) + out = model(dataT) + print(data.iloc[idx,0], out) + out_f.write(str(data.iloc[idx,0]) + "," + str(data.iloc[idx,1]) + "," + str(out.data.numpy()[0][0]) + "\n") + +# close output file +out_f.close() + +############################################################ +############### EOF +############################################################ diff --git a/configfiles/MuonFitter/RNNFit/RNN_train.py b/configfiles/MuonFitter/RNNFit/RNN_train.py new file mode 100644 index 000000000..faa1ea3c8 --- /dev/null +++ b/configfiles/MuonFitter/RNNFit/RNN_train.py @@ -0,0 +1,214 @@ +# coding: utf-8 + +# ## Import modules +import numpy as np +import pandas as pd +import torch +from torch.utils.data import DataLoader +from torch.utils.data import Dataset +import torch.nn as nn +import torch.optim as optim +from sklearn.model_selection import train_test_split +import matplotlib.pyplot as plt +import time + + +# ## Load data, using half of the dataset to train +data = pd.read_hdf("data.h5", 'df') +train_df, test_df = train_test_split(data, test_size=0.5) +test_df, CV_df = train_test_split(test_df, test_size=0.5) +# validation used to keep track of training set; monitor accuracy + +# ### Preview data +print("len train_df: " + str(len(train_df))) +train_df.head(5) + +print("len test_df: " + str(len(test_df))) +test_df.head(5) + +print("len CV_df: " + str(len(CV_df))) +CV_df.head(5) + +print(data[data['truetracklen'] < 0.]) + + +# ## Define MyDataset class +class MyDataset(Dataset): + def __init__(self, dataframe): + self.data = dataframe + + def __len__(self): + return len(self.data) + + def __getitem__(self, idx): + evid = self.data.iloc[idx,0] #added to include evid in output file + features = torch.tensor(self.data.iloc[idx, 1:-1], dtype=torch.float32) + features = features.t() + target = torch.tensor(self.data.iloc[idx, -1], dtype=torch.float32) + return evid, features, target #added evid as return value + +# ### Prepare data for training +batch_size = 1 # Adjust batch size as needed +# sequence_length = 3 # Adjust sequence length as needed +shuffle = True # Shuffle the data during training (recommended) +dataS = MyDataset(data) +train = MyDataset(train_df) +test = MyDataset(test_df) +CVS = MyDataset(CV_df) +trainloader = DataLoader(train, batch_size=1, shuffle=shuffle) #how much data to train per epoch +testloader = DataLoader(test) +dataloader = DataLoader(dataS, batch_size=1, shuffle=shuffle) +CVloader = DataLoader(CVS) + +print(dataloader) + + +# ## Define ManyToOneRNN class +class ManyToOneRNN(nn.Module): + def __init__(self, input_size, hidden_size, num_layers, output_size): + super(ManyToOneRNN, self).__init__() + self.hidden_size = hidden_size + self.num_layers = num_layers + self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True,nonlinearity='relu') + self.fc = nn.Linear(hidden_size, output_size) + + def forward(self, x): + # Initialize hidden state with zeros + h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) + # Forward propagate the RNN + out, _ = self.rnn(x,h0) + + # Decode the hidden state of the last time step + out = self.fc(out[:, -1, :]) + return out + +# ### Set parameters for training model +cost_list = [] +CVcost_list = [] +input_size = 2 +hidden_size = 4 +num_layers = 1 +output_size = 1 +learning_rate = 0.001 #can tune this for better model +num_epochs = 10000 #default:10000 + +model = ManyToOneRNN(input_size, hidden_size, num_layers, output_size) +criterion = nn.MSELoss() +optimizer = optim.Adam(model.parameters(), lr=learning_rate) + +N = 100 #for printing progress + + +# ## Define training +def train(): + model.train() + + for epoch in range(num_epochs): + COST=0 + CVCost = 0 + i = 0 + for ev,dat,target in trainloader: # Iterate in batches over the training dataset.; EDIT: added ev + out = model(dat) # Perform a single forward pass. + loss = criterion(out, target) # Compute the loss. + loss.backward() # Derive gradients. + optimizer.step() # Update parameters based on gradients. + optimizer.zero_grad() # Clear gradients. + COST += loss.data + i += 1 + # if epoch % 100 == 0 and i ==1 : + # print("loss is {}".format(loss.data)) + # print("target value is {}".format(target)) + # print("out is {}".format(out)) + + cost_list.append(COST) + + #perform a prediction on the validation data + for CVID,CVD,CVT in CVloader: + + with torch.no_grad(): + CVout = model(CVD) + loss = criterion(CVout, CVT) + + CVCost += loss + + CVcost_list.append(CVCost) + + if epoch%N == 0: + print("epoch number:{}".format(epoch)) + print("validation MSE is {}".format(COST)) + print("train MSE is {}".format(CVCost)) + + +# ## Train model +tstart=time.time() +print("start time={}".format(tstart)) +train() +torch.save(model, 'model.pth') # save model + +print((time.time()-tstart)) + + +# ### Plot the loss and accuracy +fig, ax1 = plt.subplots() +color = 'tab:red' +ax1.plot(cost_list[200::100], color=color,label="Train") +ax1.plot(CVcost_list[200::100], color='tab:blue',label="Validation") +ax1.set_xlabel('epoch', color=color) +ax1.set_ylabel('Cost', color=color) +ax1.tick_params(axis='y', color=color) +ax1.legend() +plt.savefig("loss.png", dpi=300) + +# want red and blue to be close and cost to be low + + +# ## Test model +def test(loader): + model.eval() + + #open output file for fitted track length + out_f = open("fitbyeye_wcsim_RNN.txt", "a") + + diff_list = [] + for evid,data,target in loader: # Iterate in batches over the training/test dataset. + with torch.no_grad(): + out = model(data) # just need this for data + diff = out - target # Use the class with highest probability. + #print(evid[0], out.data.numpy()[0][0], target.data.numpy()[0]) #evid, fit, truelen + #print(diff) + out_f.write(str(evid[0]) + "," + str(out.data.numpy()[0][0]) + "\n") + diff_list.append(diff.data.numpy()[0][0]) # Check against ground-truth labels. + # diff_list.append(diff.data.numpy()) # Check against ground-truth labels. + out_f.close() + return diff_list # Derive ratio of correct predictions. + +diff_list = test(dataloader) + + +# ### Plot difference btwn model fit and truth info +plt.hist(diff_list) + +mean = np.mean(diff_list) +std = np.std(diff_list) + +# custom_labels = ['Mean is {}'.format(mean), 'Std is {}'.format(std)] + +# Add a legend with custom labels +plt.text(20, 40, f'Mean: {mean:.2f}', fontsize=12, color='red') +plt.text(20, 35, f'Std: {std:.2f}', fontsize=12, color='green') + + +plt.xlabel("y - yhat") +plt.ylabel("Number of Event") +plt.title("RNN Muon Vetex Reconstruction Performance") +# plt.legend(custom_labels) +plt.savefig("RNN.png") + +print("mean: ",mean) +print("std: " + str(std)) + + +# ## Save the model +#torch.save or model.save +#load model in another script and just use + diff --git a/configfiles/MuonFitter/RNNFit/rnn_fit.sh b/configfiles/MuonFitter/RNNFit/rnn_fit.sh new file mode 100755 index 000000000..958b417b6 --- /dev/null +++ b/configfiles/MuonFitter/RNNFit/rnn_fit.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +filelist="/home/jhe/annie/analysis/flist.txt" + +while read -r file +do + echo "python3 Fit_data.py ${file}" + python3 Fit_data.py ${file} +done < $filelist diff --git a/configfiles/PreProcessTrigOverlap/CreateMyList.sh b/configfiles/PreProcessTrigOverlap/CreateMyList.sh index e72ac51a6..4ccfef7cc 100755 --- a/configfiles/PreProcessTrigOverlap/CreateMyList.sh +++ b/configfiles/PreProcessTrigOverlap/CreateMyList.sh @@ -1,17 +1,19 @@ -if [ "$#" -ne 2 ]; then - echo "Usage: ./CreateMyList.sh DIR RUN" - echo "Specified input variable must contain the directory where the files are stored, second variable run number" +if [ "$#" -ne 1 ]; then + echo "Usage: ./CreateMyList.sh RUN" + echo "Specified input variable must contain the run number" exit 1 fi -FILEDIR=$1 -RUN=$2 +RUN=$1 +DIR=/pnfs/annie/persistent/raw/raw/ -NUMFILES=$(ls -1q ${FILEDIR}/RAWDataR${RUN}* | wc -l) +NUMFILES=$(ls -1q ${DIR}${RUN}/RAWDataR${RUN}* | wc -l) -echo "NUMBER OF FILES IN ${FILEDIR}: ${NUMFILES}" +echo "NUMBER OF FILES IN ${DIR}${RUN}: ${NUMFILES}" + +rm my_files.txt for p in $(seq 0 $(($NUMFILES -1 ))) do - echo "${FILEDIR}/RAWDataR${RUN}S0p${p}" >> my_files.txt + echo "${DIR}${RUN}/RAWDataR${RUN}S0p${p}" >> my_files.txt done