diff --git a/.muse b/.muse index 7ca48d1741..73b7c618f3 100644 --- a/.muse +++ b/.muse @@ -1,5 +1,5 @@ # prefer to build with this environment -ENVSET p012 +ENVSET p013 # add these to python path PYTHONPATH TrackerAlignment/scripts PYTHONPATH Trigger/python diff --git a/Analyses/fcl/DSBFieldDump.fcl b/Analyses/fcl/DSBFieldDump.fcl new file mode 100644 index 0000000000..c32a223ba3 --- /dev/null +++ b/Analyses/fcl/DSBFieldDump.fcl @@ -0,0 +1,43 @@ +# +# Graph the DS field on its axis +# +#include "Offline/fcl/standardServices.fcl" + +process_name : DSField + +#services : @local::Services.Reco +services : { + message : @local::default_message + GlobalConstantsService : { inputFile : "Offline/GlobalConstantsService/data/globalConstants_01.txt" } + GeometryService : { + inputFile : "Offline/Mu2eG4/geom/geom_common.txt" + simulatedDetector : { tool_type: "Mu2e" } + } + TFileService: { + fileName : "DSField.root" + } +} +source : { + module_type : EmptyEvent +} + +physics : { + analyzers: { + BFieldPlotter : { + module_type : BFieldPlotter + plane : "x" + planeValue : -3904.0 + axisOneMin : 0.0 + axisOneMax : 0.0 + axisTwoMin : 4100 + axisTwoMax : 13500 + mapBinSize : 10.0 + dump : true + dumpName : "Test" + detector : true + } + } + e1 : [BFieldPlotter] + end_paths : [e1] +} +services.GeometryService.inputFile : "Offline/Mu2eG4/geom/geom_common_reco.txt" diff --git a/Analyses/fcl/DSField.fcl b/Analyses/fcl/DSField.fcl new file mode 100644 index 0000000000..6e75805b50 --- /dev/null +++ b/Analyses/fcl/DSField.fcl @@ -0,0 +1,31 @@ +# +# Graph the DS field on its axis +# +#include "Offline/fcl/standardServices.fcl" + +process_name : DSField + +services : @local::Services.Reco +source : { + module_type : EmptyEvent +} + +physics : { + analyzers: { + BFieldPlotter : { + module_type : BFieldPlotter + plane : "x" + planeValue : -3904.0 + axisOneMin : 0.0 + axisOneMax : 0.0 + axisTwoMin : 4100 + axisTwoMax : 13500 + mapBinSize : 10.0 + dumpFile : true + detector : true + } + } + e1 : [BFieldPlotter] + end_paths : [e1] +} +services.GeometryService.inputFile : "Offline/Mu2eG4/geom/geom_common_no_tsu_ps.txt" diff --git a/Analyses/src/BFieldPlotter_module.cc b/Analyses/src/BFieldPlotter_module.cc index 9c18c33283..0e298f1b4c 100644 --- a/Analyses/src/BFieldPlotter_module.cc +++ b/Analyses/src/BFieldPlotter_module.cc @@ -6,15 +6,17 @@ // Mu2e includes #include "Offline/BFieldGeom/inc/BFieldManager.hh" -#include "Offline/GeometryService/inc/GeomHandle.hh" // art includes #include "art/Framework/Core/EDAnalyzer.h" #include "art/Framework/Principal/Event.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Core/ModuleMacros.h" +#include "fhiclcpp/types/Atom.h" #include "art_root_io/TFileService.h" #include "art/Framework/Services/Registry/ServiceDefinitionMacros.h" +#include "Offline/GeometryService/inc/GeomHandle.hh" +#include "Offline/GeometryService/inc/DetectorSystem.hh" // ROOT includes #include "TFile.h" @@ -26,6 +28,7 @@ #include #include #include +#include #include using namespace std; @@ -33,39 +36,45 @@ using namespace std; namespace mu2e { class BFieldPlotter : public art::EDAnalyzer { - public: - struct Config { - using Name=fhicl::Name; - using Comment=fhicl::Comment; - fhicl::Atom plane {Name("plane" ), Comment("Axis plane is defined by (x, y, or z)")}; - fhicl::Atom planeValue{Name("planeValue"), Comment("Value on the axis the plane intersects (mm)")}; - fhicl::Atom axisOneMin{Name("axisOneMin"), Comment("Axis one lower edge (bin centered) for plotting (mm) (plane = x/y/z --> axis one = y/x/x)")}; - fhicl::Atom axisOneMax{Name("axisOneMax"), Comment("Axis one upper edge (bin centered) for plotting (mm) (plane = x/y/z --> axis one = y/x/x)")}; - fhicl::Atom axisTwoMin{Name("axisTwoMin"), Comment("Axis two lower edge (bin centered) for plotting (mm) (plane = x/y/z --> axis two = z/z/y)")}; - fhicl::Atom axisTwoMax{Name("axisTwoMax"), Comment("Axis two upper edge (bin centered) for plotting (mm) (plane = x/y/z --> axis two = z/z/y)")}; - fhicl::Atom mapBinSize{Name("mapBinSize"), Comment("Map bin size (mm) (must be a divisor of both axis lengths)"), 10.}; - }; - typedef art::EDAnalyzer::Table Parameters; - - explicit BFieldPlotter(const Parameters& pset); - virtual ~BFieldPlotter() { } - - void analyze(const art::Event& e); - - void fillHistogram(BFMap const *map, art::ServiceHandle tfs); - - private: - - std::string _plane ; // x, y, or z map plane - double _planeValue; // value to set the plane at (mm) - double _axisOneMin; // sampling axis values (mm) - double _axisOneMax; // sampling axis values (mm) - double _axisTwoMin; // sampling axis values (mm) - double _axisTwoMax; // sampling axis values (mm) - double _mapBinSize; // histogram bin size (mm) - - std::map _hMap; //histogram of the map - + public: + struct Config { + using Name=fhicl::Name; + using Comment=fhicl::Comment; + fhicl::Atom plane {Name("plane" ), Comment("Axis plane is defined by (x, y, or z)")}; + fhicl::Atom planeValue{Name("planeValue"), Comment("Value on the axis the plane intersects (mm)")}; + fhicl::Atom axisOneMin{Name("axisOneMin"), Comment("Axis one lower edge (bin centered) for plotting (mm) (plane = x/y/z --> axis one = y/x/x)")}; + fhicl::Atom axisOneMax{Name("axisOneMax"), Comment("Axis one upper edge (bin centered) for plotting (mm) (plane = x/y/z --> axis one = y/x/x)")}; + fhicl::Atom axisTwoMin{Name("axisTwoMin"), Comment("Axis two lower edge (bin centered) for plotting (mm) (plane = x/y/z --> axis two = z/z/y)")}; + fhicl::Atom axisTwoMax{Name("axisTwoMax"), Comment("Axis two upper edge (bin centered) for plotting (mm) (plane = x/y/z --> axis two = z/z/y)")}; + fhicl::Atom mapBinSize{Name("mapBinSize"), Comment("Map bin size (mm) (must be a divisor of both axis lengths)"), 10.}; + fhicl::Atom dump {Name("dump"), Comment("Dump map samples to a CSV file"), false}; + fhicl::Atom dumpName {Name("dumpName"), Comment("Suffix to the dump file name"),"Dump"}; + fhicl::Atom detector {Name("detector"), Comment("Use Detector coordinate system"), false}; + }; + typedef art::EDAnalyzer::Table Parameters; + + explicit BFieldPlotter(const Parameters& pset); + virtual ~BFieldPlotter() { } + + void analyze(const art::Event& e); + + void fillHistogram(BFMap const *map, art::ServiceHandle tfs); + + private: + + std::string _plane ; // x, y, or z map plane + double _planeValue; // value to set the plane at (mm) + double _axisOneMin; // sampling axis values (mm) + double _axisOneMax; // sampling axis values (mm) + double _axisTwoMin; // sampling axis values (mm) + double _axisTwoMax; // sampling axis values (mm) + double _mapBinSize; // histogram bin size (mm) + bool _dump; // dump to CSV? + std::string _dumpname; + bool _detector; // use detector system? + + std::map _hMap; //histogram of the map + }; BFieldPlotter::BFieldPlotter(const Parameters& pset) : @@ -77,19 +86,22 @@ namespace mu2e { , _axisTwoMin(pset().axisTwoMin()) , _axisTwoMax(pset().axisTwoMax()) , _mapBinSize(pset().mapBinSize()) + , _dump(pset().dump()) + , _dumpname(pset().dumpName()) + , _detector(pset().detector()) { - if(_axisOneMin >= _axisOneMax || _axisTwoMin >= _axisTwoMax) { + if(_axisOneMin > _axisOneMax || _axisTwoMin > _axisTwoMax) { throw cet::exception("BADCONFIG") << "BField mapping plane ill defined: " - << _axisOneMin << " < axisOneValues < " << _axisOneMax << ", " - << _axisTwoMin << " < axisTwoValues < " << _axisTwoMax; + << _axisOneMin << " < axisOneValues < " << _axisOneMax << ", " + << _axisTwoMin << " < axisTwoValues < " << _axisTwoMax; } if(_mapBinSize <= 0.) { throw cet::exception("BADCONFIG") << "BField map binning should be >= 0 but given as " << _mapBinSize; } if(!(_plane == "x" || _plane == "y" || _plane == "z")) { - throw cet::exception("BADCONFIG") << "BField map plane not recognized! Options are x, y, or z but given " - << _plane.c_str(); + throw cet::exception("BADCONFIG") << "BField map plane not recognized! Options are x, y, or z but given " + << _plane.c_str(); } } //end constructor @@ -100,16 +112,16 @@ namespace mu2e { GeomHandle bf; const BFieldManager::MapContainerType& innerMaps = bf->getInnerMaps(); const BFieldManager::MapContainerType& outerMaps = bf->getOuterMaps(); - + //plot inner maps - for(std::shared_ptr const & map : innerMaps) { + for(std::shared_ptr const & map : innerMaps) { fillHistogram(map.get(), tfs); - } - + } + //plot outer maps - for(std::shared_ptr const & map : outerMaps) { + for(std::shared_ptr const & map : outerMaps) { fillHistogram(map.get(), tfs); - } + } //plot the default field returned from the manager fillHistogram(NULL, tfs); @@ -118,64 +130,88 @@ namespace mu2e { //fill a histogram with the magnetic field void BFieldPlotter::fillHistogram(BFMap const *map, art::ServiceHandle tfs) { + GeomHandle det; //define histogram binning such that map edges are bin centers and inside histogram long nbinsOne = std::lround((_axisOneMax - _axisOneMin)/_mapBinSize) + 1; long nbinsTwo = std::lround((_axisTwoMax - _axisTwoMin)/_mapBinSize) + 1; //check that the map bin step size works with the edges given - if(std::abs(_axisOneMin + (nbinsOne-1)*_mapBinSize - _axisOneMax > (_axisOneMax-_axisOneMin)/(100.*(nbinsOne-1)))) + if(nbinsOne > 1 && std::abs(_axisOneMin + (nbinsOne-1)*_mapBinSize - _axisOneMax > (_axisOneMax-_axisOneMin)/(100.*(nbinsOne-1)))) throw cet::exception("BADCONFIG") << "BField mapping axis values not steppable with step size given: " - << _axisOneMin << " < axisOneValues < " << _axisOneMax << ", " - << "step size = " << _mapBinSize; - - if(std::abs(_axisTwoMin + (nbinsTwo-1)*_mapBinSize - _axisTwoMax > (_axisTwoMax-_axisTwoMin)/(100.*(nbinsTwo-1)))) + << _axisOneMin << " < axisOneValues < " << _axisOneMax << ", " + << "step size = " << _mapBinSize; + + if(nbinsTwo > 1 && std::abs(_axisTwoMin + (nbinsTwo-1)*_mapBinSize - _axisTwoMax > (_axisTwoMax-_axisTwoMin)/(100.*(nbinsTwo-1)))) throw cet::exception("BADCONFIG") << "BField mapping axis values not steppable with step size given: " - << _axisTwoMin << " < axisTwoValues < " << _axisTwoMax << ", " - << "step size = " << _mapBinSize; + << _axisTwoMin << " < axisTwoValues < " << _axisTwoMax << ", " + << "step size = " << _mapBinSize; //if a null map, plot the default field from the manager const std::string name = (map) ? map->getKey() : "default"; - if(_hMap[name]) return; //already filled the maps in a previous event + // if dumping, create the file + std::ofstream fs; + if(_dump){ + string dumpfile= name+_dumpname+".csv"; + fs.open (dumpfile.c_str(), fstream::out); + if(fs.is_open()){ + fs << "# Dump of " << name << endl; + fs << "# x , y , z , Bx , By , Bz" << endl; + } else + throw cet::exception("BADCONFIG") << "Cannot open file " << dumpfile << endl; + } + //make a directory for the map art::TFileDirectory tfdir = tfs->mkdir( ("BFieldMapper_"+name).c_str() ); //define a histogram - _hMap[name] = tfdir.make(("hMap"+name).c_str() , (name + " Magnetic field map").c_str(), - // add offsets so all values are bin centers and fit edge into the map - nbinsOne, _axisOneMin - _mapBinSize/2.,_axisOneMax + _mapBinSize/2., - nbinsTwo, _axisTwoMin - _mapBinSize/2.,_axisTwoMax + _mapBinSize/2.); - + _hMap[name] = tfdir.make(("hMap"+name).c_str() , (name + " Magnetic field map").c_str(), + // add offsets so all values are bin centers and fit edge into the map + nbinsOne, _axisOneMin - _mapBinSize/2.,_axisOneMax + _mapBinSize/2., + nbinsTwo, _axisTwoMin - _mapBinSize/2.,_axisTwoMax + _mapBinSize/2.); + GeomHandle bf; //only needed in null map case //Loop through the points in the magnetic field double axisOne, axisTwo; for(int binOne = 0; binOne < nbinsOne; ++binOne) { axisOne = _axisOneMin + binOne*_mapBinSize; if(binOne == 0 || binOne == nbinsOne-1) //if first or last bin, at slight step into map to avoid edge issues - axisOne += (binOne) ? -_mapBinSize/100. : _mapBinSize/100.; + axisOne += (binOne) ? -_mapBinSize/100. : _mapBinSize/100.; for(int binTwo = 0; binTwo < nbinsTwo; ++binTwo) { - axisTwo = _axisTwoMin + binTwo*_mapBinSize; - if(binTwo == 0 || binTwo == nbinsTwo-1) //if first or last bin, at slight step into map to avoid edge issues - axisTwo += (binTwo) ? -_mapBinSize/100. : _mapBinSize/100.; - CLHEP::Hep3Vector point; - CLHEP::Hep3Vector field; - if(_plane == "x") - point = CLHEP::Hep3Vector(_planeValue, axisOne, axisTwo); - else if(_plane == "y") - point = CLHEP::Hep3Vector(axisOne, _planeValue, axisTwo); - else if(_plane == "z") - point = CLHEP::Hep3Vector(axisOne, axisTwo, _planeValue); - if(map) - map->getBFieldWithStatus(point,field); - else //if null, get the manager and plot the field returned by it - bf->getBFieldWithStatus(point,field); - - _hMap[name]->Fill(axisOne, axisTwo, field.mag()); //fill with weight of the field magnitude + axisTwo = _axisTwoMin + binTwo*_mapBinSize; + if(binTwo == 0 || binTwo == nbinsTwo-1) //if first or last bin, at slight step into map to avoid edge issues + axisTwo += (binTwo) ? -_mapBinSize/100. : _mapBinSize/100.; + CLHEP::Hep3Vector point; + CLHEP::Hep3Vector field; + if(_plane == "x") + point = CLHEP::Hep3Vector(_planeValue, axisOne, axisTwo); + else if(_plane == "y") + point = CLHEP::Hep3Vector(axisOne, _planeValue, axisTwo); + else if(_plane == "z") + point = CLHEP::Hep3Vector(axisOne, axisTwo, _planeValue); + if(map) + map->getBFieldWithStatus(point,field); + else //if null, get the manager and plot the field returned by it + bf->getBFieldWithStatus(point,field); + + _hMap[name]->Fill(axisOne, axisTwo, field.mag()); //fill with weight of the field magnitude + + // if there's a dump file, fill it. + if(_dump){ + CLHEP::Hep3Vector dpoint = _detector ? det->toDetector(point) : point; + fs << std::setw(10) << std::setprecision(5) + << dpoint.x() << ", " << std::setprecision(5) + << dpoint.y() << ", " << std::setprecision(5) + << dpoint.z() << ", " << std::setprecision(5) + << field.x() << ", " << std::setprecision(5) + << field.y() << ", " << std::setprecision(5) + << field.z() << endl; + } + } //end axis two loop } //end axis one loop + if(_dump && fs.is_open())fs.close(); } //end fillHistorgram - - } // end namespace mu2e DEFINE_ART_MODULE(mu2e::BFieldPlotter); diff --git a/Analyses/src/SConscript b/Analyses/src/SConscript index 3161d0f6ac..bc278c2a9a 100644 --- a/Analyses/src/SConscript +++ b/Analyses/src/SConscript @@ -62,6 +62,7 @@ helper.make_plugins( [ mainlib, 'tbb', 'cetlib', 'cetlib_except', + 'General', 'CLHEP', 'HepPDT', 'HepPID', diff --git a/Analyses/src/StepPointMCDumper_module.cc b/Analyses/src/StepPointMCDumper_module.cc index 81e5447c90..1fe20ab12d 100644 --- a/Analyses/src/StepPointMCDumper_module.cc +++ b/Analyses/src/StepPointMCDumper_module.cc @@ -17,6 +17,8 @@ #include "canvas/Utilities/InputTag.h" #include "fhiclcpp/ParameterSet.h" #include "art/Framework/Core/EDAnalyzer.h" +#include "fhiclcpp/types/Atom.h" +#include "fhiclcpp/types/OptionalSequence.h" #include "art/Framework/Principal/Event.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/Provenance.h" @@ -27,8 +29,11 @@ #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" #include "Offline/GlobalConstantsService/inc/ParticleDataTable.hh" -#include "Offline/Mu2eUtilities/inc/SimParticleTimeOffset.hh" #include "Offline/Mu2eUtilities/inc/SimParticleGetTau.hh" +#include "Offline/GeometryService/inc/GeomHandle.hh" +#include "Offline/GeometryService/inc/DetectorSystem.hh" + +#include "KinKal/General/ParticleState.hh" namespace mu2e { @@ -84,44 +89,42 @@ namespace mu2e { unsigned volumeCopyNumber; VDHit() : x(std::numeric_limits::quiet_NaN()) - , y(std::numeric_limits::quiet_NaN()) - , z(std::numeric_limits::quiet_NaN()) + , y(std::numeric_limits::quiet_NaN()) + , z(std::numeric_limits::quiet_NaN()) - , time(std::numeric_limits::quiet_NaN()) + , time(std::numeric_limits::quiet_NaN()) - , px(std::numeric_limits::quiet_NaN()) - , py(std::numeric_limits::quiet_NaN()) - , pz(std::numeric_limits::quiet_NaN()) - , pmag(std::numeric_limits::quiet_NaN()) - , ek(std::numeric_limits::quiet_NaN()) + , px(std::numeric_limits::quiet_NaN()) + , py(std::numeric_limits::quiet_NaN()) + , pz(std::numeric_limits::quiet_NaN()) + , pmag(std::numeric_limits::quiet_NaN()) + , ek(std::numeric_limits::quiet_NaN()) - , charge(std::numeric_limits::quiet_NaN()) - , pdgId(0) - , particleId(-1U) - , volumeCopyNumber(-1U) - {} + , charge(std::numeric_limits::quiet_NaN()) + , pdgId(0) + , particleId(-1U) + , volumeCopyNumber(-1U) + {} //---------------------------------------------------------------- - VDHit(const SimParticleTimeOffset& toff, const StepPointMC& hit) + VDHit( const StepPointMC& hit) : x(hit.position().x()) - , y(hit.position().y()) - , z(hit.position().z()) - - , time(toff.timeWithOffsetsApplied(hit)) + , y(hit.position().y()) + , z(hit.position().z()) + , time(hit.time()) + , px(hit.momentum().x()) + , py(hit.momentum().y()) + , pz(hit.momentum().z()) - , px(hit.momentum().x()) - , py(hit.momentum().y()) - , pz(hit.momentum().z()) + , pmag(hit.momentum().mag()) + , ek(getKineticEnergy(hit)) - , pmag(hit.momentum().mag()) - , ek(getKineticEnergy(hit)) + , charge(getCharge(hit.simParticle()->pdgId())) - , charge(getCharge(hit.simParticle()->pdgId())) - - , pdgId(hit.simParticle()->pdgId()) - , particleId(hit.simParticle()->id().asUint()) - , volumeCopyNumber(hit.volumeId()) - {} + , pdgId(hit.simParticle()->pdgId()) + , particleId(hit.simParticle()->id().asUint()) + , volumeCopyNumber(hit.volumeId()) + {} }; // struct VDHit @@ -129,37 +132,51 @@ namespace mu2e { class StepPointMCDumper : public art::EDAnalyzer { typedef std::vector VS; typedef std::vector VspMC; + struct Config { + using Name=fhicl::Name; + using Comment=fhicl::Comment; + fhicl::Atom hits {Name("hitsInputTag" ), Comment("StepPointMC collection")}; + fhicl::OptionalSequence tauCollections {Name("tauHitCollections"), Comment("StepPointMC collections for proper time calculation")}; + fhicl::OptionalSequence decayOffCodes {Name("decayOffPDGCodes"), Comment("decayOffPDGCodes")}; + fhicl::Atom writeVDHit {Name("writeVDHit"), Comment("Write VDHit format branch"), false}; + fhicl::Atom writeParticleState {Name("writeParticleState"), Comment("Write ParticleState format branch"), false}; + fhicl::Atom writeProperTime {Name("writeProperTime"), Comment("Write ProperTime format branch"), false}; + fhicl::Atom detectorSystem {Name("detectorSystem"), Comment("Use DetectorSystem for position information for ParticleState"), false}; + }; + typedef art::EDAnalyzer::Table Parameters; art::InputTag hitsInputTag_; - SimParticleTimeOffset toff_; - bool writeProperTime_; + bool writeVDHit_, writeParticleState_, writeProperTime_, detectorSystem_; VS tauHitCollections_; std::vector decayOffCodes_; // Members needed to write the ntuple TTree *nt_; VDHit hit_; + KinKal::ParticleState pstate_; float tau_; - public: - explicit StepPointMCDumper(const fhicl::ParameterSet& pset); + public: + explicit StepPointMCDumper(const Parameters& pset); virtual void beginJob(); virtual void analyze(const art::Event& event); }; //================================================================ - StepPointMCDumper::StepPointMCDumper(const fhicl::ParameterSet& pset) + StepPointMCDumper::StepPointMCDumper(const Parameters& pset) : art::EDAnalyzer(pset) - , hitsInputTag_(pset.get("hitsInputTag")) - , toff_(pset.get("TimeOffsets")) - , writeProperTime_(pset.get("writeProperTime", false)) - , tauHitCollections_( writeProperTime_ ? pset.get("tauHitCollections") : VS() ) - , nt_(0) - , tau_() + , hitsInputTag_(pset().hits()) + , writeVDHit_(pset().writeVDHit()) + , writeParticleState_(pset().writeParticleState()) + , writeProperTime_(pset().writeProperTime()) + , detectorSystem_(pset().detectorSystem()) + , nt_(0) + , tau_(0.0) { if(writeProperTime_) { - decayOffCodes_ = pset.get >("decayOffPDGCodes"); + pset().tauCollections(tauHitCollections_); + pset().decayOffCodes(decayOffCodes_); // must sort to use binary_search in SimParticleGetTau std::sort(decayOffCodes_.begin(), decayOffCodes_.end()); } @@ -170,15 +187,15 @@ namespace mu2e { art::ServiceHandle tfs; static const char branchDesc[] = "x/F:y/F:z/F:time/F:px/F:py/F:pz/F:pmag/F:ek/F:charge/F:pdgId/I:particleId/i:volumeCopy/i"; nt_ = tfs->make( "nt", "StepPointMCDumper ntuple"); - nt_->Branch("hits", &hit_, branchDesc); - if(writeProperTime_) { - nt_->Branch("tau", &tau_, "tauNormalized/F"); - } + if(writeVDHit_)nt_->Branch("hits", &hit_, branchDesc); + if(writeParticleState_)nt_->Branch("particle", &pstate_); + if(writeProperTime_) { nt_->Branch("tau", &tau_, "tauNormalized/F"); } } //================================================================ void StepPointMCDumper::analyze(const art::Event& event) { - toff_.updateMap(event); + auto const& ptable = GlobalConstantsHandle(); + GeomHandle det; VspMC spMCColls; for ( const auto& iColl : tauHitCollections_ ){ @@ -189,18 +206,24 @@ namespace mu2e { const auto& ih = event.getValidHandle(hitsInputTag_); for(const auto& i : *ih) { - hit_ = VDHit(toff_, i); - - if(writeProperTime_) { - tau_ = SimParticleGetTau::calculate(i, spMCColls, decayOffCodes_); + if(writeVDHit_)hit_ = VDHit(i); + if(writeParticleState_) { + KinKal::VEC3 pos = detectorSystem_ ? KinKal::VEC3(det->toDetector(i.position())) : KinKal::VEC3(i.position()); + KinKal::VEC3 mom(i.momentum()); + double time = i.time(); + double mass = i.simParticle()->startMomentum().invariantMass(); + int charge = static_cast(ptable->particle(i.simParticle()->pdgId()).ref().charge()); + pstate_ = KinKal::ParticleState(pos,mom,time,mass,charge); } + if(writeProperTime_) { tau_ = SimParticleGetTau::calculate(i, spMCColls, decayOffCodes_); } + nt_->Fill(); } } // analyze(event) - //================================================================ + //================================================================ } // namespace mu2e diff --git a/Analyses/test/genReco.fcl b/Analyses/test/genReco.fcl deleted file mode 100644 index 7a150e94c6..0000000000 --- a/Analyses/test/genReco.fcl +++ /dev/null @@ -1,236 +0,0 @@ -# -*- mode: tcl -*- -#------------------------------------------------------------------------------ -# this example shows how to configure a job to -# -# - generate conversion electron events -# - run simulation+reconstruction chain -# - run particle ID -# -# local submission: -# -# mu2e -c Analyses/test/genReco.fcl -n 1000 >| results/2014-12-19-Analyses_test_genReco.log 2>&1 & -#------------------------------------------------------------------------------ - -#include "Offline/fcl/minimalMessageService.fcl" -#include "Offline/fcl/standardProducers.fcl" -#include "Offline/fcl/standardServices.fcl" -#include "Offline/TrkDiag/fcl/prolog.fcl" -#include "Offline/CaloCluster/fcl/prolog.fcl" -#include "Offline/Analyses/fcl/prolog.fcl" - -#------------------------------------------------------------------------------ -# define module sequences -#------------------------------------------------------------------------------ -BEGIN_PROLOG - -generatorSeq : [ generate, g4run ] - -make_digis : [ @sequence::CommonMC.DigiSim, @sequence::CaloDigiMC.DigiSim, @sequence::TrackerMC.DigiSim ] - -# calorimeter cluster reconstruction -calRecoSeq : [ @sequence::CaloReco.Reco,@sequence::CaloDigiMC.TruthMatch,@sequence::CaloCluster.Reco,@sequence::CaloClusterMC.TruthMatch ] - -# hit making for CalPatRec -# cprMakeHitSeq : [ @sequence::CalPatRec.prepare_hits] # - -# CalPatRecFSHP, CalPatRecMakeStrawHitPositions, CalPatRecMakeStereoHits, CalPatRecFlagStrawHits, CalPatRecFlagBkgHits ] -# -# calPatRecSeq : [ @sequence::cprMakeHitSeq, CalPatRec, MergePatRec ] - -#------------------------------------------------------------------------------ -# downstream electron and downstream muon reconstruction - needed for particle ID -#------------------------------------------------------------------------------ -trkPatRecDemDmmSeq : [ @sequence::TrkHitReco.PrepareHits, - @sequence::Tracking.TPRDeM, - @sequence::Tracking.TPRDmuM, - MergePatRecDem, MergePatRecDmm ] - -calPatRecDemDmmSeq : [ @sequence::TrkHitReco.PrepareHits, @sequence::CalPatRec.dem_reco, @sequence::CalPatRec.dmm_reco, MergePatRecDem, MergePatRecDmm ] - -allPatRecDemDmmSeq : [ @sequence::TrkHitReco.PrepareHits, - @sequence::Tracking.TPRDeM, - @sequence::Tracking.TPRDmuM, -# @sequence::cprMakeHitSeq, - @sequence::CalPatRec.dem_reco, @sequence::CalPatRec.dmm_reco, - MergePatRecDem, MergePatRecDmm ] - -# particle identification - -vadimPidSeq : [ @sequence::TrackCaloMatching.matching, ParticleID ] -avikPidSeq : [ @sequence::TrackCaloMatching.matching_dem, - @sequence::TrackCaloMatching.matching_dmm, - AvikPID ] - -#----------------------------------------------------------------------------- -# paths -#------------------------------------------------------------------------------ -paths : { - - allpatrec_reco : [ @sequence::calRecoSeq, - @sequence::allPatRecDemDmmSeq, - @sequence::avikPidSeq - , TrackSummaryMaker - ] - - trkpatrec_reco : [ @sequence::calRecoSeq, - @sequence::trkPatRecDemDmmSeq, - @sequence::avikPidSeq - , TrackSummaryMaker - ] - - gen : [ @sequence::generatorSeq, - @sequence::make_digis - ] - - gen_allpatrec_reco : [ @sequence::generatorSeq, - @sequence::make_digis, - @sequence::calRecoSeq, - @sequence::allPatRecDemDmmSeq, - @sequence::avikPidSeq - , TrackSummaryMaker - ] - - gen_trkpatrec_reco : [ @sequence::generatorSeq, - @sequence::make_digis, - @sequence::calRecoSeq, - @sequence::trkPatRecDemDmmSeq, - @sequence::avikPidSeq - , TrackSummaryMaker - ] -} - - -END_PROLOG - -process_name : AllPatRecReco -#------------------------------------------------------------------------------ -# define input module -#------------------------------------------------------------------------------ -source : { - module_type : EmptyEvent -# module_type : RootInput -} -#------------------------------------------------------------------------------ -# define output module -#------------------------------------------------------------------------------ -outputs: { - detectorOutput : { - module_type : RootOutput -# SelectEvents: [p1] - outputCommands: [ "keep *_*_*_*", - "drop mu2e::PhysicalVolumeInfomvstd::pairs_g4run_*_*" - ] - fileName : "genReco.art" - } -} -#------------------------------------------------------------------------------ -# services section -#------------------------------------------------------------------------------ -services : @local::Services.SimAndReco - -#------------------------------------------------------------------------------ -# specify modules -#------------------------------------------------------------------------------ -physics : { - producers: { - @table::EventGenerator.producers - generate : { @table::StoppedParticleReactionGun } -#------------------------------------------------------------------------------ -# G4, hit makers, calorimeter, track reconstruction, and PID -#------------------------------------------------------------------------------ - @table::Mu2eG4.producers - @table::CommonMC.producers - @table::CaloDigiMC.producers - @table::CaloReco.producers - @table::CaloDigiMC.producersMC - @table::CaloCluster.producers - @table::CaloClusterMC.producersMC - @table::TrackerMC.producers - @table::Tracking.producers - @table::TrkHitReco.producers - @table::CalPatRec.producers - @table::TrackCaloMatching.producers - @table::ParticleID.producers -#------------------------------------------------------------------------------ -# track summary maker -#------------------------------------------------------------------------------ - TrackSummaryMaker: { @table::TrackSummaryMaker - trackInput : "MergePatRecDem" - } - } - - filters: { -#------------------------------------------------------------------------------ -# Andrej's filter -# Reject events with no hits from signal-like tracks in the detectors. -# The filter does not look at the background hits from mixed events. -#------------------------------------------------------------------------------ - @table::CalPatRec.filters - FilterStepPointMomentum: { - module_type : FilterStepPointMomentum - inputs : [ "g4run:tracker", "g4run:calorimeter", "g4run:calorimeterRO"] - cutMomentumMin : 10. # MeV/c - } - } -#------------------------------------------------------------------------------ -# analyzers: -#------------------------------------------------------------------------------ - analyzers: { - -# Read the TrkPatRec output and make diagnostic ntuples. - RKFDeM: { - @table::ReadKalFits - addCalo : true - fitterModuleLabel : MergePatRecDem - KalDiag : @local::KalDiagDirect - } - } - -#------------------------------------------------------------------------------ -# paths: -#------------------------------------------------------------------------------ - @table::paths - - e1 : [ RKFDeM ] -# e1 : [ ] -#------------------------------------------------------------------------------ -# 1. generation part only -#------------------------------------------------------------------------------ - trigger_paths : [ gen_allpatrec_reco ] -# trigger_paths : [ gen ] -# trigger_paths : [ allpatrec_reco ] -# trigger_paths : [ trkpatrec_reco ] - -# to disable writing out the DST file, replace [detectorOutput] with [] - out : [ detectorOutput ] -# out : [] - end_paths : [ e1, out ] -} -#------------------------------------------------------------------------------ -# redefinitions -#------------------------------------------------------------------------------ -# 1. only for interactive submission -#------------------------------------------------------------------------------ -# print per event timing for ::event entry points -# services.Timing: { } - - -services.TFileService.fileName : "genReco.hist" -services.SeedService.baseSeed : 8 -services.SeedService.maxUniqueEngines : 20 - -# Temporarily use Andy's muon stops. These will be replaced soon with MDC2018 output -physics.producers.generate.muonStops.inputFiles : [ "mergedMuonStops/nts.mu2e.DS-TGTstops.MDC2018a.001002_00000000.root" ] -# print -services.scheduler.wantSummary: true - -# Apply the time offsets at the digitization stage - -physics.analyzers.RKFDeM.KalDiag.MCStepsLabel : "g4run" -physics.analyzers.RKFDeM.KalDiag.SimParticleLabel : "g4run" -physics.producers.CaloShowerStepMaker.physVolInfoInput : "g4run" -#physics.producers.KFFDeM.KalFit.debugLevel : 4 - -# chande track collection names used by the PID module: -physics.producers.AvikPID.trkPatRecDemModuleLabel : MergePatRecDem -physics.producers.AvikPID.trkPatRecDmmModuleLabel : MergePatRecDmm diff --git a/CRVResponse/fcl/singlePEWaveform.txt b/CRVResponse/fcl/singlePEWaveform.txt index 508d182e27..00333caa23 100644 --- a/CRVResponse/fcl/singlePEWaveform.txt +++ b/CRVResponse/fcl/singlePEWaveform.txt @@ -1,4831 +1,4831 @@ -0.0000 9.5533E-23 -1.0000 1.1322E-22 -1.0010 1.1324E-22 -2.0820 1.3269E-22 -2.0830 1.3271E-22 -2.0832 1.3271E-22 -3.0830 1.5065E-22 -3.0840 1.5067E-22 -4.1620 1.6961E-22 -4.1630 1.6963E-22 -5.1630 1.8655E-22 -5.1640 1.8657E-22 -6.2490 2.0397E-22 -6.2500 2.0398E-22 -7.2500 2.1893E-22 -7.2510 2.1894E-22 -8.3320 2.3377E-22 -8.3330 2.3378E-22 -8.4968 2.3589E-22 -9.3330 2.4615E-22 -9.3340 2.4617E-22 -9.5820 2.4903E-22 -9.5820 7.0223E-22 -9.5820 7.2735E-21 -9.5822 -1.1758E-16 -9.5823 2.2274E-16 -9.5824 1.0210E-15 -9.5826 2.2771E-15 -9.5827 3.9911E-15 -9.5829 6.1631E-15 -9.5830 8.7929E-15 -9.5830 9.0700E-15 -9.5830 9.6451E-15 -9.6029 -3.1609E-09 -9.6227 1.6828E-09 -9.6426 1.4531E-08 -9.6624 3.5384E-08 -9.6822 6.4241E-08 -9.7021 1.0110E-07 -9.7219 1.4597E-07 -9.8609 8.9122E-07 -10.0556 3.0188E-06 -10.1751 5.0160E-06 -10.2089 5.8341E-06 -10.2428 6.7376E-06 -10.2766 7.7266E-06 -10.3105 8.8009E-06 -10.3443 9.9605E-06 -10.3782 1.1206E-05 -10.4120 1.2536E-05 -10.4123 1.2548E-05 -10.4127 1.2565E-05 -10.4130 1.2577E-05 -10.4137 1.2607E-05 -10.4144 1.2636E-05 -10.4152 1.2666E-05 -10.4159 1.2695E-05 -10.4166 1.2725E-05 -10.4173 1.2755E-05 -10.4180 1.2785E-05 -10.4232 1.2999E-05 -10.4334 1.3435E-05 -10.4539 1.4339E-05 -10.4948 1.6262E-05 -10.5546 1.9385E-05 -10.6741 2.6895E-05 -10.9132 4.4403E-05 -10.9349 4.6211E-05 -10.9781 5.0250E-05 -11.0647 5.9067E-05 -11.2408 7.8462E-05 -11.2688 8.1932E-05 -11.2894 8.4527E-05 -11.3100 8.7169E-05 -11.3306 8.9860E-05 -11.3512 9.2598E-05 -11.3718 9.5384E-05 -11.3924 9.8218E-05 -11.4130 1.0110E-04 -11.4133 1.0114E-04 -11.4137 1.0120E-04 -11.4140 1.0124E-04 -11.4608 1.0800E-04 -11.5076 1.1509E-04 -11.5544 1.2249E-04 -11.6012 1.3022E-04 -11.6480 1.3826E-04 -11.6948 1.4663E-04 -11.7416 1.5532E-04 -11.8066 1.6664E-04 -11.8715 1.7860E-04 -11.9365 1.9120E-04 -12.0014 2.0444E-04 -12.0664 2.1831E-04 -12.1313 2.3283E-04 -12.1963 2.4798E-04 -12.2395 2.5814E-04 -12.2828 2.6855E-04 -12.3260 2.7921E-04 -12.3693 2.9012E-04 -12.4125 3.0128E-04 -12.4558 3.1269E-04 -12.4990 3.2435E-04 -12.4993 3.2443E-04 -12.4997 3.2454E-04 -12.5000 3.2462E-04 -12.5007 3.2481E-04 -12.5014 3.2501E-04 -12.5022 3.2521E-04 -12.5029 3.2540E-04 -12.5036 3.2560E-04 -12.5043 3.2579E-04 -12.5050 3.2599E-04 -12.5102 3.2739E-04 -12.5185 3.2969E-04 -12.5268 3.3196E-04 -12.5380 3.3504E-04 -12.5510 3.3865E-04 -12.5720 3.4454E-04 -12.6016 3.5295E-04 -12.7299 3.9059E-04 -12.8583 4.3024E-04 -12.9866 4.7192E-04 -13.1150 5.1562E-04 -13.2433 5.6135E-04 -13.3717 6.0910E-04 -13.5000 6.5887E-04 -13.5003 6.5899E-04 -13.5007 6.5915E-04 -13.5010 6.5927E-04 -13.6473 7.1875E-04 -13.7936 7.8067E-04 -13.9399 8.4504E-04 -14.0861 9.1186E-04 -14.2324 9.8113E-04 -14.3787 1.0529E-03 -14.5250 1.1270E-03 -14.5330 1.1311E-03 -14.5820 1.1566E-03 -14.5821 1.1566E-03 -14.5823 1.1567E-03 -14.5827 1.1569E-03 -14.5830 1.1571E-03 -14.5839 1.1575E-03 -14.5847 1.1580E-03 -14.5856 1.1584E-03 -14.5864 1.1589E-03 -14.5873 1.1593E-03 -14.5881 1.1598E-03 -14.5890 1.1602E-03 -14.5936 1.1627E-03 -14.5986 1.1653E-03 -14.6044 1.1683E-03 -14.6109 1.1717E-03 -14.6192 1.1761E-03 -14.6294 1.1814E-03 -14.6431 1.1887E-03 -14.6617 1.1985E-03 -14.6910 1.2141E-03 -14.8184 1.2832E-03 -14.9459 1.3538E-03 -15.0733 1.4260E-03 -15.2007 1.4998E-03 -15.3281 1.5752E-03 -15.4556 1.6521E-03 -15.5830 1.7306E-03 -15.5831 1.7306E-03 -15.5833 1.7307E-03 -15.5837 1.7310E-03 -15.5840 1.7312E-03 -15.7380 1.8284E-03 -15.8920 1.9274E-03 -16.0460 2.0283E-03 -16.2000 2.1310E-03 -16.3540 2.2356E-03 -16.5080 2.3420E-03 -16.6620 2.4502E-03 -16.6621 2.4503E-03 -16.6623 2.4504E-03 -16.6626 2.4506E-03 -16.6629 2.4509E-03 -16.6630 2.4509E-03 -16.6636 2.4513E-03 -16.6641 2.4517E-03 -16.6647 2.4521E-03 -16.6653 2.4525E-03 -16.6659 2.4529E-03 -16.6664 2.4533E-03 -16.6670 2.4537E-03 -16.6711 2.4566E-03 -16.6750 2.4594E-03 -16.6805 2.4633E-03 -16.6860 2.4672E-03 -16.6936 2.4726E-03 -16.7019 2.4785E-03 -16.7137 2.4869E-03 -16.7278 2.4969E-03 -16.7500 2.5128E-03 -16.7826 2.5360E-03 -16.8476 2.5828E-03 -16.9641 2.6671E-03 -17.0806 2.7522E-03 -17.1971 2.8379E-03 -17.3136 2.9244E-03 -17.4300 3.0116E-03 -17.5465 3.0995E-03 -17.6630 3.1881E-03 -17.6631 3.1882E-03 -17.6633 3.1884E-03 -17.6637 3.1887E-03 -17.6640 3.1889E-03 -17.8190 3.3080E-03 -17.9740 3.4277E-03 -18.1290 3.5481E-03 -18.2840 3.6692E-03 -18.4390 3.7910E-03 -18.5940 3.9135E-03 -18.7490 4.0367E-03 -18.7493 4.0369E-03 -18.7497 4.0372E-03 -18.7500 4.0375E-03 -18.7504 4.0378E-03 -18.7509 4.0381E-03 -18.7513 4.0385E-03 -18.7517 4.0388E-03 -18.7522 4.0392E-03 -18.7526 4.0395E-03 -18.7531 4.0399E-03 -18.7562 4.0424E-03 -18.7600 4.0454E-03 -18.7647 4.0491E-03 -18.7699 4.0533E-03 -18.7765 4.0585E-03 -18.7841 4.0646E-03 -18.7939 4.0724E-03 -18.8062 4.0821E-03 -18.8234 4.0958E-03 -18.8483 4.1157E-03 -18.8920 4.1506E-03 -18.9795 4.2204E-03 -19.1545 4.3603E-03 -19.2396 4.4284E-03 -19.3246 4.4965E-03 -19.4097 4.5646E-03 -19.4948 4.6327E-03 -19.5799 4.7008E-03 -19.6649 4.7689E-03 -19.7500 4.8370E-03 -19.7503 4.8373E-03 -19.7507 4.8376E-03 -19.7510 4.8378E-03 -19.8468 4.9144E-03 -19.9425 4.9908E-03 -20.0383 5.0671E-03 -20.1340 5.1433E-03 -20.2298 5.2195E-03 -20.3255 5.2955E-03 -20.4213 5.3714E-03 -20.4373 5.3840E-03 -20.8320 5.6940E-03 -20.8323 5.6943E-03 -20.8327 5.6946E-03 -20.8330 5.6948E-03 -20.8336 5.6953E-03 -20.8342 5.6958E-03 -20.8349 5.6963E-03 -20.8355 5.6967E-03 -20.8361 5.6972E-03 -20.8367 5.6977E-03 -20.8374 5.6982E-03 -20.8412 5.7012E-03 -20.8452 5.7043E-03 -20.8504 5.7084E-03 -20.8560 5.7128E-03 -20.8634 5.7185E-03 -20.8717 5.7250E-03 -20.8830 5.7338E-03 -20.8971 5.7447E-03 -20.9182 5.7611E-03 -20.9499 5.7858E-03 -21.0134 5.8349E-03 -21.1305 5.9254E-03 -21.2476 6.0154E-03 -21.3646 6.1047E-03 -21.4817 6.1935E-03 -21.5988 6.2818E-03 -21.7159 6.3694E-03 -21.8330 6.4565E-03 -21.8333 6.4567E-03 -21.8337 6.4570E-03 -21.8340 6.4572E-03 -21.9880 6.5708E-03 -22.1420 6.6830E-03 -22.2960 6.7938E-03 -22.4500 6.9033E-03 -22.6040 7.0113E-03 -22.7580 7.1181E-03 -22.9120 7.2234E-03 -22.9123 7.2236E-03 -22.9127 7.2239E-03 -22.9130 7.2241E-03 -22.9130 7.2241E-03 -22.9135 7.2244E-03 -22.9140 7.2247E-03 -22.9145 7.2251E-03 -22.9150 7.2254E-03 -22.9155 7.2258E-03 -22.9160 7.2261E-03 -22.9165 7.2264E-03 -22.9199 7.2288E-03 -22.9238 7.2314E-03 -22.9288 7.2348E-03 -22.9342 7.2384E-03 -22.9411 7.2431E-03 -22.9490 7.2484E-03 -22.9595 7.2556E-03 -22.9725 7.2643E-03 -22.9915 7.2771E-03 -23.0190 7.2955E-03 -23.0708 7.3301E-03 -23.1911 7.4100E-03 -23.3114 7.4888E-03 -23.4317 7.5665E-03 -23.5520 7.6432E-03 -23.6724 7.7189E-03 -23.7927 7.7934E-03 -23.9130 7.8670E-03 -23.9133 7.8671E-03 -23.9137 7.8674E-03 -23.9140 7.8676E-03 -24.0690 7.9605E-03 -24.2240 8.0515E-03 -24.3790 8.1404E-03 -24.5340 8.2274E-03 -24.6890 8.3123E-03 -24.8440 8.3952E-03 -24.9990 8.4762E-03 -24.9993 8.4763E-03 -24.9997 8.4765E-03 -25.0000 8.4767E-03 -25.0000 8.4767E-03 -25.0005 8.4769E-03 -25.0009 8.4772E-03 -25.0014 8.4774E-03 -25.0019 8.4777E-03 -25.0024 8.4779E-03 -25.0028 8.4782E-03 -25.0033 8.4784E-03 -25.0067 8.4801E-03 -25.0108 8.4822E-03 -25.0158 8.4848E-03 -25.0214 8.4877E-03 -25.0284 8.4913E-03 -25.0367 8.4955E-03 -25.0474 8.5010E-03 -25.0610 8.5079E-03 -25.0807 8.5179E-03 -25.1105 8.5329E-03 -25.1665 8.5610E-03 -25.5518 8.7468E-03 -26.0000 8.9457E-03 -26.0003 8.9459E-03 -26.0007 8.9460E-03 -26.0010 8.9462E-03 -26.0022 8.9467E-03 -26.1565 9.0107E-03 -26.3107 9.0724E-03 -26.4650 9.1318E-03 -26.6192 9.1890E-03 -26.7735 9.2439E-03 -26.9277 9.2965E-03 -27.0820 9.3469E-03 -27.0823 9.3470E-03 -27.0827 9.3471E-03 -27.0830 9.3472E-03 -27.0834 9.3474E-03 -27.0839 9.3475E-03 -27.0843 9.3476E-03 -27.0848 9.3478E-03 -27.0852 9.3479E-03 -27.0856 9.3481E-03 -27.0861 9.3482E-03 -27.0892 9.3492E-03 -27.0938 9.3507E-03 -27.0989 9.3523E-03 -27.1050 9.3542E-03 -27.1120 9.3564E-03 -27.1211 9.3593E-03 -27.1321 9.3627E-03 -27.1474 9.3675E-03 -27.1685 9.3740E-03 -27.2035 9.3848E-03 -27.2697 9.4047E-03 -27.6742 9.5182E-03 -28.0830 9.6164E-03 -28.0833 9.6164E-03 -28.0837 9.6165E-03 -28.0840 9.6166E-03 -28.2380 9.6492E-03 -28.3920 9.6796E-03 -28.5460 9.7076E-03 -28.7000 9.7334E-03 -28.8540 9.7570E-03 -29.0080 9.7782E-03 -29.1620 9.7972E-03 -29.1623 9.7973E-03 -29.1627 9.7973E-03 -29.1630 9.7973E-03 -29.1637 9.7974E-03 -29.1644 9.7975E-03 -29.1652 9.7976E-03 -29.1659 9.7977E-03 -29.1666 9.7977E-03 -29.1673 9.7978E-03 -29.1680 9.7979E-03 -29.1732 9.7985E-03 -29.1782 9.7991E-03 -29.1850 9.7999E-03 -29.1920 9.8006E-03 -29.2020 9.8018E-03 -29.2134 9.8030E-03 -29.2306 9.8049E-03 -29.2533 9.8073E-03 -29.2954 9.8117E-03 -29.3749 9.8193E-03 -29.8532 9.8545E-03 -29.8592 9.8548E-03 -29.8832 9.8559E-03 -30.1630 9.8656E-03 -30.1633 9.8657E-03 -30.1637 9.8657E-03 -30.1640 9.8657E-03 -30.3190 9.8678E-03 -30.4740 9.8679E-03 -30.6290 9.8659E-03 -30.7840 9.8618E-03 -30.9390 9.8556E-03 -31.0940 9.8473E-03 -31.2490 9.8370E-03 -31.2493 9.8369E-03 -31.2497 9.8369E-03 -31.2500 9.8369E-03 -31.2507 9.8368E-03 -31.2514 9.8368E-03 -31.2522 9.8367E-03 -31.2529 9.8367E-03 -31.2536 9.8366E-03 -31.2543 9.8366E-03 -31.2550 9.8365E-03 -31.2602 9.8361E-03 -31.2662 9.8357E-03 -31.2736 9.8351E-03 -31.2818 9.8345E-03 -31.2928 9.8336E-03 -31.3069 9.8325E-03 -31.3276 9.8309E-03 -31.3588 9.8283E-03 -31.4198 9.8230E-03 -31.7888 9.7851E-03 -31.8270 9.7805E-03 -31.8651 9.7757E-03 -31.9033 9.7709E-03 -31.9414 9.7660E-03 -31.9795 9.7610E-03 -32.0177 9.7559E-03 -32.0558 9.7507E-03 -32.2500 9.7221E-03 -32.2503 9.7221E-03 -32.2507 9.7220E-03 -32.2510 9.7220E-03 -32.4054 9.6970E-03 -32.5599 9.6703E-03 -32.7143 9.6420E-03 -32.8687 9.6119E-03 -33.0231 9.5801E-03 -33.1776 9.5466E-03 -33.3320 9.5114E-03 -33.3323 9.5114E-03 -33.3327 9.5113E-03 -33.3330 9.5112E-03 -33.3337 9.5110E-03 -33.3344 9.5109E-03 -33.3352 9.5107E-03 -33.3359 9.5105E-03 -33.3366 9.5104E-03 -33.3373 9.5102E-03 -33.3380 9.5100E-03 -33.3432 9.5088E-03 -33.3511 9.5070E-03 -33.3593 9.5050E-03 -33.3702 9.5025E-03 -33.3832 9.4994E-03 -33.4033 9.4946E-03 -33.4325 9.4876E-03 -33.6037 9.4452E-03 -34.3330 9.2454E-03 -34.3333 9.2454E-03 -34.3337 9.2452E-03 -34.3340 9.2451E-03 -34.4880 9.1986E-03 -34.6420 9.1508E-03 -34.7960 9.1017E-03 -34.9500 9.0514E-03 -35.1040 8.9998E-03 -35.2580 8.9469E-03 -35.4120 8.8929E-03 -35.4123 8.8927E-03 -35.4127 8.8926E-03 -35.4130 8.8925E-03 -35.4137 8.8922E-03 -35.4144 8.8920E-03 -35.4152 8.8917E-03 -35.4159 8.8915E-03 -35.4166 8.8912E-03 -35.4173 8.8910E-03 -35.4180 8.8907E-03 -35.4232 8.8889E-03 -35.4334 8.8852E-03 -35.4459 8.8808E-03 -35.4623 8.8749E-03 -35.4839 8.8672E-03 -35.5231 8.8531E-03 -35.6014 8.8246E-03 -35.7174 8.7820E-03 -35.8333 8.7389E-03 -35.9493 8.6952E-03 -36.0652 8.6509E-03 -36.1811 8.6061E-03 -36.2971 8.5606E-03 -36.4130 8.5146E-03 -36.4131 8.5146E-03 -36.4133 8.5145E-03 -36.4137 8.5143E-03 -36.4140 8.5142E-03 -37.4990 8.0597E-03 -37.4993 8.0596E-03 -37.4997 8.0594E-03 -37.5000 8.0593E-03 -37.5007 8.0590E-03 -37.5014 8.0587E-03 -37.5022 8.0583E-03 -37.5029 8.0580E-03 -37.5036 8.0577E-03 -37.5043 8.0574E-03 -37.5050 8.0571E-03 -37.5102 8.0548E-03 -37.5204 8.0504E-03 -37.5336 8.0446E-03 -37.5503 8.0373E-03 -37.5730 8.0273E-03 -37.6133 8.0096E-03 -37.6939 7.9740E-03 -37.8091 7.9228E-03 -37.9242 7.8714E-03 -38.0394 7.8196E-03 -38.1545 7.7675E-03 -38.2697 7.7151E-03 -38.3848 7.6623E-03 -38.5000 7.6093E-03 -38.5003 7.6092E-03 -38.5007 7.6090E-03 -38.5010 7.6088E-03 -38.6554 7.5372E-03 -38.8099 7.4651E-03 -38.9643 7.3927E-03 -39.1187 7.3199E-03 -39.2731 7.2467E-03 -39.4276 7.1731E-03 -39.5820 7.0992E-03 -39.5823 7.0991E-03 -39.5827 7.0989E-03 -39.5830 7.0987E-03 -39.5837 7.0984E-03 -39.5844 7.0980E-03 -39.5852 7.0977E-03 -39.5859 7.0973E-03 -39.5866 7.0970E-03 -39.5873 7.0967E-03 -39.5880 7.0963E-03 -39.5932 7.0939E-03 -39.6020 7.0896E-03 -39.6101 7.0857E-03 -39.6213 7.0804E-03 -39.6338 7.0744E-03 -39.6547 7.0643E-03 -39.6832 7.0506E-03 -39.7403 7.0232E-03 -39.8607 6.9651E-03 -39.9811 6.9069E-03 -40.1014 6.8487E-03 -40.2218 6.7903E-03 -40.3422 6.7318E-03 -40.4626 6.6733E-03 -40.5830 6.6146E-03 -40.5833 6.6144E-03 -40.5837 6.6143E-03 -40.5840 6.6141E-03 -40.7380 6.5389E-03 -40.8920 6.4637E-03 -41.0460 6.3884E-03 -41.2000 6.3132E-03 -41.3540 6.2379E-03 -41.5080 6.1627E-03 -41.6620 6.0874E-03 -41.6623 6.0873E-03 -41.6627 6.0871E-03 -41.6630 6.0869E-03 -41.6637 6.0866E-03 -41.6644 6.0862E-03 -41.6652 6.0859E-03 -41.6659 6.0855E-03 -41.6666 6.0852E-03 -41.6673 6.0848E-03 -41.6680 6.0845E-03 -41.6732 6.0820E-03 -41.6802 6.0785E-03 -41.6874 6.0750E-03 -41.6959 6.0708E-03 -41.7061 6.0659E-03 -41.7203 6.0590E-03 -41.7394 6.0496E-03 -41.7702 6.0346E-03 -41.8241 6.0083E-03 -42.2318 5.8098E-03 -42.6630 5.6010E-03 -42.6633 5.6009E-03 -42.6637 5.6007E-03 -42.6640 5.6006E-03 -42.8190 5.5258E-03 -42.9740 5.4514E-03 -43.1290 5.3772E-03 -43.2840 5.3033E-03 -43.4390 5.2297E-03 -43.5940 5.1564E-03 -43.7490 5.0833E-03 -43.7493 5.0832E-03 -43.7497 5.0830E-03 -43.7500 5.0829E-03 -43.7507 5.0825E-03 -43.7514 5.0822E-03 -43.7522 5.0819E-03 -43.7529 5.0815E-03 -43.7536 5.0812E-03 -43.7543 5.0808E-03 -43.7550 5.0805E-03 -43.7602 5.0781E-03 -43.7663 5.0752E-03 -43.7729 5.0721E-03 -43.7802 5.0687E-03 -43.7890 5.0645E-03 -43.8003 5.0592E-03 -43.8155 5.0521E-03 -43.8370 5.0421E-03 -43.8716 5.0258E-03 -43.9393 4.9942E-03 -44.0551 4.9402E-03 -44.1709 4.8864E-03 -44.2867 4.8328E-03 -44.4025 4.7794E-03 -44.5184 4.7263E-03 -44.6342 4.6734E-03 -44.7500 4.6207E-03 -44.7503 4.6206E-03 -44.7507 4.6204E-03 -44.7510 4.6203E-03 -44.7612 4.6157E-03 -44.9141 4.5465E-03 -45.0671 4.4778E-03 -45.2201 4.4096E-03 -45.3731 4.3418E-03 -45.5260 4.2745E-03 -45.6790 4.2077E-03 -45.8320 4.1413E-03 -45.8323 4.1412E-03 -45.8327 4.1410E-03 -45.8330 4.1409E-03 -45.8337 4.1406E-03 -45.8344 4.1403E-03 -45.8352 4.1400E-03 -45.8359 4.1397E-03 -45.8366 4.1393E-03 -45.8373 4.1390E-03 -45.8380 4.1387E-03 -45.8432 4.1365E-03 -45.8488 4.1341E-03 -45.8550 4.1314E-03 -45.8614 4.1286E-03 -45.8695 4.1252E-03 -45.8791 4.1210E-03 -45.8919 4.1155E-03 -45.9088 4.1082E-03 -45.9347 4.0971E-03 -45.9780 4.0785E-03 -46.0644 4.0416E-03 -46.4902 3.8619E-03 -46.5230 3.8483E-03 -46.5559 3.8346E-03 -46.5887 3.8210E-03 -46.6215 3.8074E-03 -46.6543 3.7939E-03 -46.6872 3.7803E-03 -46.7200 3.7668E-03 -46.8330 3.7204E-03 -46.8333 3.7203E-03 -46.8337 3.7202E-03 -46.8340 3.7200E-03 -46.9880 3.6574E-03 -47.1420 3.5953E-03 -47.2960 3.5339E-03 -47.4500 3.4730E-03 -47.6040 3.4128E-03 -47.7580 3.3531E-03 -47.9120 3.2941E-03 -47.9123 3.2940E-03 -47.9127 3.2938E-03 -47.9130 3.2937E-03 -47.9137 3.2934E-03 -47.9144 3.2931E-03 -47.9152 3.2929E-03 -47.9159 3.2926E-03 -47.9166 3.2923E-03 -47.9173 3.2920E-03 -47.9180 3.2918E-03 -47.9232 3.2898E-03 -47.9284 3.2878E-03 -47.9343 3.2856E-03 -47.9402 3.2833E-03 -47.9477 3.2805E-03 -47.9561 3.2773E-03 -47.9674 3.2730E-03 -47.9815 3.2676E-03 -48.0025 3.2597E-03 -48.0341 3.2477E-03 -48.0971 3.2240E-03 -48.4823 3.0809E-03 -48.5438 3.0584E-03 -48.6054 3.0361E-03 -48.6669 3.0138E-03 -48.7284 2.9916E-03 -48.7899 2.9696E-03 -48.8515 2.9476E-03 -48.9130 2.9257E-03 -48.9131 2.9257E-03 -48.9133 2.9256E-03 -48.9137 2.9255E-03 -48.9140 2.9254E-03 -49.0690 2.8708E-03 -49.2240 2.8168E-03 -49.3790 2.7636E-03 -49.5340 2.7109E-03 -49.6890 2.6590E-03 -49.8440 2.6076E-03 -49.9990 2.5570E-03 -49.9993 2.5569E-03 -49.9997 2.5568E-03 -50.0000 2.5567E-03 -50.0007 2.5564E-03 -50.0014 2.5562E-03 -50.0022 2.5560E-03 -50.0029 2.5557E-03 -50.0036 2.5555E-03 -50.0043 2.5553E-03 -50.0050 2.5550E-03 -50.0102 2.5534E-03 -50.0152 2.5517E-03 -50.0208 2.5499E-03 -50.0263 2.5481E-03 -50.0333 2.5459E-03 -50.0410 2.5434E-03 -50.0511 2.5401E-03 -50.0633 2.5362E-03 -50.0810 2.5305E-03 -50.1059 2.5225E-03 -50.1513 2.5079E-03 -50.2421 2.4790E-03 -50.4236 2.4220E-03 -50.6379 2.3553E-03 -50.6519 2.3510E-03 -50.6999 2.3364E-03 -50.9980 2.2466E-03 -51.0000 2.2461E-03 -51.0003 2.2460E-03 -51.0007 2.2458E-03 -51.0010 2.2458E-03 -51.1554 2.2003E-03 -51.3099 2.1555E-03 -51.4643 2.1113E-03 -51.6187 2.0678E-03 -51.7731 2.0249E-03 -51.9276 1.9827E-03 -52.0820 1.9411E-03 -52.0823 1.9410E-03 -52.0827 1.9409E-03 -52.0830 1.9408E-03 -52.0837 1.9406E-03 -52.0844 1.9404E-03 -52.0852 1.9402E-03 -52.0859 1.9400E-03 -52.0866 1.9399E-03 -52.0873 1.9397E-03 -52.0880 1.9395E-03 -52.0932 1.9381E-03 -52.0979 1.9368E-03 -52.1034 1.9354E-03 -52.1086 1.9340E-03 -52.1152 1.9322E-03 -52.1223 1.9304E-03 -52.1316 1.9279E-03 -52.1424 1.9250E-03 -52.1577 1.9209E-03 -52.1783 1.9155E-03 -52.2136 1.9062E-03 -52.2776 1.8894E-03 -52.3926 1.8595E-03 -52.5077 1.8299E-03 -52.6228 1.8006E-03 -52.7378 1.7717E-03 -52.8529 1.7432E-03 -52.9679 1.7150E-03 -53.0830 1.6872E-03 -53.0833 1.6871E-03 -53.0837 1.6870E-03 -53.0840 1.6869E-03 -53.2380 1.6502E-03 -53.3920 1.6142E-03 -53.5460 1.5787E-03 -53.7000 1.5438E-03 -53.8540 1.5095E-03 -54.0080 1.4758E-03 -54.1620 1.4427E-03 -54.1623 1.4427E-03 -54.1627 1.4426E-03 -54.1630 1.4425E-03 -54.1637 1.4424E-03 -54.1644 1.4422E-03 -54.1652 1.4421E-03 -54.1659 1.4419E-03 -54.1666 1.4418E-03 -54.1673 1.4416E-03 -54.1680 1.4414E-03 -54.1732 1.4404E-03 -54.1778 1.4394E-03 -54.1831 1.4382E-03 -54.1880 1.4372E-03 -54.1943 1.4359E-03 -54.2009 1.4345E-03 -54.2095 1.4326E-03 -54.2193 1.4306E-03 -54.2329 1.4277E-03 -54.2505 1.4240E-03 -54.2792 1.4180E-03 -54.3267 1.4080E-03 -54.4217 1.3884E-03 -55.1630 1.2418E-03 -55.1633 1.2418E-03 -55.1637 1.2417E-03 -55.1640 1.2416E-03 -55.3190 1.2127E-03 -55.4740 1.1843E-03 -55.6290 1.1564E-03 -55.7840 1.1291E-03 -55.9390 1.1023E-03 -56.0940 1.0760E-03 -56.2490 1.0503E-03 -56.2493 1.0502E-03 -56.2497 1.0501E-03 -56.2500 1.0501E-03 -56.2507 1.0500E-03 -56.2514 1.0499E-03 -56.2522 1.0497E-03 -56.2529 1.0496E-03 -56.2536 1.0495E-03 -56.2543 1.0494E-03 -56.2550 1.0493E-03 -56.2595 1.0485E-03 -56.2643 1.0477E-03 -56.2692 1.0469E-03 -56.2742 1.0461E-03 -56.2799 1.0452E-03 -56.2862 1.0442E-03 -56.2939 1.0429E-03 -56.3029 1.0414E-03 -56.3146 1.0395E-03 -56.3299 1.0370E-03 -56.3524 1.0334E-03 -56.3885 1.0276E-03 -56.4608 1.0160E-03 -56.5642 9.9957E-04 -56.6677 9.8337E-04 -56.7712 9.6738E-04 -56.8746 9.5162E-04 -56.9781 9.3608E-04 -57.0815 9.2076E-04 -57.1850 9.0565E-04 -57.1860 9.0551E-04 -57.2500 8.9628E-04 -57.2503 8.9623E-04 -57.2507 8.9618E-04 -57.2510 8.9613E-04 -57.4054 8.7423E-04 -57.5599 8.5278E-04 -57.7143 8.3176E-04 -57.8687 8.1119E-04 -58.0231 7.9107E-04 -58.1776 7.7138E-04 -58.3320 7.5214E-04 -58.3323 7.5211E-04 -58.3327 7.5206E-04 -58.3330 7.5202E-04 -58.3337 7.5193E-04 -58.3344 7.5184E-04 -58.3352 7.5175E-04 -58.3359 7.5167E-04 -58.3366 7.5158E-04 -58.3373 7.5149E-04 -58.3380 7.5140E-04 -58.3424 7.5086E-04 -58.3472 7.5028E-04 -58.3519 7.4969E-04 -58.3568 7.4910E-04 -58.3622 7.4843E-04 -58.3683 7.4768E-04 -58.3758 7.4676E-04 -58.3849 7.4566E-04 -58.3966 7.4422E-04 -58.4121 7.4234E-04 -58.4349 7.3957E-04 -58.4715 7.3514E-04 -58.5449 7.2637E-04 -58.6099 7.1872E-04 -58.6749 7.1112E-04 -58.7399 7.0356E-04 -58.8049 6.9605E-04 -58.8699 6.8858E-04 -58.9349 6.8116E-04 -58.9999 6.7378E-04 -59.3330 6.3753E-04 -59.3333 6.3750E-04 -59.3337 6.3746E-04 -59.3340 6.3742E-04 -59.4880 6.2131E-04 -59.6420 6.0554E-04 -59.7960 5.9013E-04 -59.9500 5.7507E-04 -60.1040 5.6037E-04 -60.2580 5.4602E-04 -60.4120 5.3203E-04 -60.4123 5.3200E-04 -60.4127 5.3196E-04 -60.4130 5.3194E-04 -60.4137 5.3187E-04 -60.4144 5.3181E-04 -60.4152 5.3174E-04 -60.4159 5.3168E-04 -60.4166 5.3161E-04 -60.4173 5.3155E-04 -60.4180 5.3148E-04 -60.4223 5.3110E-04 -60.4271 5.3068E-04 -60.4317 5.3026E-04 -60.4365 5.2984E-04 -60.4420 5.2934E-04 -60.4486 5.2875E-04 -60.4566 5.2804E-04 -60.4665 5.2716E-04 -60.4793 5.2602E-04 -60.4967 5.2448E-04 -60.5231 5.2215E-04 -60.5686 5.1816E-04 -60.6595 5.1030E-04 -61.0563 4.7707E-04 -61.4130 4.4901E-04 -61.4133 4.4899E-04 -61.4137 4.4896E-04 -61.4140 4.4894E-04 -61.5690 4.3728E-04 -61.7240 4.2589E-04 -61.8790 4.1478E-04 -62.0340 4.0395E-04 -62.1890 3.9339E-04 -62.3440 3.8311E-04 -62.4990 3.7310E-04 -62.4993 3.7308E-04 -62.4997 3.7305E-04 -62.5000 3.7304E-04 -62.5007 3.7299E-04 -62.5014 3.7294E-04 -62.5022 3.7290E-04 -62.5029 3.7285E-04 -62.5036 3.7281E-04 -62.5043 3.7276E-04 -62.5050 3.7271E-04 -62.5093 3.7244E-04 -62.5140 3.7215E-04 -62.5185 3.7186E-04 -62.5237 3.7153E-04 -62.5297 3.7115E-04 -62.5370 3.7069E-04 -62.5457 3.7013E-04 -62.5569 3.6943E-04 -62.5716 3.6850E-04 -62.5928 3.6717E-04 -62.6264 3.6507E-04 -62.6918 3.6103E-04 -63.0852 3.3754E-04 -63.5000 3.1445E-04 -63.5003 3.1443E-04 -63.5007 3.1441E-04 -63.5010 3.1439E-04 -64.5820 2.6148E-04 -64.5823 2.6147E-04 -64.5827 2.6145E-04 -64.5830 2.6144E-04 -64.5837 2.6141E-04 -64.5844 2.6138E-04 -64.5852 2.6134E-04 -64.5859 2.6131E-04 -64.5866 2.6128E-04 -64.5873 2.6125E-04 -64.5880 2.6122E-04 -64.5922 2.6103E-04 -64.5969 2.6082E-04 -64.6019 2.6060E-04 -64.6075 2.6035E-04 -64.6143 2.6006E-04 -64.6224 2.5970E-04 -64.6325 2.5925E-04 -64.6456 2.5867E-04 -64.6637 2.5788E-04 -64.6912 2.5668E-04 -64.7400 2.5457E-04 -64.8375 2.5041E-04 -65.5830 2.2067E-04 -65.5833 2.2066E-04 -65.5837 2.2065E-04 -65.5840 2.2064E-04 -66.6620 1.8403E-04 -66.6623 1.8402E-04 -66.6627 1.8400E-04 -66.6630 1.8399E-04 -66.6637 1.8397E-04 -66.6644 1.8395E-04 -66.6652 1.8393E-04 -66.6659 1.8391E-04 -66.6666 1.8388E-04 -66.6673 1.8386E-04 -66.6680 1.8384E-04 -66.6732 1.8368E-04 -66.6778 1.8354E-04 -66.6840 1.8335E-04 -66.6899 1.8317E-04 -66.6984 1.8291E-04 -66.7075 1.8263E-04 -66.7209 1.8222E-04 -66.7371 1.8172E-04 -66.7643 1.8090E-04 -66.8061 1.7964E-04 -66.8896 1.7716E-04 -67.3319 1.6451E-04 -67.3599 1.6374E-04 -67.6630 1.5566E-04 -67.6633 1.5565E-04 -67.6637 1.5564E-04 -67.6640 1.5564E-04 -68.7490 1.2986E-04 -68.7493 1.2986E-04 -68.7497 1.2985E-04 -68.7500 1.2984E-04 -68.7507 1.2983E-04 -68.7514 1.2981E-04 -68.7522 1.2979E-04 -68.7529 1.2978E-04 -68.7536 1.2976E-04 -68.7543 1.2975E-04 -68.7550 1.2973E-04 -68.7602 1.2962E-04 -68.7656 1.2950E-04 -68.7722 1.2936E-04 -68.7793 1.2921E-04 -68.7887 1.2900E-04 -68.7999 1.2876E-04 -68.8160 1.2842E-04 -68.8379 1.2795E-04 -68.8759 1.2714E-04 -68.9476 1.2563E-04 -69.3852 1.1673E-04 -69.7500 1.0977E-04 -69.7503 1.0976E-04 -69.7507 1.0976E-04 -69.7510 1.0975E-04 -70.8320 9.1183E-05 -70.8323 9.1178E-05 -70.8327 9.1172E-05 -70.8330 9.1167E-05 -70.8337 9.1156E-05 -70.8344 9.1144E-05 -70.8352 9.1133E-05 -70.8359 9.1121E-05 -70.8366 9.1110E-05 -70.8373 9.1098E-05 -70.8380 9.1087E-05 -70.8432 9.1006E-05 -70.8496 9.0904E-05 -70.8568 9.0789E-05 -70.8652 9.0656E-05 -70.8758 9.0488E-05 -70.8899 9.0265E-05 -70.9099 8.9950E-05 -70.9410 8.9463E-05 -71.8330 7.6251E-05 -71.8331 7.6250E-05 -71.8333 7.6247E-05 -71.8337 7.6241E-05 -71.8340 7.6237E-05 -72.9120 6.2019E-05 -72.9123 6.2015E-05 -72.9127 6.2010E-05 -72.9130 6.2007E-05 -72.9137 6.1998E-05 -72.9144 6.1989E-05 -72.9152 6.1980E-05 -72.9159 6.1971E-05 -72.9166 6.1962E-05 -72.9173 6.1953E-05 -72.9180 6.1944E-05 -72.9232 6.1880E-05 -72.9308 6.1785E-05 -72.9387 6.1688E-05 -72.9488 6.1562E-05 -72.9609 6.1413E-05 -72.9790 6.1188E-05 -73.0046 6.0872E-05 -73.0518 6.0293E-05 -73.1461 5.9145E-05 -73.5428 5.4403E-05 -73.9130 5.0135E-05 -73.9133 5.0132E-05 -73.9137 5.0127E-05 -73.9140 5.0124E-05 -74.9990 3.8321E-05 -74.9993 3.8318E-05 -74.9997 3.8314E-05 -75.0000 3.8311E-05 -75.0012 3.8298E-05 -75.0025 3.8285E-05 -75.0050 3.8258E-05 -75.0102 3.8204E-05 -75.0192 3.8110E-05 -75.0278 3.8020E-05 -75.0399 3.7894E-05 -75.0538 3.7750E-05 -75.0776 3.7502E-05 -75.1113 3.7152E-05 -75.1787 3.6455E-05 -75.5864 3.2299E-05 -75.6144 3.2018E-05 -76.0000 2.8189E-05 -76.0001 2.8188E-05 -76.0003 2.8186E-05 -76.0007 2.8182E-05 -76.0010 2.8179E-05 -77.0820 1.7867E-05 -77.0823 1.7865E-05 -77.0827 1.7861E-05 -77.0830 1.7858E-05 -77.0837 1.7851E-05 -77.0844 1.7845E-05 -77.0852 1.7838E-05 -77.0859 1.7831E-05 -77.0866 1.7825E-05 -77.0873 1.7818E-05 -77.0880 1.7811E-05 -77.0932 1.7764E-05 -77.1034 1.7669E-05 -77.1129 1.7581E-05 -77.1270 1.7450E-05 -77.1429 1.7303E-05 -77.1733 1.7023E-05 -77.2181 1.6609E-05 -77.3078 1.5785E-05 -77.4872 1.4148E-05 -77.7272 1.1971E-05 -77.7552 1.1719E-05 -78.0830 8.7929E-06 -78.0833 8.7902E-06 -78.0837 8.7867E-06 -78.0840 8.7840E-06 -79.1620 -5.4708E-07 -79.1623 -5.4962E-07 -79.1627 -5.5300E-07 -79.1630 -5.5554E-07 -79.1637 -5.6163E-07 -79.1644 -5.6771E-07 -79.1652 -5.7380E-07 -79.1659 -5.7989E-07 -79.1666 -5.8597E-07 -79.1673 -5.9206E-07 -79.1680 -5.9814E-07 -79.1732 -6.4141E-07 -79.1834 -7.2793E-07 -79.1942 -8.1929E-07 -79.2094 -9.4719E-07 -79.2277 -1.1018E-06 -79.2618 -1.3891E-06 -79.3195 -1.8737E-06 -79.7015 -5.0549E-06 -80.1630 -8.8269E-06 -80.1633 -8.8294E-06 -80.1637 -8.8326E-06 -80.1640 -8.8350E-06 -81.2490 -1.7387E-05 -81.2493 -1.7390E-05 -81.2497 -1.7393E-05 -81.2500 -1.7395E-05 -81.2501 -1.7396E-05 -81.2512 -1.7404E-05 -81.2525 -1.7414E-05 -81.2550 -1.7434E-05 -81.2602 -1.7473E-05 -81.2704 -1.7551E-05 -81.2824 -1.7643E-05 -81.2984 -1.7766E-05 -81.3190 -1.7924E-05 -81.3566 -1.8210E-05 -81.5719 -1.9840E-05 -82.2500 -2.4865E-05 -82.2503 -2.4867E-05 -82.2507 -2.4870E-05 -82.2510 -2.4872E-05 -83.3320 -3.2461E-05 -83.3323 -3.2463E-05 -83.3327 -3.2466E-05 -83.3330 -3.2468E-05 -83.3337 -3.2473E-05 -83.3344 -3.2478E-05 -83.3352 -3.2483E-05 -83.3359 -3.2487E-05 -83.3366 -3.2492E-05 -83.3373 -3.2497E-05 -83.3380 -3.2502E-05 -83.3432 -3.2537E-05 -83.3534 -3.2606E-05 -83.3664 -3.2694E-05 -83.3831 -3.2807E-05 -83.4057 -3.2959E-05 -83.4461 -3.3231E-05 -83.5270 -3.3771E-05 -84.0194 -3.7002E-05 -84.3330 -3.8996E-05 -84.3333 -3.8998E-05 -84.3337 -3.9001E-05 -84.3340 -3.9002E-05 -85.4120 -4.5460E-05 -85.4123 -4.5461E-05 -85.4127 -4.5464E-05 -85.4130 -4.5465E-05 -85.4137 -4.5469E-05 -85.4144 -4.5474E-05 -85.4152 -4.5478E-05 -85.4159 -4.5482E-05 -85.4166 -4.5486E-05 -85.4173 -4.5490E-05 -85.4180 -4.5494E-05 -85.4232 -4.5523E-05 -85.4334 -4.5581E-05 -85.4472 -4.5660E-05 -85.4646 -4.5759E-05 -85.4889 -4.5896E-05 -85.5320 -4.6138E-05 -85.6182 -4.6620E-05 -86.0753 -4.9112E-05 -86.4130 -5.0874E-05 -86.4133 -5.0875E-05 -86.4137 -5.0877E-05 -86.4140 -5.0879E-05 -87.4990 -5.6070E-05 -87.4993 -5.6072E-05 -87.4997 -5.6073E-05 -87.5000 -5.6075E-05 -87.5004 -5.6076E-05 -87.5007 -5.6078E-05 -87.5011 -5.6079E-05 -87.5014 -5.6081E-05 -87.5018 -5.6083E-05 -87.5021 -5.6084E-05 -87.5025 -5.6086E-05 -87.5050 -5.6097E-05 -87.5102 -5.6120E-05 -87.5204 -5.6165E-05 -87.5351 -5.6231E-05 -87.5532 -5.6310E-05 -87.5793 -5.6425E-05 -87.6252 -5.6626E-05 -87.7170 -5.7023E-05 -88.1397 -5.8790E-05 -88.5000 -6.0204E-05 -88.5003 -6.0206E-05 -88.5007 -6.0207E-05 -88.5010 -6.0208E-05 -89.5820 -6.3941E-05 -89.5823 -6.3941E-05 -89.5827 -6.3943E-05 -89.5830 -6.3944E-05 -89.5837 -6.3946E-05 -89.5844 -6.3948E-05 -89.5852 -6.3950E-05 -89.5859 -6.3953E-05 -89.5866 -6.3955E-05 -89.5873 -6.3957E-05 -89.5880 -6.3959E-05 -89.5932 -6.3975E-05 -89.6034 -6.4007E-05 -89.6193 -6.4055E-05 -89.6381 -6.4113E-05 -89.6665 -6.4200E-05 -89.7161 -6.4349E-05 -90.5830 -6.6706E-05 -90.5833 -6.6707E-05 -90.5837 -6.6708E-05 -90.5840 -6.6708E-05 -91.6620 -6.8939E-05 -91.6623 -6.8940E-05 -91.6627 -6.8940E-05 -91.6630 -6.8941E-05 -91.6637 -6.8942E-05 -91.6644 -6.8943E-05 -91.6652 -6.8945E-05 -91.6659 -6.8946E-05 -91.6666 -6.8947E-05 -91.6673 -6.8948E-05 -91.6680 -6.8950E-05 -91.6732 -6.8958E-05 -91.6834 -6.8976E-05 -91.7008 -6.9005E-05 -91.7208 -6.9039E-05 -91.7526 -6.9091E-05 -92.6630 -7.0324E-05 -92.6633 -7.0324E-05 -92.6637 -7.0325E-05 -92.6640 -7.0325E-05 -93.7490 -7.1096E-05 -93.7493 -7.1096E-05 -93.7497 -7.1096E-05 -93.7500 -7.1096E-05 -93.7507 -7.1097E-05 -93.7514 -7.1097E-05 -93.7522 -7.1097E-05 -93.7529 -7.1097E-05 -93.7536 -7.1098E-05 -93.7543 -7.1098E-05 -93.7550 -7.1098E-05 -93.7602 -7.1100E-05 -93.7704 -7.1104E-05 -93.7903 -7.1111E-05 -93.8119 -7.1118E-05 -93.8492 -7.1129E-05 -94.4200 -7.1203E-05 -94.7500 -7.1158E-05 -94.7510 -7.1158E-05 -95.8320 -7.0560E-05 -95.8323 -7.0560E-05 -95.8327 -7.0559E-05 -95.8330 -7.0559E-05 -95.8337 -7.0559E-05 -95.8344 -7.0558E-05 -95.8352 -7.0557E-05 -95.8359 -7.0557E-05 -95.8366 -7.0556E-05 -95.8373 -7.0555E-05 -95.8380 -7.0555E-05 -95.8432 -7.0550E-05 -95.8534 -7.0541E-05 -95.8739 -7.0523E-05 -95.8998 -7.0500E-05 -95.9426 -7.0461E-05 -96.1830 -7.0218E-05 -96.8330 -6.9429E-05 -96.8333 -6.9428E-05 -96.8337 -6.9428E-05 -96.8340 -6.9427E-05 -97.9120 -6.7635E-05 -97.9123 -6.7634E-05 -97.9127 -6.7634E-05 -97.9130 -6.7633E-05 -97.9137 -6.7632E-05 -97.9144 -6.7630E-05 -97.9152 -6.7629E-05 -97.9159 -6.7627E-05 -97.9166 -6.7626E-05 -97.9173 -6.7625E-05 -97.9180 -6.7623E-05 -97.9232 -6.7613E-05 -97.9334 -6.7594E-05 -97.9539 -6.7554E-05 -97.9894 -6.7484E-05 -98.0424 -6.7380E-05 -98.1668 -6.7129E-05 -98.2911 -6.6871E-05 -98.4155 -6.6607E-05 -98.5399 -6.6337E-05 -98.6643 -6.6059E-05 -98.7886 -6.5775E-05 -98.9130 -6.5484E-05 -98.9133 -6.5483E-05 -98.9137 -6.5482E-05 -98.9140 -6.5482E-05 -99.9990 -6.2676E-05 -99.9993 -6.2675E-05 -99.9997 -6.2674E-05 -100.0000 -6.2673E-05 -100.0007 -6.2671E-05 -100.0014 -6.2669E-05 -100.0022 -6.2667E-05 -100.0029 -6.2665E-05 -100.0036 -6.2663E-05 -100.0043 -6.2661E-05 -100.0050 -6.2659E-05 -100.0102 -6.2645E-05 -100.0204 -6.2616E-05 -100.0409 -6.2559E-05 -100.0818 -6.2443E-05 -100.8870 -6.0055E-05 -101.0000 -5.9702E-05 -101.0003 -5.9701E-05 -101.0007 -5.9700E-05 -101.0010 -5.9699E-05 -102.0820 -5.6127E-05 -102.0823 -5.6126E-05 -102.0827 -5.6125E-05 -102.0830 -5.6124E-05 -102.0837 -5.6121E-05 -102.0844 -5.6119E-05 -102.0852 -5.6116E-05 -102.0859 -5.6114E-05 -102.0866 -5.6111E-05 -102.0873 -5.6109E-05 -102.0880 -5.6106E-05 -102.0932 -5.6089E-05 -102.1034 -5.6053E-05 -102.1239 -5.5982E-05 -102.1648 -5.5840E-05 -102.2291 -5.5615E-05 -102.3488 -5.5194E-05 -102.4685 -5.4770E-05 -102.5882 -5.4343E-05 -102.7079 -5.3912E-05 -102.8276 -5.3477E-05 -102.9473 -5.3039E-05 -103.0670 -5.2597E-05 -103.0830 -5.2538E-05 -103.0833 -5.2537E-05 -103.0837 -5.2535E-05 -103.0840 -5.2534E-05 -104.1620 -4.8420E-05 -104.1623 -4.8419E-05 -104.1627 -4.8418E-05 -104.1630 -4.8416E-05 -104.1637 -4.8414E-05 -104.1644 -4.8411E-05 -104.1652 -4.8408E-05 -104.1659 -4.8405E-05 -104.1666 -4.8402E-05 -104.1673 -4.8399E-05 -104.1680 -4.8397E-05 -104.1732 -4.8377E-05 -104.1834 -4.8336E-05 -104.2039 -4.8256E-05 -104.2350 -4.8133E-05 -104.2835 -4.7943E-05 -104.5739 -4.6790E-05 -104.6580 -4.6454E-05 -104.7422 -4.6118E-05 -104.8264 -4.5780E-05 -104.9105 -4.5441E-05 -104.9947 -4.5100E-05 -105.0788 -4.4759E-05 -105.1630 -4.4416E-05 -105.1633 -4.4415E-05 -105.1637 -4.4413E-05 -105.1640 -4.4412E-05 -106.2490 -3.9922E-05 -106.2493 -3.9921E-05 -106.2497 -3.9919E-05 -106.2500 -3.9918E-05 -106.2507 -3.9915E-05 -106.2514 -3.9912E-05 -106.2522 -3.9909E-05 -106.2529 -3.9906E-05 -106.2536 -3.9903E-05 -106.2543 -3.9900E-05 -106.2550 -3.9897E-05 -106.2602 -3.9875E-05 -106.2704 -3.9832E-05 -106.2909 -3.9746E-05 -106.3170 -3.9637E-05 -106.3600 -3.9456E-05 -106.6024 -3.8433E-05 -107.1850 -3.5961E-05 -107.2500 -3.5683E-05 -107.2503 -3.5682E-05 -107.2507 -3.5680E-05 -107.2510 -3.5679E-05 -108.3320 -3.1039E-05 -108.3323 -3.1038E-05 -108.3327 -3.1036E-05 -108.3330 -3.1035E-05 -108.3337 -3.1032E-05 -108.3344 -3.1029E-05 -108.3352 -3.1025E-05 -108.3359 -3.1022E-05 -108.3366 -3.1019E-05 -108.3373 -3.1016E-05 -108.3380 -3.1013E-05 -108.3432 -3.0991E-05 -108.3534 -3.0947E-05 -108.3739 -3.0859E-05 -108.3974 -3.0757E-05 -108.4376 -3.0584E-05 -109.3330 -2.6719E-05 -109.3333 -2.6718E-05 -109.3337 -2.6716E-05 -109.3340 -2.6715E-05 -110.4120 -2.2072E-05 -110.4123 -2.2071E-05 -110.4127 -2.2069E-05 -110.4130 -2.2068E-05 -110.4137 -2.2065E-05 -110.4144 -2.2062E-05 -110.4152 -2.2059E-05 -110.4159 -2.2056E-05 -110.4166 -2.2053E-05 -110.4173 -2.2049E-05 -110.4180 -2.2046E-05 -110.4232 -2.2024E-05 -110.4334 -2.1980E-05 -110.4539 -2.1893E-05 -110.4760 -2.1798E-05 -110.5147 -2.1632E-05 -111.4130 -1.7796E-05 -111.4133 -1.7795E-05 -111.4137 -1.7793E-05 -111.4140 -1.7792E-05 -112.4990 -1.3221E-05 -112.4993 -1.3220E-05 -112.4997 -1.3218E-05 -112.5000 -1.3217E-05 -112.5007 -1.3214E-05 -112.5014 -1.3211E-05 -112.5022 -1.3208E-05 -112.5029 -1.3205E-05 -112.5036 -1.3202E-05 -112.5043 -1.3199E-05 -112.5050 -1.3196E-05 -112.5102 -1.3174E-05 -112.5204 -1.3131E-05 -112.5402 -1.3049E-05 -112.5619 -1.2958E-05 -112.5990 -1.2804E-05 -113.4268 -9.3816E-06 -113.5000 -9.0819E-06 -113.5003 -9.0806E-06 -113.5007 -9.0790E-06 -113.5010 -9.0778E-06 -114.5820 -4.7103E-06 -114.5823 -4.7091E-06 -114.5827 -4.7075E-06 -114.5830 -4.7063E-06 -114.5837 -4.7034E-06 -114.5844 -4.7006E-06 -114.5852 -4.6977E-06 -114.5859 -4.6948E-06 -114.5866 -4.6919E-06 -114.5873 -4.6891E-06 -114.5880 -4.6862E-06 -114.5932 -4.6658E-06 -114.6034 -4.6250E-06 -114.6230 -4.5471E-06 -114.6444 -4.4618E-06 -114.6809 -4.3165E-06 -115.5830 -7.7329E-07 -115.5833 -7.7213E-07 -115.5837 -7.7057E-07 -115.5840 -7.6941E-07 -116.6620 3.3441E-06 -116.6623 3.3453E-06 -116.6627 3.3468E-06 -116.6630 3.3479E-06 -116.6637 3.3506E-06 -116.6644 3.3533E-06 -116.6652 3.3560E-06 -116.6659 3.3587E-06 -116.6666 3.3614E-06 -116.6673 3.3641E-06 -116.6680 3.3668E-06 -116.6732 3.3860E-06 -116.6834 3.4244E-06 -116.7030 3.4978E-06 -116.7244 3.5781E-06 -116.7610 3.7148E-06 -117.6630 7.0396E-06 -117.6633 7.0407E-06 -117.6637 7.0421E-06 -117.6640 7.0432E-06 -118.7490 1.0908E-05 -118.7493 1.0909E-05 -118.7497 1.0911E-05 -118.7500 1.0912E-05 -118.7507 1.0914E-05 -118.7514 1.0917E-05 -118.7522 1.0919E-05 -118.7529 1.0922E-05 -118.7536 1.0924E-05 -118.7543 1.0927E-05 -118.7550 1.0929E-05 -118.7602 1.0947E-05 -118.7704 1.0983E-05 -118.7902 1.1052E-05 -118.8118 1.1128E-05 -118.8489 1.1257E-05 -119.5770 1.3758E-05 -119.7500 1.4342E-05 -119.7503 1.4343E-05 -119.7507 1.4344E-05 -119.7510 1.4345E-05 -120.8320 1.7910E-05 -120.8323 1.7911E-05 -120.8327 1.7912E-05 -120.8330 1.7913E-05 -120.8337 1.7915E-05 -120.8344 1.7918E-05 -120.8352 1.7920E-05 -120.8359 1.7922E-05 -120.8366 1.7925E-05 -120.8373 1.7927E-05 -120.8380 1.7929E-05 -120.8432 1.7946E-05 -120.8534 1.7979E-05 -120.8736 1.8044E-05 -120.8955 1.8115E-05 -120.9336 1.8237E-05 -121.8330 2.1078E-05 -121.8333 2.1079E-05 -121.8337 2.1081E-05 -121.8340 2.1082E-05 -122.9120 2.4354E-05 -122.9123 2.4355E-05 -122.9127 2.4356E-05 -122.9130 2.4357E-05 -122.9137 2.4359E-05 -122.9144 2.4361E-05 -122.9152 2.4363E-05 -122.9159 2.4365E-05 -122.9166 2.4367E-05 -122.9173 2.4370E-05 -122.9180 2.4372E-05 -122.9232 2.4387E-05 -122.9334 2.4417E-05 -122.9539 2.4478E-05 -122.9763 2.4544E-05 -123.0154 2.4660E-05 -123.9130 2.7265E-05 -123.9133 2.7266E-05 -123.9137 2.7267E-05 -123.9140 2.7268E-05 -124.9990 3.0289E-05 -124.9993 3.0290E-05 -124.9997 3.0291E-05 -125.0000 3.0292E-05 -125.0007 3.0294E-05 -125.0014 3.0296E-05 -125.0022 3.0298E-05 -125.0029 3.0300E-05 -125.0036 3.0302E-05 -125.0043 3.0304E-05 -125.0050 3.0306E-05 -125.0102 3.0320E-05 -125.0204 3.0348E-05 -125.0409 3.0403E-05 -125.0641 3.0466E-05 -125.1040 3.0574E-05 -125.8550 3.2578E-05 -126.0000 3.2957E-05 -126.0003 3.2958E-05 -126.0007 3.2959E-05 -126.0010 3.2960E-05 -127.0820 3.5717E-05 -127.0823 3.5718E-05 -127.0827 3.5719E-05 -127.0830 3.5720E-05 -127.0837 3.5721E-05 -127.0844 3.5723E-05 -127.0852 3.5725E-05 -127.0859 3.5727E-05 -127.0866 3.5729E-05 -127.0873 3.5730E-05 -127.0880 3.5732E-05 -127.0932 3.5745E-05 -127.1034 3.5771E-05 -127.1239 3.5822E-05 -127.1480 3.5881E-05 -127.1889 3.5983E-05 -128.0830 3.8161E-05 -128.0833 3.8161E-05 -128.0837 3.8162E-05 -128.0840 3.8163E-05 -129.1620 4.0682E-05 -129.1623 4.0683E-05 -129.1627 4.0683E-05 -129.1630 4.0684E-05 -129.1637 4.0686E-05 -129.1644 4.0687E-05 -129.1652 4.0689E-05 -129.1659 4.0691E-05 -129.1666 4.0692E-05 -129.1673 4.0694E-05 -129.1680 4.0696E-05 -129.1732 4.0707E-05 -129.1834 4.0731E-05 -129.2039 4.0777E-05 -129.2290 4.0835E-05 -129.2709 4.0930E-05 -129.5022 4.1452E-05 -130.1630 4.2921E-05 -130.1633 4.2922E-05 -130.1637 4.2923E-05 -130.1640 4.2923E-05 -131.2490 4.5247E-05 -131.2493 4.5248E-05 -131.2497 4.5249E-05 -131.2500 4.5249E-05 -131.2507 4.5251E-05 -131.2514 4.5252E-05 -131.2522 4.5254E-05 -131.2529 4.5255E-05 -131.2536 4.5257E-05 -131.2543 4.5258E-05 -131.2550 4.5260E-05 -131.2602 4.5271E-05 -131.2704 4.5292E-05 -131.2909 4.5335E-05 -131.3171 4.5390E-05 -131.3602 4.5479E-05 -131.6041 4.5984E-05 -132.1920 4.7184E-05 -132.2500 4.7301E-05 -132.2503 4.7301E-05 -132.2507 4.7302E-05 -132.2510 4.7303E-05 -133.3320 4.9428E-05 -133.3323 4.9428E-05 -133.3327 4.9429E-05 -133.3330 4.9430E-05 -133.3337 4.9431E-05 -133.3344 4.9433E-05 -133.3352 4.9434E-05 -133.3359 4.9435E-05 -133.3366 4.9437E-05 -133.3373 4.9438E-05 -133.3380 4.9439E-05 -133.3432 4.9449E-05 -133.3534 4.9469E-05 -133.3739 4.9508E-05 -133.4012 4.9561E-05 -133.4456 4.9646E-05 -133.7032 5.0135E-05 -134.3330 5.1314E-05 -134.3333 5.1315E-05 -134.3337 5.1315E-05 -134.3340 5.1316E-05 -135.4120 5.3264E-05 -135.4123 5.3264E-05 -135.4127 5.3265E-05 -135.4130 5.3265E-05 -135.4137 5.3267E-05 -135.4144 5.3268E-05 -135.4152 5.3269E-05 -135.4159 5.3271E-05 -135.4166 5.3272E-05 -135.4173 5.3273E-05 -135.4180 5.3274E-05 -135.4232 5.3283E-05 -135.4334 5.3301E-05 -135.4539 5.3338E-05 -135.4825 5.3388E-05 -135.5281 5.3468E-05 -135.8002 5.3944E-05 -136.4130 5.4998E-05 -136.4133 5.4999E-05 -136.4137 5.5000E-05 -136.4140 5.5000E-05 -137.4990 5.6804E-05 -137.4993 5.6804E-05 -137.4997 5.6805E-05 -137.5000 5.6805E-05 -137.5007 5.6806E-05 -137.5014 5.6807E-05 -137.5022 5.6809E-05 -137.5029 5.6810E-05 -137.5036 5.6811E-05 -137.5043 5.6812E-05 -137.5050 5.6813E-05 -137.5102 5.6822E-05 -137.5204 5.6838E-05 -137.5409 5.6872E-05 -137.5707 5.6920E-05 -137.6177 5.6996E-05 -137.8997 5.7449E-05 -137.9826 5.7582E-05 -138.0655 5.7714E-05 -138.1484 5.7846E-05 -138.2313 5.7977E-05 -138.3142 5.8108E-05 -138.3971 5.8239E-05 -138.4800 5.8368E-05 -138.4880 5.8381E-05 -138.5000 5.8400E-05 -138.5003 5.8400E-05 -138.5007 5.8401E-05 -138.5010 5.8401E-05 -139.5820 6.0055E-05 -139.5823 6.0055E-05 -139.5827 6.0056E-05 -139.5830 6.0056E-05 -139.5837 6.0057E-05 -139.5844 6.0058E-05 -139.5852 6.0059E-05 -139.5859 6.0061E-05 -139.5866 6.0062E-05 -139.5873 6.0063E-05 -139.5880 6.0064E-05 -139.5932 6.0071E-05 -139.6034 6.0087E-05 -139.6239 6.0117E-05 -139.6550 6.0164E-05 -139.7034 6.0236E-05 -139.9937 6.0665E-05 -140.0779 6.0789E-05 -140.1620 6.0913E-05 -140.2462 6.1036E-05 -140.3304 6.1159E-05 -140.4146 6.1281E-05 -140.4988 6.1402E-05 -140.5830 6.1524E-05 -140.5833 6.1524E-05 -140.5837 6.1525E-05 -140.5840 6.1525E-05 -141.6620 6.3043E-05 -141.6623 6.3043E-05 -141.6627 6.3043E-05 -141.6630 6.3044E-05 -141.6637 6.3045E-05 -141.6644 6.3046E-05 -141.6652 6.3047E-05 -141.6659 6.3048E-05 -141.6666 6.3049E-05 -141.6673 6.3050E-05 -141.6680 6.3051E-05 -141.6732 6.3058E-05 -141.6834 6.3072E-05 -141.7039 6.3100E-05 -141.7364 6.3145E-05 -141.7862 6.3213E-05 -142.0849 6.3620E-05 -142.6630 6.4394E-05 -142.6633 6.4394E-05 -142.6637 6.4395E-05 -142.6640 6.4395E-05 -143.7490 6.5799E-05 -143.7493 6.5800E-05 -143.7497 6.5800E-05 -143.7500 6.5800E-05 -143.7507 6.5801E-05 -143.7514 6.5802E-05 -143.7522 6.5803E-05 -143.7529 6.5804E-05 -143.7536 6.5805E-05 -143.7543 6.5806E-05 -143.7550 6.5807E-05 -143.7602 6.5813E-05 -143.7704 6.5826E-05 -143.7909 6.5852E-05 -143.8248 6.5895E-05 -143.8760 6.5959E-05 -144.1836 6.6344E-05 -144.7500 6.7040E-05 -144.7503 6.7041E-05 -144.7507 6.7041E-05 -144.7510 6.7042E-05 -144.7535 6.7045E-05 -145.8320 6.8325E-05 -145.8323 6.8326E-05 -145.8327 6.8326E-05 -145.8330 6.8326E-05 -145.8337 6.8327E-05 -145.8344 6.8328E-05 -145.8352 6.8329E-05 -145.8359 6.8330E-05 -145.8366 6.8331E-05 -145.8373 6.8331E-05 -145.8380 6.8332E-05 -145.8432 6.8338E-05 -145.8534 6.8350E-05 -145.8739 6.8374E-05 -145.9092 6.8415E-05 -145.9620 6.8476E-05 -146.0864 6.8619E-05 -146.2108 6.8762E-05 -146.3353 6.8903E-05 -146.4597 6.9044E-05 -146.5841 6.9185E-05 -146.7086 6.9324E-05 -146.8330 6.9463E-05 -146.8333 6.9464E-05 -146.8337 6.9464E-05 -146.8340 6.9464E-05 -147.9120 7.0637E-05 -147.9123 7.0637E-05 -147.9127 7.0638E-05 -147.9130 7.0638E-05 -147.9137 7.0639E-05 -147.9144 7.0640E-05 -147.9152 7.0640E-05 -147.9159 7.0641E-05 -147.9166 7.0642E-05 -147.9173 7.0643E-05 -147.9180 7.0643E-05 -147.9232 7.0649E-05 -147.9334 7.0660E-05 -147.9539 7.0681E-05 -147.9907 7.0721E-05 -148.0451 7.0778E-05 -148.1691 7.0909E-05 -148.2931 7.1039E-05 -148.4170 7.1168E-05 -148.5410 7.1296E-05 -148.6650 7.1424E-05 -148.7890 7.1552E-05 -148.9130 7.1678E-05 -148.9133 7.1678E-05 -148.9137 7.1679E-05 -148.9140 7.1679E-05 -149.9990 7.2757E-05 -149.9993 7.2757E-05 -149.9997 7.2758E-05 -150.0000 7.2758E-05 -150.0007 7.2759E-05 -150.0014 7.2759E-05 -150.0022 7.2760E-05 -150.0029 7.2761E-05 -150.0036 7.2762E-05 -150.0043 7.2762E-05 -150.0050 7.2763E-05 -150.0102 7.2768E-05 -150.0204 7.2778E-05 -150.0409 7.2798E-05 -150.0793 7.2835E-05 -150.1354 7.2889E-05 -150.2589 7.3008E-05 -150.3824 7.3126E-05 -150.5059 7.3243E-05 -150.6294 7.3360E-05 -150.7530 7.3476E-05 -150.8765 7.3592E-05 -151.0000 7.3707E-05 -151.0003 7.3707E-05 -151.0007 7.3707E-05 -151.0010 7.3708E-05 -151.6593 7.4309E-05 -152.0820 7.4686E-05 -152.0823 7.4686E-05 -152.0827 7.4686E-05 -152.0830 7.4687E-05 -152.0837 7.4687E-05 -152.0844 7.4688E-05 -152.0852 7.4688E-05 -152.0859 7.4689E-05 -152.0866 7.4690E-05 -152.0873 7.4690E-05 -152.0880 7.4691E-05 -152.0932 7.4695E-05 -152.1034 7.4705E-05 -152.1239 7.4723E-05 -152.1640 7.4758E-05 -152.2218 7.4809E-05 -153.0830 7.5549E-05 -153.0833 7.5549E-05 -153.0837 7.5550E-05 -153.0840 7.5550E-05 -154.1620 7.6436E-05 -154.1623 7.6436E-05 -154.1627 7.6436E-05 -154.1630 7.6436E-05 -154.1637 7.6437E-05 -154.1644 7.6437E-05 -154.1652 7.6438E-05 -154.1659 7.6439E-05 -154.1666 7.6439E-05 -154.1673 7.6440E-05 -154.1680 7.6440E-05 -154.1732 7.6444E-05 -154.1834 7.6453E-05 -154.2039 7.6469E-05 -154.2448 7.6502E-05 -154.3049 7.6550E-05 -154.4275 7.6647E-05 -154.5501 7.6743E-05 -154.6727 7.6840E-05 -154.7953 7.6935E-05 -154.9178 7.7030E-05 -155.0404 7.7124E-05 -155.1630 7.7218E-05 -155.1637 7.7219E-05 -155.1640 7.7219E-05 -156.2490 7.8026E-05 -156.2493 7.8026E-05 -156.2497 7.8026E-05 -156.2500 7.8027E-05 -156.2507 7.8027E-05 -156.2514 7.8028E-05 -156.2522 7.8028E-05 -156.2529 7.8029E-05 -156.2536 7.8029E-05 -156.2543 7.8030E-05 -156.2550 7.8030E-05 -156.2602 7.8034E-05 -156.2704 7.8041E-05 -156.2909 7.8056E-05 -156.3318 7.8086E-05 -156.3948 7.8131E-05 -156.5054 7.8210E-05 -156.6160 7.8289E-05 -156.7267 7.8368E-05 -156.8373 7.8446E-05 -156.9480 7.8523E-05 -157.0586 7.8600E-05 -157.1692 7.8677E-05 -157.2500 7.8733E-05 -157.2503 7.8733E-05 -157.2510 7.8734E-05 -157.9213 7.9188E-05 -158.3320 7.9459E-05 -158.3323 7.9459E-05 -158.3327 7.9459E-05 -158.3330 7.9459E-05 -158.3337 7.9460E-05 -158.3344 7.9460E-05 -158.3352 7.9461E-05 -158.3359 7.9461E-05 -158.3366 7.9462E-05 -158.3373 7.9462E-05 -158.3380 7.9463E-05 -158.3432 7.9466E-05 -158.3534 7.9473E-05 -158.3739 7.9486E-05 -158.4148 7.9513E-05 -158.4808 7.9555E-05 -158.5980 7.9631E-05 -158.7151 7.9706E-05 -158.8323 7.9781E-05 -158.9495 7.9855E-05 -159.0667 7.9929E-05 -159.1838 8.0003E-05 -159.3010 8.0076E-05 -159.3330 8.0096E-05 -159.3337 8.0096E-05 -159.3340 8.0096E-05 -160.4120 8.0747E-05 -160.4123 8.0747E-05 -160.4127 8.0747E-05 -160.4130 8.0747E-05 -160.4137 8.0748E-05 -160.4144 8.0748E-05 -160.4152 8.0748E-05 -160.4159 8.0749E-05 -160.4166 8.0749E-05 -160.4173 8.0750E-05 -160.4180 8.0750E-05 -160.4232 8.0753E-05 -160.4334 8.0759E-05 -160.4539 8.0771E-05 -160.4948 8.0795E-05 -160.5641 8.0835E-05 -160.6854 8.0906E-05 -160.8066 8.0976E-05 -160.9279 8.1045E-05 -161.0492 8.1114E-05 -161.1705 8.1183E-05 -161.2917 8.1251E-05 -161.4130 8.1319E-05 -161.4137 8.1319E-05 -161.4140 8.1319E-05 -162.4990 8.1906E-05 -162.4993 8.1906E-05 -162.4997 8.1906E-05 -162.5000 8.1907E-05 -162.5007 8.1907E-05 -162.5014 8.1907E-05 -162.5022 8.1908E-05 -162.5029 8.1908E-05 -162.5036 8.1909E-05 -162.5043 8.1909E-05 -162.5050 8.1909E-05 -162.5102 8.1912E-05 -162.5204 8.1917E-05 -162.5409 8.1928E-05 -162.5818 8.1950E-05 -162.6547 8.1988E-05 -162.7754 8.2050E-05 -162.8962 8.2113E-05 -163.0169 8.2175E-05 -163.1377 8.2236E-05 -163.2585 8.2297E-05 -163.3792 8.2358E-05 -163.5000 8.2418E-05 -163.5007 8.2419E-05 -163.5010 8.2419E-05 -164.4113 8.2861E-05 -164.5820 8.2942E-05 -164.5823 8.2942E-05 -164.5827 8.2942E-05 -164.5830 8.2942E-05 -164.5837 8.2942E-05 -164.5844 8.2943E-05 -164.5852 8.2943E-05 -164.5859 8.2943E-05 -164.5866 8.2944E-05 -164.5873 8.2944E-05 -164.5880 8.2944E-05 -164.5932 8.2947E-05 -164.6034 8.2952E-05 -164.6239 8.2961E-05 -164.6648 8.2980E-05 -164.7415 8.3016E-05 -164.8617 8.3072E-05 -164.9820 8.3127E-05 -165.1022 8.3182E-05 -165.2224 8.3237E-05 -165.3426 8.3291E-05 -165.4628 8.3345E-05 -165.5830 8.3399E-05 -165.5837 8.3399E-05 -165.5840 8.3399E-05 -166.6620 8.3864E-05 -166.6623 8.3865E-05 -166.6627 8.3865E-05 -166.6630 8.3865E-05 -166.6637 8.3865E-05 -166.6644 8.3865E-05 -166.6652 8.3866E-05 -166.6659 8.3866E-05 -166.6666 8.3866E-05 -166.6673 8.3867E-05 -166.6680 8.3867E-05 -166.6732 8.3869E-05 -166.6834 8.3873E-05 -166.7039 8.3882E-05 -166.7448 8.3899E-05 -166.8257 8.3933E-05 -166.9453 8.3982E-05 -167.0649 8.4031E-05 -167.1846 8.4080E-05 -167.3042 8.4128E-05 -167.4238 8.4177E-05 -167.5434 8.4224E-05 -167.6630 8.4272E-05 -167.6637 8.4272E-05 -167.6640 8.4272E-05 -168.7490 8.4689E-05 -168.7493 8.4689E-05 -168.7497 8.4689E-05 -168.7500 8.4689E-05 -168.7507 8.4689E-05 -168.7514 8.4690E-05 -168.7522 8.4690E-05 -168.7529 8.4690E-05 -168.7536 8.4690E-05 -168.7543 8.4691E-05 -168.7550 8.4691E-05 -168.7602 8.4693E-05 -168.7704 8.4697E-05 -168.7909 8.4704E-05 -168.8318 8.4719E-05 -168.9138 8.4750E-05 -169.0332 8.4793E-05 -169.1527 8.4837E-05 -169.2721 8.4880E-05 -169.3916 8.4923E-05 -169.5111 8.4966E-05 -169.6305 8.5008E-05 -169.7500 8.5051E-05 -169.7507 8.5051E-05 -169.7510 8.5051E-05 -170.7690 8.5398E-05 -170.8320 8.5419E-05 -170.8323 8.5419E-05 -170.8327 8.5419E-05 -170.8330 8.5419E-05 -170.8337 8.5420E-05 -170.8344 8.5420E-05 -170.8352 8.5420E-05 -170.8359 8.5420E-05 -170.8366 8.5421E-05 -170.8373 8.5421E-05 -170.8380 8.5421E-05 -170.8432 8.5423E-05 -170.8534 8.5426E-05 -170.8739 8.5433E-05 -170.9148 8.5446E-05 -170.9968 8.5473E-05 -171.1162 8.5512E-05 -171.2357 8.5551E-05 -171.3551 8.5589E-05 -171.4746 8.5627E-05 -171.5941 8.5665E-05 -171.7135 8.5702E-05 -171.8330 8.5740E-05 -171.8337 8.5740E-05 -171.8340 8.5740E-05 -172.9120 8.6065E-05 -172.9123 8.6065E-05 -172.9127 8.6065E-05 -172.9130 8.6065E-05 -172.9137 8.6066E-05 -172.9144 8.6066E-05 -172.9152 8.6066E-05 -172.9159 8.6066E-05 -172.9166 8.6066E-05 -172.9173 8.6067E-05 -172.9180 8.6067E-05 -172.9232 8.6068E-05 -172.9334 8.6071E-05 -172.9539 8.6077E-05 -172.9948 8.6089E-05 -173.0768 8.6113E-05 -173.9130 8.6349E-05 -173.9137 8.6349E-05 -173.9140 8.6349E-05 -174.9990 8.6638E-05 -174.9993 8.6638E-05 -174.9997 8.6638E-05 -175.0000 8.6638E-05 -175.0007 8.6638E-05 -175.0014 8.6638E-05 -175.0022 8.6639E-05 -175.0029 8.6639E-05 -175.0036 8.6639E-05 -175.0043 8.6639E-05 -175.0050 8.6639E-05 -175.0102 8.6641E-05 -175.0204 8.6643E-05 -175.0409 8.6648E-05 -175.0818 8.6659E-05 -175.3276 8.6721E-05 -176.0000 8.6888E-05 -176.0010 8.6888E-05 -177.0660 8.7138E-05 -177.0820 8.7141E-05 -177.0823 8.7141E-05 -177.0827 8.7141E-05 -177.0830 8.7141E-05 -177.0837 8.7142E-05 -177.0844 8.7142E-05 -177.0852 8.7142E-05 -177.0859 8.7142E-05 -177.0866 8.7142E-05 -177.0873 8.7142E-05 -177.0880 8.7143E-05 -177.0932 8.7144E-05 -177.1034 8.7146E-05 -177.1239 8.7151E-05 -177.1648 8.7160E-05 -177.4106 8.7215E-05 -178.0830 8.7361E-05 -178.0840 8.7361E-05 -179.1620 8.7583E-05 -179.1623 8.7583E-05 -179.1627 8.7583E-05 -179.1630 8.7583E-05 -179.1637 8.7583E-05 -179.1644 8.7583E-05 -179.1652 8.7583E-05 -179.1659 8.7583E-05 -179.1666 8.7584E-05 -179.1673 8.7584E-05 -179.1680 8.7584E-05 -179.1732 8.7585E-05 -179.1834 8.7587E-05 -179.2039 8.7591E-05 -179.2448 8.7599E-05 -180.1630 8.7775E-05 -180.1640 8.7775E-05 -181.2490 8.7970E-05 -181.2493 8.7970E-05 -181.2497 8.7970E-05 -181.2500 8.7971E-05 -181.2507 8.7971E-05 -181.2514 8.7971E-05 -181.2522 8.7971E-05 -181.2529 8.7971E-05 -181.2536 8.7971E-05 -181.2543 8.7971E-05 -181.2550 8.7971E-05 -181.2602 8.7972E-05 -181.2704 8.7974E-05 -181.2909 8.7978E-05 -181.3318 8.7985E-05 -182.2500 8.8138E-05 -182.2510 8.8138E-05 -183.3320 8.8307E-05 -183.3321 8.8307E-05 -183.3323 8.8307E-05 -183.3327 8.8307E-05 -183.3330 8.8308E-05 -183.3337 8.8308E-05 -183.3344 8.8308E-05 -183.3352 8.8308E-05 -183.3359 8.8308E-05 -183.3366 8.8308E-05 -183.3373 8.8308E-05 -183.3380 8.8308E-05 -183.3432 8.8309E-05 -183.3534 8.8311E-05 -183.3739 8.8314E-05 -183.4148 8.8320E-05 -184.3330 8.8453E-05 -184.3340 8.8453E-05 -185.4120 8.8599E-05 -185.4123 8.8599E-05 -185.4127 8.8599E-05 -185.4130 8.8599E-05 -185.4137 8.8599E-05 -185.4144 8.8599E-05 -185.4152 8.8599E-05 -185.4159 8.8600E-05 -185.4166 8.8600E-05 -185.4173 8.8600E-05 -185.4180 8.8600E-05 -185.4232 8.8600E-05 -185.4334 8.8602E-05 -185.4539 8.8604E-05 -185.4948 8.8610E-05 -186.4130 8.8725E-05 -186.4140 8.8725E-05 -187.4990 8.8851E-05 -187.4993 8.8851E-05 -187.4997 8.8851E-05 -187.5000 8.8851E-05 -187.5007 8.8851E-05 -187.5014 8.8851E-05 -187.5022 8.8851E-05 -187.5029 8.8851E-05 -187.5036 8.8852E-05 -187.5043 8.8852E-05 -187.5050 8.8852E-05 -187.5102 8.8852E-05 -187.5204 8.8853E-05 -187.5409 8.8856E-05 -187.5818 8.8860E-05 -188.5000 8.8959E-05 -188.5010 8.8959E-05 -189.5820 8.9066E-05 -189.5823 8.9066E-05 -189.5827 8.9066E-05 -189.5830 8.9066E-05 -189.5834 8.9066E-05 -189.5837 8.9066E-05 -189.5841 8.9066E-05 -189.5844 8.9066E-05 -189.5848 8.9066E-05 -189.5851 8.9066E-05 -189.5855 8.9066E-05 -189.5880 8.9066E-05 -189.5932 8.9067E-05 -189.6034 8.9068E-05 -189.6239 8.9070E-05 -189.6648 8.9074E-05 -190.5830 8.9157E-05 -190.5840 8.9157E-05 -191.6620 8.9247E-05 -191.6623 8.9247E-05 -191.6627 8.9247E-05 -191.6630 8.9248E-05 -191.6637 8.9248E-05 -191.6644 8.9248E-05 -191.6652 8.9248E-05 -191.6659 8.9248E-05 -191.6666 8.9248E-05 -191.6673 8.9248E-05 -191.6680 8.9248E-05 -191.6732 8.9248E-05 -191.6834 8.9249E-05 -191.7039 8.9251E-05 -191.7448 8.9254E-05 -192.6630 8.9324E-05 -192.6640 8.9324E-05 -193.7490 8.9400E-05 -193.7493 8.9400E-05 -193.7497 8.9400E-05 -193.7500 8.9400E-05 -193.7507 8.9400E-05 -193.7514 8.9400E-05 -193.7522 8.9400E-05 -193.7529 8.9400E-05 -193.7536 8.9400E-05 -193.7543 8.9400E-05 -193.7550 8.9400E-05 -193.7602 8.9400E-05 -193.7704 8.9401E-05 -193.7909 8.9402E-05 -193.8318 8.9405E-05 -194.7500 8.9463E-05 -194.7510 8.9463E-05 -195.8320 8.9524E-05 -195.8323 8.9524E-05 -195.8327 8.9524E-05 -195.8330 8.9524E-05 -195.8337 8.9524E-05 -195.8344 8.9524E-05 -195.8352 8.9525E-05 -195.8359 8.9525E-05 -195.8366 8.9525E-05 -195.8373 8.9525E-05 -195.8380 8.9525E-05 -195.8432 8.9525E-05 -195.8534 8.9525E-05 -195.8739 8.9527E-05 -195.9148 8.9529E-05 -196.4913 8.9559E-05 -196.8330 8.9575E-05 -196.8340 8.9576E-05 -197.9120 8.9625E-05 -197.9123 8.9625E-05 -197.9127 8.9625E-05 -197.9130 8.9625E-05 -197.9137 8.9625E-05 -197.9144 8.9625E-05 -197.9152 8.9625E-05 -197.9159 8.9625E-05 -197.9166 8.9625E-05 -197.9173 8.9625E-05 -197.9180 8.9625E-05 -197.9232 8.9625E-05 -197.9334 8.9625E-05 -197.9539 8.9626E-05 -197.9948 8.9628E-05 -198.9130 8.9665E-05 -198.9140 8.9665E-05 -199.9990 8.9703E-05 -199.9993 8.9703E-05 -199.9997 8.9703E-05 -200.0000 8.9703E-05 -200.0007 8.9703E-05 -200.0014 8.9703E-05 -200.0022 8.9703E-05 -200.0029 8.9703E-05 -200.0036 8.9703E-05 -200.0043 8.9703E-05 -200.0050 8.9703E-05 -200.0102 8.9703E-05 -200.0204 8.9704E-05 -200.0409 8.9704E-05 -200.0818 8.9706E-05 -201.0000 8.9733E-05 -201.0010 8.9733E-05 -202.0820 8.9761E-05 -202.0823 8.9761E-05 -202.0827 8.9761E-05 -202.0830 8.9761E-05 -202.0837 8.9761E-05 -202.0844 8.9761E-05 -202.0852 8.9761E-05 -202.0859 8.9761E-05 -202.0866 8.9761E-05 -202.0873 8.9761E-05 -202.0880 8.9761E-05 -202.0932 8.9762E-05 -202.1034 8.9762E-05 -202.1239 8.9762E-05 -202.1648 8.9763E-05 -202.9620 8.9780E-05 -203.0830 8.9783E-05 -203.0840 8.9783E-05 -204.1620 8.9802E-05 -204.1623 8.9802E-05 -204.1627 8.9802E-05 -204.1630 8.9802E-05 -204.1637 8.9802E-05 -204.1644 8.9802E-05 -204.1652 8.9802E-05 -204.1659 8.9802E-05 -204.1666 8.9802E-05 -204.1673 8.9802E-05 -204.1680 8.9802E-05 -204.1732 8.9802E-05 -204.1834 8.9802E-05 -204.2039 8.9802E-05 -204.2448 8.9803E-05 -205.1630 8.9815E-05 -205.1640 8.9815E-05 -206.2490 8.9826E-05 -206.2493 8.9826E-05 -206.2497 8.9826E-05 -206.2500 8.9826E-05 -206.2507 8.9826E-05 -206.2514 8.9826E-05 -206.2522 8.9826E-05 -206.2529 8.9826E-05 -206.2536 8.9826E-05 -206.2543 8.9826E-05 -206.2550 8.9826E-05 -206.2602 8.9826E-05 -206.2704 8.9826E-05 -206.2909 8.9826E-05 -206.3318 8.9827E-05 -207.2500 8.9832E-05 -207.2510 8.9832E-05 -208.3320 8.9835E-05 -208.3323 8.9835E-05 -208.3327 8.9835E-05 -208.3330 8.9835E-05 -208.3345 8.9835E-05 -208.3359 8.9835E-05 -208.3374 8.9835E-05 -208.3388 8.9835E-05 -208.3403 8.9835E-05 -208.3417 8.9835E-05 -208.3432 8.9835E-05 -208.3534 8.9836E-05 -208.3739 8.9836E-05 -208.4148 8.9836E-05 -209.3010 8.9835E-05 -209.3330 8.9835E-05 -209.3340 8.9835E-05 -210.4120 8.9832E-05 -210.4123 8.9832E-05 -210.4127 8.9832E-05 -210.4130 8.9832E-05 -210.4145 8.9832E-05 -210.4159 8.9832E-05 -210.4174 8.9832E-05 -210.4188 8.9832E-05 -210.4203 8.9832E-05 -210.4217 8.9832E-05 -210.4232 8.9832E-05 -210.4334 8.9832E-05 -210.4539 8.9832E-05 -210.4948 8.9832E-05 -211.4130 8.9826E-05 -211.4140 8.9826E-05 -212.4990 8.9817E-05 -212.4993 8.9817E-05 -212.4997 8.9817E-05 -212.5000 8.9817E-05 -212.5015 8.9817E-05 -212.5029 8.9817E-05 -212.5044 8.9817E-05 -212.5058 8.9817E-05 -212.5073 8.9817E-05 -212.5087 8.9817E-05 -212.5102 8.9817E-05 -212.5204 8.9816E-05 -212.5409 8.9816E-05 -212.5818 8.9816E-05 -213.5000 8.9806E-05 -213.5010 8.9806E-05 -214.5820 8.9791E-05 -214.5827 8.9791E-05 -214.5830 8.9791E-05 -214.5888 8.9791E-05 -214.5947 8.9791E-05 -214.6005 8.9791E-05 -214.6064 8.9791E-05 -214.6122 8.9790E-05 -214.6180 8.9790E-05 -214.6239 8.9790E-05 -215.5820 8.9775E-05 -215.5830 8.9775E-05 -215.5840 8.9775E-05 -216.6620 8.9756E-05 -216.6623 8.9756E-05 -216.6627 8.9756E-05 -216.6630 8.9756E-05 -216.6645 8.9756E-05 -216.6659 8.9756E-05 -216.6674 8.9756E-05 -216.6688 8.9756E-05 -216.6703 8.9756E-05 -216.6717 8.9755E-05 -216.6732 8.9755E-05 -216.6834 8.9755E-05 -216.7039 8.9755E-05 -216.7448 8.9754E-05 -217.6630 8.9736E-05 -217.6640 8.9736E-05 -218.7490 8.9712E-05 -218.7493 8.9712E-05 -218.7497 8.9712E-05 -218.7500 8.9712E-05 -218.7515 8.9712E-05 -218.7529 8.9712E-05 -218.7544 8.9712E-05 -218.7558 8.9712E-05 -218.7573 8.9712E-05 -218.7587 8.9712E-05 -218.7602 8.9712E-05 -218.7704 8.9711E-05 -218.7909 8.9711E-05 -218.8318 8.9710E-05 -219.7500 8.9688E-05 -219.7510 8.9688E-05 -220.8320 8.9660E-05 -220.8323 8.9660E-05 -220.8327 8.9660E-05 -220.8330 8.9660E-05 -220.8345 8.9660E-05 -220.8359 8.9660E-05 -220.8374 8.9660E-05 -220.8388 8.9660E-05 -220.8403 8.9660E-05 -220.8417 8.9660E-05 -220.8432 8.9660E-05 -220.8534 8.9660E-05 -220.8739 8.9659E-05 -220.9148 8.9658E-05 -221.8330 8.9633E-05 -221.8340 8.9633E-05 -221.8352 8.9633E-05 -222.9120 8.9602E-05 -222.9123 8.9602E-05 -222.9127 8.9602E-05 -222.9130 8.9602E-05 -222.9145 8.9602E-05 -222.9159 8.9602E-05 -222.9174 8.9602E-05 -222.9188 8.9602E-05 -222.9203 8.9602E-05 -222.9217 8.9602E-05 -222.9232 8.9602E-05 -222.9334 8.9602E-05 -222.9539 8.9601E-05 -222.9948 8.9600E-05 -223.9130 8.9572E-05 -223.9140 8.9572E-05 -224.9990 8.9538E-05 -224.9993 8.9538E-05 -224.9997 8.9538E-05 -225.0000 8.9538E-05 -225.0007 8.9538E-05 -225.0014 8.9538E-05 -225.0022 8.9538E-05 -225.0029 8.9538E-05 -225.0036 8.9538E-05 -225.0043 8.9538E-05 -225.0050 8.9538E-05 -225.0102 8.9538E-05 -225.0204 8.9537E-05 -225.0409 8.9537E-05 -225.0818 8.9535E-05 -226.0000 8.9505E-05 -226.0010 8.9505E-05 -227.0820 8.9469E-05 -227.0823 8.9469E-05 -227.0827 8.9469E-05 -227.0830 8.9468E-05 -227.0837 8.9468E-05 -227.0844 8.9468E-05 -227.0852 8.9468E-05 -227.0859 8.9468E-05 -227.0866 8.9468E-05 -227.0873 8.9468E-05 -227.0880 8.9468E-05 -227.0932 8.9468E-05 -227.1034 8.9468E-05 -227.1239 8.9467E-05 -227.1648 8.9466E-05 -228.0830 8.9433E-05 -228.0840 8.9433E-05 -228.7393 8.9410E-05 -229.1620 8.9394E-05 -229.1623 8.9394E-05 -229.1627 8.9394E-05 -229.1630 8.9394E-05 -229.1637 8.9394E-05 -229.1644 8.9394E-05 -229.1652 8.9394E-05 -229.1659 8.9394E-05 -229.1666 8.9394E-05 -229.1673 8.9394E-05 -229.1680 8.9394E-05 -229.1732 8.9394E-05 -229.1834 8.9393E-05 -229.2039 8.9393E-05 -229.2448 8.9391E-05 -230.1630 8.9357E-05 -230.1640 8.9357E-05 -231.2490 8.9315E-05 -231.2493 8.9315E-05 -231.2497 8.9315E-05 -231.2500 8.9315E-05 -231.2507 8.9315E-05 -231.2514 8.9315E-05 -231.2522 8.9315E-05 -231.2529 8.9315E-05 -231.2536 8.9315E-05 -231.2543 8.9315E-05 -231.2550 8.9315E-05 -231.2602 8.9315E-05 -231.2704 8.9314E-05 -231.2909 8.9314E-05 -231.3318 8.9312E-05 -232.2500 8.9276E-05 -232.2510 8.9276E-05 -233.3320 8.9233E-05 -233.3323 8.9233E-05 -233.3327 8.9233E-05 -233.3330 8.9233E-05 -233.3337 8.9233E-05 -233.3344 8.9232E-05 -233.3352 8.9232E-05 -233.3359 8.9232E-05 -233.3366 8.9232E-05 -233.3373 8.9232E-05 -233.3380 8.9232E-05 -233.3432 8.9232E-05 -233.3534 8.9232E-05 -233.3739 8.9231E-05 -233.4148 8.9229E-05 -234.3330 8.9192E-05 -234.3340 8.9192E-05 -235.2453 8.9154E-05 -235.4120 8.9147E-05 -235.4123 8.9147E-05 -235.4127 8.9147E-05 -235.4130 8.9147E-05 -235.4137 8.9147E-05 -235.4144 8.9147E-05 -235.4152 8.9146E-05 -235.4159 8.9146E-05 -235.4166 8.9146E-05 -235.4173 8.9146E-05 -235.4180 8.9146E-05 -235.4232 8.9146E-05 -235.4334 8.9146E-05 -235.4539 8.9145E-05 -235.4948 8.9143E-05 -236.4130 8.9104E-05 -236.4140 8.9104E-05 -237.4990 8.9057E-05 -237.4993 8.9057E-05 -237.4997 8.9057E-05 -237.5000 8.9057E-05 -237.5007 8.9057E-05 -237.5014 8.9057E-05 -237.5022 8.9057E-05 -237.5029 8.9057E-05 -237.5036 8.9057E-05 -237.5043 8.9057E-05 -237.5050 8.9057E-05 -237.5102 8.9057E-05 -237.5204 8.9056E-05 -237.5409 8.9055E-05 -237.5818 8.9054E-05 -238.5000 8.9013E-05 -238.5010 8.9013E-05 -239.5820 8.8965E-05 -239.5823 8.8965E-05 -239.5827 8.8965E-05 -239.5830 8.8965E-05 -239.5837 8.8965E-05 -239.5844 8.8965E-05 -239.5852 8.8965E-05 -239.5859 8.8965E-05 -239.5866 8.8965E-05 -239.5873 8.8965E-05 -239.5880 8.8965E-05 -239.5932 8.8965E-05 -239.6034 8.8964E-05 -239.6239 8.8963E-05 -239.6648 8.8962E-05 -240.5830 8.8920E-05 -240.5840 8.8920E-05 -241.6050 8.8874E-05 -241.6620 8.8871E-05 -241.6623 8.8871E-05 -241.6627 8.8871E-05 -241.6630 8.8871E-05 -241.6637 8.8871E-05 -241.6644 8.8871E-05 -241.6652 8.8871E-05 -241.6659 8.8871E-05 -241.6666 8.8871E-05 -241.6673 8.8871E-05 -241.6680 8.8871E-05 -241.6732 8.8871E-05 -241.6834 8.8870E-05 -241.7039 8.8869E-05 -241.7448 8.8867E-05 -242.6630 8.8825E-05 -242.6640 8.8825E-05 -243.7490 8.8774E-05 -243.7493 8.8774E-05 -243.7497 8.8774E-05 -243.7500 8.8774E-05 -243.7507 8.8774E-05 -243.7514 8.8774E-05 -243.7522 8.8774E-05 -243.7529 8.8774E-05 -243.7536 8.8774E-05 -243.7543 8.8774E-05 -243.7550 8.8774E-05 -243.7602 8.8774E-05 -243.7704 8.8773E-05 -243.7909 8.8772E-05 -243.8318 8.8771E-05 -244.7500 8.8727E-05 -244.7510 8.8727E-05 -245.8320 8.8676E-05 -245.8323 8.8676E-05 -245.8327 8.8676E-05 -245.8330 8.8676E-05 -245.8337 8.8676E-05 -245.8344 8.8676E-05 -245.8352 8.8676E-05 -245.8359 8.8676E-05 -245.8366 8.8676E-05 -245.8373 8.8676E-05 -245.8380 8.8676E-05 -245.8432 8.8675E-05 -245.8534 8.8675E-05 -245.8739 8.8674E-05 -245.9148 8.8672E-05 -246.8330 8.8628E-05 -246.8340 8.8628E-05 -247.9040 8.8576E-05 -247.9120 8.8576E-05 -247.9123 8.8576E-05 -247.9127 8.8576E-05 -247.9130 8.8576E-05 -247.9137 8.8576E-05 -247.9144 8.8576E-05 -247.9152 8.8576E-05 -247.9159 8.8576E-05 -247.9166 8.8576E-05 -247.9173 8.8576E-05 -247.9180 8.8576E-05 -247.9232 8.8575E-05 -247.9334 8.8575E-05 -247.9539 8.8574E-05 -247.9948 8.8572E-05 -248.9130 8.8527E-05 -248.9140 8.8527E-05 -249.9990 8.8474E-05 -249.9993 8.8474E-05 -249.9997 8.8474E-05 -250.0000 8.8474E-05 -250.0007 8.8474E-05 -250.0014 8.8474E-05 -250.0022 8.8474E-05 -250.0029 8.8474E-05 -250.0036 8.8474E-05 -250.0043 8.8474E-05 -250.0050 8.8474E-05 -250.0102 8.8473E-05 -250.0204 8.8473E-05 -250.0409 8.8472E-05 -250.0818 8.8470E-05 -251.0000 8.8425E-05 -251.0010 8.8425E-05 -252.0820 8.8371E-05 -252.0823 8.8371E-05 -252.0827 8.8371E-05 -252.0830 8.8371E-05 -252.0837 8.8371E-05 -252.0844 8.8371E-05 -252.0852 8.8371E-05 -252.0859 8.8371E-05 -252.0866 8.8371E-05 -252.0873 8.8371E-05 -252.0880 8.8371E-05 -252.0932 8.8370E-05 -252.1034 8.8370E-05 -252.1239 8.8369E-05 -252.1648 8.8367E-05 -253.0830 8.8321E-05 -253.0840 8.8321E-05 -254.1620 8.8267E-05 -254.1623 8.8267E-05 -254.1627 8.8267E-05 -254.1630 8.8267E-05 -254.1637 8.8267E-05 -254.1644 8.8267E-05 -254.1652 8.8267E-05 -254.1659 8.8267E-05 -254.1666 8.8267E-05 -254.1673 8.8267E-05 -254.1680 8.8267E-05 -254.1732 8.8266E-05 -254.1834 8.8266E-05 -254.2039 8.8265E-05 -254.2448 8.8263E-05 -255.1630 8.8216E-05 -255.1640 8.8216E-05 -256.2490 8.8161E-05 -256.2493 8.8161E-05 -256.2497 8.8161E-05 -256.2500 8.8161E-05 -256.2507 8.8161E-05 -256.2514 8.8161E-05 -256.2522 8.8161E-05 -256.2529 8.8161E-05 -256.2536 8.8161E-05 -256.2543 8.8161E-05 -256.2550 8.8161E-05 -256.2602 8.8161E-05 -256.2704 8.8160E-05 -256.2909 8.8159E-05 -256.3318 8.8157E-05 -257.2500 8.8110E-05 -257.2510 8.8110E-05 -258.3320 8.8055E-05 -258.3323 8.8055E-05 -258.3327 8.8055E-05 -258.3330 8.8055E-05 -258.3337 8.8055E-05 -258.3344 8.8055E-05 -258.3352 8.8055E-05 -258.3359 8.8055E-05 -258.3366 8.8055E-05 -258.3373 8.8055E-05 -258.3380 8.8055E-05 -258.3432 8.8055E-05 -258.3534 8.8054E-05 -258.3739 8.8053E-05 -258.4148 8.8051E-05 -259.3330 8.8004E-05 -259.3340 8.8004E-05 -260.4120 8.7948E-05 -260.4123 8.7948E-05 -260.4127 8.7948E-05 -260.4130 8.7948E-05 -260.4137 8.7948E-05 -260.4144 8.7948E-05 -260.4152 8.7948E-05 -260.4159 8.7948E-05 -260.4166 8.7948E-05 -260.4173 8.7948E-05 -260.4180 8.7948E-05 -260.4232 8.7948E-05 -260.4334 8.7947E-05 -260.4539 8.7946E-05 -260.4948 8.7944E-05 -261.4130 8.7897E-05 -261.4140 8.7896E-05 -262.4990 8.7840E-05 -262.4993 8.7840E-05 -262.4997 8.7840E-05 -262.5000 8.7840E-05 -262.5007 8.7840E-05 -262.5014 8.7840E-05 -262.5022 8.7840E-05 -262.5029 8.7840E-05 -262.5036 8.7840E-05 -262.5043 8.7840E-05 -262.5050 8.7840E-05 -262.5102 8.7840E-05 -262.5204 8.7839E-05 -262.5409 8.7838E-05 -262.5818 8.7836E-05 -263.5000 8.7788E-05 -263.5010 8.7788E-05 -264.5820 8.7732E-05 -264.5823 8.7732E-05 -264.5827 8.7732E-05 -264.5830 8.7732E-05 -264.5837 8.7732E-05 -264.5844 8.7732E-05 -264.5852 8.7732E-05 -264.5859 8.7732E-05 -264.5866 8.7732E-05 -264.5873 8.7732E-05 -264.5880 8.7732E-05 -264.5932 8.7731E-05 -264.6034 8.7731E-05 -264.6239 8.7730E-05 -264.6648 8.7728E-05 -265.5830 8.7680E-05 -265.5840 8.7680E-05 -266.6620 8.7623E-05 -266.6623 8.7623E-05 -266.6627 8.7623E-05 -266.6630 8.7623E-05 -266.6637 8.7623E-05 -266.6644 8.7623E-05 -266.6652 8.7623E-05 -266.6659 8.7623E-05 -266.6666 8.7623E-05 -266.6673 8.7623E-05 -266.6680 8.7623E-05 -266.6732 8.7623E-05 -266.6834 8.7622E-05 -266.7039 8.7621E-05 -266.7448 8.7619E-05 -267.3333 8.7588E-05 -267.6630 8.7571E-05 -267.6640 8.7571E-05 -268.7490 8.7514E-05 -268.7493 8.7513E-05 -268.7497 8.7513E-05 -268.7500 8.7513E-05 -268.7507 8.7513E-05 -268.7514 8.7513E-05 -268.7522 8.7513E-05 -268.7529 8.7513E-05 -268.7536 8.7513E-05 -268.7543 8.7513E-05 -268.7550 8.7513E-05 -268.7602 8.7513E-05 -268.7704 8.7512E-05 -268.7909 8.7511E-05 -268.8318 8.7509E-05 -269.7500 8.7461E-05 -269.7510 8.7461E-05 -270.8320 8.7404E-05 -270.8323 8.7404E-05 -270.8327 8.7404E-05 -270.8330 8.7404E-05 -270.8337 8.7404E-05 -270.8344 8.7404E-05 -270.8352 8.7404E-05 -270.8359 8.7404E-05 -270.8366 8.7403E-05 -270.8373 8.7403E-05 -270.8380 8.7403E-05 -270.8432 8.7403E-05 -270.8534 8.7403E-05 -270.8739 8.7402E-05 -270.9148 8.7399E-05 -271.8330 8.7351E-05 -271.8340 8.7351E-05 -272.9120 8.7294E-05 -272.9123 8.7294E-05 -272.9127 8.7294E-05 -272.9130 8.7294E-05 -272.9137 8.7294E-05 -272.9144 8.7294E-05 -272.9152 8.7294E-05 -272.9159 8.7294E-05 -272.9166 8.7293E-05 -272.9173 8.7293E-05 -272.9180 8.7293E-05 -272.9232 8.7293E-05 -272.9334 8.7293E-05 -272.9539 8.7292E-05 -272.9948 8.7289E-05 -273.8160 8.7246E-05 -273.9130 8.7241E-05 -273.9140 8.7241E-05 -274.9990 8.7183E-05 -274.9993 8.7183E-05 -274.9997 8.7183E-05 -275.0000 8.7183E-05 -275.0007 8.7183E-05 -275.0014 8.7183E-05 -275.0022 8.7183E-05 -275.0029 8.7183E-05 -275.0036 8.7183E-05 -275.0043 8.7183E-05 -275.0050 8.7183E-05 -275.0102 8.7182E-05 -275.0204 8.7182E-05 -275.0409 8.7181E-05 -275.0818 8.7179E-05 -276.0000 8.7130E-05 -276.0010 8.7130E-05 -277.0820 8.7072E-05 -277.0823 8.7072E-05 -277.0827 8.7072E-05 -277.0830 8.7072E-05 -277.0837 8.7072E-05 -277.0844 8.7072E-05 -277.0852 8.7072E-05 -277.0859 8.7072E-05 -277.0866 8.7072E-05 -277.0873 8.7072E-05 -277.0880 8.7072E-05 -277.0932 8.7072E-05 -277.1034 8.7071E-05 -277.1239 8.7070E-05 -277.1648 8.7068E-05 -278.0830 8.7019E-05 -278.0840 8.7019E-05 -279.1620 8.6962E-05 -279.1623 8.6962E-05 -279.1627 8.6962E-05 -279.1630 8.6962E-05 -279.1637 8.6962E-05 -279.1644 8.6962E-05 -279.1652 8.6961E-05 -279.1659 8.6961E-05 -279.1666 8.6961E-05 -279.1673 8.6961E-05 -279.1680 8.6961E-05 -279.1732 8.6961E-05 -279.1834 8.6961E-05 -279.2039 8.6959E-05 -279.2448 8.6957E-05 -280.1430 8.6909E-05 -280.1630 8.6908E-05 -280.1640 8.6908E-05 -281.2490 8.6850E-05 -281.2493 8.6850E-05 -281.2497 8.6850E-05 -281.2500 8.6850E-05 -281.2507 8.6850E-05 -281.2514 8.6850E-05 -281.2522 8.6850E-05 -281.2529 8.6850E-05 -281.2536 8.6850E-05 -281.2543 8.6850E-05 -281.2550 8.6850E-05 -281.2602 8.6850E-05 -281.2704 8.6849E-05 -281.2909 8.6848E-05 -281.3318 8.6846E-05 -282.2500 8.6797E-05 -282.2510 8.6797E-05 -283.3320 8.6739E-05 -283.3323 8.6739E-05 -283.3327 8.6739E-05 -283.3330 8.6739E-05 -283.3337 8.6739E-05 -283.3344 8.6739E-05 -283.3352 8.6739E-05 -283.3359 8.6739E-05 -283.3366 8.6739E-05 -283.3373 8.6739E-05 -283.3380 8.6739E-05 -283.3432 8.6739E-05 -283.3534 8.6738E-05 -283.3739 8.6737E-05 -283.4148 8.6735E-05 -284.3330 8.6686E-05 -284.3340 8.6686E-05 -285.4120 8.6628E-05 -285.4123 8.6628E-05 -285.4127 8.6628E-05 -285.4130 8.6628E-05 -285.4137 8.6628E-05 -285.4144 8.6628E-05 -285.4152 8.6628E-05 -285.4159 8.6628E-05 -285.4166 8.6628E-05 -285.4173 8.6628E-05 -285.4180 8.6628E-05 -285.4232 8.6627E-05 -285.4334 8.6627E-05 -285.4539 8.6626E-05 -285.4948 8.6624E-05 -286.4130 8.6574E-05 -286.4131 8.6574E-05 -286.4140 8.6574E-05 -287.4990 8.6516E-05 -287.4993 8.6516E-05 -287.4997 8.6516E-05 -287.5000 8.6516E-05 -287.5007 8.6516E-05 -287.5014 8.6516E-05 -287.5022 8.6516E-05 -287.5029 8.6516E-05 -287.5036 8.6516E-05 -287.5043 8.6516E-05 -287.5050 8.6516E-05 -287.5102 8.6516E-05 -287.5204 8.6515E-05 -287.5409 8.6514E-05 -287.5818 8.6512E-05 -288.5000 8.6463E-05 -288.5010 8.6463E-05 -289.5820 8.6405E-05 -289.5823 8.6405E-05 -289.5827 8.6405E-05 -289.5830 8.6405E-05 -289.5837 8.6405E-05 -289.5844 8.6405E-05 -289.5852 8.6405E-05 -289.5859 8.6405E-05 -289.5866 8.6405E-05 -289.5873 8.6405E-05 -289.5880 8.6405E-05 -289.5932 8.6404E-05 -289.6034 8.6404E-05 -289.6239 8.6403E-05 -289.6648 8.6400E-05 -290.5830 8.6351E-05 -290.5840 8.6351E-05 -291.6620 8.6294E-05 -291.6623 8.6294E-05 -291.6627 8.6294E-05 -291.6630 8.6294E-05 -291.6637 8.6293E-05 -291.6644 8.6293E-05 -291.6652 8.6293E-05 -291.6659 8.6293E-05 -291.6666 8.6293E-05 -291.6673 8.6293E-05 -291.6680 8.6293E-05 -291.6732 8.6293E-05 -291.6834 8.6292E-05 -291.7039 8.6291E-05 -291.7448 8.6289E-05 -292.6630 8.6240E-05 -292.6640 8.6240E-05 -292.6690 8.6240E-05 -293.7490 8.6182E-05 -293.7493 8.6182E-05 -293.7497 8.6182E-05 -293.7500 8.6182E-05 -293.7507 8.6182E-05 -293.7514 8.6182E-05 -293.7522 8.6182E-05 -293.7529 8.6182E-05 -293.7536 8.6182E-05 -293.7543 8.6182E-05 -293.7550 8.6182E-05 -293.7602 8.6181E-05 -293.7704 8.6181E-05 -293.7909 8.6180E-05 -293.8318 8.6177E-05 -294.7500 8.6128E-05 -294.7510 8.6128E-05 -295.8320 8.6070E-05 -295.8323 8.6070E-05 -295.8327 8.6070E-05 -295.8330 8.6070E-05 -295.8337 8.6070E-05 -295.8344 8.6070E-05 -295.8352 8.6070E-05 -295.8359 8.6070E-05 -295.8366 8.6070E-05 -295.8373 8.6070E-05 -295.8380 8.6070E-05 -295.8432 8.6070E-05 -295.8534 8.6069E-05 -295.8739 8.6068E-05 -295.9148 8.6066E-05 -296.8330 8.6017E-05 -296.8340 8.6017E-05 -297.9120 8.5959E-05 -297.9123 8.5959E-05 -297.9127 8.5959E-05 -297.9130 8.5959E-05 -297.9137 8.5959E-05 -297.9144 8.5959E-05 -297.9152 8.5959E-05 -297.9159 8.5959E-05 -297.9166 8.5959E-05 -297.9173 8.5959E-05 -297.9180 8.5959E-05 -297.9232 8.5958E-05 -297.9334 8.5958E-05 -297.9539 8.5957E-05 -297.9948 8.5954E-05 -298.9130 8.5905E-05 -298.9140 8.5905E-05 -299.5723 8.5870E-05 -299.9990 8.5847E-05 -299.9993 8.5847E-05 -299.9997 8.5847E-05 -300.0000 8.5847E-05 -300.0007 8.5847E-05 -300.0014 8.5847E-05 -300.0022 8.5847E-05 -300.0029 8.5847E-05 -300.0036 8.5847E-05 -300.0043 8.5847E-05 -300.0050 8.5847E-05 -300.0102 8.5847E-05 -300.0204 8.5846E-05 -300.0409 8.5845E-05 -300.0818 8.5843E-05 -301.0000 8.5794E-05 -301.0010 8.5794E-05 -302.0820 8.5736E-05 -302.0823 8.5736E-05 -302.0827 8.5736E-05 -302.0830 8.5736E-05 -302.0837 8.5736E-05 -302.0844 8.5736E-05 -302.0852 8.5736E-05 -302.0859 8.5736E-05 -302.0866 8.5735E-05 -302.0873 8.5735E-05 -302.0880 8.5735E-05 -302.0932 8.5735E-05 -302.1034 8.5735E-05 -302.1239 8.5734E-05 -302.1648 8.5731E-05 -303.0830 8.5682E-05 -303.0840 8.5682E-05 -304.1620 8.5624E-05 -304.1623 8.5624E-05 -304.1627 8.5624E-05 -304.1630 8.5624E-05 -304.1637 8.5624E-05 -304.1644 8.5624E-05 -304.1652 8.5624E-05 -304.1659 8.5624E-05 -304.1666 8.5624E-05 -304.1673 8.5624E-05 -304.1680 8.5624E-05 -304.1732 8.5624E-05 -304.1834 8.5623E-05 -304.2039 8.5622E-05 -304.2448 8.5620E-05 -305.1630 8.5571E-05 -305.1640 8.5571E-05 -306.0813 8.5522E-05 -306.2490 8.5513E-05 -306.2493 8.5513E-05 -306.2497 8.5513E-05 -306.2500 8.5513E-05 -306.2507 8.5513E-05 -306.2514 8.5513E-05 -306.2522 8.5513E-05 -306.2529 8.5513E-05 -306.2536 8.5513E-05 -306.2543 8.5513E-05 -306.2550 8.5513E-05 -306.2602 8.5512E-05 -306.2704 8.5512E-05 -306.2909 8.5511E-05 -306.3318 8.5508E-05 -307.2500 8.5459E-05 -307.2510 8.5459E-05 -308.3320 8.5402E-05 -308.3323 8.5402E-05 -308.3327 8.5402E-05 -308.3330 8.5402E-05 -308.3337 8.5401E-05 -308.3344 8.5401E-05 -308.3352 8.5401E-05 -308.3359 8.5401E-05 -308.3366 8.5401E-05 -308.3373 8.5401E-05 -308.3380 8.5401E-05 -308.3432 8.5401E-05 -308.3534 8.5400E-05 -308.3739 8.5399E-05 -308.4148 8.5397E-05 -309.3330 8.5348E-05 -309.3340 8.5348E-05 -310.4120 8.5291E-05 -310.4123 8.5290E-05 -310.4127 8.5290E-05 -310.4130 8.5290E-05 -310.4137 8.5290E-05 -310.4144 8.5290E-05 -310.4152 8.5290E-05 -310.4159 8.5290E-05 -310.4166 8.5290E-05 -310.4173 8.5290E-05 -310.4180 8.5290E-05 -310.4232 8.5290E-05 -310.4334 8.5289E-05 -310.4539 8.5288E-05 -310.4948 8.5286E-05 -311.4130 8.5237E-05 -311.4140 8.5237E-05 -312.4660 8.5181E-05 -312.4990 8.5179E-05 -312.4993 8.5179E-05 -312.4997 8.5179E-05 -312.5000 8.5179E-05 -312.5007 8.5179E-05 -312.5014 8.5179E-05 -312.5022 8.5179E-05 -312.5029 8.5179E-05 -312.5036 8.5179E-05 -312.5043 8.5179E-05 -312.5050 8.5179E-05 -312.5102 8.5179E-05 -312.5204 8.5178E-05 -312.5409 8.5177E-05 -312.5818 8.5175E-05 -313.5000 8.5126E-05 -313.5010 8.5126E-05 -314.5820 8.5068E-05 -314.5823 8.5068E-05 -314.5827 8.5068E-05 -314.5830 8.5068E-05 -314.5837 8.5068E-05 -314.5844 8.5068E-05 -314.5852 8.5068E-05 -314.5859 8.5068E-05 -314.5866 8.5068E-05 -314.5873 8.5068E-05 -314.5880 8.5068E-05 -314.5932 8.5067E-05 -314.6034 8.5067E-05 -314.6239 8.5066E-05 -314.6648 8.5064E-05 -315.5830 8.5015E-05 -315.5840 8.5015E-05 -316.6620 8.4957E-05 -316.6623 8.4957E-05 -316.6627 8.4957E-05 -316.6630 8.4957E-05 -316.6637 8.4957E-05 -316.6644 8.4957E-05 -316.6652 8.4957E-05 -316.6659 8.4957E-05 -316.6666 8.4957E-05 -316.6673 8.4957E-05 -316.6680 8.4957E-05 -316.6732 8.4957E-05 -316.6834 8.4956E-05 -316.7039 8.4955E-05 -316.7448 8.4953E-05 -317.6630 8.4904E-05 -317.6640 8.4904E-05 -318.7440 8.4846E-05 -318.7490 8.4846E-05 -318.7493 8.4846E-05 -318.7497 8.4846E-05 -318.7500 8.4846E-05 -318.7507 8.4846E-05 -318.7514 8.4846E-05 -318.7522 8.4846E-05 -318.7529 8.4846E-05 -318.7536 8.4846E-05 -318.7543 8.4846E-05 -318.7550 8.4846E-05 -318.7602 8.4846E-05 -318.7704 8.4845E-05 -318.7909 8.4844E-05 -318.8318 8.4842E-05 -319.7500 8.4793E-05 -319.7510 8.4793E-05 -320.8320 8.4735E-05 -320.8323 8.4735E-05 -320.8327 8.4735E-05 -320.8330 8.4735E-05 -320.8337 8.4735E-05 -320.8344 8.4735E-05 -320.8352 8.4735E-05 -320.8359 8.4735E-05 -320.8366 8.4735E-05 -320.8373 8.4735E-05 -320.8380 8.4735E-05 -320.8432 8.4735E-05 -320.8534 8.4734E-05 -320.8739 8.4733E-05 -320.9148 8.4731E-05 -321.8330 8.4682E-05 -321.8340 8.4682E-05 -322.9120 8.4625E-05 -322.9123 8.4625E-05 -322.9127 8.4625E-05 -322.9130 8.4625E-05 -322.9137 8.4625E-05 -322.9144 8.4625E-05 -322.9152 8.4625E-05 -322.9159 8.4625E-05 -322.9166 8.4625E-05 -322.9173 8.4625E-05 -322.9180 8.4624E-05 -322.9232 8.4624E-05 -322.9334 8.4624E-05 -322.9539 8.4623E-05 -322.9948 8.4620E-05 -323.9130 8.4572E-05 -323.9140 8.4572E-05 -324.9990 8.4514E-05 -324.9993 8.4514E-05 -324.9997 8.4514E-05 -325.0000 8.4514E-05 -325.0001 8.4514E-05 -325.0012 8.4514E-05 -325.0025 8.4514E-05 -325.0050 8.4514E-05 -325.0102 8.4513E-05 -325.0204 8.4513E-05 -325.0409 8.4512E-05 -325.0818 8.4510E-05 -326.0000 8.4461E-05 -326.0010 8.4461E-05 -327.0820 8.4403E-05 -327.0823 8.4403E-05 -327.0827 8.4403E-05 -327.0830 8.4403E-05 -327.0837 8.4403E-05 -327.0844 8.4403E-05 -327.0852 8.4403E-05 -327.0859 8.4403E-05 -327.0866 8.4403E-05 -327.0873 8.4403E-05 -327.0880 8.4403E-05 -327.0932 8.4403E-05 -327.1034 8.4402E-05 -327.1239 8.4401E-05 -327.1648 8.4399E-05 -328.0830 8.4350E-05 -328.0840 8.4350E-05 -329.1620 8.4293E-05 -329.1623 8.4293E-05 -329.1627 8.4293E-05 -329.1630 8.4293E-05 -329.1637 8.4293E-05 -329.1644 8.4293E-05 -329.1652 8.4293E-05 -329.1659 8.4293E-05 -329.1666 8.4293E-05 -329.1673 8.4293E-05 -329.1680 8.4293E-05 -329.1732 8.4293E-05 -329.1834 8.4292E-05 -329.2039 8.4291E-05 -329.2448 8.4289E-05 -330.1630 8.4240E-05 -330.1640 8.4240E-05 -331.2490 8.4183E-05 -331.2493 8.4183E-05 -331.2497 8.4183E-05 -331.2500 8.4183E-05 -331.2507 8.4183E-05 -331.2514 8.4183E-05 -331.2522 8.4183E-05 -331.2529 8.4183E-05 -331.2536 8.4183E-05 -331.2543 8.4182E-05 -331.2550 8.4182E-05 -331.2602 8.4182E-05 -331.2704 8.4182E-05 -331.2909 8.4181E-05 -331.3318 8.4178E-05 -332.2500 8.4130E-05 -332.2510 8.4130E-05 -333.3320 8.4073E-05 -333.3323 8.4073E-05 -333.3327 8.4073E-05 -333.3330 8.4073E-05 -333.3337 8.4073E-05 -333.3344 8.4072E-05 -333.3352 8.4072E-05 -333.3359 8.4072E-05 -333.3366 8.4072E-05 -333.3373 8.4072E-05 -333.3380 8.4072E-05 -333.3432 8.4072E-05 -333.3534 8.4071E-05 -333.3739 8.4070E-05 -333.4148 8.4068E-05 -334.3330 8.4020E-05 -334.3340 8.4020E-05 -335.4120 8.3963E-05 -335.4123 8.3963E-05 -335.4127 8.3963E-05 -335.4130 8.3963E-05 -335.4137 8.3963E-05 -335.4144 8.3963E-05 -335.4152 8.3963E-05 -335.4159 8.3963E-05 -335.4166 8.3962E-05 -335.4173 8.3962E-05 -335.4180 8.3962E-05 -335.4232 8.3962E-05 -335.4334 8.3962E-05 -335.4539 8.3961E-05 -335.4948 8.3958E-05 -336.4130 8.3910E-05 -336.4140 8.3910E-05 -337.4990 8.3853E-05 -337.4993 8.3853E-05 -337.4997 8.3853E-05 -337.5000 8.3853E-05 -337.5007 8.3853E-05 -337.5014 8.3852E-05 -337.5022 8.3852E-05 -337.5029 8.3852E-05 -337.5036 8.3852E-05 -337.5043 8.3852E-05 -337.5050 8.3852E-05 -337.5102 8.3852E-05 -337.5204 8.3851E-05 -337.5409 8.3850E-05 -337.5818 8.3848E-05 -338.2183 8.3815E-05 -338.5000 8.3800E-05 -338.5010 8.3800E-05 -339.5820 8.3743E-05 -339.5823 8.3743E-05 -339.5827 8.3743E-05 -339.5830 8.3743E-05 -339.5837 8.3743E-05 -339.5844 8.3743E-05 -339.5852 8.3743E-05 -339.5859 8.3743E-05 -339.5866 8.3743E-05 -339.5873 8.3743E-05 -339.5880 8.3742E-05 -339.5932 8.3742E-05 -339.6034 8.3742E-05 -339.6239 8.3741E-05 -339.6648 8.3738E-05 -340.5830 8.3690E-05 -340.5840 8.3690E-05 -341.6620 8.3633E-05 -341.6623 8.3633E-05 -341.6627 8.3633E-05 -341.6630 8.3633E-05 -341.6637 8.3633E-05 -341.6644 8.3633E-05 -341.6652 8.3633E-05 -341.6659 8.3633E-05 -341.6666 8.3633E-05 -341.6673 8.3633E-05 -341.6680 8.3633E-05 -341.6732 8.3633E-05 -341.6834 8.3632E-05 -341.7039 8.3631E-05 -341.7448 8.3629E-05 -342.6630 8.3581E-05 -342.6640 8.3581E-05 -343.7490 8.3523E-05 -343.7493 8.3523E-05 -343.7497 8.3523E-05 -343.7500 8.3523E-05 -343.7507 8.3523E-05 -343.7514 8.3523E-05 -343.7522 8.3523E-05 -343.7529 8.3523E-05 -343.7536 8.3523E-05 -343.7543 8.3523E-05 -343.7550 8.3523E-05 -343.7602 8.3523E-05 -343.7704 8.3522E-05 -343.7909 8.3521E-05 -343.8318 8.3519E-05 -344.6860 8.3474E-05 -344.7500 8.3471E-05 -344.7510 8.3471E-05 -345.8320 8.3414E-05 -345.8323 8.3414E-05 -345.8327 8.3414E-05 -345.8330 8.3414E-05 -345.8337 8.3414E-05 -345.8344 8.3414E-05 -345.8352 8.3414E-05 -345.8359 8.3414E-05 -345.8366 8.3414E-05 -345.8373 8.3414E-05 -345.8380 8.3414E-05 -345.8432 8.3413E-05 -345.8534 8.3413E-05 -345.8739 8.3412E-05 -345.9148 8.3410E-05 -346.8330 8.3361E-05 -346.8340 8.3361E-05 -347.9120 8.3305E-05 -347.9123 8.3305E-05 -347.9127 8.3305E-05 -347.9130 8.3305E-05 -347.9137 8.3305E-05 -347.9144 8.3305E-05 -347.9152 8.3305E-05 -347.9159 8.3305E-05 -347.9166 8.3305E-05 -347.9173 8.3305E-05 -347.9180 8.3305E-05 -347.9232 8.3304E-05 -347.9334 8.3304E-05 -347.9539 8.3303E-05 -347.9948 8.3301E-05 -348.9130 8.3252E-05 -348.9140 8.3252E-05 -349.9990 8.3195E-05 -349.9993 8.3195E-05 -349.9997 8.3195E-05 -350.0000 8.3195E-05 -350.0007 8.3195E-05 -350.0014 8.3195E-05 -350.0022 8.3195E-05 -350.0029 8.3195E-05 -350.0036 8.3195E-05 -350.0043 8.3195E-05 -350.0050 8.3195E-05 -350.0102 8.3195E-05 -350.0204 8.3194E-05 -350.0409 8.3193E-05 -350.0818 8.3191E-05 -350.9920 8.3143E-05 -351.0000 8.3143E-05 -351.0010 8.3143E-05 -352.0820 8.3086E-05 -352.0823 8.3086E-05 -352.0827 8.3086E-05 -352.0830 8.3086E-05 -352.0837 8.3086E-05 -352.0844 8.3086E-05 -352.0852 8.3086E-05 -352.0859 8.3086E-05 -352.0866 8.3086E-05 -352.0873 8.3086E-05 -352.0880 8.3086E-05 -352.0932 8.3086E-05 -352.1034 8.3085E-05 -352.1239 8.3084E-05 -352.1648 8.3082E-05 -353.0830 8.3034E-05 -353.0840 8.3034E-05 -354.1620 8.2978E-05 -354.1623 8.2978E-05 -354.1627 8.2978E-05 -354.1630 8.2978E-05 -354.1637 8.2977E-05 -354.1644 8.2977E-05 -354.1652 8.2977E-05 -354.1659 8.2977E-05 -354.1666 8.2977E-05 -354.1673 8.2977E-05 -354.1680 8.2977E-05 -354.1732 8.2977E-05 -354.1834 8.2976E-05 -354.2039 8.2975E-05 -354.2448 8.2973E-05 -355.1630 8.2925E-05 -355.1640 8.2925E-05 -356.2490 8.2869E-05 -356.2493 8.2869E-05 -356.2497 8.2868E-05 -356.2500 8.2868E-05 -356.2507 8.2868E-05 -356.2514 8.2868E-05 -356.2522 8.2868E-05 -356.2529 8.2868E-05 -356.2536 8.2868E-05 -356.2543 8.2868E-05 -356.2550 8.2868E-05 -356.2602 8.2868E-05 -356.2704 8.2867E-05 -356.2909 8.2866E-05 -356.3318 8.2864E-05 -357.2500 8.2816E-05 -357.2507 8.2816E-05 -357.2510 8.2816E-05 -358.3320 8.2760E-05 -358.3323 8.2760E-05 -358.3327 8.2760E-05 -358.3330 8.2760E-05 -358.3337 8.2760E-05 -358.3344 8.2760E-05 -358.3352 8.2760E-05 -358.3359 8.2760E-05 -358.3366 8.2760E-05 -358.3373 8.2760E-05 -358.3380 8.2759E-05 -358.3432 8.2759E-05 -358.3534 8.2759E-05 -358.3739 8.2758E-05 -358.4148 8.2755E-05 -359.3330 8.2708E-05 -359.3340 8.2708E-05 -360.4120 8.2651E-05 -360.4123 8.2651E-05 -360.4127 8.2651E-05 -360.4130 8.2651E-05 -360.4137 8.2651E-05 -360.4144 8.2651E-05 -360.4152 8.2651E-05 -360.4159 8.2651E-05 -360.4166 8.2651E-05 -360.4173 8.2651E-05 -360.4180 8.2651E-05 -360.4232 8.2651E-05 -360.4334 8.2650E-05 -360.4539 8.2649E-05 -360.4948 8.2647E-05 -361.4130 8.2599E-05 -361.4140 8.2599E-05 -362.4990 8.2543E-05 -362.4993 8.2543E-05 -362.4997 8.2543E-05 -362.5000 8.2543E-05 -362.5007 8.2543E-05 -362.5014 8.2543E-05 -362.5022 8.2543E-05 -362.5029 8.2543E-05 -362.5036 8.2542E-05 -362.5043 8.2542E-05 -362.5050 8.2542E-05 -362.5102 8.2542E-05 -362.5204 8.2542E-05 -362.5409 8.2541E-05 -362.5818 8.2538E-05 -363.5000 8.2491E-05 -363.5010 8.2491E-05 -363.5214 8.2490E-05 -364.5820 8.2434E-05 -364.5823 8.2434E-05 -364.5827 8.2434E-05 -364.5830 8.2434E-05 -364.5837 8.2434E-05 -364.5844 8.2434E-05 -364.5852 8.2434E-05 -364.5859 8.2434E-05 -364.5866 8.2434E-05 -364.5873 8.2434E-05 -364.5880 8.2434E-05 -364.5932 8.2434E-05 -364.6034 8.2433E-05 -364.6239 8.2432E-05 -364.6648 8.2430E-05 -365.5830 8.2382E-05 -365.5840 8.2382E-05 -366.6620 8.2326E-05 -366.6623 8.2326E-05 -366.6627 8.2326E-05 -366.6630 8.2326E-05 -366.6637 8.2326E-05 -366.6644 8.2326E-05 -366.6652 8.2326E-05 -366.6659 8.2326E-05 -366.6666 8.2326E-05 -366.6673 8.2326E-05 -366.6680 8.2326E-05 -366.6732 8.2326E-05 -366.6834 8.2325E-05 -366.7039 8.2324E-05 -366.7448 8.2322E-05 -367.6630 8.2274E-05 -367.6640 8.2274E-05 -368.7490 8.2218E-05 -368.7493 8.2218E-05 -368.7497 8.2218E-05 -368.7500 8.2218E-05 -368.7507 8.2218E-05 -368.7514 8.2218E-05 -368.7522 8.2218E-05 -368.7529 8.2218E-05 -368.7536 8.2218E-05 -368.7543 8.2218E-05 -368.7550 8.2218E-05 -368.7602 8.2217E-05 -368.7704 8.2217E-05 -368.7909 8.2216E-05 -368.8318 8.2214E-05 -369.7500 8.2166E-05 -369.7510 8.2166E-05 -370.4213 8.2131E-05 -370.8320 8.2110E-05 -370.8323 8.2110E-05 -370.8327 8.2110E-05 -370.8330 8.2110E-05 -370.8337 8.2110E-05 -370.8344 8.2110E-05 -370.8352 8.2110E-05 -370.8359 8.2110E-05 -370.8366 8.2110E-05 -370.8373 8.2110E-05 -370.8380 8.2110E-05 -370.8432 8.2110E-05 -370.8534 8.2109E-05 -370.8739 8.2108E-05 -370.9148 8.2106E-05 -371.8330 8.2058E-05 -371.8340 8.2058E-05 -372.9120 8.2002E-05 -372.9123 8.2002E-05 -372.9127 8.2002E-05 -372.9130 8.2002E-05 -372.9137 8.2002E-05 -372.9144 8.2002E-05 -372.9152 8.2002E-05 -372.9159 8.2002E-05 -372.9166 8.2002E-05 -372.9173 8.2002E-05 -372.9180 8.2002E-05 -372.9232 8.2002E-05 -372.9334 8.2001E-05 -372.9539 8.2000E-05 -372.9948 8.1998E-05 -373.9130 8.1951E-05 -373.9140 8.1951E-05 -374.9990 8.1894E-05 -374.9993 8.1894E-05 -374.9997 8.1894E-05 -375.0000 8.1894E-05 -375.0007 8.1894E-05 -375.0014 8.1894E-05 -375.0022 8.1894E-05 -375.0029 8.1894E-05 -375.0036 8.1894E-05 -375.0043 8.1894E-05 -375.0050 8.1894E-05 -375.0102 8.1894E-05 -375.0204 8.1893E-05 -375.0409 8.1892E-05 -375.0818 8.1890E-05 -376.0000 8.1843E-05 -376.0010 8.1843E-05 -376.9423 8.1794E-05 -377.0820 8.1787E-05 -377.0823 8.1787E-05 -377.0827 8.1787E-05 -377.0830 8.1787E-05 -377.0837 8.1787E-05 -377.0844 8.1787E-05 -377.0852 8.1787E-05 -377.0859 8.1787E-05 -377.0866 8.1787E-05 -377.0873 8.1787E-05 -377.0880 8.1787E-05 -377.0932 8.1786E-05 -377.1034 8.1786E-05 -377.1239 8.1785E-05 -377.1648 8.1783E-05 -378.0830 8.1735E-05 -378.0840 8.1735E-05 -379.1620 8.1680E-05 -379.1623 8.1680E-05 -379.1627 8.1680E-05 -379.1630 8.1680E-05 -379.1637 8.1680E-05 -379.1644 8.1679E-05 -379.1652 8.1679E-05 -379.1659 8.1679E-05 -379.1666 8.1679E-05 -379.1673 8.1679E-05 -379.1680 8.1679E-05 -379.1732 8.1679E-05 -379.1834 8.1679E-05 -379.2039 8.1677E-05 -379.2448 8.1675E-05 -380.1630 8.1628E-05 -380.1640 8.1628E-05 -381.2490 8.1572E-05 -381.2493 8.1572E-05 -381.2497 8.1572E-05 -381.2500 8.1572E-05 -381.2507 8.1572E-05 -381.2514 8.1572E-05 -381.2522 8.1572E-05 -381.2529 8.1572E-05 -381.2536 8.1572E-05 -381.2543 8.1572E-05 -381.2550 8.1572E-05 -381.2602 8.1572E-05 -381.2704 8.1571E-05 -381.2909 8.1570E-05 -381.3318 8.1568E-05 -382.2500 8.1521E-05 -382.2510 8.1521E-05 -383.3020 8.1466E-05 -383.3320 8.1465E-05 -383.3323 8.1465E-05 -383.3327 8.1465E-05 -383.3330 8.1465E-05 -383.3337 8.1465E-05 -383.3344 8.1465E-05 -383.3352 8.1465E-05 -383.3359 8.1465E-05 -383.3366 8.1465E-05 -383.3373 8.1465E-05 -383.3380 8.1465E-05 -383.3432 8.1464E-05 -383.3534 8.1464E-05 -383.3739 8.1463E-05 -383.4148 8.1461E-05 -384.3330 8.1413E-05 -384.3340 8.1413E-05 -385.4120 8.1358E-05 -385.4123 8.1358E-05 -385.4127 8.1358E-05 -385.4130 8.1358E-05 -385.4137 8.1358E-05 -385.4144 8.1358E-05 -385.4152 8.1358E-05 -385.4159 8.1358E-05 -385.4166 8.1358E-05 -385.4173 8.1358E-05 -385.4180 8.1358E-05 -385.4232 8.1357E-05 -385.4334 8.1357E-05 -385.4539 8.1356E-05 -385.4948 8.1354E-05 -386.4130 8.1307E-05 -386.4140 8.1307E-05 -387.4990 8.1251E-05 -387.4993 8.1251E-05 -387.4997 8.1251E-05 -387.5000 8.1251E-05 -387.5007 8.1251E-05 -387.5014 8.1251E-05 -387.5022 8.1251E-05 -387.5029 8.1251E-05 -387.5036 8.1251E-05 -387.5043 8.1251E-05 -387.5050 8.1251E-05 -387.5102 8.1250E-05 -387.5204 8.1250E-05 -387.5409 8.1249E-05 -387.5818 8.1247E-05 -388.5000 8.1199E-05 -388.5010 8.1199E-05 -389.5800 8.1144E-05 -389.5820 8.1144E-05 -389.5823 8.1144E-05 -389.5827 8.1144E-05 -389.5830 8.1144E-05 -389.5837 8.1144E-05 -389.5844 8.1144E-05 -389.5852 8.1144E-05 -389.5859 8.1144E-05 -389.5866 8.1144E-05 -389.5873 8.1144E-05 -389.5880 8.1144E-05 -389.5932 8.1143E-05 -389.6034 8.1143E-05 -389.6239 8.1142E-05 -389.6648 8.1140E-05 -390.5830 8.1093E-05 -390.5840 8.1093E-05 -391.6620 8.1037E-05 -391.6623 8.1037E-05 -391.6627 8.1037E-05 -391.6630 8.1037E-05 -391.6637 8.1037E-05 -391.6644 8.1037E-05 -391.6652 8.1037E-05 -391.6659 8.1037E-05 -391.6666 8.1037E-05 -391.6673 8.1037E-05 -391.6680 8.1037E-05 -391.6732 8.1037E-05 -391.6834 8.1036E-05 -391.7039 8.1035E-05 -391.7448 8.1033E-05 -392.6630 8.0986E-05 -392.6640 8.0986E-05 -393.7490 8.0931E-05 -393.7493 8.0931E-05 -393.7497 8.0931E-05 -393.7500 8.0931E-05 -393.7507 8.0931E-05 -393.7514 8.0931E-05 -393.7522 8.0931E-05 -393.7529 8.0930E-05 -393.7536 8.0930E-05 -393.7543 8.0930E-05 -393.7550 8.0930E-05 -393.7602 8.0930E-05 -393.7704 8.0930E-05 -393.7909 8.0929E-05 -393.8318 8.0926E-05 -394.7500 8.0880E-05 -394.7510 8.0879E-05 -395.8320 8.0824E-05 -395.8323 8.0824E-05 -395.8327 8.0824E-05 -395.8330 8.0824E-05 -395.8336 8.0824E-05 -395.8342 8.0824E-05 -395.8355 8.0824E-05 -395.8380 8.0824E-05 -395.8432 8.0824E-05 -395.8534 8.0823E-05 -395.8739 8.0822E-05 -395.9148 8.0820E-05 -396.8330 8.0773E-05 -396.8340 8.0773E-05 -397.9120 8.0718E-05 -397.9123 8.0718E-05 -397.9127 8.0718E-05 -397.9130 8.0718E-05 -397.9137 8.0718E-05 -397.9144 8.0718E-05 -397.9152 8.0718E-05 -397.9159 8.0718E-05 -397.9166 8.0718E-05 -397.9173 8.0718E-05 -397.9180 8.0718E-05 -397.9232 8.0717E-05 -397.9334 8.0717E-05 -397.9539 8.0716E-05 -397.9948 8.0714E-05 -398.9130 8.0667E-05 -398.9140 8.0667E-05 -399.9990 8.0612E-05 -399.9993 8.0612E-05 -399.9997 8.0612E-05 -400.0000 8.0612E-05 -400.0007 8.0612E-05 -400.0014 8.0612E-05 -400.0022 8.0611E-05 -400.0029 8.0611E-05 -400.0036 8.0611E-05 -400.0043 8.0611E-05 -400.0050 8.0611E-05 -400.0102 8.0611E-05 -400.0204 8.0611E-05 -400.0409 8.0610E-05 -400.0818 8.0607E-05 -401.0000 8.0561E-05 -401.0010 8.0561E-05 -402.0820 8.0506E-05 -402.0823 8.0506E-05 -402.0827 8.0506E-05 -402.0830 8.0506E-05 -402.0837 8.0506E-05 -402.0844 8.0505E-05 -402.0852 8.0505E-05 -402.0859 8.0505E-05 -402.0866 8.0505E-05 -402.0873 8.0505E-05 -402.0880 8.0505E-05 -402.0932 8.0505E-05 -402.1034 8.0505E-05 -402.1239 8.0503E-05 -402.1648 8.0501E-05 -402.4106 8.0489E-05 -403.0830 8.0455E-05 -403.0840 8.0455E-05 -404.1620 8.0400E-05 -404.1623 8.0400E-05 -404.1627 8.0400E-05 -404.1630 8.0400E-05 -404.1637 8.0400E-05 -404.1644 8.0400E-05 -404.1652 8.0400E-05 -404.1659 8.0400E-05 -404.1666 8.0400E-05 -404.1673 8.0400E-05 -404.1680 8.0399E-05 -404.1732 8.0399E-05 -404.1834 8.0399E-05 -404.2039 8.0398E-05 -404.2448 8.0396E-05 -405.1630 8.0349E-05 -405.1640 8.0349E-05 -406.2490 8.0294E-05 -406.2493 8.0294E-05 -406.2497 8.0294E-05 -406.2500 8.0294E-05 -406.2507 8.0294E-05 -406.2514 8.0294E-05 -406.2522 8.0294E-05 -406.2529 8.0294E-05 -406.2536 8.0294E-05 -406.2543 8.0294E-05 -406.2550 8.0293E-05 -406.2602 8.0293E-05 -406.2704 8.0293E-05 -406.2909 8.0292E-05 -406.3318 8.0290E-05 -407.2500 8.0243E-05 -407.2510 8.0243E-05 -408.3320 8.0188E-05 -408.3323 8.0188E-05 -408.3327 8.0188E-05 -408.3330 8.0188E-05 -408.3337 8.0188E-05 -408.3344 8.0188E-05 -408.3352 8.0188E-05 -408.3359 8.0188E-05 -408.3366 8.0188E-05 -408.3373 8.0188E-05 -408.3380 8.0188E-05 -408.3432 8.0188E-05 -408.3534 8.0187E-05 -408.3739 8.0186E-05 -408.4148 8.0184E-05 -409.2050 8.0144E-05 -409.3330 8.0137E-05 -409.3340 8.0137E-05 -410.4120 8.0083E-05 -410.4123 8.0083E-05 -410.4127 8.0083E-05 -410.4130 8.0083E-05 -410.4137 8.0083E-05 -410.4144 8.0083E-05 -410.4152 8.0083E-05 -410.4159 8.0082E-05 -410.4166 8.0082E-05 -410.4173 8.0082E-05 -410.4180 8.0082E-05 -410.4232 8.0082E-05 -410.4334 8.0082E-05 -410.4539 8.0081E-05 -410.4948 8.0078E-05 -411.4130 8.0032E-05 -411.4140 8.0032E-05 -412.4990 7.9977E-05 -412.4993 7.9977E-05 -412.4997 7.9977E-05 -412.5000 7.9977E-05 -412.5007 7.9977E-05 -412.5014 7.9977E-05 -412.5022 7.9977E-05 -412.5029 7.9977E-05 -412.5036 7.9977E-05 -412.5043 7.9977E-05 -412.5050 7.9977E-05 -412.5102 7.9976E-05 -412.5204 7.9976E-05 -412.5409 7.9975E-05 -412.5818 7.9973E-05 -413.5000 7.9926E-05 -413.5010 7.9926E-05 -414.5820 7.9872E-05 -414.5823 7.9872E-05 -414.5827 7.9872E-05 -414.5830 7.9872E-05 -414.5837 7.9872E-05 -414.5844 7.9872E-05 -414.5852 7.9872E-05 -414.5859 7.9872E-05 -414.5866 7.9871E-05 -414.5873 7.9871E-05 -414.5880 7.9871E-05 -414.5932 7.9871E-05 -414.6034 7.9871E-05 -414.6239 7.9870E-05 -414.6648 7.9868E-05 -415.5250 7.9824E-05 -415.5830 7.9821E-05 -415.5840 7.9821E-05 -416.6620 7.9767E-05 -416.6623 7.9767E-05 -416.6627 7.9767E-05 -416.6630 7.9767E-05 -416.6637 7.9767E-05 -416.6644 7.9767E-05 -416.6652 7.9767E-05 -416.6659 7.9766E-05 -416.6666 7.9766E-05 -416.6673 7.9766E-05 -416.6680 7.9766E-05 -416.6732 7.9766E-05 -416.6834 7.9766E-05 -416.7039 7.9765E-05 -416.7448 7.9762E-05 -417.6630 7.9716E-05 -417.6640 7.9716E-05 -418.7490 7.9661E-05 -418.7493 7.9661E-05 -418.7497 7.9661E-05 -418.7500 7.9661E-05 -418.7507 7.9661E-05 -418.7514 7.9661E-05 -418.7522 7.9661E-05 -418.7529 7.9661E-05 -418.7536 7.9661E-05 -418.7543 7.9661E-05 -418.7550 7.9661E-05 -418.7602 7.9661E-05 -418.7704 7.9660E-05 -418.7909 7.9659E-05 -418.8318 7.9657E-05 -419.7500 7.9611E-05 -419.7510 7.9611E-05 -420.8320 7.9556E-05 -420.8323 7.9556E-05 -420.8327 7.9556E-05 -420.8330 7.9556E-05 -420.8337 7.9556E-05 -420.8344 7.9556E-05 -420.8352 7.9556E-05 -420.8359 7.9556E-05 -420.8366 7.9556E-05 -420.8373 7.9556E-05 -420.8380 7.9556E-05 -420.8432 7.9556E-05 -420.8534 7.9555E-05 -420.8739 7.9554E-05 -420.9148 7.9552E-05 -421.8280 7.9506E-05 -421.8330 7.9506E-05 -421.8340 7.9506E-05 -422.9120 7.9452E-05 -422.9123 7.9452E-05 -422.9127 7.9452E-05 -422.9130 7.9452E-05 -422.9137 7.9452E-05 -422.9144 7.9452E-05 -422.9152 7.9452E-05 -422.9159 7.9452E-05 -422.9166 7.9452E-05 -422.9173 7.9452E-05 -422.9180 7.9451E-05 -422.9232 7.9451E-05 -422.9334 7.9451E-05 -422.9539 7.9450E-05 -422.9948 7.9448E-05 -423.9130 7.9401E-05 -423.9140 7.9401E-05 -424.9990 7.9347E-05 -424.9993 7.9347E-05 -424.9997 7.9347E-05 -425.0000 7.9347E-05 -425.0007 7.9347E-05 -425.0014 7.9347E-05 -425.0022 7.9347E-05 -425.0029 7.9347E-05 -425.0036 7.9347E-05 -425.0043 7.9347E-05 -425.0050 7.9347E-05 -425.0102 7.9346E-05 -425.0204 7.9346E-05 -425.0409 7.9345E-05 -425.0818 7.9343E-05 -426.0000 7.9297E-05 -426.0010 7.9297E-05 -427.0820 7.9242E-05 -427.0823 7.9242E-05 -427.0827 7.9242E-05 -427.0830 7.9242E-05 -427.0837 7.9242E-05 -427.0844 7.9242E-05 -427.0852 7.9242E-05 -427.0859 7.9242E-05 -427.0866 7.9242E-05 -427.0873 7.9242E-05 -427.0880 7.9242E-05 -427.0932 7.9242E-05 -427.1034 7.9241E-05 -427.1239 7.9240E-05 -427.1648 7.9238E-05 -428.0830 7.9192E-05 -428.0840 7.9192E-05 -428.0841 7.9192E-05 -429.1620 7.9138E-05 -429.1623 7.9138E-05 -429.1627 7.9138E-05 -429.1630 7.9138E-05 -429.1637 7.9138E-05 -429.1644 7.9138E-05 -429.1652 7.9138E-05 -429.1659 7.9138E-05 -429.1666 7.9138E-05 -429.1673 7.9138E-05 -429.1680 7.9138E-05 -429.1732 7.9137E-05 -429.1834 7.9137E-05 -429.2039 7.9136E-05 -429.2448 7.9134E-05 -430.1630 7.9088E-05 -430.1640 7.9088E-05 -431.2490 7.9033E-05 -431.2493 7.9033E-05 -431.2497 7.9033E-05 -431.2500 7.9033E-05 -431.2507 7.9033E-05 -431.2514 7.9033E-05 -431.2522 7.9033E-05 -431.2529 7.9033E-05 -431.2536 7.9033E-05 -431.2543 7.9033E-05 -431.2550 7.9033E-05 -431.2602 7.9033E-05 -431.2704 7.9032E-05 -431.2909 7.9031E-05 -431.3318 7.9029E-05 -432.2500 7.8983E-05 -432.2510 7.8983E-05 -433.3320 7.8929E-05 -433.3323 7.8929E-05 -433.3327 7.8929E-05 -433.3330 7.8929E-05 -433.3337 7.8929E-05 -433.3344 7.8929E-05 -433.3352 7.8929E-05 -433.3359 7.8929E-05 -433.3366 7.8929E-05 -433.3373 7.8929E-05 -433.3380 7.8929E-05 -433.3432 7.8929E-05 -433.3534 7.8928E-05 -433.3739 7.8927E-05 -433.4148 7.8925E-05 -434.3330 7.8879E-05 -434.3340 7.8879E-05 -434.4158 7.8875E-05 -435.4120 7.8825E-05 -435.4123 7.8825E-05 -435.4127 7.8825E-05 -435.4130 7.8825E-05 -435.4137 7.8825E-05 -435.4144 7.8825E-05 -435.4152 7.8825E-05 -435.4159 7.8825E-05 -435.4166 7.8825E-05 -435.4173 7.8825E-05 -435.4180 7.8825E-05 -435.4232 7.8825E-05 -435.4334 7.8824E-05 -435.4539 7.8823E-05 -435.4948 7.8821E-05 -436.4130 7.8775E-05 -436.4140 7.8775E-05 -437.4990 7.8721E-05 -437.4993 7.8721E-05 -437.4997 7.8721E-05 -437.5000 7.8721E-05 -437.5007 7.8721E-05 -437.5014 7.8721E-05 -437.5022 7.8721E-05 -437.5029 7.8721E-05 -437.5036 7.8721E-05 -437.5043 7.8721E-05 -437.5050 7.8721E-05 -437.5102 7.8721E-05 -437.5204 7.8720E-05 -437.5409 7.8719E-05 -437.5818 7.8717E-05 -438.5000 7.8671E-05 -438.5010 7.8671E-05 -439.5820 7.8617E-05 -439.5823 7.8617E-05 -439.5827 7.8617E-05 -439.5830 7.8617E-05 -439.5837 7.8617E-05 -439.5844 7.8617E-05 -439.5852 7.8617E-05 -439.5859 7.8617E-05 -439.5866 7.8617E-05 -439.5873 7.8617E-05 -439.5880 7.8617E-05 -439.5932 7.8617E-05 -439.6034 7.8616E-05 -439.6239 7.8615E-05 -439.6648 7.8613E-05 -440.5830 7.8567E-05 -440.5840 7.8567E-05 -441.3023 7.8532E-05 -441.6620 7.8514E-05 -441.6623 7.8514E-05 -441.6627 7.8514E-05 -441.6630 7.8514E-05 -441.6637 7.8514E-05 -441.6644 7.8514E-05 -441.6652 7.8514E-05 -441.6659 7.8514E-05 -441.6666 7.8514E-05 -441.6673 7.8514E-05 -441.6680 7.8513E-05 -441.6732 7.8513E-05 -441.6834 7.8513E-05 -441.7039 7.8512E-05 -441.7448 7.8510E-05 -442.6630 7.8464E-05 -442.6640 7.8464E-05 -443.7490 7.8410E-05 -443.7493 7.8410E-05 -443.7497 7.8410E-05 -443.7500 7.8410E-05 -443.7507 7.8410E-05 -443.7514 7.8410E-05 -443.7522 7.8410E-05 -443.7529 7.8410E-05 -443.7536 7.8410E-05 -443.7543 7.8410E-05 -443.7550 7.8410E-05 -443.7602 7.8409E-05 -443.7704 7.8409E-05 -443.7909 7.8408E-05 -443.8318 7.8406E-05 -444.7500 7.8360E-05 -444.7510 7.8360E-05 -445.8320 7.8307E-05 -445.8323 7.8307E-05 -445.8327 7.8307E-05 -445.8330 7.8306E-05 -445.8337 7.8306E-05 -445.8344 7.8306E-05 -445.8352 7.8306E-05 -445.8359 7.8306E-05 -445.8366 7.8306E-05 -445.8373 7.8306E-05 -445.8380 7.8306E-05 -445.8432 7.8306E-05 -445.8534 7.8305E-05 -445.8739 7.8304E-05 -445.9148 7.8302E-05 -446.8330 7.8257E-05 -446.8340 7.8257E-05 -447.8480 7.8207E-05 -447.9120 7.8203E-05 -447.9123 7.8203E-05 -447.9127 7.8203E-05 -447.9130 7.8203E-05 -447.9137 7.8203E-05 -447.9144 7.8203E-05 -447.9152 7.8203E-05 -447.9159 7.8203E-05 -447.9166 7.8203E-05 -447.9173 7.8203E-05 -447.9180 7.8203E-05 -447.9232 7.8203E-05 -447.9334 7.8202E-05 -447.9539 7.8201E-05 -447.9948 7.8199E-05 -448.9130 7.8154E-05 -448.9140 7.8154E-05 -449.9990 7.8100E-05 -449.9993 7.8100E-05 -449.9997 7.8100E-05 -450.0000 7.8100E-05 -450.0007 7.8100E-05 -450.0014 7.8100E-05 -450.0022 7.8100E-05 -450.0029 7.8100E-05 -450.0036 7.8100E-05 -450.0043 7.8100E-05 -450.0050 7.8100E-05 -450.0102 7.8099E-05 -450.0204 7.8099E-05 -450.0409 7.8098E-05 -450.0818 7.8096E-05 -451.0000 7.8050E-05 -451.0010 7.8050E-05 -452.0820 7.7997E-05 -452.0823 7.7997E-05 -452.0827 7.7997E-05 -452.0830 7.7997E-05 -452.0837 7.7997E-05 -452.0844 7.7997E-05 -452.0852 7.7997E-05 -452.0859 7.7997E-05 -452.0866 7.7997E-05 -452.0873 7.7997E-05 -452.0880 7.7997E-05 -452.0932 7.7996E-05 -452.1034 7.7996E-05 -452.1239 7.7995E-05 -452.1648 7.7993E-05 -453.0830 7.7947E-05 -453.0840 7.7947E-05 -454.1440 7.7895E-05 -454.1620 7.7894E-05 -454.1623 7.7894E-05 -454.1627 7.7894E-05 -454.1630 7.7894E-05 -454.1637 7.7894E-05 -454.1644 7.7894E-05 -454.1652 7.7894E-05 -454.1659 7.7894E-05 -454.1666 7.7894E-05 -454.1673 7.7894E-05 -454.1680 7.7894E-05 -454.1732 7.7893E-05 -454.1834 7.7893E-05 -454.2039 7.7892E-05 -454.2448 7.7890E-05 -455.1630 7.7845E-05 -455.1640 7.7845E-05 -456.2490 7.7791E-05 -456.2493 7.7791E-05 -456.2497 7.7791E-05 -456.2500 7.7791E-05 -456.2507 7.7791E-05 -456.2514 7.7791E-05 -456.2522 7.7791E-05 -456.2529 7.7791E-05 -456.2536 7.7791E-05 -456.2543 7.7791E-05 -456.2550 7.7791E-05 -456.2602 7.7790E-05 -456.2704 7.7790E-05 -456.2909 7.7789E-05 -456.3318 7.7787E-05 -457.2500 7.7742E-05 -457.2510 7.7742E-05 -458.3320 7.7688E-05 -458.3323 7.7688E-05 -458.3327 7.7688E-05 -458.3330 7.7688E-05 -458.3337 7.7688E-05 -458.3344 7.7688E-05 -458.3352 7.7688E-05 -458.3359 7.7688E-05 -458.3366 7.7688E-05 -458.3373 7.7688E-05 -458.3380 7.7688E-05 -458.3432 7.7688E-05 -458.3534 7.7687E-05 -458.3739 7.7686E-05 -458.4148 7.7684E-05 -459.3330 7.7639E-05 -459.3340 7.7639E-05 -460.4120 7.7586E-05 -460.4123 7.7586E-05 -460.4127 7.7586E-05 -460.4130 7.7586E-05 -460.4137 7.7586E-05 -460.4144 7.7586E-05 -460.4152 7.7586E-05 -460.4159 7.7586E-05 -460.4166 7.7586E-05 -460.4173 7.7586E-05 -460.4180 7.7585E-05 -460.4232 7.7585E-05 -460.4334 7.7585E-05 -460.4539 7.7584E-05 -460.4948 7.7582E-05 -461.4130 7.7536E-05 -461.4140 7.7536E-05 -462.4990 7.7483E-05 -462.4993 7.7483E-05 -462.4997 7.7483E-05 -462.5000 7.7483E-05 -462.5007 7.7483E-05 -462.5014 7.7483E-05 -462.5022 7.7483E-05 -462.5029 7.7483E-05 -462.5036 7.7483E-05 -462.5043 7.7483E-05 -462.5050 7.7483E-05 -462.5102 7.7483E-05 -462.5204 7.7482E-05 -462.5409 7.7481E-05 -462.5818 7.7479E-05 -463.5000 7.7434E-05 -463.5010 7.7434E-05 -464.5820 7.7381E-05 -464.5823 7.7381E-05 -464.5827 7.7381E-05 -464.5830 7.7381E-05 -464.5837 7.7381E-05 -464.5844 7.7381E-05 -464.5852 7.7381E-05 -464.5859 7.7381E-05 -464.5866 7.7380E-05 -464.5873 7.7380E-05 -464.5880 7.7380E-05 -464.5932 7.7380E-05 -464.6034 7.7380E-05 -464.6239 7.7379E-05 -464.6648 7.7377E-05 -465.5830 7.7332E-05 -465.5840 7.7332E-05 -466.6620 7.7279E-05 -466.6623 7.7279E-05 -466.6627 7.7279E-05 -466.6630 7.7279E-05 -466.6642 7.7279E-05 -466.6655 7.7278E-05 -466.6680 7.7278E-05 -466.6732 7.7278E-05 -466.6834 7.7278E-05 -466.7039 7.7277E-05 -466.7448 7.7275E-05 -467.6630 7.7230E-05 -467.6640 7.7229E-05 -468.7490 7.7176E-05 -468.7493 7.7176E-05 -468.7497 7.7176E-05 -468.7500 7.7176E-05 -468.7507 7.7176E-05 -468.7514 7.7176E-05 -468.7522 7.7176E-05 -468.7529 7.7176E-05 -468.7536 7.7176E-05 -468.7543 7.7176E-05 -468.7550 7.7176E-05 -468.7602 7.7176E-05 -468.7704 7.7175E-05 -468.7909 7.7174E-05 -468.8318 7.7172E-05 -469.7500 7.7127E-05 -469.7510 7.7127E-05 -470.8320 7.7074E-05 -470.8323 7.7074E-05 -470.8327 7.7074E-05 -470.8330 7.7074E-05 -470.8337 7.7074E-05 -470.8344 7.7074E-05 -470.8352 7.7074E-05 -470.8359 7.7074E-05 -470.8366 7.7074E-05 -470.8373 7.7074E-05 -470.8380 7.7074E-05 -470.8432 7.7074E-05 -470.8534 7.7073E-05 -470.8739 7.7072E-05 -470.9148 7.7070E-05 -471.8330 7.7025E-05 -471.8340 7.7025E-05 -472.9120 7.6973E-05 -472.9123 7.6973E-05 -472.9127 7.6973E-05 -472.9130 7.6973E-05 -472.9137 7.6972E-05 -472.9144 7.6972E-05 -472.9152 7.6972E-05 -472.9159 7.6972E-05 -472.9166 7.6972E-05 -472.9173 7.6972E-05 -472.9180 7.6972E-05 -472.9232 7.6972E-05 -472.9334 7.6972E-05 -472.9539 7.6971E-05 -472.9948 7.6969E-05 -473.5693 7.6940E-05 -473.9130 7.6924E-05 -473.9140 7.6924E-05 -474.9990 7.6871E-05 -474.9993 7.6871E-05 -474.9997 7.6871E-05 -475.0000 7.6871E-05 -475.0007 7.6871E-05 -475.0014 7.6870E-05 -475.0022 7.6870E-05 -475.0029 7.6870E-05 -475.0036 7.6870E-05 -475.0043 7.6870E-05 -475.0050 7.6870E-05 -475.0102 7.6870E-05 -475.0204 7.6870E-05 -475.0409 7.6869E-05 -475.0818 7.6867E-05 -476.0000 7.6822E-05 -476.0010 7.6822E-05 -477.0820 7.6769E-05 -477.0821 7.6769E-05 -477.0823 7.6769E-05 -477.0827 7.6769E-05 -477.0830 7.6769E-05 -477.0837 7.6769E-05 -477.0844 7.6769E-05 -477.0852 7.6769E-05 -477.0859 7.6769E-05 -477.0866 7.6769E-05 -477.0873 7.6769E-05 -477.0880 7.6769E-05 -477.0932 7.6768E-05 -477.1034 7.6768E-05 -477.1239 7.6767E-05 -477.1648 7.6765E-05 -478.0830 7.6720E-05 -478.0840 7.6720E-05 -479.1620 7.6668E-05 -479.1623 7.6668E-05 -479.1627 7.6668E-05 -479.1630 7.6668E-05 -479.1637 7.6667E-05 -479.1644 7.6667E-05 -479.1652 7.6667E-05 -479.1659 7.6667E-05 -479.1666 7.6667E-05 -479.1673 7.6667E-05 -479.1680 7.6667E-05 -479.1732 7.6667E-05 -479.1834 7.6667E-05 -479.2039 7.6666E-05 -479.2448 7.6664E-05 -480.0380 7.6625E-05 -480.1630 7.6619E-05 -480.1640 7.6619E-05 -481.2490 7.6566E-05 -481.2493 7.6566E-05 -481.2497 7.6566E-05 -481.2500 7.6566E-05 -481.2507 7.6566E-05 -481.2514 7.6566E-05 -481.2522 7.6566E-05 -481.2529 7.6566E-05 -481.2536 7.6566E-05 -481.2543 7.6566E-05 -481.2550 7.6566E-05 -481.2602 7.6565E-05 -481.2704 7.6565E-05 -481.2909 7.6564E-05 -481.3318 7.6562E-05 -482.2500 7.6517E-05 -482.2510 7.6517E-05 -483.3320 7.6465E-05 -483.3323 7.6465E-05 -483.3327 7.6465E-05 -483.3330 7.6465E-05 -483.3337 7.6465E-05 -483.3344 7.6465E-05 -483.3352 7.6465E-05 -483.3359 7.6465E-05 -483.3366 7.6464E-05 -483.3373 7.6464E-05 -483.3380 7.6464E-05 -483.3432 7.6464E-05 -483.3534 7.6464E-05 -483.3739 7.6463E-05 -483.4148 7.6461E-05 -484.3330 7.6416E-05 -484.3340 7.6416E-05 -485.4120 7.6364E-05 -485.4121 7.6364E-05 -485.4123 7.6364E-05 -485.4127 7.6364E-05 -485.4130 7.6364E-05 -485.4137 7.6364E-05 -485.4144 7.6364E-05 -485.4152 7.6364E-05 -485.4159 7.6363E-05 -485.4166 7.6363E-05 -485.4173 7.6363E-05 -485.4180 7.6363E-05 -485.4232 7.6363E-05 -485.4334 7.6363E-05 -485.4539 7.6362E-05 -485.4948 7.6360E-05 -486.3790 7.6317E-05 -486.4130 7.6315E-05 -486.4140 7.6315E-05 -487.4990 7.6262E-05 -487.4991 7.6262E-05 -487.4993 7.6262E-05 -487.4997 7.6262E-05 -487.5000 7.6262E-05 -487.5007 7.6262E-05 -487.5014 7.6262E-05 -487.5022 7.6262E-05 -487.5029 7.6262E-05 -487.5036 7.6262E-05 -487.5043 7.6262E-05 -487.5050 7.6262E-05 -487.5102 7.6262E-05 -487.5204 7.6261E-05 -487.5409 7.6260E-05 -487.5818 7.6258E-05 -488.5000 7.6214E-05 -488.5010 7.6214E-05 -489.5810 7.6162E-05 -489.5820 7.6162E-05 +0.0000 9.5533E-23 +1.0000 1.1322E-22 +1.0010 1.1324E-22 +2.0820 1.3269E-22 +2.0830 1.3271E-22 +2.0832 1.3271E-22 +3.0830 1.5065E-22 +3.0840 1.5067E-22 +4.1620 1.6961E-22 +4.1630 1.6963E-22 +5.1630 1.8655E-22 +5.1640 1.8657E-22 +6.2490 2.0397E-22 +6.2500 2.0398E-22 +7.2500 2.1893E-22 +7.2510 2.1894E-22 +8.3320 2.3377E-22 +8.3330 2.3378E-22 +8.4968 2.3589E-22 +9.3330 2.4615E-22 +9.3340 2.4617E-22 +9.5820 2.4903E-22 +9.5820 7.0223E-22 +9.5820 7.2735E-21 +9.5822 -1.1758E-16 +9.5823 2.2274E-16 +9.5824 1.0210E-15 +9.5826 2.2771E-15 +9.5827 3.9911E-15 +9.5829 6.1631E-15 +9.5830 8.7929E-15 +9.5830 9.0700E-15 +9.5830 9.6451E-15 +9.6029 -3.1609E-09 +9.6227 1.6828E-09 +9.6426 1.4531E-08 +9.6624 3.5384E-08 +9.6822 6.4241E-08 +9.7021 1.0110E-07 +9.7219 1.4597E-07 +9.8609 8.9122E-07 +10.0556 3.0188E-06 +10.1751 5.0160E-06 +10.2089 5.8341E-06 +10.2428 6.7376E-06 +10.2766 7.7266E-06 +10.3105 8.8009E-06 +10.3443 9.9605E-06 +10.3782 1.1206E-05 +10.4120 1.2536E-05 +10.4123 1.2548E-05 +10.4127 1.2565E-05 +10.4130 1.2577E-05 +10.4137 1.2607E-05 +10.4144 1.2636E-05 +10.4152 1.2666E-05 +10.4159 1.2695E-05 +10.4166 1.2725E-05 +10.4173 1.2755E-05 +10.4180 1.2785E-05 +10.4232 1.2999E-05 +10.4334 1.3435E-05 +10.4539 1.4339E-05 +10.4948 1.6262E-05 +10.5546 1.9385E-05 +10.6741 2.6895E-05 +10.9132 4.4403E-05 +10.9349 4.6211E-05 +10.9781 5.0250E-05 +11.0647 5.9067E-05 +11.2408 7.8462E-05 +11.2688 8.1932E-05 +11.2894 8.4527E-05 +11.3100 8.7169E-05 +11.3306 8.9860E-05 +11.3512 9.2598E-05 +11.3718 9.5384E-05 +11.3924 9.8218E-05 +11.4130 1.0110E-04 +11.4133 1.0114E-04 +11.4137 1.0120E-04 +11.4140 1.0124E-04 +11.4608 1.0800E-04 +11.5076 1.1509E-04 +11.5544 1.2249E-04 +11.6012 1.3022E-04 +11.6480 1.3826E-04 +11.6948 1.4663E-04 +11.7416 1.5532E-04 +11.8066 1.6664E-04 +11.8715 1.7860E-04 +11.9365 1.9120E-04 +12.0014 2.0444E-04 +12.0664 2.1831E-04 +12.1313 2.3283E-04 +12.1963 2.4798E-04 +12.2395 2.5814E-04 +12.2828 2.6855E-04 +12.3260 2.7921E-04 +12.3693 2.9012E-04 +12.4125 3.0128E-04 +12.4558 3.1269E-04 +12.4990 3.2435E-04 +12.4993 3.2443E-04 +12.4997 3.2454E-04 +12.5000 3.2462E-04 +12.5007 3.2481E-04 +12.5014 3.2501E-04 +12.5022 3.2521E-04 +12.5029 3.2540E-04 +12.5036 3.2560E-04 +12.5043 3.2579E-04 +12.5050 3.2599E-04 +12.5102 3.2739E-04 +12.5185 3.2969E-04 +12.5268 3.3196E-04 +12.5380 3.3504E-04 +12.5510 3.3865E-04 +12.5720 3.4454E-04 +12.6016 3.5295E-04 +12.7299 3.9059E-04 +12.8583 4.3024E-04 +12.9866 4.7192E-04 +13.1150 5.1562E-04 +13.2433 5.6135E-04 +13.3717 6.0910E-04 +13.5000 6.5887E-04 +13.5003 6.5899E-04 +13.5007 6.5915E-04 +13.5010 6.5927E-04 +13.6473 7.1875E-04 +13.7936 7.8067E-04 +13.9399 8.4504E-04 +14.0861 9.1186E-04 +14.2324 9.8113E-04 +14.3787 1.0529E-03 +14.5250 1.1270E-03 +14.5330 1.1311E-03 +14.5820 1.1566E-03 +14.5821 1.1566E-03 +14.5823 1.1567E-03 +14.5827 1.1569E-03 +14.5830 1.1571E-03 +14.5839 1.1575E-03 +14.5847 1.1580E-03 +14.5856 1.1584E-03 +14.5864 1.1589E-03 +14.5873 1.1593E-03 +14.5881 1.1598E-03 +14.5890 1.1602E-03 +14.5936 1.1627E-03 +14.5986 1.1653E-03 +14.6044 1.1683E-03 +14.6109 1.1717E-03 +14.6192 1.1761E-03 +14.6294 1.1814E-03 +14.6431 1.1887E-03 +14.6617 1.1985E-03 +14.6910 1.2141E-03 +14.8184 1.2832E-03 +14.9459 1.3538E-03 +15.0733 1.4260E-03 +15.2007 1.4998E-03 +15.3281 1.5752E-03 +15.4556 1.6521E-03 +15.5830 1.7306E-03 +15.5831 1.7306E-03 +15.5833 1.7307E-03 +15.5837 1.7310E-03 +15.5840 1.7312E-03 +15.7380 1.8284E-03 +15.8920 1.9274E-03 +16.0460 2.0283E-03 +16.2000 2.1310E-03 +16.3540 2.2356E-03 +16.5080 2.3420E-03 +16.6620 2.4502E-03 +16.6621 2.4503E-03 +16.6623 2.4504E-03 +16.6626 2.4506E-03 +16.6629 2.4509E-03 +16.6630 2.4509E-03 +16.6636 2.4513E-03 +16.6641 2.4517E-03 +16.6647 2.4521E-03 +16.6653 2.4525E-03 +16.6659 2.4529E-03 +16.6664 2.4533E-03 +16.6670 2.4537E-03 +16.6711 2.4566E-03 +16.6750 2.4594E-03 +16.6805 2.4633E-03 +16.6860 2.4672E-03 +16.6936 2.4726E-03 +16.7019 2.4785E-03 +16.7137 2.4869E-03 +16.7278 2.4969E-03 +16.7500 2.5128E-03 +16.7826 2.5360E-03 +16.8476 2.5828E-03 +16.9641 2.6671E-03 +17.0806 2.7522E-03 +17.1971 2.8379E-03 +17.3136 2.9244E-03 +17.4300 3.0116E-03 +17.5465 3.0995E-03 +17.6630 3.1881E-03 +17.6631 3.1882E-03 +17.6633 3.1884E-03 +17.6637 3.1887E-03 +17.6640 3.1889E-03 +17.8190 3.3080E-03 +17.9740 3.4277E-03 +18.1290 3.5481E-03 +18.2840 3.6692E-03 +18.4390 3.7910E-03 +18.5940 3.9135E-03 +18.7490 4.0367E-03 +18.7493 4.0369E-03 +18.7497 4.0372E-03 +18.7500 4.0375E-03 +18.7504 4.0378E-03 +18.7509 4.0381E-03 +18.7513 4.0385E-03 +18.7517 4.0388E-03 +18.7522 4.0392E-03 +18.7526 4.0395E-03 +18.7531 4.0399E-03 +18.7562 4.0424E-03 +18.7600 4.0454E-03 +18.7647 4.0491E-03 +18.7699 4.0533E-03 +18.7765 4.0585E-03 +18.7841 4.0646E-03 +18.7939 4.0724E-03 +18.8062 4.0821E-03 +18.8234 4.0958E-03 +18.8483 4.1157E-03 +18.8920 4.1506E-03 +18.9795 4.2204E-03 +19.1545 4.3603E-03 +19.2396 4.4284E-03 +19.3246 4.4965E-03 +19.4097 4.5646E-03 +19.4948 4.6327E-03 +19.5799 4.7008E-03 +19.6649 4.7689E-03 +19.7500 4.8370E-03 +19.7503 4.8373E-03 +19.7507 4.8376E-03 +19.7510 4.8378E-03 +19.8468 4.9144E-03 +19.9425 4.9908E-03 +20.0383 5.0671E-03 +20.1340 5.1433E-03 +20.2298 5.2195E-03 +20.3255 5.2955E-03 +20.4213 5.3714E-03 +20.4373 5.3840E-03 +20.8320 5.6940E-03 +20.8323 5.6943E-03 +20.8327 5.6946E-03 +20.8330 5.6948E-03 +20.8336 5.6953E-03 +20.8342 5.6958E-03 +20.8349 5.6963E-03 +20.8355 5.6967E-03 +20.8361 5.6972E-03 +20.8367 5.6977E-03 +20.8374 5.6982E-03 +20.8412 5.7012E-03 +20.8452 5.7043E-03 +20.8504 5.7084E-03 +20.8560 5.7128E-03 +20.8634 5.7185E-03 +20.8717 5.7250E-03 +20.8830 5.7338E-03 +20.8971 5.7447E-03 +20.9182 5.7611E-03 +20.9499 5.7858E-03 +21.0134 5.8349E-03 +21.1305 5.9254E-03 +21.2476 6.0154E-03 +21.3646 6.1047E-03 +21.4817 6.1935E-03 +21.5988 6.2818E-03 +21.7159 6.3694E-03 +21.8330 6.4565E-03 +21.8333 6.4567E-03 +21.8337 6.4570E-03 +21.8340 6.4572E-03 +21.9880 6.5708E-03 +22.1420 6.6830E-03 +22.2960 6.7938E-03 +22.4500 6.9033E-03 +22.6040 7.0113E-03 +22.7580 7.1181E-03 +22.9120 7.2234E-03 +22.9123 7.2236E-03 +22.9127 7.2239E-03 +22.9130 7.2241E-03 +22.9130 7.2241E-03 +22.9135 7.2244E-03 +22.9140 7.2247E-03 +22.9145 7.2251E-03 +22.9150 7.2254E-03 +22.9155 7.2258E-03 +22.9160 7.2261E-03 +22.9165 7.2264E-03 +22.9199 7.2288E-03 +22.9238 7.2314E-03 +22.9288 7.2348E-03 +22.9342 7.2384E-03 +22.9411 7.2431E-03 +22.9490 7.2484E-03 +22.9595 7.2556E-03 +22.9725 7.2643E-03 +22.9915 7.2771E-03 +23.0190 7.2955E-03 +23.0708 7.3301E-03 +23.1911 7.4100E-03 +23.3114 7.4888E-03 +23.4317 7.5665E-03 +23.5520 7.6432E-03 +23.6724 7.7189E-03 +23.7927 7.7934E-03 +23.9130 7.8670E-03 +23.9133 7.8671E-03 +23.9137 7.8674E-03 +23.9140 7.8676E-03 +24.0690 7.9605E-03 +24.2240 8.0515E-03 +24.3790 8.1404E-03 +24.5340 8.2274E-03 +24.6890 8.3123E-03 +24.8440 8.3952E-03 +24.9990 8.4762E-03 +24.9993 8.4763E-03 +24.9997 8.4765E-03 +25.0000 8.4767E-03 +25.0000 8.4767E-03 +25.0005 8.4769E-03 +25.0009 8.4772E-03 +25.0014 8.4774E-03 +25.0019 8.4777E-03 +25.0024 8.4779E-03 +25.0028 8.4782E-03 +25.0033 8.4784E-03 +25.0067 8.4801E-03 +25.0108 8.4822E-03 +25.0158 8.4848E-03 +25.0214 8.4877E-03 +25.0284 8.4913E-03 +25.0367 8.4955E-03 +25.0474 8.5010E-03 +25.0610 8.5079E-03 +25.0807 8.5179E-03 +25.1105 8.5329E-03 +25.1665 8.5610E-03 +25.5518 8.7468E-03 +26.0000 8.9457E-03 +26.0003 8.9459E-03 +26.0007 8.9460E-03 +26.0010 8.9462E-03 +26.0022 8.9467E-03 +26.1565 9.0107E-03 +26.3107 9.0724E-03 +26.4650 9.1318E-03 +26.6192 9.1890E-03 +26.7735 9.2439E-03 +26.9277 9.2965E-03 +27.0820 9.3469E-03 +27.0823 9.3470E-03 +27.0827 9.3471E-03 +27.0830 9.3472E-03 +27.0834 9.3474E-03 +27.0839 9.3475E-03 +27.0843 9.3476E-03 +27.0848 9.3478E-03 +27.0852 9.3479E-03 +27.0856 9.3481E-03 +27.0861 9.3482E-03 +27.0892 9.3492E-03 +27.0938 9.3507E-03 +27.0989 9.3523E-03 +27.1050 9.3542E-03 +27.1120 9.3564E-03 +27.1211 9.3593E-03 +27.1321 9.3627E-03 +27.1474 9.3675E-03 +27.1685 9.3740E-03 +27.2035 9.3848E-03 +27.2697 9.4047E-03 +27.6742 9.5182E-03 +28.0830 9.6164E-03 +28.0833 9.6164E-03 +28.0837 9.6165E-03 +28.0840 9.6166E-03 +28.2380 9.6492E-03 +28.3920 9.6796E-03 +28.5460 9.7076E-03 +28.7000 9.7334E-03 +28.8540 9.7570E-03 +29.0080 9.7782E-03 +29.1620 9.7972E-03 +29.1623 9.7973E-03 +29.1627 9.7973E-03 +29.1630 9.7973E-03 +29.1637 9.7974E-03 +29.1644 9.7975E-03 +29.1652 9.7976E-03 +29.1659 9.7977E-03 +29.1666 9.7977E-03 +29.1673 9.7978E-03 +29.1680 9.7979E-03 +29.1732 9.7985E-03 +29.1782 9.7991E-03 +29.1850 9.7999E-03 +29.1920 9.8006E-03 +29.2020 9.8018E-03 +29.2134 9.8030E-03 +29.2306 9.8049E-03 +29.2533 9.8073E-03 +29.2954 9.8117E-03 +29.3749 9.8193E-03 +29.8532 9.8545E-03 +29.8592 9.8548E-03 +29.8832 9.8559E-03 +30.1630 9.8656E-03 +30.1633 9.8657E-03 +30.1637 9.8657E-03 +30.1640 9.8657E-03 +30.3190 9.8678E-03 +30.4740 9.8679E-03 +30.6290 9.8659E-03 +30.7840 9.8618E-03 +30.9390 9.8556E-03 +31.0940 9.8473E-03 +31.2490 9.8370E-03 +31.2493 9.8369E-03 +31.2497 9.8369E-03 +31.2500 9.8369E-03 +31.2507 9.8368E-03 +31.2514 9.8368E-03 +31.2522 9.8367E-03 +31.2529 9.8367E-03 +31.2536 9.8366E-03 +31.2543 9.8366E-03 +31.2550 9.8365E-03 +31.2602 9.8361E-03 +31.2662 9.8357E-03 +31.2736 9.8351E-03 +31.2818 9.8345E-03 +31.2928 9.8336E-03 +31.3069 9.8325E-03 +31.3276 9.8309E-03 +31.3588 9.8283E-03 +31.4198 9.8230E-03 +31.7888 9.7851E-03 +31.8270 9.7805E-03 +31.8651 9.7757E-03 +31.9033 9.7709E-03 +31.9414 9.7660E-03 +31.9795 9.7610E-03 +32.0177 9.7559E-03 +32.0558 9.7507E-03 +32.2500 9.7221E-03 +32.2503 9.7221E-03 +32.2507 9.7220E-03 +32.2510 9.7220E-03 +32.4054 9.6970E-03 +32.5599 9.6703E-03 +32.7143 9.6420E-03 +32.8687 9.6119E-03 +33.0231 9.5801E-03 +33.1776 9.5466E-03 +33.3320 9.5114E-03 +33.3323 9.5114E-03 +33.3327 9.5113E-03 +33.3330 9.5112E-03 +33.3337 9.5110E-03 +33.3344 9.5109E-03 +33.3352 9.5107E-03 +33.3359 9.5105E-03 +33.3366 9.5104E-03 +33.3373 9.5102E-03 +33.3380 9.5100E-03 +33.3432 9.5088E-03 +33.3511 9.5070E-03 +33.3593 9.5050E-03 +33.3702 9.5025E-03 +33.3832 9.4994E-03 +33.4033 9.4946E-03 +33.4325 9.4876E-03 +33.6037 9.4452E-03 +34.3330 9.2454E-03 +34.3333 9.2454E-03 +34.3337 9.2452E-03 +34.3340 9.2451E-03 +34.4880 9.1986E-03 +34.6420 9.1508E-03 +34.7960 9.1017E-03 +34.9500 9.0514E-03 +35.1040 8.9998E-03 +35.2580 8.9469E-03 +35.4120 8.8929E-03 +35.4123 8.8927E-03 +35.4127 8.8926E-03 +35.4130 8.8925E-03 +35.4137 8.8922E-03 +35.4144 8.8920E-03 +35.4152 8.8917E-03 +35.4159 8.8915E-03 +35.4166 8.8912E-03 +35.4173 8.8910E-03 +35.4180 8.8907E-03 +35.4232 8.8889E-03 +35.4334 8.8852E-03 +35.4459 8.8808E-03 +35.4623 8.8749E-03 +35.4839 8.8672E-03 +35.5231 8.8531E-03 +35.6014 8.8246E-03 +35.7174 8.7820E-03 +35.8333 8.7389E-03 +35.9493 8.6952E-03 +36.0652 8.6509E-03 +36.1811 8.6061E-03 +36.2971 8.5606E-03 +36.4130 8.5146E-03 +36.4131 8.5146E-03 +36.4133 8.5145E-03 +36.4137 8.5143E-03 +36.4140 8.5142E-03 +37.4990 8.0597E-03 +37.4993 8.0596E-03 +37.4997 8.0594E-03 +37.5000 8.0593E-03 +37.5007 8.0590E-03 +37.5014 8.0587E-03 +37.5022 8.0583E-03 +37.5029 8.0580E-03 +37.5036 8.0577E-03 +37.5043 8.0574E-03 +37.5050 8.0571E-03 +37.5102 8.0548E-03 +37.5204 8.0504E-03 +37.5336 8.0446E-03 +37.5503 8.0373E-03 +37.5730 8.0273E-03 +37.6133 8.0096E-03 +37.6939 7.9740E-03 +37.8091 7.9228E-03 +37.9242 7.8714E-03 +38.0394 7.8196E-03 +38.1545 7.7675E-03 +38.2697 7.7151E-03 +38.3848 7.6623E-03 +38.5000 7.6093E-03 +38.5003 7.6092E-03 +38.5007 7.6090E-03 +38.5010 7.6088E-03 +38.6554 7.5372E-03 +38.8099 7.4651E-03 +38.9643 7.3927E-03 +39.1187 7.3199E-03 +39.2731 7.2467E-03 +39.4276 7.1731E-03 +39.5820 7.0992E-03 +39.5823 7.0991E-03 +39.5827 7.0989E-03 +39.5830 7.0987E-03 +39.5837 7.0984E-03 +39.5844 7.0980E-03 +39.5852 7.0977E-03 +39.5859 7.0973E-03 +39.5866 7.0970E-03 +39.5873 7.0967E-03 +39.5880 7.0963E-03 +39.5932 7.0939E-03 +39.6020 7.0896E-03 +39.6101 7.0857E-03 +39.6213 7.0804E-03 +39.6338 7.0744E-03 +39.6547 7.0643E-03 +39.6832 7.0506E-03 +39.7403 7.0232E-03 +39.8607 6.9651E-03 +39.9811 6.9069E-03 +40.1014 6.8487E-03 +40.2218 6.7903E-03 +40.3422 6.7318E-03 +40.4626 6.6733E-03 +40.5830 6.6146E-03 +40.5833 6.6144E-03 +40.5837 6.6143E-03 +40.5840 6.6141E-03 +40.7380 6.5389E-03 +40.8920 6.4637E-03 +41.0460 6.3884E-03 +41.2000 6.3132E-03 +41.3540 6.2379E-03 +41.5080 6.1627E-03 +41.6620 6.0874E-03 +41.6623 6.0873E-03 +41.6627 6.0871E-03 +41.6630 6.0869E-03 +41.6637 6.0866E-03 +41.6644 6.0862E-03 +41.6652 6.0859E-03 +41.6659 6.0855E-03 +41.6666 6.0852E-03 +41.6673 6.0848E-03 +41.6680 6.0845E-03 +41.6732 6.0820E-03 +41.6802 6.0785E-03 +41.6874 6.0750E-03 +41.6959 6.0708E-03 +41.7061 6.0659E-03 +41.7203 6.0590E-03 +41.7394 6.0496E-03 +41.7702 6.0346E-03 +41.8241 6.0083E-03 +42.2318 5.8098E-03 +42.6630 5.6010E-03 +42.6633 5.6009E-03 +42.6637 5.6007E-03 +42.6640 5.6006E-03 +42.8190 5.5258E-03 +42.9740 5.4514E-03 +43.1290 5.3772E-03 +43.2840 5.3033E-03 +43.4390 5.2297E-03 +43.5940 5.1564E-03 +43.7490 5.0833E-03 +43.7493 5.0832E-03 +43.7497 5.0830E-03 +43.7500 5.0829E-03 +43.7507 5.0825E-03 +43.7514 5.0822E-03 +43.7522 5.0819E-03 +43.7529 5.0815E-03 +43.7536 5.0812E-03 +43.7543 5.0808E-03 +43.7550 5.0805E-03 +43.7602 5.0781E-03 +43.7663 5.0752E-03 +43.7729 5.0721E-03 +43.7802 5.0687E-03 +43.7890 5.0645E-03 +43.8003 5.0592E-03 +43.8155 5.0521E-03 +43.8370 5.0421E-03 +43.8716 5.0258E-03 +43.9393 4.9942E-03 +44.0551 4.9402E-03 +44.1709 4.8864E-03 +44.2867 4.8328E-03 +44.4025 4.7794E-03 +44.5184 4.7263E-03 +44.6342 4.6734E-03 +44.7500 4.6207E-03 +44.7503 4.6206E-03 +44.7507 4.6204E-03 +44.7510 4.6203E-03 +44.7612 4.6157E-03 +44.9141 4.5465E-03 +45.0671 4.4778E-03 +45.2201 4.4096E-03 +45.3731 4.3418E-03 +45.5260 4.2745E-03 +45.6790 4.2077E-03 +45.8320 4.1413E-03 +45.8323 4.1412E-03 +45.8327 4.1410E-03 +45.8330 4.1409E-03 +45.8337 4.1406E-03 +45.8344 4.1403E-03 +45.8352 4.1400E-03 +45.8359 4.1397E-03 +45.8366 4.1393E-03 +45.8373 4.1390E-03 +45.8380 4.1387E-03 +45.8432 4.1365E-03 +45.8488 4.1341E-03 +45.8550 4.1314E-03 +45.8614 4.1286E-03 +45.8695 4.1252E-03 +45.8791 4.1210E-03 +45.8919 4.1155E-03 +45.9088 4.1082E-03 +45.9347 4.0971E-03 +45.9780 4.0785E-03 +46.0644 4.0416E-03 +46.4902 3.8619E-03 +46.5230 3.8483E-03 +46.5559 3.8346E-03 +46.5887 3.8210E-03 +46.6215 3.8074E-03 +46.6543 3.7939E-03 +46.6872 3.7803E-03 +46.7200 3.7668E-03 +46.8330 3.7204E-03 +46.8333 3.7203E-03 +46.8337 3.7202E-03 +46.8340 3.7200E-03 +46.9880 3.6574E-03 +47.1420 3.5953E-03 +47.2960 3.5339E-03 +47.4500 3.4730E-03 +47.6040 3.4128E-03 +47.7580 3.3531E-03 +47.9120 3.2941E-03 +47.9123 3.2940E-03 +47.9127 3.2938E-03 +47.9130 3.2937E-03 +47.9137 3.2934E-03 +47.9144 3.2931E-03 +47.9152 3.2929E-03 +47.9159 3.2926E-03 +47.9166 3.2923E-03 +47.9173 3.2920E-03 +47.9180 3.2918E-03 +47.9232 3.2898E-03 +47.9284 3.2878E-03 +47.9343 3.2856E-03 +47.9402 3.2833E-03 +47.9477 3.2805E-03 +47.9561 3.2773E-03 +47.9674 3.2730E-03 +47.9815 3.2676E-03 +48.0025 3.2597E-03 +48.0341 3.2477E-03 +48.0971 3.2240E-03 +48.4823 3.0809E-03 +48.5438 3.0584E-03 +48.6054 3.0361E-03 +48.6669 3.0138E-03 +48.7284 2.9916E-03 +48.7899 2.9696E-03 +48.8515 2.9476E-03 +48.9130 2.9257E-03 +48.9131 2.9257E-03 +48.9133 2.9256E-03 +48.9137 2.9255E-03 +48.9140 2.9254E-03 +49.0690 2.8708E-03 +49.2240 2.8168E-03 +49.3790 2.7636E-03 +49.5340 2.7109E-03 +49.6890 2.6590E-03 +49.8440 2.6076E-03 +49.9990 2.5570E-03 +49.9993 2.5569E-03 +49.9997 2.5568E-03 +50.0000 2.5567E-03 +50.0007 2.5564E-03 +50.0014 2.5562E-03 +50.0022 2.5560E-03 +50.0029 2.5557E-03 +50.0036 2.5555E-03 +50.0043 2.5553E-03 +50.0050 2.5550E-03 +50.0102 2.5534E-03 +50.0152 2.5517E-03 +50.0208 2.5499E-03 +50.0263 2.5481E-03 +50.0333 2.5459E-03 +50.0410 2.5434E-03 +50.0511 2.5401E-03 +50.0633 2.5362E-03 +50.0810 2.5305E-03 +50.1059 2.5225E-03 +50.1513 2.5079E-03 +50.2421 2.4790E-03 +50.4236 2.4220E-03 +50.6379 2.3553E-03 +50.6519 2.3510E-03 +50.6999 2.3364E-03 +50.9980 2.2466E-03 +51.0000 2.2461E-03 +51.0003 2.2460E-03 +51.0007 2.2458E-03 +51.0010 2.2458E-03 +51.1554 2.2003E-03 +51.3099 2.1555E-03 +51.4643 2.1113E-03 +51.6187 2.0678E-03 +51.7731 2.0249E-03 +51.9276 1.9827E-03 +52.0820 1.9411E-03 +52.0823 1.9410E-03 +52.0827 1.9409E-03 +52.0830 1.9408E-03 +52.0837 1.9406E-03 +52.0844 1.9404E-03 +52.0852 1.9402E-03 +52.0859 1.9400E-03 +52.0866 1.9399E-03 +52.0873 1.9397E-03 +52.0880 1.9395E-03 +52.0932 1.9381E-03 +52.0979 1.9368E-03 +52.1034 1.9354E-03 +52.1086 1.9340E-03 +52.1152 1.9322E-03 +52.1223 1.9304E-03 +52.1316 1.9279E-03 +52.1424 1.9250E-03 +52.1577 1.9209E-03 +52.1783 1.9155E-03 +52.2136 1.9062E-03 +52.2776 1.8894E-03 +52.3926 1.8595E-03 +52.5077 1.8299E-03 +52.6228 1.8006E-03 +52.7378 1.7717E-03 +52.8529 1.7432E-03 +52.9679 1.7150E-03 +53.0830 1.6872E-03 +53.0833 1.6871E-03 +53.0837 1.6870E-03 +53.0840 1.6869E-03 +53.2380 1.6502E-03 +53.3920 1.6142E-03 +53.5460 1.5787E-03 +53.7000 1.5438E-03 +53.8540 1.5095E-03 +54.0080 1.4758E-03 +54.1620 1.4427E-03 +54.1623 1.4427E-03 +54.1627 1.4426E-03 +54.1630 1.4425E-03 +54.1637 1.4424E-03 +54.1644 1.4422E-03 +54.1652 1.4421E-03 +54.1659 1.4419E-03 +54.1666 1.4418E-03 +54.1673 1.4416E-03 +54.1680 1.4414E-03 +54.1732 1.4404E-03 +54.1778 1.4394E-03 +54.1831 1.4382E-03 +54.1880 1.4372E-03 +54.1943 1.4359E-03 +54.2009 1.4345E-03 +54.2095 1.4326E-03 +54.2193 1.4306E-03 +54.2329 1.4277E-03 +54.2505 1.4240E-03 +54.2792 1.4180E-03 +54.3267 1.4080E-03 +54.4217 1.3884E-03 +55.1630 1.2418E-03 +55.1633 1.2418E-03 +55.1637 1.2417E-03 +55.1640 1.2416E-03 +55.3190 1.2127E-03 +55.4740 1.1843E-03 +55.6290 1.1564E-03 +55.7840 1.1291E-03 +55.9390 1.1023E-03 +56.0940 1.0760E-03 +56.2490 1.0503E-03 +56.2493 1.0502E-03 +56.2497 1.0501E-03 +56.2500 1.0501E-03 +56.2507 1.0500E-03 +56.2514 1.0499E-03 +56.2522 1.0497E-03 +56.2529 1.0496E-03 +56.2536 1.0495E-03 +56.2543 1.0494E-03 +56.2550 1.0493E-03 +56.2595 1.0485E-03 +56.2643 1.0477E-03 +56.2692 1.0469E-03 +56.2742 1.0461E-03 +56.2799 1.0452E-03 +56.2862 1.0442E-03 +56.2939 1.0429E-03 +56.3029 1.0414E-03 +56.3146 1.0395E-03 +56.3299 1.0370E-03 +56.3524 1.0334E-03 +56.3885 1.0276E-03 +56.4608 1.0160E-03 +56.5642 9.9957E-04 +56.6677 9.8337E-04 +56.7712 9.6738E-04 +56.8746 9.5162E-04 +56.9781 9.3608E-04 +57.0815 9.2076E-04 +57.1850 9.0565E-04 +57.1860 9.0551E-04 +57.2500 8.9628E-04 +57.2503 8.9623E-04 +57.2507 8.9618E-04 +57.2510 8.9613E-04 +57.4054 8.7423E-04 +57.5599 8.5278E-04 +57.7143 8.3176E-04 +57.8687 8.1119E-04 +58.0231 7.9107E-04 +58.1776 7.7138E-04 +58.3320 7.5214E-04 +58.3323 7.5211E-04 +58.3327 7.5206E-04 +58.3330 7.5202E-04 +58.3337 7.5193E-04 +58.3344 7.5184E-04 +58.3352 7.5175E-04 +58.3359 7.5167E-04 +58.3366 7.5158E-04 +58.3373 7.5149E-04 +58.3380 7.5140E-04 +58.3424 7.5086E-04 +58.3472 7.5028E-04 +58.3519 7.4969E-04 +58.3568 7.4910E-04 +58.3622 7.4843E-04 +58.3683 7.4768E-04 +58.3758 7.4676E-04 +58.3849 7.4566E-04 +58.3966 7.4422E-04 +58.4121 7.4234E-04 +58.4349 7.3957E-04 +58.4715 7.3514E-04 +58.5449 7.2637E-04 +58.6099 7.1872E-04 +58.6749 7.1112E-04 +58.7399 7.0356E-04 +58.8049 6.9605E-04 +58.8699 6.8858E-04 +58.9349 6.8116E-04 +58.9999 6.7378E-04 +59.3330 6.3753E-04 +59.3333 6.3750E-04 +59.3337 6.3746E-04 +59.3340 6.3742E-04 +59.4880 6.2131E-04 +59.6420 6.0554E-04 +59.7960 5.9013E-04 +59.9500 5.7507E-04 +60.1040 5.6037E-04 +60.2580 5.4602E-04 +60.4120 5.3203E-04 +60.4123 5.3200E-04 +60.4127 5.3196E-04 +60.4130 5.3194E-04 +60.4137 5.3187E-04 +60.4144 5.3181E-04 +60.4152 5.3174E-04 +60.4159 5.3168E-04 +60.4166 5.3161E-04 +60.4173 5.3155E-04 +60.4180 5.3148E-04 +60.4223 5.3110E-04 +60.4271 5.3068E-04 +60.4317 5.3026E-04 +60.4365 5.2984E-04 +60.4420 5.2934E-04 +60.4486 5.2875E-04 +60.4566 5.2804E-04 +60.4665 5.2716E-04 +60.4793 5.2602E-04 +60.4967 5.2448E-04 +60.5231 5.2215E-04 +60.5686 5.1816E-04 +60.6595 5.1030E-04 +61.0563 4.7707E-04 +61.4130 4.4901E-04 +61.4133 4.4899E-04 +61.4137 4.4896E-04 +61.4140 4.4894E-04 +61.5690 4.3728E-04 +61.7240 4.2589E-04 +61.8790 4.1478E-04 +62.0340 4.0395E-04 +62.1890 3.9339E-04 +62.3440 3.8311E-04 +62.4990 3.7310E-04 +62.4993 3.7308E-04 +62.4997 3.7305E-04 +62.5000 3.7304E-04 +62.5007 3.7299E-04 +62.5014 3.7294E-04 +62.5022 3.7290E-04 +62.5029 3.7285E-04 +62.5036 3.7281E-04 +62.5043 3.7276E-04 +62.5050 3.7271E-04 +62.5093 3.7244E-04 +62.5140 3.7215E-04 +62.5185 3.7186E-04 +62.5237 3.7153E-04 +62.5297 3.7115E-04 +62.5370 3.7069E-04 +62.5457 3.7013E-04 +62.5569 3.6943E-04 +62.5716 3.6850E-04 +62.5928 3.6717E-04 +62.6264 3.6507E-04 +62.6918 3.6103E-04 +63.0852 3.3754E-04 +63.5000 3.1445E-04 +63.5003 3.1443E-04 +63.5007 3.1441E-04 +63.5010 3.1439E-04 +64.5820 2.6148E-04 +64.5823 2.6147E-04 +64.5827 2.6145E-04 +64.5830 2.6144E-04 +64.5837 2.6141E-04 +64.5844 2.6138E-04 +64.5852 2.6134E-04 +64.5859 2.6131E-04 +64.5866 2.6128E-04 +64.5873 2.6125E-04 +64.5880 2.6122E-04 +64.5922 2.6103E-04 +64.5969 2.6082E-04 +64.6019 2.6060E-04 +64.6075 2.6035E-04 +64.6143 2.6006E-04 +64.6224 2.5970E-04 +64.6325 2.5925E-04 +64.6456 2.5867E-04 +64.6637 2.5788E-04 +64.6912 2.5668E-04 +64.7400 2.5457E-04 +64.8375 2.5041E-04 +65.5830 2.2067E-04 +65.5833 2.2066E-04 +65.5837 2.2065E-04 +65.5840 2.2064E-04 +66.6620 1.8403E-04 +66.6623 1.8402E-04 +66.6627 1.8400E-04 +66.6630 1.8399E-04 +66.6637 1.8397E-04 +66.6644 1.8395E-04 +66.6652 1.8393E-04 +66.6659 1.8391E-04 +66.6666 1.8388E-04 +66.6673 1.8386E-04 +66.6680 1.8384E-04 +66.6732 1.8368E-04 +66.6778 1.8354E-04 +66.6840 1.8335E-04 +66.6899 1.8317E-04 +66.6984 1.8291E-04 +66.7075 1.8263E-04 +66.7209 1.8222E-04 +66.7371 1.8172E-04 +66.7643 1.8090E-04 +66.8061 1.7964E-04 +66.8896 1.7716E-04 +67.3319 1.6451E-04 +67.3599 1.6374E-04 +67.6630 1.5566E-04 +67.6633 1.5565E-04 +67.6637 1.5564E-04 +67.6640 1.5564E-04 +68.7490 1.2986E-04 +68.7493 1.2986E-04 +68.7497 1.2985E-04 +68.7500 1.2984E-04 +68.7507 1.2983E-04 +68.7514 1.2981E-04 +68.7522 1.2979E-04 +68.7529 1.2978E-04 +68.7536 1.2976E-04 +68.7543 1.2975E-04 +68.7550 1.2973E-04 +68.7602 1.2962E-04 +68.7656 1.2950E-04 +68.7722 1.2936E-04 +68.7793 1.2921E-04 +68.7887 1.2900E-04 +68.7999 1.2876E-04 +68.8160 1.2842E-04 +68.8379 1.2795E-04 +68.8759 1.2714E-04 +68.9476 1.2563E-04 +69.3852 1.1673E-04 +69.7500 1.0977E-04 +69.7503 1.0976E-04 +69.7507 1.0976E-04 +69.7510 1.0975E-04 +70.8320 9.1183E-05 +70.8323 9.1178E-05 +70.8327 9.1172E-05 +70.8330 9.1167E-05 +70.8337 9.1156E-05 +70.8344 9.1144E-05 +70.8352 9.1133E-05 +70.8359 9.1121E-05 +70.8366 9.1110E-05 +70.8373 9.1098E-05 +70.8380 9.1087E-05 +70.8432 9.1006E-05 +70.8496 9.0904E-05 +70.8568 9.0789E-05 +70.8652 9.0656E-05 +70.8758 9.0488E-05 +70.8899 9.0265E-05 +70.9099 8.9950E-05 +70.9410 8.9463E-05 +71.8330 7.6251E-05 +71.8331 7.6250E-05 +71.8333 7.6247E-05 +71.8337 7.6241E-05 +71.8340 7.6237E-05 +72.9120 6.2019E-05 +72.9123 6.2015E-05 +72.9127 6.2010E-05 +72.9130 6.2007E-05 +72.9137 6.1998E-05 +72.9144 6.1989E-05 +72.9152 6.1980E-05 +72.9159 6.1971E-05 +72.9166 6.1962E-05 +72.9173 6.1953E-05 +72.9180 6.1944E-05 +72.9232 6.1880E-05 +72.9308 6.1785E-05 +72.9387 6.1688E-05 +72.9488 6.1562E-05 +72.9609 6.1413E-05 +72.9790 6.1188E-05 +73.0046 6.0872E-05 +73.0518 6.0293E-05 +73.1461 5.9145E-05 +73.5428 5.4403E-05 +73.9130 5.0135E-05 +73.9133 5.0132E-05 +73.9137 5.0127E-05 +73.9140 5.0124E-05 +74.9990 3.8321E-05 +74.9993 3.8318E-05 +74.9997 3.8314E-05 +75.0000 3.8311E-05 +75.0012 3.8298E-05 +75.0025 3.8285E-05 +75.0050 3.8258E-05 +75.0102 3.8204E-05 +75.0192 3.8110E-05 +75.0278 3.8020E-05 +75.0399 3.7894E-05 +75.0538 3.7750E-05 +75.0776 3.7502E-05 +75.1113 3.7152E-05 +75.1787 3.6455E-05 +75.5864 3.2299E-05 +75.6144 3.2018E-05 +76.0000 2.8189E-05 +76.0001 2.8188E-05 +76.0003 2.8186E-05 +76.0007 2.8182E-05 +76.0010 2.8179E-05 +77.0820 1.7867E-05 +77.0823 1.7865E-05 +77.0827 1.7861E-05 +77.0830 1.7858E-05 +77.0837 1.7851E-05 +77.0844 1.7845E-05 +77.0852 1.7838E-05 +77.0859 1.7831E-05 +77.0866 1.7825E-05 +77.0873 1.7818E-05 +77.0880 1.7811E-05 +77.0932 1.7764E-05 +77.1034 1.7669E-05 +77.1129 1.7581E-05 +77.1270 1.7450E-05 +77.1429 1.7303E-05 +77.1733 1.7023E-05 +77.2181 1.6609E-05 +77.3078 1.5785E-05 +77.4872 1.4148E-05 +77.7272 1.1971E-05 +77.7552 1.1719E-05 +78.0830 8.7929E-06 +78.0833 8.7902E-06 +78.0837 8.7867E-06 +78.0840 8.7840E-06 +79.1620 -5.4708E-07 +79.1623 -5.4962E-07 +79.1627 -5.5300E-07 +79.1630 -5.5554E-07 +79.1637 -5.6163E-07 +79.1644 -5.6771E-07 +79.1652 -5.7380E-07 +79.1659 -5.7989E-07 +79.1666 -5.8597E-07 +79.1673 -5.9206E-07 +79.1680 -5.9814E-07 +79.1732 -6.4141E-07 +79.1834 -7.2793E-07 +79.1942 -8.1929E-07 +79.2094 -9.4719E-07 +79.2277 -1.1018E-06 +79.2618 -1.3891E-06 +79.3195 -1.8737E-06 +79.7015 -5.0549E-06 +80.1630 -8.8269E-06 +80.1633 -8.8294E-06 +80.1637 -8.8326E-06 +80.1640 -8.8350E-06 +81.2490 -1.7387E-05 +81.2493 -1.7390E-05 +81.2497 -1.7393E-05 +81.2500 -1.7395E-05 +81.2501 -1.7396E-05 +81.2512 -1.7404E-05 +81.2525 -1.7414E-05 +81.2550 -1.7434E-05 +81.2602 -1.7473E-05 +81.2704 -1.7551E-05 +81.2824 -1.7643E-05 +81.2984 -1.7766E-05 +81.3190 -1.7924E-05 +81.3566 -1.8210E-05 +81.5719 -1.9840E-05 +82.2500 -2.4865E-05 +82.2503 -2.4867E-05 +82.2507 -2.4870E-05 +82.2510 -2.4872E-05 +83.3320 -3.2461E-05 +83.3323 -3.2463E-05 +83.3327 -3.2466E-05 +83.3330 -3.2468E-05 +83.3337 -3.2473E-05 +83.3344 -3.2478E-05 +83.3352 -3.2483E-05 +83.3359 -3.2487E-05 +83.3366 -3.2492E-05 +83.3373 -3.2497E-05 +83.3380 -3.2502E-05 +83.3432 -3.2537E-05 +83.3534 -3.2606E-05 +83.3664 -3.2694E-05 +83.3831 -3.2807E-05 +83.4057 -3.2959E-05 +83.4461 -3.3231E-05 +83.5270 -3.3771E-05 +84.0194 -3.7002E-05 +84.3330 -3.8996E-05 +84.3333 -3.8998E-05 +84.3337 -3.9001E-05 +84.3340 -3.9002E-05 +85.4120 -4.5460E-05 +85.4123 -4.5461E-05 +85.4127 -4.5464E-05 +85.4130 -4.5465E-05 +85.4137 -4.5469E-05 +85.4144 -4.5474E-05 +85.4152 -4.5478E-05 +85.4159 -4.5482E-05 +85.4166 -4.5486E-05 +85.4173 -4.5490E-05 +85.4180 -4.5494E-05 +85.4232 -4.5523E-05 +85.4334 -4.5581E-05 +85.4472 -4.5660E-05 +85.4646 -4.5759E-05 +85.4889 -4.5896E-05 +85.5320 -4.6138E-05 +85.6182 -4.6620E-05 +86.0753 -4.9112E-05 +86.4130 -5.0874E-05 +86.4133 -5.0875E-05 +86.4137 -5.0877E-05 +86.4140 -5.0879E-05 +87.4990 -5.6070E-05 +87.4993 -5.6072E-05 +87.4997 -5.6073E-05 +87.5000 -5.6075E-05 +87.5004 -5.6076E-05 +87.5007 -5.6078E-05 +87.5011 -5.6079E-05 +87.5014 -5.6081E-05 +87.5018 -5.6083E-05 +87.5021 -5.6084E-05 +87.5025 -5.6086E-05 +87.5050 -5.6097E-05 +87.5102 -5.6120E-05 +87.5204 -5.6165E-05 +87.5351 -5.6231E-05 +87.5532 -5.6310E-05 +87.5793 -5.6425E-05 +87.6252 -5.6626E-05 +87.7170 -5.7023E-05 +88.1397 -5.8790E-05 +88.5000 -6.0204E-05 +88.5003 -6.0206E-05 +88.5007 -6.0207E-05 +88.5010 -6.0208E-05 +89.5820 -6.3941E-05 +89.5823 -6.3941E-05 +89.5827 -6.3943E-05 +89.5830 -6.3944E-05 +89.5837 -6.3946E-05 +89.5844 -6.3948E-05 +89.5852 -6.3950E-05 +89.5859 -6.3953E-05 +89.5866 -6.3955E-05 +89.5873 -6.3957E-05 +89.5880 -6.3959E-05 +89.5932 -6.3975E-05 +89.6034 -6.4007E-05 +89.6193 -6.4055E-05 +89.6381 -6.4113E-05 +89.6665 -6.4200E-05 +89.7161 -6.4349E-05 +90.5830 -6.6706E-05 +90.5833 -6.6707E-05 +90.5837 -6.6708E-05 +90.5840 -6.6708E-05 +91.6620 -6.8939E-05 +91.6623 -6.8940E-05 +91.6627 -6.8940E-05 +91.6630 -6.8941E-05 +91.6637 -6.8942E-05 +91.6644 -6.8943E-05 +91.6652 -6.8945E-05 +91.6659 -6.8946E-05 +91.6666 -6.8947E-05 +91.6673 -6.8948E-05 +91.6680 -6.8950E-05 +91.6732 -6.8958E-05 +91.6834 -6.8976E-05 +91.7008 -6.9005E-05 +91.7208 -6.9039E-05 +91.7526 -6.9091E-05 +92.6630 -7.0324E-05 +92.6633 -7.0324E-05 +92.6637 -7.0325E-05 +92.6640 -7.0325E-05 +93.7490 -7.1096E-05 +93.7493 -7.1096E-05 +93.7497 -7.1096E-05 +93.7500 -7.1096E-05 +93.7507 -7.1097E-05 +93.7514 -7.1097E-05 +93.7522 -7.1097E-05 +93.7529 -7.1097E-05 +93.7536 -7.1098E-05 +93.7543 -7.1098E-05 +93.7550 -7.1098E-05 +93.7602 -7.1100E-05 +93.7704 -7.1104E-05 +93.7903 -7.1111E-05 +93.8119 -7.1118E-05 +93.8492 -7.1129E-05 +94.4200 -7.1203E-05 +94.7500 -7.1158E-05 +94.7510 -7.1158E-05 +95.8320 -7.0560E-05 +95.8323 -7.0560E-05 +95.8327 -7.0559E-05 +95.8330 -7.0559E-05 +95.8337 -7.0559E-05 +95.8344 -7.0558E-05 +95.8352 -7.0557E-05 +95.8359 -7.0557E-05 +95.8366 -7.0556E-05 +95.8373 -7.0555E-05 +95.8380 -7.0555E-05 +95.8432 -7.0550E-05 +95.8534 -7.0541E-05 +95.8739 -7.0523E-05 +95.8998 -7.0500E-05 +95.9426 -7.0461E-05 +96.1830 -7.0218E-05 +96.8330 -6.9429E-05 +96.8333 -6.9428E-05 +96.8337 -6.9428E-05 +96.8340 -6.9427E-05 +97.9120 -6.7635E-05 +97.9123 -6.7634E-05 +97.9127 -6.7634E-05 +97.9130 -6.7633E-05 +97.9137 -6.7632E-05 +97.9144 -6.7630E-05 +97.9152 -6.7629E-05 +97.9159 -6.7627E-05 +97.9166 -6.7626E-05 +97.9173 -6.7625E-05 +97.9180 -6.7623E-05 +97.9232 -6.7613E-05 +97.9334 -6.7594E-05 +97.9539 -6.7554E-05 +97.9894 -6.7484E-05 +98.0424 -6.7380E-05 +98.1668 -6.7129E-05 +98.2911 -6.6871E-05 +98.4155 -6.6607E-05 +98.5399 -6.6337E-05 +98.6643 -6.6059E-05 +98.7886 -6.5775E-05 +98.9130 -6.5484E-05 +98.9133 -6.5483E-05 +98.9137 -6.5482E-05 +98.9140 -6.5482E-05 +99.9990 -6.2676E-05 +99.9993 -6.2675E-05 +99.9997 -6.2674E-05 +100.0000 -6.2673E-05 +100.0007 -6.2671E-05 +100.0014 -6.2669E-05 +100.0022 -6.2667E-05 +100.0029 -6.2665E-05 +100.0036 -6.2663E-05 +100.0043 -6.2661E-05 +100.0050 -6.2659E-05 +100.0102 -6.2645E-05 +100.0204 -6.2616E-05 +100.0409 -6.2559E-05 +100.0818 -6.2443E-05 +100.8870 -6.0055E-05 +101.0000 -5.9702E-05 +101.0003 -5.9701E-05 +101.0007 -5.9700E-05 +101.0010 -5.9699E-05 +102.0820 -5.6127E-05 +102.0823 -5.6126E-05 +102.0827 -5.6125E-05 +102.0830 -5.6124E-05 +102.0837 -5.6121E-05 +102.0844 -5.6119E-05 +102.0852 -5.6116E-05 +102.0859 -5.6114E-05 +102.0866 -5.6111E-05 +102.0873 -5.6109E-05 +102.0880 -5.6106E-05 +102.0932 -5.6089E-05 +102.1034 -5.6053E-05 +102.1239 -5.5982E-05 +102.1648 -5.5840E-05 +102.2291 -5.5615E-05 +102.3488 -5.5194E-05 +102.4685 -5.4770E-05 +102.5882 -5.4343E-05 +102.7079 -5.3912E-05 +102.8276 -5.3477E-05 +102.9473 -5.3039E-05 +103.0670 -5.2597E-05 +103.0830 -5.2538E-05 +103.0833 -5.2537E-05 +103.0837 -5.2535E-05 +103.0840 -5.2534E-05 +104.1620 -4.8420E-05 +104.1623 -4.8419E-05 +104.1627 -4.8418E-05 +104.1630 -4.8416E-05 +104.1637 -4.8414E-05 +104.1644 -4.8411E-05 +104.1652 -4.8408E-05 +104.1659 -4.8405E-05 +104.1666 -4.8402E-05 +104.1673 -4.8399E-05 +104.1680 -4.8397E-05 +104.1732 -4.8377E-05 +104.1834 -4.8336E-05 +104.2039 -4.8256E-05 +104.2350 -4.8133E-05 +104.2835 -4.7943E-05 +104.5739 -4.6790E-05 +104.6580 -4.6454E-05 +104.7422 -4.6118E-05 +104.8264 -4.5780E-05 +104.9105 -4.5441E-05 +104.9947 -4.5100E-05 +105.0788 -4.4759E-05 +105.1630 -4.4416E-05 +105.1633 -4.4415E-05 +105.1637 -4.4413E-05 +105.1640 -4.4412E-05 +106.2490 -3.9922E-05 +106.2493 -3.9921E-05 +106.2497 -3.9919E-05 +106.2500 -3.9918E-05 +106.2507 -3.9915E-05 +106.2514 -3.9912E-05 +106.2522 -3.9909E-05 +106.2529 -3.9906E-05 +106.2536 -3.9903E-05 +106.2543 -3.9900E-05 +106.2550 -3.9897E-05 +106.2602 -3.9875E-05 +106.2704 -3.9832E-05 +106.2909 -3.9746E-05 +106.3170 -3.9637E-05 +106.3600 -3.9456E-05 +106.6024 -3.8433E-05 +107.1850 -3.5961E-05 +107.2500 -3.5683E-05 +107.2503 -3.5682E-05 +107.2507 -3.5680E-05 +107.2510 -3.5679E-05 +108.3320 -3.1039E-05 +108.3323 -3.1038E-05 +108.3327 -3.1036E-05 +108.3330 -3.1035E-05 +108.3337 -3.1032E-05 +108.3344 -3.1029E-05 +108.3352 -3.1025E-05 +108.3359 -3.1022E-05 +108.3366 -3.1019E-05 +108.3373 -3.1016E-05 +108.3380 -3.1013E-05 +108.3432 -3.0991E-05 +108.3534 -3.0947E-05 +108.3739 -3.0859E-05 +108.3974 -3.0757E-05 +108.4376 -3.0584E-05 +109.3330 -2.6719E-05 +109.3333 -2.6718E-05 +109.3337 -2.6716E-05 +109.3340 -2.6715E-05 +110.4120 -2.2072E-05 +110.4123 -2.2071E-05 +110.4127 -2.2069E-05 +110.4130 -2.2068E-05 +110.4137 -2.2065E-05 +110.4144 -2.2062E-05 +110.4152 -2.2059E-05 +110.4159 -2.2056E-05 +110.4166 -2.2053E-05 +110.4173 -2.2049E-05 +110.4180 -2.2046E-05 +110.4232 -2.2024E-05 +110.4334 -2.1980E-05 +110.4539 -2.1893E-05 +110.4760 -2.1798E-05 +110.5147 -2.1632E-05 +111.4130 -1.7796E-05 +111.4133 -1.7795E-05 +111.4137 -1.7793E-05 +111.4140 -1.7792E-05 +112.4990 -1.3221E-05 +112.4993 -1.3220E-05 +112.4997 -1.3218E-05 +112.5000 -1.3217E-05 +112.5007 -1.3214E-05 +112.5014 -1.3211E-05 +112.5022 -1.3208E-05 +112.5029 -1.3205E-05 +112.5036 -1.3202E-05 +112.5043 -1.3199E-05 +112.5050 -1.3196E-05 +112.5102 -1.3174E-05 +112.5204 -1.3131E-05 +112.5402 -1.3049E-05 +112.5619 -1.2958E-05 +112.5990 -1.2804E-05 +113.4268 -9.3816E-06 +113.5000 -9.0819E-06 +113.5003 -9.0806E-06 +113.5007 -9.0790E-06 +113.5010 -9.0778E-06 +114.5820 -4.7103E-06 +114.5823 -4.7091E-06 +114.5827 -4.7075E-06 +114.5830 -4.7063E-06 +114.5837 -4.7034E-06 +114.5844 -4.7006E-06 +114.5852 -4.6977E-06 +114.5859 -4.6948E-06 +114.5866 -4.6919E-06 +114.5873 -4.6891E-06 +114.5880 -4.6862E-06 +114.5932 -4.6658E-06 +114.6034 -4.6250E-06 +114.6230 -4.5471E-06 +114.6444 -4.4618E-06 +114.6809 -4.3165E-06 +115.5830 -7.7329E-07 +115.5833 -7.7213E-07 +115.5837 -7.7057E-07 +115.5840 -7.6941E-07 +116.6620 3.3441E-06 +116.6623 3.3453E-06 +116.6627 3.3468E-06 +116.6630 3.3479E-06 +116.6637 3.3506E-06 +116.6644 3.3533E-06 +116.6652 3.3560E-06 +116.6659 3.3587E-06 +116.6666 3.3614E-06 +116.6673 3.3641E-06 +116.6680 3.3668E-06 +116.6732 3.3860E-06 +116.6834 3.4244E-06 +116.7030 3.4978E-06 +116.7244 3.5781E-06 +116.7610 3.7148E-06 +117.6630 7.0396E-06 +117.6633 7.0407E-06 +117.6637 7.0421E-06 +117.6640 7.0432E-06 +118.7490 1.0908E-05 +118.7493 1.0909E-05 +118.7497 1.0911E-05 +118.7500 1.0912E-05 +118.7507 1.0914E-05 +118.7514 1.0917E-05 +118.7522 1.0919E-05 +118.7529 1.0922E-05 +118.7536 1.0924E-05 +118.7543 1.0927E-05 +118.7550 1.0929E-05 +118.7602 1.0947E-05 +118.7704 1.0983E-05 +118.7902 1.1052E-05 +118.8118 1.1128E-05 +118.8489 1.1257E-05 +119.5770 1.3758E-05 +119.7500 1.4342E-05 +119.7503 1.4343E-05 +119.7507 1.4344E-05 +119.7510 1.4345E-05 +120.8320 1.7910E-05 +120.8323 1.7911E-05 +120.8327 1.7912E-05 +120.8330 1.7913E-05 +120.8337 1.7915E-05 +120.8344 1.7918E-05 +120.8352 1.7920E-05 +120.8359 1.7922E-05 +120.8366 1.7925E-05 +120.8373 1.7927E-05 +120.8380 1.7929E-05 +120.8432 1.7946E-05 +120.8534 1.7979E-05 +120.8736 1.8044E-05 +120.8955 1.8115E-05 +120.9336 1.8237E-05 +121.8330 2.1078E-05 +121.8333 2.1079E-05 +121.8337 2.1081E-05 +121.8340 2.1082E-05 +122.9120 2.4354E-05 +122.9123 2.4355E-05 +122.9127 2.4356E-05 +122.9130 2.4357E-05 +122.9137 2.4359E-05 +122.9144 2.4361E-05 +122.9152 2.4363E-05 +122.9159 2.4365E-05 +122.9166 2.4367E-05 +122.9173 2.4370E-05 +122.9180 2.4372E-05 +122.9232 2.4387E-05 +122.9334 2.4417E-05 +122.9539 2.4478E-05 +122.9763 2.4544E-05 +123.0154 2.4660E-05 +123.9130 2.7265E-05 +123.9133 2.7266E-05 +123.9137 2.7267E-05 +123.9140 2.7268E-05 +124.9990 3.0289E-05 +124.9993 3.0290E-05 +124.9997 3.0291E-05 +125.0000 3.0292E-05 +125.0007 3.0294E-05 +125.0014 3.0296E-05 +125.0022 3.0298E-05 +125.0029 3.0300E-05 +125.0036 3.0302E-05 +125.0043 3.0304E-05 +125.0050 3.0306E-05 +125.0102 3.0320E-05 +125.0204 3.0348E-05 +125.0409 3.0403E-05 +125.0641 3.0466E-05 +125.1040 3.0574E-05 +125.8550 3.2578E-05 +126.0000 3.2957E-05 +126.0003 3.2958E-05 +126.0007 3.2959E-05 +126.0010 3.2960E-05 +127.0820 3.5717E-05 +127.0823 3.5718E-05 +127.0827 3.5719E-05 +127.0830 3.5720E-05 +127.0837 3.5721E-05 +127.0844 3.5723E-05 +127.0852 3.5725E-05 +127.0859 3.5727E-05 +127.0866 3.5729E-05 +127.0873 3.5730E-05 +127.0880 3.5732E-05 +127.0932 3.5745E-05 +127.1034 3.5771E-05 +127.1239 3.5822E-05 +127.1480 3.5881E-05 +127.1889 3.5983E-05 +128.0830 3.8161E-05 +128.0833 3.8161E-05 +128.0837 3.8162E-05 +128.0840 3.8163E-05 +129.1620 4.0682E-05 +129.1623 4.0683E-05 +129.1627 4.0683E-05 +129.1630 4.0684E-05 +129.1637 4.0686E-05 +129.1644 4.0687E-05 +129.1652 4.0689E-05 +129.1659 4.0691E-05 +129.1666 4.0692E-05 +129.1673 4.0694E-05 +129.1680 4.0696E-05 +129.1732 4.0707E-05 +129.1834 4.0731E-05 +129.2039 4.0777E-05 +129.2290 4.0835E-05 +129.2709 4.0930E-05 +129.5022 4.1452E-05 +130.1630 4.2921E-05 +130.1633 4.2922E-05 +130.1637 4.2923E-05 +130.1640 4.2923E-05 +131.2490 4.5247E-05 +131.2493 4.5248E-05 +131.2497 4.5249E-05 +131.2500 4.5249E-05 +131.2507 4.5251E-05 +131.2514 4.5252E-05 +131.2522 4.5254E-05 +131.2529 4.5255E-05 +131.2536 4.5257E-05 +131.2543 4.5258E-05 +131.2550 4.5260E-05 +131.2602 4.5271E-05 +131.2704 4.5292E-05 +131.2909 4.5335E-05 +131.3171 4.5390E-05 +131.3602 4.5479E-05 +131.6041 4.5984E-05 +132.1920 4.7184E-05 +132.2500 4.7301E-05 +132.2503 4.7301E-05 +132.2507 4.7302E-05 +132.2510 4.7303E-05 +133.3320 4.9428E-05 +133.3323 4.9428E-05 +133.3327 4.9429E-05 +133.3330 4.9430E-05 +133.3337 4.9431E-05 +133.3344 4.9433E-05 +133.3352 4.9434E-05 +133.3359 4.9435E-05 +133.3366 4.9437E-05 +133.3373 4.9438E-05 +133.3380 4.9439E-05 +133.3432 4.9449E-05 +133.3534 4.9469E-05 +133.3739 4.9508E-05 +133.4012 4.9561E-05 +133.4456 4.9646E-05 +133.7032 5.0135E-05 +134.3330 5.1314E-05 +134.3333 5.1315E-05 +134.3337 5.1315E-05 +134.3340 5.1316E-05 +135.4120 5.3264E-05 +135.4123 5.3264E-05 +135.4127 5.3265E-05 +135.4130 5.3265E-05 +135.4137 5.3267E-05 +135.4144 5.3268E-05 +135.4152 5.3269E-05 +135.4159 5.3271E-05 +135.4166 5.3272E-05 +135.4173 5.3273E-05 +135.4180 5.3274E-05 +135.4232 5.3283E-05 +135.4334 5.3301E-05 +135.4539 5.3338E-05 +135.4825 5.3388E-05 +135.5281 5.3468E-05 +135.8002 5.3944E-05 +136.4130 5.4998E-05 +136.4133 5.4999E-05 +136.4137 5.5000E-05 +136.4140 5.5000E-05 +137.4990 5.6804E-05 +137.4993 5.6804E-05 +137.4997 5.6805E-05 +137.5000 5.6805E-05 +137.5007 5.6806E-05 +137.5014 5.6807E-05 +137.5022 5.6809E-05 +137.5029 5.6810E-05 +137.5036 5.6811E-05 +137.5043 5.6812E-05 +137.5050 5.6813E-05 +137.5102 5.6822E-05 +137.5204 5.6838E-05 +137.5409 5.6872E-05 +137.5707 5.6920E-05 +137.6177 5.6996E-05 +137.8997 5.7449E-05 +137.9826 5.7582E-05 +138.0655 5.7714E-05 +138.1484 5.7846E-05 +138.2313 5.7977E-05 +138.3142 5.8108E-05 +138.3971 5.8239E-05 +138.4800 5.8368E-05 +138.4880 5.8381E-05 +138.5000 5.8400E-05 +138.5003 5.8400E-05 +138.5007 5.8401E-05 +138.5010 5.8401E-05 +139.5820 6.0055E-05 +139.5823 6.0055E-05 +139.5827 6.0056E-05 +139.5830 6.0056E-05 +139.5837 6.0057E-05 +139.5844 6.0058E-05 +139.5852 6.0059E-05 +139.5859 6.0061E-05 +139.5866 6.0062E-05 +139.5873 6.0063E-05 +139.5880 6.0064E-05 +139.5932 6.0071E-05 +139.6034 6.0087E-05 +139.6239 6.0117E-05 +139.6550 6.0164E-05 +139.7034 6.0236E-05 +139.9937 6.0665E-05 +140.0779 6.0789E-05 +140.1620 6.0913E-05 +140.2462 6.1036E-05 +140.3304 6.1159E-05 +140.4146 6.1281E-05 +140.4988 6.1402E-05 +140.5830 6.1524E-05 +140.5833 6.1524E-05 +140.5837 6.1525E-05 +140.5840 6.1525E-05 +141.6620 6.3043E-05 +141.6623 6.3043E-05 +141.6627 6.3043E-05 +141.6630 6.3044E-05 +141.6637 6.3045E-05 +141.6644 6.3046E-05 +141.6652 6.3047E-05 +141.6659 6.3048E-05 +141.6666 6.3049E-05 +141.6673 6.3050E-05 +141.6680 6.3051E-05 +141.6732 6.3058E-05 +141.6834 6.3072E-05 +141.7039 6.3100E-05 +141.7364 6.3145E-05 +141.7862 6.3213E-05 +142.0849 6.3620E-05 +142.6630 6.4394E-05 +142.6633 6.4394E-05 +142.6637 6.4395E-05 +142.6640 6.4395E-05 +143.7490 6.5799E-05 +143.7493 6.5800E-05 +143.7497 6.5800E-05 +143.7500 6.5800E-05 +143.7507 6.5801E-05 +143.7514 6.5802E-05 +143.7522 6.5803E-05 +143.7529 6.5804E-05 +143.7536 6.5805E-05 +143.7543 6.5806E-05 +143.7550 6.5807E-05 +143.7602 6.5813E-05 +143.7704 6.5826E-05 +143.7909 6.5852E-05 +143.8248 6.5895E-05 +143.8760 6.5959E-05 +144.1836 6.6344E-05 +144.7500 6.7040E-05 +144.7503 6.7041E-05 +144.7507 6.7041E-05 +144.7510 6.7042E-05 +144.7535 6.7045E-05 +145.8320 6.8325E-05 +145.8323 6.8326E-05 +145.8327 6.8326E-05 +145.8330 6.8326E-05 +145.8337 6.8327E-05 +145.8344 6.8328E-05 +145.8352 6.8329E-05 +145.8359 6.8330E-05 +145.8366 6.8331E-05 +145.8373 6.8331E-05 +145.8380 6.8332E-05 +145.8432 6.8338E-05 +145.8534 6.8350E-05 +145.8739 6.8374E-05 +145.9092 6.8415E-05 +145.9620 6.8476E-05 +146.0864 6.8619E-05 +146.2108 6.8762E-05 +146.3353 6.8903E-05 +146.4597 6.9044E-05 +146.5841 6.9185E-05 +146.7086 6.9324E-05 +146.8330 6.9463E-05 +146.8333 6.9464E-05 +146.8337 6.9464E-05 +146.8340 6.9464E-05 +147.9120 7.0637E-05 +147.9123 7.0637E-05 +147.9127 7.0638E-05 +147.9130 7.0638E-05 +147.9137 7.0639E-05 +147.9144 7.0640E-05 +147.9152 7.0640E-05 +147.9159 7.0641E-05 +147.9166 7.0642E-05 +147.9173 7.0643E-05 +147.9180 7.0643E-05 +147.9232 7.0649E-05 +147.9334 7.0660E-05 +147.9539 7.0681E-05 +147.9907 7.0721E-05 +148.0451 7.0778E-05 +148.1691 7.0909E-05 +148.2931 7.1039E-05 +148.4170 7.1168E-05 +148.5410 7.1296E-05 +148.6650 7.1424E-05 +148.7890 7.1552E-05 +148.9130 7.1678E-05 +148.9133 7.1678E-05 +148.9137 7.1679E-05 +148.9140 7.1679E-05 +149.9990 7.2757E-05 +149.9993 7.2757E-05 +149.9997 7.2758E-05 +150.0000 7.2758E-05 +150.0007 7.2759E-05 +150.0014 7.2759E-05 +150.0022 7.2760E-05 +150.0029 7.2761E-05 +150.0036 7.2762E-05 +150.0043 7.2762E-05 +150.0050 7.2763E-05 +150.0102 7.2768E-05 +150.0204 7.2778E-05 +150.0409 7.2798E-05 +150.0793 7.2835E-05 +150.1354 7.2889E-05 +150.2589 7.3008E-05 +150.3824 7.3126E-05 +150.5059 7.3243E-05 +150.6294 7.3360E-05 +150.7530 7.3476E-05 +150.8765 7.3592E-05 +151.0000 7.3707E-05 +151.0003 7.3707E-05 +151.0007 7.3707E-05 +151.0010 7.3708E-05 +151.6593 7.4309E-05 +152.0820 7.4686E-05 +152.0823 7.4686E-05 +152.0827 7.4686E-05 +152.0830 7.4687E-05 +152.0837 7.4687E-05 +152.0844 7.4688E-05 +152.0852 7.4688E-05 +152.0859 7.4689E-05 +152.0866 7.4690E-05 +152.0873 7.4690E-05 +152.0880 7.4691E-05 +152.0932 7.4695E-05 +152.1034 7.4705E-05 +152.1239 7.4723E-05 +152.1640 7.4758E-05 +152.2218 7.4809E-05 +153.0830 7.5549E-05 +153.0833 7.5549E-05 +153.0837 7.5550E-05 +153.0840 7.5550E-05 +154.1620 7.6436E-05 +154.1623 7.6436E-05 +154.1627 7.6436E-05 +154.1630 7.6436E-05 +154.1637 7.6437E-05 +154.1644 7.6437E-05 +154.1652 7.6438E-05 +154.1659 7.6439E-05 +154.1666 7.6439E-05 +154.1673 7.6440E-05 +154.1680 7.6440E-05 +154.1732 7.6444E-05 +154.1834 7.6453E-05 +154.2039 7.6469E-05 +154.2448 7.6502E-05 +154.3049 7.6550E-05 +154.4275 7.6647E-05 +154.5501 7.6743E-05 +154.6727 7.6840E-05 +154.7953 7.6935E-05 +154.9178 7.7030E-05 +155.0404 7.7124E-05 +155.1630 7.7218E-05 +155.1637 7.7219E-05 +155.1640 7.7219E-05 +156.2490 7.8026E-05 +156.2493 7.8026E-05 +156.2497 7.8026E-05 +156.2500 7.8027E-05 +156.2507 7.8027E-05 +156.2514 7.8028E-05 +156.2522 7.8028E-05 +156.2529 7.8029E-05 +156.2536 7.8029E-05 +156.2543 7.8030E-05 +156.2550 7.8030E-05 +156.2602 7.8034E-05 +156.2704 7.8041E-05 +156.2909 7.8056E-05 +156.3318 7.8086E-05 +156.3948 7.8131E-05 +156.5054 7.8210E-05 +156.6160 7.8289E-05 +156.7267 7.8368E-05 +156.8373 7.8446E-05 +156.9480 7.8523E-05 +157.0586 7.8600E-05 +157.1692 7.8677E-05 +157.2500 7.8733E-05 +157.2503 7.8733E-05 +157.2510 7.8734E-05 +157.9213 7.9188E-05 +158.3320 7.9459E-05 +158.3323 7.9459E-05 +158.3327 7.9459E-05 +158.3330 7.9459E-05 +158.3337 7.9460E-05 +158.3344 7.9460E-05 +158.3352 7.9461E-05 +158.3359 7.9461E-05 +158.3366 7.9462E-05 +158.3373 7.9462E-05 +158.3380 7.9463E-05 +158.3432 7.9466E-05 +158.3534 7.9473E-05 +158.3739 7.9486E-05 +158.4148 7.9513E-05 +158.4808 7.9555E-05 +158.5980 7.9631E-05 +158.7151 7.9706E-05 +158.8323 7.9781E-05 +158.9495 7.9855E-05 +159.0667 7.9929E-05 +159.1838 8.0003E-05 +159.3010 8.0076E-05 +159.3330 8.0096E-05 +159.3337 8.0096E-05 +159.3340 8.0096E-05 +160.4120 8.0747E-05 +160.4123 8.0747E-05 +160.4127 8.0747E-05 +160.4130 8.0747E-05 +160.4137 8.0748E-05 +160.4144 8.0748E-05 +160.4152 8.0748E-05 +160.4159 8.0749E-05 +160.4166 8.0749E-05 +160.4173 8.0750E-05 +160.4180 8.0750E-05 +160.4232 8.0753E-05 +160.4334 8.0759E-05 +160.4539 8.0771E-05 +160.4948 8.0795E-05 +160.5641 8.0835E-05 +160.6854 8.0906E-05 +160.8066 8.0976E-05 +160.9279 8.1045E-05 +161.0492 8.1114E-05 +161.1705 8.1183E-05 +161.2917 8.1251E-05 +161.4130 8.1319E-05 +161.4137 8.1319E-05 +161.4140 8.1319E-05 +162.4990 8.1906E-05 +162.4993 8.1906E-05 +162.4997 8.1906E-05 +162.5000 8.1907E-05 +162.5007 8.1907E-05 +162.5014 8.1907E-05 +162.5022 8.1908E-05 +162.5029 8.1908E-05 +162.5036 8.1909E-05 +162.5043 8.1909E-05 +162.5050 8.1909E-05 +162.5102 8.1912E-05 +162.5204 8.1917E-05 +162.5409 8.1928E-05 +162.5818 8.1950E-05 +162.6547 8.1988E-05 +162.7754 8.2050E-05 +162.8962 8.2113E-05 +163.0169 8.2175E-05 +163.1377 8.2236E-05 +163.2585 8.2297E-05 +163.3792 8.2358E-05 +163.5000 8.2418E-05 +163.5007 8.2419E-05 +163.5010 8.2419E-05 +164.4113 8.2861E-05 +164.5820 8.2942E-05 +164.5823 8.2942E-05 +164.5827 8.2942E-05 +164.5830 8.2942E-05 +164.5837 8.2942E-05 +164.5844 8.2943E-05 +164.5852 8.2943E-05 +164.5859 8.2943E-05 +164.5866 8.2944E-05 +164.5873 8.2944E-05 +164.5880 8.2944E-05 +164.5932 8.2947E-05 +164.6034 8.2952E-05 +164.6239 8.2961E-05 +164.6648 8.2980E-05 +164.7415 8.3016E-05 +164.8617 8.3072E-05 +164.9820 8.3127E-05 +165.1022 8.3182E-05 +165.2224 8.3237E-05 +165.3426 8.3291E-05 +165.4628 8.3345E-05 +165.5830 8.3399E-05 +165.5837 8.3399E-05 +165.5840 8.3399E-05 +166.6620 8.3864E-05 +166.6623 8.3865E-05 +166.6627 8.3865E-05 +166.6630 8.3865E-05 +166.6637 8.3865E-05 +166.6644 8.3865E-05 +166.6652 8.3866E-05 +166.6659 8.3866E-05 +166.6666 8.3866E-05 +166.6673 8.3867E-05 +166.6680 8.3867E-05 +166.6732 8.3869E-05 +166.6834 8.3873E-05 +166.7039 8.3882E-05 +166.7448 8.3899E-05 +166.8257 8.3933E-05 +166.9453 8.3982E-05 +167.0649 8.4031E-05 +167.1846 8.4080E-05 +167.3042 8.4128E-05 +167.4238 8.4177E-05 +167.5434 8.4224E-05 +167.6630 8.4272E-05 +167.6637 8.4272E-05 +167.6640 8.4272E-05 +168.7490 8.4689E-05 +168.7493 8.4689E-05 +168.7497 8.4689E-05 +168.7500 8.4689E-05 +168.7507 8.4689E-05 +168.7514 8.4690E-05 +168.7522 8.4690E-05 +168.7529 8.4690E-05 +168.7536 8.4690E-05 +168.7543 8.4691E-05 +168.7550 8.4691E-05 +168.7602 8.4693E-05 +168.7704 8.4697E-05 +168.7909 8.4704E-05 +168.8318 8.4719E-05 +168.9138 8.4750E-05 +169.0332 8.4793E-05 +169.1527 8.4837E-05 +169.2721 8.4880E-05 +169.3916 8.4923E-05 +169.5111 8.4966E-05 +169.6305 8.5008E-05 +169.7500 8.5051E-05 +169.7507 8.5051E-05 +169.7510 8.5051E-05 +170.7690 8.5398E-05 +170.8320 8.5419E-05 +170.8323 8.5419E-05 +170.8327 8.5419E-05 +170.8330 8.5419E-05 +170.8337 8.5420E-05 +170.8344 8.5420E-05 +170.8352 8.5420E-05 +170.8359 8.5420E-05 +170.8366 8.5421E-05 +170.8373 8.5421E-05 +170.8380 8.5421E-05 +170.8432 8.5423E-05 +170.8534 8.5426E-05 +170.8739 8.5433E-05 +170.9148 8.5446E-05 +170.9968 8.5473E-05 +171.1162 8.5512E-05 +171.2357 8.5551E-05 +171.3551 8.5589E-05 +171.4746 8.5627E-05 +171.5941 8.5665E-05 +171.7135 8.5702E-05 +171.8330 8.5740E-05 +171.8337 8.5740E-05 +171.8340 8.5740E-05 +172.9120 8.6065E-05 +172.9123 8.6065E-05 +172.9127 8.6065E-05 +172.9130 8.6065E-05 +172.9137 8.6066E-05 +172.9144 8.6066E-05 +172.9152 8.6066E-05 +172.9159 8.6066E-05 +172.9166 8.6066E-05 +172.9173 8.6067E-05 +172.9180 8.6067E-05 +172.9232 8.6068E-05 +172.9334 8.6071E-05 +172.9539 8.6077E-05 +172.9948 8.6089E-05 +173.0768 8.6113E-05 +173.9130 8.6349E-05 +173.9137 8.6349E-05 +173.9140 8.6349E-05 +174.9990 8.6638E-05 +174.9993 8.6638E-05 +174.9997 8.6638E-05 +175.0000 8.6638E-05 +175.0007 8.6638E-05 +175.0014 8.6638E-05 +175.0022 8.6639E-05 +175.0029 8.6639E-05 +175.0036 8.6639E-05 +175.0043 8.6639E-05 +175.0050 8.6639E-05 +175.0102 8.6641E-05 +175.0204 8.6643E-05 +175.0409 8.6648E-05 +175.0818 8.6659E-05 +175.3276 8.6721E-05 +176.0000 8.6888E-05 +176.0010 8.6888E-05 +177.0660 8.7138E-05 +177.0820 8.7141E-05 +177.0823 8.7141E-05 +177.0827 8.7141E-05 +177.0830 8.7141E-05 +177.0837 8.7142E-05 +177.0844 8.7142E-05 +177.0852 8.7142E-05 +177.0859 8.7142E-05 +177.0866 8.7142E-05 +177.0873 8.7142E-05 +177.0880 8.7143E-05 +177.0932 8.7144E-05 +177.1034 8.7146E-05 +177.1239 8.7151E-05 +177.1648 8.7160E-05 +177.4106 8.7215E-05 +178.0830 8.7361E-05 +178.0840 8.7361E-05 +179.1620 8.7583E-05 +179.1623 8.7583E-05 +179.1627 8.7583E-05 +179.1630 8.7583E-05 +179.1637 8.7583E-05 +179.1644 8.7583E-05 +179.1652 8.7583E-05 +179.1659 8.7583E-05 +179.1666 8.7584E-05 +179.1673 8.7584E-05 +179.1680 8.7584E-05 +179.1732 8.7585E-05 +179.1834 8.7587E-05 +179.2039 8.7591E-05 +179.2448 8.7599E-05 +180.1630 8.7775E-05 +180.1640 8.7775E-05 +181.2490 8.7970E-05 +181.2493 8.7970E-05 +181.2497 8.7970E-05 +181.2500 8.7971E-05 +181.2507 8.7971E-05 +181.2514 8.7971E-05 +181.2522 8.7971E-05 +181.2529 8.7971E-05 +181.2536 8.7971E-05 +181.2543 8.7971E-05 +181.2550 8.7971E-05 +181.2602 8.7972E-05 +181.2704 8.7974E-05 +181.2909 8.7978E-05 +181.3318 8.7985E-05 +182.2500 8.8138E-05 +182.2510 8.8138E-05 +183.3320 8.8307E-05 +183.3321 8.8307E-05 +183.3323 8.8307E-05 +183.3327 8.8307E-05 +183.3330 8.8308E-05 +183.3337 8.8308E-05 +183.3344 8.8308E-05 +183.3352 8.8308E-05 +183.3359 8.8308E-05 +183.3366 8.8308E-05 +183.3373 8.8308E-05 +183.3380 8.8308E-05 +183.3432 8.8309E-05 +183.3534 8.8311E-05 +183.3739 8.8314E-05 +183.4148 8.8320E-05 +184.3330 8.8453E-05 +184.3340 8.8453E-05 +185.4120 8.8599E-05 +185.4123 8.8599E-05 +185.4127 8.8599E-05 +185.4130 8.8599E-05 +185.4137 8.8599E-05 +185.4144 8.8599E-05 +185.4152 8.8599E-05 +185.4159 8.8600E-05 +185.4166 8.8600E-05 +185.4173 8.8600E-05 +185.4180 8.8600E-05 +185.4232 8.8600E-05 +185.4334 8.8602E-05 +185.4539 8.8604E-05 +185.4948 8.8610E-05 +186.4130 8.8725E-05 +186.4140 8.8725E-05 +187.4990 8.8851E-05 +187.4993 8.8851E-05 +187.4997 8.8851E-05 +187.5000 8.8851E-05 +187.5007 8.8851E-05 +187.5014 8.8851E-05 +187.5022 8.8851E-05 +187.5029 8.8851E-05 +187.5036 8.8852E-05 +187.5043 8.8852E-05 +187.5050 8.8852E-05 +187.5102 8.8852E-05 +187.5204 8.8853E-05 +187.5409 8.8856E-05 +187.5818 8.8860E-05 +188.5000 8.8959E-05 +188.5010 8.8959E-05 +189.5820 8.9066E-05 +189.5823 8.9066E-05 +189.5827 8.9066E-05 +189.5830 8.9066E-05 +189.5834 8.9066E-05 +189.5837 8.9066E-05 +189.5841 8.9066E-05 +189.5844 8.9066E-05 +189.5848 8.9066E-05 +189.5851 8.9066E-05 +189.5855 8.9066E-05 +189.5880 8.9066E-05 +189.5932 8.9067E-05 +189.6034 8.9068E-05 +189.6239 8.9070E-05 +189.6648 8.9074E-05 +190.5830 8.9157E-05 +190.5840 8.9157E-05 +191.6620 8.9247E-05 +191.6623 8.9247E-05 +191.6627 8.9247E-05 +191.6630 8.9248E-05 +191.6637 8.9248E-05 +191.6644 8.9248E-05 +191.6652 8.9248E-05 +191.6659 8.9248E-05 +191.6666 8.9248E-05 +191.6673 8.9248E-05 +191.6680 8.9248E-05 +191.6732 8.9248E-05 +191.6834 8.9249E-05 +191.7039 8.9251E-05 +191.7448 8.9254E-05 +192.6630 8.9324E-05 +192.6640 8.9324E-05 +193.7490 8.9400E-05 +193.7493 8.9400E-05 +193.7497 8.9400E-05 +193.7500 8.9400E-05 +193.7507 8.9400E-05 +193.7514 8.9400E-05 +193.7522 8.9400E-05 +193.7529 8.9400E-05 +193.7536 8.9400E-05 +193.7543 8.9400E-05 +193.7550 8.9400E-05 +193.7602 8.9400E-05 +193.7704 8.9401E-05 +193.7909 8.9402E-05 +193.8318 8.9405E-05 +194.7500 8.9463E-05 +194.7510 8.9463E-05 +195.8320 8.9524E-05 +195.8323 8.9524E-05 +195.8327 8.9524E-05 +195.8330 8.9524E-05 +195.8337 8.9524E-05 +195.8344 8.9524E-05 +195.8352 8.9525E-05 +195.8359 8.9525E-05 +195.8366 8.9525E-05 +195.8373 8.9525E-05 +195.8380 8.9525E-05 +195.8432 8.9525E-05 +195.8534 8.9525E-05 +195.8739 8.9527E-05 +195.9148 8.9529E-05 +196.4913 8.9559E-05 +196.8330 8.9575E-05 +196.8340 8.9576E-05 +197.9120 8.9625E-05 +197.9123 8.9625E-05 +197.9127 8.9625E-05 +197.9130 8.9625E-05 +197.9137 8.9625E-05 +197.9144 8.9625E-05 +197.9152 8.9625E-05 +197.9159 8.9625E-05 +197.9166 8.9625E-05 +197.9173 8.9625E-05 +197.9180 8.9625E-05 +197.9232 8.9625E-05 +197.9334 8.9625E-05 +197.9539 8.9626E-05 +197.9948 8.9628E-05 +198.9130 8.9665E-05 +198.9140 8.9665E-05 +199.9990 8.9703E-05 +199.9993 8.9703E-05 +199.9997 8.9703E-05 +200.0000 8.9703E-05 +200.0007 8.9703E-05 +200.0014 8.9703E-05 +200.0022 8.9703E-05 +200.0029 8.9703E-05 +200.0036 8.9703E-05 +200.0043 8.9703E-05 +200.0050 8.9703E-05 +200.0102 8.9703E-05 +200.0204 8.9704E-05 +200.0409 8.9704E-05 +200.0818 8.9706E-05 +201.0000 8.9733E-05 +201.0010 8.9733E-05 +202.0820 8.9761E-05 +202.0823 8.9761E-05 +202.0827 8.9761E-05 +202.0830 8.9761E-05 +202.0837 8.9761E-05 +202.0844 8.9761E-05 +202.0852 8.9761E-05 +202.0859 8.9761E-05 +202.0866 8.9761E-05 +202.0873 8.9761E-05 +202.0880 8.9761E-05 +202.0932 8.9762E-05 +202.1034 8.9762E-05 +202.1239 8.9762E-05 +202.1648 8.9763E-05 +202.9620 8.9780E-05 +203.0830 8.9783E-05 +203.0840 8.9783E-05 +204.1620 8.9802E-05 +204.1623 8.9802E-05 +204.1627 8.9802E-05 +204.1630 8.9802E-05 +204.1637 8.9802E-05 +204.1644 8.9802E-05 +204.1652 8.9802E-05 +204.1659 8.9802E-05 +204.1666 8.9802E-05 +204.1673 8.9802E-05 +204.1680 8.9802E-05 +204.1732 8.9802E-05 +204.1834 8.9802E-05 +204.2039 8.9802E-05 +204.2448 8.9803E-05 +205.1630 8.9815E-05 +205.1640 8.9815E-05 +206.2490 8.9826E-05 +206.2493 8.9826E-05 +206.2497 8.9826E-05 +206.2500 8.9826E-05 +206.2507 8.9826E-05 +206.2514 8.9826E-05 +206.2522 8.9826E-05 +206.2529 8.9826E-05 +206.2536 8.9826E-05 +206.2543 8.9826E-05 +206.2550 8.9826E-05 +206.2602 8.9826E-05 +206.2704 8.9826E-05 +206.2909 8.9826E-05 +206.3318 8.9827E-05 +207.2500 8.9832E-05 +207.2510 8.9832E-05 +208.3320 8.9835E-05 +208.3323 8.9835E-05 +208.3327 8.9835E-05 +208.3330 8.9835E-05 +208.3345 8.9835E-05 +208.3359 8.9835E-05 +208.3374 8.9835E-05 +208.3388 8.9835E-05 +208.3403 8.9835E-05 +208.3417 8.9835E-05 +208.3432 8.9835E-05 +208.3534 8.9836E-05 +208.3739 8.9836E-05 +208.4148 8.9836E-05 +209.3010 8.9835E-05 +209.3330 8.9835E-05 +209.3340 8.9835E-05 +210.4120 8.9832E-05 +210.4123 8.9832E-05 +210.4127 8.9832E-05 +210.4130 8.9832E-05 +210.4145 8.9832E-05 +210.4159 8.9832E-05 +210.4174 8.9832E-05 +210.4188 8.9832E-05 +210.4203 8.9832E-05 +210.4217 8.9832E-05 +210.4232 8.9832E-05 +210.4334 8.9832E-05 +210.4539 8.9832E-05 +210.4948 8.9832E-05 +211.4130 8.9826E-05 +211.4140 8.9826E-05 +212.4990 8.9817E-05 +212.4993 8.9817E-05 +212.4997 8.9817E-05 +212.5000 8.9817E-05 +212.5015 8.9817E-05 +212.5029 8.9817E-05 +212.5044 8.9817E-05 +212.5058 8.9817E-05 +212.5073 8.9817E-05 +212.5087 8.9817E-05 +212.5102 8.9817E-05 +212.5204 8.9816E-05 +212.5409 8.9816E-05 +212.5818 8.9816E-05 +213.5000 8.9806E-05 +213.5010 8.9806E-05 +214.5820 8.9791E-05 +214.5827 8.9791E-05 +214.5830 8.9791E-05 +214.5888 8.9791E-05 +214.5947 8.9791E-05 +214.6005 8.9791E-05 +214.6064 8.9791E-05 +214.6122 8.9790E-05 +214.6180 8.9790E-05 +214.6239 8.9790E-05 +215.5820 8.9775E-05 +215.5830 8.9775E-05 +215.5840 8.9775E-05 +216.6620 8.9756E-05 +216.6623 8.9756E-05 +216.6627 8.9756E-05 +216.6630 8.9756E-05 +216.6645 8.9756E-05 +216.6659 8.9756E-05 +216.6674 8.9756E-05 +216.6688 8.9756E-05 +216.6703 8.9756E-05 +216.6717 8.9755E-05 +216.6732 8.9755E-05 +216.6834 8.9755E-05 +216.7039 8.9755E-05 +216.7448 8.9754E-05 +217.6630 8.9736E-05 +217.6640 8.9736E-05 +218.7490 8.9712E-05 +218.7493 8.9712E-05 +218.7497 8.9712E-05 +218.7500 8.9712E-05 +218.7515 8.9712E-05 +218.7529 8.9712E-05 +218.7544 8.9712E-05 +218.7558 8.9712E-05 +218.7573 8.9712E-05 +218.7587 8.9712E-05 +218.7602 8.9712E-05 +218.7704 8.9711E-05 +218.7909 8.9711E-05 +218.8318 8.9710E-05 +219.7500 8.9688E-05 +219.7510 8.9688E-05 +220.8320 8.9660E-05 +220.8323 8.9660E-05 +220.8327 8.9660E-05 +220.8330 8.9660E-05 +220.8345 8.9660E-05 +220.8359 8.9660E-05 +220.8374 8.9660E-05 +220.8388 8.9660E-05 +220.8403 8.9660E-05 +220.8417 8.9660E-05 +220.8432 8.9660E-05 +220.8534 8.9660E-05 +220.8739 8.9659E-05 +220.9148 8.9658E-05 +221.8330 8.9633E-05 +221.8340 8.9633E-05 +221.8352 8.9633E-05 +222.9120 8.9602E-05 +222.9123 8.9602E-05 +222.9127 8.9602E-05 +222.9130 8.9602E-05 +222.9145 8.9602E-05 +222.9159 8.9602E-05 +222.9174 8.9602E-05 +222.9188 8.9602E-05 +222.9203 8.9602E-05 +222.9217 8.9602E-05 +222.9232 8.9602E-05 +222.9334 8.9602E-05 +222.9539 8.9601E-05 +222.9948 8.9600E-05 +223.9130 8.9572E-05 +223.9140 8.9572E-05 +224.9990 8.9538E-05 +224.9993 8.9538E-05 +224.9997 8.9538E-05 +225.0000 8.9538E-05 +225.0007 8.9538E-05 +225.0014 8.9538E-05 +225.0022 8.9538E-05 +225.0029 8.9538E-05 +225.0036 8.9538E-05 +225.0043 8.9538E-05 +225.0050 8.9538E-05 +225.0102 8.9538E-05 +225.0204 8.9537E-05 +225.0409 8.9537E-05 +225.0818 8.9535E-05 +226.0000 8.9505E-05 +226.0010 8.9505E-05 +227.0820 8.9469E-05 +227.0823 8.9469E-05 +227.0827 8.9469E-05 +227.0830 8.9468E-05 +227.0837 8.9468E-05 +227.0844 8.9468E-05 +227.0852 8.9468E-05 +227.0859 8.9468E-05 +227.0866 8.9468E-05 +227.0873 8.9468E-05 +227.0880 8.9468E-05 +227.0932 8.9468E-05 +227.1034 8.9468E-05 +227.1239 8.9467E-05 +227.1648 8.9466E-05 +228.0830 8.9433E-05 +228.0840 8.9433E-05 +228.7393 8.9410E-05 +229.1620 8.9394E-05 +229.1623 8.9394E-05 +229.1627 8.9394E-05 +229.1630 8.9394E-05 +229.1637 8.9394E-05 +229.1644 8.9394E-05 +229.1652 8.9394E-05 +229.1659 8.9394E-05 +229.1666 8.9394E-05 +229.1673 8.9394E-05 +229.1680 8.9394E-05 +229.1732 8.9394E-05 +229.1834 8.9393E-05 +229.2039 8.9393E-05 +229.2448 8.9391E-05 +230.1630 8.9357E-05 +230.1640 8.9357E-05 +231.2490 8.9315E-05 +231.2493 8.9315E-05 +231.2497 8.9315E-05 +231.2500 8.9315E-05 +231.2507 8.9315E-05 +231.2514 8.9315E-05 +231.2522 8.9315E-05 +231.2529 8.9315E-05 +231.2536 8.9315E-05 +231.2543 8.9315E-05 +231.2550 8.9315E-05 +231.2602 8.9315E-05 +231.2704 8.9314E-05 +231.2909 8.9314E-05 +231.3318 8.9312E-05 +232.2500 8.9276E-05 +232.2510 8.9276E-05 +233.3320 8.9233E-05 +233.3323 8.9233E-05 +233.3327 8.9233E-05 +233.3330 8.9233E-05 +233.3337 8.9233E-05 +233.3344 8.9232E-05 +233.3352 8.9232E-05 +233.3359 8.9232E-05 +233.3366 8.9232E-05 +233.3373 8.9232E-05 +233.3380 8.9232E-05 +233.3432 8.9232E-05 +233.3534 8.9232E-05 +233.3739 8.9231E-05 +233.4148 8.9229E-05 +234.3330 8.9192E-05 +234.3340 8.9192E-05 +235.2453 8.9154E-05 +235.4120 8.9147E-05 +235.4123 8.9147E-05 +235.4127 8.9147E-05 +235.4130 8.9147E-05 +235.4137 8.9147E-05 +235.4144 8.9147E-05 +235.4152 8.9146E-05 +235.4159 8.9146E-05 +235.4166 8.9146E-05 +235.4173 8.9146E-05 +235.4180 8.9146E-05 +235.4232 8.9146E-05 +235.4334 8.9146E-05 +235.4539 8.9145E-05 +235.4948 8.9143E-05 +236.4130 8.9104E-05 +236.4140 8.9104E-05 +237.4990 8.9057E-05 +237.4993 8.9057E-05 +237.4997 8.9057E-05 +237.5000 8.9057E-05 +237.5007 8.9057E-05 +237.5014 8.9057E-05 +237.5022 8.9057E-05 +237.5029 8.9057E-05 +237.5036 8.9057E-05 +237.5043 8.9057E-05 +237.5050 8.9057E-05 +237.5102 8.9057E-05 +237.5204 8.9056E-05 +237.5409 8.9055E-05 +237.5818 8.9054E-05 +238.5000 8.9013E-05 +238.5010 8.9013E-05 +239.5820 8.8965E-05 +239.5823 8.8965E-05 +239.5827 8.8965E-05 +239.5830 8.8965E-05 +239.5837 8.8965E-05 +239.5844 8.8965E-05 +239.5852 8.8965E-05 +239.5859 8.8965E-05 +239.5866 8.8965E-05 +239.5873 8.8965E-05 +239.5880 8.8965E-05 +239.5932 8.8965E-05 +239.6034 8.8964E-05 +239.6239 8.8963E-05 +239.6648 8.8962E-05 +240.5830 8.8920E-05 +240.5840 8.8920E-05 +241.6050 8.8874E-05 +241.6620 8.8871E-05 +241.6623 8.8871E-05 +241.6627 8.8871E-05 +241.6630 8.8871E-05 +241.6637 8.8871E-05 +241.6644 8.8871E-05 +241.6652 8.8871E-05 +241.6659 8.8871E-05 +241.6666 8.8871E-05 +241.6673 8.8871E-05 +241.6680 8.8871E-05 +241.6732 8.8871E-05 +241.6834 8.8870E-05 +241.7039 8.8869E-05 +241.7448 8.8867E-05 +242.6630 8.8825E-05 +242.6640 8.8825E-05 +243.7490 8.8774E-05 +243.7493 8.8774E-05 +243.7497 8.8774E-05 +243.7500 8.8774E-05 +243.7507 8.8774E-05 +243.7514 8.8774E-05 +243.7522 8.8774E-05 +243.7529 8.8774E-05 +243.7536 8.8774E-05 +243.7543 8.8774E-05 +243.7550 8.8774E-05 +243.7602 8.8774E-05 +243.7704 8.8773E-05 +243.7909 8.8772E-05 +243.8318 8.8771E-05 +244.7500 8.8727E-05 +244.7510 8.8727E-05 +245.8320 8.8676E-05 +245.8323 8.8676E-05 +245.8327 8.8676E-05 +245.8330 8.8676E-05 +245.8337 8.8676E-05 +245.8344 8.8676E-05 +245.8352 8.8676E-05 +245.8359 8.8676E-05 +245.8366 8.8676E-05 +245.8373 8.8676E-05 +245.8380 8.8676E-05 +245.8432 8.8675E-05 +245.8534 8.8675E-05 +245.8739 8.8674E-05 +245.9148 8.8672E-05 +246.8330 8.8628E-05 +246.8340 8.8628E-05 +247.9040 8.8576E-05 +247.9120 8.8576E-05 +247.9123 8.8576E-05 +247.9127 8.8576E-05 +247.9130 8.8576E-05 +247.9137 8.8576E-05 +247.9144 8.8576E-05 +247.9152 8.8576E-05 +247.9159 8.8576E-05 +247.9166 8.8576E-05 +247.9173 8.8576E-05 +247.9180 8.8576E-05 +247.9232 8.8575E-05 +247.9334 8.8575E-05 +247.9539 8.8574E-05 +247.9948 8.8572E-05 +248.9130 8.8527E-05 +248.9140 8.8527E-05 +249.9990 8.8474E-05 +249.9993 8.8474E-05 +249.9997 8.8474E-05 +250.0000 8.8474E-05 +250.0007 8.8474E-05 +250.0014 8.8474E-05 +250.0022 8.8474E-05 +250.0029 8.8474E-05 +250.0036 8.8474E-05 +250.0043 8.8474E-05 +250.0050 8.8474E-05 +250.0102 8.8473E-05 +250.0204 8.8473E-05 +250.0409 8.8472E-05 +250.0818 8.8470E-05 +251.0000 8.8425E-05 +251.0010 8.8425E-05 +252.0820 8.8371E-05 +252.0823 8.8371E-05 +252.0827 8.8371E-05 +252.0830 8.8371E-05 +252.0837 8.8371E-05 +252.0844 8.8371E-05 +252.0852 8.8371E-05 +252.0859 8.8371E-05 +252.0866 8.8371E-05 +252.0873 8.8371E-05 +252.0880 8.8371E-05 +252.0932 8.8370E-05 +252.1034 8.8370E-05 +252.1239 8.8369E-05 +252.1648 8.8367E-05 +253.0830 8.8321E-05 +253.0840 8.8321E-05 +254.1620 8.8267E-05 +254.1623 8.8267E-05 +254.1627 8.8267E-05 +254.1630 8.8267E-05 +254.1637 8.8267E-05 +254.1644 8.8267E-05 +254.1652 8.8267E-05 +254.1659 8.8267E-05 +254.1666 8.8267E-05 +254.1673 8.8267E-05 +254.1680 8.8267E-05 +254.1732 8.8266E-05 +254.1834 8.8266E-05 +254.2039 8.8265E-05 +254.2448 8.8263E-05 +255.1630 8.8216E-05 +255.1640 8.8216E-05 +256.2490 8.8161E-05 +256.2493 8.8161E-05 +256.2497 8.8161E-05 +256.2500 8.8161E-05 +256.2507 8.8161E-05 +256.2514 8.8161E-05 +256.2522 8.8161E-05 +256.2529 8.8161E-05 +256.2536 8.8161E-05 +256.2543 8.8161E-05 +256.2550 8.8161E-05 +256.2602 8.8161E-05 +256.2704 8.8160E-05 +256.2909 8.8159E-05 +256.3318 8.8157E-05 +257.2500 8.8110E-05 +257.2510 8.8110E-05 +258.3320 8.8055E-05 +258.3323 8.8055E-05 +258.3327 8.8055E-05 +258.3330 8.8055E-05 +258.3337 8.8055E-05 +258.3344 8.8055E-05 +258.3352 8.8055E-05 +258.3359 8.8055E-05 +258.3366 8.8055E-05 +258.3373 8.8055E-05 +258.3380 8.8055E-05 +258.3432 8.8055E-05 +258.3534 8.8054E-05 +258.3739 8.8053E-05 +258.4148 8.8051E-05 +259.3330 8.8004E-05 +259.3340 8.8004E-05 +260.4120 8.7948E-05 +260.4123 8.7948E-05 +260.4127 8.7948E-05 +260.4130 8.7948E-05 +260.4137 8.7948E-05 +260.4144 8.7948E-05 +260.4152 8.7948E-05 +260.4159 8.7948E-05 +260.4166 8.7948E-05 +260.4173 8.7948E-05 +260.4180 8.7948E-05 +260.4232 8.7948E-05 +260.4334 8.7947E-05 +260.4539 8.7946E-05 +260.4948 8.7944E-05 +261.4130 8.7897E-05 +261.4140 8.7896E-05 +262.4990 8.7840E-05 +262.4993 8.7840E-05 +262.4997 8.7840E-05 +262.5000 8.7840E-05 +262.5007 8.7840E-05 +262.5014 8.7840E-05 +262.5022 8.7840E-05 +262.5029 8.7840E-05 +262.5036 8.7840E-05 +262.5043 8.7840E-05 +262.5050 8.7840E-05 +262.5102 8.7840E-05 +262.5204 8.7839E-05 +262.5409 8.7838E-05 +262.5818 8.7836E-05 +263.5000 8.7788E-05 +263.5010 8.7788E-05 +264.5820 8.7732E-05 +264.5823 8.7732E-05 +264.5827 8.7732E-05 +264.5830 8.7732E-05 +264.5837 8.7732E-05 +264.5844 8.7732E-05 +264.5852 8.7732E-05 +264.5859 8.7732E-05 +264.5866 8.7732E-05 +264.5873 8.7732E-05 +264.5880 8.7732E-05 +264.5932 8.7731E-05 +264.6034 8.7731E-05 +264.6239 8.7730E-05 +264.6648 8.7728E-05 +265.5830 8.7680E-05 +265.5840 8.7680E-05 +266.6620 8.7623E-05 +266.6623 8.7623E-05 +266.6627 8.7623E-05 +266.6630 8.7623E-05 +266.6637 8.7623E-05 +266.6644 8.7623E-05 +266.6652 8.7623E-05 +266.6659 8.7623E-05 +266.6666 8.7623E-05 +266.6673 8.7623E-05 +266.6680 8.7623E-05 +266.6732 8.7623E-05 +266.6834 8.7622E-05 +266.7039 8.7621E-05 +266.7448 8.7619E-05 +267.3333 8.7588E-05 +267.6630 8.7571E-05 +267.6640 8.7571E-05 +268.7490 8.7514E-05 +268.7493 8.7513E-05 +268.7497 8.7513E-05 +268.7500 8.7513E-05 +268.7507 8.7513E-05 +268.7514 8.7513E-05 +268.7522 8.7513E-05 +268.7529 8.7513E-05 +268.7536 8.7513E-05 +268.7543 8.7513E-05 +268.7550 8.7513E-05 +268.7602 8.7513E-05 +268.7704 8.7512E-05 +268.7909 8.7511E-05 +268.8318 8.7509E-05 +269.7500 8.7461E-05 +269.7510 8.7461E-05 +270.8320 8.7404E-05 +270.8323 8.7404E-05 +270.8327 8.7404E-05 +270.8330 8.7404E-05 +270.8337 8.7404E-05 +270.8344 8.7404E-05 +270.8352 8.7404E-05 +270.8359 8.7404E-05 +270.8366 8.7403E-05 +270.8373 8.7403E-05 +270.8380 8.7403E-05 +270.8432 8.7403E-05 +270.8534 8.7403E-05 +270.8739 8.7402E-05 +270.9148 8.7399E-05 +271.8330 8.7351E-05 +271.8340 8.7351E-05 +272.9120 8.7294E-05 +272.9123 8.7294E-05 +272.9127 8.7294E-05 +272.9130 8.7294E-05 +272.9137 8.7294E-05 +272.9144 8.7294E-05 +272.9152 8.7294E-05 +272.9159 8.7294E-05 +272.9166 8.7293E-05 +272.9173 8.7293E-05 +272.9180 8.7293E-05 +272.9232 8.7293E-05 +272.9334 8.7293E-05 +272.9539 8.7292E-05 +272.9948 8.7289E-05 +273.8160 8.7246E-05 +273.9130 8.7241E-05 +273.9140 8.7241E-05 +274.9990 8.7183E-05 +274.9993 8.7183E-05 +274.9997 8.7183E-05 +275.0000 8.7183E-05 +275.0007 8.7183E-05 +275.0014 8.7183E-05 +275.0022 8.7183E-05 +275.0029 8.7183E-05 +275.0036 8.7183E-05 +275.0043 8.7183E-05 +275.0050 8.7183E-05 +275.0102 8.7182E-05 +275.0204 8.7182E-05 +275.0409 8.7181E-05 +275.0818 8.7179E-05 +276.0000 8.7130E-05 +276.0010 8.7130E-05 +277.0820 8.7072E-05 +277.0823 8.7072E-05 +277.0827 8.7072E-05 +277.0830 8.7072E-05 +277.0837 8.7072E-05 +277.0844 8.7072E-05 +277.0852 8.7072E-05 +277.0859 8.7072E-05 +277.0866 8.7072E-05 +277.0873 8.7072E-05 +277.0880 8.7072E-05 +277.0932 8.7072E-05 +277.1034 8.7071E-05 +277.1239 8.7070E-05 +277.1648 8.7068E-05 +278.0830 8.7019E-05 +278.0840 8.7019E-05 +279.1620 8.6962E-05 +279.1623 8.6962E-05 +279.1627 8.6962E-05 +279.1630 8.6962E-05 +279.1637 8.6962E-05 +279.1644 8.6962E-05 +279.1652 8.6961E-05 +279.1659 8.6961E-05 +279.1666 8.6961E-05 +279.1673 8.6961E-05 +279.1680 8.6961E-05 +279.1732 8.6961E-05 +279.1834 8.6961E-05 +279.2039 8.6959E-05 +279.2448 8.6957E-05 +280.1430 8.6909E-05 +280.1630 8.6908E-05 +280.1640 8.6908E-05 +281.2490 8.6850E-05 +281.2493 8.6850E-05 +281.2497 8.6850E-05 +281.2500 8.6850E-05 +281.2507 8.6850E-05 +281.2514 8.6850E-05 +281.2522 8.6850E-05 +281.2529 8.6850E-05 +281.2536 8.6850E-05 +281.2543 8.6850E-05 +281.2550 8.6850E-05 +281.2602 8.6850E-05 +281.2704 8.6849E-05 +281.2909 8.6848E-05 +281.3318 8.6846E-05 +282.2500 8.6797E-05 +282.2510 8.6797E-05 +283.3320 8.6739E-05 +283.3323 8.6739E-05 +283.3327 8.6739E-05 +283.3330 8.6739E-05 +283.3337 8.6739E-05 +283.3344 8.6739E-05 +283.3352 8.6739E-05 +283.3359 8.6739E-05 +283.3366 8.6739E-05 +283.3373 8.6739E-05 +283.3380 8.6739E-05 +283.3432 8.6739E-05 +283.3534 8.6738E-05 +283.3739 8.6737E-05 +283.4148 8.6735E-05 +284.3330 8.6686E-05 +284.3340 8.6686E-05 +285.4120 8.6628E-05 +285.4123 8.6628E-05 +285.4127 8.6628E-05 +285.4130 8.6628E-05 +285.4137 8.6628E-05 +285.4144 8.6628E-05 +285.4152 8.6628E-05 +285.4159 8.6628E-05 +285.4166 8.6628E-05 +285.4173 8.6628E-05 +285.4180 8.6628E-05 +285.4232 8.6627E-05 +285.4334 8.6627E-05 +285.4539 8.6626E-05 +285.4948 8.6624E-05 +286.4130 8.6574E-05 +286.4131 8.6574E-05 +286.4140 8.6574E-05 +287.4990 8.6516E-05 +287.4993 8.6516E-05 +287.4997 8.6516E-05 +287.5000 8.6516E-05 +287.5007 8.6516E-05 +287.5014 8.6516E-05 +287.5022 8.6516E-05 +287.5029 8.6516E-05 +287.5036 8.6516E-05 +287.5043 8.6516E-05 +287.5050 8.6516E-05 +287.5102 8.6516E-05 +287.5204 8.6515E-05 +287.5409 8.6514E-05 +287.5818 8.6512E-05 +288.5000 8.6463E-05 +288.5010 8.6463E-05 +289.5820 8.6405E-05 +289.5823 8.6405E-05 +289.5827 8.6405E-05 +289.5830 8.6405E-05 +289.5837 8.6405E-05 +289.5844 8.6405E-05 +289.5852 8.6405E-05 +289.5859 8.6405E-05 +289.5866 8.6405E-05 +289.5873 8.6405E-05 +289.5880 8.6405E-05 +289.5932 8.6404E-05 +289.6034 8.6404E-05 +289.6239 8.6403E-05 +289.6648 8.6400E-05 +290.5830 8.6351E-05 +290.5840 8.6351E-05 +291.6620 8.6294E-05 +291.6623 8.6294E-05 +291.6627 8.6294E-05 +291.6630 8.6294E-05 +291.6637 8.6293E-05 +291.6644 8.6293E-05 +291.6652 8.6293E-05 +291.6659 8.6293E-05 +291.6666 8.6293E-05 +291.6673 8.6293E-05 +291.6680 8.6293E-05 +291.6732 8.6293E-05 +291.6834 8.6292E-05 +291.7039 8.6291E-05 +291.7448 8.6289E-05 +292.6630 8.6240E-05 +292.6640 8.6240E-05 +292.6690 8.6240E-05 +293.7490 8.6182E-05 +293.7493 8.6182E-05 +293.7497 8.6182E-05 +293.7500 8.6182E-05 +293.7507 8.6182E-05 +293.7514 8.6182E-05 +293.7522 8.6182E-05 +293.7529 8.6182E-05 +293.7536 8.6182E-05 +293.7543 8.6182E-05 +293.7550 8.6182E-05 +293.7602 8.6181E-05 +293.7704 8.6181E-05 +293.7909 8.6180E-05 +293.8318 8.6177E-05 +294.7500 8.6128E-05 +294.7510 8.6128E-05 +295.8320 8.6070E-05 +295.8323 8.6070E-05 +295.8327 8.6070E-05 +295.8330 8.6070E-05 +295.8337 8.6070E-05 +295.8344 8.6070E-05 +295.8352 8.6070E-05 +295.8359 8.6070E-05 +295.8366 8.6070E-05 +295.8373 8.6070E-05 +295.8380 8.6070E-05 +295.8432 8.6070E-05 +295.8534 8.6069E-05 +295.8739 8.6068E-05 +295.9148 8.6066E-05 +296.8330 8.6017E-05 +296.8340 8.6017E-05 +297.9120 8.5959E-05 +297.9123 8.5959E-05 +297.9127 8.5959E-05 +297.9130 8.5959E-05 +297.9137 8.5959E-05 +297.9144 8.5959E-05 +297.9152 8.5959E-05 +297.9159 8.5959E-05 +297.9166 8.5959E-05 +297.9173 8.5959E-05 +297.9180 8.5959E-05 +297.9232 8.5958E-05 +297.9334 8.5958E-05 +297.9539 8.5957E-05 +297.9948 8.5954E-05 +298.9130 8.5905E-05 +298.9140 8.5905E-05 +299.5723 8.5870E-05 +299.9990 8.5847E-05 +299.9993 8.5847E-05 +299.9997 8.5847E-05 +300.0000 8.5847E-05 +300.0007 8.5847E-05 +300.0014 8.5847E-05 +300.0022 8.5847E-05 +300.0029 8.5847E-05 +300.0036 8.5847E-05 +300.0043 8.5847E-05 +300.0050 8.5847E-05 +300.0102 8.5847E-05 +300.0204 8.5846E-05 +300.0409 8.5845E-05 +300.0818 8.5843E-05 +301.0000 8.5794E-05 +301.0010 8.5794E-05 +302.0820 8.5736E-05 +302.0823 8.5736E-05 +302.0827 8.5736E-05 +302.0830 8.5736E-05 +302.0837 8.5736E-05 +302.0844 8.5736E-05 +302.0852 8.5736E-05 +302.0859 8.5736E-05 +302.0866 8.5735E-05 +302.0873 8.5735E-05 +302.0880 8.5735E-05 +302.0932 8.5735E-05 +302.1034 8.5735E-05 +302.1239 8.5734E-05 +302.1648 8.5731E-05 +303.0830 8.5682E-05 +303.0840 8.5682E-05 +304.1620 8.5624E-05 +304.1623 8.5624E-05 +304.1627 8.5624E-05 +304.1630 8.5624E-05 +304.1637 8.5624E-05 +304.1644 8.5624E-05 +304.1652 8.5624E-05 +304.1659 8.5624E-05 +304.1666 8.5624E-05 +304.1673 8.5624E-05 +304.1680 8.5624E-05 +304.1732 8.5624E-05 +304.1834 8.5623E-05 +304.2039 8.5622E-05 +304.2448 8.5620E-05 +305.1630 8.5571E-05 +305.1640 8.5571E-05 +306.0813 8.5522E-05 +306.2490 8.5513E-05 +306.2493 8.5513E-05 +306.2497 8.5513E-05 +306.2500 8.5513E-05 +306.2507 8.5513E-05 +306.2514 8.5513E-05 +306.2522 8.5513E-05 +306.2529 8.5513E-05 +306.2536 8.5513E-05 +306.2543 8.5513E-05 +306.2550 8.5513E-05 +306.2602 8.5512E-05 +306.2704 8.5512E-05 +306.2909 8.5511E-05 +306.3318 8.5508E-05 +307.2500 8.5459E-05 +307.2510 8.5459E-05 +308.3320 8.5402E-05 +308.3323 8.5402E-05 +308.3327 8.5402E-05 +308.3330 8.5402E-05 +308.3337 8.5401E-05 +308.3344 8.5401E-05 +308.3352 8.5401E-05 +308.3359 8.5401E-05 +308.3366 8.5401E-05 +308.3373 8.5401E-05 +308.3380 8.5401E-05 +308.3432 8.5401E-05 +308.3534 8.5400E-05 +308.3739 8.5399E-05 +308.4148 8.5397E-05 +309.3330 8.5348E-05 +309.3340 8.5348E-05 +310.4120 8.5291E-05 +310.4123 8.5290E-05 +310.4127 8.5290E-05 +310.4130 8.5290E-05 +310.4137 8.5290E-05 +310.4144 8.5290E-05 +310.4152 8.5290E-05 +310.4159 8.5290E-05 +310.4166 8.5290E-05 +310.4173 8.5290E-05 +310.4180 8.5290E-05 +310.4232 8.5290E-05 +310.4334 8.5289E-05 +310.4539 8.5288E-05 +310.4948 8.5286E-05 +311.4130 8.5237E-05 +311.4140 8.5237E-05 +312.4660 8.5181E-05 +312.4990 8.5179E-05 +312.4993 8.5179E-05 +312.4997 8.5179E-05 +312.5000 8.5179E-05 +312.5007 8.5179E-05 +312.5014 8.5179E-05 +312.5022 8.5179E-05 +312.5029 8.5179E-05 +312.5036 8.5179E-05 +312.5043 8.5179E-05 +312.5050 8.5179E-05 +312.5102 8.5179E-05 +312.5204 8.5178E-05 +312.5409 8.5177E-05 +312.5818 8.5175E-05 +313.5000 8.5126E-05 +313.5010 8.5126E-05 +314.5820 8.5068E-05 +314.5823 8.5068E-05 +314.5827 8.5068E-05 +314.5830 8.5068E-05 +314.5837 8.5068E-05 +314.5844 8.5068E-05 +314.5852 8.5068E-05 +314.5859 8.5068E-05 +314.5866 8.5068E-05 +314.5873 8.5068E-05 +314.5880 8.5068E-05 +314.5932 8.5067E-05 +314.6034 8.5067E-05 +314.6239 8.5066E-05 +314.6648 8.5064E-05 +315.5830 8.5015E-05 +315.5840 8.5015E-05 +316.6620 8.4957E-05 +316.6623 8.4957E-05 +316.6627 8.4957E-05 +316.6630 8.4957E-05 +316.6637 8.4957E-05 +316.6644 8.4957E-05 +316.6652 8.4957E-05 +316.6659 8.4957E-05 +316.6666 8.4957E-05 +316.6673 8.4957E-05 +316.6680 8.4957E-05 +316.6732 8.4957E-05 +316.6834 8.4956E-05 +316.7039 8.4955E-05 +316.7448 8.4953E-05 +317.6630 8.4904E-05 +317.6640 8.4904E-05 +318.7440 8.4846E-05 +318.7490 8.4846E-05 +318.7493 8.4846E-05 +318.7497 8.4846E-05 +318.7500 8.4846E-05 +318.7507 8.4846E-05 +318.7514 8.4846E-05 +318.7522 8.4846E-05 +318.7529 8.4846E-05 +318.7536 8.4846E-05 +318.7543 8.4846E-05 +318.7550 8.4846E-05 +318.7602 8.4846E-05 +318.7704 8.4845E-05 +318.7909 8.4844E-05 +318.8318 8.4842E-05 +319.7500 8.4793E-05 +319.7510 8.4793E-05 +320.8320 8.4735E-05 +320.8323 8.4735E-05 +320.8327 8.4735E-05 +320.8330 8.4735E-05 +320.8337 8.4735E-05 +320.8344 8.4735E-05 +320.8352 8.4735E-05 +320.8359 8.4735E-05 +320.8366 8.4735E-05 +320.8373 8.4735E-05 +320.8380 8.4735E-05 +320.8432 8.4735E-05 +320.8534 8.4734E-05 +320.8739 8.4733E-05 +320.9148 8.4731E-05 +321.8330 8.4682E-05 +321.8340 8.4682E-05 +322.9120 8.4625E-05 +322.9123 8.4625E-05 +322.9127 8.4625E-05 +322.9130 8.4625E-05 +322.9137 8.4625E-05 +322.9144 8.4625E-05 +322.9152 8.4625E-05 +322.9159 8.4625E-05 +322.9166 8.4625E-05 +322.9173 8.4625E-05 +322.9180 8.4624E-05 +322.9232 8.4624E-05 +322.9334 8.4624E-05 +322.9539 8.4623E-05 +322.9948 8.4620E-05 +323.9130 8.4572E-05 +323.9140 8.4572E-05 +324.9990 8.4514E-05 +324.9993 8.4514E-05 +324.9997 8.4514E-05 +325.0000 8.4514E-05 +325.0001 8.4514E-05 +325.0012 8.4514E-05 +325.0025 8.4514E-05 +325.0050 8.4514E-05 +325.0102 8.4513E-05 +325.0204 8.4513E-05 +325.0409 8.4512E-05 +325.0818 8.4510E-05 +326.0000 8.4461E-05 +326.0010 8.4461E-05 +327.0820 8.4403E-05 +327.0823 8.4403E-05 +327.0827 8.4403E-05 +327.0830 8.4403E-05 +327.0837 8.4403E-05 +327.0844 8.4403E-05 +327.0852 8.4403E-05 +327.0859 8.4403E-05 +327.0866 8.4403E-05 +327.0873 8.4403E-05 +327.0880 8.4403E-05 +327.0932 8.4403E-05 +327.1034 8.4402E-05 +327.1239 8.4401E-05 +327.1648 8.4399E-05 +328.0830 8.4350E-05 +328.0840 8.4350E-05 +329.1620 8.4293E-05 +329.1623 8.4293E-05 +329.1627 8.4293E-05 +329.1630 8.4293E-05 +329.1637 8.4293E-05 +329.1644 8.4293E-05 +329.1652 8.4293E-05 +329.1659 8.4293E-05 +329.1666 8.4293E-05 +329.1673 8.4293E-05 +329.1680 8.4293E-05 +329.1732 8.4293E-05 +329.1834 8.4292E-05 +329.2039 8.4291E-05 +329.2448 8.4289E-05 +330.1630 8.4240E-05 +330.1640 8.4240E-05 +331.2490 8.4183E-05 +331.2493 8.4183E-05 +331.2497 8.4183E-05 +331.2500 8.4183E-05 +331.2507 8.4183E-05 +331.2514 8.4183E-05 +331.2522 8.4183E-05 +331.2529 8.4183E-05 +331.2536 8.4183E-05 +331.2543 8.4182E-05 +331.2550 8.4182E-05 +331.2602 8.4182E-05 +331.2704 8.4182E-05 +331.2909 8.4181E-05 +331.3318 8.4178E-05 +332.2500 8.4130E-05 +332.2510 8.4130E-05 +333.3320 8.4073E-05 +333.3323 8.4073E-05 +333.3327 8.4073E-05 +333.3330 8.4073E-05 +333.3337 8.4073E-05 +333.3344 8.4072E-05 +333.3352 8.4072E-05 +333.3359 8.4072E-05 +333.3366 8.4072E-05 +333.3373 8.4072E-05 +333.3380 8.4072E-05 +333.3432 8.4072E-05 +333.3534 8.4071E-05 +333.3739 8.4070E-05 +333.4148 8.4068E-05 +334.3330 8.4020E-05 +334.3340 8.4020E-05 +335.4120 8.3963E-05 +335.4123 8.3963E-05 +335.4127 8.3963E-05 +335.4130 8.3963E-05 +335.4137 8.3963E-05 +335.4144 8.3963E-05 +335.4152 8.3963E-05 +335.4159 8.3963E-05 +335.4166 8.3962E-05 +335.4173 8.3962E-05 +335.4180 8.3962E-05 +335.4232 8.3962E-05 +335.4334 8.3962E-05 +335.4539 8.3961E-05 +335.4948 8.3958E-05 +336.4130 8.3910E-05 +336.4140 8.3910E-05 +337.4990 8.3853E-05 +337.4993 8.3853E-05 +337.4997 8.3853E-05 +337.5000 8.3853E-05 +337.5007 8.3853E-05 +337.5014 8.3852E-05 +337.5022 8.3852E-05 +337.5029 8.3852E-05 +337.5036 8.3852E-05 +337.5043 8.3852E-05 +337.5050 8.3852E-05 +337.5102 8.3852E-05 +337.5204 8.3851E-05 +337.5409 8.3850E-05 +337.5818 8.3848E-05 +338.2183 8.3815E-05 +338.5000 8.3800E-05 +338.5010 8.3800E-05 +339.5820 8.3743E-05 +339.5823 8.3743E-05 +339.5827 8.3743E-05 +339.5830 8.3743E-05 +339.5837 8.3743E-05 +339.5844 8.3743E-05 +339.5852 8.3743E-05 +339.5859 8.3743E-05 +339.5866 8.3743E-05 +339.5873 8.3743E-05 +339.5880 8.3742E-05 +339.5932 8.3742E-05 +339.6034 8.3742E-05 +339.6239 8.3741E-05 +339.6648 8.3738E-05 +340.5830 8.3690E-05 +340.5840 8.3690E-05 +341.6620 8.3633E-05 +341.6623 8.3633E-05 +341.6627 8.3633E-05 +341.6630 8.3633E-05 +341.6637 8.3633E-05 +341.6644 8.3633E-05 +341.6652 8.3633E-05 +341.6659 8.3633E-05 +341.6666 8.3633E-05 +341.6673 8.3633E-05 +341.6680 8.3633E-05 +341.6732 8.3633E-05 +341.6834 8.3632E-05 +341.7039 8.3631E-05 +341.7448 8.3629E-05 +342.6630 8.3581E-05 +342.6640 8.3581E-05 +343.7490 8.3523E-05 +343.7493 8.3523E-05 +343.7497 8.3523E-05 +343.7500 8.3523E-05 +343.7507 8.3523E-05 +343.7514 8.3523E-05 +343.7522 8.3523E-05 +343.7529 8.3523E-05 +343.7536 8.3523E-05 +343.7543 8.3523E-05 +343.7550 8.3523E-05 +343.7602 8.3523E-05 +343.7704 8.3522E-05 +343.7909 8.3521E-05 +343.8318 8.3519E-05 +344.6860 8.3474E-05 +344.7500 8.3471E-05 +344.7510 8.3471E-05 +345.8320 8.3414E-05 +345.8323 8.3414E-05 +345.8327 8.3414E-05 +345.8330 8.3414E-05 +345.8337 8.3414E-05 +345.8344 8.3414E-05 +345.8352 8.3414E-05 +345.8359 8.3414E-05 +345.8366 8.3414E-05 +345.8373 8.3414E-05 +345.8380 8.3414E-05 +345.8432 8.3413E-05 +345.8534 8.3413E-05 +345.8739 8.3412E-05 +345.9148 8.3410E-05 +346.8330 8.3361E-05 +346.8340 8.3361E-05 +347.9120 8.3305E-05 +347.9123 8.3305E-05 +347.9127 8.3305E-05 +347.9130 8.3305E-05 +347.9137 8.3305E-05 +347.9144 8.3305E-05 +347.9152 8.3305E-05 +347.9159 8.3305E-05 +347.9166 8.3305E-05 +347.9173 8.3305E-05 +347.9180 8.3305E-05 +347.9232 8.3304E-05 +347.9334 8.3304E-05 +347.9539 8.3303E-05 +347.9948 8.3301E-05 +348.9130 8.3252E-05 +348.9140 8.3252E-05 +349.9990 8.3195E-05 +349.9993 8.3195E-05 +349.9997 8.3195E-05 +350.0000 8.3195E-05 +350.0007 8.3195E-05 +350.0014 8.3195E-05 +350.0022 8.3195E-05 +350.0029 8.3195E-05 +350.0036 8.3195E-05 +350.0043 8.3195E-05 +350.0050 8.3195E-05 +350.0102 8.3195E-05 +350.0204 8.3194E-05 +350.0409 8.3193E-05 +350.0818 8.3191E-05 +350.9920 8.3143E-05 +351.0000 8.3143E-05 +351.0010 8.3143E-05 +352.0820 8.3086E-05 +352.0823 8.3086E-05 +352.0827 8.3086E-05 +352.0830 8.3086E-05 +352.0837 8.3086E-05 +352.0844 8.3086E-05 +352.0852 8.3086E-05 +352.0859 8.3086E-05 +352.0866 8.3086E-05 +352.0873 8.3086E-05 +352.0880 8.3086E-05 +352.0932 8.3086E-05 +352.1034 8.3085E-05 +352.1239 8.3084E-05 +352.1648 8.3082E-05 +353.0830 8.3034E-05 +353.0840 8.3034E-05 +354.1620 8.2978E-05 +354.1623 8.2978E-05 +354.1627 8.2978E-05 +354.1630 8.2978E-05 +354.1637 8.2977E-05 +354.1644 8.2977E-05 +354.1652 8.2977E-05 +354.1659 8.2977E-05 +354.1666 8.2977E-05 +354.1673 8.2977E-05 +354.1680 8.2977E-05 +354.1732 8.2977E-05 +354.1834 8.2976E-05 +354.2039 8.2975E-05 +354.2448 8.2973E-05 +355.1630 8.2925E-05 +355.1640 8.2925E-05 +356.2490 8.2869E-05 +356.2493 8.2869E-05 +356.2497 8.2868E-05 +356.2500 8.2868E-05 +356.2507 8.2868E-05 +356.2514 8.2868E-05 +356.2522 8.2868E-05 +356.2529 8.2868E-05 +356.2536 8.2868E-05 +356.2543 8.2868E-05 +356.2550 8.2868E-05 +356.2602 8.2868E-05 +356.2704 8.2867E-05 +356.2909 8.2866E-05 +356.3318 8.2864E-05 +357.2500 8.2816E-05 +357.2507 8.2816E-05 +357.2510 8.2816E-05 +358.3320 8.2760E-05 +358.3323 8.2760E-05 +358.3327 8.2760E-05 +358.3330 8.2760E-05 +358.3337 8.2760E-05 +358.3344 8.2760E-05 +358.3352 8.2760E-05 +358.3359 8.2760E-05 +358.3366 8.2760E-05 +358.3373 8.2760E-05 +358.3380 8.2759E-05 +358.3432 8.2759E-05 +358.3534 8.2759E-05 +358.3739 8.2758E-05 +358.4148 8.2755E-05 +359.3330 8.2708E-05 +359.3340 8.2708E-05 +360.4120 8.2651E-05 +360.4123 8.2651E-05 +360.4127 8.2651E-05 +360.4130 8.2651E-05 +360.4137 8.2651E-05 +360.4144 8.2651E-05 +360.4152 8.2651E-05 +360.4159 8.2651E-05 +360.4166 8.2651E-05 +360.4173 8.2651E-05 +360.4180 8.2651E-05 +360.4232 8.2651E-05 +360.4334 8.2650E-05 +360.4539 8.2649E-05 +360.4948 8.2647E-05 +361.4130 8.2599E-05 +361.4140 8.2599E-05 +362.4990 8.2543E-05 +362.4993 8.2543E-05 +362.4997 8.2543E-05 +362.5000 8.2543E-05 +362.5007 8.2543E-05 +362.5014 8.2543E-05 +362.5022 8.2543E-05 +362.5029 8.2543E-05 +362.5036 8.2542E-05 +362.5043 8.2542E-05 +362.5050 8.2542E-05 +362.5102 8.2542E-05 +362.5204 8.2542E-05 +362.5409 8.2541E-05 +362.5818 8.2538E-05 +363.5000 8.2491E-05 +363.5010 8.2491E-05 +363.5214 8.2490E-05 +364.5820 8.2434E-05 +364.5823 8.2434E-05 +364.5827 8.2434E-05 +364.5830 8.2434E-05 +364.5837 8.2434E-05 +364.5844 8.2434E-05 +364.5852 8.2434E-05 +364.5859 8.2434E-05 +364.5866 8.2434E-05 +364.5873 8.2434E-05 +364.5880 8.2434E-05 +364.5932 8.2434E-05 +364.6034 8.2433E-05 +364.6239 8.2432E-05 +364.6648 8.2430E-05 +365.5830 8.2382E-05 +365.5840 8.2382E-05 +366.6620 8.2326E-05 +366.6623 8.2326E-05 +366.6627 8.2326E-05 +366.6630 8.2326E-05 +366.6637 8.2326E-05 +366.6644 8.2326E-05 +366.6652 8.2326E-05 +366.6659 8.2326E-05 +366.6666 8.2326E-05 +366.6673 8.2326E-05 +366.6680 8.2326E-05 +366.6732 8.2326E-05 +366.6834 8.2325E-05 +366.7039 8.2324E-05 +366.7448 8.2322E-05 +367.6630 8.2274E-05 +367.6640 8.2274E-05 +368.7490 8.2218E-05 +368.7493 8.2218E-05 +368.7497 8.2218E-05 +368.7500 8.2218E-05 +368.7507 8.2218E-05 +368.7514 8.2218E-05 +368.7522 8.2218E-05 +368.7529 8.2218E-05 +368.7536 8.2218E-05 +368.7543 8.2218E-05 +368.7550 8.2218E-05 +368.7602 8.2217E-05 +368.7704 8.2217E-05 +368.7909 8.2216E-05 +368.8318 8.2214E-05 +369.7500 8.2166E-05 +369.7510 8.2166E-05 +370.4213 8.2131E-05 +370.8320 8.2110E-05 +370.8323 8.2110E-05 +370.8327 8.2110E-05 +370.8330 8.2110E-05 +370.8337 8.2110E-05 +370.8344 8.2110E-05 +370.8352 8.2110E-05 +370.8359 8.2110E-05 +370.8366 8.2110E-05 +370.8373 8.2110E-05 +370.8380 8.2110E-05 +370.8432 8.2110E-05 +370.8534 8.2109E-05 +370.8739 8.2108E-05 +370.9148 8.2106E-05 +371.8330 8.2058E-05 +371.8340 8.2058E-05 +372.9120 8.2002E-05 +372.9123 8.2002E-05 +372.9127 8.2002E-05 +372.9130 8.2002E-05 +372.9137 8.2002E-05 +372.9144 8.2002E-05 +372.9152 8.2002E-05 +372.9159 8.2002E-05 +372.9166 8.2002E-05 +372.9173 8.2002E-05 +372.9180 8.2002E-05 +372.9232 8.2002E-05 +372.9334 8.2001E-05 +372.9539 8.2000E-05 +372.9948 8.1998E-05 +373.9130 8.1951E-05 +373.9140 8.1951E-05 +374.9990 8.1894E-05 +374.9993 8.1894E-05 +374.9997 8.1894E-05 +375.0000 8.1894E-05 +375.0007 8.1894E-05 +375.0014 8.1894E-05 +375.0022 8.1894E-05 +375.0029 8.1894E-05 +375.0036 8.1894E-05 +375.0043 8.1894E-05 +375.0050 8.1894E-05 +375.0102 8.1894E-05 +375.0204 8.1893E-05 +375.0409 8.1892E-05 +375.0818 8.1890E-05 +376.0000 8.1843E-05 +376.0010 8.1843E-05 +376.9423 8.1794E-05 +377.0820 8.1787E-05 +377.0823 8.1787E-05 +377.0827 8.1787E-05 +377.0830 8.1787E-05 +377.0837 8.1787E-05 +377.0844 8.1787E-05 +377.0852 8.1787E-05 +377.0859 8.1787E-05 +377.0866 8.1787E-05 +377.0873 8.1787E-05 +377.0880 8.1787E-05 +377.0932 8.1786E-05 +377.1034 8.1786E-05 +377.1239 8.1785E-05 +377.1648 8.1783E-05 +378.0830 8.1735E-05 +378.0840 8.1735E-05 +379.1620 8.1680E-05 +379.1623 8.1680E-05 +379.1627 8.1680E-05 +379.1630 8.1680E-05 +379.1637 8.1680E-05 +379.1644 8.1679E-05 +379.1652 8.1679E-05 +379.1659 8.1679E-05 +379.1666 8.1679E-05 +379.1673 8.1679E-05 +379.1680 8.1679E-05 +379.1732 8.1679E-05 +379.1834 8.1679E-05 +379.2039 8.1677E-05 +379.2448 8.1675E-05 +380.1630 8.1628E-05 +380.1640 8.1628E-05 +381.2490 8.1572E-05 +381.2493 8.1572E-05 +381.2497 8.1572E-05 +381.2500 8.1572E-05 +381.2507 8.1572E-05 +381.2514 8.1572E-05 +381.2522 8.1572E-05 +381.2529 8.1572E-05 +381.2536 8.1572E-05 +381.2543 8.1572E-05 +381.2550 8.1572E-05 +381.2602 8.1572E-05 +381.2704 8.1571E-05 +381.2909 8.1570E-05 +381.3318 8.1568E-05 +382.2500 8.1521E-05 +382.2510 8.1521E-05 +383.3020 8.1466E-05 +383.3320 8.1465E-05 +383.3323 8.1465E-05 +383.3327 8.1465E-05 +383.3330 8.1465E-05 +383.3337 8.1465E-05 +383.3344 8.1465E-05 +383.3352 8.1465E-05 +383.3359 8.1465E-05 +383.3366 8.1465E-05 +383.3373 8.1465E-05 +383.3380 8.1465E-05 +383.3432 8.1464E-05 +383.3534 8.1464E-05 +383.3739 8.1463E-05 +383.4148 8.1461E-05 +384.3330 8.1413E-05 +384.3340 8.1413E-05 +385.4120 8.1358E-05 +385.4123 8.1358E-05 +385.4127 8.1358E-05 +385.4130 8.1358E-05 +385.4137 8.1358E-05 +385.4144 8.1358E-05 +385.4152 8.1358E-05 +385.4159 8.1358E-05 +385.4166 8.1358E-05 +385.4173 8.1358E-05 +385.4180 8.1358E-05 +385.4232 8.1357E-05 +385.4334 8.1357E-05 +385.4539 8.1356E-05 +385.4948 8.1354E-05 +386.4130 8.1307E-05 +386.4140 8.1307E-05 +387.4990 8.1251E-05 +387.4993 8.1251E-05 +387.4997 8.1251E-05 +387.5000 8.1251E-05 +387.5007 8.1251E-05 +387.5014 8.1251E-05 +387.5022 8.1251E-05 +387.5029 8.1251E-05 +387.5036 8.1251E-05 +387.5043 8.1251E-05 +387.5050 8.1251E-05 +387.5102 8.1250E-05 +387.5204 8.1250E-05 +387.5409 8.1249E-05 +387.5818 8.1247E-05 +388.5000 8.1199E-05 +388.5010 8.1199E-05 +389.5800 8.1144E-05 +389.5820 8.1144E-05 +389.5823 8.1144E-05 +389.5827 8.1144E-05 +389.5830 8.1144E-05 +389.5837 8.1144E-05 +389.5844 8.1144E-05 +389.5852 8.1144E-05 +389.5859 8.1144E-05 +389.5866 8.1144E-05 +389.5873 8.1144E-05 +389.5880 8.1144E-05 +389.5932 8.1143E-05 +389.6034 8.1143E-05 +389.6239 8.1142E-05 +389.6648 8.1140E-05 +390.5830 8.1093E-05 +390.5840 8.1093E-05 +391.6620 8.1037E-05 +391.6623 8.1037E-05 +391.6627 8.1037E-05 +391.6630 8.1037E-05 +391.6637 8.1037E-05 +391.6644 8.1037E-05 +391.6652 8.1037E-05 +391.6659 8.1037E-05 +391.6666 8.1037E-05 +391.6673 8.1037E-05 +391.6680 8.1037E-05 +391.6732 8.1037E-05 +391.6834 8.1036E-05 +391.7039 8.1035E-05 +391.7448 8.1033E-05 +392.6630 8.0986E-05 +392.6640 8.0986E-05 +393.7490 8.0931E-05 +393.7493 8.0931E-05 +393.7497 8.0931E-05 +393.7500 8.0931E-05 +393.7507 8.0931E-05 +393.7514 8.0931E-05 +393.7522 8.0931E-05 +393.7529 8.0930E-05 +393.7536 8.0930E-05 +393.7543 8.0930E-05 +393.7550 8.0930E-05 +393.7602 8.0930E-05 +393.7704 8.0930E-05 +393.7909 8.0929E-05 +393.8318 8.0926E-05 +394.7500 8.0880E-05 +394.7510 8.0879E-05 +395.8320 8.0824E-05 +395.8323 8.0824E-05 +395.8327 8.0824E-05 +395.8330 8.0824E-05 +395.8336 8.0824E-05 +395.8342 8.0824E-05 +395.8355 8.0824E-05 +395.8380 8.0824E-05 +395.8432 8.0824E-05 +395.8534 8.0823E-05 +395.8739 8.0822E-05 +395.9148 8.0820E-05 +396.8330 8.0773E-05 +396.8340 8.0773E-05 +397.9120 8.0718E-05 +397.9123 8.0718E-05 +397.9127 8.0718E-05 +397.9130 8.0718E-05 +397.9137 8.0718E-05 +397.9144 8.0718E-05 +397.9152 8.0718E-05 +397.9159 8.0718E-05 +397.9166 8.0718E-05 +397.9173 8.0718E-05 +397.9180 8.0718E-05 +397.9232 8.0717E-05 +397.9334 8.0717E-05 +397.9539 8.0716E-05 +397.9948 8.0714E-05 +398.9130 8.0667E-05 +398.9140 8.0667E-05 +399.9990 8.0612E-05 +399.9993 8.0612E-05 +399.9997 8.0612E-05 +400.0000 8.0612E-05 +400.0007 8.0612E-05 +400.0014 8.0612E-05 +400.0022 8.0611E-05 +400.0029 8.0611E-05 +400.0036 8.0611E-05 +400.0043 8.0611E-05 +400.0050 8.0611E-05 +400.0102 8.0611E-05 +400.0204 8.0611E-05 +400.0409 8.0610E-05 +400.0818 8.0607E-05 +401.0000 8.0561E-05 +401.0010 8.0561E-05 +402.0820 8.0506E-05 +402.0823 8.0506E-05 +402.0827 8.0506E-05 +402.0830 8.0506E-05 +402.0837 8.0506E-05 +402.0844 8.0505E-05 +402.0852 8.0505E-05 +402.0859 8.0505E-05 +402.0866 8.0505E-05 +402.0873 8.0505E-05 +402.0880 8.0505E-05 +402.0932 8.0505E-05 +402.1034 8.0505E-05 +402.1239 8.0503E-05 +402.1648 8.0501E-05 +402.4106 8.0489E-05 +403.0830 8.0455E-05 +403.0840 8.0455E-05 +404.1620 8.0400E-05 +404.1623 8.0400E-05 +404.1627 8.0400E-05 +404.1630 8.0400E-05 +404.1637 8.0400E-05 +404.1644 8.0400E-05 +404.1652 8.0400E-05 +404.1659 8.0400E-05 +404.1666 8.0400E-05 +404.1673 8.0400E-05 +404.1680 8.0399E-05 +404.1732 8.0399E-05 +404.1834 8.0399E-05 +404.2039 8.0398E-05 +404.2448 8.0396E-05 +405.1630 8.0349E-05 +405.1640 8.0349E-05 +406.2490 8.0294E-05 +406.2493 8.0294E-05 +406.2497 8.0294E-05 +406.2500 8.0294E-05 +406.2507 8.0294E-05 +406.2514 8.0294E-05 +406.2522 8.0294E-05 +406.2529 8.0294E-05 +406.2536 8.0294E-05 +406.2543 8.0294E-05 +406.2550 8.0293E-05 +406.2602 8.0293E-05 +406.2704 8.0293E-05 +406.2909 8.0292E-05 +406.3318 8.0290E-05 +407.2500 8.0243E-05 +407.2510 8.0243E-05 +408.3320 8.0188E-05 +408.3323 8.0188E-05 +408.3327 8.0188E-05 +408.3330 8.0188E-05 +408.3337 8.0188E-05 +408.3344 8.0188E-05 +408.3352 8.0188E-05 +408.3359 8.0188E-05 +408.3366 8.0188E-05 +408.3373 8.0188E-05 +408.3380 8.0188E-05 +408.3432 8.0188E-05 +408.3534 8.0187E-05 +408.3739 8.0186E-05 +408.4148 8.0184E-05 +409.2050 8.0144E-05 +409.3330 8.0137E-05 +409.3340 8.0137E-05 +410.4120 8.0083E-05 +410.4123 8.0083E-05 +410.4127 8.0083E-05 +410.4130 8.0083E-05 +410.4137 8.0083E-05 +410.4144 8.0083E-05 +410.4152 8.0083E-05 +410.4159 8.0082E-05 +410.4166 8.0082E-05 +410.4173 8.0082E-05 +410.4180 8.0082E-05 +410.4232 8.0082E-05 +410.4334 8.0082E-05 +410.4539 8.0081E-05 +410.4948 8.0078E-05 +411.4130 8.0032E-05 +411.4140 8.0032E-05 +412.4990 7.9977E-05 +412.4993 7.9977E-05 +412.4997 7.9977E-05 +412.5000 7.9977E-05 +412.5007 7.9977E-05 +412.5014 7.9977E-05 +412.5022 7.9977E-05 +412.5029 7.9977E-05 +412.5036 7.9977E-05 +412.5043 7.9977E-05 +412.5050 7.9977E-05 +412.5102 7.9976E-05 +412.5204 7.9976E-05 +412.5409 7.9975E-05 +412.5818 7.9973E-05 +413.5000 7.9926E-05 +413.5010 7.9926E-05 +414.5820 7.9872E-05 +414.5823 7.9872E-05 +414.5827 7.9872E-05 +414.5830 7.9872E-05 +414.5837 7.9872E-05 +414.5844 7.9872E-05 +414.5852 7.9872E-05 +414.5859 7.9872E-05 +414.5866 7.9871E-05 +414.5873 7.9871E-05 +414.5880 7.9871E-05 +414.5932 7.9871E-05 +414.6034 7.9871E-05 +414.6239 7.9870E-05 +414.6648 7.9868E-05 +415.5250 7.9824E-05 +415.5830 7.9821E-05 +415.5840 7.9821E-05 +416.6620 7.9767E-05 +416.6623 7.9767E-05 +416.6627 7.9767E-05 +416.6630 7.9767E-05 +416.6637 7.9767E-05 +416.6644 7.9767E-05 +416.6652 7.9767E-05 +416.6659 7.9766E-05 +416.6666 7.9766E-05 +416.6673 7.9766E-05 +416.6680 7.9766E-05 +416.6732 7.9766E-05 +416.6834 7.9766E-05 +416.7039 7.9765E-05 +416.7448 7.9762E-05 +417.6630 7.9716E-05 +417.6640 7.9716E-05 +418.7490 7.9661E-05 +418.7493 7.9661E-05 +418.7497 7.9661E-05 +418.7500 7.9661E-05 +418.7507 7.9661E-05 +418.7514 7.9661E-05 +418.7522 7.9661E-05 +418.7529 7.9661E-05 +418.7536 7.9661E-05 +418.7543 7.9661E-05 +418.7550 7.9661E-05 +418.7602 7.9661E-05 +418.7704 7.9660E-05 +418.7909 7.9659E-05 +418.8318 7.9657E-05 +419.7500 7.9611E-05 +419.7510 7.9611E-05 +420.8320 7.9556E-05 +420.8323 7.9556E-05 +420.8327 7.9556E-05 +420.8330 7.9556E-05 +420.8337 7.9556E-05 +420.8344 7.9556E-05 +420.8352 7.9556E-05 +420.8359 7.9556E-05 +420.8366 7.9556E-05 +420.8373 7.9556E-05 +420.8380 7.9556E-05 +420.8432 7.9556E-05 +420.8534 7.9555E-05 +420.8739 7.9554E-05 +420.9148 7.9552E-05 +421.8280 7.9506E-05 +421.8330 7.9506E-05 +421.8340 7.9506E-05 +422.9120 7.9452E-05 +422.9123 7.9452E-05 +422.9127 7.9452E-05 +422.9130 7.9452E-05 +422.9137 7.9452E-05 +422.9144 7.9452E-05 +422.9152 7.9452E-05 +422.9159 7.9452E-05 +422.9166 7.9452E-05 +422.9173 7.9452E-05 +422.9180 7.9451E-05 +422.9232 7.9451E-05 +422.9334 7.9451E-05 +422.9539 7.9450E-05 +422.9948 7.9448E-05 +423.9130 7.9401E-05 +423.9140 7.9401E-05 +424.9990 7.9347E-05 +424.9993 7.9347E-05 +424.9997 7.9347E-05 +425.0000 7.9347E-05 +425.0007 7.9347E-05 +425.0014 7.9347E-05 +425.0022 7.9347E-05 +425.0029 7.9347E-05 +425.0036 7.9347E-05 +425.0043 7.9347E-05 +425.0050 7.9347E-05 +425.0102 7.9346E-05 +425.0204 7.9346E-05 +425.0409 7.9345E-05 +425.0818 7.9343E-05 +426.0000 7.9297E-05 +426.0010 7.9297E-05 +427.0820 7.9242E-05 +427.0823 7.9242E-05 +427.0827 7.9242E-05 +427.0830 7.9242E-05 +427.0837 7.9242E-05 +427.0844 7.9242E-05 +427.0852 7.9242E-05 +427.0859 7.9242E-05 +427.0866 7.9242E-05 +427.0873 7.9242E-05 +427.0880 7.9242E-05 +427.0932 7.9242E-05 +427.1034 7.9241E-05 +427.1239 7.9240E-05 +427.1648 7.9238E-05 +428.0830 7.9192E-05 +428.0840 7.9192E-05 +428.0841 7.9192E-05 +429.1620 7.9138E-05 +429.1623 7.9138E-05 +429.1627 7.9138E-05 +429.1630 7.9138E-05 +429.1637 7.9138E-05 +429.1644 7.9138E-05 +429.1652 7.9138E-05 +429.1659 7.9138E-05 +429.1666 7.9138E-05 +429.1673 7.9138E-05 +429.1680 7.9138E-05 +429.1732 7.9137E-05 +429.1834 7.9137E-05 +429.2039 7.9136E-05 +429.2448 7.9134E-05 +430.1630 7.9088E-05 +430.1640 7.9088E-05 +431.2490 7.9033E-05 +431.2493 7.9033E-05 +431.2497 7.9033E-05 +431.2500 7.9033E-05 +431.2507 7.9033E-05 +431.2514 7.9033E-05 +431.2522 7.9033E-05 +431.2529 7.9033E-05 +431.2536 7.9033E-05 +431.2543 7.9033E-05 +431.2550 7.9033E-05 +431.2602 7.9033E-05 +431.2704 7.9032E-05 +431.2909 7.9031E-05 +431.3318 7.9029E-05 +432.2500 7.8983E-05 +432.2510 7.8983E-05 +433.3320 7.8929E-05 +433.3323 7.8929E-05 +433.3327 7.8929E-05 +433.3330 7.8929E-05 +433.3337 7.8929E-05 +433.3344 7.8929E-05 +433.3352 7.8929E-05 +433.3359 7.8929E-05 +433.3366 7.8929E-05 +433.3373 7.8929E-05 +433.3380 7.8929E-05 +433.3432 7.8929E-05 +433.3534 7.8928E-05 +433.3739 7.8927E-05 +433.4148 7.8925E-05 +434.3330 7.8879E-05 +434.3340 7.8879E-05 +434.4158 7.8875E-05 +435.4120 7.8825E-05 +435.4123 7.8825E-05 +435.4127 7.8825E-05 +435.4130 7.8825E-05 +435.4137 7.8825E-05 +435.4144 7.8825E-05 +435.4152 7.8825E-05 +435.4159 7.8825E-05 +435.4166 7.8825E-05 +435.4173 7.8825E-05 +435.4180 7.8825E-05 +435.4232 7.8825E-05 +435.4334 7.8824E-05 +435.4539 7.8823E-05 +435.4948 7.8821E-05 +436.4130 7.8775E-05 +436.4140 7.8775E-05 +437.4990 7.8721E-05 +437.4993 7.8721E-05 +437.4997 7.8721E-05 +437.5000 7.8721E-05 +437.5007 7.8721E-05 +437.5014 7.8721E-05 +437.5022 7.8721E-05 +437.5029 7.8721E-05 +437.5036 7.8721E-05 +437.5043 7.8721E-05 +437.5050 7.8721E-05 +437.5102 7.8721E-05 +437.5204 7.8720E-05 +437.5409 7.8719E-05 +437.5818 7.8717E-05 +438.5000 7.8671E-05 +438.5010 7.8671E-05 +439.5820 7.8617E-05 +439.5823 7.8617E-05 +439.5827 7.8617E-05 +439.5830 7.8617E-05 +439.5837 7.8617E-05 +439.5844 7.8617E-05 +439.5852 7.8617E-05 +439.5859 7.8617E-05 +439.5866 7.8617E-05 +439.5873 7.8617E-05 +439.5880 7.8617E-05 +439.5932 7.8617E-05 +439.6034 7.8616E-05 +439.6239 7.8615E-05 +439.6648 7.8613E-05 +440.5830 7.8567E-05 +440.5840 7.8567E-05 +441.3023 7.8532E-05 +441.6620 7.8514E-05 +441.6623 7.8514E-05 +441.6627 7.8514E-05 +441.6630 7.8514E-05 +441.6637 7.8514E-05 +441.6644 7.8514E-05 +441.6652 7.8514E-05 +441.6659 7.8514E-05 +441.6666 7.8514E-05 +441.6673 7.8514E-05 +441.6680 7.8513E-05 +441.6732 7.8513E-05 +441.6834 7.8513E-05 +441.7039 7.8512E-05 +441.7448 7.8510E-05 +442.6630 7.8464E-05 +442.6640 7.8464E-05 +443.7490 7.8410E-05 +443.7493 7.8410E-05 +443.7497 7.8410E-05 +443.7500 7.8410E-05 +443.7507 7.8410E-05 +443.7514 7.8410E-05 +443.7522 7.8410E-05 +443.7529 7.8410E-05 +443.7536 7.8410E-05 +443.7543 7.8410E-05 +443.7550 7.8410E-05 +443.7602 7.8409E-05 +443.7704 7.8409E-05 +443.7909 7.8408E-05 +443.8318 7.8406E-05 +444.7500 7.8360E-05 +444.7510 7.8360E-05 +445.8320 7.8307E-05 +445.8323 7.8307E-05 +445.8327 7.8307E-05 +445.8330 7.8306E-05 +445.8337 7.8306E-05 +445.8344 7.8306E-05 +445.8352 7.8306E-05 +445.8359 7.8306E-05 +445.8366 7.8306E-05 +445.8373 7.8306E-05 +445.8380 7.8306E-05 +445.8432 7.8306E-05 +445.8534 7.8305E-05 +445.8739 7.8304E-05 +445.9148 7.8302E-05 +446.8330 7.8257E-05 +446.8340 7.8257E-05 +447.8480 7.8207E-05 +447.9120 7.8203E-05 +447.9123 7.8203E-05 +447.9127 7.8203E-05 +447.9130 7.8203E-05 +447.9137 7.8203E-05 +447.9144 7.8203E-05 +447.9152 7.8203E-05 +447.9159 7.8203E-05 +447.9166 7.8203E-05 +447.9173 7.8203E-05 +447.9180 7.8203E-05 +447.9232 7.8203E-05 +447.9334 7.8202E-05 +447.9539 7.8201E-05 +447.9948 7.8199E-05 +448.9130 7.8154E-05 +448.9140 7.8154E-05 +449.9990 7.8100E-05 +449.9993 7.8100E-05 +449.9997 7.8100E-05 +450.0000 7.8100E-05 +450.0007 7.8100E-05 +450.0014 7.8100E-05 +450.0022 7.8100E-05 +450.0029 7.8100E-05 +450.0036 7.8100E-05 +450.0043 7.8100E-05 +450.0050 7.8100E-05 +450.0102 7.8099E-05 +450.0204 7.8099E-05 +450.0409 7.8098E-05 +450.0818 7.8096E-05 +451.0000 7.8050E-05 +451.0010 7.8050E-05 +452.0820 7.7997E-05 +452.0823 7.7997E-05 +452.0827 7.7997E-05 +452.0830 7.7997E-05 +452.0837 7.7997E-05 +452.0844 7.7997E-05 +452.0852 7.7997E-05 +452.0859 7.7997E-05 +452.0866 7.7997E-05 +452.0873 7.7997E-05 +452.0880 7.7997E-05 +452.0932 7.7996E-05 +452.1034 7.7996E-05 +452.1239 7.7995E-05 +452.1648 7.7993E-05 +453.0830 7.7947E-05 +453.0840 7.7947E-05 +454.1440 7.7895E-05 +454.1620 7.7894E-05 +454.1623 7.7894E-05 +454.1627 7.7894E-05 +454.1630 7.7894E-05 +454.1637 7.7894E-05 +454.1644 7.7894E-05 +454.1652 7.7894E-05 +454.1659 7.7894E-05 +454.1666 7.7894E-05 +454.1673 7.7894E-05 +454.1680 7.7894E-05 +454.1732 7.7893E-05 +454.1834 7.7893E-05 +454.2039 7.7892E-05 +454.2448 7.7890E-05 +455.1630 7.7845E-05 +455.1640 7.7845E-05 +456.2490 7.7791E-05 +456.2493 7.7791E-05 +456.2497 7.7791E-05 +456.2500 7.7791E-05 +456.2507 7.7791E-05 +456.2514 7.7791E-05 +456.2522 7.7791E-05 +456.2529 7.7791E-05 +456.2536 7.7791E-05 +456.2543 7.7791E-05 +456.2550 7.7791E-05 +456.2602 7.7790E-05 +456.2704 7.7790E-05 +456.2909 7.7789E-05 +456.3318 7.7787E-05 +457.2500 7.7742E-05 +457.2510 7.7742E-05 +458.3320 7.7688E-05 +458.3323 7.7688E-05 +458.3327 7.7688E-05 +458.3330 7.7688E-05 +458.3337 7.7688E-05 +458.3344 7.7688E-05 +458.3352 7.7688E-05 +458.3359 7.7688E-05 +458.3366 7.7688E-05 +458.3373 7.7688E-05 +458.3380 7.7688E-05 +458.3432 7.7688E-05 +458.3534 7.7687E-05 +458.3739 7.7686E-05 +458.4148 7.7684E-05 +459.3330 7.7639E-05 +459.3340 7.7639E-05 +460.4120 7.7586E-05 +460.4123 7.7586E-05 +460.4127 7.7586E-05 +460.4130 7.7586E-05 +460.4137 7.7586E-05 +460.4144 7.7586E-05 +460.4152 7.7586E-05 +460.4159 7.7586E-05 +460.4166 7.7586E-05 +460.4173 7.7586E-05 +460.4180 7.7585E-05 +460.4232 7.7585E-05 +460.4334 7.7585E-05 +460.4539 7.7584E-05 +460.4948 7.7582E-05 +461.4130 7.7536E-05 +461.4140 7.7536E-05 +462.4990 7.7483E-05 +462.4993 7.7483E-05 +462.4997 7.7483E-05 +462.5000 7.7483E-05 +462.5007 7.7483E-05 +462.5014 7.7483E-05 +462.5022 7.7483E-05 +462.5029 7.7483E-05 +462.5036 7.7483E-05 +462.5043 7.7483E-05 +462.5050 7.7483E-05 +462.5102 7.7483E-05 +462.5204 7.7482E-05 +462.5409 7.7481E-05 +462.5818 7.7479E-05 +463.5000 7.7434E-05 +463.5010 7.7434E-05 +464.5820 7.7381E-05 +464.5823 7.7381E-05 +464.5827 7.7381E-05 +464.5830 7.7381E-05 +464.5837 7.7381E-05 +464.5844 7.7381E-05 +464.5852 7.7381E-05 +464.5859 7.7381E-05 +464.5866 7.7380E-05 +464.5873 7.7380E-05 +464.5880 7.7380E-05 +464.5932 7.7380E-05 +464.6034 7.7380E-05 +464.6239 7.7379E-05 +464.6648 7.7377E-05 +465.5830 7.7332E-05 +465.5840 7.7332E-05 +466.6620 7.7279E-05 +466.6623 7.7279E-05 +466.6627 7.7279E-05 +466.6630 7.7279E-05 +466.6642 7.7279E-05 +466.6655 7.7278E-05 +466.6680 7.7278E-05 +466.6732 7.7278E-05 +466.6834 7.7278E-05 +466.7039 7.7277E-05 +466.7448 7.7275E-05 +467.6630 7.7230E-05 +467.6640 7.7229E-05 +468.7490 7.7176E-05 +468.7493 7.7176E-05 +468.7497 7.7176E-05 +468.7500 7.7176E-05 +468.7507 7.7176E-05 +468.7514 7.7176E-05 +468.7522 7.7176E-05 +468.7529 7.7176E-05 +468.7536 7.7176E-05 +468.7543 7.7176E-05 +468.7550 7.7176E-05 +468.7602 7.7176E-05 +468.7704 7.7175E-05 +468.7909 7.7174E-05 +468.8318 7.7172E-05 +469.7500 7.7127E-05 +469.7510 7.7127E-05 +470.8320 7.7074E-05 +470.8323 7.7074E-05 +470.8327 7.7074E-05 +470.8330 7.7074E-05 +470.8337 7.7074E-05 +470.8344 7.7074E-05 +470.8352 7.7074E-05 +470.8359 7.7074E-05 +470.8366 7.7074E-05 +470.8373 7.7074E-05 +470.8380 7.7074E-05 +470.8432 7.7074E-05 +470.8534 7.7073E-05 +470.8739 7.7072E-05 +470.9148 7.7070E-05 +471.8330 7.7025E-05 +471.8340 7.7025E-05 +472.9120 7.6973E-05 +472.9123 7.6973E-05 +472.9127 7.6973E-05 +472.9130 7.6973E-05 +472.9137 7.6972E-05 +472.9144 7.6972E-05 +472.9152 7.6972E-05 +472.9159 7.6972E-05 +472.9166 7.6972E-05 +472.9173 7.6972E-05 +472.9180 7.6972E-05 +472.9232 7.6972E-05 +472.9334 7.6972E-05 +472.9539 7.6971E-05 +472.9948 7.6969E-05 +473.5693 7.6940E-05 +473.9130 7.6924E-05 +473.9140 7.6924E-05 +474.9990 7.6871E-05 +474.9993 7.6871E-05 +474.9997 7.6871E-05 +475.0000 7.6871E-05 +475.0007 7.6871E-05 +475.0014 7.6870E-05 +475.0022 7.6870E-05 +475.0029 7.6870E-05 +475.0036 7.6870E-05 +475.0043 7.6870E-05 +475.0050 7.6870E-05 +475.0102 7.6870E-05 +475.0204 7.6870E-05 +475.0409 7.6869E-05 +475.0818 7.6867E-05 +476.0000 7.6822E-05 +476.0010 7.6822E-05 +477.0820 7.6769E-05 +477.0821 7.6769E-05 +477.0823 7.6769E-05 +477.0827 7.6769E-05 +477.0830 7.6769E-05 +477.0837 7.6769E-05 +477.0844 7.6769E-05 +477.0852 7.6769E-05 +477.0859 7.6769E-05 +477.0866 7.6769E-05 +477.0873 7.6769E-05 +477.0880 7.6769E-05 +477.0932 7.6768E-05 +477.1034 7.6768E-05 +477.1239 7.6767E-05 +477.1648 7.6765E-05 +478.0830 7.6720E-05 +478.0840 7.6720E-05 +479.1620 7.6668E-05 +479.1623 7.6668E-05 +479.1627 7.6668E-05 +479.1630 7.6668E-05 +479.1637 7.6667E-05 +479.1644 7.6667E-05 +479.1652 7.6667E-05 +479.1659 7.6667E-05 +479.1666 7.6667E-05 +479.1673 7.6667E-05 +479.1680 7.6667E-05 +479.1732 7.6667E-05 +479.1834 7.6667E-05 +479.2039 7.6666E-05 +479.2448 7.6664E-05 +480.0380 7.6625E-05 +480.1630 7.6619E-05 +480.1640 7.6619E-05 +481.2490 7.6566E-05 +481.2493 7.6566E-05 +481.2497 7.6566E-05 +481.2500 7.6566E-05 +481.2507 7.6566E-05 +481.2514 7.6566E-05 +481.2522 7.6566E-05 +481.2529 7.6566E-05 +481.2536 7.6566E-05 +481.2543 7.6566E-05 +481.2550 7.6566E-05 +481.2602 7.6565E-05 +481.2704 7.6565E-05 +481.2909 7.6564E-05 +481.3318 7.6562E-05 +482.2500 7.6517E-05 +482.2510 7.6517E-05 +483.3320 7.6465E-05 +483.3323 7.6465E-05 +483.3327 7.6465E-05 +483.3330 7.6465E-05 +483.3337 7.6465E-05 +483.3344 7.6465E-05 +483.3352 7.6465E-05 +483.3359 7.6465E-05 +483.3366 7.6464E-05 +483.3373 7.6464E-05 +483.3380 7.6464E-05 +483.3432 7.6464E-05 +483.3534 7.6464E-05 +483.3739 7.6463E-05 +483.4148 7.6461E-05 +484.3330 7.6416E-05 +484.3340 7.6416E-05 +485.4120 7.6364E-05 +485.4121 7.6364E-05 +485.4123 7.6364E-05 +485.4127 7.6364E-05 +485.4130 7.6364E-05 +485.4137 7.6364E-05 +485.4144 7.6364E-05 +485.4152 7.6364E-05 +485.4159 7.6363E-05 +485.4166 7.6363E-05 +485.4173 7.6363E-05 +485.4180 7.6363E-05 +485.4232 7.6363E-05 +485.4334 7.6363E-05 +485.4539 7.6362E-05 +485.4948 7.6360E-05 +486.3790 7.6317E-05 +486.4130 7.6315E-05 +486.4140 7.6315E-05 +487.4990 7.6262E-05 +487.4991 7.6262E-05 +487.4993 7.6262E-05 +487.4997 7.6262E-05 +487.5000 7.6262E-05 +487.5007 7.6262E-05 +487.5014 7.6262E-05 +487.5022 7.6262E-05 +487.5029 7.6262E-05 +487.5036 7.6262E-05 +487.5043 7.6262E-05 +487.5050 7.6262E-05 +487.5102 7.6262E-05 +487.5204 7.6261E-05 +487.5409 7.6260E-05 +487.5818 7.6258E-05 +488.5000 7.6214E-05 +488.5010 7.6214E-05 +489.5810 7.6162E-05 +489.5820 7.6162E-05 diff --git a/CRVResponse/inc/MakeCrvSiPMCharges.hh b/CRVResponse/inc/MakeCrvSiPMCharges.hh index f37472cbd2..b7ffa5d5fc 100644 --- a/CRVResponse/inc/MakeCrvSiPMCharges.hh +++ b/CRVResponse/inc/MakeCrvSiPMCharges.hh @@ -1,115 +1,115 @@ -/* -Author: Ralf Ehrlich -Based on Paul Rubinov's C# code -*/ - -#ifndef MakeCrvSiPMCharges_hh -#define MakeCrvSiPMCharges_hh - -#include -#include -#include -#include -#include -#include "CLHEP/Random/Randomize.h" - -#include -#include - -namespace mu2eCrv -{ - - struct Pixel - { - bool _discharged; - double _t; //time of last discharge (if _discharged is true), or NAN (if _discharged is false) - Pixel() : _discharged(false), _t(NAN) {} - }; - - struct SiPMresponse - { - double _time; - double _charge; //in C - double _chargeInPEs; //in PEs - size_t _photonIndex; //index in the original photon vector - bool _darkNoise; - SiPMresponse(double time, double charge, double chargeInPEs, size_t photonIndex, bool darkNoise) : - _time(time), _charge(charge), _chargeInPEs(chargeInPEs), _photonIndex(photonIndex), _darkNoise(darkNoise) {} - }; - - struct ScheduledCharge - { - std::pair _pixelId; - double _time; - size_t _photonIndex; //index in the original photon vector - bool _darkNoise; //this charge is dark noise and was not created by an "outside photon" - ScheduledCharge(const std::pair &pixelId, double time, size_t photonIndex, bool darkNoise) : - _pixelId(pixelId), _time(time), _photonIndex(photonIndex), _darkNoise(darkNoise) {} - bool operator<(const ScheduledCharge &r) const - { - return _time < r._time; - }; - private: - ScheduledCharge(); - }; - - class MakeCrvSiPMCharges - { - int _nPixelsX; - int _nPixelsY; - double _overvoltage; //in V (operating overvoltage = bias voltage - breakdown voltage) - double _timeConstant; //in ns - double _capacitance; //in F - - public: - struct ProbabilitiesStruct - { - double _avalancheProbParam1; - double _avalancheProbParam2; - double _trapType0Prob; - double _trapType1Prob; - double _trapType0Lifetime; - double _trapType1Lifetime; - double _thermalRate; //in ns^-1 - double _crossTalkProb; - }; - - private: - ProbabilitiesStruct _probabilities; - std::vector > _inactivePixels; - - std::map,Pixel> _pixels; - std::multiset _scheduledCharges; - - std::vector > FindCrossTalkPixelIds(const std::pair &pixelId); - std::pair FindThermalNoisePixelId(); - std::pair FindFiberPhotonsPixelId(); - bool IsInactivePixelId(const std::pair &pixelId); - - double GetAvalancheProbability(double v); - double GenerateAvalanche(Pixel &pixel, const std::pair &pixelId, double time, size_t photonIndex, bool darkNoise); - double GetVoltage(const Pixel &pixel, double time); - void FillQueue(const std::vector > &photons, double startTime, double endTime); - - CLHEP::RandFlat &_randFlat; - CLHEP::RandPoissonQ &_randPoissonQ; - double _avalancheProbFullyChargedPixel; - - TFile *_photonMapFile; - TH2F *_photonMap; - - public: - - MakeCrvSiPMCharges(CLHEP::RandFlat &randFlat, CLHEP::RandPoissonQ &randPoissonQ, const std::string &photonMapFileName); - ~MakeCrvSiPMCharges() {_photonMapFile->Close();} - - void SetSiPMConstants(int nPixelsX, int nPixelsY, double overvoltage, double timeConstant, - double capacitance, ProbabilitiesStruct probabilities, - const std::vector > &inactivePixels); - void Simulate(const std::vector > &photons, - std::vector &SiPMresponseVector, double startTime, double endTime); - }; - -} - -#endif +/* +Author: Ralf Ehrlich +Based on Paul Rubinov's C# code +*/ + +#ifndef MakeCrvSiPMCharges_hh +#define MakeCrvSiPMCharges_hh + +#include +#include +#include +#include +#include +#include "CLHEP/Random/Randomize.h" + +#include +#include + +namespace mu2eCrv +{ + + struct Pixel + { + bool _discharged; + double _t; //time of last discharge (if _discharged is true), or NAN (if _discharged is false) + Pixel() : _discharged(false), _t(NAN) {} + }; + + struct SiPMresponse + { + double _time; + double _charge; //in C + double _chargeInPEs; //in PEs + size_t _photonIndex; //index in the original photon vector + bool _darkNoise; + SiPMresponse(double time, double charge, double chargeInPEs, size_t photonIndex, bool darkNoise) : + _time(time), _charge(charge), _chargeInPEs(chargeInPEs), _photonIndex(photonIndex), _darkNoise(darkNoise) {} + }; + + struct ScheduledCharge + { + std::pair _pixelId; + double _time; + size_t _photonIndex; //index in the original photon vector + bool _darkNoise; //this charge is dark noise and was not created by an "outside photon" + ScheduledCharge(const std::pair &pixelId, double time, size_t photonIndex, bool darkNoise) : + _pixelId(pixelId), _time(time), _photonIndex(photonIndex), _darkNoise(darkNoise) {} + bool operator<(const ScheduledCharge &r) const + { + return _time < r._time; + }; + private: + ScheduledCharge(); + }; + + class MakeCrvSiPMCharges + { + int _nPixelsX; + int _nPixelsY; + double _overvoltage; //in V (operating overvoltage = bias voltage - breakdown voltage) + double _timeConstant; //in ns + double _capacitance; //in F + + public: + struct ProbabilitiesStruct + { + double _avalancheProbParam1; + double _avalancheProbParam2; + double _trapType0Prob; + double _trapType1Prob; + double _trapType0Lifetime; + double _trapType1Lifetime; + double _thermalRate; //in ns^-1 + double _crossTalkProb; + }; + + private: + ProbabilitiesStruct _probabilities; + std::vector > _inactivePixels; + + std::map,Pixel> _pixels; + std::multiset _scheduledCharges; + + std::vector > FindCrossTalkPixelIds(const std::pair &pixelId); + std::pair FindThermalNoisePixelId(); + std::pair FindFiberPhotonsPixelId(); + bool IsInactivePixelId(const std::pair &pixelId); + + double GetAvalancheProbability(double v); + double GenerateAvalanche(Pixel &pixel, const std::pair &pixelId, double time, size_t photonIndex, bool darkNoise); + double GetVoltage(const Pixel &pixel, double time); + void FillQueue(const std::vector > &photons, double startTime, double endTime); + + CLHEP::RandFlat &_randFlat; + CLHEP::RandPoissonQ &_randPoissonQ; + double _avalancheProbFullyChargedPixel; + + TFile *_photonMapFile; + TH2F *_photonMap; + + public: + + MakeCrvSiPMCharges(CLHEP::RandFlat &randFlat, CLHEP::RandPoissonQ &randPoissonQ, const std::string &photonMapFileName); + ~MakeCrvSiPMCharges() {_photonMapFile->Close();} + + void SetSiPMConstants(int nPixelsX, int nPixelsY, double overvoltage, double timeConstant, + double capacitance, ProbabilitiesStruct probabilities, + const std::vector > &inactivePixels); + void Simulate(const std::vector > &photons, + std::vector &SiPMresponseVector, double startTime, double endTime); + }; + +} + +#endif diff --git a/CRVResponse/src/MakeCrvSiPMCharges.cc b/CRVResponse/src/MakeCrvSiPMCharges.cc index 917924d0a9..0cc1643d07 100644 --- a/CRVResponse/src/MakeCrvSiPMCharges.cc +++ b/CRVResponse/src/MakeCrvSiPMCharges.cc @@ -1,263 +1,263 @@ -/* -Author: Ralf Ehrlich -Based on Paul Rubinov's C# code -*/ - -#include "Offline/CRVResponse/inc/MakeCrvSiPMCharges.hh" - -#include -#include -#include - -//photon map gets created from the CRVPhoton.root file, which can be generated with the standalone program (in WLSSteppingAction) -//in ROOT: CRVPhotons->Draw("x/0.05+20:(fabs(y)-13)/0.05+20>>photonMap(40,0,40,40,0,40)","","COLZ") - -//to get standalone version: compile with -//g++ MakeCrvSiPMCharges.cc -std=c++11 -I../../ -I$CLHEP_INCLUDE_DIR -L$CLHEP_LIB_DIR -lCLHEP -DSiPMChargesStandalone `root-config --cflags --glibs` - -namespace mu2eCrv -{ - -double MakeCrvSiPMCharges::GetAvalancheProbability(double v) -{ - double avalancheProbability = _probabilities._avalancheProbParam1*(1 - exp(-v/_probabilities._avalancheProbParam2)); - return avalancheProbability; -} - -std::vector > MakeCrvSiPMCharges::FindCrossTalkPixelIds(const std::pair &pixelId) -{ - std::vector > toReturn; - if(pixelId.first>0) toReturn.push_back(std::pair(pixelId.first-1,pixelId.second)); - if(pixelId.first+1<_nPixelsX) toReturn.push_back(std::pair(pixelId.first+1,pixelId.second)); - if(pixelId.second>0) toReturn.push_back(std::pair(pixelId.first, pixelId.second-1)); - if(pixelId.second+1<_nPixelsY) toReturn.push_back(std::pair(pixelId.first, pixelId.second+1)); - return toReturn; -} - -std::pair MakeCrvSiPMCharges::FindThermalNoisePixelId() -{ - int x=_randFlat.fire(_nPixelsX); - int y=_randFlat.fire(_nPixelsY); - return std::pair(x,y); -} - -std::pair MakeCrvSiPMCharges::FindFiberPhotonsPixelId() -{ - double x,y; - _photonMap->GetRandom2(x,y); - return std::pair(x,y); -} - -bool MakeCrvSiPMCharges::IsInactivePixelId(const std::pair &pixelId) -{ - for(size_t i=0; i<_inactivePixels.size(); i++) - { - if(pixelId==_inactivePixels[i]) return true; - } - return false; -} - -double MakeCrvSiPMCharges::GenerateAvalanche(Pixel &pixel, const std::pair &pixelId, double time, size_t photonIndex, bool darkNoise) -{ - double v = GetVoltage(pixel,time); - - if(_randFlat.fire() < GetAvalancheProbability(v)) - { - //after pulses - //for simplicity, it is assumed that all pixels are fully charged - //the _trapType0Prob and _trapType1Prob are measured probabilities (from the Hamamatsu specs), however the actually production probabilities are higher, but are reduced by the avalanche probability - //(measured probability = production probability * avalanche probability) - //the production probabilities are needed here - if(_randFlat.fire() < _probabilities._trapType0Prob/_avalancheProbFullyChargedPixel) - { - //create new Type0 trap (fast) - double traptime = -_probabilities._trapType0Lifetime * log10(_randFlat.fire()); - _scheduledCharges.emplace(pixelId,time + traptime,photonIndex,darkNoise); - } - - if(_randFlat.fire() < _probabilities._trapType1Prob/_avalancheProbFullyChargedPixel) - { - //create new Type1 trap (slow) - double traptime = -_probabilities._trapType1Lifetime * log10(_randFlat.fire()); - _scheduledCharges.emplace(pixelId,time + traptime,photonIndex,darkNoise); - } - - //cross talk can happen in all 4 neighboring pixels (distribute photons there for possible avalanches) - //for simplicity, it is assumed that all pixels are fully charged - std::vector > crossTalkPixelIds = FindCrossTalkPixelIds(pixelId); - double probabilityNoCrossTalk = 1.0-_probabilities._crossTalkProb; //prob that cross talk does not occur = 1 - prob that cross talk occurs - double probabilityNoCrossTalkSinglePixel = pow(probabilityNoCrossTalk,1.0/4.0); //prob that cross talk does not occur at any of the 4 neighboring pixels - //=pow(prob that cross talk does not occur at a pixel,4) - double crossTalkProbabilitySinglePixel = 1.0-probabilityNoCrossTalkSinglePixel; - - //the crossTalkProbabilitySinglePixel is the measured probability (based on the _crossTalkProb from the Hamamatsu specs), - //however the actually production probability is higher, but is reduced by the avalanche probability - //(measured probability = production probability * avalanche probability) - //the production probability is needed here - crossTalkProbabilitySinglePixel /= _avalancheProbFullyChargedPixel; - for(size_t i=0; i > &inactivePixels) -{ - _nPixelsX = nPixelsX; - _nPixelsY = nPixelsY; - _overvoltage = overvoltage; //operating overvoltage = bias voltage - breakdown voltage - _timeConstant = timeConstant; - _capacitance = capacitance; //capacitance per pixel - _probabilities = probabilities; - _inactivePixels = inactivePixels; - - _avalancheProbFullyChargedPixel = GetAvalancheProbability(overvoltage); -} - -void MakeCrvSiPMCharges::FillQueue(const std::vector > &photons, double startTime, double endTime) -{ -//schedule charges caused by the CRV counter photons - for(size_t i=0; i pixelId = FindFiberPhotonsPixelId(); //only pixels at fiber - _scheduledCharges.emplace(pixelId, photons[i].first, photons[i].second, false); - } - -//schedule random thermal charges - double timeWindow = endTime-startTime; - - //for the dark noise simulation, it is assumed that all pixels are fully charged (for simplicity) - - //the actual thermal production rate gets scaled down by the avalanche probability, - //i.e. only a fraction of the thermaly created charges lead to a dark noise pulse - //thermal production rate * avalanche probability = thermal rate - double thermalProductionRate = _probabilities._thermalRate/_avalancheProbFullyChargedPixel; - - //average number of thermaly created charges is thermalProductionRate*timeWindow - int numberThermalCharges = _randPoissonQ.fire(thermalProductionRate * timeWindow); - for(int i=0; i pixelId = FindThermalNoisePixelId(); //all pixels - double time = startTime + timeWindow * _randFlat.fire(); - _scheduledCharges.emplace(pixelId, time, 0, true); - } -} - -void MakeCrvSiPMCharges::Simulate(const std::vector > &photons, //pair of photon time and index in the original photon vector - std::vector &SiPMresponseVector, double startTime, double endTime) -{ - _pixels.clear(); - _scheduledCharges.clear(); - FillQueue(photons, startTime, endTime); - - while(1) - { - std::multiset::iterator currentCharge = _scheduledCharges.begin(); - if(currentCharge==_scheduledCharges.end()) break; //no more scheduled charges - - std::pair pixelId = currentCharge->_pixelId; - double time = currentCharge->_time; - size_t photonIndex = currentCharge->_photonIndex; - bool darkNoise = currentCharge->_darkNoise; - _scheduledCharges.erase(currentCharge); - - if(IsInactivePixelId(pixelId)) continue; - - if(time>endTime) continue; //this is relevant for afterpulses - - //find pixel with pixelId, create a fully charged pixel if it doesn't exist - std::map,Pixel>::iterator p = _pixels.find(pixelId); - if(p==_pixels.end()) p=_pixels.emplace(pixelId, Pixel()).first; - // .first returns the iterator to the new pixel - - Pixel &pixel = p->second; - double outputCharge = GenerateAvalanche(pixel, pixelId, time, photonIndex, darkNoise); //the output charge (in Coulomb) of the pixel due to the avalanche - double outputChargeInPEs = (outputCharge/_capacitance)/_overvoltage; //the output charge in units of single PEs of a fully charges pixel - - if(outputCharge>0) SiPMresponseVector.emplace_back(time, outputCharge, outputChargeInPEs, photonIndex, darkNoise); - } //while(1) -} - -MakeCrvSiPMCharges::MakeCrvSiPMCharges(CLHEP::RandFlat &randFlat, CLHEP::RandPoissonQ &randPoissonQ, const std::string &photonMapFileName) : - _randFlat(randFlat), _randPoissonQ(randPoissonQ), _avalancheProbFullyChargedPixel(0) -{ - _photonMapFile = new TFile(photonMapFileName.c_str()); - if(_photonMapFile==NULL) throw std::logic_error("Could not open photon map file."); - _photonMap = (TH2F*)_photonMapFile->FindObjectAny("photonMap"); - if(_photonMap==NULL) throw std::logic_error("Could not find photon map."); -} - -} - -//sample program - -#ifdef SiPMChargesStandalone -int main() -{ - std::vector > photonTimes; - photonTimes.emplace_back(650,0); - photonTimes.emplace_back(620,1); - for(int i=0; i<100; i++) photonTimes.emplace_back(630,i+2); - for(int i=0; i<100; i++) photonTimes.emplace_back(623,i+102); - photonTimes.emplace_back(656,202); - photonTimes.emplace_back(612,203); - std::vector SiPMresponseVector; - - mu2eCrv::MakeCrvSiPMCharges::ProbabilitiesStruct probabilities; - probabilities._avalancheProbParam1 = 0.65; - probabilities._avalancheProbParam2 = 2.7; - probabilities._trapType0Prob = 0.0; - probabilities._trapType1Prob = 0.0; - probabilities._trapType0Lifetime = 5; - probabilities._trapType1Lifetime = 50; - probabilities._thermalRate = 3.0e-4; - probabilities._crossTalkProb = 0.05; - - std::vector > inactivePixels = { {18,18}, {18,19}, {18,20}, {18,21}, - {19,18}, {19,19}, {19,20}, {19,21}, - {20,18}, {20,19}, {20,20}, {20,21}, - {21,18}, {21,19}, {21,20}, {21,21} }; - - CLHEP::HepJamesRandom engine(1); - CLHEP::RandFlat randFlat(engine); - CLHEP::RandPoissonQ randPoissonQ(engine); - mu2eCrv::MakeCrvSiPMCharges sim(randFlat,randPoissonQ,"/cvmfs/mu2e.opensciencegrid.org/DataFiles/CRVConditions/v6_0/photonMap.root"); - sim.SetSiPMConstants(40, 40, 3.0, 13.3, 8.84e-14, probabilities, inactivePixels); - - sim.Simulate(photonTimes, SiPMresponseVector, 500, 1695); - - for(unsigned int i=0; i +#include +#include + +//photon map gets created from the CRVPhoton.root file, which can be generated with the standalone program (in WLSSteppingAction) +//in ROOT: CRVPhotons->Draw("x/0.05+20:(fabs(y)-13)/0.05+20>>photonMap(40,0,40,40,0,40)","","COLZ") + +//to get standalone version: compile with +//g++ MakeCrvSiPMCharges.cc -std=c++11 -I../../ -I$CLHEP_INCLUDE_DIR -L$CLHEP_LIB_DIR -lCLHEP -DSiPMChargesStandalone `root-config --cflags --glibs` + +namespace mu2eCrv +{ + +double MakeCrvSiPMCharges::GetAvalancheProbability(double v) +{ + double avalancheProbability = _probabilities._avalancheProbParam1*(1 - exp(-v/_probabilities._avalancheProbParam2)); + return avalancheProbability; +} + +std::vector > MakeCrvSiPMCharges::FindCrossTalkPixelIds(const std::pair &pixelId) +{ + std::vector > toReturn; + if(pixelId.first>0) toReturn.push_back(std::pair(pixelId.first-1,pixelId.second)); + if(pixelId.first+1<_nPixelsX) toReturn.push_back(std::pair(pixelId.first+1,pixelId.second)); + if(pixelId.second>0) toReturn.push_back(std::pair(pixelId.first, pixelId.second-1)); + if(pixelId.second+1<_nPixelsY) toReturn.push_back(std::pair(pixelId.first, pixelId.second+1)); + return toReturn; +} + +std::pair MakeCrvSiPMCharges::FindThermalNoisePixelId() +{ + int x=_randFlat.fire(_nPixelsX); + int y=_randFlat.fire(_nPixelsY); + return std::pair(x,y); +} + +std::pair MakeCrvSiPMCharges::FindFiberPhotonsPixelId() +{ + double x,y; + _photonMap->GetRandom2(x,y); + return std::pair(x,y); +} + +bool MakeCrvSiPMCharges::IsInactivePixelId(const std::pair &pixelId) +{ + for(size_t i=0; i<_inactivePixels.size(); i++) + { + if(pixelId==_inactivePixels[i]) return true; + } + return false; +} + +double MakeCrvSiPMCharges::GenerateAvalanche(Pixel &pixel, const std::pair &pixelId, double time, size_t photonIndex, bool darkNoise) +{ + double v = GetVoltage(pixel,time); + + if(_randFlat.fire() < GetAvalancheProbability(v)) + { + //after pulses + //for simplicity, it is assumed that all pixels are fully charged + //the _trapType0Prob and _trapType1Prob are measured probabilities (from the Hamamatsu specs), however the actually production probabilities are higher, but are reduced by the avalanche probability + //(measured probability = production probability * avalanche probability) + //the production probabilities are needed here + if(_randFlat.fire() < _probabilities._trapType0Prob/_avalancheProbFullyChargedPixel) + { + //create new Type0 trap (fast) + double traptime = -_probabilities._trapType0Lifetime * log10(_randFlat.fire()); + _scheduledCharges.emplace(pixelId,time + traptime,photonIndex,darkNoise); + } + + if(_randFlat.fire() < _probabilities._trapType1Prob/_avalancheProbFullyChargedPixel) + { + //create new Type1 trap (slow) + double traptime = -_probabilities._trapType1Lifetime * log10(_randFlat.fire()); + _scheduledCharges.emplace(pixelId,time + traptime,photonIndex,darkNoise); + } + + //cross talk can happen in all 4 neighboring pixels (distribute photons there for possible avalanches) + //for simplicity, it is assumed that all pixels are fully charged + std::vector > crossTalkPixelIds = FindCrossTalkPixelIds(pixelId); + double probabilityNoCrossTalk = 1.0-_probabilities._crossTalkProb; //prob that cross talk does not occur = 1 - prob that cross talk occurs + double probabilityNoCrossTalkSinglePixel = pow(probabilityNoCrossTalk,1.0/4.0); //prob that cross talk does not occur at any of the 4 neighboring pixels + //=pow(prob that cross talk does not occur at a pixel,4) + double crossTalkProbabilitySinglePixel = 1.0-probabilityNoCrossTalkSinglePixel; + + //the crossTalkProbabilitySinglePixel is the measured probability (based on the _crossTalkProb from the Hamamatsu specs), + //however the actually production probability is higher, but is reduced by the avalanche probability + //(measured probability = production probability * avalanche probability) + //the production probability is needed here + crossTalkProbabilitySinglePixel /= _avalancheProbFullyChargedPixel; + for(size_t i=0; i > &inactivePixels) +{ + _nPixelsX = nPixelsX; + _nPixelsY = nPixelsY; + _overvoltage = overvoltage; //operating overvoltage = bias voltage - breakdown voltage + _timeConstant = timeConstant; + _capacitance = capacitance; //capacitance per pixel + _probabilities = probabilities; + _inactivePixels = inactivePixels; + + _avalancheProbFullyChargedPixel = GetAvalancheProbability(overvoltage); +} + +void MakeCrvSiPMCharges::FillQueue(const std::vector > &photons, double startTime, double endTime) +{ +//schedule charges caused by the CRV counter photons + for(size_t i=0; i pixelId = FindFiberPhotonsPixelId(); //only pixels at fiber + _scheduledCharges.emplace(pixelId, photons[i].first, photons[i].second, false); + } + +//schedule random thermal charges + double timeWindow = endTime-startTime; + + //for the dark noise simulation, it is assumed that all pixels are fully charged (for simplicity) + + //the actual thermal production rate gets scaled down by the avalanche probability, + //i.e. only a fraction of the thermaly created charges lead to a dark noise pulse + //thermal production rate * avalanche probability = thermal rate + double thermalProductionRate = _probabilities._thermalRate/_avalancheProbFullyChargedPixel; + + //average number of thermaly created charges is thermalProductionRate*timeWindow + int numberThermalCharges = _randPoissonQ.fire(thermalProductionRate * timeWindow); + for(int i=0; i pixelId = FindThermalNoisePixelId(); //all pixels + double time = startTime + timeWindow * _randFlat.fire(); + _scheduledCharges.emplace(pixelId, time, 0, true); + } +} + +void MakeCrvSiPMCharges::Simulate(const std::vector > &photons, //pair of photon time and index in the original photon vector + std::vector &SiPMresponseVector, double startTime, double endTime) +{ + _pixels.clear(); + _scheduledCharges.clear(); + FillQueue(photons, startTime, endTime); + + while(1) + { + std::multiset::iterator currentCharge = _scheduledCharges.begin(); + if(currentCharge==_scheduledCharges.end()) break; //no more scheduled charges + + std::pair pixelId = currentCharge->_pixelId; + double time = currentCharge->_time; + size_t photonIndex = currentCharge->_photonIndex; + bool darkNoise = currentCharge->_darkNoise; + _scheduledCharges.erase(currentCharge); + + if(IsInactivePixelId(pixelId)) continue; + + if(time>endTime) continue; //this is relevant for afterpulses + + //find pixel with pixelId, create a fully charged pixel if it doesn't exist + std::map,Pixel>::iterator p = _pixels.find(pixelId); + if(p==_pixels.end()) p=_pixels.emplace(pixelId, Pixel()).first; + // .first returns the iterator to the new pixel + + Pixel &pixel = p->second; + double outputCharge = GenerateAvalanche(pixel, pixelId, time, photonIndex, darkNoise); //the output charge (in Coulomb) of the pixel due to the avalanche + double outputChargeInPEs = (outputCharge/_capacitance)/_overvoltage; //the output charge in units of single PEs of a fully charges pixel + + if(outputCharge>0) SiPMresponseVector.emplace_back(time, outputCharge, outputChargeInPEs, photonIndex, darkNoise); + } //while(1) +} + +MakeCrvSiPMCharges::MakeCrvSiPMCharges(CLHEP::RandFlat &randFlat, CLHEP::RandPoissonQ &randPoissonQ, const std::string &photonMapFileName) : + _randFlat(randFlat), _randPoissonQ(randPoissonQ), _avalancheProbFullyChargedPixel(0) +{ + _photonMapFile = new TFile(photonMapFileName.c_str()); + if(_photonMapFile==NULL) throw std::logic_error("Could not open photon map file."); + _photonMap = (TH2F*)_photonMapFile->FindObjectAny("photonMap"); + if(_photonMap==NULL) throw std::logic_error("Could not find photon map."); +} + +} + +//sample program + +#ifdef SiPMChargesStandalone +int main() +{ + std::vector > photonTimes; + photonTimes.emplace_back(650,0); + photonTimes.emplace_back(620,1); + for(int i=0; i<100; i++) photonTimes.emplace_back(630,i+2); + for(int i=0; i<100; i++) photonTimes.emplace_back(623,i+102); + photonTimes.emplace_back(656,202); + photonTimes.emplace_back(612,203); + std::vector SiPMresponseVector; + + mu2eCrv::MakeCrvSiPMCharges::ProbabilitiesStruct probabilities; + probabilities._avalancheProbParam1 = 0.65; + probabilities._avalancheProbParam2 = 2.7; + probabilities._trapType0Prob = 0.0; + probabilities._trapType1Prob = 0.0; + probabilities._trapType0Lifetime = 5; + probabilities._trapType1Lifetime = 50; + probabilities._thermalRate = 3.0e-4; + probabilities._crossTalkProb = 0.05; + + std::vector > inactivePixels = { {18,18}, {18,19}, {18,20}, {18,21}, + {19,18}, {19,19}, {19,20}, {19,21}, + {20,18}, {20,19}, {20,20}, {20,21}, + {21,18}, {21,19}, {21,20}, {21,21} }; + + CLHEP::HepJamesRandom engine(1); + CLHEP::RandFlat randFlat(engine); + CLHEP::RandPoissonQ randPoissonQ(engine); + mu2eCrv::MakeCrvSiPMCharges sim(randFlat,randPoissonQ,"/cvmfs/mu2e.opensciencegrid.org/DataFiles/CRVConditions/v6_0/photonMap.root"); + sim.SetSiPMConstants(40, 40, 3.0, 13.3, 8.84e-14, probabilities, inactivePixels); + + sim.Simulate(photonTimes, SiPMresponseVector, 500, 1695); + + for(unsigned int i=0; i=5) && //FIXME! + if ( (count>=minNFitHits) && //FIXME! (faceHitChi2 < 2.) && ( (fabs(phiZInfo.dfdz - Helix._szphi.dfdz()) < 8.e-4) ) &&// || //require that the new value of dfdz is //close to the starting one. update dfdz only if: @@ -1362,7 +1362,7 @@ namespace mu2e { //----------------------------------------------------------------------------- // perform a cleanup in RZ //----------------------------------------------------------------------------- - if ( DoCleanUp == 1){ + if ( (DoCleanUp == 1) && (Helix._szphi.qn()>=minNFitHits)){ if ( Helix._szphi.chi2DofLine() > _chi2zphiMax) { NEXT_ITERATION:; //reset the coordinates of the worst hit diff --git a/CaloCluster/fcl/prolog_trigger.fcl b/CaloCluster/fcl/prolog_trigger.fcl index f3b404bd75..137c133dda 100644 --- a/CaloCluster/fcl/prolog_trigger.fcl +++ b/CaloCluster/fcl/prolog_trigger.fcl @@ -22,7 +22,7 @@ CaloTrigger : { module_type : CaloTrigger caloDigiModuleLabel : CaloDigiMaker digiSampling : @local::HitMakerDigiSampling - blindTime : @local::HitMakerBlindTime + blindTime : @local::HitMakerDigitizationStart endTimeBuffer : 80 windowPeak : 2 minAmplitude : 20 diff --git a/CaloMC/fcl/common.fcl b/CaloMC/fcl/common.fcl index a57c441e71..bcada2fbfd 100644 --- a/CaloMC/fcl/common.fcl +++ b/CaloMC/fcl/common.fcl @@ -1,6 +1,7 @@ BEGIN_PROLOG - HitMakerBlindTime : 500. - HitMakerDigiSampling : 1 + HitMakerDigitizationStart : 450. + HitMakerDigitizationEnd : 2005.0 + HitMakerDigiSampling : 5 HitMakerMinPeakADC : 16 END_PROLOG diff --git a/CaloMC/fcl/prolog.fcl b/CaloMC/fcl/prolog.fcl index dd6fb8f6a2..bd07ef4feb 100644 --- a/CaloMC/fcl/prolog.fcl +++ b/CaloMC/fcl/prolog.fcl @@ -30,7 +30,7 @@ CaloShowerROMaker : caloShowerStepCollection : ["CaloShowerStepMaker"] eventWindowMarker : EWMProducer protonBunchTimeMC : EWMProducer - blindTime : @local::HitMakerBlindTime + digitizationStart : @local::HitMakerDigitizationStart LRUCorrection : true BirksCorrection : true PEStatCorrection : true @@ -58,7 +58,8 @@ CaloDigiMaker : module_type : CaloDigiMaker caloShowerROCollection : CaloShowerROMaker eventWindowMarker : EWMProducer - blindTime : @local::HitMakerBlindTime + digitizationStart : @local::HitMakerDigitizationStart + digitizationEnd : @local::HitMakerDigitizationEnd addNoise : true generateSpotNoise : true addRandomNoise : false @@ -67,7 +68,6 @@ CaloDigiMaker : nBits : 12 minPeakADC : @local::HitMakerMinPeakADC nBinsPeak : 2 - endTimeBuffer : 80 bufferDigi : 20 diagLevel : 0 } diff --git a/CaloMC/inc/CaloPhotonPropagation.hh b/CaloMC/inc/CaloPhotonPropagation.hh index 50ba50684b..2b790ee40c 100644 --- a/CaloMC/inc/CaloPhotonPropagation.hh +++ b/CaloMC/inc/CaloPhotonPropagation.hh @@ -23,6 +23,7 @@ namespace mu2e { std::vector timeProp_; std::vector cdf_; unsigned nTimeDiv_; + unsigned nZDiv_; float dzTime_; CLHEP::RandFlat randFlat_; float lightSpeed_; diff --git a/CaloMC/src/CaloDigiMaker_module.cc b/CaloMC/src/CaloDigiMaker_module.cc index e82eb9dcbd..8cf0a9d4ff 100644 --- a/CaloMC/src/CaloDigiMaker_module.cc +++ b/CaloMC/src/CaloDigiMaker_module.cc @@ -19,8 +19,10 @@ #include "Offline/CaloMC/inc/CaloNoiseSimGenerator.hh" #include "Offline/CaloMC/inc/CaloWFExtractor.hh" #include "Offline/ConditionsService/inc/ConditionsHandle.hh" +#include "Offline/ProditionsService/inc/ProditionsHandle.hh" #include "Offline/ConditionsService/inc/CalorimeterCalibrations.hh" #include "Offline/ConditionsService/inc/AcceleratorParams.hh" +#include "Offline/DAQConditions/inc/EventTiming.hh" #include "Offline/DataProducts/inc/EventWindowMarker.hh" #include "Offline/GeometryService/inc/GeomHandle.hh" #include "Offline/MCDataProducts/inc/CaloShowerRO.hh" @@ -58,7 +60,8 @@ namespace mu2e { fhicl::Table noise_gen_conf { Name("NoiseGenerator"), Comment("Noise generator config") }; fhicl::Atom caloShowerCollection { Name("caloShowerROCollection"), Comment("CaloShowerRO collection name") }; fhicl::Atom ewMarkerTag { Name("eventWindowMarker"), Comment("EventWindowMarker producer") }; - fhicl::Atom blindTime { Name("blindTime"), Comment("Microbunch blind time") }; + fhicl::Atom digitizationStart { Name("digitizationStart"), Comment("Start of digitization window relative to nominal pb time") }; + fhicl::Atom digitizationEnd { Name("digitizationEnd"), Comment("End of digitization window relative to nominal pb time")}; fhicl::Atom addNoise { Name("addNoise"), Comment("Add noise to waveform") }; fhicl::Atom generateSpotNoise { Name("generateSpotNoise"), Comment("Only generate noise near energy deposits") }; fhicl::Atom addRandomNoise { Name("addRandomNoise"), Comment("Add random salt and pepper noise") }; @@ -66,7 +69,6 @@ namespace mu2e { fhicl::Atom nBits { Name("nBits"), Comment("ADC Number of bits") }; fhicl::Atom nBinsPeak { Name("nBinsPeak"), Comment("Window size for finding local maximum to digitize wf") }; fhicl::Atom minPeakADC { Name("minPeakADC"), Comment("Minimum ADC hits of local peak to digitize") }; - fhicl::Atom endTimeBuffer { Name("endTimeBuffer"), Comment("Number of extra timestamps after end of pulse") }; fhicl::Atom bufferDigi { Name("bufferDigi"), Comment("Number of timeStamps for the buffer digi") }; fhicl::Atom diagLevel { Name("diagLevel"), Comment("Diag Level"),0 }; }; @@ -75,11 +77,11 @@ namespace mu2e { EDProducer{config}, caloShowerToken_{consumes(config().caloShowerCollection())}, ewMarkerTag_ (config().ewMarkerTag()), - blindTime_ (config().blindTime()), + digitizationStart_ (config().digitizationStart()), + digitizationEnd_ (config().digitizationEnd()), digiSampling_ (config().digiSampling()), bufferDigi_ (config().bufferDigi()), startTimeBuffer_ (config().digiSampling()*config().bufferDigi()), - endTimeBuffer_ (config().endTimeBuffer()), maxADCCounts_ (1 << config().nBits()), pulseShape_ (CaloPulseShape(config().digiSampling())), wfExtractor_ (config().bufferDigi(),config().nBinsPeak(),config().minPeakADC(),config().bufferDigi()), @@ -94,7 +96,7 @@ namespace mu2e { produces(); //check that StartTimeBuffer is shorter than BlindTime_ - if (startTimeBuffer_ > blindTime_) throw cet::exception("CATEGORY")<< "CaloDigiMaker: blindTime is too small to accommodate start time buffer"; + if (startTimeBuffer_ > digitizationStart_) throw cet::exception("CATEGORY")<< "CaloDigiMaker: digitizationStart is too small to accommodate start time buffer"; } void produce(art::Event& e) override; @@ -112,11 +114,13 @@ namespace mu2e { const art::ProductToken caloShowerToken_; art::InputTag ewMarkerTag_; - double blindTime_; + double digitizationStart_; + double digitizationEnd_; + double correctedDigitizationStart_; + double correctedDigitizationEnd_; double digiSampling_; unsigned bufferDigi_; double startTimeBuffer_; - double endTimeBuffer_; int maxADCCounts_; CaloPulseShape pulseShape_; CaloWFExtractor wfExtractor_; @@ -127,6 +131,8 @@ namespace mu2e { bool addRandomNoise_; const Calorimeter* calorimeter_; int diagLevel_; + + double timeFromProtonsToDRMarker_; }; @@ -150,6 +156,10 @@ namespace mu2e { art::Handle ewMarkerHandle; event.getByLabel(ewMarkerTag_, ewMarkerHandle); const EventWindowMarker& ewMarker(*ewMarkerHandle); + + ProditionsHandle eventTimingHandle; + const EventTiming &eventTiming = eventTimingHandle.get(event.id()); + timeFromProtonsToDRMarker_ = eventTiming.timeFromProtonsToDRMarker(); auto caloShowerStepHandle = event.getValidHandle(caloShowerToken_); const auto& CaloShowerROs = *caloShowerStepHandle; @@ -168,14 +178,22 @@ namespace mu2e { mu2e::GeomHandle ch; calorimeter_ = ch.get(); - ConditionsHandle accPar("ignored"); ConditionsHandle calorimeterCalibrations("ignored"); if (calorimeter_->nCrystal()<1 || calorimeter_->caloInfo().getInt("nSiPMPerCrystal")<1) return; - double mbtime = (ewMarker.spillType() == EventWindowMarker::SpillType::onspill) ? accPar->deBuncherPeriod : ewMarker.eventLength(); + + // change digitization window to relative to event marker + correctedDigitizationStart_ = digitizationStart_ - timeFromProtonsToDRMarker_; + correctedDigitizationEnd_ = digitizationEnd_ - timeFromProtonsToDRMarker_; + + int waveformSize = (correctedDigitizationEnd_ - correctedDigitizationStart_) / digiSampling_; + if (ewMarker.spillType() != EventWindowMarker::SpillType::onspill){ + waveformSize = (ewMarker.eventLength() - correctedDigitizationStart_) / digiSampling_; + } + + int nWaveforms = calorimeter_->nCrystal()*calorimeter_->caloInfo().getInt("nSiPMPerCrystal"); - int waveformSize = (mbtime - blindTime_ + endTimeBuffer_) / digiSampling_; if (waveformSize<1) throw cet::exception("Rethrow")<< "[CaloMC/CaloDigiMaker] digitization size too short " << std::endl; @@ -210,7 +228,7 @@ namespace mu2e { if (SiPMID != iRO) continue; for (const float PEtime : CaloShowerRO.PETime()) { - float time = PEtime - blindTime_ + startTimeBuffer_; + float time = PEtime - correctedDigitizationStart_ + startTimeBuffer_; unsigned startSample = std::max(0u,unsigned(time/digiSampling_)); const auto& pulse = pulseShape_.digitizedPulse(time); unsigned stopSample = std::min(startSample+pulse.size(), waveform.size()); @@ -292,16 +310,16 @@ namespace mu2e { { size_t sampleStart = hitStarts[ihit]; size_t sampleStop = hitStops[ihit]; - size_t t0 = size_t(sampleStart*digiSampling_ + blindTime_ - startTimeBuffer_); + size_t t0 = size_t(sampleStart*digiSampling_ + correctedDigitizationStart_ - startTimeBuffer_); std::vector wfsample{}; wfsample.reserve(sampleStop-sampleStart); for (size_t i=sampleStart; i= blindTime_ && wfsample[i]>=wfsample[peakPosition]) peakPosition=i; + if (t0+i*digiSampling_ >= correctedDigitizationStart_ && wfsample[i]>=wfsample[peakPosition]) peakPosition=i; } if (diagLevel_ >2) std::cout<<"[CaloDigiMaker] Start=" << sampleStart << " Stop=" << sampleStop << " peak in position " << peakPosition << std::endl; @@ -336,7 +354,7 @@ namespace mu2e { //------------------------------------------------------------------------------------------------------------------- void CaloDigiMaker::plotWF(const std::vector& waveform, const std::string& pname, int pedestal) { - double startTime = blindTime_ - startTimeBuffer_; + double startTime = correctedDigitizationStart_ - startTimeBuffer_; TH1F h("h","Waveform",waveform.size(),startTime,waveform.size()*digiSampling_+startTime); for (size_t i=1;i<=waveform.size();++i) h.SetBinContent(i,waveform[i-1]); TLine line; diff --git a/CaloMC/src/CaloPhotonPropagation.cc b/CaloMC/src/CaloPhotonPropagation.cc index 75beaf9418..67a64c6a3c 100644 --- a/CaloMC/src/CaloPhotonPropagation.cc +++ b/CaloMC/src/CaloPhotonPropagation.cc @@ -18,6 +18,7 @@ namespace mu2e { timeProp_ (), cdf_ (), nTimeDiv_ (0), + nZDiv_ (0), dzTime_ (0), randFlat_ (engine), lightSpeed_(300) @@ -41,6 +42,7 @@ namespace mu2e { dzTime_ = hist->GetXaxis()->GetBinWidth(1); nTimeDiv_ = hist->GetNbinsY(); + nZDiv_ = hist->GetNbinsX(); for (unsigned iy=1;iy<=nTimeDiv_;++iy) timeProp_.push_back(hist->GetYaxis()->GetBinCenter(iy)); cdf_.reserve(hist->GetNbinsX()*hist->GetNbinsY()); @@ -64,10 +66,11 @@ namespace mu2e { //---------------------------------------------------------------------------- float CaloPhotonPropagation::propTimeSimu(float z) { - int iz = int(z/dzTime_); + unsigned iz = z/dzTime_; + if(iz>=nZDiv_) iz = nZDiv_ - 1; float test = randFlat_.fire(0.0,1.0); unsigned ibin = nTimeDiv_*iz; - unsigned iend = ibin + nTimeDiv_; + unsigned iend = ibin + nTimeDiv_ - 1; while (cdf_[ibin] caloShowerStepCollection { Name("caloShowerStepCollection"), Comment("Compressed shower inputs for calo crystals") }; fhicl::Atom ewMarkerTag { Name("eventWindowMarker"), Comment("EventWindowMarker producer") }; fhicl::Atom pbtmcTag { Name("protonBunchTimeMC"), Comment("ProtonBunchTimeMC producer") }; - fhicl::Atom blindTime { Name("blindTime"), Comment("Minimum time of hit to be digitized") }; + fhicl::Atom digitizationStart { Name("digitizationStart"), Comment("Minimum time of hit to be digitized") }; fhicl::Atom LRUCorrection { Name("LRUCorrection"), Comment("Include LRU corrections") }; fhicl::Atom BirksCorrection { Name("BirksCorrection"), Comment("Include Birks corrections") }; fhicl::Atom PEStatCorrection { Name("PEStatCorrection"), Comment("Include PE Poisson fluctuations") }; @@ -102,7 +104,7 @@ namespace mu2e { EDProducer{config}, ewMarkerTag_ (config().ewMarkerTag()), pbtmcTag_ (config().pbtmcTag()), - blindTime_ (config().blindTime()), + digitizationStart_ (config().digitizationStart()), LRUCorrection_ (config().LRUCorrection()), BirksCorrection_ (config().BirksCorrection()), PEStatCorrection_ (config().PEStatCorrection()), @@ -129,14 +131,15 @@ namespace mu2e { private: using StepHandles = std::vector>; - void makeReadoutHits (const StepHandles&, CaloShowerROCollection&, CaloShowerSimCollection&, const EventWindowMarker&, const ProtonBunchTimeMC& ); + void makeReadoutHits (const StepHandles&, CaloShowerROCollection&, CaloShowerSimCollection&, const EventWindowMarker&, const ProtonBunchTimeMC&, + double correctedDigitizationStart); float LRUCorrection (int crystalID, float normalizedPosZ, float edepInit, const ConditionsHandle&); void dumpCaloShowerSim (const CaloShowerSimCollection& caloShowerSims); std::vector> crystalShowerTokens_; art::InputTag ewMarkerTag_; art::InputTag pbtmcTag_; - float blindTime_; + float digitizationStart_; float mbtime_; bool LRUCorrection_; bool BirksCorrection_; @@ -192,6 +195,11 @@ namespace mu2e { event.getByLabel(pbtmcTag_, pbtmcHandle); const ProtonBunchTimeMC& pbtmc(*pbtmcHandle); + ProditionsHandle eventTimingHandle; + const EventTiming &eventTiming = eventTimingHandle.get(event.id()); + // change fcl parameter from time since proton to time since marker + double correctedDigitizationStart = digitizationStart_ - eventTiming.timeFromProtonsToDRMarker(); + // Containers to hold the output hits. auto CaloShowerROs = std::make_unique(); auto caloShowerSims = std::make_unique(); @@ -201,7 +209,7 @@ namespace mu2e { back_inserter(newCrystalShowerTokens), [&event](const auto& token) {return event.getValidHandle(token);}); - makeReadoutHits(newCrystalShowerTokens, *CaloShowerROs, *caloShowerSims, ewMarker, pbtmc); + makeReadoutHits(newCrystalShowerTokens, *CaloShowerROs, *caloShowerSims, ewMarker, pbtmc, correctedDigitizationStart); // Add the output hit collection to the event event.put(std::move(CaloShowerROs)); @@ -214,7 +222,7 @@ namespace mu2e { //----------------------------------------------------------------------------------------------------- void CaloShowerROMaker::makeReadoutHits(const StepHandles& crystalShowerHandles, CaloShowerROCollection& CaloShowerROs, CaloShowerSimCollection& caloShowerSims, const EventWindowMarker& ewMarker, - const ProtonBunchTimeMC& pbtmc ) + const ProtonBunchTimeMC& pbtmc, double correctedDigitizationStart ) { GlobalConstantsHandle pdt; ConditionsHandle calorimeterCalibrations("ignored"); @@ -239,10 +247,10 @@ namespace mu2e { // Time folding and filtering, see doc-db 3425 + talks from D. Brown for explanation double mbLength = (ewMarker.spillType() == EventWindowMarker::SpillType::onspill) ? mbtime_ : ewMarker.eventLength(); - //double hitTime = fmod(istep->time() + pbtmc.pbtime_ + mbLength, mbLength); - double hitTime = fmod(istep->time() + mbLength, mbLength); + // folding is done relative to marker t=0 + double hitTime = fmod(istep->time() + pbtmc.pbtime_ + mbLength, mbLength); - if (hitTime < blindTime_) continue; + if (hitTime < correctedDigitizationStart) continue; size_t idx = std::distance(caloShowerSteps.begin(), istep); art::Ptr stepPtr = art::Ptr(showerHandle,idx); diff --git a/CaloMC/src/SConscript b/CaloMC/src/SConscript index d8fb16b30a..5a118af734 100644 --- a/CaloMC/src/SConscript +++ b/CaloMC/src/SConscript @@ -52,6 +52,7 @@ helper.make_plugins( [ mainlib, 'mu2e_Mu2eUtilities', 'mu2e_ConditionsService', 'mu2e_GeometryService', + 'mu2e_DAQConditions', 'mu2e_SeedService_SeedService_service', 'mu2e_CalorimeterGeom', 'mu2e_MCDataProducts', diff --git a/CaloReco/fcl/prolog.fcl b/CaloReco/fcl/prolog.fcl index d6492bd208..0e7ddb9aa8 100644 --- a/CaloReco/fcl/prolog.fcl +++ b/CaloReco/fcl/prolog.fcl @@ -38,6 +38,7 @@ CaloRecoDigiMaker : TemplateProcessor : { @table::TemplateProcessor } processorStrategy : "TemplateFit" digiSampling : @local::HitMakerDigiSampling + ProtonBunchTimeTag : "EWMProducer" maxChi2Cut : 7.0 maxPlots : 50 diagLevel : 0 diff --git a/CaloReco/fcl/prolog_trigger.fcl b/CaloReco/fcl/prolog_trigger.fcl index 93ed1412e4..d59c27fac0 100644 --- a/CaloReco/fcl/prolog_trigger.fcl +++ b/CaloReco/fcl/prolog_trigger.fcl @@ -11,6 +11,7 @@ CaloHitMakerFast : module_type : CaloHitMakerFast caloDigiCollection : CaloDigiMaker digiSampling : @local::HitMakerDigiSampling + ProtonBunchTimeTag : "EWMProducer" diagLevel : 0 deltaTPulses : 5 pulseRatioMin : 0.9 diff --git a/CaloReco/src/CaloHitMakerFast_module.cc b/CaloReco/src/CaloHitMakerFast_module.cc index 8b63a1ff0a..56548adcf1 100644 --- a/CaloReco/src/CaloHitMakerFast_module.cc +++ b/CaloReco/src/CaloHitMakerFast_module.cc @@ -11,6 +11,7 @@ #include "Offline/GeometryService/inc/GeomHandle.hh" #include "Offline/RecoDataProducts/inc/CaloDigi.hh" #include "Offline/RecoDataProducts/inc/CaloHit.hh" +#include "Offline/RecoDataProducts/inc/ProtonBunchTime.hh" namespace @@ -37,6 +38,7 @@ namespace mu2e { using Name = fhicl::Name; using Comment = fhicl::Comment; fhicl::Atom caloDigiCollection { Name("caloDigiCollection"), Comment("CaloDigi collection name") }; + fhicl::Atom pbttoken { Name("ProtonBunchTimeTag"), Comment("ProtonBunchTime producer")}; fhicl::Atom digiSampling { Name("digiSampling"), Comment("Digitization time sampling") }; fhicl::Atom deltaTPulses { Name("deltaTPulses"), Comment("Maximum time difference between two signals ") }; fhicl::Atom pulseRatioMin { Name("pulseRatioMin"), Comment("Min value of energy ratio between pulses ") }; @@ -48,6 +50,7 @@ namespace mu2e { explicit CaloHitMakerFast(const art::EDProducer::Table& config) : EDProducer{config}, caloDigisToken_ {consumes(config().caloDigiCollection())}, + pbttoken_ {consumes(config().pbttoken())}, digiSampling_ (config().digiSampling()), deltaTPulses_ (config().deltaTPulses()), pulseRatioMin_ (config().pulseRatioMin()), @@ -65,10 +68,11 @@ namespace mu2e { private: using pulseMapType = std::unordered_map>; - void extractHits(const CaloDigiCollection& caloDigis, CaloHitCollection& caloHitsColl, CaloHitCollection& caphriHitsColl); + void extractHits(const CaloDigiCollection& caloDigis, CaloHitCollection& caloHitsColl, CaloHitCollection& caphriHitsColl, double pbtOffset); void addPulse(pulseMapType& pulseMap, unsigned crystalID, float time, float eDep); art::ProductToken caloDigisToken_; + const art::ProductToken pbttoken_; double digiSampling_; double deltaTPulses_; double pulseRatioMin_; @@ -84,12 +88,16 @@ namespace mu2e { { if (diagLevel_ > 0) std::cout<<"[FastRecoDigiFromDigi] begin"<(); auto caphriHitsColl = std::make_unique(); - extractHits(caloDigis,*caloHitsColl,*caphriHitsColl); + extractHits(caloDigis,*caloHitsColl,*caphriHitsColl,pbtOffset); event.put(std::move(caloHitsColl), "calo"); event.put(std::move(caphriHitsColl),"caphri"); @@ -100,7 +108,7 @@ namespace mu2e { //-------------------------------------------------------------------------------------------------------------- - void CaloHitMakerFast::extractHits(const CaloDigiCollection& caloDigis, CaloHitCollection& caloHitsColl, CaloHitCollection& caphriHitsColl) + void CaloHitMakerFast::extractHits(const CaloDigiCollection& caloDigis, CaloHitCollection& caloHitsColl, CaloHitCollection& caphriHitsColl, double pbtOffset) { const Calorimeter& cal = *(GeomHandle()); ConditionsHandle calorimeterCalibrations("ignored"); @@ -114,7 +122,7 @@ namespace mu2e { for (size_t i=0; iADC2MeV(caloDigi.SiPMID());//FIXME! we should use the function ::Peak2MeV, I also think that we should: (i) discard the hit if eDep is <0 (noise/stange pulse), (ii) require a minimum pulse length. gianipez - double time = caloDigi.t0() + caloDigi.peakpos()*digiSampling_; //Giani's definition + double time = caloDigi.t0() + caloDigi.peakpos()*digiSampling_ - pbtOffset; //Giani's definition //double time = caloDigi.t0() + (caloDigi.peakpos()+0.5)*digiSampling_ - shiftTime_; //Bertrand's definition addPulse(pulseMap, crystalID, time, eDep); diff --git a/CaloReco/src/CaloRecoDigiMaker_module.cc b/CaloReco/src/CaloRecoDigiMaker_module.cc index 03f8ecff1a..4e08442344 100644 --- a/CaloReco/src/CaloRecoDigiMaker_module.cc +++ b/CaloReco/src/CaloRecoDigiMaker_module.cc @@ -11,6 +11,7 @@ #include "Offline/ConditionsService/inc/CalorimeterCalibrations.hh" #include "Offline/RecoDataProducts/inc/CaloDigi.hh" #include "Offline/RecoDataProducts/inc/CaloRecoDigi.hh" +#include "Offline/RecoDataProducts/inc/ProtonBunchTime.hh" #include "Offline/CaloReco/inc/CaloWaveformProcessor.hh" #include "Offline/CaloReco/inc/CaloTemplateWFProcessor.hh" #include "Offline/CaloReco/inc/CaloRawWFProcessor.hh" @@ -34,6 +35,7 @@ namespace mu2e { fhicl::Table proc_raw_conf { Name("RawProcessor"), Comment("Raw processor config") }; fhicl::Table proc_templ_conf { Name("TemplateProcessor"), Comment("Log normal fit processor config") }; fhicl::Atom caloDigiCollection { Name("caloDigiCollection"), Comment("Calo Digi module label") }; + fhicl::Atom pbttoken { Name("ProtonBunchTimeTag"), Comment("ProtonBunchTime producer")}; fhicl::Atom processorStrategy { Name("processorStrategy"), Comment("Digi reco processor name") }; fhicl::Atom digiSampling { Name("digiSampling"), Comment("Calo ADC sampling time (ns)") }; fhicl::Atom maxChi2Cut { Name("maxChi2Cut"), Comment("Chi2 cut for keeping reco digi") }; @@ -44,6 +46,7 @@ namespace mu2e { explicit CaloRecoDigiMaker(const art::EDProducer::Table& config) : EDProducer{config}, caloDigisToken_ {consumes(config().caloDigiCollection())}, + pbttoken_ {consumes(config().pbttoken())}, processorStrategy_ (config().processorStrategy()), digiSampling_ (config().digiSampling()), maxChi2Cut_ (config().maxChi2Cut()), @@ -79,9 +82,10 @@ namespace mu2e { void produce(art::Event& e) override; private: - void extractRecoDigi(const art::ValidHandle&, CaloRecoDigiCollection& ); + void extractRecoDigi(const art::ValidHandle&, CaloRecoDigiCollection&, double ); const art::ProductToken caloDigisToken_; + const art::ProductToken pbttoken_; const std::string processorStrategy_; double digiSampling_; double maxChi2Cut_; @@ -98,8 +102,12 @@ namespace mu2e { const auto& caloDigisH = event.getValidHandle(caloDigisToken_); auto recoCaloDigiColl = std::make_unique(); + + auto pbtH = event.getValidHandle(pbttoken_); + const ProtonBunchTime& pbt(*pbtH); + double pbtOffset = pbt.pbtime_; - extractRecoDigi(caloDigisH, *recoCaloDigiColl); + extractRecoDigi(caloDigisH, *recoCaloDigiColl, pbtOffset); event.put(std::move(recoCaloDigiColl)); @@ -116,7 +124,7 @@ namespace mu2e { //------------------------------------------------------------------------------------------------------------ void CaloRecoDigiMaker::extractRecoDigi(const art::ValidHandle& caloDigisHandle, - CaloRecoDigiCollection &recoCaloHits) + CaloRecoDigiCollection &recoCaloHits, double pbtOffset) { const auto& caloDigis = *caloDigisHandle; ConditionsHandle calorimeterCalibrations("ignored"); @@ -147,7 +155,7 @@ namespace mu2e { { double eDep = waveformProcessor_->amplitude(i)*adc2MeV; double eDepErr = waveformProcessor_->amplitudeErr(i)*adc2MeV; - double time = waveformProcessor_->time(i); + double time = waveformProcessor_->time(i) - pbtOffset; // correct to time since protons double timeErr = waveformProcessor_->timeErr(i); bool isPileUp = waveformProcessor_->isPileUp(i); double chi2 = waveformProcessor_->chi2(); diff --git a/CaloReco/src/CaloTemplateWFProcessor.cc b/CaloReco/src/CaloTemplateWFProcessor.cc index fb92ab7b5d..f6289031d3 100644 --- a/CaloReco/src/CaloTemplateWFProcessor.cc +++ b/CaloReco/src/CaloTemplateWFProcessor.cc @@ -139,7 +139,7 @@ namespace mu2e { double ymaxEstimate = fmutil_.peakNorm(xvec, ywork, xmaxEstimate , i-windowPeak_, i+windowPeak_); if (ymaxEstimate>1e5) continue; - + parInit.push_back(ymaxEstimate); parInit.push_back(xmaxEstimate); fmutil_.setPar(parInit); @@ -255,14 +255,15 @@ namespace mu2e { void CaloTemplateWFProcessor::setSecondaryPeakPar(const std::vector& xvec, const std::vector& yvec) { if (windowPeak_ > xvec.size()) return; - + if (xvec.size() != yvec.size()) throw cet::exception("CATEGORY")<<"CaloTemplateWFProcessor::setSecondaryPeakPar xvec and yvec must have the same size"; + std::vector ywork(yvec); for (unsigned j=0;j parInit(fmutil_.par()); - for (auto i=windowPeak_;i0 && ywork[i]/yvec[i] < psdThreshold_) continue; diff --git a/CommonMC/src/NullMCPrimary_module.cc b/CommonMC/src/NullMCPrimary_module.cc new file mode 100644 index 0000000000..555699d1df --- /dev/null +++ b/CommonMC/src/NullMCPrimary_module.cc @@ -0,0 +1,47 @@ +// +// Trivial module to insert an empty PrimaryParticle object in the event, used for NoPrimary production +// +#include "art/Framework/Core/EDProducer.h" +#include "art/Framework/Principal/Event.h" +#include "art/Framework/Core/ModuleMacros.h" +#include "fhiclcpp/types/Sequence.h" +#include "Offline/MCDataProducts/inc/PrimaryParticle.hh" +#include "Offline/MCDataProducts/inc/StepPointMC.hh" +#include "Offline/MCDataProducts/inc/MCTrajectoryCollection.hh" +#include +#include +namespace mu2e { + class NullMCPrimary : public art::EDProducer { + public: + struct Config { + fhicl::Sequence extraSteps { fhicl::Name("ExtraSteps"), fhicl::Comment("2ndary keys of extra StepPointMC collections") }; + }; + using Parameters = art::EDProducer::Table; + explicit NullMCPrimary(const Parameters& conf); + void produce(art::Event& evt) override; + private: + std::vector extrasteps_; + }; + + NullMCPrimary::NullMCPrimary(const Parameters& config ) : + art::EDProducer{config}, + extrasteps_(config().extraSteps()) + { + produces (); + produces (); + for(auto extrastep : extrasteps_) + produces (extrastep); + } + + void NullMCPrimary::produce(art::Event& event) { + // create empty output objects + PrimaryParticle pp; + MCTrajectoryCollection mctc; + event.put(std::make_unique(pp)); + event.put(std::make_unique(mctc)); + StepPointMCCollection empty; + for(auto extrastep : extrasteps_) + event.put(std::make_unique(empty),extrastep); + } +} +DEFINE_ART_MODULE(mu2e::NullMCPrimary) diff --git a/CosmicReco/src/LineFinder_module.cc b/CosmicReco/src/LineFinder_module.cc index 5872f3104c..d532d1b597 100644 --- a/CosmicReco/src/LineFinder_module.cc +++ b/CosmicReco/src/LineFinder_module.cc @@ -137,6 +137,7 @@ void LineFinder::produce(art::Event& event ) { tseed._status.merge(TrkFitFlag::hitsOK); tseed._status.merge(TrkFitFlag::helixOK); tseed._status.merge(TrkFitFlag::helixConverged); + tseed._track.MinuitParams.cov = std::vector(15, 0); CosmicTrackSeedCollection* tcol = seed_col.get(); tcol->push_back(tseed); diff --git a/DAQ/src/SConscript b/DAQ/src/SConscript index 77f1c0be66..c9958387ca 100644 --- a/DAQ/src/SConscript +++ b/DAQ/src/SConscript @@ -26,6 +26,7 @@ mainlib = helper.make_mainlib ( [ 'mu2e_ConditionsService', 'mu2e_DataProducts', 'mu2e_TrkHitReco', 'mu2e_GeneralUtilities', + 'DTCInterface', 'art_Persistency_Provenance', 'art_Persistency_Common', 'art_Framework_Services_Optional_RandomNumberGenerator_service', diff --git a/DAQ/src/StrawHitRecoFromFragments_module.cc b/DAQ/src/StrawHitRecoFromFragments_module.cc index d3d187a0e2..b72c4963a0 100644 --- a/DAQ/src/StrawHitRecoFromFragments_module.cc +++ b/DAQ/src/StrawHitRecoFromFragments_module.cc @@ -365,7 +365,7 @@ void art::StrawHitRecoFromFragments::analyze_tracker_( mu2e::TrkTypes::TOTValues tot = {trkDataPair.first->TOT0, trkDataPair.first->TOT1}; mu2e::TrkTypes::ADCValue pmp = trkDataPair.first->PMP; - shrUtils.createComboHit(chCol, shCol, caloClusters, sid, tdc, tot, pmp, trkDataPair.second, + shrUtils.createComboHit(-1,chCol, shCol, caloClusters, sid, tdc, tot, pmp, trkDataPair.second, trackerStatus, srep, tt); } diff --git a/EventGenerator/src/CORSIKAEventGenerator_module.cc b/EventGenerator/src/CORSIKAEventGenerator_module.cc index a15aa71bbe..211d45c94e 100644 --- a/EventGenerator/src/CORSIKAEventGenerator_module.cc +++ b/EventGenerator/src/CORSIKAEventGenerator_module.cc @@ -14,6 +14,7 @@ #include "art/Framework/Principal/Handle.h" #include "art/Framework/Principal/SubRun.h" #include "fhiclcpp/ParameterSet.h" +#include "fhiclcpp/types/OptionalAtom.h" #include "messagefacility/MessageLogger/MessageLogger.h" #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" @@ -34,6 +35,7 @@ #include "Offline/MCDataProducts/inc/GenParticle.hh" #include "Offline/MCDataProducts/inc/CosmicLivetime.hh" #include "Offline/MCDataProducts/inc/GenParticle.hh" +#include "Offline/MCDataProducts/inc/SimTimeOffset.hh" #include "Offline/CalorimeterGeom/inc/Calorimeter.hh" #include "Offline/ExtinctionMonitorFNAL/Geometry/inc/ExtMonFNAL.hh" #include "Offline/GeneralUtilities/inc/safeSqrt.hh" @@ -59,11 +61,12 @@ namespace mu2e { using Name = fhicl::Name; using Comment = fhicl::Comment; - fhicl::Atom corsikaModuleLabel{Name("corsikaModuleLabel"), Comment("Reference point in the coordinate system"), "FromCorsikaBinary"}; + fhicl::Atom corsikaModuleLabel{Name("corsikaModuleLabel"), Comment("Name of CORSIKA module label"), "FromCorsikaBinary"}; fhicl::Atom refPointChoice{Name("refPointChoice"), Comment("Reference point in the coordinate system"), "UNDEFINED"}; fhicl::Atom projectToTargetBox{Name("projectToTargetBox"), Comment("Store only events that cross the target box"), false}; fhicl::Atom targetBoxYmax{Name("targetBoxYmax"), Comment("Top coordinate of the target box on the Y axis")}; fhicl::Atom intDist{Name("intDist"), Comment("Maximum distance of closest approach for backtracked trajectories")}; + fhicl::OptionalAtom simTimeOffset{Name("simTimeOffset"), Comment("Simulation time offset to apply (optional)")}; }; typedef art::EDProducer::Table Parameters; @@ -78,7 +81,6 @@ namespace mu2e { std::vector _worldIntersections; bool _geomInfoObtained = false; - Config _conf; std::string _corsikaModuleLabel = "FromCorsikaBinary"; float _worldXmin = 0; @@ -102,18 +104,26 @@ namespace mu2e { float _highE = 0; float _fluxConstant = 0; + bool _applyTimeOffset; + art::InputTag _timeOffsetTag; + SimTimeOffset _stoff; // time offset for SimParticles and StepPointMCs + }; CorsikaEventGenerator::CorsikaEventGenerator(const Parameters &conf) : EDProducer{conf}, - _conf(conf()), - _corsikaModuleLabel(_conf.corsikaModuleLabel()), - _targetBoxYmax(_conf.targetBoxYmax()), - _projectToTargetBox(_conf.projectToTargetBox()), - _refPointChoice(_conf.refPointChoice()), - _intDist(_conf.intDist()) + _corsikaModuleLabel(conf().corsikaModuleLabel()), + _targetBoxYmax(conf().targetBoxYmax()), + _projectToTargetBox(conf().projectToTargetBox()), + _refPointChoice(conf().refPointChoice()), + _intDist(conf().intDist()), + _applyTimeOffset(conf().simTimeOffset.hasValue()), + _stoff(0.0) { produces(); produces(); + if (_applyTimeOffset) { + _timeOffsetTag = conf().simTimeOffset().value(); + } } void CorsikaEventGenerator::beginSubRun(art::SubRun &subrun) @@ -130,6 +140,13 @@ namespace mu2e { void CorsikaEventGenerator::produce(art::Event &evt) { + + if (_applyTimeOffset) { + // find the time offset in the event, and copy it locally + const auto& stoH = evt.getValidHandle(_timeOffsetTag); + _stoff = *stoH; + } + if (!_geomInfoObtained) { GeomHandle env; GeomHandle worldGeom; @@ -243,7 +260,7 @@ namespace mu2e { genParticles->push_back(GenParticle(static_cast(particle.pdgId()), GenId::cosmicCORSIKA, projectedPos, mom4, - particle.time())); + particle.time() + _stoff.timeOffset_)); } else { _worldIntersections.clear(); VectorVolume particleWorld(position, particle.momentum().vect(), @@ -256,13 +273,13 @@ namespace mu2e { const Hep3Vector projectedPos = _worldIntersections.at(0); genParticles->push_back(GenParticle(static_cast(particle.pdgId()), GenId::cosmicCORSIKA, projectedPos, mom4, - particle.time())); + particle.time() + _stoff.timeOffset_)); } } } else { genParticles->push_back(GenParticle(static_cast(particle.pdgId()), GenId::cosmicCORSIKA, position, mom4, - particle.time())); + particle.time() + _stoff.timeOffset_)); } } diff --git a/EventGenerator/src/CeEndpoint_module.cc b/EventGenerator/src/CeEndpoint_module.cc index 4737300519..a9995d4b28 100644 --- a/EventGenerator/src/CeEndpoint_module.cc +++ b/EventGenerator/src/CeEndpoint_module.cc @@ -3,6 +3,7 @@ // This module throws an exception if no suitable muon is found. // // Andrei Gaponenko, 2021 +// CePlus options added by Sophie Middleton,2021 #include #include @@ -40,13 +41,11 @@ namespace mu2e { struct Config { using Name=fhicl::Name; using Comment=fhicl::Comment; - fhicl::Atom inputSimParticles{Name("inputSimParticles"), - Comment("A SimParticleCollection with input stopped muons.")}; - fhicl::Atom stoppingTargetMaterial{ - Name("stoppingTargetMaterial"), - Comment("Material determines endpoint energy and muon life time. Material must be known to the GlobalConstantsService."), - "Al" }; - fhicl::Atom verbosity{Name("verbosity"),0}; + fhicl::Atom inputSimParticles{Name("inputSimParticles"),Comment("A SimParticleCollection with input stopped muons.")}; + fhicl::Atom stoppingTargetMaterial{ + Name("stoppingTargetMaterial"),Comment("Material determines endpoint energy and muon life time. Material must be known to the GlobalConstantsService."),"Al" }; + fhicl::Atom verbosity{Name("verbosity"),0}; + fhicl::Atom pdgId{Name("pdgId"),Comment("pdg id of daughter particle")}; }; using Parameters= art::EDProducer::Table; @@ -56,7 +55,7 @@ namespace mu2e { //---------------------------------------------------------------- private: - const PDGCode::type electronId_ = PDGCode::e_minus; + const PDGCode::type electronId_ = PDGCode::e_minus; // for mass only double electronMass_; double endPointEnergy_; double endPointMomentum_; @@ -69,22 +68,41 @@ namespace mu2e { art::RandomNumberGenerator::base_engine_t& eng_; CLHEP::RandExponential randExp_; RandomUnitSphere randomUnitSphere_; + ProcessCode process; + int pdgId_; + PDGCode::type pid; }; //================================================================ CeEndpoint::CeEndpoint(const Parameters& conf) : EDProducer{conf} , electronMass_(GlobalConstantsHandle()->particle(electronId_).ref().mass().value()) - , endPointEnergy_{GlobalConstantsHandle()->getEndpointEnergy(conf().stoppingTargetMaterial())} - , endPointMomentum_{ endPointEnergy_*sqrt(1 - std::pow(electronMass_/endPointEnergy_,2)) } + , endPointEnergy_() + , endPointMomentum_ () , muonLifeTime_{GlobalConstantsHandle()->getDecayTime(conf().stoppingTargetMaterial())} , simsToken_{consumes(conf().inputSimParticles())} , verbosity_{conf().verbosity()} , eng_{createEngine(art::ServiceHandle()->getSeed())} , randExp_{eng_} , randomUnitSphere_{eng_} + , pdgId_(conf().pdgId()) { produces(); + pid = static_cast(pdgId_); + + if (pid == PDGCode::e_minus) { + process = ProcessCode::mu2eCeMinusEndpoint; + endPointEnergy_ = GlobalConstantsHandle()->getEndpointEnergy(conf().stoppingTargetMaterial()); + } + else if (pid == PDGCode::e_plus) { + process = ProcessCode::mu2eCePlusEndpoint; + endPointEnergy_ = GlobalConstantsHandle()->getePlusEndpointEnergy(conf().stoppingTargetMaterial()); + } + else { + throw cet::exception("BADINPUT") + <<"CeEndpointGenerator::produce(): No process associated with chosen PDG id\n"; + } + endPointMomentum_ = endPointEnergy_*sqrt(1 - std::pow(electronMass_/endPointEnergy_,2)); if(verbosity_ > 0) { mf::LogInfo log("CeEndpoint"); log<<"stoppingTargetMaterial = "<(simsToken_); const auto mus = stoppedMuMinusList(simh); - + if(mus.empty()) { throw cet::exception("BADINPUT") - <<"CeEndpoint::produce(): no suitable stopped mu- in the input SimParticleCollection\n"; + <<"CeEndpoint::produce(): no suitable stopped muon in the input SimParticleCollection\n"; } @@ -114,8 +132,8 @@ namespace mu2e { const auto mustop = mus.at(eng_.operator unsigned int() % mus.size()); output->emplace_back(mustop, - ProcessCode::mu2eCeMinusEndpoint, - PDGCode::e_minus, + process, + pid, mustop->endPosition(), CLHEP::HepLorentzVector{randomUnitSphere_.fire(endPointMomentum_), endPointEnergy_}, mustop->endGlobalTime() + randExp_.fire(muonLifeTime_) diff --git a/EventGenerator/src/FlatMuonDaughterGenerator_module.cc b/EventGenerator/src/FlatMuonDaughterGenerator_module.cc index a1fcac9dd5..1e029beac3 100644 --- a/EventGenerator/src/FlatMuonDaughterGenerator_module.cc +++ b/EventGenerator/src/FlatMuonDaughterGenerator_module.cc @@ -47,7 +47,7 @@ namespace mu2e { fhicl::Atom inputSimParticles{Name("inputSimParticles"),Comment("A SimParticleCollection with input stopped muons.")}; fhicl::Atom stoppingTargetMaterial{Name("stoppingTargetMaterial"),Comment("material")}; fhicl::Atom verbosity{Name("verbosity")}; - fhicl::Atom pdgId{Name("pdgId")}; + fhicl::Atom pdgId{Name("pdgId"),Comment("pdg id of mother particle")}; }; using Parameters= art::EDProducer::Table; @@ -71,8 +71,9 @@ namespace mu2e { CLHEP::RandFlat randFlat_; CLHEP::RandExponential randExp_; RandomUnitSphere randomUnitSphere_; - + ProcessCode process; int pdgId_; + PDGCode::type pid; }; //================================================================ @@ -92,6 +93,15 @@ namespace mu2e { { produces(); + pid = static_cast(pdgId_); + + if (pid == PDGCode::mu_minus) { process = ProcessCode::mu2eFlateMinus; } + else if (pid == PDGCode::mu_plus) { process = ProcessCode::mu2eFlatePlus; } + else if (pid == PDGCode::gamma) { process = ProcessCode::mu2eFlatPhoton; } + else { + throw cet::exception("BADINPUT") + <<"FlatMuonDaughterGenerator::produce(): No process associated with chosen PDG id\n"; + } } @@ -113,9 +123,9 @@ namespace mu2e { double randomE = sqrt(particleMass_*particleMass_ + randomMom*randomMom); double time = mustop->endGlobalTime() + randExp_.fire(muonLifeTime_); - PDGCode::type pid = static_cast(pdgId_); + output->emplace_back(mustop, - ProcessCode::mu2eFlateMinus, + process, pid, mustop->endPosition(), CLHEP::HepLorentzVector{randomUnitSphere_.fire(randomMom), randomE}, diff --git a/EventMixing/inc/Mu2eProductMixer.hh b/EventMixing/inc/Mu2eProductMixer.hh index fc6f759c59..b5d4f3836d 100644 --- a/EventMixing/inc/Mu2eProductMixer.hh +++ b/EventMixing/inc/Mu2eProductMixer.hh @@ -96,7 +96,7 @@ namespace mu2e { fhicl::Table cosmicLivetimeMixer { fhicl::Name("cosmicLivetimeMixer") }; fhicl::Table eventIDMixer { fhicl::Name("eventIDMixer") }; fhicl::OptionalTable volumeInfoMixer { fhicl::Name("volumeInfoMixer") }; - fhicl::Atom simTimeOffset { fhicl::Name("simTimeOffset"), fhicl::Comment("Simulation time offset to apply (optional)"), art::InputTag() }; + fhicl::OptionalAtom simTimeOffset { fhicl::Name("simTimeOffset"), fhicl::Comment("Simulation time offset to apply (optional)") }; }; Mu2eProductMixer(const Config& conf, art::MixHelper& helper); diff --git a/EventMixing/src/MixBackgroundFrames_module.cc b/EventMixing/src/MixBackgroundFrames_module.cc index 5f7ca06c55..6db3e84ece 100644 --- a/EventMixing/src/MixBackgroundFrames_module.cc +++ b/EventMixing/src/MixBackgroundFrames_module.cc @@ -171,7 +171,7 @@ namespace mu2e { //================================================================ void MixBackgroundFramesDetail::startEvent(const art::Event& event) { - // call down to product mixer + // call down to product mixer spm_.startEvent(event); pbi_ = *event.getValidHandle(pbiTag_); @@ -183,8 +183,8 @@ namespace mu2e { SimBookkeeper const& simbookkeeper = _simbookkeeperH.get(event.id()); for (const auto& i_simStageEff : simStageEfficiencyTags_) { double this_eff = simbookkeeper.getEff(i_simStageEff); + if(this_eff < 0.0) throw cet::exception("MixBackgroundFrames") << "Unphysical SimStageEfficiency value "<< this_eff << std::endl; eff_ *= this_eff; - if (debugLevel_ > 1 && !mixingMeanOverride_) { std::cout << " Sim Stage Efficiency (" << i_simStageEff << ") = " << this_eff << std::endl; std::cout << " Cumulative Total Eff = " << eff_ << std::endl; diff --git a/EventMixing/src/Mu2eProductMixer.cc b/EventMixing/src/Mu2eProductMixer.cc index d343d36d05..4519a92fa0 100644 --- a/EventMixing/src/Mu2eProductMixer.cc +++ b/EventMixing/src/Mu2eProductMixer.cc @@ -43,11 +43,11 @@ namespace mu2e { //---------------------------------------------------------------- Mu2eProductMixer::Mu2eProductMixer(const Config& conf, art::MixHelper& helper) : mixVolumes_(false) - , applyTimeOffset_{! conf.simTimeOffset().empty() } - , timeOffsetTag_{ conf.simTimeOffset() } + , applyTimeOffset_(conf.simTimeOffset.hasValue()) , stoff_(0.0) { if(applyTimeOffset_){ + timeOffsetTag_ = conf.simTimeOffset().value(); std::cout << "Mu2eProductMixer: Applying time offsets from " << timeOffsetTag_ << std::endl; } @@ -163,8 +163,8 @@ namespace mu2e { art::flattenCollections(in, out, genOffsets_); if(applyTimeOffset_){ for(auto& particle : out){ - particle.time() += stoff_.timeOffset_; - // proper times are WRT the particles own internal clock, can't shift them + particle.time() += stoff_.timeOffset_; + // proper times are WRT the particles own internal clock, can't shift them } } @@ -237,7 +237,7 @@ namespace mu2e { auto& step = out[i]; step.simParticle() = remap(step.simParticle(), simOffsets_[ie]); if(applyTimeOffset_){ - step.time() += stoff_.timeOffset_; + step.time() += stoff_.timeOffset_; } } return true; @@ -351,7 +351,7 @@ namespace mu2e { art::PtrRemapper const& remap) { if(in.size() > 1) - throw cet::exception("BADINPUT")<<"Mu2eProductMixer/evt: can't mix CosmicLiveTime" << std::endl; + throw cet::exception("BADINPUT")<<"Mu2eProductMixer/evt: can't mix CosmicLiveTime" << std::endl; for(const auto& x: in) { out = *x; } diff --git a/EventMixing/src/SConscript b/EventMixing/src/SConscript index e31493048f..e60f3b9405 100644 --- a/EventMixing/src/SConscript +++ b/EventMixing/src/SConscript @@ -8,6 +8,7 @@ Import('env') Import('mu2e_helper') helper=mu2e_helper(env); +rootlibs = env['ROOTLIBS'] mainlib = helper.make_mainlib ( [ 'mu2e_MCDataProducts', @@ -37,6 +38,7 @@ mainlib = helper.make_mainlib ( [ 'Core', # dependence on gVersionCheck, reportedly due to some bug upstream ] ) + helper.make_plugins ( [ mainlib, 'mu2e_Mu2eUtilities', 'mu2e_SeedService_SeedService_service', @@ -64,8 +66,7 @@ helper.make_plugins ( [ mainlib, 'cetlib_except', 'hep_concurrency', 'CLHEP', - 'Hist', - 'Core', + rootlibs, 'boost_filesystem', 'pthread' ] ) diff --git a/ExtinctionMonitorFNAL/Reconstruction/src/SConscript b/ExtinctionMonitorFNAL/Reconstruction/src/SConscript index 2d2a74998e..e130965420 100644 --- a/ExtinctionMonitorFNAL/Reconstruction/src/SConscript +++ b/ExtinctionMonitorFNAL/Reconstruction/src/SConscript @@ -12,6 +12,7 @@ helper=mu2e_helper(env); my_libs=['mu2e_ExtinctionMonitorFNAL_Geometry', 'mu2e_RecoDataProducts', 'mu2e_DataProducts', + 'mu2e_Mu2eInterfaces', 'art_Persistency_Common', 'art_Persistency_Provenance', 'art_Utilities', diff --git a/ExtinctionMonitorFNAL/Utilities/src/SConscript b/ExtinctionMonitorFNAL/Utilities/src/SConscript index ba63f38fa2..c3f4def20d 100644 --- a/ExtinctionMonitorFNAL/Utilities/src/SConscript +++ b/ExtinctionMonitorFNAL/Utilities/src/SConscript @@ -14,6 +14,7 @@ mainlib = helper.make_mainlib ( [ 'mu2e_ExtinctionMonitorFNAL_Geometry', 'mu2e_MCDataProducts', 'mu2e_GlobalConstantsService', 'mu2e_DataProducts', + 'mu2e_Mu2eInterfaces', 'art_Framework_Services_Registry', 'art_root_io_tfile_support', 'art_Utilities', diff --git a/Filters/src/ParticleCodeFilter_module.cc b/Filters/src/ParticleCodeFilter_module.cc index b8bba567bf..c3b03c81e3 100644 --- a/Filters/src/ParticleCodeFilter_module.cc +++ b/Filters/src/ParticleCodeFilter_module.cc @@ -20,26 +20,26 @@ namespace mu2e { class ParticleCodeFilter : public art::EDFilter { - public: + public: using ParticleCodeConfig = fhicl::Sequence>; struct ModuleConfig { - using Name=fhicl::Name; - using Comment=fhicl::Comment; - fhicl::Atom printLevel { Name("PrintLevel"), Comment ("Printout Level"), 0 }; - fhicl::Atom simParticles { Name("SimParticles"), Comment("SimParticle collection") }; - ParticleCodeConfig codeConfig { Name("ParticleCodes"), Comment("particle code to select: PDG, creation, and termination code \n" - "(select 'uninitialized' to disable testing creation and/or termination codes)") }; + using Name=fhicl::Name; + using Comment=fhicl::Comment; + fhicl::Atom printLevel { Name("PrintLevel"), Comment ("Printout Level"), 0 }; + fhicl::Atom simParticles { Name("SimParticles"), Comment("SimParticle collection") }; + ParticleCodeConfig codeConfig { Name("ParticleCodes"), Comment("particle code to select: PDG, creation, and termination code \n" + "(select 'uninitialized' to disable testing creation and/or termination codes)") }; }; struct ParticleCodeSelector { - PDGCode::type pdgCode_; - ProcessCode::enum_type creationCode_, terminationCode_; - bool select(SimParticle const& part) const { - return part.pdgId() == pdgCode_ - && ( creationCode_ == ProcessCode::uninitialized || part.creationCode() == creationCode_) - && ( terminationCode_ == ProcessCode::uninitialized || part.stoppingCode() == terminationCode_); - } + PDGCode::type pdgCode_; + ProcessCode::enum_type creationCode_, terminationCode_; + bool select(SimParticle const& part) const { + return part.pdgId() == pdgCode_ + && ( creationCode_ == ProcessCode::uninitialized || part.creationCode() == creationCode_) + && ( terminationCode_ == ProcessCode::uninitialized || part.stoppingCode() == terminationCode_); + } }; using Parameters = art::EDFilter::Table; @@ -54,18 +54,18 @@ namespace mu2e { ParticleCodeFilter::ParticleCodeFilter(const Parameters& conf) : art::EDFilter{conf} , printLevel_(conf().printLevel()) - , simParticles_(consumes(conf().simParticles())) { - for(auto const& pconfig : conf().codeConfig()) { - ParticleCodeSelector pselector; - pselector.pdgCode_ = static_cast(std::get<0>(pconfig)); - pselector.creationCode_ = ProcessCode::findByName(std::get<1>(pconfig)); - pselector.terminationCode_ = ProcessCode::findByName(std::get<2>(pconfig)); - if(printLevel_ > 0) std::cout << "Creating selector of PDGcode " << pselector.pdgCode_ - << " creation code " << pselector.creationCode_ - << " termination code " << pselector.terminationCode_ << std::endl; - selectors_.push_back(pselector); + , simParticles_(consumes(conf().simParticles())) { + for(auto const& pconfig : conf().codeConfig()) { + ParticleCodeSelector pselector; + pselector.pdgCode_ = static_cast(std::get<0>(pconfig)); + pselector.creationCode_ = ProcessCode::findByName(std::get<1>(pconfig)); + pselector.terminationCode_ = ProcessCode::findByName(std::get<2>(pconfig)); + if(printLevel_ > 0) std::cout << "Creating selector of PDGcode " << pselector.pdgCode_ + << " creation code " << pselector.creationCode_ + << " termination code " << pselector.terminationCode_ << std::endl; + selectors_.push_back(pselector); + } } - } bool ParticleCodeFilter::filter(art::Event& event) { bool retval(false); @@ -73,14 +73,14 @@ namespace mu2e { auto const& simps = *simH; for (auto const& simp : simps) { if(printLevel_ > 1) std::cout << "Testing particle PDGcode " << simp.second.pdgId() - << " creationcode =" << simp.second.creationCode() - << " termination code =" << simp.second.stoppingCode() << std::endl; + << " creationcode =" << simp.second.creationCode() + << " termination code =" << simp.second.stoppingCode() << std::endl; for( auto const& selector : selectors_ ){ - if(selector.select(simp.second)){ - if(printLevel_ > 0) std::cout << "Found matching particle " << std::endl; - retval = true; - break; - } + if(selector.select(simp.second)){ + if(printLevel_ > 0) std::cout << "Found matching particle " << std::endl; + retval = true; + break; + } } } return retval; diff --git a/GlobalConstantsService/data/globalConstants_01.txt b/GlobalConstantsService/data/globalConstants_01.txt index 9cac77980b..cee896e29e 100644 --- a/GlobalConstantsService/data/globalConstants_01.txt +++ b/GlobalConstantsService/data/globalConstants_01.txt @@ -119,6 +119,9 @@ double physicsParams.Al.capture.photonRate = 2.0; double physicsParams.Al.capture.photon.1809keV.energy = 1.809; double physicsParams.Al.capture.photon.1809keV.intensity = 0.51; +//Ce+ endpoint energy +double physicsParams.Al.ePlusEndpointEnergy = 92.32; + //Mu2eII_SM21 Specific configuration //WARNING do not merge into master! #include "Offline/Mu2eG4/test/globalConstants_mu2eii.txt" diff --git a/GlobalConstantsService/inc/PhysicsParams.hh b/GlobalConstantsService/inc/PhysicsParams.hh index deabbfca31..e70443c5a3 100644 --- a/GlobalConstantsService/inc/PhysicsParams.hh +++ b/GlobalConstantsService/inc/PhysicsParams.hh @@ -88,6 +88,11 @@ namespace mu2e const std::string allowedMaterial = checkMaterial( material ); return _endpointEnergy.find(allowedMaterial)->second; } + + double getePlusEndpointEnergy(targetMat material = "") const { + const std::string allowedMaterial = checkMaterial( material ); + return _ePlusEndpointEnergy.find(allowedMaterial)->second; + } targetMat getStoppingTargetMaterial() const { return _chosenStoppingTargetMaterial; @@ -163,6 +168,7 @@ namespace mu2e std::map _bindingEnergy; std::map _muonEnergy; std::map _endpointEnergy; + std::map _ePlusEndpointEnergy; std::map _czarneckiCoefficient; std::map> _czarneckiCoefficients; diff --git a/GlobalConstantsService/src/PhysicsParams.cc b/GlobalConstantsService/src/PhysicsParams.cc index 9737e7fac3..82da344684 100644 --- a/GlobalConstantsService/src/PhysicsParams.cc +++ b/GlobalConstantsService/src/PhysicsParams.cc @@ -108,6 +108,9 @@ namespace mu2e { // Load capture gamma rays _1809keVGammaEnergy[material] = config.getDouble("physicsParams."+material+".capture.photon.1809keV.energy", 0); _1809keVGammaIntensity[material] = config.getDouble("physicsParams."+material+".capture.photon.1809keV.intensity", 0); + + //Ce+ endpoint + _ePlusEndpointEnergy[material] = config.getDouble("physicsParams."+material+".ePlusEndpointEnergy", 0); } // Load Shanker constants diff --git a/Mu2eG4/geom/geom_common_trackerVST.txt b/Mu2eG4/geom/geom_common_trackerVST.txt new file mode 100644 index 0000000000..2b5892dc9d --- /dev/null +++ b/Mu2eG4/geom/geom_common_trackerVST.txt @@ -0,0 +1,616 @@ +// +// Redirection to the current Mu2e top level geometry file. +// The file that is included will be time dependent. +// +// This puts things in extracted or "garage" position +#include "Mu2eG4/geom/geom_common_extracted.txt" +// If you'd rather have nominal position, comment above line and uncomment +// below +//#include "Mu2eG4/geom/geom_common.txt" + +vector tracker.nonExistingPlanes = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35}; +//int tracker.rotationPattern = 3; +//double tracker.oddStationRotation = 0.0; + +// Turn most of the Earth and Building into air +string building.backfill.beamline.foundation.s01.material = "G4_AIR"; +string building.backfill.beamline.foundation.s02.material = "G4_AIR"; +string building.backfill.beamline.foundation.s03.material = "G4_AIR"; +string building.backfill.beamline.foundation.s04.material = "G4_AIR"; +string building.backfill.beamline.foundation.s05.material = "G4_AIR"; +string building.backfill.beamline.foundation.s06.material = "G4_AIR"; +string building.backfill.beamline.north.material = "G4_AIR"; +string building.backfill.beamline.south.material = "G4_AIR"; +string building.backfill.beamline.material = "G4_AIR"; +string building.backfill.escape.inner.01.material = "G4_AIR"; +string building.backfill.escape.inner.02.material = "G4_AIR"; +string building.backfill.escape.inner.03.material = "G4_AIR"; +string building.backfill.escape.stair.01.material = "G4_AIR"; +string building.backfill.escape.stair.02.material = "G4_AIR"; +string building.backfill.escape.stair.03.material = "G4_AIR"; +string building.backfill.escape.stair.E01.material = "G4_AIR"; +string building.backfill.escape.stair.E02.material = "G4_AIR"; +string building.backfill.escape.stair.E03.material = "G4_AIR"; +string building.backfill.escape.stair.E04.material = "G4_AIR"; +string building.backfill.escape.stair.W01.material = "G4_AIR"; +string building.backfill.escape.stair.W02.material = "G4_AIR"; +string building.backfill.escape.stair.W03.material = "G4_AIR"; +string building.backfill.escape.stair.W04.material = "G4_AIR"; +string building.backfill.foundation.N.material = "G4_AIR"; +string building.backfill.psArea.baselevel.material = "G4_AIR"; +string building.backfill.psArea.Inter.material = "G4_AIR"; +string building.backfill.psArea.Lower.material = "G4_AIR"; +string building.backfill.psArea.RWallFootLevel.material = "G4_AIR"; +string building.backfill.psArea.TopLayer.material = "G4_AIR"; +string building.backfill.psHatch.E.material = "G4_AIR"; +string building.backfill.psHatch.S.material = "G4_AIR"; +string building.backfill.TSarea-W.1Lower.material = "G4_AIR"; +string building.backfill.TSarea-W.1.material = "G4_AIR"; +string building.backfill.TSarea-W.1UpperNotch2.material = "G4_AIR"; +string building.backfill.TSarea-W.1UpperNotchLower.material = "G4_AIR"; +string building.backfill.TSarea-W.1UpperNotchUpper1.material = "G4_AIR"; +string building.backfill.TSarea-W.1UpperNotchUpper2.material = "G4_AIR"; +string building.backfill.TSarea-W.1UpperNotchUpper3.material = "G4_AIR"; +string building.backfill.TSarea-W.2.material = "G4_AIR"; +string building.backfill.TSarea-W.2Upper.material = "G4_AIR"; +string building.beamline.block.wall.E.material = "G4_AIR"; +string building.beamline.block.wall.S.material = "G4_AIR"; +string building.beamline.block.wall.top.material = "G4_AIR"; +string building.beamline.ceiling.E.material = "G4_AIR"; +string building.beamline.ceiling.material = "G4_AIR"; +string building.beamline.escape.door.header.material = "G4_AIR"; +string building.beamline.foundation.s01.material = "G4_AIR"; +string building.beamline.foundation.s02.material = "G4_AIR"; +string building.beamline.foundation.s03.material = "G4_AIR"; +string building.beamline.foundation.s04.material = "G4_AIR"; +string building.beamline.foundation.s05.material = "G4_AIR"; +string building.beamline.foundation.s06.material = "G4_AIR"; +string building.beamline.foundation.upper.material = "G4_AIR"; +string building.beamline.lower.south.material = "G4_AIR"; +string building.beamline.NW.material = "G4_AIR"; +string building.beamline.material = "G4_AIR"; +string building.beamline.upper.E.material = "G4_AIR"; +string building.beamline.upper.N.material = "G4_AIR"; +string building.beamline.upper.NW.material = "G4_AIR"; +string building.beamline.upper.S.material = "G4_AIR"; +string building.beamline.upper.material = "G4_AIR"; +string building.beamline.material = "G4_AIR"; +string dirt.beamline.berm.sw.material = "G4_AIR"; +string dirt.beamline.berm.material = "G4_AIR"; +string dirt.beamline.berm.west.material = "G4_AIR"; +string dirt.beamline.ceiling.E.material = "G4_AIR"; +string dirt.beamline.ceiling.W.material = "G4_AIR"; +string dirt.beamline.slab2.NC.material = "G4_AIR"; +string dirt.beamline.slab2.NE.material = "G4_AIR"; +string dirt.beamline.slab2.N.material = "G4_AIR"; +string dirt.beamline.slab2.NW.material = "G4_AIR"; +string dirt.beamline.slab.E.material = "G4_AIR"; +string dirt.beamline.slab.NC.material = "G4_AIR"; +string dirt.beamline.slab.material = "G4_AIR"; +string dirt.beamline.slab.W.material = "G4_AIR"; +string dirt.beamline.material = "G4_AIR"; +string dirt.beamline.upper.material = "G4_AIR"; +string dirt.beamline.material = "G4_AIR"; +string dirt.dsArea.alcove1.material = "G4_AIR"; +string dirt.dsArea.alcove2.material = "G4_AIR"; +string dirt.dsArea.alcove3.material = "G4_AIR"; +string dirt.dsArea.downstreamCeiling.vslab1.material = "G4_AIR"; +string dirt.dsArea.downstreamCeiling.vslab2.material = "G4_AIR"; +string dirt.dsArea.downstreamCeiling.vslab3.material = "G4_AIR"; +string dirt.dsArea.downstreamCeiling.vslab4.material = "G4_AIR"; +string dirt.dsArea.downstreamCeiling.vslab5.material = "G4_AIR"; +string dirt.dsArea.downstreamCeiling.vslab6.material = "G4_AIR"; +string dirt.dsArea.elevator.material = "G4_AIR"; +string dirt.dsArea.elevator.upper.material = "G4_AIR"; +string dirt.dsArea.firstFloor.S.material = "G4_AIR"; +string dirt.dsArea.material = "G4_AIR"; +string dirt.dsArea.upper.SE.material = "G4_AIR"; +string dirt.dsArea.upper.material = "G4_AIR"; +string dirt.escape.ceiling.material = "G4_AIR"; +string dirt.escape.stair.04.material = "G4_AIR"; +string dirt.escape.stair.07.material = "G4_AIR"; +string dirt.escape.stair.11.material = "G4_AIR"; +string dirt.extMon.ceiling.material = "G4_AIR"; +string dirt.extMon.material = "G4_AIR"; +string dirt.extMon.upper.material = "G4_AIR"; +string dirt.extMon.material = "G4_AIR"; +string dirt.foundation.E.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.10.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.11.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.1.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.2.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.3.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.4.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.5.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.6.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.7.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.8.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.9.material = "G4_AIR"; +string dirt.foundation.extMonPSarea.material = "G4_AIR"; +string dirt.foundation.extMon.material = "G4_AIR"; +string dirt.foundation.island.material = "G4_AIR"; +string dirt.foundation.N.material = "G4_AIR"; +string dirt.foundation.Sd.material = "G4_AIR"; +string dirt.foundation.Smid.material = "G4_AIR"; +string dirt.foundation.Su.material = "G4_AIR"; +string dirt.island.material = "G4_AIR"; +string dirt.island.upper.material = "G4_AIR"; +string dirt.passage.E.material = "G4_AIR"; +string dirt.psArea.dirtSlab2.N.Beyond.material = "G4_AIR"; +string dirt.psArea.dirtSlab2.N.material = "G4_AIR"; +string dirt.psArea.dirtSlab2.S.material = "G4_AIR"; +string dirt.psArea.dirtSlab.N.material = "G4_AIR"; +string dirt.psArea.dirtSlab.S.material = "G4_AIR"; +string dirt.psArea.material = "G4_AIR"; +string dirt.psArea.upper2.N.material = "G4_AIR"; +string dirt.psArea.upper2.sliver.N.material = "G4_AIR"; +string dirt.psArea.upper.N.material = "G4_AIR"; +string dirt.psArea.upper.sliver.S.material = "G4_AIR"; +string dirt.psArea.upper.S.material = "G4_AIR"; +string dirt.psArea.WLower.material = "G4_AIR"; +string dirt.psArea.W.material = "G4_AIR"; +string dirt.psWall.upper.sliver.material = "G4_AIR"; +string dirt.psWall.upper.material = "G4_AIR"; +string dirt.remote.handling.ceiling.material = "G4_AIR"; +string dirt.remote.handling.material = "G4_AIR"; +string dirt.retaining.Wall.berm.east.material = "G4_AIR"; +string dirt.retaining.Wall.berm.west.material = "G4_AIR"; +string dirt.S.retaining.Wall.Foot.material = "G4_AIR"; +string dirt.tempDirt.backfill.psArea.baselevel.material = "G4_AIR"; +string dirt.tempDirt.backfill.psArea.Inter.material = "G4_AIR"; +string dirt.tempDirt.backfill.psArea.Lower.material = "G4_AIR"; +string dirt.tempDirt.backfill.psArea.RWallFootLevel.material = "G4_AIR"; +string dirt.Temp.SofRetWallTop.material = "G4_AIR"; +string dirt.tsArea.alcove.material = "G4_AIR"; +string dirt.tsArea.stairwell.material = "G4_AIR"; +string dirt.tsArea.upper2.W.material = "G4_AIR"; +string dirt.tsArea.upper.W.material = "G4_AIR"; +string dirt.tsArea.W.material = "G4_AIR"; +string dirt.tsDsArea.firstFloorEdge.N.material = "G4_AIR"; +string dirt.upToGradeLevel.W.material = "G4_AIR"; +string dirt.WallFill.1.material = "G4_AIR"; +string dirt.WallFill.2.material = "G4_AIR"; +string dirt.W.TSareaCF2notch.material = "G4_AIR"; +string dirt.W.TSareaCF2.material = "G4_AIR"; +string dirt.W.TSareaCFbeam.material = "G4_AIR"; +string building.dsArea.alcove1.ceiling.material = "G4_AIR"; +string building.dsArea.alcove2.ceiling.material = "G4_AIR"; +string building.dsArea.alcove3.ceiling.material = "G4_AIR"; +string building.dsArea.alcove4.ceiling.material = "G4_AIR"; +string building.dsArea.alcove5.ceiling.material = "G4_AIR"; +string building.dsArea.downstreamCeiling.material = "G4_AIR"; +string building.dsArea.downstreamCeiling.vslab1.material = "G4_AIR"; +string building.dsArea.downstreamCeiling.vslab2.material = "G4_AIR"; +string building.dsArea.downstreamCeiling.vslab3.material = "G4_AIR"; +string building.dsArea.downstreamCeiling.vslab4.material = "G4_AIR"; +string building.dsArea.downstreamCeiling.vslab5.material = "G4_AIR"; +string building.dsArea.downstreamCeiling.vslab6.material = "G4_AIR"; +string building.dsArea.downstreamUpstairs.floor.material = "G4_AIR"; +string building.dsArea.elevator.ceiling.material = "G4_AIR"; +string building.dsArea.elevator.interior.lower.material = "G4_AIR"; +string building.dsArea.elevator.interior.material = "G4_AIR"; +string building.dsArea.elevator.upper.material = "G4_AIR"; +string building.dsArea.firstfloor.hatchgap.material = "G4_AIR"; +string building.dsArea.firstFloor.S.material = "G4_AIR"; +string building.dsArea.hatchblock.material = "G4_AIR"; +string building.dsArea.hatcheledge.material = "G4_AIR"; +string building.dsArea.hatchnedge.material = "G4_AIR"; +string building.dsArea.hatchnledge.material = "G4_AIR"; +string building.dsArea.hatchsedge.material = "G4_AIR"; +string building.dsArea.hatchsledge.material = "G4_AIR"; +string building.dsArea.hatchwledge.material = "G4_AIR"; +string building.dsArea.trench.cover.material = "G4_AIR"; +string building.dsArea.trench.floor.material = "G4_AIR"; +string building.dsArea.material = "G4_AIR"; +string building.dsArea.upper.material = "G4_AIR"; +string building.dsArea.upstreamCeiling.material = "G4_AIR"; +string building.escape.ceiling.E.material = "G4_AIR"; +string building.escape.ceiling.W.material = "G4_AIR"; +string building.escape.hatch.lid.material = "G4_AIR"; +string building.escape.hatch.N.material = "G4_AIR"; +string building.escape.hatch.S.material = "G4_AIR"; +string building.escape.stair.01.material = "G4_AIR"; +string building.escape.stair.02.material = "G4_AIR"; +string building.escape.stair.03.material = "G4_AIR"; +string building.escape.stair.04.material = "G4_AIR"; +string building.escape.stair.05.material = "G4_AIR"; +string building.escape.stair.06.material = "G4_AIR"; +string building.escape.stair.07.material = "G4_AIR"; +string building.escape.stair.08.material = "G4_AIR"; +string building.escape.stair.09.material = "G4_AIR"; +string building.escape.stair.10.material = "G4_AIR"; +string building.escape.stair.11.material = "G4_AIR"; +string building.escape.stair.12.material = "G4_AIR"; +string building.escape.stair.13.material = "G4_AIR"; +string building.escape.stair.brick.material = "G4_AIR"; +string building.escape.stair.foundation.01.material = "G4_AIR"; +string building.escape.stair.foundation.02.material = "G4_AIR"; +string building.escape.stair.foundation.03.material = "G4_AIR"; +string building.escape.stair.foundation.04.material = "G4_AIR"; +string building.escape.stair.wall.E01.material = "G4_AIR"; +string building.escape.stair.wall.E02.material = "G4_AIR"; +string building.escape.stair.wall.E03.material = "G4_AIR"; +string building.escape.stair.wall.E04.material = "G4_AIR"; +string building.escape.stair.wall.W01.material = "G4_AIR"; +string building.escape.stair.wall.W02.material = "G4_AIR"; +string building.escape.stair.wall.W03.material = "G4_AIR"; +string building.escape.stair.wall.W04.material = "G4_AIR"; +string building.escape.wall.E.material = "G4_AIR"; +string building.exteriorWall.E.material = "G4_AIR"; +string building.exteriorWall.N.material = "G4_AIR"; +string building.exteriorWall.S.material = "G4_AIR"; +string building.extMon.bit.N.material = "G4_AIR"; +string building.extMon.bit.S.material = "G4_AIR"; +string building.extMon.ceiling.material = "G4_AIR"; +string building.extMon.material = "G4_AIR"; +string building.extMon.upper.material = "G4_AIR"; +string building.extMon.material = "G4_AIR"; +string building.firstFloor.wall.extension.material = "G4_AIR"; +string building.firstFloor.wall.material = "G4_AIR"; +string building.floor.N.material = "G4_AIR"; +string building.floor.passage.material = "G4_AIR"; +string building.floor.remote.material = "G4_AIR"; +string building.floor.Sd.material = "G4_AIR"; +string building.floor.Su.material = "G4_AIR"; +string building.foundation.extMonPSarea.10.material = "G4_AIR"; +string building.foundation.extMonPSarea.11.material = "G4_AIR"; +string building.foundation.extMonPSarea.1.material = "G4_AIR"; +string building.foundation.extMonPSarea.2.material = "G4_AIR"; +string building.foundation.extMonPSarea.3.material = "G4_AIR"; +string building.foundation.extMonPSarea.4.material = "G4_AIR"; +string building.foundation.extMonPSarea.5.material = "G4_AIR"; +string building.foundation.extMonPSarea.6.material = "G4_AIR"; +string building.foundation.extMonPSarea.7.material = "G4_AIR"; +string building.foundation.extMonPSarea.8.material = "G4_AIR"; +string building.foundation.extMonPSarea.9.material = "G4_AIR"; +string building.foundation.extMonPSarea.material = "G4_AIR"; +string building.foundation.extMon.material = "G4_AIR"; +string building.foundation.N.material = "G4_AIR"; +string building.foundation.Sd.material = "G4_AIR"; +string building.foundation.Smid.material = "G4_AIR"; +string building.foundation.Su.material = "G4_AIR"; +string building.island.N.material = "G4_AIR"; +string building.island.N.upper.material = "G4_AIR"; +string building.island.S.material = "G4_AIR"; +string building.island.S.upper.material = "G4_AIR"; +string building.N.retaining.Wall.aboveRH.material = "G4_AIR"; +string building.N.retaining.Wall.extension.foot.1.material = "G4_AIR"; +string building.N.retaining.Wall.W.extension.material = "G4_AIR"; +string building.passage.ceiling.material = "G4_AIR"; +string building.passage.E.material = "G4_AIR"; +string building.passage.W.material = "G4_AIR"; +string building.psArea.ceiling.E.material = "G4_AIR"; +string building.psArea.ceiling.N.material = "G4_AIR"; +string building.psArea.ceiling.SW.material = "G4_AIR"; +string building.psArea.ceiling.material = "G4_AIR"; +string building.psAreaCF1.material = "G4_AIR"; +string building.psAreaCF2.material = "G4_AIR"; +string building.psAreaCF3.material = "G4_AIR"; +string building.psAreaCF4.material = "G4_AIR"; +string building.psArea.hatch.block.material = "G4_AIR"; +string building.psArea.hatch.lid.material = "G4_AIR"; +string building.psArea.hatch.lip.N.material = "G4_AIR"; +string building.psArea.hatch.lip.S.material = "G4_AIR"; +string building.psArea.hatch.lower.material = "G4_AIR"; +string building.psArea.hatch.upper.material = "G4_AIR"; +string building.psArea.remote.handling.wall.material = "G4_AIR"; +string building.psArea.ShieldingBlock.material = "G4_AIR"; +string building.psArea.material = "G4_AIR"; +string building.psArea.upper2.N.material = "G4_AIR"; +string building.psArea.upperNotch.material = "G4_AIR"; +string building.psArea.upper.N.material = "G4_AIR"; +string building.psArea.upper.S.material = "G4_AIR"; +string building.psArea.material = "G4_AIR"; +string building.psWall.upper.material = "G4_AIR"; +string building.radiation.slab1.material = "G4_AIR"; +string building.radiation.slab2.material = "G4_AIR"; +string building.radiation.slab3.material = "G4_AIR"; +string building.radiation.slab4.material = "G4_AIR"; +string building.radiation.slabne1.material = "G4_AIR"; +string building.radiation.slabne2.material = "G4_AIR"; +string building.radiation.slabne3.material = "G4_AIR"; +string building.radiation.slabne4.material = "G4_AIR"; +string building.radiation.slabne5.material = "G4_AIR"; +string building.remote.handling.ceiling.Sliver.material = "G4_AIR"; +string building.remote.handling.ceiling.strip.material = "G4_AIR"; +string building.remote.handling.ceiling.material = "G4_AIR"; +string building.remote.handling.door.frame.material = "G4_AIR"; +string building.remote.handling.hatch.block.material = "G4_AIR"; +string building.remote.handling.Hatch.Lid.material = "G4_AIR"; +string building.remote.handling.Hatch.Lower.material = "G4_AIR"; +string building.remote.handling.Hatch.Upper.material = "G4_AIR"; +string building.remote.handling.Interior.Beam.material = "G4_AIR"; +string building.remote.handling.Interior.Wall.1.material = "G4_AIR"; +string building.remote.handling.Interior.Wall.2.material = "G4_AIR"; +string building.remote.handling.Interior.Wall.3.material = "G4_AIR"; +string building.remote.handling.Interior.Wall.4.material = "G4_AIR"; +string building.remote.handling.Interior.WallNotch.1.material = "G4_AIR"; +string building.remote.handling.Interior.WallNotch.2.material = "G4_AIR"; +string building.remote.handling.material = "G4_AIR"; +string building.S.retaining.Wall.Foot.material = "G4_AIR"; +string building.S.retaining.Wall.material = "G4_AIR"; +string building.tempDirt.backfill.psArea.baselevel.material = "G4_AIR"; +string building.tempDirt.backfill.psArea.Inter.material = "G4_AIR"; +string building.tempDirt.backfill.psArea.Lower.material = "G4_AIR"; +string building.tempDirt.backfill.psArea.RWallFootLevel.material = "G4_AIR"; +string building.tempDirt.backfill.psArea.TopLayer.material = "G4_AIR"; +string building.tsArea.alcove.lowerRoof.material = "G4_AIR"; +string building.tsArea.alcove.vertical.N.material = "G4_AIR"; +string building.tsArea.alcove.vertical.S.material = "G4_AIR"; +string building.tsArea.hatchblock.northBot.material = "G4_AIR"; +string building.tsArea.hatchblock.northTop.material = "G4_AIR"; +string building.tsArea.hatchblock.southBot.material = "G4_AIR"; +string building.tsArea.hatchblock.southTop.material = "G4_AIR"; +string building.tsArea.hatcheledge.material = "G4_AIR"; +string building.tsArea.hatchwedge.material = "G4_AIR"; +string building.tsArea.hatchwledge.material = "G4_AIR"; +string building.tsArea.stairwell.ceiling.material = "G4_AIR"; +string building.tsArea.stairwell.material = "G4_AIR"; +string building.tsArea.trench.floor.material = "G4_AIR"; +string building.tsArea.upper2.W.material = "G4_AIR"; +string building.tsArea.upper.W.material = "G4_AIR"; +string building.tsArea.W.material = "G4_AIR"; +string building.tsDsArea.firstFloorEdge.N.material = "G4_AIR"; +string building.tsDsArea.wallinsert.N.material = "G4_AIR"; +string building.W.TSareaCF1notch.material = "G4_AIR"; +string building.W.TSareaCF1.material = "G4_AIR"; +string building.W.TSareaCF2notch.material = "G4_AIR"; +string building.W.TSareaCF2.material = "G4_AIR"; +string building.W.TSareaCFbeam.material = "G4_AIR"; + +// Turn most of contents of building into air... +string calorimeter.vacuumMaterial = "G4_AIR"; +string calorimeter.crystalMaterial = "G4_AIR"; +string calorimeter.crystalFrameMaterial = "G4_AIR"; +string calorimeter.wrapperMaterial = "G4_AIR"; +string calorimeter.innerRingMaterial = "G4_AIR"; +string calorimeter.innerStepMaterial = "G4_AIR"; +string calorimeter.outerRingMaterial = "G4_AIR"; +string calorimeter.readoutMaterial = "G4_AIR"; +string calorimeter.FEEMaterial = "G4_AIR"; +string calorimeter.coolPipeMaterial = "G4_AIR"; +string calorimeter.pipeMaterial = "G4_AIR"; +string calorimeter.FPFoamMaterial = "G4_AIR"; +string calorimeter.FPCarbonMaterial = "G4_AIR"; +string calorimeter.BackPlateMaterial = "G4_AIR"; +string calorimeter.FEEBoxMaterial = "G4_AIR"; +string calorimeter.BPStripMaterial = "G4_AIR"; +string calorimeter.crateMaterial = "G4_AIR"; +string calorimeter.shieldMaterial = "G4_AIR"; +string calorimeter.radiatorMaterial = "G4_AIR"; +string calorimeter.activeStripMaterial = "G4_AIR"; +string calorimeter.passiveStripMaterial = "G4_AIR"; +string crs.scintillatorBarMaterialName = "G4_AIR"; +string crs.absorberMaterialName = "G4_AIR"; +string crs.aluminumSheetMaterialName = "G4_AIR"; +string crs.CMBMaterialName = "G4_AIR"; +string crs.FEBMaterialName = "G4_AIR"; +string crs.supportStructureMaterialName = "G4_AIR"; +string degrader.filter.materialName = "G4_AIR"; +string degrader.frame.materialName = "G4_AIR"; +string degrader.counterweight.materialName = "G4_AIR"; +string degrader.rod.materialName = "G4_AIR"; +string ds.materialName = "G4_AIR"; +string ds.insideMaterialName = "G4_AIR"; +string ds.innerLiningMaterial = "G4_AIR"; +string dsShield.materialName = "G4_AIR"; +string dsShield.insideMaterialName = "G4_AIR"; +string dsCoil.materialName = "G4_AIR"; +vector dsCoil.materialNameVector = { + "G4_AIR", "G4_AIR", "G4_AIR", "G4_AIR", "G4_AIR", "G4_AIR", "G4_AIR", + "G4_AIR", "G4_AIR", "G4_AIR", "G4_AIR" }; +string dsSpacer.materialName = "G4_AIR"; +string dsSupport.materialName = "G4_AIR"; +string ds.RingMaterialType = "G4_AIR"; +string ds.RailMaterialType = "G4_AIR"; +string ds.BBlockMaterialType = "G4_AIR"; +string ds.MBSSupport.material = "G4_AIR"; +string ds.CableRunCal.material = "G4_AIR"; +string ds.CableRunTrk.material = "G4_AIR"; +string ds.vacuumMaterialName = "G4_AIR"; +string vpsp.material = "G4_AIR"; +string ifb.material = "G4_AIR"; +string ifb.endwindow.material = "G4_AIR"; +string ElectronicRack.materialType1 = "G4_AIR"; +string ElectronicRack.materialType2 = "G4_AIR"; +string extMonFNAL.steelMaterial = "G4_AIR"; +string extMonFNAL.concreteMaterial = "G4_AIR"; +string extMonFNAL.filter.magnet.material = "G4_AIR"; +string extMonFNAL.spectrometer.magnet.material = "G4_AIR"; +string extMonFNAL.planeMaterial = "G4_AIR"; +string extMonFNAL.muonID.material = "G4_AIR"; +string extMonFNAL.room.materialName = "G4_AIR"; +string extMonFNAL.room.wall.materialName = "G4_AIR"; +string ExtShieldDownstream.materialType1 = "G4_AIR"; +string ExtShieldDownstream.materialType2 = "G4_AIR"; +string ExtShieldDownstream.materialType3 = "G4_AIR"; +string ExtShieldDownstream.materialType4 = "G4_AIR"; +string ExtShieldDownstream.materialType5 = "G4_AIR"; +string ExtShieldDownstream.materialType6 = "G4_AIR"; +string ExtShieldDownstream.materialType7 = "G4_AIR"; +string ExtShieldDownstream.materialType8 = "G4_AIR"; +string ExtShieldDownstream.materialType9 = "G4_AIR"; +string ExtShieldDownstream.materialType10 = "G4_AIR"; +string ExtShieldDownstream.materialType11 = "G4_AIR"; +string ExtShieldDownstream.materialType12 = "G4_AIR"; +string ExtShieldDownstream.materialType13 = "G4_AIR"; +string ExtShieldDownstream.materialType14 = "G4_AIR"; +string ExtShieldDownstream.materialType15 = "G4_AIR"; +string ExtShieldDownstream.materialType16 = "G4_AIR"; +string ExtShieldDownstream.materialType17 = "G4_AIR"; +string ExtShieldDownstream.materialType18 = "G4_AIR"; +string ExtShieldDownstream.materialType19 = "G4_AIR"; +string ExtShieldDownstream.materialType20 = "G4_AIR"; +string ExtShieldDownstream.materialType21 = "G4_AIR"; +string ExtShieldDownstream.materialType22 = "G4_AIR"; +string ExtShieldDownstream.materialType23 = "G4_AIR"; +string ExtShieldDownstream.materialType24 = "G4_AIR"; +string ExtShieldDownstream.materialType25 = "G4_AIR"; +string ExtShieldDownstream.materialType26 = "G4_AIR"; +string ExtShieldDownstream.materialType27 = "G4_AIR"; +string ExtShieldDownstream.materialType28 = "G4_AIR"; +string ExtShieldDownstream.materialType29 = "G4_AIR"; +string ExtShieldDownstream.materialType30 = "G4_AIR"; +string ExtShieldUpstream.materialType1 = "G4_AIR"; +string ExtShieldUpstream.materialType2 = "G4_AIR"; +string ExtShieldUpstream.materialType3 = "G4_AIR"; +string ExtShieldUpstream.materialType4 = "G4_AIR"; +string ExtShieldUpstream.materialType5 = "G4_AIR"; +string ExtShieldUpstream.materialType6 = "G4_AIR"; +string ExtShieldUpstream.materialType7 = "G4_AIR"; +string ExtShieldUpstream.materialType8 = "G4_AIR"; +string ExtShieldUpstream.materialType9 = "G4_AIR"; +string ExtShieldUpstream.materialType10 = "G4_AIR"; +string ExtShieldUpstream.materialType11 = "G4_AIR"; +string ExtShieldUpstream.materialType12 = "G4_AIR"; +string ExtShieldUpstream.materialType13 = "G4_AIR"; +string ExtShieldUpstream.materialType14 = "G4_AIR"; +string ExtShieldUpstream.materialType15 = "G4_AIR"; +string ExtShieldUpstream.materialType16 = "G4_AIR"; +string ExtShieldUpstream.materialType17 = "G4_AIR"; +string ExtShieldUpstream.materialType18 = "G4_AIR"; +string ExtShieldUpstream.materialType19 = "G4_AIR"; +string ExtShieldUpstream.materialType20 = "G4_AIR"; +string hall.wallMaterialName = "G4_AIR"; +string hall.ceilingMaterialName = "G4_AIR"; +string hall.insideMaterialName = "G4_AIR"; +string world.materialName = "G4_AIR"; +string dirt.overburdenMaterialName = "G4_AIR"; +string mbs.BSTSMaterialName = "G4_AIR"; +string mbs.SPBSSup1MaterialName = "G4_AIR"; +string mbs.SPBSSup2MaterialName = "G4_AIR"; +string mbs.SPBSLMaterialName = "G4_AIR"; +string mbs.SPBSCMaterialName = "G4_AIR"; +string mbs.SPBSRMaterialName = "G4_AIR"; +string mbs.BSTCMaterialName = "G4_AIR"; +string mbs.BSBSMaterialName = "G4_AIR"; +string mbs.CalShieldRingMaterialName = "G4_AIR"; +string mbs.CLV2MaterialName = "G4_AIR"; +string mbs.CLV2.absorber.MaterialName = "G4_AIR"; +string piondeg.materialName = "G4_AIR"; +string Pipe.fillMaterialType1 = "G4_AIR"; +string Pipe.fillMaterialType2 = "G4_AIR"; +string Pipe.fillMaterialType3 = "G4_AIR"; +string Pipe.fillMaterialType4 = "G4_AIR"; +string Pipe.fillMaterialType5 = "G4_AIR"; +string Pipe.fillMaterialType6 = "G4_AIR"; +string Pipe.materialType1Comp1 = "G4_AIR"; +string Pipe.materialType1Comp2 = "G4_AIR"; +string Pipe.materialType1Comp3 = "G4_AIR"; +string Pipe.materialType1Comp4 = "G4_AIR"; +string Pipe.materialType1Comp5 = "G4_AIR"; +string Pipe.materialType1Comp6 = "G4_AIR"; +string Pipe.materialType1Comp7 = "G4_AIR"; +string Pipe.materialType1Comp8 = "G4_AIR"; +string Pipe.materialType1Comp9 = "G4_AIR"; +string Pipe.materialType1Comp10 = "G4_AIR"; +string Pipe.materialType2Comp1 = "G4_AIR"; +string Pipe.materialType2Comp2 = "G4_AIR"; +string Pipe.materialType2Comp3 = "G4_AIR"; +string Pipe.materialType2Comp4 = "G4_AIR"; +string Pipe.materialType2Comp5 = "G4_AIR"; +string Pipe.materialType2Comp6 = "G4_AIR"; +string Pipe.materialType2Comp7 = "G4_AIR"; +string Pipe.materialType2Comp8 = "G4_AIR"; +string Pipe.materialType2Comp9 = "G4_AIR"; +string Pipe.materialType2Comp10 = "G4_AIR"; +string Pipe.materialType3Comp1 = "G4_AIR"; +string Pipe.materialType4Comp1 = "G4_AIR"; +string Pipe.materialType5Comp1 = "G4_AIR"; +string Pipe.materialType6Comp1 = "G4_AIR"; +string PS.VacVessel.materialName = "G4_AIR"; +string PS.vacuumMaterialName = "G4_AIR"; +string PS.vacuumG4Material = "G4_AIR"; +string PS.ring.materialName = "G4_AIR"; +string PS.Coil.materialName = "G4_AIR"; +string PS.CoilShell.materialName = "G4_AIR"; +string targetPS_targetCoreMaterial = "G4_AIR"; +string targetPS_targetFinMaterial = "G4_AIR"; +string targetPS_supportRingMaterial = "G4_AIR"; +string targetPS_spokeMaterial = "G4_AIR"; +string targetPS_targetVacuumMaterial = "G4_AIR"; +string protonabsorber.materialName = "G4_AIR"; +string protonabsorber.ipa.wireMaterial = "G4_AIR"; +string protonabsorber.ipa.endRingMaterial = "G4_AIR"; +string protonabsorber.outerPAMaterialName = "G4_AIR"; +string protonabsorber.oPASupportMaterialName = "G4_AIR"; +string protonBeamDump.material.core = "G4_AIR"; +string protonBeamDump.material.shielding = "G4_AIR"; +string protonBeamDump.material.air = "G4_AIR"; +string PSEnclosure.shell.materialName = "G4_AIR"; +string PSEnclosure.window1.materialName = "G4_AIR"; +string PSEnclosure.window2.materialName = "G4_AIR"; +string PSExternalShielding.materialName = "G4_AIR"; +string PSShield.material1 = "G4_AIR"; +string PSShield.material2 = "G4_AIR"; +string PSShield.material3 = "G4_AIR"; +string PSShield.material4 = "G4_AIR"; +string PSShield.frontRing.material = "G4_AIR"; +string PSShield.backRing.material = "G4_AIR"; +string PSShield.waterRing.material = "G4_AIR"; +string PSShield.sheathRing.material = "G4_AIR"; +string PSShield.inlet.materialName = "G4_AIR"; +string Saddle.materialType1 = "G4_AIR"; +string Saddle.materialType2 = "G4_AIR"; +string Saddle.materialType3 = "G4_AIR"; +string Saddle.materialType4 = "G4_AIR"; +string Saddle.materialType5 = "G4_AIR"; +string Saddle.materialType6 = "G4_AIR"; +string Saddle.materialType7 = "G4_AIR"; +string Saddle.materialType8 = "G4_AIR"; +string Saddle.materialType9 = "G4_AIR"; +string stm.det1.material = "G4_AIR"; +string stm.det1.can.material = "G4_AIR"; +string stm.det1.can.UpStrWindowMaterial = "G4_AIR"; +string stm.det2.material = "G4_AIR"; +string stm.det2.can.material = "G4_AIR"; +string stm.det2.can.UpStrWindowMaterial = "G4_AIR"; +string stm.SScollimator.material = "G4_AIR"; +string stm.SScollimator.liner.material = "G4_AIR"; +string stm.SScollimator.hole.liner.material = "G4_AIR"; +string stm.FOVcollimator.material = "G4_AIR"; +string stm.FOVcollimator.liner.material = "G4_AIR"; +string stm.FOVcollimator.hole.liner.material = "G4_AIR"; +string stm.FOVcollimator.absorber.material = "G4_AIR"; +string stm.magnet.material = "G4_AIR"; +string stm.magnet.stand.material = "G4_AIR"; +string stm.pipe.material = "G4_AIR"; +string stm.pipe.gas.material = "G4_AIR"; +string stm.pipe.UpStrWindow.material = "G4_AIR"; +string stm.pipe.DnStrWindow.material = "G4_AIR"; +string stm.detector.stand.material = "G4_AIR"; +string stm.shield.materialLiner = "G4_AIR"; +string stm.shield.material = "G4_AIR"; +string dummyStoppingTarget.material = "G4_AIR"; +string stoppingTarget.fillMaterial = "G4_AIR"; +string stoppingTarget.foilTarget_supportStructure_fillMaterial = "G4_AIR"; +string ts.materialName = "G4_AIR"; +string ts.downstreamVacuumMaterialName = "G4_AIR"; +string ts.upstreamVacuumMaterialName = "G4_AIR"; +string ts.RingMaterialType = "G4_AIR"; +string ts.polyliner.materialName = "G4_AIR"; +string pbar.materialName = "G4_AIR"; +string pbar.support.material = "G4_AIR"; +string pbar.coll1In.material1Name = "G4_AIR"; +string pbar.coll1In.supportMaterialName = "G4_AIR"; +string pbar.coll1In.frameMaterialName = "G4_AIR"; +string pbar.coll1In.tabMaterialName = "G4_AIR"; +string pbar.coll1In.pegMaterialName = "G4_AIR"; +string pbar.coll1Out.material1Name = "G4_AIR"; +string ts.coll1.material1Name = "G4_AIR"; +string ts.coll1.material2Name = "G4_AIR"; +string ts.coll1.material3Name = "G4_AIR"; +string ts.coll3.materialName = "G4_AIR"; +string ts.flashBlockUp.Material = "G4_AIR"; +string ts.flashBlockDn.Material = "G4_AIR"; +string ts.coll5.material1Name = "G4_AIR"; +string ts.coll5.material2Name = "G4_AIR"; +string muondegrader.materialName = "G4_AIR"; +string ts.coils.material = "G4_AIR"; +string ts.cas.materialName = "G4_AIR"; +string tsda.materialName = "G4_AIR"; + +// This tells emacs to view this file in c++ mode. +// Local Variables: +// mode:c++ +// End: diff --git a/Mu2eG4/inc/HelicalProtonAbsorber.hh b/Mu2eG4/inc/HelicalProtonAbsorber.hh index 650e76dd08..dc50d846e4 100644 --- a/Mu2eG4/inc/HelicalProtonAbsorber.hh +++ b/Mu2eG4/inc/HelicalProtonAbsorber.hh @@ -1,159 +1,159 @@ -#ifndef MU2EG4_HELICALPROTONABSORBER_HH -#define MU2EG4_HELICALPROTONABSORBER_HH -// -// Helical Proton Absorber main class -// -// -// Original author Suerfu, implemented by G. Tassielli -// -// Notes: -// Construct the Helical Proton Absorber - -// C++ includes -#include - -// Framework includes -#include "messagefacility/MessageLogger/MessageLogger.h" - -// Mu2e includes. -#include "Offline/Mu2eG4Helper/inc/VolumeInfo.hh" -//#include "GeometryService/inc/GeometryService.hh" -//#include "GeometryService/inc/GeomHandle.hh" -//#include "GeometryService/inc/VirtualDetector.hh" -#include "Offline/Mu2eG4Helper/inc/Mu2eG4Helper.hh" -#include "Offline/Mu2eG4/inc/MaterialFinder.hh" -//#include "Mu2eG4/inc/nestCons.hh" - -// G4 includes -//#include "Geant4/G4Material.hh" -#include "Geant4/G4Color.hh" -//#include "Geant4/G4Box.hh" -//#include "Geant4/G4Cons.hh" -//#include "Geant4/G4Tubs.hh" -//#include "Geant4/G4BooleanSolid.hh" -//#include "Geant4/globals.hh" -#include "Geant4/G4ThreeVector.hh" -#include "Geant4/G4TessellatedSolid.hh" -#include "Geant4/G4VPhysicalVolume.hh" - - -namespace mu2e { - -//class G4LogicalVolume; -//class G4VPhysicalVolume; -//class G4Material; -//class PAbsSD; - - -class HelicalProtonAbsorber -{ -public: - HelicalProtonAbsorber(double z_start, double length_i, double *inner_radii, - double *outer_radii, double *inner_phis, double *outer_phis, - double thickness_i, /*double num_of_turns_i,*/ int vane_num_i, - G4Material* material, G4LogicalVolume* world); - ~HelicalProtonAbsorber(); - - inline G4LogicalVolume* GetLog() {return pabs_logic;} - inline G4VPhysicalVolume* GetPhys(){return pabs_phys;} - - //void RebuildPAbs(); - - double* getPhi_i(){return phi_i;}; - inline double getComponent_Phi_i(int i){return phi_i[i];}; - - double* getPhi_o(){return phi_o;}; - double getComponent_Phi_o(int i){return phi_o[i];}; - - double* getR_i(){return r_i;}; - double getComponent_R_i(int i){return r_i[i];}; - - double* getR_o(){return r_o;}; - double getComponent_R_o(int i){return r_o[i];}; - - double getZ_var(){return z_var;}; - int getIncrements_var(){return num_of_inc_var;}; - - double getThick_var(){return thickness;}; - - - - int getVaneNum_var(){return vane_num;}; - - //double GETTEST(){return TEST;}; - - G4ThreeVector GetPosition(){return position;}; - - // These set functions are used to change values/parameters of the helical proton absorber during the optimization - // process. - - void setPhi_i(double val[]){for (int i=0; i<3;i++) phi_i[i]=val[i];}; - void setPhi_i(int i, double val){phi_i[i]=val;}; - - void setPhi_o(double val[]){for (int i=0; i<3;i++) phi_o[i]=val[i];}; - void setPhi_o(int i, double val){phi_o[i]=val;}; - - void setR_i(double val[]){for (int i=0; i<3;i++) r_i[i]=val[i];}; - void setR_i(int i, double val){r_i[i]=val;}; - - void setR_o(double val[]){for (int i=0; i<3;i++) r_o[i]=val[i];}; - void setR_o(int i, double val){r_o[i]=val;}; - - void setZ_var(double z){z_var=z;}; - - void setThick_var(double thick){thickness=thick;}; - - void setIncrements_var(int num){num_of_inc_var = num;}; - - void setVaneNum_var(int num){vane_num = num;}; - - void setPosition(G4ThreeVector pos){position = pos;}; - - bool checkOverlaps(int res=1000, double tol=0., bool verbose=true); - - void SetVisibility(bool forceSolid, bool forceAuxEdgeVisible, G4Color color, AntiLeakRegistry & reg); - -private: - - G4ThreeVector rail_eq1(double z_init, int vane_id); - G4ThreeVector rail_eq2(double z_init, int vane_id); - G4ThreeVector rail_eq3(double z_init, int vane_id); - G4ThreeVector rail_eq4(double z_init, int vane_id); - - void GenerateVanes(); - - //double TEST; - - int vane_num; - double num_of_turns; - int num_of_increments; - double PAbs_length; - double thickness; - double k; - double inner_radius; - double outer_radius; - double step_length; - G4TessellatedSolid* pabs_solid; - - G4ThreeVector position; - - double phi_i[3]; - double phi_o[3]; - double r_i[3]; - double r_o[3]; - double z_var; - int num_of_inc_var; - - //PAbsSD* myPAbsSD; - - G4LogicalVolume* pabs_logic; - G4VPhysicalVolume* pabs_phys; - - G4LogicalVolume* World; - - G4Material* material; -}; - -} //end mu2e - -#endif // MU2EG4_HELICALPROTONABSORBER_HH +#ifndef MU2EG4_HELICALPROTONABSORBER_HH +#define MU2EG4_HELICALPROTONABSORBER_HH +// +// Helical Proton Absorber main class +// +// +// Original author Suerfu, implemented by G. Tassielli +// +// Notes: +// Construct the Helical Proton Absorber + +// C++ includes +#include + +// Framework includes +#include "messagefacility/MessageLogger/MessageLogger.h" + +// Mu2e includes. +#include "Offline/Mu2eG4Helper/inc/VolumeInfo.hh" +//#include "GeometryService/inc/GeometryService.hh" +//#include "GeometryService/inc/GeomHandle.hh" +//#include "GeometryService/inc/VirtualDetector.hh" +#include "Offline/Mu2eG4Helper/inc/Mu2eG4Helper.hh" +#include "Offline/Mu2eG4/inc/MaterialFinder.hh" +//#include "Mu2eG4/inc/nestCons.hh" + +// G4 includes +//#include "Geant4/G4Material.hh" +#include "Geant4/G4Color.hh" +//#include "Geant4/G4Box.hh" +//#include "Geant4/G4Cons.hh" +//#include "Geant4/G4Tubs.hh" +//#include "Geant4/G4BooleanSolid.hh" +//#include "Geant4/globals.hh" +#include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4TessellatedSolid.hh" +#include "Geant4/G4VPhysicalVolume.hh" + + +namespace mu2e { + +//class G4LogicalVolume; +//class G4VPhysicalVolume; +//class G4Material; +//class PAbsSD; + + +class HelicalProtonAbsorber +{ +public: + HelicalProtonAbsorber(double z_start, double length_i, double *inner_radii, + double *outer_radii, double *inner_phis, double *outer_phis, + double thickness_i, /*double num_of_turns_i,*/ int vane_num_i, + G4Material* material, G4LogicalVolume* world); + ~HelicalProtonAbsorber(); + + inline G4LogicalVolume* GetLog() {return pabs_logic;} + inline G4VPhysicalVolume* GetPhys(){return pabs_phys;} + + //void RebuildPAbs(); + + double* getPhi_i(){return phi_i;}; + inline double getComponent_Phi_i(int i){return phi_i[i];}; + + double* getPhi_o(){return phi_o;}; + double getComponent_Phi_o(int i){return phi_o[i];}; + + double* getR_i(){return r_i;}; + double getComponent_R_i(int i){return r_i[i];}; + + double* getR_o(){return r_o;}; + double getComponent_R_o(int i){return r_o[i];}; + + double getZ_var(){return z_var;}; + int getIncrements_var(){return num_of_inc_var;}; + + double getThick_var(){return thickness;}; + + + + int getVaneNum_var(){return vane_num;}; + + //double GETTEST(){return TEST;}; + + G4ThreeVector GetPosition(){return position;}; + + // These set functions are used to change values/parameters of the helical proton absorber during the optimization + // process. + + void setPhi_i(double val[]){for (int i=0; i<3;i++) phi_i[i]=val[i];}; + void setPhi_i(int i, double val){phi_i[i]=val;}; + + void setPhi_o(double val[]){for (int i=0; i<3;i++) phi_o[i]=val[i];}; + void setPhi_o(int i, double val){phi_o[i]=val;}; + + void setR_i(double val[]){for (int i=0; i<3;i++) r_i[i]=val[i];}; + void setR_i(int i, double val){r_i[i]=val;}; + + void setR_o(double val[]){for (int i=0; i<3;i++) r_o[i]=val[i];}; + void setR_o(int i, double val){r_o[i]=val;}; + + void setZ_var(double z){z_var=z;}; + + void setThick_var(double thick){thickness=thick;}; + + void setIncrements_var(int num){num_of_inc_var = num;}; + + void setVaneNum_var(int num){vane_num = num;}; + + void setPosition(G4ThreeVector pos){position = pos;}; + + bool checkOverlaps(int res=1000, double tol=0., bool verbose=true); + + void SetVisibility(bool forceSolid, bool forceAuxEdgeVisible, G4Color color, AntiLeakRegistry & reg); + +private: + + G4ThreeVector rail_eq1(double z_init, int vane_id); + G4ThreeVector rail_eq2(double z_init, int vane_id); + G4ThreeVector rail_eq3(double z_init, int vane_id); + G4ThreeVector rail_eq4(double z_init, int vane_id); + + void GenerateVanes(); + + //double TEST; + + int vane_num; + double num_of_turns; + int num_of_increments; + double PAbs_length; + double thickness; + double k; + double inner_radius; + double outer_radius; + double step_length; + G4TessellatedSolid* pabs_solid; + + G4ThreeVector position; + + double phi_i[3]; + double phi_o[3]; + double r_i[3]; + double r_o[3]; + double z_var; + int num_of_inc_var; + + //PAbsSD* myPAbsSD; + + G4LogicalVolume* pabs_logic; + G4VPhysicalVolume* pabs_phys; + + G4LogicalVolume* World; + + G4Material* material; +}; + +} //end mu2e + +#endif // MU2EG4_HELICALPROTONABSORBER_HH diff --git a/Mu2eUtilities/inc/LsqSums2.hh b/Mu2eUtilities/inc/LsqSums2.hh index 930be96af4..aa02689bbc 100644 --- a/Mu2eUtilities/inc/LsqSums2.hh +++ b/Mu2eUtilities/inc/LsqSums2.hh @@ -9,10 +9,7 @@ class LsqSums2 { protected: - double _qn, sw, sx, sy, sx2, sxy, sy2, sx3, sx2y, sxy2, sy3, sx4, sx3y, sx2y2, sxy3, sy4; - double xmean, ymean, x2mean, xymean, y2mean, x3mean, x2ymean, xy2mean, y3mean; - double x4mean, x3ymean, x2y2mean, xy3mean, y4mean; - + double _qn, sw, sx, sy, sx2, sxy, sy2; double fX0, fY0; // offsets, need to be defined in the very beginning, by default - 0 diff --git a/Mu2eUtilities/inc/LsqSums4.hh b/Mu2eUtilities/inc/LsqSums4.hh index 78660bb685..96eccaf035 100644 --- a/Mu2eUtilities/inc/LsqSums4.hh +++ b/Mu2eUtilities/inc/LsqSums4.hh @@ -10,8 +10,6 @@ class LsqSums4 { protected: double _qn, sw, sx, sy, sx2, sxy, sy2, sx3, sx2y, sxy2, sy3, sx4, sx3y, sx2y2, sxy3, sy4; - double xmean, ymean, x2mean, xymean, y2mean, x3mean, x2ymean, xy2mean, y3mean; - double x4mean, x3ymean, x2y2mean, xy3mean, y4mean; double fX0, fY0; // offsets, need to be defined in the very beginning, by default - 0 diff --git a/Mu2eUtilities/inc/MedianCalculator.hh b/Mu2eUtilities/inc/MedianCalculator.hh index 7ebab57d2d..924053bfbf 100644 --- a/Mu2eUtilities/inc/MedianCalculator.hh +++ b/Mu2eUtilities/inc/MedianCalculator.hh @@ -1,52 +1,59 @@ #ifndef Mu2eUtilities_MedianCalculator_hh #define Mu2eUtilities_MedianCalculator_hh // -// Original author G. Pezzullo -// -// this class is intended to be used for evaluaitng the median +// this class is intended to be used for evaluating the median // from a set of elements that are stored internally in a vector // +// - intermediate answers can be retrieved before the full +// set of elements have been pushed +// - after clear(), it is ready for a new set of elements +// -#include #include -//#include -#include #include -namespace mu2e { - class MedianCalculator{ - struct MedianData { - MedianData(float Val, float Wg): val(Val), wg(Wg){} - float val; - float wg; - }; - struct MedianDatacomp : public std::binary_function { - bool operator()(MedianData const& p1, MedianData const& p2) { return p1.val < p2.val; } - }; - - public: - MedianCalculator(size_t nToReserve=0){ - _vec.reserve(nToReserve); - } - - float weightedMedian(); - float unweightedMedian(); - - inline void push(float value, float weight=1){ - _vec.emplace_back(MedianData(value, weight)); - _needsSorting = true; - _totalWeight += weight; - } - - inline size_t size(){ return _vec.size(); } - private: - - std::vector _vec; - bool _needsSorting = true; - float _weightedMedian = 0; - float _unweightedMedian = 0; - float _totalWeight = 0; +namespace mu2e { +class MedianCalculator { + + struct MedianData { + MedianData(float Val, float Wg) : val(Val), wg(Wg) {} + float val; + float wg; }; + struct lessByValue : public std::binary_function { + bool operator()(MedianData const& p1, MedianData const& p2) { return p1.val < p2.val; } + }; + +public: + MedianCalculator(size_t nToReserve = 0) { + clear(); + _vec.reserve(nToReserve); + } + + float weightedMedian() { return median(true); } + float unweightedMedian() { return median(false); } + + inline void push(float value, float weight = 1) { + _vec.emplace_back(value, weight); + _needsSorting = true; + _totalWeight += weight; + } + + inline size_t size() { return _vec.size(); } + void clear(); + +private: + float median(bool useWeights); + + std::vector _vec; + bool _needsSorting; + bool _goodWM; + bool _goodUWM; + float _weightedMedian; + float _unweightedMedian; + float _totalWeight; +}; + } // namespace mu2e #endif /* Mu2eUtilities_MedianCalculator_hh */ diff --git a/Mu2eUtilities/src/MedianCalculator.cc b/Mu2eUtilities/src/MedianCalculator.cc index 1d3b70d7b4..88b5de6462 100644 --- a/Mu2eUtilities/src/MedianCalculator.cc +++ b/Mu2eUtilities/src/MedianCalculator.cc @@ -8,88 +8,76 @@ namespace mu2e { - float MedianCalculator::weightedMedian(){ - //now, we need to loop over it and evaluate the median - size_t v_size = _vec.size(); - if (v_size ==0) { - throw cet::exception("MATH")<<"No entries in the vector: median undefined" << std::endl; - } - if (v_size == 1){ - return _vec[0].val; - } - - if (_needsSorting){ - std::sort(_vec.begin(), _vec.end(), MedianDatacomp()); - _needsSorting = false; - }else { - return _weightedMedian; - } - - float sum(0); - size_t id(0); - - sum = _totalWeight - _vec[0].wg; - while (sum > 0.5*_totalWeight){ - ++id; - sum -= _vec[id].wg; - } +//================================================================ - float over((sum)/_totalWeight); - float interpolation(0); - if (v_size %2 == 0) { - interpolation = _vec[id].val * over + _vec[id+1].val * (1.-over); - }else { - float w2 = (sum)/_totalWeight; - float w1 = (sum + _vec[id].wg )/_totalWeight; - float val1 = _vec[id-1].val*w1 + _vec[id].val*(1.-w1); - float val2 = _vec[id].val*w2 + _vec[id+1].val*(1.-w2); - interpolation = 0.5*(val1 + val2); - } +void MedianCalculator::clear() { + _vec.clear(); + _needsSorting = true; + _goodWM = false; + _goodUWM = false; + _weightedMedian = 0; + _unweightedMedian = 0; + _totalWeight = 0; +} - //cache the result - _weightedMedian = interpolation; +//================================================================ - return interpolation; +float MedianCalculator::median(bool useWeights) { + + size_t v_size = _vec.size(); + if (v_size == 0) { + throw cet::exception("MEDIANCALCULATOR_ZERO") + << "No entries in the vector: median undefined" << std::endl; } - - float MedianCalculator::unweightedMedian(){ - //now, we need to loop over it and evaluate the median - size_t v_size = _vec.size(); - if (v_size ==0) { - throw cet::exception("MATH")<<"No entries in the vector: median undefined" << std::endl; - } - if (v_size == 1){ - return _vec[0].val; - } - if (_needsSorting){ - std::sort(_vec.begin(), _vec.end(), MedianDatacomp()); - _needsSorting = false; - }else { - return _unweightedMedian; - } - - float totWg(_vec.size()); - size_t id(0); - - float interpolation(0); - if (v_size %2 == 0) { - id = v_size/2 - 1; - interpolation = _vec[id].val * 0.5 + _vec[id+1].val * 0.5; - }else { - id = v_size/2; - float sum(id); - float w2 = (sum)/totWg; - float w1 = (sum + 1.)/totWg; - float val1 = _vec[id-1].val*w1 + _vec[id].val *(1.-w1); - float val2 = _vec[id].val *w2 + _vec[id+1].val*(1.-w2); - interpolation = 0.5*(val1 + val2); + if (v_size == 1) { + return _vec[0].val; + } + + if (_needsSorting) { + std::sort(_vec.begin(), _vec.end(), lessByValue()); + _needsSorting = false; + _goodWM = false; + _goodUWM = false; + } + + if (useWeights) { + + if (!_goodWM) { + + // integratng low to high, id will the first entry past the 50% point + // the entry at id then satisfies the definition of weighted median: + // the sum of weights above and below id (not including id) + // is less than 50%. id can be the first or last entry. + + size_t id = 0; + float sum = _vec[0].wg; + while (sum < 0.5 * _totalWeight) { + ++id; + sum += _vec[id].wg; + } + + _weightedMedian = _vec[id].val; + _goodWM = true; } - //cache the result - _weightedMedian = interpolation; + return _weightedMedian; + + } else { + + if (!_goodUWM) { - return interpolation; + // v_size is >=2, so id >=1 + size_t id = v_size / 2; + if (v_size % 2 == 0) { + _unweightedMedian = (_vec[id - 1].val + _vec[id].val) / 2.0; + } else { + _unweightedMedian = _vec[id].val; + } + _goodUWM = true; + } + return _unweightedMedian; } - } + +} // namespace mu2e diff --git a/Print/src/CaloClusterPrinter.cc b/Print/src/CaloClusterPrinter.cc index f976dcc08e..2be807653b 100644 --- a/Print/src/CaloClusterPrinter.cc +++ b/Print/src/CaloClusterPrinter.cc @@ -89,7 +89,11 @@ mu2e::CaloClusterPrinter::Print(const mu2e::CaloCluster& obj, int ind, std::ostr os << " CrystalHits:"; for(auto& ic: obj.caloHitsPtrVector()) { - os << " " << (*ic).crystalID(); + if (ic.isAvailable()) { + os << " " << ic->crystalID(); + } else { + os << " missing caloHit Ptr id " << ic.id() << " key " << ic.key(); + } } os << "\n"; diff --git a/Print/src/GenParticlePrinter.cc b/Print/src/GenParticlePrinter.cc index 0282b500bc..ba2b1577f5 100644 --- a/Print/src/GenParticlePrinter.cc +++ b/Print/src/GenParticlePrinter.cc @@ -92,7 +92,7 @@ mu2e::GenParticlePrinter::PrintHeader(const std::string& tag, std::ostream& os) void mu2e::GenParticlePrinter::PrintListHeader(std::ostream& os) { if(verbose()<1) return; - os << "ind pdgId Position Momentum time ptime name\n"; + os << "ind pdgId Position Momentum time ptime genId_name\n"; } diff --git a/Sources/src/SConscript b/Sources/src/SConscript index 017a45b154..9b4164dec2 100644 --- a/Sources/src/SConscript +++ b/Sources/src/SConscript @@ -50,6 +50,7 @@ mainlib = helper.make_mainlib(['mu2e_GlobalConstantsService', helper.make_plugins( [ mainlib, 'mu2e_MCDataProducts', 'mu2e_GlobalConstantsService', + 'mu2e_Mu2eInterfaces', 'HepPDT', 'art_Framework_Core', 'art_Framework_Principal', diff --git a/TEveEventDisplay/fcl/prolog.fcl b/TEveEventDisplay/fcl/prolog.fcl index 5e307be942..1fb8fb5d27 100644 --- a/TEveEventDisplay/fcl/prolog.fcl +++ b/TEveEventDisplay/fcl/prolog.fcl @@ -73,8 +73,8 @@ TEveEventDisplayHelix : { showEvent : true isMCOnly : false filler : { - ComboHitCollection : "makeSH" - CrvRecoPulseCollection : NULL + ComboHitCollection : "makePH" + CrvRecoPulseCollection : "SelectRecoMC" CosmicTrackSeedCollection : NULL CaloClusterCollection : "CaloClusterMaker" CaloHitCollection : NULL diff --git a/TEveEventDisplay/src/TEveEventDisplay_module.cc b/TEveEventDisplay/src/TEveEventDisplay_module.cc index 2d359c7c98..28158e4e5a 100644 --- a/TEveEventDisplay/src/TEveEventDisplay_module.cc +++ b/TEveEventDisplay/src/TEveEventDisplay_module.cc @@ -1,4 +1,4 @@ -// ... libCore +//... libCore #include #include #include @@ -24,44 +24,44 @@ using namespace std; using namespace mu2e; -namespace mu2e +namespace mu2e { class TEveEventDisplay : public art::EDAnalyzer { - public: + public: struct Config{ using Name=fhicl::Name; using Comment=fhicl::Comment; fhicl::Atom diagLevel{Name("diagLevel"), Comment("for info"),0}; - fhicl::Atom showCRV{Name("showCRV"), Comment("set false if you just want to see DS"),false}; - fhicl::Atom showBuilding{Name("showBuilding"), Comment("set false to remove building"),false}; - fhicl::Atom showDSOnly{Name("showDSOnly"), Comment(""),true}; - fhicl::Atom showEvent{Name("showEvent"), Comment(""),true}; - fhicl::Atom isMCOnly{Name("isMCOnly"), Comment(""),false}; - fhicl::Atom accumulate{Name("accumulate"), Comment(""),false}; + fhicl::Atom showCRV{Name("showCRV"), Comment("set false if you just want to see DS"),false}; + fhicl::Atom showBuilding{Name("showBuilding"), Comment("set false to remove building"),false}; + fhicl::Atom showDSOnly{Name("showDSOnly"), Comment(""),true}; + fhicl::Atom showEvent{Name("showEvent"), Comment(""),true}; + fhicl::Atom isMCOnly{Name("isMCOnly"), Comment(""),false}; + fhicl::Atom accumulate{Name("accumulate"), Comment(""),false}; fhicl::Table filler{Name("filler"),Comment("fill collections")}; //fhicl::Table particles{Name("particles"),Comment("particles to plot")}; fhicl::Sequenceparticles{Name("particles"),Comment("PDGcodes to plot")}; }; typedef art::EDAnalyzer::Table Parameters; - explicit TEveEventDisplay(const Parameters& conf); + explicit TEveEventDisplay(const Parameters& conf); virtual ~TEveEventDisplay(); virtual void beginJob() override; virtual void beginRun(const art::Run& run) override; virtual void analyze(const art::Event& e); virtual void endJob() override; - private: + private: Config _conf; - int _diagLevel; + int _diagLevel; bool _showBuilding; bool _showDSOnly; bool _showCRV; - bool _showEvent; - bool _isMCOnly; + bool _showEvent; + bool _isMCOnly; bool _accumulate; TApplication* application_; - TDirectory* directory_ = nullptr; + TDirectory* directory_ = nullptr; Collection_Filler _filler; std::vector _particles; TEveMu2eMainWindow *_frame; @@ -74,7 +74,7 @@ namespace mu2e int eventn = 0; bool eventSelected = false; }; - + TEveEventDisplay::TEveEventDisplay(const Parameters& conf) : art::EDAnalyzer(conf), _diagLevel(conf().diagLevel()), @@ -86,44 +86,47 @@ namespace mu2e _accumulate(conf().accumulate()), _filler(conf().filler()), _particles(conf().particles()) - {} - - + {} + + TEveEventDisplay::~TEveEventDisplay(){} - + void TEveEventDisplay::beginJob(){ - + directory_ = gDirectory; if ( !gApplication ){ int tmp_argc(0); char** tmp_argv(0); application_ = new TApplication( "noapplication", &tmp_argc, tmp_argv ); - } + } //construct GUI: - _frame = new TEveMu2eMainWindow(gClient->GetRoot(), 1000,600, _pset); - //build 2D geometries: - _frame->CreateCaloProjection(); - _frame->CreateTrackerProjection();//StartProjectionTabs(); + std::cout<<"CRV coming in "<<_filler.addCrvHits_<GetRoot(), 1000,600, _pset, DrawOpts); + //build 2D geometries (now optional): + if(DrawOpts.addCRVInfo)_frame->CreateCRVProjection(); + if(DrawOpts.addClusters or DrawOpts.addCryHits) _frame->CreateCaloProjection(); + _frame->CreateTrackerProjection(); //send list of particles to viewer: _frame->SetParticleOpts(_particles); } - + void TEveEventDisplay::beginRun(const art::Run& run){ //import 3D GDML geom: _frame->SetRunGeometry(run, _diagLevel, _showBuilding, _showDSOnly, _showCRV); //make 2D tracker and calo: - _frame->PrepareCaloProjectionTab(run); + if(_filler.addClusters_) _frame->PrepareCaloProjectionTab(run); _frame->PrepareTrackerProjectionTab(run); - std::cout<<" end begin Run "<GetRoot(), gClient->GetRoot(), "Event Not Found", msg, kMBIconExclamation,kMBOk); } - } - + } + } using mu2e::TEveEventDisplay; DEFINE_ART_MODULE(TEveEventDisplay); + diff --git a/TEveEventDisplay/src/TEveMu2eCRV.cc b/TEveEventDisplay/src/TEveMu2eCRV.cc index 6522c2b9da..93831a6142 100644 --- a/TEveEventDisplay/src/TEveMu2eCRV.cc +++ b/TEveEventDisplay/src/TEveMu2eCRV.cc @@ -2,37 +2,43 @@ using namespace mu2e; namespace mu2e{ - TEveMu2eCRV::TEveMu2eCRV(){}; + TEveMu2eCRV::TEveMu2eCRV(){}; /*------------Function to draw CRV geometry in 2D:-------------*/ - void TEveMu2eCRV::DrawCRVDetector(art::Run const& run, TGeoVolume* topvol, TEveElementList *orthodetlist[]){ + void TEveMu2eCRV::DrawCRVDetector(art::Run const& run, TGeoVolume* topvol, TEveElementList *orthodetT1, TEveElementList *orthodetT2){ TGeoMaterial *matSi = new TGeoMaterial("Si", 28.085,14,2.33); TGeoMedium *Si = new TGeoMedium("Silicon",2, matSi); + std::vector halflen; CLHEP::Hep3Vector position; CosmicRayShield const &CRS = *(GeomHandle()); const std::string TopSectorNames[] = {"T1", "T2", "T3", "T4"}; for (unsigned int i=0; i<4; i++){ + Double_t panelpos[3]; halflen = CRS.getSectorHalfLengths(TopSectorNames[i]); position = CRS.getSectorPosition(TopSectorNames[i]); + + panelpos [0] = position.x(); + panelpos [1] = position.y(); + panelpos [2] = position.z(); + TEveGeoShape *sectorshape = new TEveGeoShape(); - sectorshape->SetShape(new TGeoBBox(pointmmTocm(2*halflen[0]), pointmmTocm(2*halflen[2]), pointmmTocm(2*halflen[1]))); + sectorshape->SetShape(new TGeoBBox("sectorshape",pointmmTocm(2*halflen[0]), pointmmTocm(2*halflen[2]), pointmmTocm(2*halflen[1]),panelpos)); sectorshape->SetMainTransparency(100); - orthodetlist[i]->AddElement(sectorshape); - TGeoShape *g = new TGeoBBox("CRV Sector",pointmmTocm(2*halflen[0]), pointmmTocm(2*halflen[2]), pointmmTocm(2*halflen[1])); + TGeoShape *g = new TGeoBBox("CRV Sector",pointmmTocm(2*halflen[0]), pointmmTocm(2*halflen[2]), pointmmTocm(2*halflen[1])); TGeoVolume *crv0= new TGeoVolume("CRV Sector",g, Si); crv0->SetVisLeaves(kFALSE); crv0->SetInvisible(); - // CLHEP::Hep3Vector crv0Pos(0,0,halflen[2]); std::string filename("Mu2eG4/geom/crv_counters_v07.txt"); SimpleConfig Config(filename); std::vector Center; if(i==0) Config.getVectorDouble("crs.firstCounterT1", Center); if(i==1) Config.getVectorDouble ("crs.firstCounterT2",Center); if(i==2) Config.getVectorDouble("crs.firstCounterT3", Center); - if(i==3) Config.getVectorDouble("crs.firstCounterT4", Center) ; - + if(i==3) Config.getVectorDouble("crs.firstCounterT4", Center) ; + orthodetT1->AddElement(sectorshape); topvol->AddNode(crv0, 1, new TGeoTranslation(pointmmTocm(Center[0]),pointmmTocm(Center[1]),pointmmTocm(Center[2]/10))); } } } + diff --git a/TEveEventDisplay/src/TEveMu2eCRVEvent.cc b/TEveEventDisplay/src/TEveMu2eCRVEvent.cc index 02767f6b1e..b2d6272179 100644 --- a/TEveEventDisplay/src/TEveMu2eCRVEvent.cc +++ b/TEveEventDisplay/src/TEveMu2eCRVEvent.cc @@ -3,36 +3,88 @@ using namespace mu2e; namespace mu2e{ - TEveMu2eCRVEvent::TEveMu2eCRVEvent(){} - - /*------------Function to build title:-------------*/ + TEveMu2eCRVEvent::TEveMu2eCRVEvent(){} + + /*------------Function to build title:-------------*/ std::string TEveMu2eCRVEvent::DataTitle(const std::string &pstr, int n){ std::string dstr=" hit#" + std::to_string(n) + "\nLayer: "; std::string strlab=pstr+dstr; return (strlab); } + /*------------Function to display straws which are hit-------*/ + std::tupleTEveMu2eCRVEvent::DrawSciBar(){ + GeomHandle CRS; + const CRSScintillatorBarIndex &crvBarIndexn = fCrvRecoPulse_.GetScintillatorBarIndex(); + const CRSScintillatorBar &crvCounter = CRS->getBar(crvBarIndexn); + CLHEP::Hep3Vector crvCounterPos = crvCounter.getPosition(); + const CRSScintillatorBarDetail &barDetail = crvCounter.getBarDetail(); + CLHEP::Hep3Vector sibardetails(barDetail.getHalfLengths()[0],barDetail.getHalfLengths()[1],barDetail.getHalfLengths()[2]); + return {sibardetails, crvCounterPos}; + } + /*------------Function to 3D draw hits:-------------*/ - void TEveMu2eCRVEvent::DrawHit3D(const std::string &pstr, Int_t n, CLHEP::Hep3Vector pointInMu2e, TEveElementList *HitList) + void TEveMu2eCRVEvent::DrawHit3D(const std::string &pstr, Int_t n, CLHEP::Hep3Vector pointInMu2e, TEveElementList *CrvList3D) { + auto [sibardetails, crvCounterPos] = DrawSciBar(); + Double_t sibarposition[3]; + sibarposition[0] = (crvCounterPos.x()); + sibarposition[1] = (crvCounterPos.y()); + sibarposition[2] = (crvCounterPos.z()); + TEveGeoShape *sibar = new TEveGeoShape(); + sibar->SetShape(new TGeoBBox("sibar",sibardetails.x(),sibardetails.y(),sibardetails.z(), sibarposition)); + CrvList3D->AddElement(sibar); + + this->SetTitle((DataTitle(pstr, n)).c_str()); - this->SetNextPoint(pointInMu2e.x(), pointInMu2e.y(), pointInMu2e.z()); + this->SetNextPoint(pointInMu2e.x(), pointInMu2e.y(), pointInMu2e.z()); this->SetMarkerColor(mColor_); this->SetMarkerSize(mSize_); this->SetPickable(kTRUE); - HitList->AddElement(this); + CrvList3D->AddElement(this); } - - /*------------Function to 2D draw hits:-------------*/ - void TEveMu2eCRVEvent::DrawHit2D(const std::string &pstr, Int_t n, CLHEP::Hep3Vector pointInMu2e, TEveElementList *HitList) + + /*------------Function to 2D draw hits:-------------*/ + void TEveMu2eCRVEvent::DrawHit2DXY(const std::string &pstr, Int_t n, CLHEP::Hep3Vector pointInMu2e, TEveElementList *CrvList2DXY) { + auto [sibardetails, crvCounterPos] = DrawSciBar(); + Double_t sibarposition[3]; + sibarposition[0] = pointmmTocm(crvCounterPos.x()); + sibarposition[1] = pointmmTocm(crvCounterPos.y()); + sibarposition[2] = pointmmTocm(crvCounterPos.z()); + + TEveGeoShape *sibar = new TEveGeoShape(); + sibar->SetShape(new TGeoBBox("sibar",pointmmTocm(sibardetails.x()),pointmmTocm(sibardetails.y()),pointmmTocm(sibardetails.z()), sibarposition)); + sibar->SetMainTransparency(100); + CrvList2DXY->AddElement(sibar); + this->SetTitle((DataTitle(pstr, n)).c_str()); - hep3vectorTocm(pointInMu2e); - this->SetNextPoint(pointInMu2e.x(), pointInMu2e.y(), pointInMu2e.z()); + this->SetNextPoint(pointInMu2e.x(), pointInMu2e.y(), pointInMu2e.z()); this->SetMarkerColor(mColor_); this->SetMarkerSize(mSize_); this->SetPickable(kTRUE); - HitList->AddElement(this); + CrvList2DXY->AddElement(this); } -} + + void TEveMu2eCRVEvent::DrawHit2DYZ(const std::string &pstr, Int_t n, CLHEP::Hep3Vector pointInMu2e, TEveElementList *CrvList2DYZ) + { + auto [sibardetails, crvCounterPos] = DrawSciBar(); + Double_t sibarposition[3]; + sibarposition[0] = 0.0; + sibarposition[1] = pointmmTocm(crvCounterPos.y()); + sibarposition[2] = pointmmTocm(crvCounterPos.z()); + + TEveGeoShape *sibar = new TEveGeoShape(); + sibar->SetShape(new TGeoBBox("sibar",0.0,pointmmTocm(sibardetails.y()),pointmmTocm(sibardetails.z()), sibarposition)); + sibar->SetMainTransparency(100); + CrvList2DYZ->AddElement(sibar); + this->SetTitle((DataTitle(pstr, n)).c_str()); + this->SetNextPoint(0.0, pointInMu2e.y(), pointInMu2e.z()); + this->SetMarkerColor(mColor_); + this->SetMarkerSize(mSize_); + this->SetPickable(kTRUE); + CrvList2DYZ->AddElement(this); + + } +} diff --git a/TEveEventDisplay/src/TEveMu2eDataInterface.cc b/TEveEventDisplay/src/TEveMu2eDataInterface.cc index 11c9e0403f..378543f84e 100644 --- a/TEveEventDisplay/src/TEveMu2eDataInterface.cc +++ b/TEveEventDisplay/src/TEveMu2eDataInterface.cc @@ -1,9 +1,11 @@ - #include "Offline/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eDataInterface.h" using namespace mu2e; namespace mu2e{ + constexpr double convertToCentimeters(double val){ + return val/10; + } /*------------Function delete previous event from display:-------------*/ template void DataLists(T data, bool Redraw, bool accumulate, std::string title, TEveElementList **List3D, TEveElementList **List2DXY = 0, TEveElementList **List2DXZ = 0 , U projection = 0){ if(data == 0 && Redraw){ @@ -105,40 +107,40 @@ namespace mu2e{ } /*------------Function to build time ordering:-------------*/ - std::vector TEveMu2eDataInterface::getTimeRange(bool firstloop, const ComboHitCollection *chcol, const CrvRecoPulseCollection *crvcoincol, const CaloClusterCollection *clustercol, const CaloHitCollection *cryHitcol){ + std::vector TEveMu2eDataInterface::getTimeRange(bool firstloop, const ComboHitCollection *chcol, const CrvRecoPulseCollection *crvcoincol, const CaloClusterCollection *clustercol, const CaloHitCollection *cryHitcol, bool addCRVInfo, bool addHits, bool addCalo){ std::vector time = {-1, -1}; double max, min; std::vector alltime; - - if (crvcoincol != 0){ - maxminCRV(crvcoincol, max, min); - alltime.push_back(max); - alltime.push_back(min); + + if(addCRVInfo){ + if(crvcoincol->size() !=0){ + maxminCRV(crvcoincol, max, min); + alltime.push_back(max); + alltime.push_back(min); + } } - if (chcol != 0){ - maxminT(chcol, max, min); - alltime.push_back(max); - alltime.push_back(min); + if(addHits){ + if (chcol->size() != 0){ + maxminT(chcol, max, min); + alltime.push_back(max); + alltime.push_back(min); + } } - if (clustercol->size() != 0){ - maxminT(clustercol, max, min); - alltime.push_back(max); - alltime.push_back(min); - } - if (cryHitcol != 0){ - maxminT(cryHitcol, max, min); - alltime.push_back(max); - alltime.push_back(min); + if (addCalo){ + if(clustercol->size() !=0){ + maxminT(clustercol, max, min); + alltime.push_back(max); + alltime.push_back(min); + } } + if(alltime.size() !=0){ auto order = std::minmax_element(alltime.begin(), alltime.end(), [] (auto const& lhs, auto const& rhs) { return lhs < rhs; }); - int min_pos = order.first - alltime.begin(); int max_pos = order.second - alltime.begin(); - time.at(0) = alltime.at(min_pos); time.at(1) = alltime.at(max_pos); } @@ -148,38 +150,56 @@ namespace mu2e{ return time; } - /*------------Function to add CRV information to the display:-------------*/ - void TEveMu2eDataInterface::AddCRVInfo(bool firstloop, const CrvRecoPulseCollection *crvcoincol, double min_time, double max_time, bool Redraw, bool accumulate){ - - - if(crvcoincol!=0){ - std::cout<<"CRV"<(crvcoincol, Redraw, accumulate, "CRVRecoPulse", &fCrvList3D, &fCrvList2D,&fCrvList2D); - TEveElementList *CrvList3D = new TEveElementList("CrvData3D"); - GeomHandle CRS; - for(unsigned int i=0; i size(); i++) - { - const CrvRecoPulse &crvRecoPulse = crvcoincol->at(i); - - TEveMu2eCRVEvent *teve_crv3D = new TEveMu2eCRVEvent(crvRecoPulse); - const CRSScintillatorBarIndex &crvBarIndex = crvRecoPulse.GetScintillatorBarIndex(); - const CRSScintillatorBar &crvCounter = CRS->getBar(crvBarIndex); - CLHEP::Hep3Vector crvCounterPos = crvCounter.getPosition(); - hep3vectorTocm(crvCounterPos); - string pos3D = "(" + to_string((double)crvCounterPos.x()) + ", " + to_string((double)crvCounterPos.y()) + ", " + to_string((double)crvCounterPos.z()) + ")"; - if( (min_time == -1 && max_time == -1) or (crvRecoPulse.GetPulseTime() > min_time and crvRecoPulse.GetPulseTime() < max_time)){ - teve_crv3D->DrawHit3D("CRVHits3D, Position = " + pos3D + ", Pulse Time = " + to_string(crvRecoPulse.GetPulseTime()) + ", Pulse Height = "+ to_string(crvRecoPulse.GetPulseHeight()) + + "Pulse Width = " + to_string(crvRecoPulse.GetPulseTime()), i + 1, crvCounterPos, CrvList3D); - fCrvList3D->AddElement(CrvList3D); - } - } - gEve->AddElement(fCrvList3D); - gEve->Redraw3D(kTRUE); + /*------------Function to add CRV information to the display:-------------*/ + void TEveMu2eDataInterface::AddCRVInfo(bool firstloop, const CrvRecoPulseCollection *crvcoincol, double min_time, double max_time, TEveMu2e2DProjection *CRV2Dproj, bool Redraw, bool accumulate, TEveProjectionManager *TXYMgr, TEveProjectionManager *TRZMgr, TEveScene *scene1, TEveScene *scene2){ + + DataLists(crvcoincol, Redraw, accumulate, "CRVRecoPulse", &fCrvList3D, &fCrvList2DXY,&fCrvList2DYZ, CRV2Dproj); + + if(crvcoincol->size() !=0){ + + TEveElementList *CrvList2DXY = new TEveElementList("CrvData2DXY"); + TEveElementList *CrvList2DYZ = new TEveElementList("CrvData2DYZ"); + TEveElementList *CrvList3D = new TEveElementList("CrvData3D"); + GeomHandle CRS; + for(unsigned int i=0; i size(); i++) + { + const CrvRecoPulse &crvRecoPulse = crvcoincol->at(i); + TEveMu2eCRVEvent *teve_crv3D = new TEveMu2eCRVEvent(crvRecoPulse); + TEveMu2eCRVEvent *teve_crv2DXY = new TEveMu2eCRVEvent(crvRecoPulse); + TEveMu2eCRVEvent *teve_crv2DYZ = new TEveMu2eCRVEvent(crvRecoPulse); + const CRSScintillatorBarIndex &crvBarIndex = crvRecoPulse.GetScintillatorBarIndex(); + const CRSScintillatorBar &crvCounter = CRS->getBar(crvBarIndex); + CLHEP::Hep3Vector crvCounterPos = crvCounter.getPosition(); + CLHEP::Hep3Vector pointInMu2e = crvCounterPos; + hep3vectorTocm(crvCounterPos); + string pos3D = "(" + to_string((double)crvCounterPos.x()) + ", " + to_string((double)crvCounterPos.y()) + ", " + to_string((double)crvCounterPos.z()) + ")"; + if((min_time == -1 && max_time == -1) or (crvRecoPulse.GetPulseTime() > min_time and crvRecoPulse.GetPulseTime() < max_time)){ + teve_crv3D->DrawHit3D("CRVHits3D, Position = " + pos3D + ", Pulse Time = " + to_string(crvRecoPulse.GetPulseTime()) + ", Pulse Height = "+ + to_string(crvRecoPulse.GetPulseHeight()) + "Pulse Width = " + to_string(crvRecoPulse.GetPulseTime()), i + 1, pointInMu2e, CrvList3D); + + teve_crv2DXY->DrawHit2DXY("CRVHits2D, Position = " + pos3D + ", Pulse Time = " + to_string(crvRecoPulse.GetPulseTime()) + ", Pulse Height = "+ to_string(crvRecoPulse.GetPulseHeight()) + "Pulse Width = " + + to_string(crvRecoPulse.GetPulseTime()), i + 1, crvCounterPos, CrvList2DXY); + teve_crv2DYZ->DrawHit2DYZ("CRVHits2D, Position = " + pos3D + ", Pulse Time = " + to_string(crvRecoPulse.GetPulseTime()) + ", Pulse Height = "+ to_string(crvRecoPulse.GetPulseHeight()) + "Pulse Width = " + + to_string(crvRecoPulse.GetPulseTime()), i + 1, crvCounterPos, CrvList2DYZ); + fCrvList3D->AddElement(CrvList3D); + fCrvList2DXY->AddElement(CrvList2DXY); + fCrvList2DYZ->AddElement(CrvList2DYZ); } + } + + CRV2Dproj->fXYMgr->ImportElements(fCrvList2DXY, CRV2Dproj->fEvtXYScene); + CRV2Dproj->fRZMgr->ImportElements(fCrvList2DYZ, CRV2Dproj->fEvtRZScene); + + gEve->AddElement(fCrvList3D); + gEve->Redraw3D(kTRUE); } + } + + /*------------Function to add ComboHits to Tracker in 3D and 2D displays:-------------*/ std::vector TEveMu2eDataInterface::AddComboHits(bool firstloop, const ComboHitCollection *chcol, TEveMu2e2DProjection *tracker2Dproj, bool Redraw, double min_energy, double max_energy, double min_time, double max_time, bool accumulate, TEveProjectionManager *TXYMgr, TEveProjectionManager *TRZMgr, TEveScene *scene1, TEveScene *scene2){ - + std::vector energies = {0,0}; DataLists(chcol, Redraw, accumulate, "ComboHit", &fHitsList3D, &fHitsList2DXY, &fHitsList2DXZ, tracker2Dproj); /* @@ -231,8 +251,8 @@ namespace mu2e{ DataLists(clustercol, Redraw, accumulate, "CaloCluster", &fClusterList3D, &fClusterList2D_disk1, &fClusterList2D_disk1,calo2Dproj); //CfXYMgr->ImportElements(fClusterList2D_disk0, scene1); //CfRZMgr->ImportElements(fClusterList2D_disk1, scene2); - - if(clustercol!=0){ + + if(clustercol->size()!=0){ TEveElementList *ClusterList3D = new TEveElementList("CaloClusters3D"); TEveElementList *ClusterList2D_disk0 = new TEveElementList("CaloClusters2D_Disk0"); TEveElementList *ClusterList2D_disk1 = new TEveElementList("CaloClusters2D_Disk1"); @@ -261,7 +281,7 @@ namespace mu2e{ CLHEP::Hep3Vector crystalPos = cal.geomUtil().mu2eToDiskFF(0,crystal.position()); Double_t origin[3]; - crystals2D ->SetMarkerStyle(9); + crystals2D ->SetMarkerStyle(9); //TODO - use name crystals2D ->SetMarkerSize(1); crystals2D ->SetMarkerColor(kRed); crystalPos = PointToCalo(crystalPos, diskID); @@ -271,7 +291,7 @@ namespace mu2e{ origin [2] = crystalPos.z(); TEveGeoShape *crystalShape = new TEveGeoShape(); crystalShape->SetFillColor(kRed); - crystalShape->SetShape(new TGeoBBox("cryHit", (crystalXLen/2), (crystalYLen/2), (crystalZLen/2)/10, origin)); + crystalShape->SetShape(new TGeoBBox("cryHit", (crystalXLen/2), (crystalYLen/2), convertToCentimeters((crystalZLen/2)), origin)); crystals2D->SetNextPoint(origin [0],origin [1],origin [2]); if(diskID == 0){ fClusterList2D_disk0->AddElement(crystals2D); @@ -303,7 +323,7 @@ namespace mu2e{ CLHEP::Hep3Vector pointInMu2e2D = PointToCalo(COG,cluster.diskID()); CLHEP::Hep3Vector pointInMu2e3D = PointToCaloCM(COG,cluster.diskID()); - string pos3D = "(" + to_string((double)pointInMu2e3D.x()/10) + ", " + to_string((double)pointInMu2e3D.y()/10) + ", " + to_string((double)pointInMu2e3D.z()/10) + ")"; + string pos3D = "(" + to_string(convertToCentimeters((double)pointInMu2e3D.x())) + ", " + to_string(convertToCentimeters((double)pointInMu2e3D.y())) + ", " + to_string(convertToCentimeters((double)pointInMu2e3D.z())) + ")"; string pos2D = "(" + to_string((double)COG.x()) + ", " + to_string((double)COG.y()) + ", " + to_string((double)COG.z()) + ")"; if (((min_time == -1 && max_time == -1) || (cluster.time() > min_time && cluster.time() < max_time )) && ((cluster.energyDep() >= min_energy && cluster.energyDep() <= max_energy) || (min_energy == -1 && max_energy == -1))){ diff --git a/TEveEventDisplay/src/TEveMu2eDataInterface_addstrawhit.cc b/TEveEventDisplay/src/TEveMu2eDataInterface_addstrawhit.cc deleted file mode 100644 index 8b13789179..0000000000 --- a/TEveEventDisplay/src/TEveMu2eDataInterface_addstrawhit.cc +++ /dev/null @@ -1 +0,0 @@ - diff --git a/TEveEventDisplay/src/TEveMu2eHit.cc b/TEveEventDisplay/src/TEveMu2eHit.cc index d61f7bd070..b4f03eb494 100644 --- a/TEveEventDisplay/src/TEveMu2eHit.cc +++ b/TEveEventDisplay/src/TEveMu2eHit.cc @@ -76,7 +76,6 @@ namespace mu2e{ this->SetNextPoint(pointInMu2e.x(), pointInMu2e.y(), pointInMu2e.z()); int colors[] = {-7, 3, -6, -1, 9, 0, -4, 10, 1}; this->SetMarkerColor(kSpring + colors[energylevel]); - //this->SetMarkerSize(mSize_); this->SetPickable(kTRUE); if(AddErrorBar_){ TEveLine *error = new TEveLine(); @@ -131,7 +130,6 @@ namespace mu2e{ this->SetNextPoint(pointInMu2e.x(), pointInMu2e.y(), pointInMu2e.z()); int colors[] = {-7, 3, -6, -1, 9, 0, -4, 10, 1}; this->SetMarkerColor(kSpring + colors[energylevel]); - //this->SetMarkerSize(mSize_); this->SetPickable(kTRUE); if(AddErrorBar_){ diff --git a/TEveEventDisplay/src/TEveMu2eMCInterface.cc b/TEveEventDisplay/src/TEveMu2eMCInterface.cc index a259c752c0..62b5163350 100644 --- a/TEveEventDisplay/src/TEveMu2eMCInterface.cc +++ b/TEveEventDisplay/src/TEveMu2eMCInterface.cc @@ -101,51 +101,51 @@ namespace mu2e{ auto t = new TEveText(pid); Color_t color; double posy = 0; - double posz = 3000.0; - t->SetFontSize(15); + double posz = text_z_pos; + t->SetFontSize(fontsize); switch(PDGCode) { - case 11: - color = 2; + case PDGCode::e_minus: + color = kRed; pid = "electron -"; posy = 1400.0; break; - case -11: - color = 5; + case PDGCode::e_plus: + color = kYellow; pid = "positron +"; posy = 1500.0; break; - case 13: - color = 3; + case PDGCode::mu_minus: + color = kGreen; pid = "muon - "; posy = 1600.0; break; - case -13: - color = 46; + case PDGCode::mu_plus: + color = kRed-9; pid = "muon + "; posy = 1700.0; break; - case -211: - color = 6; + case PDGCode::pi_minus: + color = kMagenta; pid = "pion -"; posy = 1800.0; break; - case 211: - color = 9; + case PDGCode::pi_plus: + color = kViolet; pid = "pion +"; posy = 1900.0; break; - case 2212: - color = 4; + case PDGCode::proton: + color = kBlue; pid = "proton"; posy = 2000.0; break; - case 22: - color = 8; + case PDGCode::gamma: + color = kOrange; pid = "gamma"; posy = 2100.0; break; default: - color = 7; + color = kCyan; pid = "other"; posy = 2200.0; break; @@ -205,11 +205,11 @@ namespace mu2e{ TEveText *t = GetLabel(trajectoryIter->first->pdgId(), line, line_twoDXZ, line_twoDXY); line_twoDXZ->SetTitle(Form(title.c_str())); line_twoDXY->SetTitle(Form(title.c_str())); - line->SetLineWidth(3); + line->SetLineWidth(linewidth); line->SetPickable(kTRUE); - line_twoDXZ->SetLineWidth(3); + line_twoDXZ->SetLineWidth(linewidth); line_twoDXZ->SetPickable(kTRUE); - line_twoDXY->SetLineWidth(3); + line_twoDXY->SetLineWidth(linewidth); line_twoDXY->SetPickable(kTRUE); fTrackList2DXZ->AddElement(line_twoDXZ); fTrackList2DXY->AddElement(line_twoDXY); diff --git a/TEveEventDisplay/src/TEveMu2eMainWindow.cc b/TEveEventDisplay/src/TEveMu2eMainWindow.cc index 1af222ccb4..bc07c2d0e0 100644 --- a/TEveEventDisplay/src/TEveMu2eMainWindow.cc +++ b/TEveEventDisplay/src/TEveMu2eMainWindow.cc @@ -21,11 +21,13 @@ using namespace mu2e; namespace mu2e{ + /*------ Default Constructor ------ */ TEveMu2eMainWindow::TEveMu2eMainWindow() : TGMainFrame(gClient->GetRoot(), 320, 320){} - + /*------------Function to construct main frame, add buttons and GUI:-------------*/ - TEveMu2eMainWindow::TEveMu2eMainWindow(const TGWindow* p, UInt_t w, UInt_t h, fhicl::ParameterSet _pset): + TEveMu2eMainWindow::TEveMu2eMainWindow(const TGWindow* p, UInt_t w, UInt_t h, fhicl::ParameterSet _pset, DrawOptions drawOpts) : TGMainFrame(p, w, h), + DrawOpts(drawOpts), fTeRun(0), fTeEvt(0), fTTEvt(0), @@ -38,27 +40,27 @@ namespace mu2e{ trackscheck(0), cosmicscheck(0), cosmictrkscheck(0), - mctrajcheck(0) - { + mctrajcheck(0) + { //Create TEve Manager: TEveManager::Create(); //Create Browser : gEve->GetBrowser()->GetTabRight()->SetTab(0); gClient->GetRoot(); browser = gEve->GetBrowser(); - //Build GUI (function below) + //Build GUI (function below) CreateGUI(); //Build Multiple View Window: - //CreateMultiViews(); + //CreateMultiViews(); --> option for pop up window no deprecated //Add your Event: gEve->AddEvent(new TEveEventManager("Event", "Empty Event")); - + } - + /*------------Function to create multiple windows for 2D projections:-------------*/ void TEveMu2eMainWindow::CreateMultiViews(){ gEve->GetBrowser()->GetTabRight()->SetTab(0); - + fPad = new TEvePad(); fPad->SetFillColor(kBlack); // create the split frames @@ -68,7 +70,7 @@ namespace mu2e{ fSplitFrame->HSplit(350); fSplitFrame->GetFirst()->VSplit(410); fSplitFrame->GetSecond()->VSplit(410); - // get top (main) split frame + // get top (main) split frame frm = fSplitFrame->GetFirst()->GetFirst(); frm->SetName("Calorimeter_XY_View"); fViewer0 = new TGLEmbeddedViewer(frm, fPad); @@ -77,7 +79,7 @@ namespace mu2e{ // set the camera to perspective (XOZ) for this viewer fViewer0->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); // connect signal we are interested to - + fViewer[0] = new TEveViewer("SplitGLViewer[0]"); fViewer[0]->SetGLViewer(fViewer0, fViewer0->GetFrame()); fViewer[0]->IncDenyDestroy(); @@ -92,17 +94,16 @@ namespace mu2e{ gEve->AddToListTree(axes_xy,kTRUE); gEve->AddToListTree(CfXYMgr,kTRUE); fViewer[0]->AddScene(proj0); - } - + } frm = fSplitFrame->GetFirst()->GetSecond(); frm->SetName("Calorimeter_RZ_View"); fViewer1 = new TGLEmbeddedViewer(frm, fPad); frm->AddFrame(fViewer1->GetFrame(), new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); - // set the camera to perspective (XOZ) for this viewer + // set the camera to perspective (XOZ) for this viewer fViewer1->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); // connect signal we are interested to - + fViewer[1] = new TEveViewer("SplitGLViewer[0]"); fViewer[1]->SetGLViewer(fViewer1, fViewer1->GetFrame()); fViewer[1]->IncDenyDestroy(); @@ -117,17 +118,17 @@ namespace mu2e{ gEve->AddToListTree(axes_xy,kTRUE); gEve->AddToListTree(CfRZMgr,kTRUE); fViewer[1]->AddScene(proj1); -} - + } + frm = fSplitFrame->GetSecond()->GetFirst(); frm->SetName("Tracker_XY_View"); fViewer2 = new TGLEmbeddedViewer(frm, fPad); frm->AddFrame(fViewer2->GetFrame(), new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); - // set the camera to perspective (XOZ) for this viewer + // set the camera to perspective (XOZ) for this viewer fViewer2->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); // connect signal we are interested to - + fViewer[2] = new TEveViewer("SplitGLViewer[2]"); fViewer[2]->SetGLViewer(fViewer2, fViewer2->GetFrame()); fViewer[2]->IncDenyDestroy(); @@ -138,21 +139,21 @@ namespace mu2e{ TfXYMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi); proj2->AddElement(TfXYMgr); TEveProjectionAxes* axes_xytracker = new TEveProjectionAxes(TfXYMgr); - proj2->AddElement(axes_xytracker); + proj2->AddElement(axes_xytracker); gEve->AddToListTree(axes_xytracker,kTRUE); gEve->AddToListTree(TfXYMgr,kTRUE); fViewer[2]->AddScene(proj2); -} - + } + frm = fSplitFrame->GetSecond()->GetSecond(); frm->SetName("Tracker_RZ_View"); fViewer3 = new TGLEmbeddedViewer(frm, fPad); frm->AddFrame(fViewer3->GetFrame(), new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); - // set the camera to perspective (XOZ) for this viewer + // set the camera to perspective (XOZ) for this viewer fViewer3->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); // connect signal we are interested to - + fViewer[3] = new TEveViewer("SplitGLViewer[3]"); fViewer[3]->SetGLViewer(fViewer3, fViewer3->GetFrame()); fViewer[3]->IncDenyDestroy(); @@ -167,14 +168,73 @@ namespace mu2e{ gEve->AddToListTree(axes_xytracker,kTRUE); gEve->AddToListTree(TfRZMgr,kTRUE); fViewer[3]->AddScene(proj3); -} - + } + // create the split frames + fPadCRV = new TEvePad(); + fPadCRV->SetFillColor(kBlack); + + fSplitFrameCRV = new TGSplitFrame(this, 900, 1300); + AddFrame(fSplitFrameCRV, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); + // split it once + fSplitFrameCRV->HSplit(350); + //fSplitFrameCRV->GetFirst()->VSplit(410); + //fSplitFrameCRV->GetSecond()->VSplit(410); + //get top (main) split frame + frmCRV = fSplitFrameCRV->GetFirst();//->GetFirst(); + frmCRV->SetName("CRV_XY_View"); + fViewer4 = new TGLEmbeddedViewer(frmCRV, fPadCRV); + frmCRV->AddFrame(fViewer4->GetFrame(), new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); + // set the camera to perspective (XOZ) for this viewer + fViewer4->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); + // connect signal we are interested to + + fViewer[4] = new TEveViewer("SplitGLViewer[4]"); + fViewer[4]->SetGLViewer(fViewer4, fViewer4->GetFrame()); + fViewer[4]->IncDenyDestroy(); + if (fIsEmbedded && gEve) { + gEve->GetViewers()->AddElement(fViewer[4]); + proj4 = gEve->SpawnNewScene("CRV XY Scene"); + //fViewer[1]->AddScene(fdetXY); + CrfXYMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi); + proj4->AddElement(CrfXYMgr); + TEveProjectionAxes* axes_xy = new TEveProjectionAxes(CrfXYMgr); + proj4->AddElement(axes_xy); + gEve->AddToListTree(axes_xy,kTRUE); + gEve->AddToListTree(CrfXYMgr,kTRUE); + fViewer[4]->AddScene(proj4); + } + + frmCRV = fSplitFrameCRV->GetSecond();//->GetSecond(); + frmCRV->SetName("CRV_YZ_View"); + fViewer5 = new TGLEmbeddedViewer(frmCRV, fPadCRV); + frmCRV->AddFrame(fViewer5->GetFrame(), new TGLayoutHints(kLHintsExpandX | + kLHintsExpandY)); + // set the camera to perspective (XOZ) for this viewer + fViewer5->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); + // connect signal we are interested to + + fViewer[5] = new TEveViewer("SplitGLViewer[5]"); + fViewer[5]->SetGLViewer(fViewer5, fViewer5->GetFrame()); + fViewer[5]->IncDenyDestroy(); + if (fIsEmbedded && gEve) { + gEve->GetViewers()->AddElement(fViewer[5]); + proj5 = gEve->SpawnNewScene("CRV YZ Scene"); + //fViewer[1]->AddScene(fdetXY); + CrfRZMgr = new TEveProjectionManager(TEveProjection::kPT_RhoZ); + proj5->AddElement(CrfRZMgr); + TEveProjectionAxes* axes_xytracker = new TEveProjectionAxes(CrfRZMgr); + proj5->AddElement(axes_xytracker); + gEve->AddToListTree(axes_xytracker,kTRUE); + gEve->AddToListTree(CrfRZMgr,kTRUE); + fViewer[5]->AddScene(proj5); + } + Resize(GetDefaultSize()); MapSubwindows(); MapWindow(); - + } - + /*------------Function to create GUI buttons etc.:-------------*/ void TEveMu2eMainWindow::CreateGUI(){ FontStruct_t buttonfont = gClient->GetFontByName("-*-helvetica-medium-r-*-*-8-*-*-*-*-*-iso8859-1"); @@ -182,65 +242,65 @@ namespace mu2e{ gval.fMask = kGCForeground | kGCFont; gval.fFont = gVirtualX->GetFontHandle(buttonfont); gClient->GetColorByName("black", gval.fForeground); - + browser->StartEmbedding(TRootBrowser::kLeft); // insert nav frame as new tab in left pane - + frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600); frmMain->SetWindowName("EVT NAV"); frmMain->SetCleanup(kDeepCleanup); - + TGHorizontalFrame* navFrame = new TGHorizontalFrame(frmMain); TGVerticalFrame* evtidFrame = new TGVerticalFrame(frmMain); { TString icondir(TString::Format("%s/icons/", gSystem->Getenv("ROOTSYS")) ); - + TGPictureButton *b = new TGPictureButton(navFrame, gClient->GetPicture(icondir + "GoBack.gif"),1100); navFrame->AddFrame(b); b->Associate(this); - + TGPictureButton *f = new TGPictureButton(navFrame, gClient->GetPicture(icondir + "GoForward.gif"),1001); navFrame->AddFrame(f); f->Associate(this); - + // ... Create run num text entry widget and connect to "GotoEvent" rcvr in visutils TGHorizontalFrame* runoFrame = new TGHorizontalFrame(evtidFrame); - fTlRun = new TGLabel(runoFrame,"Run Number"); + fTlRun = new TGLabel(runoFrame,"Run Number"); fTlRun->SetTextJustify(kTextLeft); fTlRun->SetMargins(5,5,5,0); runoFrame->AddFrame(fTlRun); - + fTeRun = new TGTextEntry(runoFrame, _runNumber = new TGTextBuffer(5), 1); _runNumber->AddText(0, "Enter Run Number"); - + runoFrame->AddFrame(fTeRun,new TGLayoutHints(kLHintsExpandX)); fTeRun->Associate(this); - + // ... Create evt num text entry widget and connect to "GotoEvent" rcvr in visutils TGHorizontalFrame* evnoFrame = new TGHorizontalFrame(evtidFrame); fTlEvt = new TGLabel(evnoFrame,"Evt Number"); fTlEvt->SetTextJustify(kTextLeft); fTlEvt->SetMargins(5,5,5,0); evnoFrame->AddFrame(fTlEvt); - + fTeEvt = new TGTextEntry(evnoFrame, _eventNumber = new TGTextBuffer(5), 1); _eventNumber->AddText(0, "Enter Run Number"); - + evnoFrame->AddFrame(fTeEvt,new TGLayoutHints(kLHintsExpandX)); fTeEvt->Associate(this); TGTextButton *Gobutton = new TGTextButton(navFrame, "&Go", 1999); - navFrame->AddFrame(Gobutton, new TGLayoutHints(kLHintsLeft,3,0,3,0)); - Gobutton->Associate(this); - + navFrame->AddFrame(Gobutton, new TGLayoutHints(kLHintsLeft,3,0,3,0)); + Gobutton->Associate(this); + //Add Mu2e logo ConfigFileLookupPolicy configFile; std::string logoFile = configFile("Offline/TEveEventDisplay/src/Icons/mu2e_logo_oval.png"); const TGPicture *logo = gClient->GetPicture(logoFile.c_str()); TGIcon *icon = new TGIcon(navFrame,logo,50,50); navFrame->AddFrame(icon,new TGLayoutHints(kLHintsLeft,20,0,0,0)); - + celabel = new TGLabel(evtidFrame, "Cluster Energy"); - + TGHorizontalFrame *centenergyframe = new TGHorizontalFrame(evtidFrame); cminenergy = new TGTextEntry(centenergyframe, _clustminenergy = new TGTextBuffer(5), 1701); _clustminenergy->AddText(0, "0.0"); @@ -252,16 +312,16 @@ namespace mu2e{ _clustmaxenergy->AddText(0, "0.0"); centenergyframe->AddFrame(cmaxenergy,new TGLayoutHints(kLHintsExpandX)); cmaxenergy->Associate(this); - + std::string clusterenergy = configFile("Offline/TEveEventDisplay/src/Icons/purplegradient.png"); const TGPicture *ce = gClient->GetPicture(clusterenergy.c_str()); TGIcon *ceicon = new TGIcon(evtidFrame, ce, 40, 8); - + helabel = new TGLabel(evtidFrame, "Hit Energy"); std::string hitenergy = configFile("Offline/TEveEventDisplay/src/Icons/greengradient.png");; - const TGPicture *he = gClient->GetPicture(hitenergy.c_str()); + const TGPicture *he = gClient->GetPicture(hitenergy.c_str()); TGIcon *heicon = new TGIcon(evtidFrame, he, 40 ,8); - + TGHorizontalFrame *hentenergyframe = new TGHorizontalFrame(evtidFrame); hminenergy = new TGTextEntry(hentenergyframe, _hitminenergy = new TGTextBuffer(5), 1702); _hitminenergy->AddText(0, "0.0"); @@ -274,7 +334,7 @@ namespace mu2e{ hentenergyframe->AddFrame(hmaxenergy,new TGLayoutHints(kLHintsExpandX)); hmaxenergy->Associate(this); timelabel = new TGLabel(evtidFrame, "Time Interval [ns]"); - TGHorizontalFrame *henttimeframe = new TGHorizontalFrame(evtidFrame); + TGHorizontalFrame *henttimeframe = new TGHorizontalFrame(evtidFrame); hmintime = new TGTextEntry(henttimeframe, _hitmintime = new TGTextBuffer(5), 1703); _hitmintime->AddText(0, "0.0"); henttimeframe->AddFrame(hmintime,new TGLayoutHints(kLHintsExpandX)); @@ -285,8 +345,8 @@ namespace mu2e{ _hitmaxtime->AddText(0, "0.0"); henttimeframe->AddFrame(hmaxtime,new TGLayoutHints(kLHintsExpandX)); hmaxtime->Associate(this); - - br = new TGButtonGroup(evtidFrame, "Data Products", kVerticalFrame); + + br = new TGButtonGroup(evtidFrame, "Data Products", kVerticalFrame); clusterscheck = new TGCheckButton(br, new TGHotString("Clusters"), 1200); clusterscheck->SetState(kButtonDown); hitscheck = new TGCheckButton(br, new TGHotString("Hits"), 1201); @@ -297,13 +357,13 @@ namespace mu2e{ cosmicscheck->SetState(kButtonDown); cosmictrkscheck = new TGCheckButton(br, new TGHotString("Cosmic Tracks"), 1204); cosmictrkscheck->SetState(kButtonDown); - mctrajcheck = new TGCheckButton(br, new TGHotString("MC Trajectories"), 1205); + mctrajcheck = new TGCheckButton(br, new TGHotString("MC Trajectories"), 1205); mctrajcheck->SetState(kButtonDown); // ... Add horizontal run & event number subframes to vertical evtidFrame - evtidFrame->AddFrame(runoFrame,new TGLayoutHints(kLHintsExpandX)); + evtidFrame->AddFrame(runoFrame,new TGLayoutHints(kLHintsExpandX)); evtidFrame->AddFrame(evnoFrame,new TGLayoutHints(kLHintsExpandX)); - + evtidFrame->AddFrame(celabel, new TGLayoutHints(kLHintsLeft,3,0,3,0)); evtidFrame->AddFrame(ceicon, new TGLayoutHints(kLHintsLeft,20,0,0,0)); evtidFrame->AddFrame(centenergyframe, new TGLayoutHints(kLHintsLeft,3,0,3,0)); @@ -313,8 +373,8 @@ namespace mu2e{ evtidFrame->AddFrame(timelabel, new TGLayoutHints(kLHintsLeft,3,0,3,0)); evtidFrame->AddFrame(henttimeframe, new TGLayoutHints(kLHintsLeft,3,0,3,0)); evtidFrame->AddFrame(br, new TGLayoutHints(kLHintsExpandX)); - - clusterscheck->Associate(this); + + clusterscheck->Associate(this); hitscheck->Associate(this); trackscheck->Associate(this); cosmictrkscheck->Associate(this); @@ -325,25 +385,25 @@ namespace mu2e{ TGHorizontal3DLine *separator = new TGHorizontal3DLine(frmMain); frmMain->AddFrame(separator, new TGLayoutHints(kLHintsExpandX)); frmMain->AddFrame(evtidFrame); - + frmMain->MapSubwindows(); frmMain->Resize(); frmMain->MapWindow(); - + browser->StopEmbedding(); browser->SetTabTitle("Event Nav", 0); } - - + + } - + /*------------Function to create 2D Tabs:-------------*/ void TEveMu2eMainWindow::StartProjectionTabs(){ - //pass_proj->CreateCRVProjection(CRV2Dproj); - pass_proj->CreateCaloProjection(calo2Dproj); - pass_proj->CreateTrackerProjection(tracker2Dproj); + if(DrawOpts.addCRVInfo) {pass_proj->CreateCRVProjection(CRV2Dproj);} + if(DrawOpts.addClusters or DrawOpts.addCryHits)pass_proj->CreateCaloProjection(calo2Dproj); + pass_proj->CreateTrackerProjection(tracker2Dproj); } - + /*------------Function to add calo 2D projection to display:-------------*/ void TEveMu2eMainWindow::CreateCaloProjection(){ // Create detector and event scenes for ortho views @@ -351,45 +411,45 @@ namespace mu2e{ calo2Dproj->fDetRZScene = gEve->SpawnNewScene("Calo XY D1 Scene", ""); calo2Dproj->fEvtXYScene = gEve->SpawnNewScene("Calo Evt XY D0 Scene", ""); calo2Dproj->fEvtRZScene = gEve->SpawnNewScene("Calo Evt XY D1 Scene", ""); - + // Create XY/RZ calo2Dprojection mgrs, draw projected axes, & add them to scenes calo2Dproj->fXYMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi); TEveProjectionAxes* axes_xy = new TEveProjectionAxes(calo2Dproj->fXYMgr); calo2Dproj->fDetXYScene->AddElement(axes_xy); gEve->AddToListTree(axes_xy,kTRUE); gEve->AddToListTree(calo2Dproj->fXYMgr,kTRUE); - + calo2Dproj->fRZMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi); TEveProjectionAxes* axes_rz = new TEveProjectionAxes(calo2Dproj->fRZMgr); calo2Dproj->fDetRZScene->AddElement(axes_rz); gEve->AddToListTree(axes_rz,kTRUE); - gEve->AddToListTree(calo2Dproj->fRZMgr,kTRUE); - + gEve->AddToListTree(calo2Dproj->fRZMgr,kTRUE); + // Create side-by-side ortho D1, D2 views in new tab & add det/evt scenes TEveWindowSlot *slot = 0; TEveWindowPack *pack = 0; - + slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight()); - pack = slot->MakePack(); + pack = slot->MakePack(); pack->SetElementName("Calo Views"); pack->SetHorizontal(); pack->SetShowTitleBar(kFALSE); - + pack->NewSlot()->MakeCurrent(); calo2Dproj->fXYView = gEve->SpawnNewViewer("Disk0 View", ""); calo2Dproj->fXYView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); calo2Dproj->fXYView->AddScene(calo2Dproj->fDetXYScene); calo2Dproj->fXYView->AddScene(calo2Dproj->fEvtXYScene); - + pack->NewSlot()->MakeCurrent(); calo2Dproj->fRZView = gEve->SpawnNewViewer("Disk1 View", ""); calo2Dproj->fRZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); calo2Dproj->fRZView->AddScene(calo2Dproj->fDetRZScene); calo2Dproj->fRZView->AddScene(calo2Dproj->fEvtRZScene); - - gEve->GetBrowser()->GetTabRight()->SetTab(0); - } - + + gEve->GetBrowser()->GetTabRight()->SetTab(0); + } + /*------------Function to add tracker 2D projection to display:-------------*/ void TEveMu2eMainWindow::CreateTrackerProjection(){ // Create detector and event scenes for ortho views @@ -397,7 +457,7 @@ namespace mu2e{ tracker2Dproj->fDetRZScene = gEve->SpawnNewScene("Tracker Det RZ Scene", ""); tracker2Dproj->fEvtXYScene = gEve->SpawnNewScene("Tracker Evt XY Scene", ""); tracker2Dproj->fEvtRZScene = gEve->SpawnNewScene("Tracker Evt RZ Scene", ""); - + // Create XY/RZ tracker2Dprojection mgrs, draw projected axes, & add them to scenes tracker2Dproj->fXYMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi); TEveProjectionAxes* axes_xy = new TEveProjectionAxes(tracker2Dproj->fXYMgr); @@ -405,50 +465,115 @@ namespace mu2e{ tracker2Dproj->fEvtXYScene->AddElement(axes_xy); gEve->AddToListTree(axes_xy,kTRUE); gEve->AddToListTree(tracker2Dproj->fXYMgr,kTRUE); - + tracker2Dproj->fRZMgr = new TEveProjectionManager(TEveProjection::kPT_RhoZ); TEveProjectionAxes* axes_rz = new TEveProjectionAxes(tracker2Dproj->fRZMgr); tracker2Dproj->fDetRZScene->AddElement(axes_rz); tracker2Dproj->fEvtRZScene->AddElement(axes_rz); gEve->AddToListTree(axes_rz,kTRUE); gEve->AddToListTree(tracker2Dproj->fRZMgr,kTRUE); - + // Create side-by-side ortho XY & RZ views in new tab & add det/evt scenes TEveWindowSlot *slot = 0; TEveWindowPack *pack = 0; - + slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight()); pack = slot->MakePack(); pack->SetElementName("Tracker Views"); pack->SetHorizontal(); pack->SetShowTitleBar(kFALSE); - + pack->NewSlot()->MakeCurrent(); tracker2Dproj->fXYView = gEve->SpawnNewViewer("Tracker XY View", ""); tracker2Dproj->fXYView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); tracker2Dproj->fXYView->AddScene(tracker2Dproj->fDetXYScene); tracker2Dproj->fXYView->AddScene(tracker2Dproj->fEvtXYScene); - + pack->NewSlot()->MakeCurrent(); tracker2Dproj->fRZView = gEve->SpawnNewViewer("Tracker RZ View", ""); tracker2Dproj->fRZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); tracker2Dproj->fRZView->AddScene(tracker2Dproj->fDetRZScene); tracker2Dproj->fRZView->AddScene(tracker2Dproj->fEvtRZScene); - + gEve->GetBrowser()->GetTabRight()->SetTab(0); - + } - + /*------------Function to add CRV 2D projection to display:-------------*/ + void TEveMu2eMainWindow::CreateCRVProjection(){ + // Create detector and event scenes for ortho views + CRV2Dproj->fDetXYScene = gEve->SpawnNewScene("CRV Det XY Scene", ""); + CRV2Dproj->fDetRZScene = gEve->SpawnNewScene("CRV Det RZ Scene", ""); + CRV2Dproj->fEvtXYScene = gEve->SpawnNewScene("CRV Evt XY Scene", ""); + CRV2Dproj->fEvtRZScene = gEve->SpawnNewScene("CRV Evt RZ Scene", ""); + + // Create XY/RZ CRV2Dprojection mgrs, draw projected axes, & add them to scenes + CRV2Dproj->fXYMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi); + TEveProjectionAxes* axes_xy = new TEveProjectionAxes(CRV2Dproj->fXYMgr); + CRV2Dproj->fDetXYScene->AddElement(axes_xy); + CRV2Dproj->fEvtXYScene->AddElement(axes_xy); + gEve->AddToListTree(axes_xy,kTRUE); + gEve->AddToListTree(CRV2Dproj->fXYMgr,kTRUE); + + /*CRV2Dproj->fRZMgr = new TEveProjectionManager(TEveProjection::kPT_RhoZ); + TEveProjectionAxes* axes_rz = new TEveProjectionAxes(CRV2Dproj->fRZMgr); + CRV2Dproj->fDetRZScene->AddElement(axes_rz); + CRV2Dproj->fEvtRZScene->AddElement(axes_rz); + gEve->AddToListTree(axes_rz,kTRUE); + gEve->AddToListTree(CRV2Dproj->fRZMgr,kTRUE); + */ + + // Create side-by-side ortho XY & RZ views in new tab & add det/evt scenes + TEveWindowSlot *slot = 0; + TEveWindowPack *pack = 0; + + slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight()); + pack = slot->MakePack(); + pack->SetElementName("CRV XY View"); + pack->SetHorizontal(); + pack->SetShowTitleBar(kFALSE); + + pack->NewSlot()->MakeCurrent(); + CRV2Dproj->fXYView = gEve->SpawnNewViewer("CRV XY View", ""); + CRV2Dproj->fXYView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); + CRV2Dproj->fXYView->AddScene(CRV2Dproj->fDetXYScene); + CRV2Dproj->fXYView->AddScene(CRV2Dproj->fEvtXYScene); + + gEve->GetBrowser()->GetTabRight()->SetTab(0); + + CRV2Dproj->fRZMgr = new TEveProjectionManager(TEveProjection::kPT_RhoZ); + TEveProjectionAxes* axes_rz = new TEveProjectionAxes(CRV2Dproj->fRZMgr); + CRV2Dproj->fDetRZScene->AddElement(axes_rz); + CRV2Dproj->fEvtRZScene->AddElement(axes_rz); + gEve->AddToListTree(axes_rz,kTRUE); + gEve->AddToListTree(CRV2Dproj->fRZMgr,kTRUE); + + TEveWindowSlot *slotnew = 0; + TEveWindowPack *packnew = 0; + slotnew = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight()); + packnew = slotnew->MakePack(); + packnew->SetElementName("CRV YZ View"); + packnew->SetHorizontal(); + packnew->SetShowTitleBar(kFALSE); + packnew->NewSlot()->MakeCurrent(); + CRV2Dproj->fRZView = gEve->SpawnNewViewer("CRV YZ View", ""); + CRV2Dproj->fRZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); + CRV2Dproj->fRZView->AddScene(CRV2Dproj->fDetRZScene); + CRV2Dproj->fRZView->AddScene(CRV2Dproj->fEvtRZScene); + + gEve->GetBrowser()->GetTabRight()->SetTab(0); + + } + + /*------------Function to create Calo 2D tab:-------------*/ void TEveMu2eMainWindow::PrepareCaloProjectionTab(const art::Run& run){ - calo2Dproj->fDetXYScene->DestroyElements(); + calo2Dproj->fDetXYScene->DestroyElements(); calo2Dproj->fDetRZScene->DestroyElements(); TEveElementList *orthodet0 = new TEveElementList("CaloOrthoDet0"); TEveElementList *orthodet1 = new TEveElementList("CaloOrthoDet1"); - TGeoVolume* topvol = geom->GetTopVolume(); + TGeoVolume* topvol = geom->GetTopVolume(); Mu2eCalo->DrawCaloDetector(run, topvol,orthodet0,orthodet1); - gEve->AddGlobalElement(orthodet0); gEve->AddGlobalElement(orthodet1); @@ -458,28 +583,28 @@ namespace mu2e{ // ... Import elements of the list into the projected views calo2Dproj->fXYMgr->ImportElements(orthodet0, calo2Dproj->fDetXYScene); calo2Dproj->fRZMgr->ImportElements(orthodet1, calo2Dproj->fDetRZScene); - + //fXYMgr->ImportElements(orthodet0, fdetXY); // ... Turn OFF rendering of duplicate detector in main 3D view gEve->GetGlobalScene()->FindChild("CaloOrthoDet0")->SetRnrState(kFALSE); gEve->GetGlobalScene()->FindChild("CaloOrthoDet1")->SetRnrState(kFALSE); - + // ... Turn ON rendering of detector in RPhi and RZ views calo2Dproj->fDetXYScene->FindChild("CaloOrthoDet0 [P]")->SetRnrState(kTRUE); calo2Dproj->fDetRZScene->FindChild("CaloOrthoDet1 [P]")->SetRnrState(kTRUE); } - + /*------------Function to create Tracker 2D tab:-------------*/ void TEveMu2eMainWindow::PrepareTrackerProjectionTab(const art::Run& run){ tracker2Dproj->fDetXYScene->DestroyElements(); tracker2Dproj->fDetRZScene->DestroyElements(); //fdetXY->DestroyElements(); - + TEveElementList *orthodetXY = new TEveElementList("OrthoDetXY"); TEveElementList *orthodetXZ = new TEveElementList("OrthoDetXZ"); //TEveElementList *orthodetsplit = new TEveElementList("OrthoDet"); - + TGeoVolume* topvol = geom->GetTopVolume(); Mu2eTracker->DrawTrackerDetector(topvol, orthodetXZ, orthodetXY); //Mu2eTracker->DrawTrackerDetector(run, topvol, orthodetsplit); @@ -490,53 +615,56 @@ namespace mu2e{ // ... Import elements of the list into the projected views //TfXYMgr->ImportElements(orthodetsplit); //TfRZMgr->ImportElements(orthodetsplit); - - tracker2Dproj->fXYMgr->ImportElements(orthodetXY, tracker2Dproj->fDetXYScene); + + tracker2Dproj->fXYMgr->ImportElements(orthodetXY, tracker2Dproj->fDetXYScene); tracker2Dproj->fRZMgr->ImportElements(orthodetXZ, tracker2Dproj->fDetRZScene); - + // ... Turn OFF rendering of duplicate detector in main 3D view - gEve->GetGlobalScene()->FindChild("OrthoDetXY")->SetRnrState(kFALSE); + gEve->GetGlobalScene()->FindChild("OrthoDetXY")->SetRnrState(kFALSE); gEve->GetGlobalScene()->FindChild("OrthoDetXZ")->SetRnrState(kFALSE); //fdetXY->FindChild("OrthoDet [P]")->SetRnrState(kTRUE); // ... Turn ON rendering of detector in RPhi and RZ views tracker2Dproj->fDetXYScene->FindChild("OrthoDetXY [P]")->SetRnrState(kTRUE); tracker2Dproj->fDetRZScene->FindChild("OrthoDetXZ [P]")->SetRnrState(kTRUE); - + } - + /*------------Function to create CRV tab:-------------*/ void TEveMu2eMainWindow::PrepareCRVProjectionTab(const art::Run& run){ - + CRV2Dproj->fDetXYScene->DestroyElements(); CRV2Dproj->fEvtXYScene->DestroyElements(); - + TGeoVolume* topvol = geom->GetTopVolume(); - - TEveElementList *orthodetT1 = new TEveElementList("CRVT1OrthoDet"); - TEveElementList *orthodetT2 = new TEveElementList("CRVT2OrthoDet"); + + //TEveElementList *orthodetT1 = new TEveElementList("CRVT1OrthoDet"); + // TEveElementList *orthodetT2 = new TEveElementList("CRVT2OrthoDet"); TEveElementList *orthodetT3 = new TEveElementList("CRVT3OrthoDet"); TEveElementList *orthodetT4 = new TEveElementList("CRVT4OrthoDet"); - TEveElementList *orthodetlist[] = {orthodetT1, orthodetT2, orthodetT3, orthodetT4}; - - Mu2eCRV->DrawCRVDetector(run, topvol, orthodetlist); - - for (unsigned int i=0; i<4; i++){ - gEve->AddGlobalElement(orthodetlist[i]); - } - - for (unsigned int i=0; i<4; i++){ - CRV2Dproj->fXYMgr->ImportElements(orthodetlist[i], CRV2Dproj->fDetXYScene); - } - + //TEveElementList *orthodetlist[] = {orthodetT1, orthodetT2, orthodetT3, orthodetT4}; + + Mu2eCRV->DrawCRVDetector(run, topvol, orthodetT3, orthodetT4); + + //for (unsigned int i=0; i<2; i++){ + gEve->AddGlobalElement(orthodetT3); + gEve->AddGlobalElement(orthodetT4); + // } + + //for (unsigned int i=0; i<2; i++){ + CRV2Dproj->fXYMgr->ImportElements(orthodetT4, CRV2Dproj->fDetXYScene); + CRV2Dproj->fRZMgr->ImportElements(orthodetT4, CRV2Dproj->fDetRZScene); + // } + // ... Turn OFF rendering of duplicate detector in main 3D view - gEve->GetGlobalScene()->FindChild("OrthoDet")->SetRnrState(kFALSE); - + gEve->GetGlobalScene()->FindChild("CRVT4OrthoDet")->SetRnrState(kFALSE); + gEve->GetGlobalScene()->FindChild("CRVT4OrthoDet")->SetRnrState(kFALSE); + // ... Turn ON rendering of detector in RPhi and RZ views - //CRV2Dproj->fDetXYScene->FindChild("OrthoDet [P]")->SetRnrState(kTRUE); - //CRV2Dproj->fDetRZScene->FindChild("OrthoDets0 [P]")->SetRnrState(kTRUE); - + CRV2Dproj->fDetXYScene->FindChild("CRVT4OrthoDet [P]")->SetRnrState(kTRUE); + CRV2Dproj->fDetRZScene->FindChild("CRVT4OrthoDet [P]")->SetRnrState(kTRUE); + } - + /*------------Function to import the GDML and make 3D geometry:-------------*/ void TEveMu2eMainWindow::SetRunGeometry(const art::Run& run, int _diagLevel, bool _showBuilding, bool _showDSOnly, bool _showCRV){ if(gGeoManager){ @@ -545,43 +673,43 @@ namespace mu2e{ gGeoManager->GetListOfShapes()->Delete(); } gEve->GetGlobalScene()->DestroyElements(); - + // Import the GDML of entire Mu2e Geometry ConfigFileLookupPolicy configFile; std::string fn = configFile("Offline/TEveEventDisplay/src/fix.gdml"); - - geom = mu2e_geom->Geom_Interface::getGeom(fn); + geom = mu2e_geom->Geom_Interface::getGeom(fn); + //Get Top Volume TGeoVolume* topvol = geom->GetTopVolume(); - + //Set Top Volume for gGeoManager: gGeoManager->SetTopVolume(topvol); gGeoManager->SetTopVisible(kTRUE); int nn = gGeoManager->GetNNodes(); printf("nodes in geom = %d\n",nn); - + //Get Top Node: TGeoNode* topnode = gGeoManager->GetTopNode(); TEveGeoTopNode* etopnode = new TEveGeoTopNode(gGeoManager, topnode); etopnode->SetVisLevel(4); etopnode->GetNode()->GetVolume()->SetVisibility(kFALSE); - + setRecursiveColorTransp(etopnode->GetNode()->GetVolume(), kWhite-10,70); - - if(!_showBuilding){ + + if(!_showBuilding){ mu2e_geom->SolenoidsOnly(topnode); mu2e_geom->hideTop(topnode, _diagLevel); } if(_showDSOnly) mu2e_geom->InsideDS(topnode, false ); - + if(_showCRV) mu2e_geom->InsideCRV(topnode, true); - + //Add static detector geometry to global scene gEve->AddGlobalElement(etopnode); geom->Draw("ogl"); } - + /*------------Function to allow user to recheck the check box, and redraw data:-------------*/ void TEveMu2eMainWindow::RedrawDataProducts(std::string type){ if (type == "Clusters"){ @@ -590,14 +718,15 @@ namespace mu2e{ if (type == "Hits"){ if (_data.chcol !=0){*hitenergy = pass_data->AddComboHits(_firstLoop, _emptydata.chcol, tracker2Dproj, true, fhitmin, fhitmax,ftimemin, ftimemax,_accumulate, TfXYMgr, TfRZMgr, proj2, proj3);} if(_data.cryHitcol !=0){pass_data->AddCrystalHits(_firstLoop, _emptydata.cryHitcol, calo2Dproj, ftimemin, ftimemax, true, _accumulate, CfXYMgr, CfRZMgr, proj0, proj1);} - } + + } if (type == "Tracks"){ pass_data->AddHelixPieceWise3D(_firstLoop, _emptydata.track_tuple, tracker2Dproj, ftimemin, ftimemax, true, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); } if (type == "Cosmics"){ - if(_data.crvcoincol!= 0){pass_data->AddCRVInfo(_firstLoop, _emptydata.crvcoincol, ftimemin, ftimemax, true, _accumulate);} + if(_data.crvcoincol!= 0){pass_data->AddCRVInfo(_firstLoop, _emptydata.crvcoincol, ftimemin, ftimemax, CRV2Dproj, true, _accumulate, TfXYMgr, TfRZMgr, proj4, proj5); } } - if (type == "Cosmic Tracks"){ + if (type == "Cosmic Tracks"){std::cout<<"Cosmic tracks "<AddCosmicTrack(_firstLoop, _emptydata.cosmiccol, tracker2Dproj, ftimemin, ftimemax, true, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3);} } if (type == "MC Trajectories"){ @@ -606,13 +735,13 @@ namespace mu2e{ gSystem->ProcessEvents(); gClient->NeedRedraw(fTeRun); gApplication->Run(true); - } - + } + /*------------Function to call button options:-------------*/ Bool_t TEveMu2eMainWindow::ProcessMessage(Long_t msg, Long_t param1, Long_t param2){ switch (GET_MSG(msg)) - { - + { + case kC_TEXTENTRY: switch (GET_SUBMSG(msg)){ case kTE_TEXTCHANGED: @@ -627,7 +756,7 @@ namespace mu2e{ new TGMsgBox(gClient->GetRoot(), gClient->GetRoot(), "Event Not Found", msg, kMBIconExclamation,kMBOk); } } - if (param1 == 1702){ + if (param1 == 1702){ fhitmin = atof(_hitminenergy->GetString()); fhitmax = atof(_hitmaxenergy->GetString()); if (fhitmin < fhitmax) {*hitenergy = pass_data->AddComboHits(_firstLoop, _data.chcol, tracker2Dproj, false, fhitmin, fhitmax,ftimemin, ftimemax, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3);} @@ -637,27 +766,27 @@ namespace mu2e{ sprintf(msg, "Error #%i : Hit minimum energy larger than maximum", true); new TGMsgBox(gClient->GetRoot(), gClient->GetRoot(), "Event Not Found", msg, kMBIconExclamation,kMBOk); } - } - if (param1 == 1703){ + } + if (param1 == 1703){ ftimemin = atof(_hitmintime->GetString()); ftimemax = atof(_hitmaxtime->GetString()); if (ftimemin < ftimemax) { if(_data.chcol!=0) { *hitenergy = pass_data->AddComboHits(_firstLoop, _data.chcol, tracker2Dproj, false, fhitmin, fhitmax, ftimemin, ftimemax, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); - } if(_data.clustercol!=0) { + } if(_data.clustercol!=0){ *clusterenergy = pass_data->AddCaloClusters(_firstLoop, _data.clustercol, calo2Dproj, false, fclustmin, fclustmax,ftimemin, ftimemax, _accumulate, CfXYMgr, CfRZMgr, proj0, proj1); }if(_data.crvcoincol!=0) { - pass_data->AddCRVInfo(_firstLoop, _data.crvcoincol, ftimemin, ftimemax, false, _accumulate); + pass_data->AddCRVInfo(_firstLoop, _data.crvcoincol, ftimemin, ftimemax, CRV2Dproj, false, _accumulate, TfXYMgr, TfRZMgr, proj4, proj5); } } - } + } break; } case kC_COMMAND: switch (GET_SUBMSG(msg)) { case kCM_CHECKBUTTON: - if(param1==1200){ + if(param1==1200){ if(clusterscheck->IsDown()){ *clusterenergy = pass_data->AddCaloClusters(_firstLoop, _data.clustercol, calo2Dproj, false, fclustmin, fclustmin, ftimemin, ftimemax, _accumulate, CfXYMgr, CfRZMgr, proj0, proj1);} if(!clusterscheck->IsDown() && _data.clustercol!=0){RedrawDataProducts("Clusters");} @@ -670,32 +799,32 @@ namespace mu2e{ if(!hitscheck->IsDown()){RedrawDataProducts("Hits");} } if(param1==1202){ - + if(trackscheck->IsDown()){pass_data->AddHelixPieceWise3D(_firstLoop, _data.track_tuple, tracker2Dproj, ftimemin, ftimemax, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3);} - + if(!trackscheck->IsDown()){RedrawDataProducts("Tracks");} } if(param1==1203){ if(cosmicscheck->IsDown()){ - pass_data->AddCRVInfo(_firstLoop, _data.crvcoincol, ftimemin, ftimemax, false, _accumulate); - + pass_data->AddCRVInfo(_firstLoop, _data.crvcoincol, ftimemin, ftimemax, CRV2Dproj, false, _accumulate, TfXYMgr, TfRZMgr, proj4, proj5); + } if(!cosmicscheck->IsDown()){RedrawDataProducts("Cosmics");} } if(param1==1204){ if(cosmictrkscheck->IsDown()){ - pass_data->AddCosmicTrack(_firstLoop, _data.cosmiccol, tracker2Dproj, ftimemin, ftimemax, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); + pass_data->AddCosmicTrack(_firstLoop, _data.cosmiccol, tracker2Dproj, ftimemin, ftimemax, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); } - if(!cosmictrkscheck->IsDown()){RedrawDataProducts("Cosmic Tracks");} + if(!cosmictrkscheck->IsDown()){RedrawDataProducts("Cosmic Tracks");} } if(param1==1205){ if(mctrajcheck->IsDown()){ - pass_mc->AddFullMCTrajectory(_firstLoop, _data.mctrajcol, tracker2Dproj, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3, particles); + pass_mc->AddFullMCTrajectory(_firstLoop, _data.mctrajcol, tracker2Dproj, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3, particles); } if(!mctrajcheck->IsDown()){RedrawDataProducts("MC Trajectories");} } break; - case kCM_BUTTON: + case kCM_BUTTON: if(param1==1111) {} if(param1==1001)//Forward @@ -703,7 +832,7 @@ namespace mu2e{ gApplication->Terminate(0); } if(param1==1100)//Back - { + { std::cout<<"Still developing backwards navigation"<GetText()); usereventSelected = true; gApplication->Terminate(0); - } + } if(param1==1400){ - //RedrawGeometry(); - } + //RedrawGeometry(); + } break; - } + } break; } return kTRUE; } - + /*------------Function to add the actual data to the plot (entrance from module):-------------*/ void TEveMu2eMainWindow::setEvent(const art::Event& event, bool firstLoop, Data_Collections &data, double time, bool accumulate, int &runn, int &eventn, bool &eventSelected, bool isMCOnly) - { - _event=event.id().event(); - _subrun=event.id().subRun(); - _run=event.id().run(); - _firstLoop = firstLoop; - _accumulate = accumulate; - _data.chcol = data.chcol; - _data.clustercol = data.clustercol; - _data.crvcoincol = data.crvcoincol; - _data.track_tuple = data.track_tuple; - _data.mctrajcol = data.mctrajcol; - _data.crvcoincol = data.crvcoincol; - _data.cryHitcol = data.cryHitcol; - _data.cosmiccol = data.cosmiccol; - + { + + _event=event.id().event(); + _subrun=event.id().subRun(); + _run=event.id().run(); + _firstLoop = firstLoop; + _accumulate = accumulate; + _data.chcol = data.chcol; + _data.clustercol = data.clustercol; + _data.crvcoincol = data.crvcoincol; + _data.track_tuple = data.track_tuple; + _data.mctrajcol = data.mctrajcol; + _data.crvcoincol = data.crvcoincol; + _data.cryHitcol = data.cryHitcol; + _data.cosmiccol = data.cosmiccol; + + std::string eveinfo = Form("Event : %i Run : %i Subrun : %i",_event,_run,_subrun); + auto evinfo = new TEveText(eveinfo.c_str()); + double posy = -1400.0; + double posz = 0.0; + evinfo->SetFontSize(15); + evinfo->SetMainColor(kRed); + evinfo->RefMainTrans().SetPos(posz,posy,posz); + gEve->AddElement(evinfo); if(!isMCOnly){ std::vector track_list = std::get<1>(data.track_tuple); - std::vector times = pass_data->getTimeRange(firstLoop, data.chcol, data.crvcoincol, data.clustercol, data.cryHitcol); - - if(_data.crvcoincol->size()!=0 or _data.crvcoincol !=0) pass_data->AddCRVInfo(firstLoop, data.crvcoincol, ftimemin, ftimemax, false, _accumulate); + std::vector times = pass_data->getTimeRange(firstLoop, data.chcol, data.crvcoincol, data.clustercol, data.cryHitcol, DrawOpts.addCRVInfo, DrawOpts.addComboHits, DrawOpts.addClusters ); + + if(DrawOpts.addCRVInfo){ + pass_data->AddCRVInfo(firstLoop, data.crvcoincol, ftimemin, ftimemax, CRV2Dproj, false, _accumulate, TfXYMgr, TfRZMgr, proj4, proj5); + } hitenergy = new vector(2); + + if(DrawOpts.addComboHits) *hitenergy = pass_data->AddComboHits(firstLoop, data.chcol, tracker2Dproj, false, fhitmin, fhitmax,ftimemin, ftimemax, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); - if(_data.chcol->size()!=0 or _data.chcol !=0) *hitenergy = pass_data->AddComboHits(firstLoop, data.chcol, tracker2Dproj, false, fhitmin, fhitmax,ftimemin, ftimemax, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); - clusterenergy = new std::vector(2); - if(_data.clustercol->size() !=0 ) *clusterenergy = pass_data->AddCaloClusters(firstLoop, data.clustercol, calo2Dproj, false, fclustmin, fclustmax, ftimemin, ftimemax, _accumulate, CfXYMgr, CfRZMgr, proj0, proj1); - - if (_data.cryHitcol->size()!=0 or _data.cryHitcol!=0) pass_data->AddCrystalHits(firstLoop, data.cryHitcol, calo2Dproj, ftimemin, ftimemax, false, _accumulate, CfXYMgr, CfRZMgr, proj0, proj1); - - if (track_list.size() !=0) pass_data->AddHelixPieceWise3D(firstLoop, data.track_tuple, tracker2Dproj, ftimemin, ftimemax, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); + if(DrawOpts.addClusters ) *clusterenergy = pass_data->AddCaloClusters(firstLoop, data.clustercol, calo2Dproj, false, fclustmin, fclustmax, ftimemin, ftimemax, _accumulate, CfXYMgr, CfRZMgr, proj0, proj1); + + if (DrawOpts.addCryHits) pass_data->AddCrystalHits(firstLoop, data.cryHitcol, calo2Dproj, ftimemin, ftimemax, false, _accumulate, CfXYMgr, CfRZMgr, proj0, proj1); - if(_data.cosmiccol->size() != 0 or _data.cosmiccol != 0) pass_data->AddCosmicTrack(firstLoop, data.cosmiccol, tracker2Dproj, ftimemin, ftimemax, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); + if (DrawOpts.addTracks) pass_data->AddHelixPieceWise3D(firstLoop, data.track_tuple, tracker2Dproj, ftimemin, ftimemax, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); + if(DrawOpts.addCosmicTracks) pass_data->AddCosmicTrack(firstLoop, data.cosmiccol, tracker2Dproj, ftimemin, ftimemax, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3); + _clustminenergy->Clear(); _clustmaxenergy->Clear(); _hitminenergy->Clear(); _hitmaxenergy->Clear(); _hitmintime->Clear(); _hitmaxtime->Clear(); - + _clustminenergy->AddText(0, (to_string(clusterenergy->at(0))).c_str()); _clustmaxenergy->AddText(0, (to_string(clusterenergy->at(1))).c_str()); _hitminenergy->AddText(0, (to_string(hitenergy->at(0))).c_str()); _hitmaxenergy->AddText(0, (to_string(hitenergy->at(1))).c_str()); _hitmintime->AddText(0, (to_string(times.at(0))).c_str()); _hitmaxtime->AddText(0, (to_string(times.at(1))).c_str()); - } - - if(_data.mctrajcol!=0) pass_mc->AddFullMCTrajectory(firstLoop, data.mctrajcol, tracker2Dproj, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3, particles); + } + if(DrawOpts.addMCTraj) pass_mc->AddFullMCTrajectory(firstLoop, data.mctrajcol, tracker2Dproj, false, _accumulate, TfXYMgr, TfRZMgr, proj2, proj3, particles); + gSystem->ProcessEvents(); gSystem->IgnoreInterrupt(); gSystem->IgnoreSignal(kSigTermination); gSystem->IgnoreSignal(kSigSegmentationViolation); - + gClient->NeedRedraw(fTeRun); - - gApplication->Run(true); - - gEve->Redraw3D(kTRUE); + + gApplication->Run(true); + + gEve->Redraw3D(kTRUE); if(usereventSelected == true){ eventn = eventToFind; runn = runToFind; eventSelected = true; } - - /*stringstream sEvent; - sEvent << eventn; - //const char* tEvent = " Event : "; - const char* eventlabel = sEvent.str().c_str(); - auto t = new TEveText(eventlabel); - t->SetFontSize(15); - t->SetText(eventlabel); - t->SetMainColor(kRed); - t->RefMainTrans().SetPos(0.0,200.0,3000.0); - pass_data->fTrackList3D->AddElement(t); */ + delete evinfo; } - - /*------------Function to fill event selection:-------------*/ - void TEveMu2eMainWindow::fillEvent(bool firstLoop) - { - std::string eventInfoText; - eventInfoText=Form("Event #: %i",_event); - if(_eventNumberText==nullptr) - { - _eventNumberText = new TText(0.6,-0.8, eventInfoText.c_str()); - _eventNumberText->SetTextColor(5); - _eventNumberText->SetTextSize(0.025); - _eventNumberText->Draw("same"); - } - else _eventNumberText->SetTitle(eventInfoText.c_str()); - eventInfoText=Form("Sub Run #: %i",_subrun); - if(_subrunNumberText==nullptr) - { - _subrunNumberText = new TText(0.6,-0.75,eventInfoText.c_str()); - _subrunNumberText->SetTextColor(5); - _subrunNumberText->SetTextSize(0.025); - _subrunNumberText->Draw("same"); - } - else _subrunNumberText->SetTitle(eventInfoText.c_str()); - eventInfoText=Form("Run #: %i",_run); - if(_runNumberText==nullptr) - { - _runNumberText = new TText(0.6,-0.7,eventInfoText.c_str()); - _runNumberText->SetTextColor(5); - _runNumberText->SetTextSize(0.025); - _runNumberText->Draw("same"); - } - else _runNumberText->SetTitle(eventInfoText.c_str()); - if(_timeText==nullptr) - { - _timeText = new TText(0.6,-0.7,eventInfoText.c_str()); - _timeText->SetTextColor(5); - _timeText->SetTextSize(0.025); - _timeText->Draw("same"); - } - else _timeText->SetTitle(eventInfoText.c_str()); - this->Layout(); - } - + /*------------Function to find event:-------------*/ - int TEveMu2eMainWindow::getEventToFind(bool &findEvent) const + int TEveMu2eMainWindow::getEventToFind(bool &findEvent) const { findEvent=_findEvent; return _eventToFind; } - + /*------------Function to check if closed:-------------*/ bool TEveMu2eMainWindow::isClosed() const { return _isClosed; - } + } } + diff --git a/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eCRVEvent.h b/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eCRVEvent.h index 87d6ca67c7..857197c52e 100644 --- a/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eCRVEvent.h +++ b/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eCRVEvent.h @@ -5,12 +5,17 @@ #include #include +#include +#include +#include #include "Offline/RecoDataProducts/inc/CrvCoincidenceCluster.hh" #include "Offline/CosmicRayShieldGeom/inc/CosmicRayShield.hh" #include "Offline/DataProducts/inc/CRSScintillatorBarIndex.hh" #include "Offline/GeometryService/inc/GeomHandle.hh" #include "Offline/RecoDataProducts/inc/CrvRecoPulse.hh" - +#include "Offline/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eCustomHelix.h" +#include "Offline/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2e2DProjection.h" + namespace mu2e { class TEveMu2eCRVEvent : public TEvePointSet { public: @@ -19,15 +24,17 @@ namespace mu2e { TEveMu2eCRVEvent(CrvRecoPulse chit) : fCrvRecoPulse_(chit){}; virtual ~TEveMu2eCRVEvent(){}; - CrvCoincidenceCluster fCrvCoincidenceCluster_; + CrvCoincidenceCluster fCrvCoincidenceCluster_; CrvRecoPulse fCrvRecoPulse_; Int_t mColor_ = kBlue; - Int_t mSize_ = 1; + Int_t mSize_ = 1; bool AddErrorBar_ = true; - - void DrawHit2D(const std::string &pstr, Int_t b,CLHEP::Hep3Vector HitPos, TEveElementList *list); - void DrawHit3D(const std::string &pstr, Int_t b,CLHEP::Hep3Vector HitPos, TEveElementList *list); + + std::tuple DrawSciBar(); + void DrawHit2DXY(const std::string &pstr, Int_t b,CLHEP::Hep3Vector HitPos, TEveElementList *list2DXY); + void DrawHit2DYZ(const std::string &pstr, Int_t b,CLHEP::Hep3Vector HitPos, TEveElementList *list2DYZ); + void DrawHit3D(const std::string &pstr, Int_t b,CLHEP::Hep3Vector HitPos, TEveElementList *list3D); std::string DataTitle(const std::string &pstr, int n); #endif ClassDef(TEveMu2eCRVEvent, 0); @@ -35,3 +42,5 @@ namespace mu2e { typedef std::vector TEveMu2eCRVEventCollection; } #endif + + diff --git a/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eDataInterface.h b/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eDataInterface.h index 35b2e5aa17..2ddbee4de1 100644 --- a/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eDataInterface.h +++ b/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eDataInterface.h @@ -35,7 +35,7 @@ namespace mu2e{ class TEveMu2eDataInterface { public: #ifndef __CINT__ - TEveMu2eDataInterface() : fHitsList2DXY(0),fHitsList2DXZ(0),fHitsList3D(0),fCrystalHitList(0),fTrackList2DXY(0),fTrackList2DXZ(0),fTrackList3D(0), fClusterList2D_disk0(0), fClusterList2D_disk1(0), fClusterList3D(0), fCrvList2D(0), fCrvList3D(0), fExtTrackList2D(0), fExtTrackList3D(0){}; + TEveMu2eDataInterface() : fHitsList2DXY(0),fHitsList2DXZ(0),fHitsList3D(0),fCrystalHitList(0),fTrackList2DXY(0),fTrackList2DXZ(0),fTrackList3D(0), fClusterList2D_disk0(0), fClusterList2D_disk1(0), fClusterList3D(0), fCrvList2DXY(0), fCrvList2DYZ(0), fCrvList3D(0), fExtTrackList2D(0), fExtTrackList3D(0){}; TEveMu2eDataInterface(const TEveMu2eDataInterface &); TEveMu2eDataInterface& operator=(const TEveMu2eDataInterface &); virtual ~TEveMu2eDataInterface(){}; @@ -51,15 +51,15 @@ namespace mu2e{ TEveElementList *fClusterList2D_disk0; TEveElementList *fClusterList2D_disk1; TEveElementList *fClusterList3D; - TEveElementList *fCrvList2D; + TEveElementList *fCrvList2DXY; + TEveElementList *fCrvList2DYZ; TEveElementList *fCrvList3D; TEveElementList *fExtTrackList2D; TEveElementList *fExtTrackList3D; - std::vector getTimeRange(bool firstloop, const ComboHitCollection *chcol, const CrvRecoPulseCollection *crvcoincol, const CaloClusterCollection *clustercol, const CaloHitCollection *cryHitcol); + std::vector getTimeRange(bool firstloop, const ComboHitCollection *chcol, const CrvRecoPulseCollection *crvcoincol, const CaloClusterCollection *clustercol, const CaloHitCollection *cryHitcol, bool addCRV, bool addHits, bool addCalo); - void AddCRVInfo(bool firstloop, const CrvRecoPulseCollection *crvcoincol, double min_time, double max_time, bool Redraw, bool accumulate); - + void AddCRVInfo(bool firstloop, const CrvRecoPulseCollection *crvcoincol, double min_time, double max_time, TEveMu2e2DProjection *CRV2Dproj, bool Redraw, bool accumulate, TEveProjectionManager *TXYMgr,TEveProjectionManager *TRZMgr, TEveScene *scene1, TEveScene *scene2); std::vector AddComboHits(bool firstloop, const ComboHitCollection *chcol, TEveMu2e2DProjection *tracker2Dproj, bool Redraw, double min_energy, double max_energy, double min_time, double max_time, bool accumulate, TEveProjectionManager *TXYMgr, TEveProjectionManager *TRZMgr, TEveScene *scene1, TEveScene *scene2); std::vector AddCaloClusters(bool firstloop, const CaloClusterCollection *clustercol,TEveMu2e2DProjection *calo2Dproj, bool Redraw, double min_energy, double max_energy, double min_time, double max_time, bool accumulate, TEveProjectionManager *CfXYMgr, TEveProjectionManager *CfRZMgr, TEveScene *scene1, TEveScene *scene2); diff --git a/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eMCInterface.h b/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eMCInterface.h index 0416df98ee..f87a49c335 100644 --- a/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eMCInterface.h +++ b/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eMCInterface.h @@ -40,6 +40,9 @@ namespace mu2e{ TEveElementList *fTrackList2DXZ; TEveElementList *fTrackList3D; std::vector particleIds_; + const Int_t linewidth = 3; + const Int_t fontsize = 15; + const double text_z_pos = 3000.; ClassDef(TEveMu2eMCInterface,0); }; //end class def diff --git a/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eMainWindow.h b/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eMainWindow.h index 033c9a2f3f..6308035e24 100644 --- a/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eMainWindow.h +++ b/TEveEventDisplay/src/TEveMu2e_base_classes/TEveMu2eMainWindow.h @@ -39,6 +39,7 @@ #include #include #include +#include //libGeom #include //Mu2e: @@ -71,6 +72,21 @@ class TText; class TGSplitFrame; class TGLOverlayButton; namespace mu2e{ + + struct DrawOptions{ + // data options + bool addCRVInfo = false; + bool addCosmicTracks = false; + bool addTracks = false; + bool addClusters = false; + bool addComboHits = false; + bool addCryHits = false; + bool addMCTraj = false; + DrawOptions(){}; + DrawOptions(bool crv, bool cosmictracks, bool tracks, bool clusters, bool combohits, bool cryhits, bool mctraj) + : addCRVInfo(crv), addCosmicTracks(cosmictracks), addTracks(tracks), addClusters(clusters), addComboHits(combohits), addCryHits(cryhits), addMCTraj(mctraj) {}; + }; + class TEveMu2eMainWindow : public TGMainFrame { public: @@ -78,71 +94,85 @@ namespace mu2e{ TEveMu2eMainWindow(); TEveMu2eMainWindow(const TEveMu2eMainWindow &); TEveMu2eMainWindow& operator=(const TEveMu2eMainWindow &); - TEveMu2eMainWindow(const TGWindow* p, UInt_t w, UInt_t h, fhicl::ParameterSet _pset);// int &runn, int &subrunn, int &eventn); + + TEveMu2eMainWindow(const TGWindow* p, UInt_t w, UInt_t h, fhicl::ParameterSet _pset, DrawOptions drawOpts); virtual ~TEveMu2eMainWindow(){}; enum ETestComandIdentifiers{HId1, HId2, HId3}; + + // For viewers: void StartProjectionTabs(); void CreateMultiViews(); void CreateCaloProjection(); void CreateTrackerProjection(); + void CreateCRVProjection(); void PrepareTrackerProjectionTab(const art::Run& run); void PrepareCaloProjectionTab(const art::Run& run); void PrepareCRVProjectionTab(const art::Run& run); void SetParticleOpts(std::vector particles_) { particles = particles_;} + //GUI and geom: void CreateGUI(); void SetRunGeometry(const art::Run& run, int _diagLevel, bool _showBuilding, bool _showDSOnly, bool _showCRV); void RedrawDataProducts(std::string type); - + + // for menu: Bool_t ProcessMessage(Long_t msg, Long_t param1, Long_t param2); + // to add event info: void setEvent(const art::Event& event, bool firstLoop, Data_Collections &data, double time, bool accumulate, int& runn, int& eventn, bool& update, bool isMCOnly); - void fillEvent(bool firstLoop=false); bool isClosed() const; int getEventToFind(bool &findEvent) const; //List of parameters: TGeoManager* geom = new TGeoManager("geom","Geom"); - Geom_Interface *mu2e_geom =new Geom_Interface(); + Geom_Interface *mu2e_geom = new Geom_Interface(); TEveMu2eDataInterface *pass_data = new TEveMu2eDataInterface(); TEveMu2eMCInterface *pass_mc = new TEveMu2eMCInterface(); TEveMu2eProjectionInterface *pass_proj = new TEveMu2eProjectionInterface(); - double texttime = -1; + // data options + DrawOptions DrawOpts; std::vector *clusterenergy = 0; std::vector *hitenergy = 0; std::vector times; - TEvePad *fPad; - TGSplitFrame *fSplitFrame; - TGSplitFrame *frm; - TGLEmbeddedViewer *fViewer0; - TGLEmbeddedViewer *fViewer1; - TGLEmbeddedViewer *fViewer2; - TGLEmbeddedViewer *fViewer3; - TGLEmbeddedViewer *fViewer4; - + TEvePad *fPad = nullptr; + TEvePad *fPadCRV = nullptr; + TGSplitFrame *fSplitFrame = nullptr; + TGSplitFrame *fSplitFrameCRV = nullptr; + TGSplitFrame *frm = nullptr; + TGSplitFrame *frmCRV = nullptr; + TGLEmbeddedViewer *fViewer0 = nullptr; + TGLEmbeddedViewer *fViewer1 = nullptr; + TGLEmbeddedViewer *fViewer2 = nullptr; + TGLEmbeddedViewer *fViewer3 = nullptr; + TGLEmbeddedViewer *fViewer4 = nullptr; + TGLEmbeddedViewer *fViewer5 = nullptr; Bool_t fIsEmbedded; - TEveViewer *fViewer[5]; - TEveProjectionManager *fRPhiMgr; - TEveProjectionManager *fRhoZMgr; - TEveProjectionManager *fXYMgr; + TEveViewer *fViewer[6]; + TEveProjectionManager *fRPhiMgr = nullptr; + TEveProjectionManager *fRhoZMgr = nullptr; + TEveProjectionManager *fXYMgr = nullptr; TEveProjectionManager *gRPhiMgr = 0; TEveProjectionManager *gRhoZMgr = 0; TEveProjectionManager *TfXYMgr = 0; TEveProjectionManager *TfRZMgr = 0; TEveProjectionManager *CfXYMgr = 0; TEveProjectionManager *CfRZMgr = 0; - TGMainFrame* frmMain; - TEveBrowser* browser; + TEveProjectionManager *CrfXYMgr = 0; + TEveProjectionManager *CrfRZMgr = 0; + TGMainFrame* frmMain = nullptr; + TEveBrowser* browser = nullptr; TEveScene *s = 0; TEveScene *proj0 = 0; TEveScene *proj1 = 0; TEveScene *proj2 = 0; TEveScene *proj3 = 0; + TEveScene *proj4 = 0; + TEveScene *proj5 = 0; + - bool usereventSelected = false; TGTextEntry *fTeRun,*fTeEvt, *fTTEvt, *fTeh1, *fTeh2, *fTeh3, *cminenergy, *cmaxenergy, *hminenergy, *hmaxenergy, *hmintime, *hmaxtime; TGLabel *fTlRun,*fTlEvt, *fTlTEvt, *fTlHSlid, *celabel, *helabel,*timelabel, *spacer, *spacer1; @@ -150,7 +180,7 @@ namespace mu2e{ TGCheckButton *clusterscheck, *hitscheck, *trackscheck, *cosmicscheck, *cosmictrkscheck, *mctrajcheck; TGTextBuffer *_eventNumber, *_subrunNumber, *_runNumber, *_time, *_clustminenergy, *_clustmaxenergy, *_hitminenergy, *_hitmaxenergy, *_hitmintime, *_hitmaxtime; - + int eventToFind, runToFind; int _eventToFind = 0; @@ -158,27 +188,26 @@ namespace mu2e{ bool _findEvent = true; bool _firstLoop = true; bool _accumulate = false; - + TEveMu2e2DProjection *tracker2Dproj = new TEveMu2e2DProjection(); TEveMu2e2DProjection *calo2Dproj = new TEveMu2e2DProjection(); TEveMu2e2DProjection *CRV2Dproj = new TEveMu2e2DProjection(); - + TEveMu2eCalorimeter *Mu2eCalo = new TEveMu2eCalorimeter(); TEveMu2eTracker *Mu2eTracker = new TEveMu2eTracker(); TEveMu2eCRV *Mu2eCRV = new TEveMu2eCRV(); - TText *_eventNumberText, *_subrunNumberText, *_runNumberText, *_timeText, *_cminenergy; int _event, _subrun, _run; Data_Collections _data; Data_Collections _emptydata; - + double fclustmin = -1; double fclustmax = -1; double fhitmin = -1; double fhitmax = -1; double ftimemin = -1; double ftimemax = -1; - + std::vector particles; #endif ClassDef(TEveMu2eMainWindow,0); diff --git a/TEveEventDisplay/src/shape_classes/TEveMu2eCRV.h b/TEveEventDisplay/src/shape_classes/TEveMu2eCRV.h index 46b4e46f48..f273a4ec62 100644 --- a/TEveEventDisplay/src/shape_classes/TEveMu2eCRV.h +++ b/TEveEventDisplay/src/shape_classes/TEveMu2eCRV.h @@ -32,7 +32,7 @@ namespace mu2e{ TEveMu2eCRV(const TEveMu2eCRV &){}; TEveMu2eCRV& operator=(const TEveMu2eCRV &); virtual ~TEveMu2eCRV(){}; - void DrawCRVDetector(art::Run const& run, TGeoVolume* topvol , TEveElementList *orthodetlist[]); + void DrawCRVDetector(art::Run const& run, TGeoVolume* topvol , TEveElementList *orthodetT1, TEveElementList *orthodetT2); TEveMu2e2DProjection *CRV2Dproj = new TEveMu2e2DProjection(); #endif ClassDef(TEveMu2eCRV, 0); diff --git a/TrackerConditions/inc/AlignedTrackerMaker.hh b/TrackerConditions/inc/AlignedTrackerMaker.hh index 0ebd7168a0..a311235f45 100644 --- a/TrackerConditions/inc/AlignedTrackerMaker.hh +++ b/TrackerConditions/inc/AlignedTrackerMaker.hh @@ -16,6 +16,7 @@ namespace mu2e { typedef std::shared_ptr ptr_t; public: AlignedTrackerMaker(AlignedTrackerConfig const& config):_config(config) {} + void alignTracker(ptr_t ptr, std::vector const& tracker_align_params, std::vector const& plane_align_params, std::vector const& panel_align_params, std::vector const& straw_align_params); ptr_t fromFcl(); ptr_t fromDb(TrkAlignTracker::cptr_t tatr_p, TrkAlignPlane::cptr_t tapl_p, diff --git a/TrackerConditions/src/AlignedTrackerMaker.cc b/TrackerConditions/src/AlignedTrackerMaker.cc index e2bcdb0b0f..559fb927e3 100644 --- a/TrackerConditions/src/AlignedTrackerMaker.cc +++ b/TrackerConditions/src/AlignedTrackerMaker.cc @@ -15,45 +15,18 @@ namespace mu2e { typedef std::shared_ptr ptr_t; using xyzVec = CLHEP::Hep3Vector; // switch to XYZVectorF TODO - ptr_t AlignedTrackerMaker::fromFcl() { - // this creates a deep copy of the nominal geometry - GeomHandle trk_h; - ptr_t ptr = std::make_shared(*trk_h); - if ( _config.verbose() > 0 ) cout << "AlignedTrackerMaker::fromFcl made Tracker with nStraws = " << ptr->nStraws() << endl; - return ptr; - } - - ptr_t AlignedTrackerMaker::fromDb( - TrkAlignTracker::cptr_t tatr_p, - TrkAlignPlane::cptr_t tapl_p, - TrkAlignPanel::cptr_t tapa_p, - TrkAlignStraw::cptr_t tast_p ) { - - - // get default geometry - auto ptr = fromFcl(); + + void AlignedTrackerMaker::alignTracker(ptr_t ptr, std::vector const& tracker_align_params, std::vector const& plane_align_params, std::vector const& panel_align_params, std::vector const& straw_align_params) + { Tracker& tracker = *ptr; - // make shared_ptr to a copy of the GeomHandle Tracker object - // made via copy constructor. AlignedTracker leaves the - // nominal Geometry untouched. - - if ( _config.verbose() > 0 ) { - cout << "AlignedTrackerMaker::fromFcl made Tracker with nStraws = " - << ptr->nStraws() << endl; - } - - if ( _config.verbose() > 0 ) { - cout << "AlignedTrackerMaker::fromDb now aligning Tracker " << endl; - } - // the tracker global transform in DS coordinates - auto const& tracker_align = tatr_p->rowAt(0); // exactly 1 row in this table + auto const& tracker_align = tracker_align_params.at(0); // exactly 1 row in this table HepRotation nullrot; for(auto& plane : tracker.getPlanes()) { // plane alignment - auto const& plane_align = tapl_p->rowAt( plane.id().plane() ); + auto const& plane_align = plane_align_params.at( plane.id().plane() ); if ( _config.verbose() > 0 ) cout << "AlignedTrackerMaker::fromDb plane ID " << plane.id() << " alignment transform: " << plane_align.transform() << endl; // chain to transform plane coordinates into tracker, includering alignment auto aligned_plane_to_ds = tracker_align.transform() * (plane.planeToDS() * plane_align.transform()); @@ -61,7 +34,7 @@ namespace mu2e { auto ds_to_plane = plane.dsToPlane(); for(auto panel_p : plane.getPanels()) { auto& panel = *panel_p; - auto const& panel_align = tapa_p->rowAt( panel.id().uniquePanel() ); + auto const& panel_align = panel_align_params.at( panel.id().uniquePanel() ); if ( _config.verbose() > 0 ) cout << "AlignedTrackerMaker::fromDb panel ID " << panel.id() << " alignment transform: " << panel_align.transform() << endl; // separate just the panel->plane transform auto panel_to_plane = ds_to_plane*panel.panelToDS(); @@ -72,7 +45,7 @@ namespace mu2e { // loop over straws for(size_t istr=0; istr< StrawId::_nstraws; istr++) { Straw &straw = tracker.getStraw(panel.getStraw(istr).id()); - auto const& straw_align = tast_p->rowAt( straw.id().uniqueStraw() ); + auto const& straw_align = straw_align_params.at( straw.id().uniqueStraw() ); // transform straw and wire ends from nominal XYZ to Panel UVW and correct for end alignment std::array wireends, strawends; for(int iend=0;iend < StrawEnd::nends; iend++){ @@ -99,6 +72,54 @@ namespace mu2e { } // panel loop } // plane loop // should update tracker, plane and panel origins FIXME! + } + + ptr_t AlignedTrackerMaker::fromFcl() { + // this creates a deep copy of the nominal geometry + GeomHandle trk_h; + ptr_t ptr = std::make_shared(*trk_h); + + // make shared_ptr to a copy of the GeomHandle Tracker object + // made via copy constructor. AlignedTracker leaves the + // nominal Geometry untouched. + + std::vector tracker_align_params(1,TrkAlignParams(0,StrawId(0,0,0),0,0,0,0,0,0)); + std::vector plane_align_params(StrawId::_nplanes,TrkAlignParams(0,StrawId(0,0,0),0,0,0,0,0,0)); + std::vector panel_align_params(StrawId::_nupanels,TrkAlignParams(0,StrawId(0,0,0),0,0,0,0,0,0)); + std::vector straw_align_params(StrawId::_nustraws,TrkStrawEndAlign(0,StrawId(0,0,0),0,0,0,0,0,0,0,0)); + + + if ( _config.verbose() > 0 ) { + cout << "AlignedTrackerMaker::fromFcl now zero aligning Tracker " << endl; + } + + alignTracker(ptr, tracker_align_params, plane_align_params, panel_align_params, straw_align_params); + + if ( _config.verbose() > 0 ) cout << "AlignedTrackerMaker::fromFcl made Tracker with nStraws = " << ptr->nStraws() << endl; + return ptr; + } + + ptr_t AlignedTrackerMaker::fromDb( + TrkAlignTracker::cptr_t tatr_p, + TrkAlignPlane::cptr_t tapl_p, + TrkAlignPanel::cptr_t tapa_p, + TrkAlignStraw::cptr_t tast_p ) { + + // get default geometry + GeomHandle trk_h; + ptr_t ptr = std::make_shared(*trk_h); + + // make shared_ptr to a copy of the GeomHandle Tracker object + // made via copy constructor. AlignedTracker leaves the + // nominal Geometry untouched. + + if ( _config.verbose() > 0 ) { + cout << "AlignedTrackerMaker::fromDb now aligning Tracker " << endl; + } + + alignTracker(ptr, tatr_p->rows(), tapl_p->rows(), tapa_p->rows(), tast_p->rows()); + + if ( _config.verbose() > 0 ) cout << "AlignedTrackerMaker::fromDb made Tracker with nStraws = " << ptr->nStraws() << endl; return ptr; } diff --git a/TrackerConditions/src/SConscript b/TrackerConditions/src/SConscript index 2848d41e02..a598a75698 100644 --- a/TrackerConditions/src/SConscript +++ b/TrackerConditions/src/SConscript @@ -18,6 +18,7 @@ mainlib = helper.make_mainlib ( [ 'mu2e_BFieldGeom', 'mu2e_Mu2eBTrk', 'mu2e_TrackerGeom', + 'mu2e_DAQConditions', 'mu2e_MCDataProducts', 'mu2e_RecoDataProducts', diff --git a/TrackerConditions/src/StrawElectronicsMaker.cc b/TrackerConditions/src/StrawElectronicsMaker.cc index 069687ff5b..fee16b54fe 100644 --- a/TrackerConditions/src/StrawElectronicsMaker.cc +++ b/TrackerConditions/src/StrawElectronicsMaker.cc @@ -263,6 +263,12 @@ namespace mu2e { ptr->setvthresh(vthresh); + std::array ADCped; + for (size_t i=0;isetADCPed(ADCped); std::array timeOffsetPanel; std::array timeOffsetStrawHV; diff --git a/TrackerConditions/test/TrkPreampStrawRandomize.py b/TrackerConditions/test/TrkPreampStrawRandomize.py new file mode 100644 index 0000000000..7b47acbcbf --- /dev/null +++ b/TrackerConditions/test/TrkPreampStrawRandomize.py @@ -0,0 +1,36 @@ +# generates TrkPreampStraw parameters (time delays, thresholds, and adc gains) + +import sys +import numpy as np + +if len(sys.argv) < 7: + print("Usage: python TrkPreampStrawRandomize.py