Repository: rgcgithub/regenie Branch: master Commit: 5f924b9bf54c Files: 572 Total size: 11.9 MB Directory structure: gitextract_u1zhxkiu/ ├── .dockerignore ├── .github/ │ └── workflows/ │ ├── docker-image.yml │ ├── manual.yml │ └── test.yml ├── .gitignore ├── CMakeLists.txt ├── Dockerfile ├── Dockerfile_mkl ├── Dockerfile_openblas ├── LICENSE ├── Makefile ├── README.md ├── RELEASE_LOG.md ├── VERSION ├── docs/ │ ├── cinder/ │ │ ├── 404.html │ │ ├── __init__.py │ │ ├── base.html │ │ ├── content.html │ │ ├── css/ │ │ │ ├── base.css │ │ │ ├── bootstrap-custom.css │ │ │ ├── cinder.css │ │ │ └── highlight.css │ │ ├── js/ │ │ │ └── base.js │ │ ├── keyboard-modal.html │ │ ├── main.html │ │ ├── mkdocs_theme.yml │ │ ├── nav-sub.html │ │ ├── nav.html │ │ ├── search-modal.html │ │ └── toc.html │ ├── docs/ │ │ ├── custom/ │ │ │ └── style.css │ │ ├── faq.md │ │ ├── index.md │ │ ├── install.md │ │ ├── options.md │ │ ├── overview.md │ │ ├── performance.md │ │ └── recommendations.md │ ├── mkdocs.yml │ ├── refs.bib │ └── site/ │ ├── css/ │ │ ├── base.css │ │ ├── bootstrap-custom.css │ │ ├── cinder.css │ │ └── highlight.css │ ├── custom/ │ │ └── style.css │ ├── faq/ │ │ └── index.html │ ├── index.html │ ├── install/ │ │ └── index.html │ ├── js/ │ │ └── base.js │ ├── options/ │ │ └── index.html │ ├── overview/ │ │ └── index.html │ ├── performance/ │ │ └── index.html │ ├── recommendations/ │ │ └── index.html │ ├── search/ │ │ ├── lunr.js │ │ ├── main.js │ │ ├── search_index.json │ │ └── worker.js │ └── sitemap.xml ├── example/ │ ├── covariates.txt │ ├── covariates_wBin.txt │ ├── example.bed │ ├── example.bgen │ ├── example.bgen.bgi │ ├── example.bim │ ├── example.fam │ ├── example.pgen │ ├── example.psam │ ├── example.pvar │ ├── example.test_bin_out_firth_Y1.regenie │ ├── example_3chr.annotations │ ├── example_3chr.annotationsV2 │ ├── example_3chr.bed │ ├── example_3chr.bgen │ ├── example_3chr.bgen.bgi │ ├── example_3chr.bim │ ├── example_3chr.fam │ ├── example_3chr.joint_setlist │ ├── example_3chr.masks │ ├── example_3chr.sample │ ├── example_3chr.setlist │ ├── example_3chr.write_sets │ ├── example_3chr_masks.bed │ ├── example_3chr_masks.bim │ ├── example_3chr_masks.fam │ ├── example_3chr_zstd.bgen │ ├── fid_iid_to_remove.txt │ ├── phenotype.txt │ ├── phenotype_bin.txt │ ├── phenotype_bin_wNA.txt │ ├── snplist_rm.txt │ └── test_bin_out_firth_Y1.regenie ├── external_libs/ │ ├── LBFGSpp/ │ │ ├── AUTHORS.md │ │ ├── LICENSE.md │ │ ├── README.md │ │ └── include/ │ │ ├── LBFGS.h │ │ ├── LBFGSB.h │ │ └── LBFGSpp/ │ │ ├── BFGSMat.h │ │ ├── BKLDLT.h │ │ ├── Cauchy.h │ │ ├── LineSearchBacktracking.h │ │ ├── LineSearchBracketing.h │ │ ├── LineSearchMoreThuente.h │ │ ├── LineSearchNocedalWright.h │ │ ├── Param.h │ │ └── SubspaceMin.h │ ├── cxxopts/ │ │ ├── LICENSE │ │ └── include/ │ │ └── cxxopts.hpp │ ├── eigen-3.4.0/ │ │ └── Eigen/ │ │ ├── Cholesky │ │ ├── CholmodSupport │ │ ├── Core │ │ ├── Dense │ │ ├── Eigen │ │ ├── Eigenvalues │ │ ├── Geometry │ │ ├── Householder │ │ ├── IterativeLinearSolvers │ │ ├── Jacobi │ │ ├── KLUSupport │ │ ├── LU │ │ ├── MetisSupport │ │ ├── OrderingMethods │ │ ├── PaStiXSupport │ │ ├── PardisoSupport │ │ ├── QR │ │ ├── QtAlignedMalloc │ │ ├── SPQRSupport │ │ ├── SVD │ │ ├── Sparse │ │ ├── SparseCholesky │ │ ├── SparseCore │ │ ├── SparseLU │ │ ├── SparseQR │ │ ├── StdDeque │ │ ├── StdList │ │ ├── StdVector │ │ ├── SuperLUSupport │ │ ├── UmfPackSupport │ │ └── src/ │ │ ├── Cholesky/ │ │ │ ├── LDLT.h │ │ │ ├── LLT.h │ │ │ └── LLT_LAPACKE.h │ │ ├── CholmodSupport/ │ │ │ └── CholmodSupport.h │ │ ├── Core/ │ │ │ ├── ArithmeticSequence.h │ │ │ ├── Array.h │ │ │ ├── ArrayBase.h │ │ │ ├── ArrayWrapper.h │ │ │ ├── Assign.h │ │ │ ├── AssignEvaluator.h │ │ │ ├── Assign_MKL.h │ │ │ ├── BandMatrix.h │ │ │ ├── Block.h │ │ │ ├── BooleanRedux.h │ │ │ ├── CommaInitializer.h │ │ │ ├── ConditionEstimator.h │ │ │ ├── CoreEvaluators.h │ │ │ ├── CoreIterators.h │ │ │ ├── CwiseBinaryOp.h │ │ │ ├── CwiseNullaryOp.h │ │ │ ├── CwiseTernaryOp.h │ │ │ ├── CwiseUnaryOp.h │ │ │ ├── CwiseUnaryView.h │ │ │ ├── DenseBase.h │ │ │ ├── DenseCoeffsBase.h │ │ │ ├── DenseStorage.h │ │ │ ├── Diagonal.h │ │ │ ├── DiagonalMatrix.h │ │ │ ├── DiagonalProduct.h │ │ │ ├── Dot.h │ │ │ ├── EigenBase.h │ │ │ ├── ForceAlignedAccess.h │ │ │ ├── Fuzzy.h │ │ │ ├── GeneralProduct.h │ │ │ ├── GenericPacketMath.h │ │ │ ├── GlobalFunctions.h │ │ │ ├── IO.h │ │ │ ├── IndexedView.h │ │ │ ├── Inverse.h │ │ │ ├── Map.h │ │ │ ├── MapBase.h │ │ │ ├── MathFunctions.h │ │ │ ├── MathFunctionsImpl.h │ │ │ ├── Matrix.h │ │ │ ├── MatrixBase.h │ │ │ ├── NestByValue.h │ │ │ ├── NoAlias.h │ │ │ ├── NumTraits.h │ │ │ ├── PartialReduxEvaluator.h │ │ │ ├── PermutationMatrix.h │ │ │ ├── PlainObjectBase.h │ │ │ ├── Product.h │ │ │ ├── ProductEvaluators.h │ │ │ ├── Random.h │ │ │ ├── Redux.h │ │ │ ├── Ref.h │ │ │ ├── Replicate.h │ │ │ ├── Reshaped.h │ │ │ ├── ReturnByValue.h │ │ │ ├── Reverse.h │ │ │ ├── Select.h │ │ │ ├── SelfAdjointView.h │ │ │ ├── SelfCwiseBinaryOp.h │ │ │ ├── Solve.h │ │ │ ├── SolveTriangular.h │ │ │ ├── SolverBase.h │ │ │ ├── StableNorm.h │ │ │ ├── StlIterators.h │ │ │ ├── Stride.h │ │ │ ├── Swap.h │ │ │ ├── Transpose.h │ │ │ ├── Transpositions.h │ │ │ ├── TriangularMatrix.h │ │ │ ├── VectorBlock.h │ │ │ ├── VectorwiseOp.h │ │ │ ├── Visitor.h │ │ │ ├── arch/ │ │ │ │ ├── AVX/ │ │ │ │ │ ├── Complex.h │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ ├── PacketMath.h │ │ │ │ │ └── TypeCasting.h │ │ │ │ ├── AVX512/ │ │ │ │ │ ├── Complex.h │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ ├── PacketMath.h │ │ │ │ │ └── TypeCasting.h │ │ │ │ ├── AltiVec/ │ │ │ │ │ ├── Complex.h │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ ├── MatrixProduct.h │ │ │ │ │ ├── MatrixProductCommon.h │ │ │ │ │ ├── MatrixProductMMA.h │ │ │ │ │ └── PacketMath.h │ │ │ │ ├── CUDA/ │ │ │ │ │ └── Complex.h │ │ │ │ ├── Default/ │ │ │ │ │ ├── BFloat16.h │ │ │ │ │ ├── ConjHelper.h │ │ │ │ │ ├── GenericPacketMathFunctions.h │ │ │ │ │ ├── GenericPacketMathFunctionsFwd.h │ │ │ │ │ ├── Half.h │ │ │ │ │ ├── Settings.h │ │ │ │ │ └── TypeCasting.h │ │ │ │ ├── GPU/ │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ ├── PacketMath.h │ │ │ │ │ └── TypeCasting.h │ │ │ │ ├── HIP/ │ │ │ │ │ └── hcc/ │ │ │ │ │ └── math_constants.h │ │ │ │ ├── MSA/ │ │ │ │ │ ├── Complex.h │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ └── PacketMath.h │ │ │ │ ├── NEON/ │ │ │ │ │ ├── Complex.h │ │ │ │ │ ├── GeneralBlockPanelKernel.h │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ ├── PacketMath.h │ │ │ │ │ └── TypeCasting.h │ │ │ │ ├── SSE/ │ │ │ │ │ ├── Complex.h │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ ├── PacketMath.h │ │ │ │ │ └── TypeCasting.h │ │ │ │ ├── SVE/ │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ ├── PacketMath.h │ │ │ │ │ └── TypeCasting.h │ │ │ │ ├── SYCL/ │ │ │ │ │ ├── InteropHeaders.h │ │ │ │ │ ├── MathFunctions.h │ │ │ │ │ ├── PacketMath.h │ │ │ │ │ ├── SyclMemoryModel.h │ │ │ │ │ └── TypeCasting.h │ │ │ │ └── ZVector/ │ │ │ │ ├── Complex.h │ │ │ │ ├── MathFunctions.h │ │ │ │ └── PacketMath.h │ │ │ ├── functors/ │ │ │ │ ├── AssignmentFunctors.h │ │ │ │ ├── BinaryFunctors.h │ │ │ │ ├── NullaryFunctors.h │ │ │ │ ├── StlFunctors.h │ │ │ │ ├── TernaryFunctors.h │ │ │ │ └── UnaryFunctors.h │ │ │ ├── products/ │ │ │ │ ├── GeneralBlockPanelKernel.h │ │ │ │ ├── GeneralMatrixMatrix.h │ │ │ │ ├── GeneralMatrixMatrixTriangular.h │ │ │ │ ├── GeneralMatrixMatrixTriangular_BLAS.h │ │ │ │ ├── GeneralMatrixMatrix_BLAS.h │ │ │ │ ├── GeneralMatrixVector.h │ │ │ │ ├── GeneralMatrixVector_BLAS.h │ │ │ │ ├── Parallelizer.h │ │ │ │ ├── SelfadjointMatrixMatrix.h │ │ │ │ ├── SelfadjointMatrixMatrix_BLAS.h │ │ │ │ ├── SelfadjointMatrixVector.h │ │ │ │ ├── SelfadjointMatrixVector_BLAS.h │ │ │ │ ├── SelfadjointProduct.h │ │ │ │ ├── SelfadjointRank2Update.h │ │ │ │ ├── TriangularMatrixMatrix.h │ │ │ │ ├── TriangularMatrixMatrix_BLAS.h │ │ │ │ ├── TriangularMatrixVector.h │ │ │ │ ├── TriangularMatrixVector_BLAS.h │ │ │ │ ├── TriangularSolverMatrix.h │ │ │ │ ├── TriangularSolverMatrix_BLAS.h │ │ │ │ └── TriangularSolverVector.h │ │ │ └── util/ │ │ │ ├── BlasUtil.h │ │ │ ├── ConfigureVectorization.h │ │ │ ├── Constants.h │ │ │ ├── DisableStupidWarnings.h │ │ │ ├── ForwardDeclarations.h │ │ │ ├── IndexedViewHelper.h │ │ │ ├── IntegralConstant.h │ │ │ ├── MKL_support.h │ │ │ ├── Macros.h │ │ │ ├── Memory.h │ │ │ ├── Meta.h │ │ │ ├── NonMPL2.h │ │ │ ├── ReenableStupidWarnings.h │ │ │ ├── ReshapedHelper.h │ │ │ ├── StaticAssert.h │ │ │ ├── SymbolicIndex.h │ │ │ └── XprHelper.h │ │ ├── Eigenvalues/ │ │ │ ├── ComplexEigenSolver.h │ │ │ ├── ComplexSchur.h │ │ │ ├── ComplexSchur_LAPACKE.h │ │ │ ├── EigenSolver.h │ │ │ ├── GeneralizedEigenSolver.h │ │ │ ├── GeneralizedSelfAdjointEigenSolver.h │ │ │ ├── HessenbergDecomposition.h │ │ │ ├── MatrixBaseEigenvalues.h │ │ │ ├── RealQZ.h │ │ │ ├── RealSchur.h │ │ │ ├── RealSchur_LAPACKE.h │ │ │ ├── SelfAdjointEigenSolver.h │ │ │ ├── SelfAdjointEigenSolver_LAPACKE.h │ │ │ └── Tridiagonalization.h │ │ ├── Geometry/ │ │ │ ├── AlignedBox.h │ │ │ ├── AngleAxis.h │ │ │ ├── EulerAngles.h │ │ │ ├── Homogeneous.h │ │ │ ├── Hyperplane.h │ │ │ ├── OrthoMethods.h │ │ │ ├── ParametrizedLine.h │ │ │ ├── Quaternion.h │ │ │ ├── Rotation2D.h │ │ │ ├── RotationBase.h │ │ │ ├── Scaling.h │ │ │ ├── Transform.h │ │ │ ├── Translation.h │ │ │ ├── Umeyama.h │ │ │ └── arch/ │ │ │ └── Geometry_SIMD.h │ │ ├── Householder/ │ │ │ ├── BlockHouseholder.h │ │ │ ├── Householder.h │ │ │ └── HouseholderSequence.h │ │ ├── IterativeLinearSolvers/ │ │ │ ├── BasicPreconditioners.h │ │ │ ├── BiCGSTAB.h │ │ │ ├── ConjugateGradient.h │ │ │ ├── IncompleteCholesky.h │ │ │ ├── IncompleteLUT.h │ │ │ ├── IterativeSolverBase.h │ │ │ ├── LeastSquareConjugateGradient.h │ │ │ └── SolveWithGuess.h │ │ ├── Jacobi/ │ │ │ └── Jacobi.h │ │ ├── KLUSupport/ │ │ │ └── KLUSupport.h │ │ ├── LU/ │ │ │ ├── Determinant.h │ │ │ ├── FullPivLU.h │ │ │ ├── InverseImpl.h │ │ │ ├── PartialPivLU.h │ │ │ ├── PartialPivLU_LAPACKE.h │ │ │ └── arch/ │ │ │ └── InverseSize4.h │ │ ├── MetisSupport/ │ │ │ └── MetisSupport.h │ │ ├── OrderingMethods/ │ │ │ ├── Amd.h │ │ │ ├── Eigen_Colamd.h │ │ │ └── Ordering.h │ │ ├── PaStiXSupport/ │ │ │ └── PaStiXSupport.h │ │ ├── PardisoSupport/ │ │ │ └── PardisoSupport.h │ │ ├── QR/ │ │ │ ├── ColPivHouseholderQR.h │ │ │ ├── ColPivHouseholderQR_LAPACKE.h │ │ │ ├── CompleteOrthogonalDecomposition.h │ │ │ ├── FullPivHouseholderQR.h │ │ │ ├── HouseholderQR.h │ │ │ └── HouseholderQR_LAPACKE.h │ │ ├── SPQRSupport/ │ │ │ └── SuiteSparseQRSupport.h │ │ ├── SVD/ │ │ │ ├── BDCSVD.h │ │ │ ├── JacobiSVD.h │ │ │ ├── JacobiSVD_LAPACKE.h │ │ │ ├── SVDBase.h │ │ │ └── UpperBidiagonalization.h │ │ ├── SparseCholesky/ │ │ │ ├── SimplicialCholesky.h │ │ │ └── SimplicialCholesky_impl.h │ │ ├── SparseCore/ │ │ │ ├── AmbiVector.h │ │ │ ├── CompressedStorage.h │ │ │ ├── ConservativeSparseSparseProduct.h │ │ │ ├── MappedSparseMatrix.h │ │ │ ├── SparseAssign.h │ │ │ ├── SparseBlock.h │ │ │ ├── SparseColEtree.h │ │ │ ├── SparseCompressedBase.h │ │ │ ├── SparseCwiseBinaryOp.h │ │ │ ├── SparseCwiseUnaryOp.h │ │ │ ├── SparseDenseProduct.h │ │ │ ├── SparseDiagonalProduct.h │ │ │ ├── SparseDot.h │ │ │ ├── SparseFuzzy.h │ │ │ ├── SparseMap.h │ │ │ ├── SparseMatrix.h │ │ │ ├── SparseMatrixBase.h │ │ │ ├── SparsePermutation.h │ │ │ ├── SparseProduct.h │ │ │ ├── SparseRedux.h │ │ │ ├── SparseRef.h │ │ │ ├── SparseSelfAdjointView.h │ │ │ ├── SparseSolverBase.h │ │ │ ├── SparseSparseProductWithPruning.h │ │ │ ├── SparseTranspose.h │ │ │ ├── SparseTriangularView.h │ │ │ ├── SparseUtil.h │ │ │ ├── SparseVector.h │ │ │ ├── SparseView.h │ │ │ └── TriangularSolver.h │ │ ├── SparseLU/ │ │ │ ├── SparseLU.h │ │ │ ├── SparseLUImpl.h │ │ │ ├── SparseLU_Memory.h │ │ │ ├── SparseLU_Structs.h │ │ │ ├── SparseLU_SupernodalMatrix.h │ │ │ ├── SparseLU_Utils.h │ │ │ ├── SparseLU_column_bmod.h │ │ │ ├── SparseLU_column_dfs.h │ │ │ ├── SparseLU_copy_to_ucol.h │ │ │ ├── SparseLU_gemm_kernel.h │ │ │ ├── SparseLU_heap_relax_snode.h │ │ │ ├── SparseLU_kernel_bmod.h │ │ │ ├── SparseLU_panel_bmod.h │ │ │ ├── SparseLU_panel_dfs.h │ │ │ ├── SparseLU_pivotL.h │ │ │ ├── SparseLU_pruneL.h │ │ │ └── SparseLU_relax_snode.h │ │ ├── SparseQR/ │ │ │ └── SparseQR.h │ │ ├── StlSupport/ │ │ │ ├── StdDeque.h │ │ │ ├── StdList.h │ │ │ ├── StdVector.h │ │ │ └── details.h │ │ ├── SuperLUSupport/ │ │ │ └── SuperLUSupport.h │ │ ├── UmfPackSupport/ │ │ │ └── UmfPackSupport.h │ │ ├── misc/ │ │ │ ├── Image.h │ │ │ ├── Kernel.h │ │ │ ├── RealSvd2x2.h │ │ │ ├── blas.h │ │ │ ├── lapack.h │ │ │ ├── lapacke.h │ │ │ └── lapacke_mangling.h │ │ └── plugins/ │ │ ├── ArrayCwiseBinaryOps.h │ │ ├── ArrayCwiseUnaryOps.h │ │ ├── BlockMethods.h │ │ ├── CommonCwiseBinaryOps.h │ │ ├── CommonCwiseUnaryOps.h │ │ ├── IndexedViewMethods.h │ │ ├── MatrixCwiseBinaryOps.h │ │ ├── MatrixCwiseUnaryOps.h │ │ └── ReshapedMethods.h │ ├── mvtnorm/ │ │ ├── Makefile │ │ ├── mvt.f │ │ ├── mvtnorm.cpp │ │ ├── mvtnorm.h │ │ └── randomF77.c │ ├── pgenlib/ │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── include/ │ │ │ ├── pgenlib_misc.cc │ │ │ ├── pgenlib_misc.h │ │ │ ├── pgenlib_read.cc │ │ │ ├── pgenlib_read.h │ │ │ ├── plink2_base.cc │ │ │ ├── plink2_base.h │ │ │ ├── plink2_bits.cc │ │ │ └── plink2_bits.h │ │ ├── pgenlib_ffi_support.cpp │ │ ├── pgenlib_ffi_support.h │ │ ├── pgenlibr.cpp │ │ ├── pgenlibr.h │ │ ├── pvar_ffi_support.cc │ │ ├── pvar_ffi_support.h │ │ └── simde/ │ │ ├── check.h │ │ ├── debug-trap.h │ │ ├── hedley.h │ │ ├── simde-aes.h │ │ ├── simde-align.h │ │ ├── simde-arch.h │ │ ├── simde-bf16.h │ │ ├── simde-common.h │ │ ├── simde-complex.h │ │ ├── simde-constify.h │ │ ├── simde-detect-clang.h │ │ ├── simde-diagnostic.h │ │ ├── simde-f16.h │ │ ├── simde-features.h │ │ ├── simde-math.h │ │ └── x86/ │ │ ├── aes.h │ │ ├── avx.h │ │ ├── avx2.h │ │ ├── clmul.h │ │ ├── f16c.h │ │ ├── fma.h │ │ ├── gfni.h │ │ ├── mmx.h │ │ ├── sse.h │ │ ├── sse2.h │ │ ├── sse3.h │ │ ├── sse4.1.h │ │ ├── sse4.2.h │ │ ├── ssse3.h │ │ ├── svml.h │ │ └── xop.h │ ├── qf/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── qfc.cpp │ │ └── qfc.h │ ├── quadpack/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── d1mach.f │ │ ├── dqags.f │ │ ├── dqagse.f │ │ ├── dqelg.f │ │ ├── dqk21.f │ │ └── dqpsrt.f │ └── remeta/ │ ├── Makefile │ ├── README.md │ ├── bgz_writer.cpp │ ├── bgz_writer.hpp │ ├── regenie_ld_matrix_writer.cpp │ └── regenie_ld_matrix_writer.hpp ├── scripts/ │ ├── parseLD.r │ ├── regenie_docker.sh │ ├── regenie_paper/ │ │ ├── README.md │ │ └── scripts/ │ │ ├── manP.colors │ │ ├── master.sh │ │ ├── mk_plots_bt.r │ │ ├── mk_plots_qt.r │ │ ├── mk_sparseGRM.r │ │ ├── prep_files.sh │ │ ├── run_methods.r │ │ └── std_ffuns.r │ └── rplot ├── src/ │ ├── Data.cpp │ ├── Data.hpp │ ├── Files.cpp │ ├── Files.hpp │ ├── Geno.cpp │ ├── Geno.hpp │ ├── HLM.cpp │ ├── HLM.hpp │ ├── Interaction.cpp │ ├── Interaction.hpp │ ├── Joint_Tests.cpp │ ├── Joint_Tests.hpp │ ├── MCC.cpp │ ├── MCC.hpp │ ├── Masks.cpp │ ├── Masks.hpp │ ├── MultiTrait_Tests.cpp │ ├── MultiTrait_Tests.hpp │ ├── NNLS.cpp │ ├── NNLS.hpp │ ├── Ordinal.cpp │ ├── Ordinal.hpp │ ├── Pheno.cpp │ ├── Pheno.hpp │ ├── Regenie.cpp │ ├── Regenie.hpp │ ├── SKAT.cpp │ ├── SKAT.hpp │ ├── Step1_Models.cpp │ ├── Step1_Models.hpp │ ├── Step2_Models.cpp │ ├── Step2_Models.hpp │ ├── bgen_to_vcf.hpp │ ├── cox_firth.cpp │ ├── cox_firth.hpp │ ├── cox_ridge.cpp │ ├── cox_ridge.hpp │ ├── cox_score.cpp │ ├── cox_score.hpp │ ├── survival_data.cpp │ └── survival_data.hpp └── test/ ├── check_na.sh ├── test_bash.sh ├── test_conda.sh ├── test_docker.sh └── test_singularity.sh ================================================ FILE CONTENTS ================================================ ================================================ FILE: .dockerignore ================================================ # File .dockerignore .git .gitignore .github # directories to ignore example/ test/ recipe/ # in source code src/*.o external_libs/pgenlib/*.o external_libs/pgenlib/include/*.o # Files README.md LICENSE ================================================ FILE: .github/workflows/docker-image.yml ================================================ name: Docker Image CI on: push: tags: - 'v*' workflow_dispatch: env: REGISTRY: docker.pkg.github.com REPO_NAME: ${{ github.repository }} jobs: build-and-push-image: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Read VERSION file id: getversion run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT #run: echo "::set-output name=version::$(cat VERSION)" - name: Build and push image to Docker run: | IMAGE_NAME="docker.pkg.github.com/${{ env.REPO_NAME }}/regenie:v${{ steps.getversion.outputs.version }}.gz" echo "${{ secrets.GH_PAT }}" | docker login https://docker.pkg.github.com -u ${GITHUB_ACTOR} --password-stdin docker build -f Dockerfile_mkl \ --build-arg BOOST_IO=1 \ --build-arg LIB_INSTALL=libboost-iostreams-dev \ -t $IMAGE_NAME . docker push $IMAGE_NAME ================================================ FILE: .github/workflows/manual.yml ================================================ # This is a basic workflow that is manually triggered name: Manual workflow # Controls when the action will run. Workflow runs when manually triggered using the UI # or API. on: workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: build: runs-on: ubuntu-20.04 name: Build env: BOOST_IO: 0 STATIC: 1 BGEN_VERSION: v1.1.7 LIB_INSTALL: g++ libgomp1 make python3 zlib1g-dev wget steps: - name: Checkout repository uses: actions/checkout@v3 - name: Prep GCC install run: | sudo apt-get install -y software-properties-common sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update - name: Apt packages run: sudo apt install -y --no-install-recommends ${LIB_INSTALL} - name: Cache Bgen id: bgen-cache uses: actions/cache@v3 with: path: bgen.tgz key: ${{ runner.os }}-bgen - name: Download Bgen if not cached if: steps.bgen-cache.outputs.cache-hit != 'true' run: | wget -O bgen.tgz "http://code.enkre.net/bgen/tarball/release/${BGEN_VERSION}" - name: Install Bgen run: | tar xzf bgen.tgz pushd ${BGEN_VERSION} python3 waf configure python3 waf -v popd - name: Build run: make BGEN_PATH=./${BGEN_VERSION} HAS_BOOST_IOSTREAM=$BOOST_IO STATIC=$STATIC all - name: Test run: ./regenie --help ================================================ FILE: .github/workflows/test.yml ================================================ name: build on: push: tags: - 'v*' pull_request: types: - opened release: types: - created workflow_dispatch: jobs: build: runs-on: ubuntu-latest name: Build env: BOOST_IO: 0 STATIC: 1 BGEN_VERSION: v1.1.7 CMAKE_VERSION_MAJOR: 3.28 CMAKE_VERSION_MINOR: 0 LIB_INSTALL: g++-9 gfortran-9 libgomp1 make python3 zlib1g-dev wget libcurl4-openssl-dev steps: - name: Checkout repository uses: actions/checkout@v3 - name: Prep GCC install run: | sudo apt-get install -y software-properties-common sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update - name: Apt packages run: | sudo apt install -y --no-install-recommends ${LIB_INSTALL} sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9 sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-9 70 sudo update-alternatives --install /usr/bin/f77 f77 /usr/bin/gfortran-9 70 sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-9 70 wget -O cmake_install.sh "http://cmake.org/files/v${CMAKE_VERSION_MAJOR}/cmake-${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}-linux-x86_64.sh" sudo sh cmake_install.sh --prefix=/usr/local --skip-license --exclude-subdir sudo rm cmake_install.sh - name: Cache Bgen id: bgen-cache uses: actions/cache@v3 with: path: bgen.tgz key: ${{ runner.os }}-bgen - name: Download Bgen if not cached if: steps.bgen-cache.outputs.cache-hit != 'true' run: | wget -O bgen.tgz "http://code.enkre.net/bgen/tarball/release/${BGEN_VERSION}" - name: Install Bgen run: | tar -xzf bgen.tgz pushd ${BGEN_VERSION} python3 waf configure python3 waf popd - name: Build run: | BGEN_PATH=./${BGEN_VERSION} HAS_BOOST_IOSTREAM=$BOOST_IO STATIC=$STATIC cmake . make - name: Test run: | ./regenie --help ./regenie --version ================================================ FILE: .gitignore ================================================ src/*.o external_libs/pgenlib/*.o external_libs/pgenlib/include/*.o docs/nature.csl build/ ================================================ FILE: CMakeLists.txt ================================================ # For Intel MKL, set MKLROOT= when running cmake # e.g. MKLROOT=/opt/mkl/ cmake -S regenie_dir/ -B regenie_dir/build/ # For OpenBLAS, set OPENBLAS_ROOT= when running cmake # note: it also requires lapacke library # For static compilation on Linux systems, set STATIC=1 when running cmake # -> this excludes GLIBC cmake_minimum_required(VERSION 3.13) # detect OS architecture execute_process( COMMAND uname -s OUTPUT_VARIABLE UNAME_S OUTPUT_STRIP_TRAILING_WHITESPACE ) # Get Regenie version file(STRINGS "VERSION" RG_VERSION) project(regenie VERSION ${RG_VERSION} ) include(CMakePackageConfigHelpers) include(GNUInstallDirs) # specify the C++ standard set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # Ensures -std=c++11 ###################################### ######## check input variables # check BGEN_PATH if("$ENV{BGEN_PATH}" STREQUAL "") message( FATAL_ERROR "Must specify path to BGEN library in 'BGEN_PATH'") else() set(BGEN_PATH "$ENV{BGEN_PATH}" CACHE INTERNAL "Set BGEN library path") if (NOT EXISTS ${BGEN_PATH}) message( FATAL_ERROR "Specified BGEN library directory '${BGEN_PATH}' does not exist") endif() endif() # check for static compilation if($ENV{STATIC}) set(BUILD_STATIC ON CACHE INTERNAL "Static compilation") message( STATUS "Static compilation mode") endif() # check Boost IOStreams if($ENV{HAS_BOOST_IOSTREAM}) set(HAS_BOOST_IOSTREAM 1 CACHE INTERNAL "Add Boost IO") set(RG_VERSION "${RG_VERSION}.gz" CACHE INTERNAL "Update version") else() set(HAS_BOOST_IOSTREAM 0 CACHE INTERNAL "Skip Boost IO") endif() # check MKL if(NOT "$ENV{MKLROOT}" STREQUAL "") set(MKLROOT "$ENV{MKLROOT}" CACHE INTERNAL "Set MKL library path") if (NOT EXISTS ${MKLROOT}) message( FATAL_ERROR "Specified MKL library directory '${MKLROOT}' does not exist") endif() message( STATUS "Will compile with Intel MKL library") endif() # check HTSlib if(NOT "$ENV{HTSLIB_PATH}" STREQUAL "") set(HTSLIB_PATH "$ENV{HTSLIB_PATH}" CACHE INTERNAL "Set HTSlib library path") if (NOT EXISTS ${HTSLIB_PATH}) message( FATAL_ERROR "Specified HTSlib library directory '${HTSLIB_PATH}' does not exist") endif() message( STATUS "Will compile with HTSlib") endif() # check OpenBLAS if(NOT "$ENV{OPENBLAS_ROOT}" STREQUAL "") set(OPENBLAS_ROOT "$ENV{OPENBLAS_ROOT}" CACHE INTERNAL "Set OpenBLAS library path") if (NOT EXISTS ${OPENBLAS_ROOT}) message( FATAL_ERROR "Specified OpenBLAS library directory '${OPENBLAS_ROOT}' does not exist") endif() message( STATUS "Will compile with OpenBLAS library") endif() ###################################### ######## set flags and required libraries set(BLA_STATIC ${BUILD_STATIC}) set(Boost_USE_STATIC_LIBS ${BUILD_STATIC}) set(Boost_USE_DEBUG_LIBS OFF) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) # list each file specifically add_executable(regenie ${CMAKE_SOURCE_DIR}/src/Data.cpp ${CMAKE_SOURCE_DIR}/src/Files.cpp ${CMAKE_SOURCE_DIR}/src/Geno.cpp ${CMAKE_SOURCE_DIR}/src/HLM.cpp ${CMAKE_SOURCE_DIR}/src/Interaction.cpp ${CMAKE_SOURCE_DIR}/src/Joint_Tests.cpp ${CMAKE_SOURCE_DIR}/src/Masks.cpp ${CMAKE_SOURCE_DIR}/src/NNLS.cpp ${CMAKE_SOURCE_DIR}/src/Pheno.cpp ${CMAKE_SOURCE_DIR}/src/Regenie.cpp ${CMAKE_SOURCE_DIR}/src/SKAT.cpp ${CMAKE_SOURCE_DIR}/src/Step1_Models.cpp ${CMAKE_SOURCE_DIR}/src/Step2_Models.cpp ${CMAKE_SOURCE_DIR}/src/MultiTrait_Tests.cpp ${CMAKE_SOURCE_DIR}/src/MCC.cpp ${CMAKE_SOURCE_DIR}/src/Ordinal.cpp ${CMAKE_SOURCE_DIR}/src/survival_data.cpp ${CMAKE_SOURCE_DIR}/src/cox_ridge.cpp ${CMAKE_SOURCE_DIR}/src/cox_score.cpp ${CMAKE_SOURCE_DIR}/src/cox_firth.cpp ) target_include_directories(regenie PRIVATE ${CMAKE_SOURCE_DIR}/src) set(CMAKE_CXX_FLAGS "-O3 -Wall -pedantic -ffast-math -Wno-unused-local-typedefs -Wno-deprecated-declarations -Wno-long-long -Wno-c11-extensions -fPIC") add_definitions(-DVERSION_NUMBER="${RG_VERSION}") if("${UNAME_S}" STREQUAL "Linux") find_package(OpenMP REQUIRED) target_link_libraries(regenie PRIVATE OpenMP::OpenMP_CXX) if(${BUILD_STATIC}) target_link_options(regenie BEFORE PRIVATE -static-libgcc PRIVATE -static-libstdc++) endif() elseif("${UNAME_S}" STREQUAL "Darwin") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") endif() set(EXTERN_LIBS_PATH "${CMAKE_SOURCE_DIR}/external_libs") target_include_directories(regenie PRIVATE ${EXTERN_LIBS_PATH}/) # BGEN library and its dependencies find_library(ZSTD_LIBRARY libzstd.a HINTS "${BGEN_PATH}/build/3rd_party/zstd-1.1.0" REQUIRED) find_library(DB_LIBRARY libdb.a HINTS "${BGEN_PATH}/build/db" REQUIRED) find_library(SQLITE3_LIBRARY libsqlite3.a HINTS "${BGEN_PATH}/build/3rd_party/sqlite3" REQUIRED) find_library(Boost_LIBRARY libboost.a HINTS "${BGEN_PATH}/build/3rd_party/boost_1_55_0" REQUIRED) find_library(BGEN_LIBRARY libbgen.a HINTS "${BGEN_PATH}/build" REQUIRED) target_link_libraries(regenie PRIVATE ${ZSTD_LIBRARY} ${BGEN_LIBRARY} ${DB_LIBRARY} ${SQLITE3_LIBRARY} ${Boost_LIBRARY}) target_include_directories(regenie PRIVATE ${BGEN_PATH} ${BGEN_PATH}/genfile/include/ ${BGEN_PATH}/3rd_party/boost_1_55_0/ ${BGEN_PATH}/3rd_party/zstd-1.1.0/lib ${BGEN_PATH}/db/include/ ${BGEN_PATH}/3rd_party/sqlite3) # MVTNorm library set(MVTN_PATH "${EXTERN_LIBS_PATH}/mvtnorm") add_custom_target( libMvtnorm COMMAND make WORKING_DIRECTORY ${MVTN_PATH} ) target_link_libraries(regenie PRIVATE ${MVTN_PATH}/libMvtnorm.a) add_dependencies(regenie libMvtnorm) # QF library set(QF_PATH "${EXTERN_LIBS_PATH}/qf") add_custom_target( libqf COMMAND make WORKING_DIRECTORY ${QF_PATH} ) target_link_libraries(regenie PRIVATE ${QF_PATH}/qf.a) add_dependencies(regenie libqf) # Quadpack library set(QUAD_PATH "${EXTERN_LIBS_PATH}/quadpack") add_custom_target( libquad COMMAND make WORKING_DIRECTORY ${QUAD_PATH} ) target_link_libraries(regenie PRIVATE ${QUAD_PATH}/libquad.a) add_dependencies(regenie libquad) # PGEN library set(PGEN_PATH "${EXTERN_LIBS_PATH}/pgenlib") add_custom_target( pgenlib COMMAND make WORKING_DIRECTORY ${PGEN_PATH} ) target_link_libraries(regenie PRIVATE ${PGEN_PATH}/pgenlib.a) target_include_directories(regenie PRIVATE ${PGEN_PATH} ${PGEN_PATH}/simde/ ${PGEN_PATH}/include/) add_dependencies(regenie pgenlib) # REMETA library if(EXISTS ${HTSLIB_PATH}) set(REMETA_PATH "${EXTERN_LIBS_PATH}/remeta") add_custom_target( remeta COMMAND make HTSLIB_PATH=${HTSLIB_PATH} WORKING_DIRECTORY ${REMETA_PATH} ) target_link_libraries(regenie PUBLIC ${REMETA_PATH}/remeta.a) target_include_directories(regenie PUBLIC ${REMETA_PATH}) add_dependencies(regenie remeta) add_definitions(-DWITH_HTSLIB) find_library(HTSLIB libhts.a HINTS ${HTSLIB_PATH}) find_library(BZ2_LIB bz2 REQUIRED) find_library(LZMA_LIB lzma REQUIRED) find_library(CURL_LIB curl REQUIRED) find_library(CRYPTO_LIB crypto REQUIRED) target_link_libraries(regenie PUBLIC ${HTSLIB} ${BZ2_LIB} ${LZMA_LIB} ${CURL_LIB} ${CRYPTO_LIB} ) endif() # Intel MKL if(EXISTS ${MKLROOT}) add_definitions(-DWITH_MKL -DEIGEN_USE_BLAS -DEIGEN_USE_LAPACKE) target_include_directories(regenie PRIVATE ${MKLROOT}/include/) if(${BUILD_STATIC}) # specify static libs find_library(MKL_LP64_LIB libmkl_intel_lp64.a HINTS "${MKLROOT}/lib/intel64" "${MKLROOT}/lib" REQUIRED) find_library(MKL_THREAD_LIB libmkl_gnu_thread.a HINTS "${MKLROOT}/lib/intel64" "${MKLROOT}/lib" REQUIRED) find_library(MKL_CORE_LIB libmkl_core.a HINTS "${MKLROOT}/lib/intel64" "${MKLROOT}/lib" REQUIRED) target_link_libraries(regenie PRIVATE "-Wl,--start-group" ${MKL_LP64_LIB} ${MKL_THREAD_LIB} ${MKL_CORE_LIB} "-Wl,--end-group" -lgomp) else() # use dynamic libs find_library(MKL_LP64_LIB mkl_intel_lp64 PATHS "${MKLROOT}/lib/intel64" "${MKLROOT}/lib" REQUIRED) find_library(MKL_THREAD_LIB mkl_gnu_thread PATHS "${MKLROOT}/lib/intel64" "${MKLROOT}/lib" REQUIRED) find_library(MKL_CORE_LIB mkl_core PATHS "${MKLROOT}/lib/intel64" "${MKLROOT}/lib" REQUIRED) target_link_libraries(regenie PRIVATE "-Wl,--no-as-needed" ${MKL_LP64_LIB} ${MKL_THREAD_LIB} ${MKL_CORE_LIB} -lgomp) endif() elseif(EXISTS ${OPENBLAS_ROOT}) # OpenBLAS add_definitions(-DWITH_OPENBLAS -DEIGEN_USE_BLAS -DEIGEN_USE_LAPACKE) target_include_directories(regenie PRIVATE ${OPENBLAS_ROOT}/include/) find_library(LAPACK_LIB lapack REQUIRED) find_library(BLAS_LIB openblas HINTS "${OPENBLAS_ROOT}/lib/" REQUIRED) target_link_libraries(regenie PRIVATE ${LAPACK_LIB} -llapacke ${BLAS_LIB}) endif() # cxxopts (header-only) target_include_directories(regenie PRIVATE ${EXTERN_LIBS_PATH}/cxxopts/include/) # LBFGS (header-only) target_include_directories(regenie PRIVATE ${EXTERN_LIBS_PATH}/LBFGSpp/include/) # Eigen (header-only) target_include_directories(regenie PRIVATE ${EXTERN_LIBS_PATH}/eigen-3.4.0/) # Boost IO if(${HAS_BOOST_IOSTREAM}) if("${UNAME_S}" STREQUAL "Darwin") find_library(BOOST_LIB_IO libboost_iostreams libboost_iostreams.a REQUIRED) target_link_libraries(regenie PRIVATE ${BOOST_LIB_IO}) elseif(${BUILD_STATIC}) find_library(BOOST_LIB_IO libboost_iostreams.a REQUIRED) target_link_libraries(regenie PRIVATE ${BOOST_LIB_IO}) else() target_link_libraries(regenie PRIVATE -lboost_iostreams) endif() add_definitions(-DHAS_BOOST_IOSTREAM) message( STATUS "Will compile with Boost Iostreams library") endif() # Other libraries find_library(ZLIB_LIBRARY libz.a z REQUIRED) find_library(M_LIB m REQUIRED) find_library(DL_LIB dl REQUIRED) if("${UNAME_S}" STREQUAL "Linux") set(GFORTRAN_LIBRARY "-lgfortran") elseif("${UNAME_S}" STREQUAL "Darwin") find_library(GFORTRAN_LIBRARY gfortran REQUIRED) endif() target_link_libraries( regenie PRIVATE ${ZLIB_LIBRARY} ${M_LIB} ${DL_LIB} ${PTHREAD_LIB} ${GFORTRAN_LIBRARY} ) install(TARGETS regenie RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) message( STATUS "REGENIE v" ${RG_VERSION}) add_custom_target(full-clean COMMAND cd "${MVTN_PATH}" && make clean COMMAND cd "${QF_PATH}" && make clean COMMAND cd "${QUAD_PATH}" && make clean COMMAND cd "${PGEN_PATH}" && make clean ) ================================================ FILE: Dockerfile ================================================ # Thanks to Nathan Weeks for sharing this Dockerfile # minor edits were made # Filename: Dockerfile # make this global ARG LIB_INSTALL ARG LIB_INSTALL2 FROM public.ecr.aws/ubuntu/ubuntu:22.04 AS builder ARG BOOST_IO ARG LIB_INSTALL ARG STATIC ARG CMAKE_VERSION_MAJOR=3.13 ARG CMAKE_VERSION_MINOR=0 ARG HTSLIB_VERSION=1.18 WORKDIR /src ADD http://cmake.org/files/v${CMAKE_VERSION_MAJOR}/cmake-${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}-Linux-x86_64.sh cmake_install.sh ADD http://code.enkre.net/bgen/tarball/release/v1.1.7 v1.1.7.tgz ADD https://github.com/samtools/htslib/releases/download/$HTSLIB_VERSION/htslib-$HTSLIB_VERSION.tar.bz2 htslib-$HTSLIB_VERSION.tar.bz2 # install BGEN and HTSlib libraries RUN apt-get update && apt-get install -y --no-install-recommends \ gcc-9 \ g++-9 \ gfortran-9 \ make \ libz-dev \ bzip2 \ libbz2-dev \ liblzma-dev \ libcurl4-openssl-dev \ libssl-dev \ python3 \ zlib1g-dev \ $LIB_INSTALL \ && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9 \ && update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-9 70 \ && update-alternatives --install /usr/bin/f77 f77 /usr/bin/gfortran-9 70 \ && update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-9 70 \ && tar -xf htslib-$HTSLIB_VERSION.tar.bz2 \ && cd htslib-$HTSLIB_VERSION/ \ && ./configure \ && make \ && make install \ && cd .. \ && sh cmake_install.sh --prefix=/usr/local --skip-license --exclude-subdir \ && rm cmake_install.sh \ && tar -xzf v1.1.7.tgz \ && rm v1.1.7.tgz \ && cd v1.1.7 \ && python3 waf configure \ && python3 waf COPY . /src/regenie WORKDIR /src/regenie RUN BGEN_PATH=/src/v1.1.7 HAS_BOOST_IOSTREAM=$BOOST_IO HTSLIB_PATH=/usr/local/lib/ STATIC=$STATIC cmake . \ && make FROM public.ecr.aws/ubuntu/ubuntu:22.04 ARG LIB_INSTALL2 RUN apt-get update && apt-get install -y --no-install-recommends \ libgomp1 libcurl4 gfortran-9 $LIB_INSTALL2 \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /src/regenie/regenie /usr/local/bin ================================================ FILE: Dockerfile_mkl ================================================ # Filename: Dockerfile_mkl # make this global ARG LIB_INSTALL ARG LIB_INSTALL2 FROM public.ecr.aws/ubuntu/ubuntu:22.04 AS builder ARG BOOST_IO ARG LIB_INSTALL ARG STATIC ARG CMAKE_VERSION_MAJOR=3.13 ARG CMAKE_VERSION_MINOR=0 ARG HTSLIB_VERSION=1.18 WORKDIR /src ADD http://cmake.org/files/v${CMAKE_VERSION_MAJOR}/cmake-${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}-Linux-x86_64.sh cmake_install.sh ADD http://code.enkre.net/bgen/tarball/release/v1.1.7 v1.1.7.tgz ADD https://github.com/samtools/htslib/releases/download/$HTSLIB_VERSION/htslib-$HTSLIB_VERSION.tar.bz2 htslib-$HTSLIB_VERSION.tar.bz2 ADD https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB intel_key.PUB COPY . /src/regenie # install BGEN and HTSlib libraries RUN apt-get update && apt-get install -y --no-install-recommends \ gcc-9 \ g++-9 \ gfortran-9 \ libz-dev \ bzip2 \ libbz2-dev \ liblzma-dev \ libcurl4-openssl-dev \ libssl-dev \ make \ gnupg \ python3 \ zlib1g-dev \ apt-transport-https ca-certificates \ $LIB_INSTALL \ && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9 \ && update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-9 70 \ && update-alternatives --install /usr/bin/f77 f77 /usr/bin/gfortran-9 70 \ && update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-9 70 \ && tar -xf htslib-$HTSLIB_VERSION.tar.bz2 \ && cd htslib-$HTSLIB_VERSION/ \ && ./configure \ && make \ && make install \ && cd .. \ && sh cmake_install.sh --prefix=/usr/local --skip-license --exclude-subdir \ && rm cmake_install.sh \ && tar -xzf v1.1.7.tgz \ && rm v1.1.7.tgz \ && cd v1.1.7 \ && python3 waf configure \ && python3 waf \ && cd .. \ && sh -c 'cat intel_key.PUB | gpg --dearmor | tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null' \ && sh -c 'echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | tee /etc/apt/sources.list.d/oneAPI.list' \ && apt-get update \ && apt-get install intel-oneapi-mkl-devel -y --no-install-recommends \ && . /opt/intel/oneapi/setvars.sh \ && echo "MKL_THREADING_LAYER=GNU" >> /etc/environment \ && cd /src/regenie \ && BGEN_PATH=/src/v1.1.7 HAS_BOOST_IOSTREAM=$BOOST_IO MKLROOT=$MKLROOT HTSLIB_PATH=/usr/local/lib/ STATIC=1 cmake . \ && make # no need to install Boost IO and MKL here (static linking) FROM public.ecr.aws/ubuntu/ubuntu:22.04 RUN apt-get update && apt-get install -y --no-install-recommends \ libgomp1 gfortran-9 \ libz-dev libbz2-dev liblzma-dev libcurl4-openssl-dev libssl-dev \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /src/regenie/regenie /usr/local/bin ================================================ FILE: Dockerfile_openblas ================================================ # Thanks to Nathan Weeks for sharing this Dockerfile # minor edits were made # Filename: Dockerfile_openblas # make this global ARG LIB_INSTALL ARG LIB_INSTALL2 FROM ubuntu:18.04 AS builder ARG BOOST_IO ARG LIB_INSTALL ARG STATIC ARG CMAKE_VERSION_MAJOR=3.13 ARG CMAKE_VERSION_MINOR=0 WORKDIR /src ADD http://cmake.org/files/v${CMAKE_VERSION_MAJOR}/cmake-${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}-Linux-x86_64.sh cmake_install.sh ADD http://code.enkre.net/bgen/tarball/release/v1.1.7 v1.1.7.tgz RUN apt-get update && apt-get install -y --no-install-recommends \ g++ \ make \ python3 \ gfortran \ zlib1g-dev \ liblapacke-dev \ libopenblas-dev \ $LIB_INSTALL \ && sh cmake_install.sh --prefix=/usr/local --skip-license --exclude-subdir \ && rm cmake_install.sh \ && tar -xzf v1.1.7.tgz \ && rm v1.1.7.tgz \ && cd v1.1.7 \ && python3 waf configure \ && python3 waf \ && cd .. COPY . /src/regenie WORKDIR /src/regenie RUN BGEN_PATH=/src/v1.1.7 HAS_BOOST_IOSTREAM=$BOOST_IO OPENBLAS_ROOT=/usr/lib/x86_64-linux-gnu/openblas STATIC=1 cmake . \ && make FROM ubuntu:18.04 ARG LIB_INSTALL2 RUN apt-get update && apt-get install -y --no-install-recommends \ libgomp1 gfortran $LIB_INSTALL2 \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /src/regenie/regenie /usr/local/bin ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2020-2021 Joelle Mbatchou, Andrey Ziyatdinov & Jonathan Marchini Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------------------------------------------------------------------------- This software links code from the BGEN library which is licensed under the "Boost Software License, Version 1.0": Copyright Gavin Band 2008 - 2012. Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Makefile ================================================ # Makefile for Linux and Mac OSX systems for REGENIE # # * User needs to specify BGEN_PATH which is the directory # where the BGEN library is installed # * If the Boost Iostream library is installed on the system, # user can specify to link to it during compilation by # setting HAS_BOOST_IOSTREAM to 1 # ############################################################### # # Optional: To use external BLAS/LAPACK routines in Eigen # # For Intel MKL, add path of installed library to MKLROOT # For OpenBLAS, add path of installed library to OPENBLAS_ROOT # note: it also requires lapacke library # # For static compilation on Linux systems, set STATIC=1 # -> this excludes GLIBC # BGEN_PATH = HAS_BOOST_IOSTREAM := 0 MKLROOT = # directory containing libhts.a or libhts.so HTSLIB_PATH = OPENBLAS_ROOT = STATIC := 0 ############ # Use only if not set CXX ?= g++ CXXFLAGS = -O3 -Wall -pedantic -ffast-math -std=c++11 -Wno-unused-local-typedefs -Wno-deprecated-declarations -Wno-long-long -Wno-c11-extensions -fPIC EFILE = regenie CFLAGS ?= # check BGEN_PATH is set ifneq ($(MAKECMDGOALS),clean) ifeq ($(strip $(BGEN_PATH)),) $(warning You did not set the path to BGEN library, i.e. "BGEN_PATH") endif endif # detect OS architecture and add flags UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) INC = -I${BGEN_PATH}/3rd_party/boost_1_55_0 CFLAGS += -fopenmp ifeq ($(strip $(STATIC)),1) LPATHS = -static-libgcc -static-libstdc++ DLIBS = -Wl,-Bdynamic endif else ifeq ($(UNAME_S),Darwin) RGFLAGS += -stdlib=libc++ endif RG_VERSION = $(shell cat VERSION) ## for docker DFILE = ./Dockerfile TEST_SCRIPT = ./test/test_docker.sh ifeq ($(strip $(STATIC)),1) ifneq ($(strip $(MKLROOT)),) DFILE = ./Dockerfile_mkl # only for static linking endif endif ## for boost iostream ifeq ($(HAS_BOOST_IOSTREAM),1) RG_VERSION := $(RG_VERSION).gz RGFLAGS += -DHAS_BOOST_IOSTREAM ifeq ($(strip $(STATIC)),1) SLIBS = -Wl,-Bstatic -lboost_iostreams else DLIBS += -lboost_iostreams LIB_BIO2 = libboost-iostreams-dev ## for docker build endif LIB_BIO = libboost-iostreams-dev ## for docker build endif # Intel MKL or OpenBLAS ifneq ($(strip $(MKLROOT)),) ifeq ($(UNAME_S),Linux) RGFLAGS += -DWITH_MKL -DEIGEN_USE_BLAS -DEIGEN_USE_LAPACKE INC += -I${MKLROOT}/include/ # static linking ifeq ($(strip $(STATIC)),1) SLIBS += -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_gnu_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group DLIBS += -lgomp -lpthread # dynamic linking else LIBMKL = -L${MKLROOT}/lib/intel64/ DLIBS += -Wl,--no-as-needed -lmkl_intel_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread endif endif else ifneq ($(strip $(OPENBLAS_ROOT)),) ifeq ($(UNAME_S),Linux) RGFLAGS += -DWITH_OPENBLAS -DEIGEN_USE_BLAS -DEIGEN_USE_LAPACKE INC += -I${OPENBLAS_ROOT}/include/ # static linking ifeq ($(strip $(STATIC)),1) SLIBS += -Wl,-rpath=${OPENBLAS_ROOT}/lib/ -llapack -llapacke -lopenblas # dynamic linking else DLIBS += -Wl,-rpath=${OPENBLAS_ROOT}/lib/ -llapack -llapacke -lopenblas endif endif endif ## for HTSlib ifneq ($(strip $(HTSLIB_PATH)),) ifeq ($(UNAME_S),Linux) RGFLAGS += -DWITH_HTSLIB ifeq ($(strip $(STATIC)),1) SLIBS += ${HTSLIB_PATH}/libhts.a else SLIBS += ${HTSLIB_PATH}/libhts.so endif DLIBS += -lz -lbz2 -llzma -lcurl endif endif # pass on version number to software RGFLAGS += -DVERSION_NUMBER=\"$(RG_VERSION)\" OBJECTS = $(patsubst %.cpp,%.o,$(wildcard ./src/*.cpp)) PGEN_PATH = ./external_libs/pgenlib/ INC += -I${PGEN_PATH} -I${PGEN_PATH}/simde/ -I${PGEN_PATH}/include/ -I./external_libs/cxxopts/include/ -I./external_libs/LBFGSpp/include/ -I${BGEN_PATH} -I./external_libs/eigen-3.4.0/ -I${BGEN_PATH}/genfile/include/ -I${BGEN_PATH}/3rd_party/boost_1_55_0/ -I${BGEN_PATH}/3rd_party/zstd-1.1.0/lib -I${BGEN_PATH}/db/include/ -I${BGEN_PATH}/3rd_party/sqlite3 -I./external_libs/remeta -I./external_libs/ LPATHS += ${LIBMKL} -L${BGEN_PATH}/build/ -L${BGEN_PATH}/build/3rd_party/zstd-1.1.0/ -L${BGEN_PATH}/build/db/ -L${BGEN_PATH}/build/3rd_party/sqlite3/ -L${BGEN_PATH}/build/3rd_party/boost_1_55_0 -L/usr/lib/ LIBS += ${SLIBS} -lbgen -lzstd -ldb -lsqlite3 -lboost LIBS += -lz ${DLIBS} -lm -ldl -lgfortran .PHONY: docker-build docker-test debug clean all: ${EFILE} ${EFILE}: libMvtnorm libqf libquad pgenlib remeta ${OBJECTS} ${CXX} ${CXXFLAGS} ${RGFLAGS} ${CFLAGS} -o ${EFILE} ${OBJECTS} ./external_libs/mvtnorm/libMvtnorm.a ./external_libs/qf/qf.a ./external_libs/quadpack/libquad.a ./external_libs/pgenlib/pgenlib.a ./external_libs/remeta/remeta.a ${LPATHS} ${LIBS} %.o: %.cpp ${CXX} ${CXXFLAGS} ${RGFLAGS} -o $@ -c $< ${INC} ${CFLAGS} libMvtnorm: (cd ./external_libs/mvtnorm/;$(MAKE)) libqf: (cd ./external_libs/qf/;$(MAKE)) libquad: (cd ./external_libs/quadpack/;$(MAKE)) pgenlib: (cd ./external_libs/pgenlib/;$(MAKE)) remeta: (cd ./external_libs/remeta/;$(MAKE) remeta.a HTSLIB_PATH=${HTSLIB_PATH}) ##### ## For use with Docker # create Docker image docker-build: @echo "Building docker image for REGENIE v${RG_VERSION}" ifeq ($(HAS_BOOST_IOSTREAM),1) @echo Compiling with Boost Iostream library endif ifeq ($(STATIC),1) ifneq ($(strip $(MKLROOT)),) @echo Compiling with Intel MKL library endif @echo Linking = static else @echo Linking = dynamic endif @docker build --rm -f ${DFILE} \ --no-cache --pull \ --build-arg BOOST_IO=${HAS_BOOST_IOSTREAM} \ --build-arg LIB_INSTALL=${LIB_BIO} \ --build-arg LIB_INSTALL2=${LIB_BIO2} \ --build-arg STATIC=${STATIC} \ -t regenie:v${RG_VERSION} . docker-test: @${TEST_SCRIPT} . "regenie:v${RG_VERSION}" ${HAS_BOOST_IOSTREAM} #### debug: CXXFLAGS = -O0 -g -std=c++11 -fPIC debug: ${EFILE} clean: rm -f ${EFILE} ./src/*.o (cd ./external_libs/mvtnorm/;$(MAKE) clean) (cd ./external_libs/qf/;$(MAKE) clean) (cd ./external_libs/quadpack/;$(MAKE) clean) (cd ./external_libs/pgenlib/;$(MAKE) clean) (cd ./external_libs/remeta/;$(MAKE) clean) ================================================ FILE: README.md ================================================ [![build](https://github.com/rgcgithub/regenie/actions/workflows/test.yml/badge.svg)](https://github.com/rgcgithub/regenie/actions/workflows/test.yml) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/rgcgithub/regenie?logo=Github) [![install with conda](https://img.shields.io/badge/install%20with-conda-brightgreen.svg)](https://anaconda.org/bioconda/regenie) [![Github All Releases](https://img.shields.io/github/downloads/rgcgithub/regenie/total.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) **regenie** is a C++ program for whole genome regression modelling of large [genome-wide association studies](https://en.wikipedia.org/wiki/Genome-wide_association_study). It is developed and supported by a team of scientists at the Regeneron Genetics Center. The method has the following properties - It works on quantitative, binary, and time-to-event traits, including binary traits with unbalanced case-control ratios and time-to-event traits with low event rates - It can handle population structure and relatedness - It can process multiple phenotypes at once efficiently - It is fast and memory efficient 🔥 - For binary traits, it supports Firth logistic regression and an SPA test - For time-to-event traits, it supports Firth cox regression - It can perform gene/region-based tests, interaction tests and conditional analyses - It supports the [BGEN](https://www.well.ox.ac.uk/~gav/bgen_format/), [PLINK](https://www.cog-genomics.org/plink/1.9/formats#bed) bed/bim/fam and [PLINK2](https://www.cog-genomics.org/plink/2.0/formats#pgen) pgen/pvar/psam genetic data formats - It is ideally suited for implementation in [Apache Spark](https://spark.apache.org/) (see [GLOW](https://projectglow.io/)) - It can be installed with [Conda](https://anaconda.org/bioconda/regenie) Full documentation for the **regenie** can be found [here](https://rgcgithub.github.io/regenie/). ## Citation Mbatchou, J., Barnard, L., Backman, J. et al. Computationally efficient whole-genome regression for quantitative and binary traits. Nat Genet 53, 1097–1103 (2021). https://doi.org/10.1038/s41588-021-00870-7 ## License **regenie** is distributed under an [MIT license](https://github.com/rgcgithub/regenie/blob/master/LICENSE). ## Contact If you have any questions about regenie please contact - - If you want to submit a issue concerning the software please do so using the **regenie** [Github repository](https://github.com/rgcgithub/regenie/issues). ## Version history [Version 4.1](https://github.com/rgcgithub/regenie/releases/tag/v4.1) (Timing reduction for single variant association tests; New option --htp to output summary statistics in the [HTP](https://rgcgithub.github.io/remeta/file_formats/#-htp) format; New option --skip-dosage-comp to skip dosage compensation for males in non-PAR chrX regions; Various bug fixes) [Version 4.0](https://github.com/rgcgithub/regenie/releases/tag/v4.0) (New options `--t2e` and `--eventColList` for time-to-event analysis to specify time-to-event analysis and the event phenotype name, respectively; Fix algorithm used to fit logistic Firth model when using `--write-null-firth` to match closer to the approach used in step 2) [Version 3.6](https://github.com/rgcgithub/regenie/releases/tag/v3.6) (Bug fix for the approximate Firth test when ultra-rare variants [MAC below 50] are being tested; Address convergence failures & speed-up exact Firth by using warm starts based on null model with just covariates) [Version 3.5](https://github.com/rgcgithub/regenie/releases/tag/v3.5) (Added CHR/POS columns to snplist output file when using `--write-mask-snplist`; Genotype counts are now reported in the sumstats file when using `--no-split`; Improved efficiency of LOOCV scheme in ridge level 0; Detect carriage return in fam/psam/bim/pvar/sample files; Minor bug fixes) [Version 3.4.1](https://github.com/rgcgithub/regenie/releases/tag/v3.4.1) (Reduction in memory usage for LD computation when writing to text files; Fix bug rejecting valid PVAR files) [Version 3.4](https://github.com/rgcgithub/regenie/releases/tag/v3.4) (Reduction in memory usage for LD computation with dosages; Minor bug fixes for LD computation; Bug fix for when carriage returns are in optional input files) [Version 3.3](https://github.com/rgcgithub/regenie/releases/tag/v3.3) (Faster implementation of approximate Firth LRT; New strategy for approximate Firth LRT with ultra-rare variants; Relaxed convergence criterion of Firth LRT from 1E-4 to 2.5E-4) [Version 3.2.9](https://github.com/rgcgithub/regenie/releases/tag/v3.2.9) (Switch to robust version of ACAT to handle very small p-values; Bug fix for Step1 when sex chromosome was included in the analysis; Allow for 64 domains when using the 4-column annotation file) [Version 3.2.8](https://github.com/rgcgithub/regenie/releases/tag/v3.2.8) (New option `--bgi` to specify custom index bgi file accompagnying BGEN file; Relax matching criteria between BGEN and index bgi files to use CPRA instead of variant ID) [Version 3.2.7](https://github.com/rgcgithub/regenie/releases/tag/v3.2.7) (New option `--force-mac-filter` to apply different MAC filter to subset of SNPs; Extend maximum number of domains to 32 for 4-column anno-file; Update PGEN library) [Version 3.2.6](https://github.com/rgcgithub/regenie/releases/tag/v3.2.6) (Relax tolerance parameter for null unpenalized logistic regression from 1e-8 to 1e-6; Minor bug fixes) [Version 3.2.5.3](https://github.com/rgcgithub/regenie/releases/tag/v3.2.5.3) (Fix inflation issue when testing main effect of SNP in GxE model; Minor bug fixes) [Version 3.2.5](https://github.com/rgcgithub/regenie/releases/tag/v3.2.5) (Use pseudo-data representation algorithm as default in step 2 single variant tests; Use ACAT to get SBAT p-value across POS/NEG models; Bug fix for ACATV when set has a single variant with zero weight) [Version 3.2.4](https://github.com/rgcgithub/regenie/releases/tag/v3.2.4) (Relaxed the requirement on the minimum number of unique values for QTs to 3; Various bug fixes) [Version 3.2.3](https://github.com/rgcgithub/regenie/releases/tag/v3.2.3) (Address convergence issues in Firth regression; Various bug fixes) [Version 3.2.2](https://github.com/rgcgithub/regenie/releases/tag/v3.2.2) (New columns in sumstats file (N_CASES/N_CONTROLS) to output the number of cases/controls when using `--af-cc`; Various bug fixes) [Version 3.2.1](https://github.com/rgcgithub/regenie/releases/tag/v3.2.1) (New option `--lovo-snplist` to only consider a subset of LOVO masks; Improve efficiency of LOVO for large sets to reduce memory usage; Bug fix for SPA with numerical overflow; For SKAT/ACAT tests with Firth correction, don't include SKAT weights when running Firth on single variants) [Version 3.2](https://github.com/rgcgithub/regenie/releases/tag/v3.2) (Bug fix for SKAT/SKATO when testing on binary traits using Firth/SPA; Switched name of NNLS joint test to SBAT test altering name of corresponding options and applied Bonferroni correction before reporting its p-value [correcting for minP of 2 tests]) [Version 3.1.4](https://github.com/rgcgithub/regenie/releases/tag/v3.1.4) (New option `--par-region` to specify build to determine bounds for chrX PAR regions; new option `--force-qt` to force QT runs for traits with fewer than 10 values [otherwise will throw an error]; phenotype imputation for missing values is now applied after RINTing when using `--apply-rint`; several bug fixes) [Version 3.1.2](https://github.com/rgcgithub/regenie/releases/tag/v3.1.2) (Reduction in memory usage for SKAT/SKATO tests; Bug fix for LOVO with SKAT/ACAT tests; Improvements for null Firth logistic algorithm to address reported convergence issues) [Version 3.1.1](https://github.com/rgcgithub/regenie/releases/tag/v3.1.1) (Reduction in memory usage for SKAT/SKATO tests; Improvements for logistic regressions algorithms to address reported convergence issues) [Version 3.1](https://github.com/rgcgithub/regenie/releases/tag/v3.1) (Fixed bug in SKAT/SKATO tests when applying Firth/SPA correction; Improved SPA implementation by computing both tail probabilities; New option `--set-singletons` to specify variants to consider as singletons for burden masks; New option `--l1-phenoList` to run level 1 models in Step 1 in parallel across phenotypes; Several bug fixes) [Version 3.0.3](https://github.com/rgcgithub/regenie/releases/tag/v3.0.3) (Skip BTs where null model fit failed; Bug fix for BURDEN-ACAT; Bug fix when nan/inf values are in phenotype/covariate file) [Version 3.0.1](https://github.com/rgcgithub/regenie/releases/tag/v3.0.1) (Improve ridge logistic regression in Step 1; Add compilation with Cmake) [Version 3.0](https://github.com/rgcgithub/regenie/releases/tag/v3.0) (New gene-based tests: SKAT, SKATO, ACATV, ACATO and NNLS [Non-Negative Least Square test]; New GxE and GxG interaction testing functionality; New conditional analysis functionality; see [release page](https://github.com/rgcgithub/regenie/releases/tag/v3.0) for minor additions) For past releases, see [here](RELEASE_LOG.md). ================================================ FILE: RELEASE_LOG.md ================================================ ## Changelog for past releases Version 2.2.4 (Bug fix for multi-trait step 1 run with binary traits of different missingness patterns) Version 2.2.3 (Bug fix for binary traits for which null logistic regression gives 0/1 fitted probabilities; enabled multi-threaded null model fitting for approximate Firth null models) Version 2.2.2 (Bug fix for binary traits for which null logistic regression gives 0/1 fitted probabilities [i.e. highly imbalanced or low case counts]; New option `--sex-specific` for sex-specific analyses) Version 2.2.1 (Bug fix for Step 2 with binary traits for which null logistic regression gives 0/1 fitted probabilities [i.e. highly imbalanced or low case counts]) Version 2.2 (Faster implementation of Step 1 and 2 (see [here](https://rgcgithub.github.io/regenie/performance/#new-timings-improvements) for details); new options `--write-null-firth/--use-null-firth` to store the estimates from approximate Firth null model; new option `--minCaseCount` to filter out BTs with low number of cases from the analysis; new option `--no-split` to enforce output of summary stats to a single file for all traits; added support for tranposed phenotype file format with `--tphenoFile`) Version 2.0.2 (Bug fix for burden testing with BGEN files not in v1.2 with 8-bit encoding; enabled faster step 2 implementation with Zstd compressed BGEN files in v1.2 with 8-bit encoding) Version 2.0.1 (New option `--catCovList` to specify categorical covariates; Enabled parameter expansion when specifying select phenotypes/covariates to analyze [e.g. 'PC{1:10}']) Version 2.0 (Added burden testing functionality for region or gene-based tests [see [website](https://rgcgithub.github.io/regenie/options/#burden-testing) for details]; added sample size column in summary stats output). Version 1.0.7 (Enabled for level 0 models in step 1 to be run in parallel [see [Wiki](https://github.com/rgcgithub/regenie/wiki/Further-parallelization-for-level-0-models-in-Step-1) for details]). Version 1.0.6.9 (Improved step 2 for BGEN format files not in v1.2 or 8-bit encoding). Version 1.0.6.8 (New option `--range` to specify a chromosome region of variants to test in step 2). Version 1.0.6.7 (New option `--print-prs` in step 1 to print the whole genome predictions (i.e. PRS) without using LOCO; new flag `--use-prs` in step 2 to use these in the association tests). Version 1.0.6.6 (Fixed MAC calculation for variants on sex chromosomes when sex information is available in the genotype file). Version 1.0.6.5 (Enabled options `--extract/--exclude` in step 2). Version 1.0.6.4 (New option `--minINFO` to filter imputed variants in Step 2; added Regenie binary compiled with Intel MKL (only for x86_64 Linux)). Version 1.0.6.3 (Improved ridge logistic regression to avoid convergence issues in step 1 with low case-count traits). Version 1.0.6.2 (New option `--ref-first` to use the first allele for each variant as the reference allele for BGEN or PLINK bed/bim/fam file input [default is to use the last allele as the reference]). Version 1.0.6.1 (Bug fix: Mach R^2 info score is only printed for PGEN input when dosages are present; added flag `--print-pheno` to write the phenotype name in 1st line of sample IDs file [i.e. when using `--write-samples`]). Version 1.0.6.0 (Improved logistic regression implementation to address convergence issues with low case counts; add new option `--firth-se` to compute SE using effect size estimate and LRT p-value when using Firth correction). Version 1.0.5.9 (Fixed bug printing variant ID when variant with variance = 0 occurs in step 1). Version 1.0.5.8 (Fixed bug due to input genotype file not sorted by chromosome and one of options `--extract/--exclude/--chr/--chrList` is used). Version 1.0.5.7 (New option `--with-bgi` to read variant information from a .bgi index file for BGEN input format; added option `--write-samples` to write IDs of samples analyzed for each trait in step 2; added Mach Rsq imputation quality metric in INFO column for step 2 with PGEN input file format). Version 1.0.5.6 (Enabled output of LOCO predictions files and association result files in gzip compressed format using option `--gz` [requires compiling with Boost Iostream library]; added automatic removal from the analysis of genotyped samples in step 2 not present in the LOCO prediction files from step 1 [done separately for each trait]). Version 1.0.5.5 (fixed bug when setting the total number of blocks [the bug was introduced in v1.0.5.3 due to `n_blocks` being uninitialized]; addressed bug in step 1 with boost filesystem on some machines due to invalid LC_ALL locale) (Note: can now build docker image using `make docker-build`). Version 1.0.5.4 (Enable using gzip compressed phenotype/covariate files as input [requires installed Boost Iostream library and setting `HAS_BOOST_IOSTREAM = 1` in Makefile] ) Version 1.0.5.31 (Print out ID of problematic variants with low variance in step 1) Version 1.0.5.3 (Use cxxopts header-only library to parse command line arguments; changed program options `--p/--c/--b/--o/--1` to `--phenoFile/--covarFile/--bsize/--out/--cc12`, respectively; added options `--lowmem-prefix/--pThresh`) Version 1.0.5.2 (Changed default behavior to remove individuals who have missing data at all phenotypes in the analysis; absolute paths are written in the predictions list file created in step 1) Version 1.0.5.1 (Reduced memory usage and computational time when using options to keep/remove genotyped samples from the analysis) Version 1.0.4.2 (Fixed bug excluding/including variants in step 1 with PGEN input format and improved the implementation of how it's done) Version 1.0.4.1 (Can specify multiple phenotypes/covariates/chromosomes using comma separated arguments; chromosome names can start with 'chr' in the input genotype file) Version 1.0.4 (Enabled PLINK 2.0 PGEN format files as input using the PLINK 2.0 PGEN library) Version 1.0.3 (fixed genotype coding in dominant/recessive test for BGEN input format) Version 1.0.2 (fixed numerical overflow bug when using option `--chr` in step 2; changed to boost split function to read all input files [either space/tab delimited]) Version 1.0.1 (fixed numerical overflow bug for quantile calculation; added new strategy for fitting null model for approximate Firth test) Version 1.0 (22 June 2020): Initial release ================================================ FILE: VERSION ================================================ 4.1.2 ================================================ FILE: docs/cinder/404.html ================================================ {% extends "base.html" %} {% block content %}

404

Page not found

Home

{% endblock %} ================================================ FILE: docs/cinder/__init__.py ================================================ ================================================ FILE: docs/cinder/base.html ================================================ {% if config.site_description %}{% endif %} {% if config.site_author %}{% endif %} {% if page.canonical_url %}{% endif %} {% block htmltitle %} {% if page.title %}{{ page.title }} - {% endif %}{{ config.site_name }} {% endblock %} {% if config.theme.highlightjs %} {% if config.theme.colorscheme %} {% else %} {% endif %} {% endif %} {%- for path in config['extra_css'] %} {%- endfor %} {% if config.google_analytics %} {% endif %} {% block extrahead %} {% endblock %} {% include "nav.html" %}
{% block content %} {% if page.meta.disable_toc %}
{% include "content.html" %}
{% else %}
{% include "toc.html" %}
{% include "content.html" %}
{% endif %} {% endblock %}
{% block footer %}

{% if config.copyright %} {{ config.copyright }}
{% endif %} Documentation built with MkDocs.

{% if page and page.meta.revision_date %}
Revised on: {{ page.meta.revision_date }} {% endif %} {% endblock %}
{%- block scripts %} {% if config.theme.highlightjs %} {%- for lang in config.theme.hljs_languages %} {%- endfor %} {% endif %} {% if config.shortcuts %} {% endif %} {%- for path in config['extra_javascript'] %} {%- endfor %} {%- endblock %} {% if 'search' in config['plugins'] %}{%- include "search-modal.html" %}{% endif %} {%- include "keyboard-modal.html" %} {% if page and page.is_homepage %} {% endif %} ================================================ FILE: docs/cinder/content.html ================================================ {% if page.meta.source %} {% endif %} {{ page.content }} ================================================ FILE: docs/cinder/css/base.css ================================================ body { padding-top: 70px; } h1[id]:before, h2[id]:before, h3[id]:before, h4[id]:before, h5[id]:before, h6[id]:before { content: ""; display: block; margin-top: -75px; height: 75px; } p > img { max-width: 100%; height: auto; } ul.nav li.first-level { font-weight: bold; } ul.nav li.third-level { padding-left: 12px; } div.col-md-3 { padding-left: 0; } div.col-md-9 { padding-bottom: 100px; } div.source-links { float: right; } /* * Side navigation * * Scrollspy and affixed enhanced navigation to highlight sections and secondary * sections of docs content. */ /* By default it's not affixed in mobile views, so undo that */ .bs-sidebar.affix { position: static; } .bs-sidebar.well { padding: 0; } /* First level of nav */ .bs-sidenav { margin-top: 30px; margin-bottom: 30px; padding-top: 10px; padding-bottom: 10px; border-radius: 5px; } /* All levels of nav */ .bs-sidebar .nav > li > a { display: block; padding: 5px 20px; z-index: 1; } .bs-sidebar .nav > li > a:hover, .bs-sidebar .nav > li > a:focus { text-decoration: none; border-right: 1px solid; } .bs-sidebar .nav > .active > a, .bs-sidebar .nav > .active:hover > a, .bs-sidebar .nav > .active:focus > a { font-weight: bold; background-color: transparent; border-right: 1px solid; } /* Nav: second level (shown on .active) */ .bs-sidebar .nav .nav { display: none; /* Hide by default, but at >768px, show it */ margin-bottom: 8px; } .bs-sidebar .nav .nav > li > a { padding-top: 3px; padding-bottom: 3px; padding-left: 30px; font-size: 90%; } /* Show and affix the side nav when space allows it */ @media (min-width: 992px) { /* Allow the sidebar to scroll if it overflows the page. */ .bs-sidebar { overflow-y: scroll; } .bs-sidebar .nav > .active > ul { display: block; } /* Widen the fixed sidebar */ .bs-sidebar.affix, .bs-sidebar.affix-bottom { width: 213px; } .bs-sidebar.affix { position: fixed; /* Undo the static from mobile first approach */ top: 80px; max-height: calc(100% - 90px); } .bs-sidebar.affix-bottom { position: absolute; /* Undo the static from mobile first approach */ } .bs-sidebar.affix-bottom .bs-sidenav, .bs-sidebar.affix .bs-sidenav { margin-top: 0; margin-bottom: 0; } } @media (min-width: 1200px) { /* Widen the fixed sidebar again */ .bs-sidebar.affix-bottom, .bs-sidebar.affix { width: 263px; } } /* Added to support >2 level nav in drop down */ .dropdown-submenu { position: relative; } .dropdown-submenu>.dropdown-menu { top: 0; left: 100%; margin-top: 0px; margin-left: 0px; } .dropdown-submenu:hover>.dropdown-menu { display: block; } .dropdown-submenu>a:after { display: block; content: " "; float: right; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; border-left-color: #ccc; margin-top: 5px; margin-right: -10px; } .dropdown-submenu:hover>a:after { border-left-color: #fff; } .dropdown-submenu.pull-left { float: none; } .dropdown-submenu.pull-left>.dropdown-menu { left: -100%; margin-left: 00px; } /* Start Bootstrap Callouts CSS Source by Chris Pratt (https://codepen.io/chrisdpratt/pen/IAymB) MIT License*/ .bs-callout { padding: 20px; margin: 20px 0; border: 1px solid #eee; border-left-width: 5px; border-radius: 3px; background-color: #FCFDFF; } .bs-callout h4 { font-style: normal; font-weight: 400; margin-top: 0; margin-bottom: 5px; } .bs-callout p:last-child { margin-bottom: 0; } .bs-callout code { border-radius: 3px; } .bs-callout+.bs-callout { margin-top: -5px; } .bs-callout-default { border-left-color: #FA023C; /*modified from upstream default by Christopher Simpkins*/ } .bs-callout-default h4 { color: #FA023C; /*modified from upstream default by Christopher Simpkins*/ } .bs-callout-primary { border-left-color: #428bca; } .bs-callout-primary h4 { color: #428bca; } .bs-callout-success { border-left-color: #5cb85c; } .bs-callout-success h4 { color: #5cb85c; } .bs-callout-danger { border-left-color: #d9534f; } .bs-callout-danger h4 { color: #d9534f; } .bs-callout-warning { border-left-color: #f0ad4e; } .bs-callout-warning h4 { color: #f0ad4e; } .bs-callout-info { border-left-color: #5bc0de; } .bs-callout-info h4 { color: #5bc0de; } /* End Bootstrap Callouts CSS Source by Chris Pratt */ /* Admonitions */ .admonition { padding: 20px; margin: 20px 0; border: 1px solid #eee; border-left-width: 5px; border-radius: 3px; background-color: #FCFDFF; } .admonition p:last-child { margin-bottom: 0; } .admonition code { border-radius: 3px; } .admonition+.admonition { margin-top: -5px; } .admonition.note { /* csslint allow: adjoining-classes */ border-left-color: #428bca; } .admonition.warning { /* csslint allow: adjoining-classes */ border-left-color: #f0ad4e; } .admonition.danger { /* csslint allow: adjoining-classes */ border-left-color: #d9534f; } .admonition-title { font-size: 19px; font-style: normal; font-weight: 400; margin-top: 0; margin-bottom: 5px; } .admonition.note > .admonition-title { color: #428bca; } .admonition.warning > .admonition-title { color: #f0ad4e; } .admonition.danger > .admonition-title { color: #d9534f; } ================================================ FILE: docs/cinder/css/bootstrap-custom.css ================================================ /*! normalize.css v2.1.3 | MIT License | git.io/normalize */ article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } audio, canvas, video { display: inline-block; } audio:not([controls]) { display: none; height: 0; } [hidden], template { display: none; } html { font-family: sans-serif; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%} body { margin: 0; } a { background: transparent; } a:focus { outline: thin dotted; } a:active, a:hover { outline: 0; } h1 { margin: .67em 0; font-size: 2em; } abbr[title] { border-bottom: 1px dotted; } b, strong { font-weight: bold; } dfn { font-style: italic; } hr { height: 0; -moz-box-sizing: content-box; box-sizing: content-box; } mark { color: #000; background: #ff0; } code, kbd, pre, samp { font-family: Hack, monospace, serif; font-size: 1em; } pre { white-space: pre-wrap; } q { quotes: "\201C" "\201D" "\2018" "\2019"} small { font-size: 80%} sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } img { border: 0; } svg:not(:root) { overflow: hidden; } figure { margin: 0; } fieldset { padding: .35em .625em .75em; margin: 0 2px; border: 1px solid #c0c0c0; } legend { padding: 0; border: 0; } button, input, select, textarea { margin: 0; font-family: inherit; font-size: 100%} button, input { line-height: normal; } button, select { text-transform: none; } button, html input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; } button[disabled], html input[disabled] { cursor: default; } input[type="checkbox"], input[type="radio"] { padding: 0; box-sizing: border-box; } input[type="search"] { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; -webkit-appearance: textfield; } input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } button::-moz-focus-inner, input::-moz-focus-inner { padding: 0; border: 0; } textarea { overflow: auto; vertical-align: top; } table { border-collapse: collapse; border-spacing: 0; } @media print { * { color: #000!important; text-shadow: none!important; background: transparent!important; box-shadow: none!important; } a, a:visited { text-decoration: underline; } a[href]:after { content: " (" attr(href) ")"} abbr[title]:after { content: " (" attr(title) ")"} a[href^="javascript:"]:after, a[href^="#"]:after { content: ""} pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } img { max-width: 100%!important; } @page { margin: 2cm .5cm; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } select { background: #fff!important; } .navbar { display: none; } .table td, .table th { background-color: #fff!important; } .btn>.caret, .dropup>.btn>.caret { border-top-color: #000!important; } .label { border: 1px solid #000; } .table { border-collapse: collapse!important; } .table-bordered th, .table-bordered td { border: 1px solid #ddd!important; } }*, *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } html { font-size: 62.5%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } body { font-family: Merriweather, Georgia, serif; font-size: 14px; line-height: 1.428571429; color: #222; background-color: #fff; } input, button, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit; } a { color: #008cba; text-decoration: none; } a:hover, a:focus { color: #00526e; text-decoration: underline; } a:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } img { vertical-align: middle; } .img-responsive { display: block; height: auto; max-width: 100%} .img-rounded { border-radius: 0; } .img-thumbnail { display: inline-block; height: auto; max-width: 100%; padding: 4px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 0; -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; } .img-circle { border-radius: 50%} hr { margin-top: 21px; margin-bottom: 21px; border: 0; border-top: 1px solid #ddd; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 300; line-height: 1.1; color: inherit; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { font-weight: normal; line-height: 1; color: #999; } h1, h2, h3 { margin-top: 21px; margin-bottom: 10.5px; } h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small { font-size: 65%} h4, h5, h6 { margin-top: 10.5px; margin-bottom: 10.5px; } h4 small, h5 small, h6 small, h4 .small, h5 .small, h6 .small { font-size: 75%} h1, .h1 { font-size: 39px; } h2, .h2 { font-size: 32px; } h3, .h3 { font-size: 26px; } h4, .h4 { font-size: 19px; } h5, .h5 { font-size: 15px; } h6, .h6 { font-size: 13px; } p { margin: 0 0 10.5px; } .lead { margin-bottom: 21px; font-size: 17px; font-weight: 200; line-height: 1.4; } @media(min-width:768px) { .lead { font-size: 22.5px; } }small, .small { font-size: 85%} cite { font-style: normal; } .text-muted { color: #999; } .text-primary { color: #008cba; } .text-primary:hover { color: #006687; } .text-warning { color: #e99002; } .text-warning:hover { color: #b67102; } .text-danger { color: #f04124; } .text-danger:hover { color: #d32a0e; } .text-success { color: #43ac6a; } .text-success:hover { color: #358753; } .text-info { color: #5bc0de; } .text-info:hover { color: #31b0d5; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .page-header { padding-bottom: 9.5px; margin: 42px 0 21px; border-bottom: 1px solid #ddd; } ul, ol { margin-top: 0; margin-bottom: 10.5px; } ul ul, ol ul, ul ol, ol ol { margin-bottom: 0; } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; } .list-inline>li { display: inline-block; padding-right: 5px; padding-left: 5px; } .list-inline>li:first-child { padding-left: 0; } dl { margin-top: 0; margin-bottom: 21px; } dt, dd { line-height: 1.428571429; } dt { font-weight: bold; } dd { margin-left: 0; } @media(min-width:768px) { .dl-horizontal dt { float: left; width: 160px; overflow: hidden; clear: left; text-align: right; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } }abbr[title], abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #999; } .initialism { font-size: 90%; text-transform: uppercase; } blockquote { padding: 10.5px 21px; margin: 0 0 21px; border-left: 5px solid #ddd; } blockquote p { font-size: 18.75px; font-weight: 300; line-height: 1.25; } blockquote p:last-child { margin-bottom: 0; } blockquote small, blockquote .small { display: block; line-height: 1.428571429; color: #6f6f6f; } blockquote small:before, blockquote .small:before { content: '\2014 \00A0'} blockquote.pull-right { padding-right: 15px; padding-left: 0; border-right: 5px solid #ddd; border-left: 0; } blockquote.pull-right p, blockquote.pull-right small, blockquote.pull-right .small { text-align: right; } blockquote.pull-right small:before, blockquote.pull-right .small:before { content: ''} blockquote.pull-right small:after, blockquote.pull-right .small:after { content: '\00A0 \2014'} blockquote:before, blockquote:after { content: ""} address { margin-bottom: 21px; font-style: normal; line-height: 1.428571429; } code, kbd, pre, samp { font-family: Hack, Menlo, Monaco, Consolas, "Courier New", monospace; } code { padding: 2px 4px; font-size: 90%; color: #c7254e; white-space: nowrap; background-color: #f9f2f4; border-radius: 0; } pre { display: block; padding: 10px; margin: 0 0 10.5px; font-size: 14px; line-height: 1.428571429; color: #333; word-break: break-all; word-wrap: break-word; background-color: #f5f5f5; border: 1px solid #ccc; border-radius: 0; } pre code { padding: 0; font-size: inherit; color: inherit; white-space: pre-wrap; background-color: transparent; border-radius: 0; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } .container { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } @media(min-width:768px) { .container { width: 750px; } }@media(min-width:992px) { .container { width: 970px; } }@media(min-width:1200px) { .container { width: 1170px; } }.row { margin-right: -15px; margin-left: -15px; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; padding-right: 15px; padding-left: 15px; } .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { float: left; } .col-xs-12 { width: 100%} .col-xs-11 { width: 91.66666666666666%} .col-xs-10 { width: 83.33333333333334%} .col-xs-9 { width: 75%} .col-xs-8 { width: 66.66666666666666%} .col-xs-7 { width: 58.333333333333336%} .col-xs-6 { width: 50%} .col-xs-5 { width: 41.66666666666667%} .col-xs-4 { width: 33.33333333333333%} .col-xs-3 { width: 25%} .col-xs-2 { width: 16.666666666666664%} .col-xs-1 { width: 8.333333333333332%} .col-xs-pull-12 { right: 100%} .col-xs-pull-11 { right: 91.66666666666666%} .col-xs-pull-10 { right: 83.33333333333334%} .col-xs-pull-9 { right: 75%} .col-xs-pull-8 { right: 66.66666666666666%} .col-xs-pull-7 { right: 58.333333333333336%} .col-xs-pull-6 { right: 50%} .col-xs-pull-5 { right: 41.66666666666667%} .col-xs-pull-4 { right: 33.33333333333333%} .col-xs-pull-3 { right: 25%} .col-xs-pull-2 { right: 16.666666666666664%} .col-xs-pull-1 { right: 8.333333333333332%} .col-xs-pull-0 { right: 0; } .col-xs-push-12 { left: 100%} .col-xs-push-11 { left: 91.66666666666666%} .col-xs-push-10 { left: 83.33333333333334%} .col-xs-push-9 { left: 75%} .col-xs-push-8 { left: 66.66666666666666%} .col-xs-push-7 { left: 58.333333333333336%} .col-xs-push-6 { left: 50%} .col-xs-push-5 { left: 41.66666666666667%} .col-xs-push-4 { left: 33.33333333333333%} .col-xs-push-3 { left: 25%} .col-xs-push-2 { left: 16.666666666666664%} .col-xs-push-1 { left: 8.333333333333332%} .col-xs-push-0 { left: 0; } .col-xs-offset-12 { margin-left: 100%} .col-xs-offset-11 { margin-left: 91.66666666666666%} .col-xs-offset-10 { margin-left: 83.33333333333334%} .col-xs-offset-9 { margin-left: 75%} .col-xs-offset-8 { margin-left: 66.66666666666666%} .col-xs-offset-7 { margin-left: 58.333333333333336%} .col-xs-offset-6 { margin-left: 50%} .col-xs-offset-5 { margin-left: 41.66666666666667%} .col-xs-offset-4 { margin-left: 33.33333333333333%} .col-xs-offset-3 { margin-left: 25%} .col-xs-offset-2 { margin-left: 16.666666666666664%} .col-xs-offset-1 { margin-left: 8.333333333333332%} .col-xs-offset-0 { margin-left: 0; } @media(min-width:768px) { .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left; } .col-sm-12 { width: 100%} .col-sm-11 { width: 91.66666666666666%} .col-sm-10 { width: 83.33333333333334%} .col-sm-9 { width: 75%} .col-sm-8 { width: 66.66666666666666%} .col-sm-7 { width: 58.333333333333336%} .col-sm-6 { width: 50%} .col-sm-5 { width: 41.66666666666667%} .col-sm-4 { width: 33.33333333333333%} .col-sm-3 { width: 25%} .col-sm-2 { width: 16.666666666666664%} .col-sm-1 { width: 8.333333333333332%} .col-sm-pull-12 { right: 100%} .col-sm-pull-11 { right: 91.66666666666666%} .col-sm-pull-10 { right: 83.33333333333334%} .col-sm-pull-9 { right: 75%} .col-sm-pull-8 { right: 66.66666666666666%} .col-sm-pull-7 { right: 58.333333333333336%} .col-sm-pull-6 { right: 50%} .col-sm-pull-5 { right: 41.66666666666667%} .col-sm-pull-4 { right: 33.33333333333333%} .col-sm-pull-3 { right: 25%} .col-sm-pull-2 { right: 16.666666666666664%} .col-sm-pull-1 { right: 8.333333333333332%} .col-sm-pull-0 { right: 0; } .col-sm-push-12 { left: 100%} .col-sm-push-11 { left: 91.66666666666666%} .col-sm-push-10 { left: 83.33333333333334%} .col-sm-push-9 { left: 75%} .col-sm-push-8 { left: 66.66666666666666%} .col-sm-push-7 { left: 58.333333333333336%} .col-sm-push-6 { left: 50%} .col-sm-push-5 { left: 41.66666666666667%} .col-sm-push-4 { left: 33.33333333333333%} .col-sm-push-3 { left: 25%} .col-sm-push-2 { left: 16.666666666666664%} .col-sm-push-1 { left: 8.333333333333332%} .col-sm-push-0 { left: 0; } .col-sm-offset-12 { margin-left: 100%} .col-sm-offset-11 { margin-left: 91.66666666666666%} .col-sm-offset-10 { margin-left: 83.33333333333334%} .col-sm-offset-9 { margin-left: 75%} .col-sm-offset-8 { margin-left: 66.66666666666666%} .col-sm-offset-7 { margin-left: 58.333333333333336%} .col-sm-offset-6 { margin-left: 50%} .col-sm-offset-5 { margin-left: 41.66666666666667%} .col-sm-offset-4 { margin-left: 33.33333333333333%} .col-sm-offset-3 { margin-left: 25%} .col-sm-offset-2 { margin-left: 16.666666666666664%} .col-sm-offset-1 { margin-left: 8.333333333333332%} .col-sm-offset-0 { margin-left: 0; } }@media(min-width:992px) { .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } .col-md-12 { width: 100%} .col-md-11 { width: 91.66666666666666%} .col-md-10 { width: 83.33333333333334%} .col-md-9 { width: 75%} .col-md-8 { width: 66.66666666666666%} .col-md-7 { width: 58.333333333333336%} .col-md-6 { width: 50%} .col-md-5 { width: 41.66666666666667%} .col-md-4 { width: 33.33333333333333%} .col-md-3 { width: 25%} .col-md-2 { width: 16.666666666666664%} .col-md-1 { width: 8.333333333333332%} .col-md-pull-12 { right: 100%} .col-md-pull-11 { right: 91.66666666666666%} .col-md-pull-10 { right: 83.33333333333334%} .col-md-pull-9 { right: 75%} .col-md-pull-8 { right: 66.66666666666666%} .col-md-pull-7 { right: 58.333333333333336%} .col-md-pull-6 { right: 50%} .col-md-pull-5 { right: 41.66666666666667%} .col-md-pull-4 { right: 33.33333333333333%} .col-md-pull-3 { right: 25%} .col-md-pull-2 { right: 16.666666666666664%} .col-md-pull-1 { right: 8.333333333333332%} .col-md-pull-0 { right: 0; } .col-md-push-12 { left: 100%} .col-md-push-11 { left: 91.66666666666666%} .col-md-push-10 { left: 83.33333333333334%} .col-md-push-9 { left: 75%} .col-md-push-8 { left: 66.66666666666666%} .col-md-push-7 { left: 58.333333333333336%} .col-md-push-6 { left: 50%} .col-md-push-5 { left: 41.66666666666667%} .col-md-push-4 { left: 33.33333333333333%} .col-md-push-3 { left: 25%} .col-md-push-2 { left: 16.666666666666664%} .col-md-push-1 { left: 8.333333333333332%} .col-md-push-0 { left: 0; } .col-md-offset-12 { margin-left: 100%} .col-md-offset-11 { margin-left: 91.66666666666666%} .col-md-offset-10 { margin-left: 83.33333333333334%} .col-md-offset-9 { margin-left: 75%} .col-md-offset-8 { margin-left: 66.66666666666666%} .col-md-offset-7 { margin-left: 58.333333333333336%} .col-md-offset-6 { margin-left: 50%} .col-md-offset-5 { margin-left: 41.66666666666667%} .col-md-offset-4 { margin-left: 33.33333333333333%} .col-md-offset-3 { margin-left: 25%} .col-md-offset-2 { margin-left: 16.666666666666664%} .col-md-offset-1 { margin-left: 8.333333333333332%} .col-md-offset-0 { margin-left: 0; } }@media(min-width:1200px) { .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { float: left; } .col-lg-12 { width: 100%} .col-lg-11 { width: 91.66666666666666%} .col-lg-10 { width: 83.33333333333334%} .col-lg-9 { width: 75%} .col-lg-8 { width: 66.66666666666666%} .col-lg-7 { width: 58.333333333333336%} .col-lg-6 { width: 50%} .col-lg-5 { width: 41.66666666666667%} .col-lg-4 { width: 33.33333333333333%} .col-lg-3 { width: 25%} .col-lg-2 { width: 16.666666666666664%} .col-lg-1 { width: 8.333333333333332%} .col-lg-pull-12 { right: 100%} .col-lg-pull-11 { right: 91.66666666666666%} .col-lg-pull-10 { right: 83.33333333333334%} .col-lg-pull-9 { right: 75%} .col-lg-pull-8 { right: 66.66666666666666%} .col-lg-pull-7 { right: 58.333333333333336%} .col-lg-pull-6 { right: 50%} .col-lg-pull-5 { right: 41.66666666666667%} .col-lg-pull-4 { right: 33.33333333333333%} .col-lg-pull-3 { right: 25%} .col-lg-pull-2 { right: 16.666666666666664%} .col-lg-pull-1 { right: 8.333333333333332%} .col-lg-pull-0 { right: 0; } .col-lg-push-12 { left: 100%} .col-lg-push-11 { left: 91.66666666666666%} .col-lg-push-10 { left: 83.33333333333334%} .col-lg-push-9 { left: 75%} .col-lg-push-8 { left: 66.66666666666666%} .col-lg-push-7 { left: 58.333333333333336%} .col-lg-push-6 { left: 50%} .col-lg-push-5 { left: 41.66666666666667%} .col-lg-push-4 { left: 33.33333333333333%} .col-lg-push-3 { left: 25%} .col-lg-push-2 { left: 16.666666666666664%} .col-lg-push-1 { left: 8.333333333333332%} .col-lg-push-0 { left: 0; } .col-lg-offset-12 { margin-left: 100%} .col-lg-offset-11 { margin-left: 91.66666666666666%} .col-lg-offset-10 { margin-left: 83.33333333333334%} .col-lg-offset-9 { margin-left: 75%} .col-lg-offset-8 { margin-left: 66.66666666666666%} .col-lg-offset-7 { margin-left: 58.333333333333336%} .col-lg-offset-6 { margin-left: 50%} .col-lg-offset-5 { margin-left: 41.66666666666667%} .col-lg-offset-4 { margin-left: 33.33333333333333%} .col-lg-offset-3 { margin-left: 25%} .col-lg-offset-2 { margin-left: 16.666666666666664%} .col-lg-offset-1 { margin-left: 8.333333333333332%} .col-lg-offset-0 { margin-left: 0; } }table { max-width: 100%; background-color: transparent; } th { text-align: left; } .table { width: 100%; margin-bottom: 21px; } .table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { padding: 8px; line-height: 1.428571429; vertical-align: top; border-top: 1px solid #ddd; } .table>thead>tr>th { vertical-align: bottom; border-bottom: 2px solid #ddd; } .table>caption+thead>tr:first-child>th, .table>colgroup+thead>tr:first-child>th, .table>thead:first-child>tr:first-child>th, .table>caption+thead>tr:first-child>td, .table>colgroup+thead>tr:first-child>td, .table>thead:first-child>tr:first-child>td { border-top: 0; } .table>tbody+tbody { border-top: 2px solid #ddd; } .table .table { background-color: #fff; } .table-condensed>thead>tr>th, .table-condensed>tbody>tr>th, .table-condensed>tfoot>tr>th, .table-condensed>thead>tr>td, .table-condensed>tbody>tr>td, .table-condensed>tfoot>tr>td { padding: 5px; } .table-bordered { border: 1px solid #ddd; } .table-bordered>thead>tr>th, .table-bordered>tbody>tr>th, .table-bordered>tfoot>tr>th, .table-bordered>thead>tr>td, .table-bordered>tbody>tr>td, .table-bordered>tfoot>tr>td { border: 1px solid #ddd; } .table-bordered>thead>tr>th, .table-bordered>thead>tr>td { border-bottom-width: 2px; } .table-striped>tbody>tr:nth-child(odd)>td, .table-striped>tbody>tr:nth-child(odd)>th { background-color: #f9f9f9; } .table-hover>tbody>tr:hover>td, .table-hover>tbody>tr:hover>th { background-color: #f5f5f5; } table col[class*="col-"] { position: static; display: table-column; float: none; } table td[class*="col-"], table th[class*="col-"] { display: table-cell; float: none; } .table>thead>tr>.active, .table>tbody>tr>.active, .table>tfoot>tr>.active, .table>thead>.active>td, .table>tbody>.active>td, .table>tfoot>.active>td, .table>thead>.active>th, .table>tbody>.active>th, .table>tfoot>.active>th { background-color: #f5f5f5; } .table-hover>tbody>tr>.active:hover, .table-hover>tbody>.active:hover>td, .table-hover>tbody>.active:hover>th { background-color: #e8e8e8; } .table>thead>tr>.success, .table>tbody>tr>.success, .table>tfoot>tr>.success, .table>thead>.success>td, .table>tbody>.success>td, .table>tfoot>.success>td, .table>thead>.success>th, .table>tbody>.success>th, .table>tfoot>.success>th { background-color: #dff0d8; } .table-hover>tbody>tr>.success:hover, .table-hover>tbody>.success:hover>td, .table-hover>tbody>.success:hover>th { background-color: #d0e9c6; } .table>thead>tr>.danger, .table>tbody>tr>.danger, .table>tfoot>tr>.danger, .table>thead>.danger>td, .table>tbody>.danger>td, .table>tfoot>.danger>td, .table>thead>.danger>th, .table>tbody>.danger>th, .table>tfoot>.danger>th { background-color: #f2dede; } .table-hover>tbody>tr>.danger:hover, .table-hover>tbody>.danger:hover>td, .table-hover>tbody>.danger:hover>th { background-color: #ebcccc; } .table>thead>tr>.warning, .table>tbody>tr>.warning, .table>tfoot>tr>.warning, .table>thead>.warning>td, .table>tbody>.warning>td, .table>tfoot>.warning>td, .table>thead>.warning>th, .table>tbody>.warning>th, .table>tfoot>.warning>th { background-color: #fcf8e3; } .table-hover>tbody>tr>.warning:hover, .table-hover>tbody>.warning:hover>td, .table-hover>tbody>.warning:hover>th { background-color: #faf2cc; } @media(max-width:767px) { .table-responsive { width: 100%; margin-bottom: 15.75px; overflow-x: scroll; overflow-y: hidden; border: 1px solid #ddd; -ms-overflow-style: -ms-autohiding-scrollbar; -webkit-overflow-scrolling: touch; } .table-responsive>.table { margin-bottom: 0; } .table-responsive>.table>thead>tr>th, .table-responsive>.table>tbody>tr>th, .table-responsive>.table>tfoot>tr>th, .table-responsive>.table>thead>tr>td, .table-responsive>.table>tbody>tr>td, .table-responsive>.table>tfoot>tr>td { white-space: nowrap; } .table-responsive>.table-bordered { border: 0; } .table-responsive>.table-bordered>thead>tr>th:first-child, .table-responsive>.table-bordered>tbody>tr>th:first-child, .table-responsive>.table-bordered>tfoot>tr>th:first-child, .table-responsive>.table-bordered>thead>tr>td:first-child, .table-responsive>.table-bordered>tbody>tr>td:first-child, .table-responsive>.table-bordered>tfoot>tr>td:first-child { border-left: 0; } .table-responsive>.table-bordered>thead>tr>th:last-child, .table-responsive>.table-bordered>tbody>tr>th:last-child, .table-responsive>.table-bordered>tfoot>tr>th:last-child, .table-responsive>.table-bordered>thead>tr>td:last-child, .table-responsive>.table-bordered>tbody>tr>td:last-child, .table-responsive>.table-bordered>tfoot>tr>td:last-child { border-right: 0; } .table-responsive>.table-bordered>tbody>tr:last-child>th, .table-responsive>.table-bordered>tfoot>tr:last-child>th, .table-responsive>.table-bordered>tbody>tr:last-child>td, .table-responsive>.table-bordered>tfoot>tr:last-child>td { border-bottom: 0; } }fieldset { padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; padding: 0; margin-bottom: 21px; font-size: 22.5px; line-height: inherit; color: #333; border: 0; border-bottom: 1px solid #e5e5e5; } label { display: inline-block; margin-bottom: 5px; font-weight: bold; } input[type="search"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; line-height: normal; } input[type="file"] { display: block; } select[multiple], select[size] { height: auto; } select optgroup { font-family: inherit; font-size: inherit; font-style: inherit; } input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { height: auto; } output { display: block; padding-top: 7px; font-size: 15px; line-height: 1.428571429; color: #6f6f6f; vertical-align: middle; } .form-control { display: block; width: 100%; height: 35px; padding: 6px 12px; font-size: 15px; line-height: 1.428571429; color: #6f6f6f; vertical-align: middle; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } .form-control:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } .form-control:-moz-placeholder { color: #999; } .form-control::-moz-placeholder { color: #999; opacity: 1; } .form-control:-ms-input-placeholder { color: #999; } .form-control::-webkit-input-placeholder { color: #999; } .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { cursor: not-allowed; background-color: #eee; } textarea.form-control { height: auto; } .form-group { margin-bottom: 15px; } .radio, .checkbox { display: block; min-height: 21px; padding-left: 20px; margin-top: 10px; margin-bottom: 10px; vertical-align: middle; } .radio label, .checkbox label { display: inline; margin-bottom: 0; font-weight: normal; cursor: pointer; } .radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { float: left; margin-left: -20px; } .radio+.radio, .checkbox+.checkbox { margin-top: -5px; } .radio-inline, .checkbox-inline { display: inline-block; padding-left: 20px; margin-bottom: 0; font-weight: normal; vertical-align: middle; cursor: pointer; } .radio-inline+.radio-inline, .checkbox-inline+.checkbox-inline { margin-top: 0; margin-left: 10px; } input[type="radio"][disabled], input[type="checkbox"][disabled], .radio[disabled], .radio-inline[disabled], .checkbox[disabled], .checkbox-inline[disabled], fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"], fieldset[disabled] .radio, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline { cursor: not-allowed; } .input-sm { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 0; } select.input-sm { height: 30px; line-height: 30px; } textarea.input-sm { height: auto; } .input-lg { height: 48px; padding: 10px 16px; font-size: 19px; line-height: 1.33; border-radius: 0; } select.input-lg { height: 48px; line-height: 48px; } textarea.input-lg { height: auto; } .has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline { color: #e99002; } .has-warning .form-control { border-color: #e99002; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-warning .form-control:focus { border-color: #b67102; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #febc53; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #febc53; } .has-warning .input-group-addon { color: #e99002; background-color: #fcf8e3; border-color: #e99002; } .has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline { color: #f04124; } .has-error .form-control { border-color: #f04124; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-error .form-control:focus { border-color: #d32a0e; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f79483; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f79483; } .has-error .input-group-addon { color: #f04124; background-color: #f2dede; border-color: #f04124; } .has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline { color: #43ac6a; } .has-success .form-control { border-color: #43ac6a; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-success .form-control:focus { border-color: #358753; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #85d0a1; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #85d0a1; } .has-success .input-group-addon { color: #43ac6a; background-color: #dff0d8; border-color: #43ac6a; } .form-control-static { margin-bottom: 0; } .help-block { display: block; margin-top: 5px; margin-bottom: 10px; color: #626262; } @media(min-width:768px) { .form-inline .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } .form-inline .form-control { display: inline-block; } .form-inline select.form-control { width: auto; } .form-inline .radio, .form-inline .checkbox { display: inline-block; padding-left: 0; margin-top: 0; margin-bottom: 0; } .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { float: none; margin-left: 0; } }.form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { padding-top: 7px; margin-top: 0; margin-bottom: 0; } .form-horizontal .radio, .form-horizontal .checkbox { min-height: 28px; } .form-horizontal .form-group { margin-right: -15px; margin-left: -15px; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-control-static { padding-top: 7px; } @media(min-width:768px) { .form-horizontal .control-label { text-align: right; } }.btn { display: inline-block; padding: 6px 12px; margin-bottom: 0; font-size: 15px; font-weight: normal; line-height: 1.428571429; text-align: center; white-space: nowrap; vertical-align: middle; cursor: pointer; background-image: none; border: 1px solid transparent; border-radius: 0; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; } .btn:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn:hover, .btn:focus { color: #333; text-decoration: none; } .btn:active, .btn.active { background-image: none; outline: 0; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { pointer-events: none; cursor: not-allowed; opacity: .65; filter: alpha(opacity=65); -webkit-box-shadow: none; box-shadow: none; } .btn-default { color: #333; background-color: #e7e7e7; border-color: #dadada; } .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { color: #333; background-color: #d3d3d3; border-color: #bbb; } .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { background-image: none; } .btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { background-color: #e7e7e7; border-color: #dadada; } .btn-default .badge { color: #e7e7e7; background-color: #fff; } .btn-primary { color: #fff; background-color: #008cba; border-color: #0079a1; } .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { color: #fff; background-color: #006d91; border-color: #004b63; } .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { background-image: none; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #008cba; border-color: #0079a1; } .btn-primary .badge { color: #008cba; background-color: #fff; } .btn-warning { color: #fff; background-color: #e99002; border-color: #d08002; } .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { color: #fff; background-color: #c17702; border-color: #935b01; } .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { background-image: none; } .btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { background-color: #e99002; border-color: #d08002; } .btn-warning .badge { color: #e99002; background-color: #fff; } .btn-danger { color: #fff; background-color: #f04124; border-color: #ea2f10; } .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { color: #fff; background-color: #dc2c0f; border-color: #b1240c; } .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { background-image: none; } .btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { background-color: #f04124; border-color: #ea2f10; } .btn-danger .badge { color: #f04124; background-color: #fff; } .btn-success { color: #fff; background-color: #43ac6a; border-color: #3c9a5f; } .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { color: #fff; background-color: #388f58; border-color: #2b6e44; } .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { background-image: none; } .btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { background-color: #43ac6a; border-color: #3c9a5f; } .btn-success .badge { color: #43ac6a; background-color: #fff; } .btn-info { color: #fff; background-color: #5bc0de; border-color: #46b8da; } .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { color: #fff; background-color: #39b3d7; border-color: #269abc; } .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { background-image: none; } .btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { background-color: #5bc0de; border-color: #46b8da; } .btn-info .badge { color: #5bc0de; background-color: #fff; } .btn-link { font-weight: normal; color: #008cba; cursor: pointer; border-radius: 0; } .btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } .btn-link:hover, .btn-link:focus { color: #00526e; text-decoration: underline; background-color: transparent; } .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { color: #999; text-decoration: none; } .btn-lg { padding: 10px 16px; font-size: 19px; line-height: 1.33; border-radius: 0; } .btn-sm { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 0; } .btn-xs { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 0; } .btn-block { display: block; width: 100%; padding-right: 0; padding-left: 0; } .btn-block+.btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%} .fade { opacity: 0; -webkit-transition: opacity .15s linear; transition: opacity .15s linear; } .fade.in { opacity: 1; } .collapse { display: none; } .collapse.in { display: block; } .collapsing { position: relative; height: 0; overflow: hidden; -webkit-transition: height .35s ease; transition: height .35s ease; } @font-face { font-family: 'Glyphicons Halflings'; src: url('../fonts/glyphicons-halflings-regular.eot'); src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); } .glyphicon { position: relative; top: 1px; display: inline-block; font-family: 'Glyphicons Halflings'; -webkit-font-smoothing: antialiased; font-style: normal; font-weight: normal; line-height: 1; -moz-osx-font-smoothing: grayscale; } .glyphicon:empty { width: 1em; } .glyphicon-asterisk:before { content: "\2a"} .glyphicon-plus:before { content: "\2b"} .glyphicon-euro:before { content: "\20ac"} .glyphicon-minus:before { content: "\2212"} .glyphicon-cloud:before { content: "\2601"} .glyphicon-envelope:before { content: "\2709"} .glyphicon-pencil:before { content: "\270f"} .glyphicon-glass:before { content: "\e001"} .glyphicon-music:before { content: "\e002"} .glyphicon-search:before { content: "\e003"} .glyphicon-heart:before { content: "\e005"} .glyphicon-star:before { content: "\e006"} .glyphicon-star-empty:before { content: "\e007"} .glyphicon-user:before { content: "\e008"} .glyphicon-film:before { content: "\e009"} .glyphicon-th-large:before { content: "\e010"} .glyphicon-th:before { content: "\e011"} .glyphicon-th-list:before { content: "\e012"} .glyphicon-ok:before { content: "\e013"} .glyphicon-remove:before { content: "\e014"} .glyphicon-zoom-in:before { content: "\e015"} .glyphicon-zoom-out:before { content: "\e016"} .glyphicon-off:before { content: "\e017"} .glyphicon-signal:before { content: "\e018"} .glyphicon-cog:before { content: "\e019"} .glyphicon-trash:before { content: "\e020"} .glyphicon-home:before { content: "\e021"} .glyphicon-file:before { content: "\e022"} .glyphicon-time:before { content: "\e023"} .glyphicon-road:before { content: "\e024"} .glyphicon-download-alt:before { content: "\e025"} .glyphicon-download:before { content: "\e026"} .glyphicon-upload:before { content: "\e027"} .glyphicon-inbox:before { content: "\e028"} .glyphicon-play-circle:before { content: "\e029"} .glyphicon-repeat:before { content: "\e030"} .glyphicon-refresh:before { content: "\e031"} .glyphicon-list-alt:before { content: "\e032"} .glyphicon-lock:before { content: "\e033"} .glyphicon-flag:before { content: "\e034"} .glyphicon-headphones:before { content: "\e035"} .glyphicon-volume-off:before { content: "\e036"} .glyphicon-volume-down:before { content: "\e037"} .glyphicon-volume-up:before { content: "\e038"} .glyphicon-qrcode:before { content: "\e039"} .glyphicon-barcode:before { content: "\e040"} .glyphicon-tag:before { content: "\e041"} .glyphicon-tags:before { content: "\e042"} .glyphicon-book:before { content: "\e043"} .glyphicon-bookmark:before { content: "\e044"} .glyphicon-print:before { content: "\e045"} .glyphicon-camera:before { content: "\e046"} .glyphicon-font:before { content: "\e047"} .glyphicon-bold:before { content: "\e048"} .glyphicon-italic:before { content: "\e049"} .glyphicon-text-height:before { content: "\e050"} .glyphicon-text-width:before { content: "\e051"} .glyphicon-align-left:before { content: "\e052"} .glyphicon-align-center:before { content: "\e053"} .glyphicon-align-right:before { content: "\e054"} .glyphicon-align-justify:before { content: "\e055"} .glyphicon-list:before { content: "\e056"} .glyphicon-indent-left:before { content: "\e057"} .glyphicon-indent-right:before { content: "\e058"} .glyphicon-facetime-video:before { content: "\e059"} .glyphicon-picture:before { content: "\e060"} .glyphicon-map-marker:before { content: "\e062"} .glyphicon-adjust:before { content: "\e063"} .glyphicon-tint:before { content: "\e064"} .glyphicon-edit:before { content: "\e065"} .glyphicon-share:before { content: "\e066"} .glyphicon-check:before { content: "\e067"} .glyphicon-move:before { content: "\e068"} .glyphicon-step-backward:before { content: "\e069"} .glyphicon-fast-backward:before { content: "\e070"} .glyphicon-backward:before { content: "\e071"} .glyphicon-play:before { content: "\e072"} .glyphicon-pause:before { content: "\e073"} .glyphicon-stop:before { content: "\e074"} .glyphicon-forward:before { content: "\e075"} .glyphicon-fast-forward:before { content: "\e076"} .glyphicon-step-forward:before { content: "\e077"} .glyphicon-eject:before { content: "\e078"} .glyphicon-chevron-left:before { content: "\e079"} .glyphicon-chevron-right:before { content: "\e080"} .glyphicon-plus-sign:before { content: "\e081"} .glyphicon-minus-sign:before { content: "\e082"} .glyphicon-remove-sign:before { content: "\e083"} .glyphicon-ok-sign:before { content: "\e084"} .glyphicon-question-sign:before { content: "\e085"} .glyphicon-info-sign:before { content: "\e086"} .glyphicon-screenshot:before { content: "\e087"} .glyphicon-remove-circle:before { content: "\e088"} .glyphicon-ok-circle:before { content: "\e089"} .glyphicon-ban-circle:before { content: "\e090"} .glyphicon-arrow-left:before { content: "\e091"} .glyphicon-arrow-right:before { content: "\e092"} .glyphicon-arrow-up:before { content: "\e093"} .glyphicon-arrow-down:before { content: "\e094"} .glyphicon-share-alt:before { content: "\e095"} .glyphicon-resize-full:before { content: "\e096"} .glyphicon-resize-small:before { content: "\e097"} .glyphicon-exclamation-sign:before { content: "\e101"} .glyphicon-gift:before { content: "\e102"} .glyphicon-leaf:before { content: "\e103"} .glyphicon-fire:before { content: "\e104"} .glyphicon-eye-open:before { content: "\e105"} .glyphicon-eye-close:before { content: "\e106"} .glyphicon-warning-sign:before { content: "\e107"} .glyphicon-plane:before { content: "\e108"} .glyphicon-calendar:before { content: "\e109"} .glyphicon-random:before { content: "\e110"} .glyphicon-comment:before { content: "\e111"} .glyphicon-magnet:before { content: "\e112"} .glyphicon-chevron-up:before { content: "\e113"} .glyphicon-chevron-down:before { content: "\e114"} .glyphicon-retweet:before { content: "\e115"} .glyphicon-shopping-cart:before { content: "\e116"} .glyphicon-folder-close:before { content: "\e117"} .glyphicon-folder-open:before { content: "\e118"} .glyphicon-resize-vertical:before { content: "\e119"} .glyphicon-resize-horizontal:before { content: "\e120"} .glyphicon-hdd:before { content: "\e121"} .glyphicon-bullhorn:before { content: "\e122"} .glyphicon-bell:before { content: "\e123"} .glyphicon-certificate:before { content: "\e124"} .glyphicon-thumbs-up:before { content: "\e125"} .glyphicon-thumbs-down:before { content: "\e126"} .glyphicon-hand-right:before { content: "\e127"} .glyphicon-hand-left:before { content: "\e128"} .glyphicon-hand-up:before { content: "\e129"} .glyphicon-hand-down:before { content: "\e130"} .glyphicon-circle-arrow-right:before { content: "\e131"} .glyphicon-circle-arrow-left:before { content: "\e132"} .glyphicon-circle-arrow-up:before { content: "\e133"} .glyphicon-circle-arrow-down:before { content: "\e134"} .glyphicon-globe:before { content: "\e135"} .glyphicon-wrench:before { content: "\e136"} .glyphicon-tasks:before { content: "\e137"} .glyphicon-filter:before { content: "\e138"} .glyphicon-briefcase:before { content: "\e139"} .glyphicon-fullscreen:before { content: "\e140"} .glyphicon-dashboard:before { content: "\e141"} .glyphicon-paperclip:before { content: "\e142"} .glyphicon-heart-empty:before { content: "\e143"} .glyphicon-link:before { content: "\e144"} .glyphicon-phone:before { content: "\e145"} .glyphicon-pushpin:before { content: "\e146"} .glyphicon-usd:before { content: "\e148"} .glyphicon-gbp:before { content: "\e149"} .glyphicon-sort:before { content: "\e150"} .glyphicon-sort-by-alphabet:before { content: "\e151"} .glyphicon-sort-by-alphabet-alt:before { content: "\e152"} .glyphicon-sort-by-order:before { content: "\e153"} .glyphicon-sort-by-order-alt:before { content: "\e154"} .glyphicon-sort-by-attributes:before { content: "\e155"} .glyphicon-sort-by-attributes-alt:before { content: "\e156"} .glyphicon-unchecked:before { content: "\e157"} .glyphicon-expand:before { content: "\e158"} .glyphicon-collapse-down:before { content: "\e159"} .glyphicon-collapse-up:before { content: "\e160"} .glyphicon-log-in:before { content: "\e161"} .glyphicon-flash:before { content: "\e162"} .glyphicon-log-out:before { content: "\e163"} .glyphicon-new-window:before { content: "\e164"} .glyphicon-record:before { content: "\e165"} .glyphicon-save:before { content: "\e166"} .glyphicon-open:before { content: "\e167"} .glyphicon-saved:before { content: "\e168"} .glyphicon-import:before { content: "\e169"} .glyphicon-export:before { content: "\e170"} .glyphicon-send:before { content: "\e171"} .glyphicon-floppy-disk:before { content: "\e172"} .glyphicon-floppy-saved:before { content: "\e173"} .glyphicon-floppy-remove:before { content: "\e174"} .glyphicon-floppy-save:before { content: "\e175"} .glyphicon-floppy-open:before { content: "\e176"} .glyphicon-credit-card:before { content: "\e177"} .glyphicon-transfer:before { content: "\e178"} .glyphicon-cutlery:before { content: "\e179"} .glyphicon-header:before { content: "\e180"} .glyphicon-compressed:before { content: "\e181"} .glyphicon-earphone:before { content: "\e182"} .glyphicon-phone-alt:before { content: "\e183"} .glyphicon-tower:before { content: "\e184"} .glyphicon-stats:before { content: "\e185"} .glyphicon-sd-video:before { content: "\e186"} .glyphicon-hd-video:before { content: "\e187"} .glyphicon-subtitles:before { content: "\e188"} .glyphicon-sound-stereo:before { content: "\e189"} .glyphicon-sound-dolby:before { content: "\e190"} .glyphicon-sound-5-1:before { content: "\e191"} .glyphicon-sound-6-1:before { content: "\e192"} .glyphicon-sound-7-1:before { content: "\e193"} .glyphicon-copyright-mark:before { content: "\e194"} .glyphicon-registration-mark:before { content: "\e195"} .glyphicon-cloud-download:before { content: "\e197"} .glyphicon-cloud-upload:before { content: "\e198"} .glyphicon-tree-conifer:before { content: "\e199"} .glyphicon-tree-deciduous:before { content: "\e200"} .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; border-top: 4px solid; border-right: 4px solid transparent; border-left: 4px solid transparent; } .dropdown { position: relative; } .dropdown-toggle:focus { outline: 0; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; font-size: 15px; list-style: none; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0; -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); background-clip: padding-box; } .dropdown-menu.pull-right { right: 0; left: auto; } .dropdown-menu .divider { height: 1px; margin: 9.5px 0; overflow: hidden; background-color: rgba(0, 0, 0, 0.2); } .dropdown-menu>li>a { display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.428571429; color: #555; white-space: nowrap; } .dropdown-menu>li>a:hover, .dropdown-menu>li>a:focus { color: #262626; text-decoration: none; background-color: #eee; } .dropdown-menu>.active>a, .dropdown-menu>.active>a:hover, .dropdown-menu>.active>a:focus { color: #fff; text-decoration: none; background-color: #008cba; outline: 0; } .dropdown-menu>.disabled>a, .dropdown-menu>.disabled>a:hover, .dropdown-menu>.disabled>a:focus { color: #999; } .dropdown-menu>.disabled>a:hover, .dropdown-menu>.disabled>a:focus { text-decoration: none; cursor: not-allowed; background-color: transparent; background-image: none; filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .open>.dropdown-menu { display: block; } .open>a { outline: 0; } .dropdown-header { display: block; padding: 3px 20px; font-size: 12px; line-height: 1.428571429; color: #999; } .dropdown-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 990; } .pull-right>.dropdown-menu { right: 0; left: auto; } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { border-top: 0; border-bottom: 4px solid; content: ""} .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px; } @media(min-width:768px) { .navbar-right .dropdown-menu { right: 0; left: auto; } }.btn-group, .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle; } .btn-group>.btn, .btn-group-vertical>.btn { position: relative; float: left; } .btn-group>.btn:hover, .btn-group-vertical>.btn:hover, .btn-group>.btn:focus, .btn-group-vertical>.btn:focus, .btn-group>.btn:active, .btn-group-vertical>.btn:active, .btn-group>.btn.active, .btn-group-vertical>.btn.active { z-index: 2; } .btn-group>.btn:focus, .btn-group-vertical>.btn:focus { outline: 0; } .btn-group .btn+.btn, .btn-group .btn+.btn-group, .btn-group .btn-group+.btn, .btn-group .btn-group+.btn-group { margin-left: -1px; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar .btn-group { float: left; } .btn-toolbar>.btn+.btn, .btn-toolbar>.btn-group+.btn, .btn-toolbar>.btn+.btn-group, .btn-toolbar>.btn-group+.btn-group { margin-left: 5px; } .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } .btn-group>.btn:first-child { margin-left: 0; } .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group>.btn:last-child:not(:first-child), .btn-group>.dropdown-toggle:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group>.btn-group { float: left; } .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn { border-radius: 0; } .btn-group>.btn-group:first-child>.btn:last-child, .btn-group>.btn-group:first-child>.dropdown-toggle { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group>.btn-group:last-child>.btn:first-child { border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group-xs>.btn { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 0; } .btn-group-sm>.btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 0; } .btn-group-lg>.btn { padding: 10px 16px; font-size: 19px; line-height: 1.33; border-radius: 0; } .btn-group>.btn+.dropdown-toggle { padding-right: 8px; padding-left: 8px; } .btn-group>.btn-lg+.dropdown-toggle { padding-right: 12px; padding-left: 12px; } .btn-group.open .dropdown-toggle { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn-group.open .dropdown-toggle.btn-link { -webkit-box-shadow: none; box-shadow: none; } .btn .caret { margin-left: 0; } .btn-lg .caret { border-width: 5px 5px 0; border-bottom-width: 0; } .dropup .btn-lg .caret { border-width: 0 5px 5px; } .btn-group-vertical>.btn, .btn-group-vertical>.btn-group, .btn-group-vertical>.btn-group>.btn { display: block; float: none; width: 100%; max-width: 100%} .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group>.btn { float: none; } .btn-group-vertical>.btn+.btn, .btn-group-vertical>.btn+.btn-group, .btn-group-vertical>.btn-group+.btn, .btn-group-vertical>.btn-group+.btn-group { margin-top: -1px; margin-left: 0; } .btn-group-vertical>.btn:not(:first-child):not(:last-child) { border-radius: 0; } .btn-group-vertical>.btn:first-child:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical>.btn:last-child:not(:first-child) { border-top-right-radius: 0; border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { border-radius: 0; } .btn-group-vertical>.btn-group:first-child>.btn:last-child, .btn-group-vertical>.btn-group:first-child>.dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical>.btn-group:last-child>.btn:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } .btn-group-justified { display: table; width: 100%; border-collapse: separate; table-layout: fixed; } .btn-group-justified>.btn, .btn-group-justified>.btn-group { display: table-cell; float: none; width: 1%} .btn-group-justified>.btn-group .btn { width: 100%} [data-toggle="buttons"]>.btn>input[type="radio"], [data-toggle="buttons"]>.btn>input[type="checkbox"] { display: none; } .input-group { position: relative; display: table; border-collapse: separate; } .input-group[class*="col-"] { float: none; padding-right: 0; padding-left: 0; } .input-group .form-control { width: 100%; margin-bottom: 0; } .input-group-lg>.form-control, .input-group-lg>.input-group-addon, .input-group-lg>.input-group-btn>.btn { height: 48px; padding: 10px 16px; font-size: 19px; line-height: 1.33; border-radius: 0; } select.input-group-lg>.form-control, select.input-group-lg>.input-group-addon, select.input-group-lg>.input-group-btn>.btn { height: 48px; line-height: 48px; } textarea.input-group-lg>.form-control, textarea.input-group-lg>.input-group-addon, textarea.input-group-lg>.input-group-btn>.btn { height: auto; } .input-group-sm>.form-control, .input-group-sm>.input-group-addon, .input-group-sm>.input-group-btn>.btn { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 0; } select.input-group-sm>.form-control, select.input-group-sm>.input-group-addon, select.input-group-sm>.input-group-btn>.btn { height: 30px; line-height: 30px; } textarea.input-group-sm>.form-control, textarea.input-group-sm>.input-group-addon, textarea.input-group-sm>.input-group-btn>.btn { height: auto; } .input-group-addon, .input-group-btn, .input-group .form-control { display: table-cell; } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } .input-group-addon, .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle; } .input-group-addon { padding: 6px 12px; font-size: 15px; font-weight: normal; line-height: 1; color: #6f6f6f; text-align: center; background-color: #eee; border: 1px solid #ccc; border-radius: 0; } .input-group-addon.input-sm { padding: 5px 10px; font-size: 12px; border-radius: 0; } .input-group-addon.input-lg { padding: 10px 16px; font-size: 19px; border-radius: 0; } .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { margin-top: 0; } .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group-addon:first-child { border-right: 0; } .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child>.btn, .input-group-btn:last-child>.dropdown-toggle, .input-group-btn:first-child>.btn:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } .input-group-addon:last-child { border-left: 0; } .input-group-btn { position: relative; white-space: nowrap; } .input-group-btn:first-child>.btn { margin-right: -1px; } .input-group-btn:last-child>.btn { margin-left: -1px; } .input-group-btn>.btn { position: relative; } .input-group-btn>.btn+.btn { margin-left: -4px; } .input-group-btn>.btn:hover, .input-group-btn>.btn:active { z-index: 2; } .nav { font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; padding-left: 0; margin-bottom: 0; list-style: none; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav>li { position: relative; display: block; } .nav>li>a { position: relative; display: block; padding: 10px 15px; } .nav>li>a:hover, .nav>li>a:focus { text-decoration: none; background-color: #eee; } .nav>li.disabled>a { color: #999; } .nav>li.disabled>a:hover, .nav>li.disabled>a:focus { color: #999; text-decoration: none; cursor: not-allowed; background-color: transparent; } .nav .open>a, .nav .open>a:hover, .nav .open>a:focus { background-color: #eee; border-color: #008cba; } .nav .nav-divider { height: 1px; margin: 9.5px 0; overflow: hidden; background-color: #e5e5e5; } .nav>li>a>img { max-width: none; } .nav-tabs { border-bottom: 1px solid #ddd; } .nav-tabs>li { float: left; margin-bottom: -1px; } .nav-tabs>li>a { margin-right: 2px; line-height: 1.428571429; border: 1px solid transparent; border-radius: 0; } .nav-tabs>li>a:hover { border-color: #eee #eee #ddd; } .nav-tabs>li.active>a, .nav-tabs>li.active>a:hover, .nav-tabs>li.active>a:focus { color: #6f6f6f; cursor: default; background-color: #fff; border: 1px solid #ddd; border-bottom-color: transparent; } .nav-tabs.nav-justified { width: 100%; border-bottom: 0; } .nav-tabs.nav-justified>li { float: none; } .nav-tabs.nav-justified>li>a { margin-bottom: 5px; text-align: center; } .nav-tabs.nav-justified>.dropdown .dropdown-menu { top: auto; left: auto; } @media(min-width:768px) { .nav-tabs.nav-justified>li { display: table-cell; width: 1%} .nav-tabs.nav-justified>li>a { margin-bottom: 0; } }.nav-tabs.nav-justified>li>a { margin-right: 0; border-radius: 0; } .nav-tabs.nav-justified>.active>a, .nav-tabs.nav-justified>.active>a:hover, .nav-tabs.nav-justified>.active>a:focus { border: 1px solid #ddd; } @media(min-width:768px) { .nav-tabs.nav-justified>li>a { border-bottom: 1px solid #ddd; border-radius: 0; } .nav-tabs.nav-justified>.active>a, .nav-tabs.nav-justified>.active>a:hover, .nav-tabs.nav-justified>.active>a:focus { border-bottom-color: #fff; } }.nav-pills>li { float: left; } .nav-pills>li>a { border-radius: 0; } .nav-pills>li+li { margin-left: 2px; } .nav-pills>li.active>a, .nav-pills>li.active>a:hover, .nav-pills>li.active>a:focus { color: #fff; background-color: #008cba; } .nav-stacked>li { float: none; } .nav-stacked>li+li { margin-top: 2px; margin-left: 0; } .nav-justified { width: 100%} .nav-justified>li { float: none; } .nav-justified>li>a { margin-bottom: 5px; text-align: center; } .nav-justified>.dropdown .dropdown-menu { top: auto; left: auto; } @media(min-width:768px) { .nav-justified>li { display: table-cell; width: 1%} .nav-justified>li>a { margin-bottom: 0; } }.nav-tabs-justified { border-bottom: 0; } .nav-tabs-justified>li>a { margin-right: 0; border-radius: 0; } .nav-tabs-justified>.active>a, .nav-tabs-justified>.active>a:hover, .nav-tabs-justified>.active>a:focus { border: 1px solid #ddd; } @media(min-width:768px) { .nav-tabs-justified>li>a { border-bottom: 1px solid #ddd; border-radius: 0; } .nav-tabs-justified>.active>a, .nav-tabs-justified>.active>a:hover, .nav-tabs-justified>.active>a:focus { border-bottom-color: #fff; } }.tab-content>.tab-pane { display: none; } .tab-content>.active { display: block; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-right-radius: 0; border-top-left-radius: 0; } .navbar { position: relative; min-height: 45px; margin-bottom: 21px; border: 1px solid transparent; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } @media(min-width:768px) { .navbar { border-radius: 0; } }.navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } .navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } .navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } .navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } .navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } @media(min-width:768px) { .navbar-header { float: left; } }.navbar-collapse { max-height: 340px; padding-right: 15px; padding-left: 15px; overflow-x: visible; border-top: 1px solid transparent; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); -webkit-overflow-scrolling: touch; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse.in { overflow-y: auto; } @media(min-width:768px) { .navbar-collapse { width: auto; border-top: 0; box-shadow: none; } .navbar-collapse.collapse { display: block!important; height: auto!important; padding-bottom: 0; overflow: visible!important; } .navbar-collapse.in { overflow-y: visible; } .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { padding-right: 0; padding-left: 0; } }.container>.navbar-header, .container>.navbar-collapse { margin-right: -15px; margin-left: -15px; } @media(min-width:768px) { .container>.navbar-header, .container>.navbar-collapse { margin-right: 0; margin-left: 0; } }.navbar-static-top { z-index: 1000; border-width: 0 0 1px; } @media(min-width:768px) { .navbar-static-top { border-radius: 0; } }.navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; } @media(min-width:768px) { .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; } }.navbar-fixed-top { top: 0; border-width: 0 0 1px; } .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; border-width: 1px 0 0; } .navbar-brand { font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; float: left; padding: 12px 15px; font-size: 19px; line-height: 21px; } .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } @media(min-width:768px) { .navbar>.container .navbar-brand { margin-left: -15px; } }.navbar-toggle { position: relative; float: right; padding: 9px 10px; margin-top: 5.5px; margin-right: 15px; margin-bottom: 5.5px; background-color: transparent; background-image: none; border: 1px solid transparent; border-radius: 0; } .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px; } .navbar-toggle .icon-bar+.icon-bar { margin-top: 4px; } @media(min-width:768px) { .navbar-toggle { display: none; } }.navbar-nav { margin: 6px -15px; } .navbar-nav>li>a { padding-top: 10px; padding-bottom: 10px; line-height: 21px; } @media(max-width:767px) { .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0; background-color: transparent; border: 0; box-shadow: none; } .navbar-nav .open .dropdown-menu>li>a, .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } .navbar-nav .open .dropdown-menu>li>a { line-height: 21px; } .navbar-nav .open .dropdown-menu>li>a:hover, .navbar-nav .open .dropdown-menu>li>a:focus { background-image: none; } }@media(min-width:768px) { .navbar-nav { float: left; margin: 0; } .navbar-nav>li { float: left; } .navbar-nav>li>a { padding-top: 12px; padding-bottom: 12px; } .navbar-nav.navbar-right:last-child { margin-right: -15px; } }@media(min-width:768px) { .navbar-left { float: left!important; } .navbar-right { float: right!important; } }.navbar-form { padding: 10px 15px; margin-top: 5px; margin-right: -15px; margin-bottom: 5px; margin-left: -15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); } @media(min-width:768px) { .navbar-form .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } .navbar-form .form-control { display: inline-block; } .navbar-form select.form-control { width: auto; } .navbar-form .radio, .navbar-form .checkbox { display: inline-block; padding-left: 0; margin-top: 0; margin-bottom: 0; } .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { float: none; margin-left: 0; } }@media(max-width:767px) { .navbar-form .form-group { margin-bottom: 5px; } }@media(min-width:768px) { .navbar-form { width: auto; padding-top: 0; padding-bottom: 0; margin-right: 0; margin-left: 0; border: 0; -webkit-box-shadow: none; box-shadow: none; } .navbar-form.navbar-right:last-child { margin-right: -15px; } }.navbar-nav>li>.dropdown-menu { margin-top: 0; border-top-right-radius: 0; border-top-left-radius: 0; } .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .navbar-nav.pull-right>li>.dropdown-menu, .navbar-nav>li>.dropdown-menu.pull-right { right: 0; left: auto; } .navbar-btn { margin-top: 5px; margin-bottom: 5px; } .navbar-btn.btn-sm { margin-top: 7.5px; margin-bottom: 7.5px; } .navbar-btn.btn-xs { margin-top: 11.5px; margin-bottom: 11.5px; } .navbar-text { margin-top: 12px; margin-bottom: 12px; } @media(min-width:768px) { .navbar-text { float: left; margin-right: 15px; margin-left: 15px; } .navbar-text.navbar-right:last-child { margin-right: 0; } }.navbar-default { background-color: #333; border-color: #222; } .navbar-default .navbar-brand { color: #fff; } .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { color: #fff; background-color: transparent; } .navbar-default .navbar-text { color: #fff; } .navbar-default .navbar-nav>li>a { color: #fff; } .navbar-default .navbar-nav>li>a:hover, .navbar-default .navbar-nav>li>a:focus { color: #fff; background-color: #272727; } .navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:hover, .navbar-default .navbar-nav>.active>a:focus { color: #fff; background-color: #272727; } .navbar-default .navbar-nav>.disabled>a, .navbar-default .navbar-nav>.disabled>a:hover, .navbar-default .navbar-nav>.disabled>a:focus { color: #ccc; background-color: transparent; } .navbar-default .navbar-toggle { border-color: transparent; } .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { background-color: transparent; } .navbar-default .navbar-toggle .icon-bar { background-color: #fff; } .navbar-default .navbar-collapse, .navbar-default .navbar-form { border-color: #222; } .navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:hover, .navbar-default .navbar-nav>.open>a:focus { color: #fff; background-color: #272727; } @media(max-width:767px) { .navbar-default .navbar-nav .open .dropdown-menu>li>a { color: #fff; } .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover, .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus { color: #fff; background-color: #272727; } .navbar-default .navbar-nav .open .dropdown-menu>.active>a, .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover, .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus { color: #fff; background-color: #272727; } .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a, .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover, .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus { color: #ccc; background-color: transparent; } }.navbar-default .navbar-link { color: #fff; } .navbar-default .navbar-link:hover { color: #fff; } .navbar-inverse { background-color: #008cba; border-color: #006687; } .navbar-inverse .navbar-brand { color: #fff; } .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { color: #fff; background-color: transparent; } .navbar-inverse .navbar-text { color: #fff; } .navbar-inverse .navbar-nav>li>a { color: #fff; } .navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #fff; background-color: #006687; } .navbar-inverse .navbar-nav>.active>a, .navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #fff; background-color: #006687; } .navbar-inverse .navbar-nav>.disabled>a, .navbar-inverse .navbar-nav>.disabled>a:hover, .navbar-inverse .navbar-nav>.disabled>a:focus { color: #444; background-color: transparent; } .navbar-inverse .navbar-toggle { border-color: transparent; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: transparent; } .navbar-inverse .navbar-toggle .icon-bar { background-color: #fff; } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #007196; } .navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #fff; background-color: #006687; } @media(max-width:767px) { .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header { border-color: #006687; } .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #006687; } .navbar-inverse .navbar-nav .open .dropdown-menu>li>a { color: #fff; } .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus { color: #fff; background-color: #006687; } .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a, .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus { color: #fff; background-color: #006687; } .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a, .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus { color: #444; background-color: transparent; } }.navbar-inverse .navbar-link { color: #fff; } .navbar-inverse .navbar-link:hover { color: #fff; } .breadcrumb { padding: 8px 15px; margin-bottom: 21px; list-style: none; background-color: #f5f5f5; border-radius: 0; } .breadcrumb>li { display: inline-block; } .breadcrumb>li+li:before { padding: 0 5px; color: #999; content: "/\00a0"} .breadcrumb>.active { color: #333; } .pagination { display: inline-block; padding-left: 0; margin: 21px 0; border-radius: 0; } .pagination>li { display: inline; } .pagination>li>a, .pagination>li>span { position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.428571429; text-decoration: none; background-color: transparent; border: 1px solid transparent; } .pagination>li:first-child>a, .pagination>li:first-child>span { margin-left: 0; border-bottom-left-radius: 0; border-top-left-radius: 0; } .pagination>li:last-child>a, .pagination>li:last-child>span { border-top-right-radius: 0; border-bottom-right-radius: 0; } .pagination>li>a:hover, .pagination>li>span:hover, .pagination>li>a:focus, .pagination>li>span:focus { background-color: #eee; } .pagination>.active>a, .pagination>.active>span, .pagination>.active>a:hover, .pagination>.active>span:hover, .pagination>.active>a:focus, .pagination>.active>span:focus { z-index: 2; color: #fff; cursor: default; background-color: #008cba; border-color: #008cba; } .pagination>.disabled>span, .pagination>.disabled>span:hover, .pagination>.disabled>span:focus, .pagination>.disabled>a, .pagination>.disabled>a:hover, .pagination>.disabled>a:focus { color: #999; cursor: not-allowed; background-color: transparent; border-color: transparent; } .pagination-lg>li>a, .pagination-lg>li>span { padding: 10px 16px; font-size: 19px; } .pagination-lg>li:first-child>a, .pagination-lg>li:first-child>span { border-bottom-left-radius: 0; border-top-left-radius: 0; } .pagination-lg>li:last-child>a, .pagination-lg>li:last-child>span { border-top-right-radius: 0; border-bottom-right-radius: 0; } .pagination-sm>li>a, .pagination-sm>li>span { padding: 5px 10px; font-size: 12px; } .pagination-sm>li:first-child>a, .pagination-sm>li:first-child>span { border-bottom-left-radius: 0; border-top-left-radius: 0; } .pagination-sm>li:last-child>a, .pagination-sm>li:last-child>span { border-top-right-radius: 0; border-bottom-right-radius: 0; } .pager { padding-left: 0; margin: 21px 0; text-align: center; list-style: none; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager li { display: inline; } .pager li>a, .pager li>span { display: inline-block; padding: 5px 14px; background-color: transparent; border: 1px solid transparent; border-radius: 3px; } .pager li>a:hover, .pager li>a:focus { text-decoration: none; background-color: #eee; } .pager .next>a, .pager .next>span { float: right; } .pager .previous>a, .pager .previous>span { float: left; } .pager .disabled>a, .pager .disabled>a:hover, .pager .disabled>a:focus, .pager .disabled>span { color: #999; cursor: not-allowed; background-color: transparent; } .label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: bold; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; } .label[href]:hover, .label[href]:focus { color: #fff; text-decoration: none; cursor: pointer; } .label:empty { display: none; } .btn .label { position: relative; top: -1px; } .label-default { background-color: #999; } .label-default[href]:hover, .label-default[href]:focus { background-color: #808080; } .label-primary { background-color: #008cba; } .label-primary[href]:hover, .label-primary[href]:focus { background-color: #006687; } .label-success { background-color: #43ac6a; } .label-success[href]:hover, .label-success[href]:focus { background-color: #358753; } .label-info { background-color: #5bc0de; } .label-info[href]:hover, .label-info[href]:focus { background-color: #31b0d5; } .label-warning { background-color: #e99002; } .label-warning[href]:hover, .label-warning[href]:focus { background-color: #b67102; } .label-danger { background-color: #f04124; } .label-danger[href]:hover, .label-danger[href]:focus { background-color: #d32a0e; } .badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 12px; font-weight: bold; line-height: 1; color: #777; text-align: center; white-space: nowrap; vertical-align: baseline; background-color: #e7e7e7; border-radius: 10px; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } a.badge:hover, a.badge:focus { color: #fff; text-decoration: none; cursor: pointer; } a.list-group-item.active>.badge, .nav-pills>.active>a>.badge { color: #008cba; background-color: #fff; } .nav-pills>li>a>.badge { margin-left: 3px; } .jumbotron { padding: 30px; margin-bottom: 30px; font-size: 23px; font-weight: 200; line-height: 2.1428571435; color: inherit; background-color: #fafafa; } .jumbotron h1, .jumbotron .h1 { line-height: 1; color: inherit; } .jumbotron p { line-height: 1.4; } .container .jumbotron { border-radius: 0; } .jumbotron .container { max-width: 100%} @media screen and (min-width:768px) { .jumbotron { padding-top: 48px; padding-bottom: 48px; } .container .jumbotron { padding-right: 60px; padding-left: 60px; } .jumbotron h1, .jumbotron .h1 { font-size: 67.5px; } }.thumbnail { display: block; padding: 4px; margin-bottom: 21px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 0; -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; } .thumbnail>img, .thumbnail a>img { display: block; height: auto; max-width: 100%; margin-right: auto; margin-left: auto; } a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { border-color: #008cba; } .thumbnail .caption { padding: 9px; color: #222; } .alert { position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: 0.25rem; } .alert-heading { color: inherit; } .alert-link { font-weight: 700; } .alert-dismissible { padding-right: 4rem; } .alert-dismissible .close { position: absolute; top: 0; right: 0; padding: 0.75rem 1.25rem; color: inherit; } .alert-primary { color: #004085; background-color: #cce5ff; border-color: #b8daff; } .alert-primary hr { border-top-color: #9fcdff; } .alert-primary .alert-link { color: #002752; } .alert-secondary { color: #383d41; background-color: #e2e3e5; border-color: #d6d8db; } .alert-secondary hr { border-top-color: #c8cbcf; } .alert-secondary .alert-link { color: #202326; } .alert-success { color: #155724; background-color: #d4edda; border-color: #c3e6cb; } .alert-success hr { border-top-color: #b1dfbb; } .alert-success .alert-link { color: #0b2e13; } .alert-info { color: #0c5460; background-color: #d1ecf1; border-color: #bee5eb; } .alert-info hr { border-top-color: #abdde5; } .alert-info .alert-link { color: #062c33; } .alert-warning { color: #856404; background-color: #fff3cd; border-color: #ffeeba; } .alert-warning hr { border-top-color: #ffe8a1; } .alert-warning .alert-link { color: #533f03; } .alert-danger { color: #721c24; background-color: #f8d7da; border-color: #f5c6cb; } .alert-danger hr { border-top-color: #f1b0b7; } .alert-danger .alert-link { color: #491217; } .alert-light { color: #818182; background-color: #fefefe; border-color: #fdfdfe; } .alert-light hr { border-top-color: #ececf6; } .alert-light .alert-link { color: #686868; } .alert-dark { color: #1b1e21; background-color: #d6d8d9; border-color: #c6c8ca; } .alert-dark hr { border-top-color: #b9bbbe; } .alert-dark .alert-link { color: #040505; } @-webkit-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } }@keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } }.progress { height: 21px; margin-bottom: 21px; overflow: hidden; background-color: #f5f5f5; border-radius: 0; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } .progress-bar { float: left; width: 0; height: 100%; font-size: 12px; line-height: 21px; color: #fff; text-align: center; background-color: #008cba; -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); -webkit-transition: width .6s ease; transition: width .6s ease; } .progress-striped .progress-bar { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 40px 40px; } .progress.active .progress-bar { -webkit-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } .progress-bar-success { background-color: #43ac6a; } .progress-striped .progress-bar-success { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-info { background-color: #5bc0de; } .progress-striped .progress-bar-info { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-warning { background-color: #e99002; } .progress-striped .progress-bar-warning { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-danger { background-color: #f04124; } .progress-striped .progress-bar-danger { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .media, .media-body { overflow: hidden; zoom: 1; } .media, .media .media { margin-top: 15px; } .media:first-child { margin-top: 0; } .media-object { display: block; } .media-heading { margin: 0 0 5px; } .media>.pull-left { margin-right: 10px; } .media>.pull-right { margin-left: 10px; } .media-list { padding-left: 0; list-style: none; } .list-group { padding-left: 0; margin-bottom: 20px; } .list-group-item { position: relative; display: block; padding: 10px 15px; margin-bottom: -1px; background-color: #fff; border: 1px solid #ddd; } .list-group-item:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .list-group-item>.badge { float: right; } .list-group-item>.badge+.badge { margin-right: 5px; } a.list-group-item { color: #555; } a.list-group-item .list-group-item-heading { color: #333; } a.list-group-item:hover, a.list-group-item:focus { text-decoration: none; background-color: #f5f5f5; } a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { z-index: 2; color: #fff; background-color: #008cba; border-color: #008cba; } a.list-group-item.active .list-group-item-heading, a.list-group-item.active:hover .list-group-item-heading, a.list-group-item.active:focus .list-group-item-heading { color: inherit; } a.list-group-item.active .list-group-item-text, a.list-group-item.active:hover .list-group-item-text, a.list-group-item.active:focus .list-group-item-text { color: #87e1ff; } .list-group-item-heading { margin-top: 0; margin-bottom: 5px; } .list-group-item-text { margin-bottom: 0; line-height: 1.3; } .panel { margin-bottom: 21px; background-color: #fff; border: 1px solid transparent; border-radius: 0; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } .panel-body { padding: 15px; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel>.list-group { margin-bottom: 0; } .panel>.list-group .list-group-item { border-width: 1px 0; } .panel>.list-group .list-group-item:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } .panel>.list-group .list-group-item:last-child { border-bottom: 0; } .panel-heading+.list-group .list-group-item:first-child { border-top-width: 0; } .panel>.table, .panel>.table-responsive>.table { margin-bottom: 0; } .panel>.panel-body+.table, .panel>.panel-body+.table-responsive { border-top: 1px solid #ddd; } .panel>.table>tbody:first-child th, .panel>.table>tbody:first-child td { border-top: 0; } .panel>.table-bordered, .panel>.table-responsive>.table-bordered { border: 0; } .panel>.table-bordered>thead>tr>th:first-child, .panel>.table-responsive>.table-bordered>thead>tr>th:first-child, .panel>.table-bordered>tbody>tr>th:first-child, .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child, .panel>.table-bordered>tfoot>tr>th:first-child, .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child, .panel>.table-bordered>thead>tr>td:first-child, .panel>.table-responsive>.table-bordered>thead>tr>td:first-child, .panel>.table-bordered>tbody>tr>td:first-child, .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child, .panel>.table-bordered>tfoot>tr>td:first-child, .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child { border-left: 0; } .panel>.table-bordered>thead>tr>th:last-child, .panel>.table-responsive>.table-bordered>thead>tr>th:last-child, .panel>.table-bordered>tbody>tr>th:last-child, .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child, .panel>.table-bordered>tfoot>tr>th:last-child, .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child, .panel>.table-bordered>thead>tr>td:last-child, .panel>.table-responsive>.table-bordered>thead>tr>td:last-child, .panel>.table-bordered>tbody>tr>td:last-child, .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child, .panel>.table-bordered>tfoot>tr>td:last-child, .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child { border-right: 0; } .panel>.table-bordered>thead>tr:last-child>th, .panel>.table-responsive>.table-bordered>thead>tr:last-child>th, .panel>.table-bordered>tbody>tr:last-child>th, .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th, .panel>.table-bordered>tfoot>tr:last-child>th, .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th, .panel>.table-bordered>thead>tr:last-child>td, .panel>.table-responsive>.table-bordered>thead>tr:last-child>td, .panel>.table-bordered>tbody>tr:last-child>td, .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td, .panel>.table-bordered>tfoot>tr:last-child>td, .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td { border-bottom: 0; } .panel>.table-responsive { margin-bottom: 0; border: 0; } .panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent; border-top-right-radius: -1; border-top-left-radius: -1; } .panel-heading>.dropdown .dropdown-toggle { color: inherit; } .panel-title { margin-top: 0; margin-bottom: 0; font-size: 17px; color: inherit; } .panel-title>a { color: inherit; } .panel-footer { padding: 10px 15px; background-color: #f5f5f5; border-top: 1px solid #ddd; border-bottom-right-radius: -1; border-bottom-left-radius: -1; } .panel-group .panel { margin-bottom: 0; overflow: hidden; border-radius: 0; } .panel-group .panel+.panel { margin-top: 5px; } .panel-group .panel-heading { border-bottom: 0; } .panel-group .panel-heading+.panel-collapse .panel-body { border-top: 1px solid #ddd; } .panel-group .panel-footer { border-top: 0; } .panel-group .panel-footer+.panel-collapse .panel-body { border-bottom: 1px solid #ddd; } .panel-default { border-color: #ddd; } .panel-default>.panel-heading { color: #333; background-color: #f5f5f5; border-color: #ddd; } .panel-default>.panel-heading+.panel-collapse .panel-body { border-top-color: #ddd; } .panel-default>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #ddd; } .panel-primary { border-color: #008cba; } .panel-primary>.panel-heading { color: #fff; background-color: #008cba; border-color: #008cba; } .panel-primary>.panel-heading+.panel-collapse .panel-body { border-top-color: #008cba; } .panel-primary>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #008cba; } .panel-success { border-color: #3c9a5f; } .panel-success>.panel-heading { color: #43ac6a; background-color: #dff0d8; border-color: #3c9a5f; } .panel-success>.panel-heading+.panel-collapse .panel-body { border-top-color: #3c9a5f; } .panel-success>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #3c9a5f; } .panel-warning { border-color: #d08002; } .panel-warning>.panel-heading { color: #e99002; background-color: #fcf8e3; border-color: #d08002; } .panel-warning>.panel-heading+.panel-collapse .panel-body { border-top-color: #d08002; } .panel-warning>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #d08002; } .panel-danger { border-color: #ea2f10; } .panel-danger>.panel-heading { color: #f04124; background-color: #f2dede; border-color: #ea2f10; } .panel-danger>.panel-heading+.panel-collapse .panel-body { border-top-color: #ea2f10; } .panel-danger>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #ea2f10; } .panel-info { border-color: #3db5d8; } .panel-info>.panel-heading { color: #5bc0de; background-color: #d9edf7; border-color: #3db5d8; } .panel-info>.panel-heading+.panel-collapse .panel-body { border-top-color: #3db5d8; } .panel-info>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #3db5d8; } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #fafafa; border: 1px solid #e8e8e8; border-radius: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, 0.15); } .well-lg { padding: 24px; border-radius: 0; } .well-sm { padding: 9px; border-radius: 0; } .close { float: right; font-size: 22.5px; font-weight: bold; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; opacity: .2; filter: alpha(opacity=20); } .close:hover, .close:focus { color: #000; text-decoration: none; cursor: pointer; opacity: .5; filter: alpha(opacity=50); } button.close { padding: 0; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; } .modal-open { overflow: hidden; } .modal { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; display: none; overflow: auto; overflow-y: scroll; } .modal.fade .modal-dialog { -webkit-transform: translate(0, -25%); -ms-transform: translate(0, -25%); transform: translate(0, -25%); -webkit-transition: -webkit-transform .3s ease-out; -moz-transition: -moz-transform .3s ease-out; -o-transition: -o-transform .3s ease-out; transition: transform .3s ease-out; } .modal.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); transform: translate(0, 0); } .modal-dialog { position: relative; z-index: 1050; width: auto; margin: 10px; } .modal-content { position: relative; background-color: #fff; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0; outline: 0; -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); background-clip: padding-box; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1030; background-color: #000; } .modal-backdrop.fade { opacity: 0; filter: alpha(opacity=0); } .modal-backdrop.in { opacity: .5; filter: alpha(opacity=50); } .modal-header { min-height: 16.428571429px; padding: 15px; border-bottom: 1px solid #e5e5e5; } .modal-header .close { margin-top: -2px; } .modal-title { margin: 0; line-height: 1.428571429; } .modal-body { position: relative; padding: 20px; } .modal-footer { padding: 19px 20px 20px; margin-top: 15px; text-align: right; border-top: 1px solid #e5e5e5; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer .btn+.btn { margin-bottom: 0; margin-left: 5px; } .modal-footer .btn-group .btn+.btn { margin-left: -1px; } .modal-footer .btn-block+.btn-block { margin-left: 0; } @media screen and (min-width:768px) { .modal-dialog { width: 600px; margin: 30px auto; } .modal-content { -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } }.tooltip { position: absolute; z-index: 1030; display: block; font-size: 12px; line-height: 1.4; opacity: 0; filter: alpha(opacity=0); visibility: visible; } .tooltip.in { opacity: .9; filter: alpha(opacity=90); } .tooltip.top { padding: 5px 0; margin-top: -3px; } .tooltip.right { padding: 0 5px; margin-left: 3px; } .tooltip.bottom { padding: 5px 0; margin-top: 3px; } .tooltip.left { padding: 0 5px; margin-left: -3px; } .tooltip-inner { max-width: 200px; padding: 3px 8px; color: #fff; text-align: center; text-decoration: none; background-color: #333; border-radius: 0; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-color: #333; border-width: 5px 5px 0; } .tooltip.top-left .tooltip-arrow { bottom: 0; left: 5px; border-top-color: #333; border-width: 5px 5px 0; } .tooltip.top-right .tooltip-arrow { right: 5px; bottom: 0; border-top-color: #333; border-width: 5px 5px 0; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-right-color: #333; border-width: 5px 5px 5px 0; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-left-color: #333; border-width: 5px 0 5px 5px; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-bottom-color: #333; border-width: 0 5px 5px; } .tooltip.bottom-left .tooltip-arrow { top: 0; left: 5px; border-bottom-color: #333; border-width: 0 5px 5px; } .tooltip.bottom-right .tooltip-arrow { top: 0; right: 5px; border-bottom-color: #333; border-width: 0 5px 5px; } .popover { position: absolute; top: 0; left: 0; z-index: 1010; display: none; max-width: 276px; padding: 1px; text-align: left; white-space: normal; background-color: #333; border: 1px solid #333; border: 1px solid transparent; border-radius: 0; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); background-clip: padding-box; } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { padding: 8px 14px; margin: 0; font-size: 15px; font-weight: normal; line-height: 18px; background-color: #333; border-bottom: 1px solid #262626; border-radius: 5px 5px 0 0; } .popover-content { padding: 9px 14px; } .popover .arrow, .popover .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover .arrow { border-width: 11px; } .popover .arrow:after { border-width: 10px; content: ""} .popover.top .arrow { bottom: -11px; left: 50%; margin-left: -11px; border-top-color: #999; border-top-color: rgba(0, 0, 0, 0.25); border-bottom-width: 0; } .popover.top .arrow:after { bottom: 1px; margin-left: -10px; border-top-color: #333; border-bottom-width: 0; content: " "} .popover.right .arrow { top: 50%; left: -11px; margin-top: -11px; border-right-color: #999; border-right-color: rgba(0, 0, 0, 0.25); border-left-width: 0; } .popover.right .arrow:after { bottom: -10px; left: 1px; border-right-color: #333; border-left-width: 0; content: " "} .popover.bottom .arrow { top: -11px; left: 50%; margin-left: -11px; border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, 0.25); border-top-width: 0; } .popover.bottom .arrow:after { top: 1px; margin-left: -10px; border-bottom-color: #333; border-top-width: 0; content: " "} .popover.left .arrow { top: 50%; right: -11px; margin-top: -11px; border-left-color: #999; border-left-color: rgba(0, 0, 0, 0.25); border-right-width: 0; } .popover.left .arrow:after { right: 1px; bottom: -10px; border-left-color: #333; border-right-width: 0; content: " "} .carousel { position: relative; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner>.item { position: relative; display: none; -webkit-transition: .6s ease-in-out left; transition: .6s ease-in-out left; } .carousel-inner>.item>img, .carousel-inner>.item>a>img { display: block; height: auto; max-width: 100%; line-height: 1; } .carousel-inner>.active, .carousel-inner>.next, .carousel-inner>.prev { display: block; } .carousel-inner>.active { left: 0; } .carousel-inner>.next, .carousel-inner>.prev { position: absolute; top: 0; width: 100%} .carousel-inner>.next { left: 100%} .carousel-inner>.prev { left: -100%} .carousel-inner>.next.left, .carousel-inner>.prev.right { left: 0; } .carousel-inner>.active.left { left: -100%} .carousel-inner>.active.right { left: 100%} .carousel-control { position: absolute; top: 0; bottom: 0; left: 0; width: 15%; font-size: 20px; color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); opacity: .5; filter: alpha(opacity=50); } .carousel-control.left { background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); } .carousel-control.right { right: 0; left: auto; background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } .carousel-control:hover, .carousel-control:focus { color: #fff; text-decoration: none; outline: 0; opacity: .9; filter: alpha(opacity=90); } .carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { position: absolute; top: 50%; z-index: 5; display: inline-block; } .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { left: 50%} .carousel-control .icon-next, .carousel-control .glyphicon-chevron-right { right: 50%} .carousel-control .icon-prev, .carousel-control .icon-next { width: 20px; height: 20px; margin-top: -10px; margin-left: -10px; font-family: serif; } .carousel-control .icon-prev:before { content: '\2039'} .carousel-control .icon-next:before { content: '\203a'} .carousel-indicators { position: absolute; bottom: 10px; left: 50%; z-index: 15; width: 60%; padding-left: 0; margin-left: -30%; text-align: center; list-style: none; } .carousel-indicators li { display: inline-block; width: 10px; height: 10px; margin: 1px; text-indent: -999px; cursor: pointer; background-color: #000 \9; background-color: rgba(0, 0, 0, 0); border: 1px solid #fff; border-radius: 10px; } .carousel-indicators .active { width: 12px; height: 12px; margin: 0; background-color: #fff; } .carousel-caption { position: absolute; right: 15%; bottom: 20px; left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } .carousel-caption .btn { text-shadow: none; } @media screen and (min-width:768px) { .carousel-control .glyphicons-chevron-left, .carousel-control .glyphicons-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { width: 30px; height: 30px; margin-top: -15px; margin-left: -15px; font-size: 30px; } .carousel-caption { right: 20%; left: 20%; padding-bottom: 30px; } .carousel-indicators { bottom: 20px; } }.clearfix:before, .clearfix:after { display: table; content: " "} .clearfix:after { clear: both; } .clearfix:before, .clearfix:after { display: table; content: " "} .clearfix:after { clear: both; } .center-block { display: block; margin-right: auto; margin-left: auto; } .pull-right { float: right!important; } .pull-left { float: left!important; } .hide { display: none!important; } .show { display: block!important; } .invisible { visibility: hidden; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .hidden { display: none!important; visibility: hidden!important; } .affix { position: fixed; } @-ms-viewport { width: device-width; } .visible-xs, tr.visible-xs, th.visible-xs, td.visible-xs { display: none!important; } @media(max-width:767px) { .visible-xs { display: block!important; } table.visible-xs { display: table; } tr.visible-xs { display: table-row!important; } th.visible-xs, td.visible-xs { display: table-cell!important; } }@media(min-width:768px) and (max-width:991px) { .visible-xs.visible-sm { display: block!important; } table.visible-xs.visible-sm { display: table; } tr.visible-xs.visible-sm { display: table-row!important; } th.visible-xs.visible-sm, td.visible-xs.visible-sm { display: table-cell!important; } }@media(min-width:992px) and (max-width:1199px) { .visible-xs.visible-md { display: block!important; } table.visible-xs.visible-md { display: table; } tr.visible-xs.visible-md { display: table-row!important; } th.visible-xs.visible-md, td.visible-xs.visible-md { display: table-cell!important; } }@media(min-width:1200px) { .visible-xs.visible-lg { display: block!important; } table.visible-xs.visible-lg { display: table; } tr.visible-xs.visible-lg { display: table-row!important; } th.visible-xs.visible-lg, td.visible-xs.visible-lg { display: table-cell!important; } }.visible-sm, tr.visible-sm, th.visible-sm, td.visible-sm { display: none!important; } @media(max-width:767px) { .visible-sm.visible-xs { display: block!important; } table.visible-sm.visible-xs { display: table; } tr.visible-sm.visible-xs { display: table-row!important; } th.visible-sm.visible-xs, td.visible-sm.visible-xs { display: table-cell!important; } }@media(min-width:768px) and (max-width:991px) { .visible-sm { display: block!important; } table.visible-sm { display: table; } tr.visible-sm { display: table-row!important; } th.visible-sm, td.visible-sm { display: table-cell!important; } }@media(min-width:992px) and (max-width:1199px) { .visible-sm.visible-md { display: block!important; } table.visible-sm.visible-md { display: table; } tr.visible-sm.visible-md { display: table-row!important; } th.visible-sm.visible-md, td.visible-sm.visible-md { display: table-cell!important; } }@media(min-width:1200px) { .visible-sm.visible-lg { display: block!important; } table.visible-sm.visible-lg { display: table; } tr.visible-sm.visible-lg { display: table-row!important; } th.visible-sm.visible-lg, td.visible-sm.visible-lg { display: table-cell!important; } }.visible-md, tr.visible-md, th.visible-md, td.visible-md { display: none!important; } @media(max-width:767px) { .visible-md.visible-xs { display: block!important; } table.visible-md.visible-xs { display: table; } tr.visible-md.visible-xs { display: table-row!important; } th.visible-md.visible-xs, td.visible-md.visible-xs { display: table-cell!important; } }@media(min-width:768px) and (max-width:991px) { .visible-md.visible-sm { display: block!important; } table.visible-md.visible-sm { display: table; } tr.visible-md.visible-sm { display: table-row!important; } th.visible-md.visible-sm, td.visible-md.visible-sm { display: table-cell!important; } }@media(min-width:992px) and (max-width:1199px) { .visible-md { display: block!important; } table.visible-md { display: table; } tr.visible-md { display: table-row!important; } th.visible-md, td.visible-md { display: table-cell!important; } }@media(min-width:1200px) { .visible-md.visible-lg { display: block!important; } table.visible-md.visible-lg { display: table; } tr.visible-md.visible-lg { display: table-row!important; } th.visible-md.visible-lg, td.visible-md.visible-lg { display: table-cell!important; } }.visible-lg, tr.visible-lg, th.visible-lg, td.visible-lg { display: none!important; } @media(max-width:767px) { .visible-lg.visible-xs { display: block!important; } table.visible-lg.visible-xs { display: table; } tr.visible-lg.visible-xs { display: table-row!important; } th.visible-lg.visible-xs, td.visible-lg.visible-xs { display: table-cell!important; } }@media(min-width:768px) and (max-width:991px) { .visible-lg.visible-sm { display: block!important; } table.visible-lg.visible-sm { display: table; } tr.visible-lg.visible-sm { display: table-row!important; } th.visible-lg.visible-sm, td.visible-lg.visible-sm { display: table-cell!important; } }@media(min-width:992px) and (max-width:1199px) { .visible-lg.visible-md { display: block!important; } table.visible-lg.visible-md { display: table; } tr.visible-lg.visible-md { display: table-row!important; } th.visible-lg.visible-md, td.visible-lg.visible-md { display: table-cell!important; } }@media(min-width:1200px) { .visible-lg { display: block!important; } table.visible-lg { display: table; } tr.visible-lg { display: table-row!important; } th.visible-lg, td.visible-lg { display: table-cell!important; } }.hidden-xs { display: block!important; } table.hidden-xs { display: table; } tr.hidden-xs { display: table-row!important; } th.hidden-xs, td.hidden-xs { display: table-cell!important; } @media(max-width:767px) { .hidden-xs, tr.hidden-xs, th.hidden-xs, td.hidden-xs { display: none!important; } }@media(min-width:768px) and (max-width:991px) { .hidden-xs.hidden-sm, tr.hidden-xs.hidden-sm, th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm { display: none!important; } }@media(min-width:992px) and (max-width:1199px) { .hidden-xs.hidden-md, tr.hidden-xs.hidden-md, th.hidden-xs.hidden-md, td.hidden-xs.hidden-md { display: none!important; } }@media(min-width:1200px) { .hidden-xs.hidden-lg, tr.hidden-xs.hidden-lg, th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg { display: none!important; } }.hidden-sm { display: block!important; } table.hidden-sm { display: table; } tr.hidden-sm { display: table-row!important; } th.hidden-sm, td.hidden-sm { display: table-cell!important; } @media(max-width:767px) { .hidden-sm.hidden-xs, tr.hidden-sm.hidden-xs, th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs { display: none!important; } }@media(min-width:768px) and (max-width:991px) { .hidden-sm, tr.hidden-sm, th.hidden-sm, td.hidden-sm { display: none!important; } }@media(min-width:992px) and (max-width:1199px) { .hidden-sm.hidden-md, tr.hidden-sm.hidden-md, th.hidden-sm.hidden-md, td.hidden-sm.hidden-md { display: none!important; } }@media(min-width:1200px) { .hidden-sm.hidden-lg, tr.hidden-sm.hidden-lg, th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg { display: none!important; } }.hidden-md { display: block!important; } table.hidden-md { display: table; } tr.hidden-md { display: table-row!important; } th.hidden-md, td.hidden-md { display: table-cell!important; } @media(max-width:767px) { .hidden-md.hidden-xs, tr.hidden-md.hidden-xs, th.hidden-md.hidden-xs, td.hidden-md.hidden-xs { display: none!important; } }@media(min-width:768px) and (max-width:991px) { .hidden-md.hidden-sm, tr.hidden-md.hidden-sm, th.hidden-md.hidden-sm, td.hidden-md.hidden-sm { display: none!important; } }@media(min-width:992px) and (max-width:1199px) { .hidden-md, tr.hidden-md, th.hidden-md, td.hidden-md { display: none!important; } }@media(min-width:1200px) { .hidden-md.hidden-lg, tr.hidden-md.hidden-lg, th.hidden-md.hidden-lg, td.hidden-md.hidden-lg { display: none!important; } }.hidden-lg { display: block!important; } table.hidden-lg { display: table; } tr.hidden-lg { display: table-row!important; } th.hidden-lg, td.hidden-lg { display: table-cell!important; } @media(max-width:767px) { .hidden-lg.hidden-xs, tr.hidden-lg.hidden-xs, th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs { display: none!important; } }@media(min-width:768px) and (max-width:991px) { .hidden-lg.hidden-sm, tr.hidden-lg.hidden-sm, th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm { display: none!important; } }@media(min-width:992px) and (max-width:1199px) { .hidden-lg.hidden-md, tr.hidden-lg.hidden-md, th.hidden-lg.hidden-md, td.hidden-lg.hidden-md { display: none!important; } }@media(min-width:1200px) { .hidden-lg, tr.hidden-lg, th.hidden-lg, td.hidden-lg { display: none!important; } }.visible-print, tr.visible-print, th.visible-print, td.visible-print { display: none!important; } @media print { .visible-print { display: block!important; } table.visible-print { display: table; } tr.visible-print { display: table-row!important; } th.visible-print, td.visible-print { display: table-cell!important; } .hidden-print, tr.hidden-print, th.hidden-print, td.hidden-print { display: none!important; } }.navbar { font-size: 13px; font-weight: 300; border: 0; } .navbar .navbar-toggle:hover .icon-bar { background-color: #b3b3b3; } .navbar-collapse { border-top-color: rgba(0, 0, 0, 0.2); -webkit-box-shadow: none; box-shadow: none; } .navbar .dropdown-menu { border: 0; } .navbar .dropdown-menu>li>a, .navbar .dropdown-menu>li>a:focus { font-size: 13px; font-weight: 300; background-color: transparent; } .navbar .dropdown-header { color: rgba(255, 255, 255, 0.5); } .navbar-default .dropdown-menu { background-color: #333; } .navbar-default .dropdown-menu>li>a, .navbar-default .dropdown-menu>li>a:focus { color: #fff; } .navbar-default .dropdown-menu>li>a:hover, .navbar-default .dropdown-menu>.active>a, .navbar-default .dropdown-menu>.active>a:hover { background-color: #272727; } .navbar-inverse .dropdown-menu { background-color: #008cba; } .navbar-inverse .dropdown-menu>li>a, .navbar-inverse .dropdown-menu>li>a:focus { color: #fff; } .navbar-inverse .dropdown-menu>li>a:hover, .navbar-inverse .dropdown-menu>.active>a, .navbar-inverse .dropdown-menu>.active>a:hover { background-color: #006687; } .btn { padding: 14px 28px; } .btn-lg { padding: 16px 32px; } .btn-sm { padding: 8px 16px; } .btn-xs { padding: 4px 8px; } .btn-group .btn~.dropdown-toggle { padding-right: 16px; padding-left: 16px; } .btn-group .dropdown-menu { border-top-width: 0; } .btn-group.dropup .dropdown-menu { margin-bottom: 0; border-top-width: 1px; border-bottom-width: 0; } .btn-group .dropdown-toggle.btn-default~.dropdown-menu { background-color: #e7e7e7; border-color: #dadada; } .btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a { color: #333; } .btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a:hover { background-color: #d3d3d3; } .btn-group .dropdown-toggle.btn-primary~.dropdown-menu { background-color: #008cba; border-color: #0079a1; } .btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a:hover { background-color: #006d91; } .btn-group .dropdown-toggle.btn-success~.dropdown-menu { background-color: #43ac6a; border-color: #3c9a5f; } .btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a:hover { background-color: #388f58; } .btn-group .dropdown-toggle.btn-info~.dropdown-menu { background-color: #5bc0de; border-color: #46b8da; } .btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a:hover { background-color: #39b3d7; } .btn-group .dropdown-toggle.btn-warning~.dropdown-menu { background-color: #e99002; border-color: #d08002; } .btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a:hover { background-color: #c17702; } .btn-group .dropdown-toggle.btn-danger~.dropdown-menu { background-color: #f04124; border-color: #ea2f10; } .btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a:hover { background-color: #dc2c0f; } .lead { color: #6f6f6f; } cite { font-style: italic; } blockquote { color: #6f6f6f; border-left-width: 1px; } blockquote.pull-right { border-right-width: 1px; } blockquote small { font-size: 12px; font-weight: 300; } table { font-size: 12px; } input, .form-control { padding: 7px; font-size: 12px; } label, .control-label, .help-block, .checkbox, .radio { font-size: 12px; font-weight: normal; } .form-group .btn, .input-group-addon, .input-group-btn .btn { padding: 8px 14px; font-size: 12px; } .nav .open>a, .nav .open>a:hover, .nav .open>a:focus { border-color: transparent; } .nav-tabs>li>a { color: #222; background-color: #e7e7e7; } .nav-tabs .caret { border-top-color: #222; border-bottom-color: #222; } .nav-pills { font-weight: 300; } .breadcrumb { font-size: 10px; font-weight: 300; text-transform: uppercase; border: 1px solid #ddd; border-radius: 3px; } .pagination { font-size: 12px; font-weight: 300; color: #999; } .pagination>li>a, .pagination>li>span { margin-left: 4px; color: #999; } .pagination>.active>a, .pagination>.active>span { color: #fff; } .pagination>li>a, .pagination>li:first-child>a, .pagination>li:last-child>a, .pagination>li>span, .pagination>li:first-child>span, .pagination>li:last-child>span { border-radius: 3px; } .pagination-lg>li>a { padding-right: 22px; padding-left: 22px; } .pagination-sm>li>a { padding: 0 5px; } .pager { font-size: 12px; font-weight: 300; color: #999; } .list-group { font-size: 12px; font-weight: 300; } .label { padding-right: 1em; padding-left: 1em; font-weight: 300; border-radius: 0; } .label-default { color: #333; background-color: #e7e7e7; } .badge { font-weight: 300; } .progress { height: 22px; padding: 2px; background-color: #f6f6f6; border: 1px solid #ccc; -webkit-box-shadow: none; box-shadow: none; } .dropdown-menu { padding: 0; margin-top: 0; font-size: 12px; } .dropdown-menu>li>a { padding: 12px 15px; } .dropdown-header { padding-right: 15px; padding-left: 15px; font-size: 9px; text-transform: uppercase; } .popover { font-size: 12px; font-weight: 300; color: #fff; } .panel-heading, .panel-footer { border-top-right-radius: 0; border-top-left-radius: 0; } .clearfix:before, .clearfix:after { display: table; content: " "} .clearfix:after { clear: both; } .clearfix:before, .clearfix:after { display: table; content: " "} .clearfix:after { clear: both; } .center-block { display: block; margin-right: auto; margin-left: auto; } .pull-right { float: right!important; } .pull-left { float: left!important; } .hide { display: none!important; } .show { display: block!important; } .invisible { visibility: hidden; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .hidden { display: none!important; visibility: hidden!important; } .affix { position: fixed; } ================================================ FILE: docs/cinder/css/cinder.css ================================================ /* Cinder Theme for MkDocs | Copyright 2015 Christopher Simpkins | MIT License */ body { font-family:"Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; background-color: #FFF; color: #343838; } h1, h2, h3, h4, h5, h6 { font-family:'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #222; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { color: #B1B7B9; } h2 { margin-top: 35px; } h1, h2 { font-weight: 700; } h4 { font-family: 'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: 300; margin-top: 20px; font-style: italic; } h5 { font-family: 'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: 300; font-variant: small-caps; } pre, code { background-color: #FCFDFF; } pre>code { font-size: 13px; } pre { margin-top: 25px; margin-bottom: 25px; } .lead { font-family:"Inter", "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 400; line-height: 1.4; letter-spacing: 0.0312em; color: #B1B7B9; } .navbar-default { background-color: #343838; border-bottom: 8px #EBF2F2 solid; } .bs-sidenav { background-image: url("../img/grid11.png"); background-repeat: repeat; font-family: Inter,"Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 13px; } .well { background-color: #FCFDFF; } .btn-default { background-color:#FCFDFF; } .table-striped > tbody > tr:nth-child(2n+1) > td, .table-striped > tbody > tr:nth-child(2n+1) > th { background-color: #FCFDFF; } #mkdocs-search-query:focus { outline: none; -webkit-box-shadow: none; box-shadow: none; } #mkdocs-search-query { font-family:"Inter", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 20px; font-weight: 700; color: #343838; height: 45px; } footer > hr { width: 35%; } ================================================ FILE: docs/cinder/css/highlight.css ================================================ /* github.com style (c) Vasily Polovnyov */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #FCFDFF; } .hljs-comment, .hljs-quote { color: #998; font-style: italic; } .hljs-keyword, .hljs-selector-tag, .hljs-subst { color: #333; font-weight: bold; } .hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr { color: #008080; } .hljs-string, .hljs-doctag { color: #d14; } .hljs-title, .hljs-section, .hljs-selector-id { color: #900; font-weight: bold; } .hljs-subst { font-weight: normal; } .hljs-type, .hljs-class .hljs-title { color: #458; font-weight: bold; } .hljs-tag, .hljs-name, .hljs-attribute { color: #000080; font-weight: normal; } .hljs-regexp, .hljs-link { color: #009926; } .hljs-symbol, .hljs-bullet { color: #990073; } .hljs-built_in, .hljs-builtin-name { color: #0086b3; } .hljs-meta { color: #999; font-weight: bold; } .hljs-deletion { background: #fdd; } .hljs-addition { background: #dfd; } .hljs-emphasis { font-style: italic; } .hljs-strong { font-weight: bold; } ================================================ FILE: docs/cinder/js/base.js ================================================ function getSearchTerm() { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == 'q') { return sParameterName[1]; } } } $(document).ready(function() { /** * ------------------------------------------------------------------------ * Taken from themes/mkdocs/js/base.js * ------------------------------------------------------------------------ */ var search_term = getSearchTerm(), $search_modal = $('#mkdocs_search_modal'), $keyboard_modal = $('#mkdocs_keyboard_modal'); if (search_term) { $search_modal.modal(); } // make sure search input gets autofocus everytime modal opens. $search_modal.on('shown.bs.modal', function() { $search_modal.find('#mkdocs-search-query').focus(); }); // Close search modal when result is selected // The links get added later so listen to parent $('#mkdocs-search-results').click(function(e) { if ($(e.target).is('a')) { $search_modal.modal('hide'); } }); if (typeof shortcuts !== 'undefined') { // Populate keyboard modal with proper Keys $keyboard_modal.find('.help.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.help]; $keyboard_modal.find('.prev.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.previous]; $keyboard_modal.find('.next.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.next]; $keyboard_modal.find('.search.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.search]; // Keyboard navigation document.addEventListener("keydown", function(e) { if ($(e.target).is(':input')) return true; var key = e.which || e.key || window.event && window.event.key; var page; switch (key) { case shortcuts.next: page = $('.navbar a[rel="next"]:first').prop('href'); break; case shortcuts.previous: page = $('.navbar a[rel="prev"]:first').prop('href'); break; case shortcuts.search: e.preventDefault(); $keyboard_modal.modal('hide'); $search_modal.modal('show'); $search_modal.find('#mkdocs-search-query').focus(); break; case shortcuts.help: $search_modal.modal('hide'); $keyboard_modal.modal('show'); break; default: break; } if (page) { $keyboard_modal.modal('hide'); window.location.href = page; } }); } $('table').addClass('table table-striped table-hover'); // Improve the scrollspy behaviour when users click on a TOC item. $(".bs-sidenav a").on("click", function() { var clicked = this; setTimeout(function() { var active = $('.nav li.active a'); active = active[active.length - 1]; if (clicked !== active) { $(active).parent().removeClass("active"); $(clicked).parent().addClass("active"); } }, 50); }); }); /** * ------------------------------------------------------------------------ * Taken from themes/mkdocs/js/base.js * ------------------------------------------------------------------------ */ $('body').scrollspy({ target: '.bs-sidebar', offset: 100 }); /* Prevent disabled links from causing a page reload */ $("li.disabled a").click(function() { event.preventDefault(); }); // See https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes // We only list common keys below. Obscure keys are omited and their use is discouraged. var keyCodes = { 8: 'backspace', 9: 'tab', 13: 'enter', 16: 'shift', 17: 'ctrl', 18: 'alt', 19: 'pause/break', 20: 'caps lock', 27: 'escape', 32: 'spacebar', 33: 'page up', 34: 'page down', 35: 'end', 36: 'home', 37: '←', 38: '↑', 39: '→', 40: '↓', 45: 'insert', 46: 'delete', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9', 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 91: 'Left Windows Key / Left ⌘', 92: 'Right Windows Key', 93: 'Windows Menu / Right ⌘', 96: 'numpad 0', 97: 'numpad 1', 98: 'numpad 2', 99: 'numpad 3', 100: 'numpad 4', 101: 'numpad 5', 102: 'numpad 6', 103: 'numpad 7', 104: 'numpad 8', 105: 'numpad 9', 106: 'multiply', 107: 'add', 109: 'subtract', 110: 'decimal point', 111: 'divide', 112: 'f1', 113: 'f2', 114: 'f3', 115: 'f4', 116: 'f5', 117: 'f6', 118: 'f7', 119: 'f8', 120: 'f9', 121: 'f10', 122: 'f11', 123: 'f12', 124: 'f13', 125: 'f14', 126: 'f15', 127: 'f16', 128: 'f17', 129: 'f18', 130: 'f19', 131: 'f20', 132: 'f21', 133: 'f22', 134: 'f23', 135: 'f24', 144: 'num lock', 145: 'scroll lock', 186: ';', 187: '=', 188: ',', 189: '‐', 190: '.', 191: '?', 192: '`', 219: '[', 220: '\', 221: ']', 222: ''', }; ================================================ FILE: docs/cinder/keyboard-modal.html ================================================ ================================================ FILE: docs/cinder/main.html ================================================ {% extends "base.html" %} {# The entry point for the MkDocs Theme. Any theme customisations should override this file to redefine blocks defined in the various templates. The custom theme should only need to define a main.html which `{% extends "base.html" %}` and defines various blocks which will replace the blocks defined in base.html and its included child templates. #} ================================================ FILE: docs/cinder/mkdocs_theme.yml ================================================ cinder_theme: true static_templates: - 404.html include_search_page: false search_index_only: false shortcuts: help: 191 # ? next: 78 # n previous: 80 # p search: 83 # s ================================================ FILE: docs/cinder/nav-sub.html ================================================ {% if not nav_item.children %}
  • {{ nav_item.title }}
  • {% else %} {% endif %} ================================================ FILE: docs/cinder/nav.html ================================================ ================================================ FILE: docs/cinder/search-modal.html ================================================ ================================================ FILE: docs/cinder/toc.html ================================================ ================================================ FILE: docs/docs/custom/style.css ================================================ @media (min-width: 992px) { /* Allow the sidebar to scroll if it overflows the page. */ .bs-sidebar { overflow-y: scroll; } } .btn.btn-primary { /* Change for github issues buttons. */ border-radius: 30px; font-size: 15px; } ================================================ FILE: docs/docs/faq.md ================================================ ## Frequently asked questions ### General * Why doesn’t **regenie** need a genetic relatedness matrix (GRM)? **regenie** performs whole genome regression using the following model $$Y = X\beta + \epsilon$$ where \(Y_{N\times 1}\) is a phenotype, \(X_{N\times M}\) is a genotype matrix, and \(\epsilon_i\sim N(0,\sigma^2)\). This model has close ties to a linear mixed model (LMM) based on an infinitesimal model $$Y = u + \epsilon$$ where \(u\sim N(0,\sigma_u^2 K)\) with \(K_{N\times N}=XX^T/M\) is referred to as the genetic relatedness matrix (GRM). In the LMM, the polygenic effects have been integrated out so that model only involves the GRM $K$ through a variance component in the covariance matrix of the trait. In **regenie**, we directly estimate the polygenic effects parameter \(\beta\) by using ridge regression, which corresponds to fitting a linear regression model with a L2 penalty to impose shrinkage. Hence, we bypass having to use the GRM \(K\) and use the polygenic effect estimates \(X\hat{\beta}\) to control for population structure when testing variants for association.
    * Can **regenie** be run on small sample sizes? For quantitative traits, we have not obtained issues running **regenie** on small data sets. For binary traits, we have obtained successful runs of **regenie** (step 1 and 2) on data sets with as little as 300 samples. A few factors to consider: 1. Convergence issues may occur in step 1 (all the more if a trait is highly unbalanced) \(-\) see below 2. Similarly, convergence issues may occur in step 2 when using Firth approximation \(-\) see below Note: we have found that **regenie** can get conservative in more extreme relatedness scenarios so we recommend not to use it for smaller cohorts with high amounts of relatedness like founder populations where exact mixed-model methods can be used ### Step 1 * What block size to use in step 1? We recommend to use blocks of size 1000 as we have observed that it leads to a reasonable number of ridge predictors at level 1 (e.g. 2,500 with 500K SNPs used and the default **regenie** parameters) and have noticed little change in the final predictions when varying the block size.
    * How many variants to use in step 1? We recommend to use a smaller set of about 500K directly genotyped SNPs in step 1, which should be sufficient to capture genome-wide polygenic effects. Note that using too many SNPs in Step 1 (e.g. >1M) can lead to a high computational burden due to the resulting higher number of predictors in the level 1 models.
    * What do I do if I get the error "Uh-oh, SNP XX has low variance (=XX)" in step 1? This is due to variants with very low minor allele count (MAC) being included in step 1. To avoid this, you should use a MAC filter to remove such variants in a pre-processing step before running Regenie. For example, in PLINK2 you would use the `--mac` option and obtain a list of variants that pass the MAC filter (note that if you are using `--keep/--remove` in Regenie, you should also use it in the PLINK2 command) ``` plink2 \ --bfile my_bed_file \ --mac 100 \ --write-snplist \ --out snps_pass ``` You would then use the output file in **regenie** as `--extract snps_pass.snplist` (and this would avoid having to make a new genotype file).
    * What to do if Step 1 of **regenie** failed for a binary trait when fitting the penalized logsitic regression model? This can occur when the sample size used to fit the model is small and/or if the trait is extremely unbalanced. 1. If using K-fold CV, switch to LOOCV (option `--loocv`) to increase the size of the sample used to fit the model (note: LOOCV is now used by default when the sample size is below 5,000) 2. If it is due to quasi-separation (i.e. `Var(Y)=0` occurred in model fitting), either increase the sample size using LOOCV or increase the MAF threshold for variants included in step 1 analysis ### Step 2 * What to do if Step 2 of **regenie** fails when fitting the null model for the approximate Firth correction? This can occur when the sample size used to fit the model is small and/or if the trait is extremely unbalanced. We have implemented the same measures as in the `logistf` function in R to avoid convergence issues, which include the use of a step size threshold when performing a Newton step. 1. We first try fitting the model with a step size threshold that is more liberal (=25) as well as a maximum number of iterations of 1,000 and if convergence fails, we retry the model fit using a more stringent step size threshold (=5) and a higher threshold for the number of iterations (=5,000), which will slow down convergence. 2. The user can also specify a maximum step size threshold using `--maxstep-null` (use value <5) as well as increase the maximum number of iterations using `--maxiter-null` (use value >5000). In that case, no retries are perfomed if convergence fails. - We recommend to test chromosomes separately (using `--chr`) as these parameters may need to be altered when fitting the null model for each chromosome
    * What is reported in A1FREQ when building masks? - For the `max` and `comphet` rules, the resulting burden masks take on values in [0,2] just like single variants so we compute A1FREQ the same way as done for single variants (i.e. mean(G)/2 where G is a genotype vector). - For the `sum` rule, A1FREQ is computed as the average of the effect allele frequencies across all sites included in the mask.
    * How is missingness handled in the genotype data? Missing genotypes are imputed with per-SNP averages when performing association tests (note: the genotype summaries reported like AAF, INFO are only based on non-missing genotypes). ================================================ FILE: docs/docs/index.md ================================================ ## regenie **regenie** is a C++ program for whole genome regression modelling of large [genome-wide association studies](https://en.wikipedia.org/wiki/Genome-wide_association_study). It is developed and supported by a team of scientists at the Regeneron Genetics Center. The method has the following properties - It works on quantitative and binary traits, including binary traits with unbalanced case-control ratios - It can handle population structure and relatedness - It can process multiple phenotypes at once efficiently - For binary traits, it supports Firth logistic regression and an SPA test - It can perform gene/region-based tests (Burden, [SBAT](https://doi.org/10.1016/j.ajhg.2024.08.021), SKAT/SKATO, ACATV/ACATO) - It can perform interaction tests (GxE, GxG) as well as conditional analyses - Meta-analysis of REGENIE summary statistics can be performed using [REMETA](https://rgcgithub.github.io/remeta/) - It is fast and memory efficient 🔥 - It supports the [BGEN](https://www.well.ox.ac.uk/~gav/bgen_format/), [PLINK](https://www.cog-genomics.org/plink/1.9/formats#bed) bed/bim/fam and [PLINK2](https://www.cog-genomics.org/plink/2.0/formats#pgen) pgen/pvar/psam genetic data formats - It is ideally suited for implementation in [Apache Spark](https://spark.apache.org/) (see [GLOW](https://projectglow.io/)) - It can be installed with [Conda](https://anaconda.org/bioconda/regenie) ##Citation Mbatchou, J., Barnard, L., Backman, J. et al. Computationally efficient whole-genome regression for quantitative and binary traits. Nat Genet 53, 1097–1103 (2021). [https://doi.org/10.1038/s41588-021-00870-7](https://doi.org/10.1038/s41588-021-00870-7) ## License **regenie** is distributed under an [MIT license](https://github.com/rgcgithub/regenie/blob/master/LICENSE). ## Contact If you have any questions about **regenie** please contact - - If you want to submit a issue concerning the software please do so using the **regenie** [Github repository](https://github.com/rgcgithub/regenie/issues). ================================================ FILE: docs/docs/install.md ================================================ ##Download The **regenie** source code is hosted on [Github](https://github.com/rgcgithub/regenie). ##Installation

    Pre-requisites

    regenie requires compilation with GCC version >= 5.1 (on Linux) or Clang version >=3.3 (on Mac OSX). It also requires having GFortran library installed.
    ### Pre-compiled binaries Pre-compiled binaries are available in the [Github repository](https://github.com/rgcgithub/regenie/releases). These are provided for Linux (including Centos7) and Mac OSX computing environments and are statically linked. For the Linux binaries, users should have GLIBC version >= 2.22 installed. Additionally, they are provided compiled with Intel MKL library which will provide speedups for many of the operations done in **regenie**. ### Standard installation 1. **regenie** requires the [BGEN library](https://enkre.net/cgi-bin/code/bgen/dir?ci=trunk) so you will need to download and install that library. 2. Edit the BGEN_PATH variable in the `Makefile` to the BGEN library path. 3. On the command line type `make` while in the main source code directory. 4. This should produce the executable called `regenie`. **regenie** has been enhanced to allow for gzip compressed input (for phenotype/covariate files) and output (for association results files) using the Boost Iostream library. If this library is installed on the system, you should compile using `make HAS_BOOST_IOSTREAM=1`. Furthermore, we have enabled compilation of **regenie** with the Intel Math Kernel (MKL) library. You first need to have it installed on your system and modify the MKLROOT variable in the `Makefile` to the installed MKL library path. ### With CMake You can compile the binary using CMake version >=3.13 (instead of `make` as above). ``` mkdir -p build cd build BGEN_PATH= cmake .. make ``` This will generate the binary in the `build/` subdirectory. To use with Boost Iostreams and/or Intel MKL library, add the corresponding flags before the `cmake` command on line 3 (e.g. `BGEN_PATH= HAS_BOOST_IOSTREAM=1 cmake ..`). ### With Docker Alternatively, you can use a Docker image to run **regenie**. A guide to using docker is available on the [Github page](https://github.com/rgcgithub/regenie/wiki/Using-docker). ### With conda To install with [conda](https://anaconda.org/bioconda/regenie), you can use the following commands: ``` # create new environment conda create -n regenie_env -c conda-forge -c bioconda regenie # load it conda activate regenie_env ``` ##Computing requirements We have tested **regenie** on 64-bit Linux and 64-bit Mac OSX computing environments. Note that for Mac OSX computing environments, compiling is done without OpenMP, as the library is not built-in by default and has to be installed separately. ### Memory usage In both Step 1 and Step 2 of a **regenie** run the genetic data file is read once, in blocks of SNPs, so at no point is the full dataset ever stored in memory. **regenie** uses a dimension reduction approach using ridge regression to produce a relatively small set of genetic predictors, that are then used to fit a whole-genome regression model. These genetic predictors are stored in memory by default, and can be relatively large if many phenotypes are stored at once. For example, if there are \(P\) phenotypes, \(M\) SNPs and \(N\) samples, and a block size of \(B\) SNPs is used with \(R\) ridge parameters, then **regenie** needs to store roughly \(N\times M/B\times R\) doubles per phenotype, which is 8Gb per phenotype when \(M=500,000, N=400,000, B =1,000,R=5\) and 200Gb in total when \(P=25\). However, the `--lowmem` option can be used to avoid that memory usage, at negligible extra computational cost, by writing temporary files to disk. ### Threading **regenie** can take advantage of multiple cores using threading. The number of threads can be specified using the `--threads` option. **regenie** uses the [Eigen library](http://eigen.tuxfamily.org/index.php?title=Main_Page) for efficient linear algebra operations and this uses threading where possible. For PLINK bed/bim/fam files, PLINK2 pgen/pvar/psam files, as well as BGEN v1.2 files with 8-bit encoding (format used for UK Biobank 500K imputed data), step 2 of **regenie** has been optimized by using multithreading through [OpenMP](https://www.openmp.org). When running the SKAT/ACAT gene-based tests, we recommend to use at most 2 threads and instead parallelize the runs over partitions of the genome (e.g. groups of genes). ### For Windows platforms If you are on a Windows machine, we recommend to use [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install) (WSL) to install a Ubuntu distribution so that you will be able to run REGENIE from a Linux terminal. You can download pre-compiled REGENIE binaries from the [Github repository](https://github.com/rgcgithub/regenie/releases) (note that you will need to install the `libgomp1` library). Note: from your Windows command prompt, you can run REGENIE using `wsl regenie`. ================================================ FILE: docs/docs/options.md ================================================ ## Getting started To run **regenie**, use the command `./regenie` on the command line, followed by options and flags as needed. To get a full list of options use ``` ./regenie --help ``` The directory `examples/` contains some small example files that are useful when getting started. A test run on a set of binary traits can be achieved by the following 2 commands. In **Step 1**, the whole genome regression model is fit to the traits, and a set of genomic predictions are produced as output ``` ./regenie \ --step 1 \ --bed example/example \ --exclude example/snplist_rm.txt \ --covarFile example/covariates.txt \ --phenoFile example/phenotype_bin.txt \ --remove example/fid_iid_to_remove.txt \ --bsize 100 \ --bt --lowmem \ --lowmem-prefix tmp_rg \ --out fit_bin_out ``` In **Step 2**, a set of imputed SNPs are tested for association using a Firth logistic regression model ``` ./regenie \ --step 2 \ --bgen example/example.bgen \ --covarFile example/covariates.txt \ --phenoFile example/phenotype_bin.txt \ --remove example/fid_iid_to_remove.txt \ --bsize 200 \ --bt \ --firth --approx \ --pThresh 0.01 \ --pred fit_bin_out_pred.list \ --out test_bin_out_firth ``` One of the output files from these two commands is included in `example/test_bin_out_firth_Y1.regenie`. ## Basic options ### Input | Option | Argument | Type | Description| |---|-------|------|----| |`--bgen, --bed, --pgen` | FILE | Required |Input genetic data file. Either BGEN file eg. `file.bgen`, or bed/bim/fam prefix that assumes`file.bed`, `file.bim`, `file.fam` exist, or pgen/pvar/psam prefix that assumes`file.pgen`, `file.pvar`, `file.psam` exist | |`--sample` | FILE | Optional |Sample file corresponding to input BGEN file| |`--bgi` | FILE | Optional |Index bgi file corresponding to input BGEN file| |`--ref-first` | FLAG | Optional |Specify to use the first allele as the reference allele for BGEN or PLINK bed/bim/fam file input [default is to use the last allele as the reference]| |`--keep` | FILE | Optional | Inclusion file that lists individuals to retain in the analysis| |`--remove` | FILE | Optional | Exclusion file that lists individuals to remove from the analysis| |`--extract` | FILE | Optional | Inclusion file that lists IDs of variants to keep| |`--exclude` | FILE | Optional | Exclusion file that lists IDs of variants to remove| |`--extract-or` | FILE | Optional | Inclusion file that lists IDs of variants to keep regardless of minimum MAC filter| |`--exclude-or` | FILE | Optional | Exclusion file that lists IDs of variants to remove unless MAC is above threshold| |`--phenoFile` | FILE | Required |Phenotypes file| |`--phenoCol` | STRING | Optional | Use for each phenotype you want to include in the analysis| |`--phenoColList` | STRING | Optional | Comma separated list of phenotypes to include in the analysis| |`--eventColList` | STRING | Optional | Comma separated list of columns in the phenotype file to include in the analysis that contain the event times | |`--phenoExcludeList` | STRING | Optional | Comma separated list of phenotypes to ignore from the analysis| |`--covarFile` | FILE | Optional | Covariates file| |`--covarCol` | STRING | Optional | Use for each covariate you want to include in the analysis| |`--covarColList` | STRING | Optional | Comma separated list of covariates to include in the analysis| |`--catCovarList` | STRING | Optional | Comma separated list of categorical covariates to include in the analysis| |`--covarExcludeList` | STRING | Optional | Comma separated list of covariates to ignore| |`--pred` | FILE | Optional | File containing predictions from Step 1 (see Overview). **This is required for `--step 2`**| |`--tpheno-file`| STRING| Optional| to use a phenotype file in transposed format (e.g. BED format)| |`--tpheno-indexCol`| INT| Optional| index of phenotype name column in transposed phenotype file| |`--tpheno-ignoreCols`| INT| Optional| indexes of columns to ignore in transposed phenotype file| |`--iid-only`| FLAG | Optional| to specify if header in transposed phenotype file only contains sample IID (assume FID=IID)| Note: Parameter expansion can be used when specifying phenotypes/covariates (e.g. `--covarCol PC{1:10}`). Also, multiple files can be specified for `--extract/--exclude/--keep/--remove` by using a comma-separated list. #### Genetic data file format **regenie** can read BGEN files, bed/bim/fam files or pgen/psam/pvar files in Step 1 and Step 2. The BGEN file format is described [here](https://www.well.ox.ac.uk/~gav/bgen_format/). The bed/bim/fam file format is described [here](https://www.cog-genomics.org/plink/1.9/formats). The pgen/pvar/psam file format is described [here](https://www.cog-genomics.org/plink/2.0/formats#pgen). Tools useful for genetic data file format conversion are : [PLINK](http://www.cog-genomics.org/plink/), [QCTOOL](https://www.well.ox.ac.uk/~gav/qctool/), [BCFTOOLS](https://samtools.github.io/bcftools/). Step 2 of **regenie** can be sped up by using BGEN files using v1.2 format with 8 bits encoding (genotype file can be generated with [PLINK2](https://www.cog-genomics.org/plink/2.0/) using option `--export bgen-1.2 'bits=8'`) as well as having an accompanying .bgi index file (a useful tool to create such file is bgenix which is part of the BGEN library). To include X chromosome genotypes in step 1 and/or step 2, males should be coded as diploid so that their genotypes are 0/2 (this is done automatically for BED and PGEN file formats with haploid genotypes). Chromosome values of 23 (for human analyses), X, Y, XY, PAR1 and PAR2 are all acceptable and will be collapsed into a single chromosome. ##### Sample inclusion/exclusion file format ``` 2 2 7 7 . ``` No header. Each line starts with individual FID IID. Space/tab separated. Samples listed in the file that are not in bgen/bed/pgen file are ignored. ##### Variant inclusion/exclusion file format ``` 20 31 . ``` No header. Each line must start with variant ID (if there are additional columns, file must be space/tab separated). Variants listed in this file that are not in bgen/bed/pgen file are ignored. #### Covariate file format ``` FID IID V1 V2 V3 1 1 1.46837294454993 1.93779743016325 0.152887004505393 2 2 -1.2234390803815 -1.63408619199948 -0.190201446835255 3 3 0.0711531925667286 0.0863906292357564 0.14254739715665 . ``` Line 1 : Header with FID, IID and \(C\) covariate names. Followed by lines of \(C+2\) values. Space/tab separated. Each line contains individual FID and IID followed by \(C\) covariate values. Samples listed in this file that are not in bgen/bed/pgen file are ignored. Genotyped samples that are not in this file are removed from the analysis as well as samples with missing values at any of the covariates included. If `--step 2` is specified, then the covariate file should be the same as that used in Step 1. #### Phenotype file format ``` FID IID Y1 Y2 1 1 1.64818554321186 2.2765234736685 2 2 -2.67352013711554 -1.53680421614647 3 3 0.217542851471485 0.437289912695016 . ``` Line 1 : Header with FID, IID and \(P\) phenotypes names. Followed by lines of \(P+2\) values. Space/tab separated. Each line contains individual FID and IID followed by P phenotype values (for binary traits, must be coded as 0=control, 1=case, NA=missing unless using `--1`). Samples listed in this file that are not in bgen/bed/pgen file are ignored. Genotyped samples that are not in this file are removed from the analysis. Missing values must be coded as NA. With QTs, missing values are mean-imputed in Step 1 and they are dropped when testing each phenotype in Step 2 (unless using `--force-impute`). With BTs, missing values are mean-imputed in Step 1 when fitting the level 0 linear ridge regression and they are dropped when fitting the level 1 logistic ridge regression for each trait . In Step 2, missing values are dropped when testing each trait. To remove all samples that have missing values at **any** of the \(P\) phenotypes, use option `--strict` in Step 1 and 2. If using the transposed phenotype file format with option `--tpheno-file`, the header line must contain subject IDs as "FID_IID", otherwise use option `--iid-only` and only include IIDs (so will assume FID=IID). #### Predictions file format Running `--step 1 --out foo` will produce 1. A set of files containing genomic predictions for each phenotype from Step 1 (see Output section below). 2. A file called `foo_pred.list` listing the locations of the prediction files. The file list is needed as an input file when using `--step 2` via the `--pred` option. It has one line per phenotype (in any order) that specifies the name of the phenotype and its corresponding prediction file name. Each phenotype must have exactly one prediction file and phenotype names must match with those in the phenotype file. Phenotypes in this file not included in the analysis are ignored. Each prediction file contains the genetic predictions for the phenotype (space separated). Line 1 starts with 'FID_IID' followed by $N$ sample identifiers. It is followed by 23 lines containing the genetic predictions for each chromosome (sex chromosomes are collapsed into chromosome 23). More specifically, each line has $N+1$ values which are the chromosome number followed by the $N$ leave-one chromosome out (LOCO) predictions for each individual. Samples in this file not in the bed/pgen/bgen input file are ignored. Genotyped samples not present in this file will be ignored in the analysis of the corresponding trait. Samples with missing LOCO predictions must have their corresponding phenotype value set to missing. ### Options | Option | Argument | Type | Description| |---|-------|------|----| |`--step`| INT| Required| specify step for the regenie run (see Overview) [argument can be `1` or `2`] | |`--qt`| FLAG| Optional| specify that traits are quantitative (this is the default so can be ommitted)| |`--bt`| FLAG| Optional| specify that traits are binary with 0=control,1=case,NA=missing| |`--t2e`| FLAG| Optional| specify that traits are time-to-event data with 0=censoring,1=event,NA=missing in event column| |`-1,--cc12`| FLAG| Optional| specify to use 1/2/NA encoding for binary traits (1=control,2=case,NA=missing)| |`--bsize`| INT| Required| size of the genotype blocks| |`--cv`| INT| Optional| number of cross validation (CV) folds [default is 5]| |`--loocv`| FLAG | Optional| flag to use leave-one out cross validation| |`--lowmem`| FLAG | Optional | flag to reduce memory usage by writing level 0 predictions to disk (details below). This is very useful if the number of traits is large (e.g. greater than 10)| |`--lowmem-prefix`| FILE PREFIX | Optional | prefix where to temporarily write the level 0 predictions| |`--split-l0`| PREFIX,N | Optional | split level 0 across N jobs and set prefix of output files of level 0 predictions| |`--run-l0`| FILE,K | Optional | run level 0 for job K in {1..N} specifying the master file created from '--split-l0'| |`--run-l1`| FILE | Optional | run level 1 specifying the master file from '--split-l0'| |`--l1-phenoList` | STRING | Optional | to specify a subset of phenotypes to analyze when using `--run-l1`| |`--keep-l0`| FLAG | Optional | avoid deleting the level 0 predictions written on disk after fitting the level 1 models| |`--print-prs`|FLAG| Optional| flag to print whole genome predictions (i.e. PRS) without using LOCO scheme| |`--force-step1`|FLAG| Optional| flag to run step 1 when >1M variants are used (not recommened)| |`--minCaseCount`| INT | Optional | flag to ignore BTs with low case counts [default is 10]| |`--apply-rint`| FLAG | Optional| to apply Rank Inverse Normal Transformation (RINT) to quantitative phenotypes (use in both Step 1 & 2)| |`--nb`| INT| Optional| number of blocks (determined from block size if not provided)| |`--strict`|FLAG| Optional| flag to removing samples with missing data at any of the phenotypes| |`--ignore-pred`|FLAG| Optional| skip reading the file specified by `--pred` (corresponds to simple linear/logistic regression)| |`--htp`|STRING| Optional| to output the summary statistics file in the [HTP](https://rgcgithub.github.io/remeta/file_formats/#-htp) format (string should correspond to cohort name, e.g. 'UKB_450_EUR')| |`--exact-p`|FLAG| Optional|avoid capping p-values at 2.2E-307 in the HTP format summary statistics output| |`--use-relative-path`| FLAG| Optional| to use relative paths instead of absolute ones for the step 1 output pred.list file| |`--use-prs`|FLAG| Optional| flag to use whole genome PRS in `--pred` (this is output in step 1 when using `--print-prs`)| |`--gz`|FLAG| Optional| flag to output files in compressed gzip format (LOCO prediction files in step 1 and association results files in step 2) **[this only works when compiling with Boost Iostream library (see Install tab)]**. |`--force-impute`|FLAG| Optional| flag to keep and impute missing observations for QTs in step 2| |`--write-samples`|FLAG| Optional| flag to write sample IDs for those kept in the analysis for each trait in step 2| |`--print-pheno`|FLAG| Optional| flag to write phenotype name in the first line of the sample ID files when using `--write-samples`| |`--firth`| FLAG | Optional | specify to use Firth likelihood ratio test (LRT) as fallback for p-values less than threshold| |`--approx`|FLAG | Optional| flag to use approximate Firth LRT for computational speedup (only works when option `--firth` is used)| |`--firth-se`| FLAG | Optional | flag to compute SE based on effect size and LRT p-value when using Firth correction (instead of based on Hessian of unpenalized log-likelihood)| |`--write-null-firth`| FLAG| Optional| to write the null estimates for approximate Firth [can be used in step 1 or 2] | |`--compute-all`| FLAG| Optional| to write the null Firth estimates for all chromosomes (regardless of the genotype file) | |`--use-null-firth`| FILE| Optional| to use stored null estimates for approximate Firth in step 2 | |`--spa`| FLAG | Optional| specify to use Saddlepoint approximation as fallback for p-values less than threshold| |`--pThresh`| FLOAT | Optional| P-value threshold below which to apply Firth/SPA correction [default is 0.05] |`--test`| STRING | Optional | specify to carry out dominant or recessive test [default is additive; argument can be `dominant` or `recessive`]| |`--chr`| INT| Optional| specify which chromosomes to test in step 2 (use for each chromosome to include)| |`--chrList` | STRING | Optional | Comma separated list of chromosomes to test in step 2| |`--range` | STRING | Optional | specify chromosome region for variants to test in step 2 [format=CHR:MINPOS-MAXPOS] | |`--minMAC`| FLOAT| Optional| flag to specify the minimum minor allele count (MAC) when testing variants [default is 5]. Variants with lower MAC are ignored.| |`--minINFO`| FLOAT| Optional| flag to specify the minimum imputation info score (IMPUTE/MACH R^2) when testing variants. Variants with lower info score are ignored.| |`--sex-specific` | STRING | Optional | to perform sex-specific analyses [either 'male'/'female']| |`--af-cc`| FLAG | Optional| to output A1FREQ in case/controls separately in the step 2 result file| |`--no-split`|FLAG| Optional| flag to have summary statistics for all traits output in the same file| |`--starting-block`| INT| Optional| to start step 2 at a specific block/set number (useful if program crashes during a job)| |`--nauto`| INT| Optional| number of autosomal chromosomes (for non-human studies) [default is 22]| |`--maxCatLevels`| INT| Optional| maximum number of levels for categorical covariates (for non-human studies) [default is 10]| |`--niter`| INT| Optional| maximum number of iterations for logistic regression [default is 30]| |`--maxstep-null`| INT| Optional| maximum step size for logistic model with Firth penalty under the null [default is 25]| |`--maxiter-null`| INT| Optional| maximum number of iterations for logistic model with Firth penalty under the null [default is 1000]| |`--par-region` | STRING | Optional | specify build code to determine bounds for PAR1/PAR2 regions (can be 'b36/b37/b38/hg18/hg19/hg38' or 'start,end' bp bounds of non-PAR region) [default is hg38]| |`--force-qt`| FLAG | Optional | force QT run for binary traits| |`--threads`| INT | Optional| number of computational threads to use [default=all-1]| |`--debug`| FLAG | Optional | debug flag (for use by developers)| |`--verbose`| FLAG | Optional| verbose screen output| |`--version`| FLAG | Optional| print version number and exit| |`--help`| FLAG | Optional| Prints usage and options list to screen| When step 1 of **regenie** is run in low memory mode (i.e. using `--lowmem`), temporary files are created on disk (using `--lowmem-prefix tmp_prefix` determines where the files are written [as in `tmp_prefix_l0_Y1`,...,`tmp_prefix_l0_YP` for P phenotypes]). If the prefix is not specified, the default is to use the prefix specified by `--out` (see below). These are automatically deleted at the end of the program (unless the run was not successful in which case the user would need to delete the files) See the [Wiki page](https://github.com/rgcgithub/regenie/wiki/Further-parallelization-for-level-0-models-in-Step-1) for more details on how to run the level 0 models for Step 1 of **regenie** in parallel. ### Output | Option | Argument | Type | Description| |---|-------|------|----| |`--out`| FILE PREFIX| Required| Output files that depends on `--step`| A log file `file.log` of the output is generated. **Using `--step 1 --out file`** For the \(P\) phenotypes, files `file_1.loco`,...,`file_P.loco` are output with the per-chromosome LOCO predictions as rows of the files (following the order of the phenotypes in the phenotype file header). If option `--gz` was used, the files will be compressed in gzip format and have extension `.loco.gz`. Genotyped individuals specified using option `--remove` are excluded from this file. Individuals with missing phenotype values kept in the analysis are included in the file and have their predictions set to missing. The list of blup files needed for step 2 (association testing) is written to `file_pred.list`. If using `--print-prs`, files `file_1.prs`,...,`file_P.prs` will be written with the whole genome predictions (i.e. PRS) without using LOCO scheme (similar format as the .loco files). The list of these files is written to `file_prs.list` and can be used in step 2 with `--pred` and specifying flag `--use-prs`. Note that as these are not obtained using a LOCO scheme, association tests could suffer from proximal contamination. If using option `--write-null-firth`, the estimates for approximate Firth under the null will be written to files `file_1.firth,...,file_P.firth` and the list of these files is written to `file_firth.list`. This can be used in step 2 as `--use-null-firth file_firth.list`. Note that it assumes the same set of covariates are used in Step 1 and 2. **Using`--step 2 --out file`** By default, results are written in separate files for each phenotype `file_.regenie,...,file_.regenie`. Each file has one line per SNP along with a header line. If option `--gz` was used, the files will be compressed in gzip format and have extension `.regenie.gz`. The entries of each row specify chromosome, position, ID, reference allele (allele 0), alternative allele (allele 1), frequency of the alternative allele, sample size and the test performed (additive/dominant/recessive). With BGEN/PGEN files with dosages, the imputation INFO score is provided (IMPUTE info score for BGEN and Mach Rsq for PGEN). Allele frequency, sample size and INFO score, if applicable, are computed using only non-missing samples for each phenotype. These are followed by the estimated effect sizes (for allele 1 on the original scale), standard errors, chi-square test statistics and \(-\log_{10}\) p-value. An additional column is included to specify if Firth/SPA corrections failed. With option `--no-split`, the summary statistics for all traits are written to a single file `file.regenie`, with the same format as above. Additionaly, an accompanying file with the trait names corresponding to Y1,Y2,... will be generated in ‘file.regenie.Ydict’. Note that allele frequency, sample size and INFO score are computed using all analyzed samples. With option `--htp`, the summary statistics file will follow the [HTP](https://rgcgithub.github.io/remeta/file_formats/#-htp) format. If option `--write-samples` was used, IDs of samples used for each trait will be written in files `file_.regenie.ids,...,file_.regenie.ids` (tab separated, no header). When using `--par-region`, the default boundaries used for the chrX PAR regions are: * b36/hg18: 2709520 and 154584238 * b37/hg19: 2699520 and 154931044 * b38/hg38: 2781479 and 155701383 ## Gene-based testing Starting from version 3.0, Step 2 of **regenie** provides a complimentary set of gene-based test in addition to the burden testing functionality introduced in version 2.0. More specifically, for a given set of variants (eg within a gene) which can be defined using functional annotations, **regenie** can apply various set-based tests on the variants as well as collapse them into a single combined 'mask' genotype that can be tested for association just like a single variant. ### Input | Option | Argument | Type | Description| |---|-------|------|----| |`--anno-file` | FILE | Required | File with variant annotations for each set| |`--set-list` | FILE | Required | File listing variant sets| |`--extract-sets` | FILE | Optional | Inclusion file that lists IDs of variant sets to keep| |`--exclude-sets` | FILE | Optional | Exclusion file that lists IDs of variant sets to remove| |`--extract-setlist` | STRING | Optional | Comma-separated list of variant sets to keep| |`--exclude-setlist` | STRING | Optional | Comma-separated list of variant sets to remove| |`--aaf-file` | FILE | Optional | File with variant AAF to use when building masks (instead of AAF estimated from sample)| |`--mask-def` | FILE | Required | File with mask definitions using the annotations defined in `--anno-file`| Note: multiple files can be specified for `--extract-sets/--exclude-sets` by using a comma-separated list. #### Annotation input files The following files are used to define variant sets and functional annotations which will be used to generate masks. ##### Annotation file ```bash 1:55039839:T:C PCSK9 LoF 1:55039842:G:A PCSK9 missense . ``` This file defines functional annotations for variants. It is designed to accommodate for variants with separate annotations for different sets/genes. Each line contains the variant name, the set/gene name and a single annotation category (space/tab separated). Variants not in this file will be assigned to a default "NULL" category. A maximum of 63 annotation categories (+NULL category) is allowed. For gene sets, tools you can use to obtain variant annotations per transcripts are [snpEFF](https://pcingola.github.io/SnpEff/se_introduction/) or [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html). To obtain a single annotation per gene, you could choose the most deleterious functional annotation across the gene transcripts or alternatively use the canonical transcript (note that its definition can vary across software). We have implemented an extended 4-column format of the annotation file which also categorizes sets into domains (e.g. for gene sets, these would correspond to gene domains). ```bash 1:55039839:T:C PCSK9 Prodomain LoF 1:55039842:G:A PCSK9 Prodomain missense . ``` Masks will be generated for each domain (maximum of 8 per set/gene) in addition to a mask combining across all domains. Variants can only be assigned to a single domain for each set/gene. Starting with v4.1, you can also specify custom variant weights which will be used in the burden, SKAT/SKAT-O and ACAT-V tests ($w_i$'s in the [gene-based testing overview](../overview/#step-2-gene-based-testing)). Multiple weights can be included in the annotation file after the 3rd column, e.g. ```bash 1:55039839:T:C PCSK9 LoF 0.9 0.812 1 1:55039842:G:A PCSK9 missense 0.4 0.23 0.55 . ``` Using `--weights-col 4` will use weights in the 4-th column for the gene-based tests. ##### Set list file This file lists variants within each set/gene to use when building masks. Each line contains the set/gene name followed by a chromosome and physical position for the set/gene, then by a comma-separated list of variants included in the set/gene. ```bash A1BG 19 58346922 19:58346922:C:A,19:58346924:G:A,... A1CF 10 50806630 10:50806630:A:G,10:50806630:A:AT,... . ``` ##### Set inclusion/exclusion file format The file must have a single column of set/gene names corresponding to those in the set list file. ```bash PIGP ZBTB38 . ``` ##### AAF file (optional) Both functional annotations and alternative allele frequency (AAF) cutoffs are used when building masks (e.g. only considering LoF sites where AAF is below 1%). By default, the AAF for each variant is computed from the sample but alternatively, the user can specify variant AAFs using this file. Each line contains the variant name followed by its AAF (it should be for the ALT allele used in the genetic data input). AAF must be a numerical value (i.e. it cannot be '.'). ```bash 7:6187101:C:T 1.53918207864341e-05 7:6190395:C:A 2.19920388819247e-06 . ``` Since singleton variants cannot be identified from this file, they are determined by default based on the input genetic data. To enforce which sites should be included in the singleton masks (see `--set-singletons`), you can add a third column in the file with a binary indicator (1=singleton; 0=not singleton). So only variants which are specified as singletons will be considered for the singleton masks, regardless of whether they are singletons in the input genetic data. Note that with this flag, singleton sites will be included in all masks (regardless of the AAF in file). ```bash 7:6187101:C:T 1.53918207864341e-05 0 7:6190395:C:A 2.19920388819247e-06 1 . ``` #### Mask definitions ##### Mask file This file specifies which annotation categories should be combined into masks. Each line contains a mask name followed by a comma-seperated list of categories included in the mask (i.e. union is taken over categories). For example below, Mask1 uses only LoF variants and Mask2 uses LoF and missense annotated variants. ```bash Mask1 LoF Mask2 LoF,missense . ``` ##### AAF cutoffs Option `--aaf-bins` specifies the AAF upper bounds used to generate burden masks (**AAF and not MAF [minor allele frequency] is used when deciding which variants go into a mask)**. By default, a mask based on singleton sites are always included. For example, `--aaf-bins 0.01,0.05` will generate 3 burden masks for AAFs in [0,0.01], [0,0.05] and singletons. #### SKAT/ACAT tests The option `--vc-tests` is used to specify the gene-based tests to run. By default, these tests use all variants in each mask category. If you'd like to only include variants whose AAF is below a given threshold ,e.g. only including rare variants, you can use `--vc-maxAAF`. | Test | Name in **regenie** | Description | | :----- |:-------------- | :--| | SKAT | skat | Variance component test | | SKATO | skato | Omnibus test combining features of SKAT and Burden| | SKATO-ACAT | skato-acat | Same as SKATO but using Cauchy combination method to maximize power across SKATO models| | ACATV | acatv | Test using Cauchy combination method to combine single-variant p-values| | ACATO | acato | Omnibus test combining features of ACATV, SKAT and Burden| | ACATO-FULL | acato-full | Same as ACATO but using the larger set of SKATO models used in the SKATO test| For example, `--vc-tests skato,acato-full` will run SKATO and ACATO (both using the default grid of 8 `rho` values for the SKATO models) and the p-values for SKAT, SKATO, ACATV and ACATO will be output. Ultra-rare variants (defined by default as MAC$\le$10, see `--vc-MACthr`) are collapsed into a burden mask which is then included in the tests instead of the individual variants. For additional details on the tests, [see here](../overview/#step-2-gene-based-testing). #### Joint test for burden masks The following tests can be used to combine different burden masks generated using different annotation classes as well as AAF thresholds. | Test | Name in **regenie** | QT | BT | Robust to LD | Assumes same effect direction | | :----- |:--------------: |:---: |:---: | :---: |:---: | | Minimum P-value | minp | $\checkmark$ | $\checkmark$ | $\times$ | $\times$ | | ACAT |acat | $\checkmark$|$\checkmark$|$\checkmark$|$\times$ | | SBAT |sbat | $\checkmark$|$\times$|$\checkmark$|$\checkmark$ | The ACAT test combines the p-values of the individual burden masks using the Cauchy combination method (see ref. 14 [here](../overview/#fn:14)). The SBAT test is described into more detail [here](../overview/#sparse-burden-association-test). If you only want to output the results for the joint tests (ignore the marginal tests), use `--joint-only`. #### LOVO/LODO schemes The leave-one-variant-out (LOVO) scheme takes all sites going into a mask, and builds LOVO masks by leaving out one variant at a time from the full set of sites. The mask including all sites will also be computed. The argument for `--mask-lovo` is a comma-separated list which consists of the set/gene name, the mask name, and the AAF cutoff (either 'singleton' or a double in (0,1)). If using a 4-column annotation file, then `--mask-lovo` should have the gene name, the domain name, the mask name, and the AAF cutoff. So the LOVO masks will be generated for a specific gene domain. The leave-one-domain-out (LODO) scheme (specified by `--mask-lodo`) takes all sites going into a mask and builds a LODO mask for each domain specified for the gene by excluding all variants in the domain. The full mask including all sites will also be computed. The argument for `--mask-lodo` should have the gene name, the mask name and the AAF cutoff. #### Writing mask files Burden masks built in **regenie** can be written to PLINK bed format. If the input genetic data contains dosages, the masks dosages will be converted to hard-calls prior to being written to file and these hard-calls will be used for the association testing. The PLINK bed file is written using 'ref-last' encoding (i.e. REF allele is listed last in the bim file). Note that this cannot be used with the LOVO/LODO schemes. ### Options | Option | Argument | Type | Description| |---|-------|------|----| |`--aaf-bins`| FLOAT,...,FLOAT| Optional| comma-separated list of AAF upper bounds to use when building masks [default is a single cutoff of 1%]| |`--build-mask`| STRING| Optional| build masks using the maximum number of ALT alleles across sites (`'max'`; the default), or the sum of ALT alleles (`'sum'`), or thresholding the sum to 2 (`'comphet'`)| |`--singleton-carrier`| FLAG| Optional| to define singletons as variants with a single carrier in the sample (rather than alternative allele count=1)| |`--set-singletons`| FLAG| Optional| to use 3rd column in AAF file to specify variants included in singleton masks| |`--write-mask`| FLAG| Optional| write mask to PLINK bed format **(does not work when building masks with 'sum')**| |`--vc-tests`| STRING| Optional| comma-separated list of SKAT/ACAT-type tests to run| |`--vc-maxAAF`| FLOAT| Optional| AAF upper bound to use for SKAT/ACAT-type tests [default is 100%]| |`--skat-params`| FLOAT,FLAT| Optional| a1,a2 values for the single variant weights computed from Beta(MAF,a1,a2) used in SKAT/ACAT-type tests [default is (1,25)]| |`--skato-rho`| FLOAT,...,FLOAT| Optional| comma-separated list of $\rho$ values used for SKATO models| |`--vc-MACthr`| FLOAT| Optional| MAC threshold below which to collapse variants in SKAT/ACAT-type tests [default is 10]| |`--joint`| STRING| Optional| comma-separated list of joint tests to apply on the generated burden masks| |`--rgc-gene-p`| FLAG| Optional| to compute the GENE_P test| |`--skip-test`| FLAG| Optional| to skip computing association tests after building masks and writing them to file| |`--mask-lovo`| STRING| Optional| to perform LOVO scheme| |`--lovo-snplist`| FILE| Optional| File with list of variants for which to compute LOVO masks| |`--mask-lodo`| FLAG| Optional| to perform LODO scheme| |`--weights-col`| INT| Optional| column index (1-based) in annotation file to use custom weights in gene-based tests| |`--write-mask-snplist`| FLAG| Optional| to write list of variants that went into each mask to file| |`--check-burden-files`| FLAG| Optional| to check the concordance between annotation, set list and mask files [see [below](https://rgcgithub.github.io/regenie/options/#checking-input-files)]| |`--strict-check-burden`| FLAG| Optional|to exit early if the annotation, set list and mask definition files dont agree [see [below](https://rgcgithub.github.io/regenie/options/#checking-input-files)]| Three rules can be used to build masks with `--build-mask` as shown in diagram below, where the last rule `comphet` applies a threshold of 2 to the mask from the `sum` rule. ![MaskRules](img/mask_rules.png){ style="text-align:center;padding: 10px;width:60%;display: block;margin-left: auto;margin-right: auto"} ### Output **With `--out file`** Results are written in separate files for each phenotype `file_.regenie,...,file_.regenie` with the same output format mentioned [above](https://rgcgithub.github.io/regenie/options/#output). Additionally, a header line is included (starting with `##`) which contains mask definition information. Masks will have name `..` with the chromosome and physical position having been defined in the set list file, and the reference allele being `ref`, and the alternate allele corresponding to `.`. When using `--mask-lovo`, the mask name will be the same as above but have suffix `_` to specify the variant which was excluded when building the mask. With `--build-mask sum`, the reported mask AAF corresponds to the average AAF across sites included in the mask. If using `--write-mask`, the masks will be saved to `file_masks.{bed,bim,fam}` and if using `--write-mask-snplist`, the list of variants included in each mask will be saved to `file_masks.snplist`. When using `--rgc-gene-p`, it will apply the single p-value per gene GENE_P strategy using all masks (see [here](../overview/#gene_p) for details). ### Example run Using Step 1 results from the [Step 1 command above](https://rgcgithub.github.io/regenie/options/#getting-started), we use the following command to build and test masks in Step 2 ``` ./regenie \ --step 2 \ --bed example/example_3chr \ --covarFile example/covariates.txt \ --phenoFile example/phenotype_bin.txt \ --bt \ --remove example/fid_iid_to_remove.txt \ --firth --approx \ --pred fit_bin_out_pred.list \ --anno-file example/example_3chr.annotations \ --set-list example/example_3chr.setlist \ --mask-def example/example_3chr.masks \ --aaf-bins 0.1,0.05 \ --write-mask \ --bsize 200 \ --out test_bin_out_firth ``` For each set, this will produce masks using 3 AAF cutoffs (singletons, 5% and 10% AAF). The masks are written to PLINK bed file (in `test_bin_out_firth_masks.{bed,bim,fam}`) and tested for association with each binary trait using Firth approximate test (summary stats in `test_bin_out_firth_.regenie`). Note that the test uses the whole genome regression LOCO PRS from Step 1 of **regenie** (specified by `--pred`). ### Checking input files To assess the concordance between the input files for building masks, you can use `--check-burden-files` which will generate a report in `file_masks_report.txt` containing: 1. for each set, the list the variants in the set-list file which are unrecognized (not genotyped or not present in annotation file for the set) 2. for each mask, the list of annotations in the mask definition file which are not in the annotation file Additionally, you can use `--strict-check-burden` to enforce full agreement between the three files (if not, program will terminate) : 1. all genotyped variants in the set list file must be in the annotation file (for the corresponding set) 2. all annotations in the mask definition file must be present in the annotation file ## Interaction testing Starting from **regenie** v3.0, you can perform scans for interactions (either GxE or GxG). For GxE tests, the interacting variable should be part of the covariate file (if it is categorical, specify it in `--catCovarList`). For GxG tests, the interacting variant can be part of the input genetic file or it can be present in an external file (see `--interaction-snp-file`) ### Options | Option | Argument | Type | Description| |---|-------|------|----| |`--interaction`| STRING| Optional| to run GxE test specifying the interacting covariate (see below)| |`--interaction-snp`| STRING| Optional| to run GxG test specifying the interacting variant (see below)| |`--interaction-file`| FORMAT,FILE| Optional| external genotype file containing the interacting variant [FORMAT can be bed/bgen/pgen and FILE is the file name (bgen) or file prefix (bed/pgen)]| |`--interaction-file-sample`| FILE| Optional| accompagnying sample file for BGEN format| |`--interaction-file-reffirst`| FLAG| Optional| use the first allele as the reference for BGEN or PLINK BED formats| |`--no-condtl`| FLAG| Optional| to print out all the main effects from the interaction model (see Output section below)| |`--force-condtl`| FLAG| Optional| to include the interacting SNP as a covariate in the marginal test (see Output section below)| |`--rare-mac`| FLOAT| Optional| minor allele count (MAC) threshold below which to use HLM method for QTs [default is 1000]| For GxE tests where the interacting variable is categorical, you can specify the baseline level using `--interaction VARNAME[BASE_LEVEL]` (e.g. `--interaction BMI[<25]`). Otherwise, the first value found in the covariate file will be used as the baseline level. For GxG tests, the default coding for the interacting variant is additive. If you would like to use dominant/recessive/categorical coding, use `--interaction-snp SNP_NAME[dom/rec/cat]` (for example with dominant coding, `--interaction-snp SNPNAME[dom]` will allow for separate effects between carriers vs non-carriers of the interacting variant). The allowed values in the brackets are `add/dom/rec/cat`. ### Output The result files will contain multiple lines for the same variant corresponding to the different null hypotheses being tested in the [interaction model](../overview/#step-2-interaction-testing) $$ g(\mu) = E\alpha + G\beta + (G\odot E)\gamma $$ The suffix in the "TEST" column indicates which hypothesis is being tested: * "ADD": marginal test where the interacting variable has **not** been added as a covariate $-$ this corresponds to $H_0: \beta = 0$ given $\alpha=\gamma = 0$ * this is only printed for GxG tests by default, or GxE using `--no-condtl` * "ADD-CONDTL": marginal test where the interacting variable has been added as a covariate (default for GxE tests) $-$ this corresponds to $H_0: \beta = 0$ given $\gamma = 0$ * this is only printed for GxE tests by default, or GxG using `--force-condtl` * "ADD-INT_VAR": test for the main effect of the interaction variable ("VAR" will be replaced by the name of the interacting variable) $-$ this corresponds to $H_0: \alpha = 0$ * this is only printed for GxG tests by default, or GxE using `--no-condtl` * If the interacting variable is categorical, you will have separate lines for each level aside from the baseline level (e.g. "ADD-INT_BMI=25-30" and "ADD-INT_BMI=30+" where baseline level is "$<$25") * will also output the effect of $E^2$ in "ADD-INT_VAR^2" if the trait is binary (see [here](../overview/#step-2-interaction-testing)) * "ADD-INT_SNP": test for main effect of tested SNP in the interaction model $-$ this corresponds to $H_0: \beta = 0$ * "ADD-INT_SNPxVAR": test for interaction effect ("VAR" will be replaced by the name of the interacting variable) $-$ this corresponds to $H_0: \gamma = 0$ * If the interacting variable is categorical, you will have separate lines for each level aside from the baseline level (e.g. "ADD-INT_SNPxBMI=25-30" and "ADD-INT_SNPxBMI=30+" where baseline level is "$<$25") * With Firth correction, only the effect sizes for the interaction effect at each level will be reported and the LRT p-value will only be computed for the joint test on the interaction effects * "ADD-INT_$k$DF": joint test for main and interaction effect of tested variant ($k\ge2$ for categorical interacting variables) $-$ this corresponds to $H_0: \beta = \gamma = 0$ ## Conditional analyses Starting from **regenie** v3.0, you can specify genetic variants to add to the set of covariates when performing association testing. This works in both step 1 and 2, and can be used in conjunction with the gene-based tests or the interactiong testing feature. The conditioning variants will automatically be ignored from the analysis. | Option | Argument | Type | Description| |---|-------|------|----| |`--condition-list`| FILE| Required| file with list of variants to condition on| |`--condition-file `| FORMAT,FILE| Optional| get conditioning variants from external file (same argument format as `--interaction-file`)| |`--condition-file-sample `| FILE| Optional| accompagnying sample file for BGEN format| |`--max-condition-vars `| INT| Optional| maximum number of conditioning variants [default is 10,000]| ## Survival analyses Starting from **regenie** v4.0, you can conduct survival analysis for time-to-event data. ### Phenotype file format In this small example, there are 5 samples, and the event of interest is the diagnosis of cancer over a period of 10 years. ![Survival_eg](img/survival_eg.png) Sample 1 is diagnosed with cancer during the study; the `time` variable is the number of years until the sample is diagnosed with cancer. Sample 2 drops out of the study; sample 3 dies during the study; sample 4 and 5 complete the study without being diagnosed with cancer; they are all right-censored, and the `time` variable is the last encounter or death time. The corresponding phenotype file is ``` FID IID Time Cancer 1 1 6 1 2 2 5 0 3 3 2 0 4 4 10 0 5 5 10 0 ``` ### Required options Survival analysis in **regenie** requires the following specific options in step 1, step 2 and gene-based burden tests. | Option | Argument | Type | Description| |---|-------|------|----| |`--t2e`| FLAG | Required| specify the traits are time-to-event data| |`--phenoColList` | STRING | Required | Comma separated list of time names to include in the analysis | |`--eventColList` | STRING | Required | Comma separated list of columns in the phenotype file to include in the analysis that contain the events. These event columns should have 0=no event,1=event,NA=missing | For the example above, the regenie call is ``` ./regenie \ --t2e \ --phenoColList Time \ --eventColList Cancer \ ... ``` For a phenotype file containing multiple time-to-event traits, the order of censor variables listed in `--eventColList` should match the order of time names specified in `--phenoColList`. For example, the phenotype file is ``` FID IID Cancer_Time Cancer Asthma_Time Asthma 1 1 6 1 4 0 2 2 5 0 8 1 ``` The regenie call is ``` ./regenie \ --t2e \ --phenoColList Cancer_Time,Asthma_Time \ --eventColList Cancer,Asthma \ ... ``` The output format is the same as the [output file for quantitative and binary traits](#output), with the `BETA` column containing the estimated harzard ratio (on log scale). ## LD computation REGENIE can calculate LD between a group of variants on the same chromosome. | Option | Argument | Type | Description| |---|-------|------|----| |`--compute-corr`| FLAG| Required| compute LD matrix and write to binary file| |`--output-corr-text`| FLAG| Optional| write Pearson correlations to text file| |`--forcein-vars`| FLAG| Optional| retain all variants specified in `--extract` which absent from the genetic data in the LD matrix| |`--ld-extract`| FILE| Optional| file listing single variants as well as burden masks to include in LD matrix (see below)| Note that this can be quite memory intensive for large groups of variants (memory ~$8M^2$ bytes for $M$ variants). ### Output **Using`--step 2 --out file`** By default, the LD matrix is stored in a binary compressed file `file.corr` and the list of variants corresponding to the columns of the LD matrix are stored in `file.corr.snplist`. The R script [scripts/parseLD.r](https://github.com/rgcgithub/regenie/blob/master/scripts/parseLD.r) contains a function which returns the LD matrix, e.g. `get.corr.sq.matrix("file.corr")`. Using `--output-corr-text` will write the Pearson correlations to a text file instead. When using `--forcein-vars`, variants not present in the genetic data will be added as extra column/rows in the LD matrix. For these variants, the diagonal entries in the matrix will be set to 1 and the off-diagonal entries 0. **Using`--ld-extract info.txt`** This option is used compute LD between single variants and burden masks generated on-the-fly in REGENIE; it requires specifying [annotation files](#annotation-input-files). The file `info.txt` should have three columns: variant type ('sv' or 'mask'), variant name, followed by the set (e.g. gene) name (this can be 'NA' for single variant). For example, it would look like: ``` sv 1:1111:A:G NA sv 1:2222:C:T NA mask PCSK9.M1.0.01 PCSK9 . ``` Note that the set and mask names must match that used in REGENIE based on provided annotation files and allele frequency cutoffs. Variant/masks not present in the data will be kept in the LD matrix but will have the corresponding correlations set to 0. ================================================ FILE: docs/docs/overview.md ================================================ ## Overview This page provides an overview of the models and methods implemented in **regenie**. A full description is given in our [paper](https://doi.org/10.1038/s41588-021-00870-7). **regenie** carries out genome-wide association tests for both quantitative and binary (case-control) phenotypes. Starting at **regenie v4.0**, it also supports survival analysis for time-to-event data (See [Survival analysis](#survival-analysis) section below). It is designed to handle 1. A large number of samples. For example, it is ideally suited to the [UK Biobank](https://www.ukbiobank.ac.uk/) dataset with 500,000 samples. 2. A combination of genetic data from a micro-array, imputation and exome sequencing. 3. A large number of either quantitative traits (QTs), binary (case-control) traits (BTs), or time-to-event traits (TTEs) 4. Accounting for a set of covariates An overview of the **regenie** method is provided in the figure below. Essentially, **regenie** is run in 2 steps: 1. In the first step a subset of genetic markers are used to fit a whole genome regression model that captures a good fraction of the phenotype variance attributable to genetic effects. 2. In the second step, a larger set of genetic markers (e.g. imputed markers) are tested for association with the phenotype *conditional upon* the prediction from the regression model in Step 1, using a leave one chromosome out (LOCO) scheme, that avoids proximal contamination. ![Rflow](img/regenie_overview2.png){ style="text-align:center;padding: 10px;width:70%;border: 1px solid #ddd;display: block;margin-left: auto;margin-right: auto"}
    ### Step 1 : Whole genome model In Step 1 a whole genome regression model is fit at a subset of the total set of available genetic markers. These are typically a set of several hundred thousand (\(M\)) common markers from a micro-array. #### Ridge regression (level 0) **regenie** reads in the \(M\) markers in blocks of \(B\) consecutive markers (`--bsize` option). In each block, a set of ridge regression predictors are calculated for a small range of \(J\) shrinkage parameters \( \{\tau_1,\ldots, \tau_J\} \) (using `--l0` option [default is 5]) . For a block of SNPs in a \(N\times B\) matrix \(X\) and \(N\times 1\) phenotype vector \(Y\) we calculate \(J\) predictors \( X\widehat{\beta}_1 \ldots, X\widehat{\beta}_J \) where \( \widehat{\beta}_j = (X^TX+\tau_j I)^{-1}X^T Y\) The idea behind using a range of shrinkage values is to capture the unknown number and size of truly associated genetic markers within each window. The ridge regression takes account of Linkage disequilibrium (LD) within each block. These predictors are stored in place of the genetic markers in matrix \(W\), providing a large reduction in data size. For example, if \(M=500,000\) and \(B=1,000\) and \(J=5\) shrinkage parameters are used, then the reduced dataset will have \(JM/B=2,500\) predictors. Ridge regression is used in this step for both quantitative and binary traits. #### Cross-validation (level 1) The predictors generated by the ridge regression step will all be positively correlated with the phenotype. Thus, it is important to account for that correlation when building a whole genome wide regression model. When analyzing a quantitative trait we use a second level of ridge regression on the full set of \(JM/B\) predictors in \(W\). This approach is inspired by the method of stacked regressions[@RN293]. We fit the ridge regression for a range of shrinkage parameters (`--l1` option) and choose a single best value using K-fold cross validation scheme. This assesses the predictive performance of the model using held out sets of data, and aims to control any over-fitting induced by using the first level of ridge regression to derive the predictors. In other words, we fit the model $$Y = W\alpha + \epsilon$$ where \(\alpha\) is estimated as \(\widehat{\alpha} = (W^TW + \phi\,I)^{-1}W^TY\) and the parameter \(\phi\) is chosen via K-fold cross-validation. For binary traits, we use a logistic ridge regression model to combine the predictors in \(W\) $$\text{logit}(p) = \mu + W\alpha$$ where \(p\) is the probability of being a case and \(\mu\) captures the effects of non-genetic covariates. #### Genetic predictors and LOCO Once \(\alpha\) has been estimated we can construct the genetic prediction $$Z = W\widehat{\alpha}$$ Also, since each column of the matrix \(W\) will be associated with a chromosome we can can also construct a genetic prediction ignoring any one chromosome, by simply ignoring those columns when calculating the prediction. This is known as the Leave One Chromosome Out (LOCO) approach. These LOCO predictions are valuable at Step 2 of **regenie** when each marker is tested for associated (see below). For binary traits, it is the linear predictor in a logistic regression model using LOCO that is saved, and used as an offset when fitting logistic regression models to test for association. #### Multiple phenotypes The dimension reduction step using ridge regression can be used very efficiently to model multiple phenotypes at once. The ridge regression equations for a block of SNPs in a \(N\times B\) matrix \(X\) and a single phenotype in a \(N\times 1\) matrix \(Y\) take the form \( \widehat{\beta} = AY \) where \(A = (X^TX+\tau I)^{-1}X^T\) **does not depend on \(Y\)** If instead \(P\) phenotypes are stored in columns of a \(N\times P\) matrix \(Y\), then the matrix \(A\) can be applied jointly to calculate the matrix of estimates \(\widehat{\beta} = AY\), and this can take advantage of parallel linear algebra implementations in the Eigen matrix library. #### Covariates Covariates, such as age and sex and batch effect variables can be included in the **regenie** model. For quantitative traits, any covariates are regressed out of phenotypes and genotypes before fitting the model. For binary traits, we fit a null model with only covariates, and use predictions from that model as an offset when fitting the logistic regression model. ### Step 2 : Single-variant association testing In Step 2, a larger set of markers are tested for association with the trait (or traits). As with Step 1, these markers are also read in blocks of \(B\) markers, and tested for association. This avoids having to have all markers stored in memory at once. #### Quantitative traits For quantitative traits, we use a linear regression model for association testing. - Covariates are regressed out of the phenotypes and genetic markers. - The LOCO predictions from Step 1 are removed from the phenotypes. - Linear regression is then used to test association of the residualized phenotype and the genetic marker. - Parallel linear algebra operations in the Eigen library are used where possible. #### Binary traits For binary traits, logistic regression score test is used to test association of the phenotype and the genetic marker. The logistic regression model includes the LOCO predictions from Step 1 *as an offset*. Covariates are included in the linear predictor in the usual way. When the case-control ratio is imbalanced, standard association tests don't control Type I error well at rare genetic markers. **regenie** has two options to handle this ##### Firth logistic regression Standard maximum likelihood estimates are generally biased. The Firth correction[@RN248] removes much of the bias, and results in better calibrated test statistics. The correction involves adding a penalty term to the log-likelihood, $$ \widetilde{l}(\theta) = l(\theta) + {1 \over 2} \log I|\theta| $$ where the penalty term corresponds to the use of Jeffrey's Prior. This prior has the effect of shrinking the effect size towards zero. **regenie** uses a Firth correction when the p-value from the standard logistic regression test is below a threshold (default 0.05). It also includes a novel, accurate and fast approximate Firth correction which is ~60x faster than the exact Firth correction (see the option `--firth`). The p-value reported in **regenie** is based on a likelihood ratio test (LRT), and we use the Hessian of the log-likelihood without the penalty term to estimate the standard error (SE). This may cause an issue in meta-analyses with rare variants, as the effect size estimate and SE may not match with the LRT p-value. Hence, we added an option `--firth-se` to report a SE computed instead from the effect size estimate and the LRT p-value. ##### Saddle point approxiation (SPA) test The SPA test approximates the null distribution of the test statistic by approximating the cumulant generating function of the test statistic, which involves all of the higher order moments[@RN488]$^,$[@RN245]. This provides a better estimation of the tail probabilities compared to using standard asymptotic theory which relies on the normal approximation and uses only the first two moments of the dsitribution. A tail probability is obtained as $$ \begin{align*} P&(T < t_{\text{obs}}) \approx \Phi(z), \text{ where,}\\ z &= w + \frac{1}{w}\log{\frac{v}{w}}\\ w &= \text{sign}(\delta^*)\sqrt{ 2 [ t_{\text{obs}}\, \delta^* - K(\delta^*)}],\, v = \delta^*\sqrt{K''(\delta^*)} \end{align*} $$ and \(K(\delta)\) is the cumulant generating function of the test statistic and \(\delta^*\) is obtained by using a root-finding algorithm for \(K'(\delta)=t_{\text{obs}}\). As this approximation has been found not to work very well for ultra-rare variants, a minimum minor allele count (MAC) is used to filter out these variants before testing (option `--minMAC`). ### Step 2 : Gene-based testing Instead of performing single-variant association tests, multiple variants can be aggregated in a given region, such as a gene, using the following model $$g(\mu) = w_1G_1\beta_1 + \dots + w_mG_m\beta_m$$ where \(G_i\)'s represent the single variants included in the test, \(w_i\)'s and \(\beta_i\)'s are weights and effect sizes, respectively, for each variant, and \(g(.)\) is a link function for the phenotypic mean \(\mu\). We also denote by \(S_i\) the score statistics obtained from the [single-variant tests](#step-2-single-variant-association-testing). This can be especially helpful when testing rare variants as single-variant tests usually have lower power performance. To avoid inflation in the gene-based tests due to rare variants as well as reduce computation time, we have implemented the collapsing approach proposed in SAIGE-GENE+[@RN492], where ultra-rare variants are aggregated into a mask. For highly imbalanced binary traits, SPA/Firth correction can be used to calibrate the test statistics in the gene-based tests as proposed in Zhao et al. (2020)[@RN452] using `--firth/--spa`. #### Burden tests Burden tests, as defined in Lee et al. (2014)[@RN487], assume \(\beta_i=\beta\; \forall i\), where \(\beta\) is a fixed coefficient, which then leads to the test statistic $$Q_{BURDEN} = \left(\sum_i w_iS_i\right)^2$$ These tests collapse variants into a single variable which is then tested for association with the phenotype. Hence, they are more powerful when variants have effects in the same direction and of similar magnitude. In **regenie**, multiple options are available to aggregate variants together into a burden mask beyond the linear combination above ([see here](../options/#options_1)). For example, the burden tests that were employed in Backman et al. (2021)[@RN457] use the default strategy in **regenie** of collapsing variants by taking the maximum number of rare alleles across the sites. #### Variance component tests Unlike burden tests, SKAT[@RN386] assume the effect sizes $\beta_i$ come from an arbitrary distribution with mean 0 and variance $\tau^2$ which leads to the test statistic $$Q_{SKAT} = \sum_i w_i^2S_i^2$$ Hence, SKAT can remain powerful when variant effects are in opposite directions. The omnibus test SKATO[@RN454] combines the SKAT and burden tests as $$Q_{SKATO} = \rho Q_{BURDEN} + (1-\rho) Q_{SKAT}$$ So setting $\rho=0$ corresponds to SKAT and $\rho=1$ to the burden test. In practice, the parameter $\rho$ is chosen to maximize the power [**regenie** uses a default grid of 8 values {$0, 0.1^2, 0.2^2, 0.3^2, 0.4^2, 0.5^2, 0.5, 1$} and set the weights $w_i = Beta(MAF_i,1,25)$]. To obtain the p-value from a linear combination of chi-squared variables, **regenie** uses Davies' exact method[@RN524] by default. Following Wu et al (2016)[@RN514], **regenie** uses Kuonen's saddlepoint approximation method[@RN526] when the Davies' p-value is below 1e-5 and if that fails, it uses Davies' method with more stringent convergence parameters (lim=1e5,acc=1e-9). The original SKATO method uses numerical integration when maximizing power across the various SKATO models that use different values for $\rho$. We also implement a modification of SKATO, named SKATO-ACAT, which instead uses the Cauchy combination method[@RN482] to combine the p-values from the different SKATO models. #### Cauchy combination tests The ACATV[@RN339] test uses the Cauchy combination method ACAT to combine single variant p-values $p_i$ as $$Q_{ACATV} = \sum_i \widetilde{w}_i^2\tan{\{\pi(0.5 - p_i)\}}$$ where we set $\widetilde{w}_i = w_i \sqrt{MAF(1-MAF)}$. This test is highly computationally tractable and is robust to correlation between the single variant tests. The omnibus test ACATO[@RN339] combines ACATV with the SKAT and burden tests as $$ Q_{ACATO} = \frac{1}{3}\tan{\{\pi(0.5 - p_{ACATV})\}}+ \frac{1}{3}\tan{\{\pi(0.5 - p_{Burden})\}}+ \frac{1}{3}\tan{\{\pi(0.5 - p_{SKAT})\}} $$ where unlike the original ACATO test, we only use one set of the weights $w_i$. Alternatively, we augment the test to include an extended set of SKATO models beyond SKAT and Burden (which correspond to $\rho$ of 0 and 1 in SKATO respectively) and use the default SKATO grid of 8 values for $\rho$. #### Sparse Burden Association Test **regenie** can generate burden masks which are obtained by aggregating single variants using various annotation classes as well as allele frequency thresholds. The Sparse Burden Association Test (SBAT)[@RN703] combines these burden masks in a joint model imposing constraints of same direction of effects $$ \mu = \sum_{\text{mask }i} M_i\gamma_i $$ where $M_i$ represent a burden mask and we solve $$ \underset{\boldsymbol\gamma}{\min} || Y - \sum_i M_i\gamma_i||^2 \text{ subject to } \gamma_i \ge 0 \text{ for all } i $$ The SBAT method tests the hypothesis $H_0: \gamma_i=0$ for all $i$ vs. $H_1: \gamma_i > 0$ for some $i$. By using this joint model, the SBAT test accounts for the correlation structure between the burden masks and with the non-negative constraints, it can lead to boost in power performance when multiple burden masks are causal and have concordant effects. This test has the nice property that it combines model selection of the masks (via the sparsity induced by the non-negative assumption) with model inference (it is well calibrated and powerful). #### GENE_P As the different gene-based tests in REGENIE can be more powerful under different genetic architectures, we propose a unified strategy, named GENE_P, that combines the strengths of these tests. It uses ACAT to combine the p-values of the SKATO, ACATV, Burden and SBAT tests and obtain an overall assessment of significance for a genetic region (e.g. gene). The diagram below illustrates the GENE_P test using 4 masks (i.e. combination of variant annotations) and 3 allele frequency cutoffs when performing gene-based tests. ![GENE_P_flow](img/GENE_P_diagram.png){ style="text-align:center;padding: 10px;width:70%;border: 1px solid #ddd;display: block;margin-left: auto;margin-right: auto"}
    ### Step 2 : Interaction testing The GxE tests are of the form $$ g(\mu) = E\alpha + G\beta + (G\odot E)\gamma $$ where $E$ is an environmental risk factor and $G$ is a marker of interest, and $\odot$ represents the Haddamard (entry-wise) product of the two. The last term in the model allows for the variant to have different effects across values of the risk factor. *Note: if $E$ is categorical, we use a dummy variable for each level of $E$ in the model above.* We can look at the following hypotheses: 0. $H_0: \beta = 0$ given $\gamma = 0$, which is a marginal test for the SNP 1. $H_0: \beta = 0$, which is a test for the main effect of the SNP in the full model 2. $H_0: \gamma = 0$, which is a test for interaction 3. $H_0: \beta = \gamma = 0$, which tests both main and interaction effects for the SNP Misspecification of the model above, such as in the presence of heteroskedasticity, or the presence of high case-control imbalance can lead to inflation in the tests. Robust (sandwich) standard error (SE) estimators[@RN485] can be used to adress model misspecification however, they can suffer from inflation when testing rare variants or in the presence of high case-control imbalance[@RN373]$^,$[@RN320]. In **regenie**, we use a hybrid approach which combines: * Wald test with sandwich estimators * Wald test with heteroskedastic linear models (for quantitative traits) * LRT with penalized Firth regression (for binary traits) For quantitative traits, we use the sandwich estimators HC3 to perform a Wald test for variants whose minor allele count (MAC) is above 1000 (see `--rare-mac`). For the remaining variants, we fit a heteroskedastic linear model (HLM)[@RN417] $$ Y = E\alpha + E^2\zeta + G\beta + (G\odot E)\gamma + \epsilon $$ where we assume $\epsilon \sim N(0, D)$ where $D$ is a diagonal matrix with entries $\sigma^2\exp{(1 + E\theta_1 + E^2\theta_2)}$. This formulation allows for the phenotypic variance to also depend on the risk factor $E$. By incorporating both the linear and quadratic effect of $E$ in the mean and variance of $Y$, this model provides robustness to heteroskedasticity (*Note: the $E^2$ terms are only added when $E$ is quantitative*). Wald tests are then performed for the null hypotheses listed above. For binary traits, we consider the following interaction model $$ \text{logit}(\mu) = E\alpha + E^2\zeta + G\beta + (G\odot E)\gamma $$ where we also include a non-linear effect for $E$ (not if categorical). The sandwich estimator HC3 is used in a Wald test for variants whose MAC is above 1000 (see `--rare-mac`) otherwise the model-based standard errors are used. When Firth is specified, we only apply the Firth correction using LRT if the p-value for the interaction term $\gamma$ from the Wald test is below a specified threshold (see `--pThresh`). So the added $E^2$ term as well as the use of the Firth penalty help with case-control imbalance and model misspecification for the effect of $E$ on the phenotype. ### Survival analysis Starting with **regenie v4.0**, we have enabled survival analysis, improving the power for analyzing common diseases where time-to-event data is available by leveraging the Cox Proportional Harzard model. We assume that samples without an event are right-censored, i.e. the survival time is only known to be greater than a certain value. It is important to [encode this information correctly into the phenotypes](/regenie/options/#survival-analyses). #### Step 1: Whole genome model using cox ridge regression In step 1, Level 0 is run using [linear ridge regression](#ridge-regression-level-0) with the `time` variable taken as the response. In Level 1, instead of linear/logistic ridge regression, we use Cox Ridge regression[@simon2011regularization] to combine the predictions $W$ from Level 0. $$ \lambda_i(t) = \lambda_0(t) \exp(\mu_i + w_i^\intercal \alpha) $$ where $\lambda_0(t)$ is the baseline hazard function, and, for the $i$-th individual, $\lambda_i(t)$ is the hazard function, $w_i$ is the set of ridge predictors from Level 0, and $\mu_i$ captures the effects of non-genetic covariates. We fit the cox ridge regression for a range of shrinkage parameters and select the best value using a K-fold cross validation scheme. With the estimated $\hat{\alpha}$, we construct LOCO predictions which capture population structure, relatedness and polygenicity. #### Step 2: Single variant and gene-based burden tests For time-to-event traits, the cox proportional hazard regression model is used to test the association between the phenotype and the genetic marker. **Note**: the only supported gene-based test is the burden test. The cox proportional hazard regression model includes the LOCO predictions from Step 1 as an offset. $$ \lambda_i(t) = \lambda_0(t) \exp(\mu_i + w_{i, LOCO} + g_i \beta) $$ We test the null hypothesis $H_0: \beta = 0$ using a score test. When the event rate is low, the standard score test doesn't control Type I error well at rare genetic markers. To reduce the bias and achieve a more robust test, regenie uses Firth correction[@heinze2001solution] when the p-value from the standard score test is below a threshold (default 0.05). The firth correction provides a well-calibrated test, but comes with a computational cost. To mitigate this burden in Cox regression, we include a fast approximate test, which gives results very similar to the exact Firth test. ### Missing Phenotype data With QTs, missing values are mean-imputed in Step 1 and they are dropped when testing each phenotype in Step 2 (unless using `--force-impute`). With BTs, missing values are mean-imputed in Step 1 when fitting the level 0 linear ridge regression and they are dropped when fitting the level 1 logistic ridge regression for each trait. In Step 2, missing values are dropped when testing each trait. To remove all samples that have missing values at **any** of the \(P\) phenotypes from the analysis, use option `--strict` in step 1 and 2. This can also be used when analyzing a single trait to only keep individuals with complete data by setting the phenotype values of individuals to remove to NA. Note: imputation is only applied to phenotypes; covariates are not allowed to have missing data. ### References \bibliography ================================================ FILE: docs/docs/performance.md ================================================ ## Performance We assessed the performance of **regenie** against 3 other programs for GWAS on large cohorts. 1. BOLT-LMM [Loh et al. (2015) Nature Genetics 47, 284–290](https://www.nature.com/articles/ng.3190) [[Software]](https://data.broadinstitute.org/alkesgroup/BOLT-LMM/) 2. SAIGE - [Zhou et al. (2018) Nature Genetics 50, 1335–1341](https://www.nature.com/articles/s41588-018-0184-y)[[Software]](https://github.com/weizhouUMICH/SAIGE) 3. fastGWA - [Jiang et al. (2019) Nature Genetics 51, 1749–1755](https://www.nature.com/articles/s41588-019-0530-8) [[Software]](https://cnsgenomics.com/software/gcta/#Overview) Full details for all the runs are available in our [paper](https://doi.org/10.1038/s41588-021-00870-7). ### Quantitative traits We ran **regenie**, BOLT-LMM and fastGWA on 3 quantitative phenotypes measured on white British UK Biobank participants (LDL, N=389,189; Body mass index [BMI], N=407,609; and Bilirubin, N=388,303) where testing was performed on 9.8 million imputed SNPs. The Manhattan plots for all three phenotypes (see below) show good agreement between the methods with both **regenie** and BOLT-LMM resulting in stronger association signals relative to fastGWA at known peaks of association (note that in the plots, the scaling of the y-axis changes above the upper dashed line). ![QTmanP](img/ManP_exemplarQTs_WB.jpg)

    We assessed the computational requirements of all three methods using a larger set of 50 quantitative traits from the UK Biobank, looking at computational timings as well as memory usage. For **regenie** and BOLT LMM, 469,336 LD-pruned SNPs were used as model SNPs when fitting the null model (step 1) and for fastGWA, these SNPs were used to compute the sparse GRM (timing not included). Tests were performed on 11.4M imputed SNPs (step 2). ![QTtime](img/qtTiming.png) From the table above, **regenie** was 151x faster than BOLT-LMM in elapsed time for Step 1 and 11.5x faster for Step 2, which translated into $>$30x overall speed-up in terms of elapsed time. In addition, **regenie** had a maximum memory usage of 12.9 GB, which is mostly due to **regenie** only reading a small portion of the genotype data at a time, whereas BOLT-LMM required 50GB. **regenie** was 2.8x faster than fastGWA, but fastGWA is very memory efficient and used only a maximum of 2GB. ### Binary traits **regenie** was compared to BOLT-LMM and SAIGE on a set of four binary traits measured on white British UK Biobank participants (coronary artery disease [CAD], N=352,063, case-control ratio=1:11; glaucoma, N=406,927, case-control ratio=1:52; colorectal cancer, N=407,746, case-control ratio=1:97; and thyroid cancer, N=407,746, case-control ratio=1:660) and Step 2 testing was performed on 11.6 million imputed SNPs. A novel and fast approximate Firth correction was used in **regenie** as well as a SPA correction. As seen in the Manhattan plots below (note that the scaling of the y-axis changes above the upper dashed line), all four approaches show very good agreement for the most balanced trait (CAD; case-control ratio=1:11), but as the fraction of cases decreases BOLT-LMM tends to give inflated test statistics. However both **regenie** with Firth and SPA corrections, as well as SAIGE, which uses SPA correction, are all robust to this inflation and show similar agreement for the associations detected. ![BTmanP](img/ManP_exemplarBTs_WB.jpg)
    We assessed the computational requirements of **regenie** and SAIGE using a larger set of 50 binary traits from the UK Biobank that have a range of different case-control ratios and distinct missing data patterns. 469,336 LD-pruned SNPs were used as model SNPs when fitting the null model (step 1) and tests were performed on 11.4M imputed SNPs (step 2). In step 1, **regenie** was run using LOOCV and for two traits SAIGE did not finish as it took longer than the 4-week limit. In step 2, the approximate Firth correction was used in **regenie** in addition to SPA correction. ![BTtime](img/btTiming.png) From the table above, Step 1 of **regenie** was about 350x faster and required only $40\%$ of the memory used by SAIGE. In Step 2, **regenie** Firth and SPA were 2x and 3x faster than SAIGE in CPU time, respectively, but were 21x and 34x faster than SAIGE in elapsed time, respectively, which suggests that **regenie** makes better use of parallelization in this step. Overall, **regenie** using Firth correction was 8x faster than SAIGE in CPU hours and 26.8x faster in elapsed time. All runs above were done on the same computing environment (16 virtual CPU cores of a 2.1GHz AMD EPYC 7571 processor, 64GB of memory, and 600GB solid-state disk). ### Timings improvements in v2.2 We have several changes in **regenie** v2.2 to improve the computational efficiency: * The genotype file reading in Step 1 is now multi-threaded for all supported formats (i.e. BED, PGEN, and BGEN) and uses a faster file reading implementation for BGEN v1.2 format with 8-bit encoding. From our timings experiments below, these changes helped reduce the CPU time by 40-60% depending on the input format. ![Step1time](img/timings_Step1.png) *Note that we used a small number of SNPs for Step 1 in our experiments (20K) so the timing improvement will not be as high in a real Step 1 run where ~500K SNPs would be used.* * We have improved the implementation of the score tests for binary traits to reduce the number of matrix operations performed and this reduced the CPU timings by ~60% from the previous version 2.0.2. ![Step2time](img/timings_Step2_BT.png) *Note that there is an added memory cost of ~8NKP bytes [N=#samples; K=#covariates;P=#samples] so ~800MB extra for a UKB 500K run with 10 traits & 20 covariates.* * We have also made use of the sparsity of the genotype vector for rarer variants in Step 2 (more so with binary traits) and this reduced the timing in our experiments by ~20% on average. ![Step2SparseTime](img/timings_Step2_BT_v2.2.png) *In our experiments, common variants are defined as having MAF > 5% and rare variants are defined as having MAF < 1% and no correction (i.e. Firth/SPA) is used.* * We have added new options `--write-null-firth` and `--use-null-firth` to reduce the timing of Step 2 with approximate Firth when ran in parallel jobs split in smaller chunks within chromosomes. More specifically, `--write-null-firth` can be used in Step 1 to fit the null model for approximate Firth test and store the resulting estimates to file. Then in Step 2, specifying `--use-null-firth` will re-use these parameter estimates to reduce the timing of the approximate Firth null model fitting. *We thank Juha Karjalainen for suggesting this feature.* Note: in our timings experiments, the PGEN genotype file only includes hard-calls. We ran a single trait in **regenie** and each setting was replicated 5 times. ### Gene-based testing **regenie** v3.0 adds in a wide range of [gene-based tests](../overview/#step-2-gene-based-testing). We have performed simulation experiments to assess the calibration of the tests with quantitative and binary traits using real genetic data from the UK Biobank where we randomly selected 100,000 samples obtained from the set of white British participants (see the "Methods" section of the [Regenie paper](https://doi.org/10.1038/s41588-021-00870-7) for details on phenotype simulation where we set the heritability to 20%). Using whole exome sequencing data, we constructed variant sets incorporating functional annotations (LoF and missense, where missense vairants were predicted as deleterious using a score based on 5 in-silico algorithms), as well as allele frequency thresholds focusing on rarer variation (1%, 0.1% and 0.01%). The SKAT/ACAT tests were applied only to variant sets using a 1% or 0.01% AAF threshold and SBAT and BURDEN-ACAT joint tests combined all burden mask signals from the 1%, 0.1%, 0.01% and singleton thresholds. 1000 genes on even chromosomes were randonly selected and tested for association (causal variants were on odd chromosomes). The QQ plots below show the distribution p-values for each test across the different annotation categories (ran in Regenie v3.2). #### Quantitative traits Using a 1% allele frequency cutoff for the SKAT/ACAT tests. ![QT_gene](img/Gene_burden_QTsims.png) #### Binary traits We simulated highly imbalanced phenotypes with a disease prevalence of 1% (case-control ratio of 1:99) and applied Firth/SPA correction to the tests. Using a 1% allele frequency cutoff for the SKAT/ACAT tests. ![BT_gene1](img/Gene_burden_BTsims_AF1pct.png) Using a 0.01% allele frequency cutoff for the SKAT/ACAT tests. ![BT_gene_001](img/Gene_burden_BTsims_AF001pct.png) ================================================ FILE: docs/docs/recommendations.md ================================================ ## Recommendations for UK Biobank analysis **regenie** is ideally suited for large-scale analyses such as 500K UK Biobank (UKBB) data, where records are available for thousands of phenotypes. We provide below a few guidelines on how to perform such analysis on the UKBB files that all UKBB approved researchers have access to. ### Pre-processing We will first go over important steps to consider before running **regenie**. #### Selection of traits **regenie** can perform whole genome regression on multiple traits at once, which is where higher computational gains are obtained. As different traits can have distinct missing patterns, **regenie** uses an imputation scheme to handle missing data. From the real data applications we have performed so far with traits having up to ~20% (for quantitative) and ~5% (for binary) missing observations, our imputation scheme resulted in nearly identical results as from discarding missing observations when analyzing each trait separately (see the [paper](https://doi.org/10.1038/s41588-021-00870-7) for details). Hence, we recommend to analyze traits in groups that have similar missingness patterns with resonably low amount of missingness (<15%). The number of phenotypes in a group will affect the computational resources required and the table below shows typical computational requirements based on using 500,000 markers in step 1 split in blocks of 1000 and using blocks of size 200 when testing SNPs in step 2. The estimates are shown when step 1 of **regenie** is run in low-memory mode so that within-block predictions are temporarily stored on disk (see Documentation). ![Rflow](img/comp_req_largeP.png){ style="text-align:center;padding: 10px;width:50%;display: block;margin-left: auto;margin-right: auto"} In the following sections, we'll assume traits (let's say binary) and covariates used in the analysis have been chosen and data are in files `ukb_phenotypes_BT.txt` and `ukb_covariates.txt`, which follow the format requirement for **regenie** (see Documentation). #### Preparing genotype file Step 1 of a **regenie** run requires a single genotype file as input; we recommend using array genotypes for this step. The UKBB genotype files are split by chromosome, so we recommend using [PLINK](http://www.cog-genomics.org/plink/) to merge the files using the following code. *NOTE*: please change **XXX** to you own UKBB application ID number ``` rm -f list_beds.txt for chr in {2..22}; do echo "ukb_cal_chr${chr}_v2.bed ukb_snp_chr${chr}_v2.bim ukbXXX_int_chr1_v2_s488373.fam" >> list_beds.txt; done plink \ --bed ukb_cal_chr1_v2.bed \ --bim ukb_snp_chr1_v2.bim \ --fam ukbXXX_int_chr1_v2_s488373.fam \ --merge-list list_beds.txt \ --make-bed --out ukb_cal_allChrs ``` #### Exclusion files Quality control (QC) filters can be applied using [PLINK2](https://www.cog-genomics.org/plink/2.0/) to filter out samples and markers in the genotype file prior to step 1 of **regenie**. Note: **regenie** will throw an error if a low-variance SNP is included in the step 1 run. Hence, the user should run adequate QC filtering prior to running **regenie** to identify and remove such SNPs. For example, to filter out SNPs with minor allele frequency (MAF) below 1%, minor allele count (MAC) below 100, genotype missingess above 10% and Hardy-Weinberg equilibrium p-value exceeding \(10^{-15}\), and samples with more than 10% missingness, ``` plink2 \ --bfile ukb_cal_allChrs \ --maf 0.01 --mac 100 --geno 0.1 --hwe 1e-15 \ --mind 0.1 \ --write-snplist --write-samples --no-id-header \ --out qc_pass ``` ### Step 1 We recommend to run **regenie** using multi-threading (8+ threads) which will decrease the overall runtime of the program. As this step can be quite memory intensive (due to storing block predictions), we recommend to use option `--lowmem`, where the number of phenotypes analyzed will determine how much disk space is required (see table above). Running step 1 of **regenie** (by default, all available threads are used) ``` ./regenie \ --step 1 \ --bed ukb_cal_allChrs \ --extract qc_pass.snplist \ --keep qc_pass.id \ --phenoFile ukb_phenotypes_BT.txt \ --covarFile ukb_covariates.txt \ --bt \ --bsize 1000 \ --lowmem \ --lowmem-prefix tmpdir/regenie_tmp_preds \ --out ukb_step1_BT ``` For P phenotypes analyzed, this will generate a set of $P$ files ending with `.loco` which contain the genetic predictions using a LOCO scheme that will be needed for step 2, as well as a prediction list file `ukb_step1_BT_pred.list`, which lists the names of these predictions files and can be used as input for step 2. ### Step 2 As step 1 and 2 are completely decoupled in **regenie**, you could either use all the traits for testing in step 2 or select a subset of the traits to perform association testing. Furthermore, you can use the same Step 1 output to test on array, exome or imputed variants; below, we will illustrate testing on imputed variants. Step 2 of **regenie** can be run in parallel across chromosomes so if you have access to multiple machines, we recommend to split the runs over chromosomes (using 8+ threads). Running **regenie** tesing on a single chromosome (here chromosome 1) and using the fast Firth correction as fallback for p-values below 0.01 ``` ./regenie \ --step 2 \ --bgen ukb_imp_chr1_v3.bgen \ --ref-first \ --sample ukbXXX_imp_chr1_v3_s487395.sample \ --phenoFile ukb_phenotypes_BT.txt \ --covarFile ukb_covariates.txt \ --bt \ --firth --approx --pThresh 0.01 \ --pred ukb_step1_BT_pred.list \ --bsize 400 \ --split \ --out ukb_step2_BT_chr1 ``` This will create separate association results files for each phenotype as `ukb_step2_BT_chr1_*.regenie`. When running the SKAT/ACAT gene-based tests, we recommend to use at most 2 threads and instead parallelize the runs over partitions of the genome (e.g. groups of genes). ================================================ FILE: docs/mkdocs.yml ================================================ site_name: regenie theme: name: null custom_dir: 'cinder' copyright: "REGENIE is licensed under the MIT license" nav: - Home: index.md - Overview: overview.md - Install: install.md - Documentation: options.md - Performance: performance.md - UKBB Analysis: recommendations.md - F.A.Q.: faq.md markdown_extensions: - mdx_math - attr_list - footnotes plugins: - search - bibtex: bib_file: "refs.bib" csl_file: "nature.csl" google_analytics: - UA-166859683-2 - auto extra_css: - custom/style.css ================================================ FILE: docs/refs.bib ================================================ @article{RN524, author = {Davies, Robert B.}, title = {Algorithm AS 155: The Distribution of a Linear Combination of χ 2 Random Variables}, journal = {Applied Statistics}, volume = {29}, number = {3}, pages = {323-333}, year = {1980}, } @article{RN485, author = {MacKinnon, James G. and White, Halbert}, title = {Some heteroskedasticity-consistent covariance matrix estimators with improved finite sample properties}, journal = {Journal of Econometrics}, volume = {29}, number = {3}, pages = {305-325}, year = {1985}, } @article{RN248, author = {Firth, David}, title = {Bias reduction of maximum likelihood estimates}, journal = {Biometrika}, volume = {80}, number = {1}, pages = {27-38}, year = {1993}, } @article{RN293, author = {Breiman, Leo}, title = {Stacked regressions}, journal = {Machine learning}, volume = {24}, number = {1}, pages = {49-64}, year = {1996}, } @article{RN526, author = {Kuonen, D}, title = {Miscellanea. Saddlepoint approximations for distributions of quadratic forms in normal variables}, journal = {Biometrika}, volume = {86}, number = {4}, pages = {929-935}, year = {1999}, } @book{RN488, author = {Butler, Ronald W.}, title = {Saddlepoint Approximations with Applications}, publisher = {Cambridge University Press}, year = {2007}, } @article{RN373, author = {Tchetgen Tchetgen, E. J. and Kraft, P.}, title = {On the robustness of tests of genetic associations incorporating gene-environment interaction when the environmental exposure is misspecified}, journal = {Epidemiology}, volume = {22}, number = {2}, pages = {257-61}, year = {2011}, } @article{RN320, author = {Voorman, A. and Lumley, T. and McKnight, B. and Rice, K.}, title = {Behavior of QQ-plots and genomic control in studies of gene-environment interaction}, journal = {PLoS One}, volume = {6}, number = {5}, year = {2011}, } @article{RN386, author = {Wu, M. C. and Lee, S. and Cai, T. and Li, Y. and Boehnke, M. and Lin, X.}, title = {Rare-variant association testing for sequencing data with the sequence kernel association test}, journal = {Am J Hum Genet}, volume = {89}, number = {1}, pages = {82-93}, year = {2011}, } @article{RN454, author = {Lee, S. and Wu, M. C. and Lin, X.}, title = {Optimal tests for rare variant effects in sequencing association studies}, journal = {Biostatistics}, volume = {13}, number = {4}, pages = {762-75}, year = {2012}, } @article{RN487, author = {Lee, S. and Abecasis, G. R. and Boehnke, M. and Lin, X.}, title = {Rare-variant association analysis: study designs and statistical tests}, journal = {Am J Hum Genet}, volume = {95}, number = {1}, pages = {5-23}, year = {2014}, } @article{RN514, author = {Wu, B. and Guan, W. and Pankow, J. S.}, title = {On Efficient and Accurate Calculation of Significance P-Values for Sequence Kernel Association Testing of Variant Set}, journal = {Ann Hum Genet}, volume = {80}, number = {2}, pages = {123-35}, year = {2016}, } @article{RN245, author = {Dey, Rounak and Schmidt, Ellen M. and Abecasis, Goncalo R. and Lee, Seunggeun}, title = {A Fast and Accurate Algorithm to Test for Binary Phenotypes and Its Application to PheWAS}, journal = {The American Journal of Human Genetics}, volume = {101}, number = {1}, pages = {37-49}, year = {2017}, } @article{RN417, author = {Young, A. I. and Wauthier, F. L. and Donnelly, P.}, title = {Identifying loci affecting trait variability and detecting interactions in genome-wide association studies}, journal = {Nat Genet}, volume = {50}, number = {11}, pages = {1608-1614}, year = {2018}, } @article{RN339, author = {Liu, Y. and Chen, S. and Li, Z. and Morrison, A. C. and Boerwinkle, E. and Lin, X.}, title = {ACAT: A Fast and Powerful p Value Combination Method for Rare-Variant Analysis in Sequencing Studies}, journal = {Am J Hum Genet}, volume = {104}, number = {3}, pages = {410-421}, year = {2019}, } @article{RN482, author = {Liu, Y. and Xie, J.}, title = {Cauchy combination test: a powerful test with analytic p-value calculation under arbitrary dependency structures}, journal = {J Am Stat Assoc}, volume = {115}, number = {529}, pages = {393-402}, year = {2020}, } @article{RN452, author = {Zhao, Z. and Bi, W. and Zhou, W. and VandeHaar, P. and Fritsche, L. G. and Lee, S.}, title = {UK Biobank Whole-Exome Sequence Binary Phenome Analysis with Robust Region-Based Rare-Variant Test}, journal = {Am J Hum Genet}, volume = {106}, number = {1}, pages = {3-12}, year = {2020}, } @article{RN491, author = {Ziyatdinov, Andrey and Barber, Mathew and Marchini, Jonathan}, title = {Pooling information across burden tests in the UK Biobank exome sequencing study.}, journal = {ASHG Conference}, year = {2020}, } @article{RN457, author = {Backman, J. D. and Li, A. H. and Marcketta, A. and Sun, D. and Mbatchou, J. and Kessler, M. D. and Benner, C. and Liu, D. and Locke, A. E. and Balasubramanian, S. and Yadav, A. and Banerjee, N. and Gillies, C. E. and Damask, A. and Liu, S. and Bai, X. and Hawes, A. and Maxwell, E. and Gurski, L. and Watanabe, K. and Kosmicki, J. A. and Rajagopal, V. and Mighty, J. and Regeneron Genetics, Center and DiscovEhr and Jones, M. and Mitnaul, L. and Stahl, E. and Coppola, G. and Jorgenson, E. and Habegger, L. and Salerno, W. J. and Shuldiner, A. R. and Lotta, L. A. and Overton, J. D. and Cantor, M. N. and Reid, J. G. and Yancopoulos, G. and Kang, H. M. and Marchini, J. and Baras, A. and Abecasis, G. R. and Ferreira, M. A. R.}, title = {Exome sequencing and analysis of 454,787 UK Biobank participants}, journal = {Nature}, volume = {599}, number = {7886}, pages = {628-634}, year = {2021}, } @article{RN492, author = {Zhou, Wei and Bi, Wenjian and Zhao, Zhangchen and Dey, Kushal K. and Jagadeesh, Karthik A. and Karczewski, Konrad J. and Daly, Mark J. and Neale, Benjamin M. and Lee, Seunggeun}, title = {Set-based rare variant association tests for biobank scale sequencing data sets}, journal = {medRxiv}, year = {2021}, } @article{simon2011regularization, title={Regularization paths for Cox's proportional hazards model via coordinate descent}, author={Simon, Noah and Friedman, Jerome H and Hastie, Trevor and Tibshirani, Rob}, journal={Journal of statistical software}, volume={39}, pages={1--13}, year={2011} } @article{heinze2001solution, title={A solution to the problem of monotone likelihood in Cox regression}, author={Heinze, Georg and Schemper, Michael}, journal={Biometrics}, volume={57}, number={1}, pages={114--119}, year={2001}, publisher={Wiley Online Library} } @article{RN703, author = {Ziyatdinov, Andrey and Mbatchou, Joelle and Marcketta, Anthony and Backman, Joshua and Gaynor, Sheila and Zou, Yuxin and Joseph, Tyler and Geraghty, Benjamin and Herman, Joseph and Watanabe, Kyoko and Ghosh, Arkopravo and Kosmicki, Jack and Locke, Adam and Thornton, Timothy and Kang, Hyun Min and Ferreira, Manuel and Baras, Aris and Abecasis, Goncalo and Marchini, Jonathan}, title = {Joint testing of rare variant burden scores using non-negative least squares}, journal = {The American Journal of Human Genetics}, volume = {111}, number = {10}, pages = {2139-2149}, year = {2024}, } ================================================ FILE: docs/site/css/base.css ================================================ body { padding-top: 70px; } h1[id]:before, h2[id]:before, h3[id]:before, h4[id]:before, h5[id]:before, h6[id]:before { content: ""; display: block; margin-top: -75px; height: 75px; } p > img { max-width: 100%; height: auto; } ul.nav li.first-level { font-weight: bold; } ul.nav li.third-level { padding-left: 12px; } div.col-md-3 { padding-left: 0; } div.col-md-9 { padding-bottom: 100px; } div.source-links { float: right; } /* * Side navigation * * Scrollspy and affixed enhanced navigation to highlight sections and secondary * sections of docs content. */ /* By default it's not affixed in mobile views, so undo that */ .bs-sidebar.affix { position: static; } .bs-sidebar.well { padding: 0; } /* First level of nav */ .bs-sidenav { margin-top: 30px; margin-bottom: 30px; padding-top: 10px; padding-bottom: 10px; border-radius: 5px; } /* All levels of nav */ .bs-sidebar .nav > li > a { display: block; padding: 5px 20px; z-index: 1; } .bs-sidebar .nav > li > a:hover, .bs-sidebar .nav > li > a:focus { text-decoration: none; border-right: 1px solid; } .bs-sidebar .nav > .active > a, .bs-sidebar .nav > .active:hover > a, .bs-sidebar .nav > .active:focus > a { font-weight: bold; background-color: transparent; border-right: 1px solid; } /* Nav: second level (shown on .active) */ .bs-sidebar .nav .nav { display: none; /* Hide by default, but at >768px, show it */ margin-bottom: 8px; } .bs-sidebar .nav .nav > li > a { padding-top: 3px; padding-bottom: 3px; padding-left: 30px; font-size: 90%; } /* Show and affix the side nav when space allows it */ @media (min-width: 992px) { /* Allow the sidebar to scroll if it overflows the page. */ .bs-sidebar { overflow-y: scroll; } .bs-sidebar .nav > .active > ul { display: block; } /* Widen the fixed sidebar */ .bs-sidebar.affix, .bs-sidebar.affix-bottom { width: 213px; } .bs-sidebar.affix { position: fixed; /* Undo the static from mobile first approach */ top: 80px; max-height: calc(100% - 90px); } .bs-sidebar.affix-bottom { position: absolute; /* Undo the static from mobile first approach */ } .bs-sidebar.affix-bottom .bs-sidenav, .bs-sidebar.affix .bs-sidenav { margin-top: 0; margin-bottom: 0; } } @media (min-width: 1200px) { /* Widen the fixed sidebar again */ .bs-sidebar.affix-bottom, .bs-sidebar.affix { width: 263px; } } /* Added to support >2 level nav in drop down */ .dropdown-submenu { position: relative; } .dropdown-submenu>.dropdown-menu { top: 0; left: 100%; margin-top: 0px; margin-left: 0px; } .dropdown-submenu:hover>.dropdown-menu { display: block; } .dropdown-submenu>a:after { display: block; content: " "; float: right; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; border-left-color: #ccc; margin-top: 5px; margin-right: -10px; } .dropdown-submenu:hover>a:after { border-left-color: #fff; } .dropdown-submenu.pull-left { float: none; } .dropdown-submenu.pull-left>.dropdown-menu { left: -100%; margin-left: 00px; } /* Start Bootstrap Callouts CSS Source by Chris Pratt (https://codepen.io/chrisdpratt/pen/IAymB) MIT License*/ .bs-callout { padding: 20px; margin: 20px 0; border: 1px solid #eee; border-left-width: 5px; border-radius: 3px; background-color: #FCFDFF; } .bs-callout h4 { font-style: normal; font-weight: 400; margin-top: 0; margin-bottom: 5px; } .bs-callout p:last-child { margin-bottom: 0; } .bs-callout code { border-radius: 3px; } .bs-callout+.bs-callout { margin-top: -5px; } .bs-callout-default { border-left-color: #FA023C; /*modified from upstream default by Christopher Simpkins*/ } .bs-callout-default h4 { color: #FA023C; /*modified from upstream default by Christopher Simpkins*/ } .bs-callout-primary { border-left-color: #428bca; } .bs-callout-primary h4 { color: #428bca; } .bs-callout-success { border-left-color: #5cb85c; } .bs-callout-success h4 { color: #5cb85c; } .bs-callout-danger { border-left-color: #d9534f; } .bs-callout-danger h4 { color: #d9534f; } .bs-callout-warning { border-left-color: #f0ad4e; } .bs-callout-warning h4 { color: #f0ad4e; } .bs-callout-info { border-left-color: #5bc0de; } .bs-callout-info h4 { color: #5bc0de; } /* End Bootstrap Callouts CSS Source by Chris Pratt */ /* Admonitions */ .admonition { padding: 20px; margin: 20px 0; border: 1px solid #eee; border-left-width: 5px; border-radius: 3px; background-color: #FCFDFF; } .admonition p:last-child { margin-bottom: 0; } .admonition code { border-radius: 3px; } .admonition+.admonition { margin-top: -5px; } .admonition.note { /* csslint allow: adjoining-classes */ border-left-color: #428bca; } .admonition.warning { /* csslint allow: adjoining-classes */ border-left-color: #f0ad4e; } .admonition.danger { /* csslint allow: adjoining-classes */ border-left-color: #d9534f; } .admonition-title { font-size: 19px; font-style: normal; font-weight: 400; margin-top: 0; margin-bottom: 5px; } .admonition.note > .admonition-title { color: #428bca; } .admonition.warning > .admonition-title { color: #f0ad4e; } .admonition.danger > .admonition-title { color: #d9534f; } ================================================ FILE: docs/site/css/bootstrap-custom.css ================================================ /*! normalize.css v2.1.3 | MIT License | git.io/normalize */ article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } audio, canvas, video { display: inline-block; } audio:not([controls]) { display: none; height: 0; } [hidden], template { display: none; } html { font-family: sans-serif; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%} body { margin: 0; } a { background: transparent; } a:focus { outline: thin dotted; } a:active, a:hover { outline: 0; } h1 { margin: .67em 0; font-size: 2em; } abbr[title] { border-bottom: 1px dotted; } b, strong { font-weight: bold; } dfn { font-style: italic; } hr { height: 0; -moz-box-sizing: content-box; box-sizing: content-box; } mark { color: #000; background: #ff0; } code, kbd, pre, samp { font-family: Hack, monospace, serif; font-size: 1em; } pre { white-space: pre-wrap; } q { quotes: "\201C" "\201D" "\2018" "\2019"} small { font-size: 80%} sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } img { border: 0; } svg:not(:root) { overflow: hidden; } figure { margin: 0; } fieldset { padding: .35em .625em .75em; margin: 0 2px; border: 1px solid #c0c0c0; } legend { padding: 0; border: 0; } button, input, select, textarea { margin: 0; font-family: inherit; font-size: 100%} button, input { line-height: normal; } button, select { text-transform: none; } button, html input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; } button[disabled], html input[disabled] { cursor: default; } input[type="checkbox"], input[type="radio"] { padding: 0; box-sizing: border-box; } input[type="search"] { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; -webkit-appearance: textfield; } input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } button::-moz-focus-inner, input::-moz-focus-inner { padding: 0; border: 0; } textarea { overflow: auto; vertical-align: top; } table { border-collapse: collapse; border-spacing: 0; } @media print { * { color: #000!important; text-shadow: none!important; background: transparent!important; box-shadow: none!important; } a, a:visited { text-decoration: underline; } a[href]:after { content: " (" attr(href) ")"} abbr[title]:after { content: " (" attr(title) ")"} a[href^="javascript:"]:after, a[href^="#"]:after { content: ""} pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } img { max-width: 100%!important; } @page { margin: 2cm .5cm; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } select { background: #fff!important; } .navbar { display: none; } .table td, .table th { background-color: #fff!important; } .btn>.caret, .dropup>.btn>.caret { border-top-color: #000!important; } .label { border: 1px solid #000; } .table { border-collapse: collapse!important; } .table-bordered th, .table-bordered td { border: 1px solid #ddd!important; } }*, *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } html { font-size: 62.5%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } body { font-family: Merriweather, Georgia, serif; font-size: 14px; line-height: 1.428571429; color: #222; background-color: #fff; } input, button, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit; } a { color: #008cba; text-decoration: none; } a:hover, a:focus { color: #00526e; text-decoration: underline; } a:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } img { vertical-align: middle; } .img-responsive { display: block; height: auto; max-width: 100%} .img-rounded { border-radius: 0; } .img-thumbnail { display: inline-block; height: auto; max-width: 100%; padding: 4px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 0; -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; } .img-circle { border-radius: 50%} hr { margin-top: 21px; margin-bottom: 21px; border: 0; border-top: 1px solid #ddd; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 300; line-height: 1.1; color: inherit; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { font-weight: normal; line-height: 1; color: #999; } h1, h2, h3 { margin-top: 21px; margin-bottom: 10.5px; } h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small { font-size: 65%} h4, h5, h6 { margin-top: 10.5px; margin-bottom: 10.5px; } h4 small, h5 small, h6 small, h4 .small, h5 .small, h6 .small { font-size: 75%} h1, .h1 { font-size: 39px; } h2, .h2 { font-size: 32px; } h3, .h3 { font-size: 26px; } h4, .h4 { font-size: 19px; } h5, .h5 { font-size: 15px; } h6, .h6 { font-size: 13px; } p { margin: 0 0 10.5px; } .lead { margin-bottom: 21px; font-size: 17px; font-weight: 200; line-height: 1.4; } @media(min-width:768px) { .lead { font-size: 22.5px; } }small, .small { font-size: 85%} cite { font-style: normal; } .text-muted { color: #999; } .text-primary { color: #008cba; } .text-primary:hover { color: #006687; } .text-warning { color: #e99002; } .text-warning:hover { color: #b67102; } .text-danger { color: #f04124; } .text-danger:hover { color: #d32a0e; } .text-success { color: #43ac6a; } .text-success:hover { color: #358753; } .text-info { color: #5bc0de; } .text-info:hover { color: #31b0d5; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .page-header { padding-bottom: 9.5px; margin: 42px 0 21px; border-bottom: 1px solid #ddd; } ul, ol { margin-top: 0; margin-bottom: 10.5px; } ul ul, ol ul, ul ol, ol ol { margin-bottom: 0; } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; } .list-inline>li { display: inline-block; padding-right: 5px; padding-left: 5px; } .list-inline>li:first-child { padding-left: 0; } dl { margin-top: 0; margin-bottom: 21px; } dt, dd { line-height: 1.428571429; } dt { font-weight: bold; } dd { margin-left: 0; } @media(min-width:768px) { .dl-horizontal dt { float: left; width: 160px; overflow: hidden; clear: left; text-align: right; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } .dl-horizontal dd:before, .dl-horizontal dd:after { display: table; content: " "} .dl-horizontal dd:after { clear: both; } }abbr[title], abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #999; } .initialism { font-size: 90%; text-transform: uppercase; } blockquote { padding: 10.5px 21px; margin: 0 0 21px; border-left: 5px solid #ddd; } blockquote p { font-size: 18.75px; font-weight: 300; line-height: 1.25; } blockquote p:last-child { margin-bottom: 0; } blockquote small, blockquote .small { display: block; line-height: 1.428571429; color: #6f6f6f; } blockquote small:before, blockquote .small:before { content: '\2014 \00A0'} blockquote.pull-right { padding-right: 15px; padding-left: 0; border-right: 5px solid #ddd; border-left: 0; } blockquote.pull-right p, blockquote.pull-right small, blockquote.pull-right .small { text-align: right; } blockquote.pull-right small:before, blockquote.pull-right .small:before { content: ''} blockquote.pull-right small:after, blockquote.pull-right .small:after { content: '\00A0 \2014'} blockquote:before, blockquote:after { content: ""} address { margin-bottom: 21px; font-style: normal; line-height: 1.428571429; } code, kbd, pre, samp { font-family: Hack, Menlo, Monaco, Consolas, "Courier New", monospace; } code { padding: 2px 4px; font-size: 90%; color: #c7254e; white-space: nowrap; background-color: #f9f2f4; border-radius: 0; } pre { display: block; padding: 10px; margin: 0 0 10.5px; font-size: 14px; line-height: 1.428571429; color: #333; word-break: break-all; word-wrap: break-word; background-color: #f5f5f5; border: 1px solid #ccc; border-radius: 0; } pre code { padding: 0; font-size: inherit; color: inherit; white-space: pre-wrap; background-color: transparent; border-radius: 0; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } .container { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } .container:before, .container:after { display: table; content: " "} .container:after { clear: both; } @media(min-width:768px) { .container { width: 750px; } }@media(min-width:992px) { .container { width: 970px; } }@media(min-width:1200px) { .container { width: 1170px; } }.row { margin-right: -15px; margin-left: -15px; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .row:before, .row:after { display: table; content: " "} .row:after { clear: both; } .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; padding-right: 15px; padding-left: 15px; } .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { float: left; } .col-xs-12 { width: 100%} .col-xs-11 { width: 91.66666666666666%} .col-xs-10 { width: 83.33333333333334%} .col-xs-9 { width: 75%} .col-xs-8 { width: 66.66666666666666%} .col-xs-7 { width: 58.333333333333336%} .col-xs-6 { width: 50%} .col-xs-5 { width: 41.66666666666667%} .col-xs-4 { width: 33.33333333333333%} .col-xs-3 { width: 25%} .col-xs-2 { width: 16.666666666666664%} .col-xs-1 { width: 8.333333333333332%} .col-xs-pull-12 { right: 100%} .col-xs-pull-11 { right: 91.66666666666666%} .col-xs-pull-10 { right: 83.33333333333334%} .col-xs-pull-9 { right: 75%} .col-xs-pull-8 { right: 66.66666666666666%} .col-xs-pull-7 { right: 58.333333333333336%} .col-xs-pull-6 { right: 50%} .col-xs-pull-5 { right: 41.66666666666667%} .col-xs-pull-4 { right: 33.33333333333333%} .col-xs-pull-3 { right: 25%} .col-xs-pull-2 { right: 16.666666666666664%} .col-xs-pull-1 { right: 8.333333333333332%} .col-xs-pull-0 { right: 0; } .col-xs-push-12 { left: 100%} .col-xs-push-11 { left: 91.66666666666666%} .col-xs-push-10 { left: 83.33333333333334%} .col-xs-push-9 { left: 75%} .col-xs-push-8 { left: 66.66666666666666%} .col-xs-push-7 { left: 58.333333333333336%} .col-xs-push-6 { left: 50%} .col-xs-push-5 { left: 41.66666666666667%} .col-xs-push-4 { left: 33.33333333333333%} .col-xs-push-3 { left: 25%} .col-xs-push-2 { left: 16.666666666666664%} .col-xs-push-1 { left: 8.333333333333332%} .col-xs-push-0 { left: 0; } .col-xs-offset-12 { margin-left: 100%} .col-xs-offset-11 { margin-left: 91.66666666666666%} .col-xs-offset-10 { margin-left: 83.33333333333334%} .col-xs-offset-9 { margin-left: 75%} .col-xs-offset-8 { margin-left: 66.66666666666666%} .col-xs-offset-7 { margin-left: 58.333333333333336%} .col-xs-offset-6 { margin-left: 50%} .col-xs-offset-5 { margin-left: 41.66666666666667%} .col-xs-offset-4 { margin-left: 33.33333333333333%} .col-xs-offset-3 { margin-left: 25%} .col-xs-offset-2 { margin-left: 16.666666666666664%} .col-xs-offset-1 { margin-left: 8.333333333333332%} .col-xs-offset-0 { margin-left: 0; } @media(min-width:768px) { .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left; } .col-sm-12 { width: 100%} .col-sm-11 { width: 91.66666666666666%} .col-sm-10 { width: 83.33333333333334%} .col-sm-9 { width: 75%} .col-sm-8 { width: 66.66666666666666%} .col-sm-7 { width: 58.333333333333336%} .col-sm-6 { width: 50%} .col-sm-5 { width: 41.66666666666667%} .col-sm-4 { width: 33.33333333333333%} .col-sm-3 { width: 25%} .col-sm-2 { width: 16.666666666666664%} .col-sm-1 { width: 8.333333333333332%} .col-sm-pull-12 { right: 100%} .col-sm-pull-11 { right: 91.66666666666666%} .col-sm-pull-10 { right: 83.33333333333334%} .col-sm-pull-9 { right: 75%} .col-sm-pull-8 { right: 66.66666666666666%} .col-sm-pull-7 { right: 58.333333333333336%} .col-sm-pull-6 { right: 50%} .col-sm-pull-5 { right: 41.66666666666667%} .col-sm-pull-4 { right: 33.33333333333333%} .col-sm-pull-3 { right: 25%} .col-sm-pull-2 { right: 16.666666666666664%} .col-sm-pull-1 { right: 8.333333333333332%} .col-sm-pull-0 { right: 0; } .col-sm-push-12 { left: 100%} .col-sm-push-11 { left: 91.66666666666666%} .col-sm-push-10 { left: 83.33333333333334%} .col-sm-push-9 { left: 75%} .col-sm-push-8 { left: 66.66666666666666%} .col-sm-push-7 { left: 58.333333333333336%} .col-sm-push-6 { left: 50%} .col-sm-push-5 { left: 41.66666666666667%} .col-sm-push-4 { left: 33.33333333333333%} .col-sm-push-3 { left: 25%} .col-sm-push-2 { left: 16.666666666666664%} .col-sm-push-1 { left: 8.333333333333332%} .col-sm-push-0 { left: 0; } .col-sm-offset-12 { margin-left: 100%} .col-sm-offset-11 { margin-left: 91.66666666666666%} .col-sm-offset-10 { margin-left: 83.33333333333334%} .col-sm-offset-9 { margin-left: 75%} .col-sm-offset-8 { margin-left: 66.66666666666666%} .col-sm-offset-7 { margin-left: 58.333333333333336%} .col-sm-offset-6 { margin-left: 50%} .col-sm-offset-5 { margin-left: 41.66666666666667%} .col-sm-offset-4 { margin-left: 33.33333333333333%} .col-sm-offset-3 { margin-left: 25%} .col-sm-offset-2 { margin-left: 16.666666666666664%} .col-sm-offset-1 { margin-left: 8.333333333333332%} .col-sm-offset-0 { margin-left: 0; } }@media(min-width:992px) { .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } .col-md-12 { width: 100%} .col-md-11 { width: 91.66666666666666%} .col-md-10 { width: 83.33333333333334%} .col-md-9 { width: 75%} .col-md-8 { width: 66.66666666666666%} .col-md-7 { width: 58.333333333333336%} .col-md-6 { width: 50%} .col-md-5 { width: 41.66666666666667%} .col-md-4 { width: 33.33333333333333%} .col-md-3 { width: 25%} .col-md-2 { width: 16.666666666666664%} .col-md-1 { width: 8.333333333333332%} .col-md-pull-12 { right: 100%} .col-md-pull-11 { right: 91.66666666666666%} .col-md-pull-10 { right: 83.33333333333334%} .col-md-pull-9 { right: 75%} .col-md-pull-8 { right: 66.66666666666666%} .col-md-pull-7 { right: 58.333333333333336%} .col-md-pull-6 { right: 50%} .col-md-pull-5 { right: 41.66666666666667%} .col-md-pull-4 { right: 33.33333333333333%} .col-md-pull-3 { right: 25%} .col-md-pull-2 { right: 16.666666666666664%} .col-md-pull-1 { right: 8.333333333333332%} .col-md-pull-0 { right: 0; } .col-md-push-12 { left: 100%} .col-md-push-11 { left: 91.66666666666666%} .col-md-push-10 { left: 83.33333333333334%} .col-md-push-9 { left: 75%} .col-md-push-8 { left: 66.66666666666666%} .col-md-push-7 { left: 58.333333333333336%} .col-md-push-6 { left: 50%} .col-md-push-5 { left: 41.66666666666667%} .col-md-push-4 { left: 33.33333333333333%} .col-md-push-3 { left: 25%} .col-md-push-2 { left: 16.666666666666664%} .col-md-push-1 { left: 8.333333333333332%} .col-md-push-0 { left: 0; } .col-md-offset-12 { margin-left: 100%} .col-md-offset-11 { margin-left: 91.66666666666666%} .col-md-offset-10 { margin-left: 83.33333333333334%} .col-md-offset-9 { margin-left: 75%} .col-md-offset-8 { margin-left: 66.66666666666666%} .col-md-offset-7 { margin-left: 58.333333333333336%} .col-md-offset-6 { margin-left: 50%} .col-md-offset-5 { margin-left: 41.66666666666667%} .col-md-offset-4 { margin-left: 33.33333333333333%} .col-md-offset-3 { margin-left: 25%} .col-md-offset-2 { margin-left: 16.666666666666664%} .col-md-offset-1 { margin-left: 8.333333333333332%} .col-md-offset-0 { margin-left: 0; } }@media(min-width:1200px) { .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { float: left; } .col-lg-12 { width: 100%} .col-lg-11 { width: 91.66666666666666%} .col-lg-10 { width: 83.33333333333334%} .col-lg-9 { width: 75%} .col-lg-8 { width: 66.66666666666666%} .col-lg-7 { width: 58.333333333333336%} .col-lg-6 { width: 50%} .col-lg-5 { width: 41.66666666666667%} .col-lg-4 { width: 33.33333333333333%} .col-lg-3 { width: 25%} .col-lg-2 { width: 16.666666666666664%} .col-lg-1 { width: 8.333333333333332%} .col-lg-pull-12 { right: 100%} .col-lg-pull-11 { right: 91.66666666666666%} .col-lg-pull-10 { right: 83.33333333333334%} .col-lg-pull-9 { right: 75%} .col-lg-pull-8 { right: 66.66666666666666%} .col-lg-pull-7 { right: 58.333333333333336%} .col-lg-pull-6 { right: 50%} .col-lg-pull-5 { right: 41.66666666666667%} .col-lg-pull-4 { right: 33.33333333333333%} .col-lg-pull-3 { right: 25%} .col-lg-pull-2 { right: 16.666666666666664%} .col-lg-pull-1 { right: 8.333333333333332%} .col-lg-pull-0 { right: 0; } .col-lg-push-12 { left: 100%} .col-lg-push-11 { left: 91.66666666666666%} .col-lg-push-10 { left: 83.33333333333334%} .col-lg-push-9 { left: 75%} .col-lg-push-8 { left: 66.66666666666666%} .col-lg-push-7 { left: 58.333333333333336%} .col-lg-push-6 { left: 50%} .col-lg-push-5 { left: 41.66666666666667%} .col-lg-push-4 { left: 33.33333333333333%} .col-lg-push-3 { left: 25%} .col-lg-push-2 { left: 16.666666666666664%} .col-lg-push-1 { left: 8.333333333333332%} .col-lg-push-0 { left: 0; } .col-lg-offset-12 { margin-left: 100%} .col-lg-offset-11 { margin-left: 91.66666666666666%} .col-lg-offset-10 { margin-left: 83.33333333333334%} .col-lg-offset-9 { margin-left: 75%} .col-lg-offset-8 { margin-left: 66.66666666666666%} .col-lg-offset-7 { margin-left: 58.333333333333336%} .col-lg-offset-6 { margin-left: 50%} .col-lg-offset-5 { margin-left: 41.66666666666667%} .col-lg-offset-4 { margin-left: 33.33333333333333%} .col-lg-offset-3 { margin-left: 25%} .col-lg-offset-2 { margin-left: 16.666666666666664%} .col-lg-offset-1 { margin-left: 8.333333333333332%} .col-lg-offset-0 { margin-left: 0; } }table { max-width: 100%; background-color: transparent; } th { text-align: left; } .table { width: 100%; margin-bottom: 21px; } .table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { padding: 8px; line-height: 1.428571429; vertical-align: top; border-top: 1px solid #ddd; } .table>thead>tr>th { vertical-align: bottom; border-bottom: 2px solid #ddd; } .table>caption+thead>tr:first-child>th, .table>colgroup+thead>tr:first-child>th, .table>thead:first-child>tr:first-child>th, .table>caption+thead>tr:first-child>td, .table>colgroup+thead>tr:first-child>td, .table>thead:first-child>tr:first-child>td { border-top: 0; } .table>tbody+tbody { border-top: 2px solid #ddd; } .table .table { background-color: #fff; } .table-condensed>thead>tr>th, .table-condensed>tbody>tr>th, .table-condensed>tfoot>tr>th, .table-condensed>thead>tr>td, .table-condensed>tbody>tr>td, .table-condensed>tfoot>tr>td { padding: 5px; } .table-bordered { border: 1px solid #ddd; } .table-bordered>thead>tr>th, .table-bordered>tbody>tr>th, .table-bordered>tfoot>tr>th, .table-bordered>thead>tr>td, .table-bordered>tbody>tr>td, .table-bordered>tfoot>tr>td { border: 1px solid #ddd; } .table-bordered>thead>tr>th, .table-bordered>thead>tr>td { border-bottom-width: 2px; } .table-striped>tbody>tr:nth-child(odd)>td, .table-striped>tbody>tr:nth-child(odd)>th { background-color: #f9f9f9; } .table-hover>tbody>tr:hover>td, .table-hover>tbody>tr:hover>th { background-color: #f5f5f5; } table col[class*="col-"] { position: static; display: table-column; float: none; } table td[class*="col-"], table th[class*="col-"] { display: table-cell; float: none; } .table>thead>tr>.active, .table>tbody>tr>.active, .table>tfoot>tr>.active, .table>thead>.active>td, .table>tbody>.active>td, .table>tfoot>.active>td, .table>thead>.active>th, .table>tbody>.active>th, .table>tfoot>.active>th { background-color: #f5f5f5; } .table-hover>tbody>tr>.active:hover, .table-hover>tbody>.active:hover>td, .table-hover>tbody>.active:hover>th { background-color: #e8e8e8; } .table>thead>tr>.success, .table>tbody>tr>.success, .table>tfoot>tr>.success, .table>thead>.success>td, .table>tbody>.success>td, .table>tfoot>.success>td, .table>thead>.success>th, .table>tbody>.success>th, .table>tfoot>.success>th { background-color: #dff0d8; } .table-hover>tbody>tr>.success:hover, .table-hover>tbody>.success:hover>td, .table-hover>tbody>.success:hover>th { background-color: #d0e9c6; } .table>thead>tr>.danger, .table>tbody>tr>.danger, .table>tfoot>tr>.danger, .table>thead>.danger>td, .table>tbody>.danger>td, .table>tfoot>.danger>td, .table>thead>.danger>th, .table>tbody>.danger>th, .table>tfoot>.danger>th { background-color: #f2dede; } .table-hover>tbody>tr>.danger:hover, .table-hover>tbody>.danger:hover>td, .table-hover>tbody>.danger:hover>th { background-color: #ebcccc; } .table>thead>tr>.warning, .table>tbody>tr>.warning, .table>tfoot>tr>.warning, .table>thead>.warning>td, .table>tbody>.warning>td, .table>tfoot>.warning>td, .table>thead>.warning>th, .table>tbody>.warning>th, .table>tfoot>.warning>th { background-color: #fcf8e3; } .table-hover>tbody>tr>.warning:hover, .table-hover>tbody>.warning:hover>td, .table-hover>tbody>.warning:hover>th { background-color: #faf2cc; } @media(max-width:767px) { .table-responsive { width: 100%; margin-bottom: 15.75px; overflow-x: scroll; overflow-y: hidden; border: 1px solid #ddd; -ms-overflow-style: -ms-autohiding-scrollbar; -webkit-overflow-scrolling: touch; } .table-responsive>.table { margin-bottom: 0; } .table-responsive>.table>thead>tr>th, .table-responsive>.table>tbody>tr>th, .table-responsive>.table>tfoot>tr>th, .table-responsive>.table>thead>tr>td, .table-responsive>.table>tbody>tr>td, .table-responsive>.table>tfoot>tr>td { white-space: nowrap; } .table-responsive>.table-bordered { border: 0; } .table-responsive>.table-bordered>thead>tr>th:first-child, .table-responsive>.table-bordered>tbody>tr>th:first-child, .table-responsive>.table-bordered>tfoot>tr>th:first-child, .table-responsive>.table-bordered>thead>tr>td:first-child, .table-responsive>.table-bordered>tbody>tr>td:first-child, .table-responsive>.table-bordered>tfoot>tr>td:first-child { border-left: 0; } .table-responsive>.table-bordered>thead>tr>th:last-child, .table-responsive>.table-bordered>tbody>tr>th:last-child, .table-responsive>.table-bordered>tfoot>tr>th:last-child, .table-responsive>.table-bordered>thead>tr>td:last-child, .table-responsive>.table-bordered>tbody>tr>td:last-child, .table-responsive>.table-bordered>tfoot>tr>td:last-child { border-right: 0; } .table-responsive>.table-bordered>tbody>tr:last-child>th, .table-responsive>.table-bordered>tfoot>tr:last-child>th, .table-responsive>.table-bordered>tbody>tr:last-child>td, .table-responsive>.table-bordered>tfoot>tr:last-child>td { border-bottom: 0; } }fieldset { padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; padding: 0; margin-bottom: 21px; font-size: 22.5px; line-height: inherit; color: #333; border: 0; border-bottom: 1px solid #e5e5e5; } label { display: inline-block; margin-bottom: 5px; font-weight: bold; } input[type="search"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; line-height: normal; } input[type="file"] { display: block; } select[multiple], select[size] { height: auto; } select optgroup { font-family: inherit; font-size: inherit; font-style: inherit; } input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { height: auto; } output { display: block; padding-top: 7px; font-size: 15px; line-height: 1.428571429; color: #6f6f6f; vertical-align: middle; } .form-control { display: block; width: 100%; height: 35px; padding: 6px 12px; font-size: 15px; line-height: 1.428571429; color: #6f6f6f; vertical-align: middle; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } .form-control:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } .form-control:-moz-placeholder { color: #999; } .form-control::-moz-placeholder { color: #999; opacity: 1; } .form-control:-ms-input-placeholder { color: #999; } .form-control::-webkit-input-placeholder { color: #999; } .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { cursor: not-allowed; background-color: #eee; } textarea.form-control { height: auto; } .form-group { margin-bottom: 15px; } .radio, .checkbox { display: block; min-height: 21px; padding-left: 20px; margin-top: 10px; margin-bottom: 10px; vertical-align: middle; } .radio label, .checkbox label { display: inline; margin-bottom: 0; font-weight: normal; cursor: pointer; } .radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { float: left; margin-left: -20px; } .radio+.radio, .checkbox+.checkbox { margin-top: -5px; } .radio-inline, .checkbox-inline { display: inline-block; padding-left: 20px; margin-bottom: 0; font-weight: normal; vertical-align: middle; cursor: pointer; } .radio-inline+.radio-inline, .checkbox-inline+.checkbox-inline { margin-top: 0; margin-left: 10px; } input[type="radio"][disabled], input[type="checkbox"][disabled], .radio[disabled], .radio-inline[disabled], .checkbox[disabled], .checkbox-inline[disabled], fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"], fieldset[disabled] .radio, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline { cursor: not-allowed; } .input-sm { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 0; } select.input-sm { height: 30px; line-height: 30px; } textarea.input-sm { height: auto; } .input-lg { height: 48px; padding: 10px 16px; font-size: 19px; line-height: 1.33; border-radius: 0; } select.input-lg { height: 48px; line-height: 48px; } textarea.input-lg { height: auto; } .has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline { color: #e99002; } .has-warning .form-control { border-color: #e99002; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-warning .form-control:focus { border-color: #b67102; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #febc53; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #febc53; } .has-warning .input-group-addon { color: #e99002; background-color: #fcf8e3; border-color: #e99002; } .has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline { color: #f04124; } .has-error .form-control { border-color: #f04124; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-error .form-control:focus { border-color: #d32a0e; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f79483; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f79483; } .has-error .input-group-addon { color: #f04124; background-color: #f2dede; border-color: #f04124; } .has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline { color: #43ac6a; } .has-success .form-control { border-color: #43ac6a; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-success .form-control:focus { border-color: #358753; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #85d0a1; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #85d0a1; } .has-success .input-group-addon { color: #43ac6a; background-color: #dff0d8; border-color: #43ac6a; } .form-control-static { margin-bottom: 0; } .help-block { display: block; margin-top: 5px; margin-bottom: 10px; color: #626262; } @media(min-width:768px) { .form-inline .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } .form-inline .form-control { display: inline-block; } .form-inline select.form-control { width: auto; } .form-inline .radio, .form-inline .checkbox { display: inline-block; padding-left: 0; margin-top: 0; margin-bottom: 0; } .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { float: none; margin-left: 0; } }.form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { padding-top: 7px; margin-top: 0; margin-bottom: 0; } .form-horizontal .radio, .form-horizontal .checkbox { min-height: 28px; } .form-horizontal .form-group { margin-right: -15px; margin-left: -15px; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-group:before, .form-horizontal .form-group:after { display: table; content: " "} .form-horizontal .form-group:after { clear: both; } .form-horizontal .form-control-static { padding-top: 7px; } @media(min-width:768px) { .form-horizontal .control-label { text-align: right; } }.btn { display: inline-block; padding: 6px 12px; margin-bottom: 0; font-size: 15px; font-weight: normal; line-height: 1.428571429; text-align: center; white-space: nowrap; vertical-align: middle; cursor: pointer; background-image: none; border: 1px solid transparent; border-radius: 0; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; } .btn:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn:hover, .btn:focus { color: #333; text-decoration: none; } .btn:active, .btn.active { background-image: none; outline: 0; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { pointer-events: none; cursor: not-allowed; opacity: .65; filter: alpha(opacity=65); -webkit-box-shadow: none; box-shadow: none; } .btn-default { color: #333; background-color: #e7e7e7; border-color: #dadada; } .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { color: #333; background-color: #d3d3d3; border-color: #bbb; } .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { background-image: none; } .btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { background-color: #e7e7e7; border-color: #dadada; } .btn-default .badge { color: #e7e7e7; background-color: #fff; } .btn-primary { color: #fff; background-color: #008cba; border-color: #0079a1; } .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { color: #fff; background-color: #006d91; border-color: #004b63; } .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { background-image: none; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #008cba; border-color: #0079a1; } .btn-primary .badge { color: #008cba; background-color: #fff; } .btn-warning { color: #fff; background-color: #e99002; border-color: #d08002; } .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { color: #fff; background-color: #c17702; border-color: #935b01; } .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { background-image: none; } .btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { background-color: #e99002; border-color: #d08002; } .btn-warning .badge { color: #e99002; background-color: #fff; } .btn-danger { color: #fff; background-color: #f04124; border-color: #ea2f10; } .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { color: #fff; background-color: #dc2c0f; border-color: #b1240c; } .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { background-image: none; } .btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { background-color: #f04124; border-color: #ea2f10; } .btn-danger .badge { color: #f04124; background-color: #fff; } .btn-success { color: #fff; background-color: #43ac6a; border-color: #3c9a5f; } .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { color: #fff; background-color: #388f58; border-color: #2b6e44; } .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { background-image: none; } .btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { background-color: #43ac6a; border-color: #3c9a5f; } .btn-success .badge { color: #43ac6a; background-color: #fff; } .btn-info { color: #fff; background-color: #5bc0de; border-color: #46b8da; } .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { color: #fff; background-color: #39b3d7; border-color: #269abc; } .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { background-image: none; } .btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { background-color: #5bc0de; border-color: #46b8da; } .btn-info .badge { color: #5bc0de; background-color: #fff; } .btn-link { font-weight: normal; color: #008cba; cursor: pointer; border-radius: 0; } .btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } .btn-link:hover, .btn-link:focus { color: #00526e; text-decoration: underline; background-color: transparent; } .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { color: #999; text-decoration: none; } .btn-lg { padding: 10px 16px; font-size: 19px; line-height: 1.33; border-radius: 0; } .btn-sm { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 0; } .btn-xs { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 0; } .btn-block { display: block; width: 100%; padding-right: 0; padding-left: 0; } .btn-block+.btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%} .fade { opacity: 0; -webkit-transition: opacity .15s linear; transition: opacity .15s linear; } .fade.in { opacity: 1; } .collapse { display: none; } .collapse.in { display: block; } .collapsing { position: relative; height: 0; overflow: hidden; -webkit-transition: height .35s ease; transition: height .35s ease; } @font-face { font-family: 'Glyphicons Halflings'; src: url('../fonts/glyphicons-halflings-regular.eot'); src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); } .glyphicon { position: relative; top: 1px; display: inline-block; font-family: 'Glyphicons Halflings'; -webkit-font-smoothing: antialiased; font-style: normal; font-weight: normal; line-height: 1; -moz-osx-font-smoothing: grayscale; } .glyphicon:empty { width: 1em; } .glyphicon-asterisk:before { content: "\2a"} .glyphicon-plus:before { content: "\2b"} .glyphicon-euro:before { content: "\20ac"} .glyphicon-minus:before { content: "\2212"} .glyphicon-cloud:before { content: "\2601"} .glyphicon-envelope:before { content: "\2709"} .glyphicon-pencil:before { content: "\270f"} .glyphicon-glass:before { content: "\e001"} .glyphicon-music:before { content: "\e002"} .glyphicon-search:before { content: "\e003"} .glyphicon-heart:before { content: "\e005"} .glyphicon-star:before { content: "\e006"} .glyphicon-star-empty:before { content: "\e007"} .glyphicon-user:before { content: "\e008"} .glyphicon-film:before { content: "\e009"} .glyphicon-th-large:before { content: "\e010"} .glyphicon-th:before { content: "\e011"} .glyphicon-th-list:before { content: "\e012"} .glyphicon-ok:before { content: "\e013"} .glyphicon-remove:before { content: "\e014"} .glyphicon-zoom-in:before { content: "\e015"} .glyphicon-zoom-out:before { content: "\e016"} .glyphicon-off:before { content: "\e017"} .glyphicon-signal:before { content: "\e018"} .glyphicon-cog:before { content: "\e019"} .glyphicon-trash:before { content: "\e020"} .glyphicon-home:before { content: "\e021"} .glyphicon-file:before { content: "\e022"} .glyphicon-time:before { content: "\e023"} .glyphicon-road:before { content: "\e024"} .glyphicon-download-alt:before { content: "\e025"} .glyphicon-download:before { content: "\e026"} .glyphicon-upload:before { content: "\e027"} .glyphicon-inbox:before { content: "\e028"} .glyphicon-play-circle:before { content: "\e029"} .glyphicon-repeat:before { content: "\e030"} .glyphicon-refresh:before { content: "\e031"} .glyphicon-list-alt:before { content: "\e032"} .glyphicon-lock:before { content: "\e033"} .glyphicon-flag:before { content: "\e034"} .glyphicon-headphones:before { content: "\e035"} .glyphicon-volume-off:before { content: "\e036"} .glyphicon-volume-down:before { content: "\e037"} .glyphicon-volume-up:before { content: "\e038"} .glyphicon-qrcode:before { content: "\e039"} .glyphicon-barcode:before { content: "\e040"} .glyphicon-tag:before { content: "\e041"} .glyphicon-tags:before { content: "\e042"} .glyphicon-book:before { content: "\e043"} .glyphicon-bookmark:before { content: "\e044"} .glyphicon-print:before { content: "\e045"} .glyphicon-camera:before { content: "\e046"} .glyphicon-font:before { content: "\e047"} .glyphicon-bold:before { content: "\e048"} .glyphicon-italic:before { content: "\e049"} .glyphicon-text-height:before { content: "\e050"} .glyphicon-text-width:before { content: "\e051"} .glyphicon-align-left:before { content: "\e052"} .glyphicon-align-center:before { content: "\e053"} .glyphicon-align-right:before { content: "\e054"} .glyphicon-align-justify:before { content: "\e055"} .glyphicon-list:before { content: "\e056"} .glyphicon-indent-left:before { content: "\e057"} .glyphicon-indent-right:before { content: "\e058"} .glyphicon-facetime-video:before { content: "\e059"} .glyphicon-picture:before { content: "\e060"} .glyphicon-map-marker:before { content: "\e062"} .glyphicon-adjust:before { content: "\e063"} .glyphicon-tint:before { content: "\e064"} .glyphicon-edit:before { content: "\e065"} .glyphicon-share:before { content: "\e066"} .glyphicon-check:before { content: "\e067"} .glyphicon-move:before { content: "\e068"} .glyphicon-step-backward:before { content: "\e069"} .glyphicon-fast-backward:before { content: "\e070"} .glyphicon-backward:before { content: "\e071"} .glyphicon-play:before { content: "\e072"} .glyphicon-pause:before { content: "\e073"} .glyphicon-stop:before { content: "\e074"} .glyphicon-forward:before { content: "\e075"} .glyphicon-fast-forward:before { content: "\e076"} .glyphicon-step-forward:before { content: "\e077"} .glyphicon-eject:before { content: "\e078"} .glyphicon-chevron-left:before { content: "\e079"} .glyphicon-chevron-right:before { content: "\e080"} .glyphicon-plus-sign:before { content: "\e081"} .glyphicon-minus-sign:before { content: "\e082"} .glyphicon-remove-sign:before { content: "\e083"} .glyphicon-ok-sign:before { content: "\e084"} .glyphicon-question-sign:before { content: "\e085"} .glyphicon-info-sign:before { content: "\e086"} .glyphicon-screenshot:before { content: "\e087"} .glyphicon-remove-circle:before { content: "\e088"} .glyphicon-ok-circle:before { content: "\e089"} .glyphicon-ban-circle:before { content: "\e090"} .glyphicon-arrow-left:before { content: "\e091"} .glyphicon-arrow-right:before { content: "\e092"} .glyphicon-arrow-up:before { content: "\e093"} .glyphicon-arrow-down:before { content: "\e094"} .glyphicon-share-alt:before { content: "\e095"} .glyphicon-resize-full:before { content: "\e096"} .glyphicon-resize-small:before { content: "\e097"} .glyphicon-exclamation-sign:before { content: "\e101"} .glyphicon-gift:before { content: "\e102"} .glyphicon-leaf:before { content: "\e103"} .glyphicon-fire:before { content: "\e104"} .glyphicon-eye-open:before { content: "\e105"} .glyphicon-eye-close:before { content: "\e106"} .glyphicon-warning-sign:before { content: "\e107"} .glyphicon-plane:before { content: "\e108"} .glyphicon-calendar:before { content: "\e109"} .glyphicon-random:before { content: "\e110"} .glyphicon-comment:before { content: "\e111"} .glyphicon-magnet:before { content: "\e112"} .glyphicon-chevron-up:before { content: "\e113"} .glyphicon-chevron-down:before { content: "\e114"} .glyphicon-retweet:before { content: "\e115"} .glyphicon-shopping-cart:before { content: "\e116"} .glyphicon-folder-close:before { content: "\e117"} .glyphicon-folder-open:before { content: "\e118"} .glyphicon-resize-vertical:before { content: "\e119"} .glyphicon-resize-horizontal:before { content: "\e120"} .glyphicon-hdd:before { content: "\e121"} .glyphicon-bullhorn:before { content: "\e122"} .glyphicon-bell:before { content: "\e123"} .glyphicon-certificate:before { content: "\e124"} .glyphicon-thumbs-up:before { content: "\e125"} .glyphicon-thumbs-down:before { content: "\e126"} .glyphicon-hand-right:before { content: "\e127"} .glyphicon-hand-left:before { content: "\e128"} .glyphicon-hand-up:before { content: "\e129"} .glyphicon-hand-down:before { content: "\e130"} .glyphicon-circle-arrow-right:before { content: "\e131"} .glyphicon-circle-arrow-left:before { content: "\e132"} .glyphicon-circle-arrow-up:before { content: "\e133"} .glyphicon-circle-arrow-down:before { content: "\e134"} .glyphicon-globe:before { content: "\e135"} .glyphicon-wrench:before { content: "\e136"} .glyphicon-tasks:before { content: "\e137"} .glyphicon-filter:before { content: "\e138"} .glyphicon-briefcase:before { content: "\e139"} .glyphicon-fullscreen:before { content: "\e140"} .glyphicon-dashboard:before { content: "\e141"} .glyphicon-paperclip:before { content: "\e142"} .glyphicon-heart-empty:before { content: "\e143"} .glyphicon-link:before { content: "\e144"} .glyphicon-phone:before { content: "\e145"} .glyphicon-pushpin:before { content: "\e146"} .glyphicon-usd:before { content: "\e148"} .glyphicon-gbp:before { content: "\e149"} .glyphicon-sort:before { content: "\e150"} .glyphicon-sort-by-alphabet:before { content: "\e151"} .glyphicon-sort-by-alphabet-alt:before { content: "\e152"} .glyphicon-sort-by-order:before { content: "\e153"} .glyphicon-sort-by-order-alt:before { content: "\e154"} .glyphicon-sort-by-attributes:before { content: "\e155"} .glyphicon-sort-by-attributes-alt:before { content: "\e156"} .glyphicon-unchecked:before { content: "\e157"} .glyphicon-expand:before { content: "\e158"} .glyphicon-collapse-down:before { content: "\e159"} .glyphicon-collapse-up:before { content: "\e160"} .glyphicon-log-in:before { content: "\e161"} .glyphicon-flash:before { content: "\e162"} .glyphicon-log-out:before { content: "\e163"} .glyphicon-new-window:before { content: "\e164"} .glyphicon-record:before { content: "\e165"} .glyphicon-save:before { content: "\e166"} .glyphicon-open:before { content: "\e167"} .glyphicon-saved:before { content: "\e168"} .glyphicon-import:before { content: "\e169"} .glyphicon-export:before { content: "\e170"} .glyphicon-send:before { content: "\e171"} .glyphicon-floppy-disk:before { content: "\e172"} .glyphicon-floppy-saved:before { content: "\e173"} .glyphicon-floppy-remove:before { content: "\e174"} .glyphicon-floppy-save:before { content: "\e175"} .glyphicon-floppy-open:before { content: "\e176"} .glyphicon-credit-card:before { content: "\e177"} .glyphicon-transfer:before { content: "\e178"} .glyphicon-cutlery:before { content: "\e179"} .glyphicon-header:before { content: "\e180"} .glyphicon-compressed:before { content: "\e181"} .glyphicon-earphone:before { content: "\e182"} .glyphicon-phone-alt:before { content: "\e183"} .glyphicon-tower:before { content: "\e184"} .glyphicon-stats:before { content: "\e185"} .glyphicon-sd-video:before { content: "\e186"} .glyphicon-hd-video:before { content: "\e187"} .glyphicon-subtitles:before { content: "\e188"} .glyphicon-sound-stereo:before { content: "\e189"} .glyphicon-sound-dolby:before { content: "\e190"} .glyphicon-sound-5-1:before { content: "\e191"} .glyphicon-sound-6-1:before { content: "\e192"} .glyphicon-sound-7-1:before { content: "\e193"} .glyphicon-copyright-mark:before { content: "\e194"} .glyphicon-registration-mark:before { content: "\e195"} .glyphicon-cloud-download:before { content: "\e197"} .glyphicon-cloud-upload:before { content: "\e198"} .glyphicon-tree-conifer:before { content: "\e199"} .glyphicon-tree-deciduous:before { content: "\e200"} .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; border-top: 4px solid; border-right: 4px solid transparent; border-left: 4px solid transparent; } .dropdown { position: relative; } .dropdown-toggle:focus { outline: 0; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; font-size: 15px; list-style: none; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0; -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); background-clip: padding-box; } .dropdown-menu.pull-right { right: 0; left: auto; } .dropdown-menu .divider { height: 1px; margin: 9.5px 0; overflow: hidden; background-color: rgba(0, 0, 0, 0.2); } .dropdown-menu>li>a { display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.428571429; color: #555; white-space: nowrap; } .dropdown-menu>li>a:hover, .dropdown-menu>li>a:focus { color: #262626; text-decoration: none; background-color: #eee; } .dropdown-menu>.active>a, .dropdown-menu>.active>a:hover, .dropdown-menu>.active>a:focus { color: #fff; text-decoration: none; background-color: #008cba; outline: 0; } .dropdown-menu>.disabled>a, .dropdown-menu>.disabled>a:hover, .dropdown-menu>.disabled>a:focus { color: #999; } .dropdown-menu>.disabled>a:hover, .dropdown-menu>.disabled>a:focus { text-decoration: none; cursor: not-allowed; background-color: transparent; background-image: none; filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .open>.dropdown-menu { display: block; } .open>a { outline: 0; } .dropdown-header { display: block; padding: 3px 20px; font-size: 12px; line-height: 1.428571429; color: #999; } .dropdown-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 990; } .pull-right>.dropdown-menu { right: 0; left: auto; } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { border-top: 0; border-bottom: 4px solid; content: ""} .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px; } @media(min-width:768px) { .navbar-right .dropdown-menu { right: 0; left: auto; } }.btn-group, .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle; } .btn-group>.btn, .btn-group-vertical>.btn { position: relative; float: left; } .btn-group>.btn:hover, .btn-group-vertical>.btn:hover, .btn-group>.btn:focus, .btn-group-vertical>.btn:focus, .btn-group>.btn:active, .btn-group-vertical>.btn:active, .btn-group>.btn.active, .btn-group-vertical>.btn.active { z-index: 2; } .btn-group>.btn:focus, .btn-group-vertical>.btn:focus { outline: 0; } .btn-group .btn+.btn, .btn-group .btn+.btn-group, .btn-group .btn-group+.btn, .btn-group .btn-group+.btn-group { margin-left: -1px; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar:before, .btn-toolbar:after { display: table; content: " "} .btn-toolbar:after { clear: both; } .btn-toolbar .btn-group { float: left; } .btn-toolbar>.btn+.btn, .btn-toolbar>.btn-group+.btn, .btn-toolbar>.btn+.btn-group, .btn-toolbar>.btn-group+.btn-group { margin-left: 5px; } .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } .btn-group>.btn:first-child { margin-left: 0; } .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group>.btn:last-child:not(:first-child), .btn-group>.dropdown-toggle:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group>.btn-group { float: left; } .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn { border-radius: 0; } .btn-group>.btn-group:first-child>.btn:last-child, .btn-group>.btn-group:first-child>.dropdown-toggle { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group>.btn-group:last-child>.btn:first-child { border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group-xs>.btn { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 0; } .btn-group-sm>.btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 0; } .btn-group-lg>.btn { padding: 10px 16px; font-size: 19px; line-height: 1.33; border-radius: 0; } .btn-group>.btn+.dropdown-toggle { padding-right: 8px; padding-left: 8px; } .btn-group>.btn-lg+.dropdown-toggle { padding-right: 12px; padding-left: 12px; } .btn-group.open .dropdown-toggle { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn-group.open .dropdown-toggle.btn-link { -webkit-box-shadow: none; box-shadow: none; } .btn .caret { margin-left: 0; } .btn-lg .caret { border-width: 5px 5px 0; border-bottom-width: 0; } .dropup .btn-lg .caret { border-width: 0 5px 5px; } .btn-group-vertical>.btn, .btn-group-vertical>.btn-group, .btn-group-vertical>.btn-group>.btn { display: block; float: none; width: 100%; max-width: 100%} .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group:before, .btn-group-vertical>.btn-group:after { display: table; content: " "} .btn-group-vertical>.btn-group:after { clear: both; } .btn-group-vertical>.btn-group>.btn { float: none; } .btn-group-vertical>.btn+.btn, .btn-group-vertical>.btn+.btn-group, .btn-group-vertical>.btn-group+.btn, .btn-group-vertical>.btn-group+.btn-group { margin-top: -1px; margin-left: 0; } .btn-group-vertical>.btn:not(:first-child):not(:last-child) { border-radius: 0; } .btn-group-vertical>.btn:first-child:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical>.btn:last-child:not(:first-child) { border-top-right-radius: 0; border-bottom-left-radius: 0; border-top-left-radius: 0; } .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { border-radius: 0; } .btn-group-vertical>.btn-group:first-child>.btn:last-child, .btn-group-vertical>.btn-group:first-child>.dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical>.btn-group:last-child>.btn:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } .btn-group-justified { display: table; width: 100%; border-collapse: separate; table-layout: fixed; } .btn-group-justified>.btn, .btn-group-justified>.btn-group { display: table-cell; float: none; width: 1%} .btn-group-justified>.btn-group .btn { width: 100%} [data-toggle="buttons"]>.btn>input[type="radio"], [data-toggle="buttons"]>.btn>input[type="checkbox"] { display: none; } .input-group { position: relative; display: table; border-collapse: separate; } .input-group[class*="col-"] { float: none; padding-right: 0; padding-left: 0; } .input-group .form-control { width: 100%; margin-bottom: 0; } .input-group-lg>.form-control, .input-group-lg>.input-group-addon, .input-group-lg>.input-group-btn>.btn { height: 48px; padding: 10px 16px; font-size: 19px; line-height: 1.33; border-radius: 0; } select.input-group-lg>.form-control, select.input-group-lg>.input-group-addon, select.input-group-lg>.input-group-btn>.btn { height: 48px; line-height: 48px; } textarea.input-group-lg>.form-control, textarea.input-group-lg>.input-group-addon, textarea.input-group-lg>.input-group-btn>.btn { height: auto; } .input-group-sm>.form-control, .input-group-sm>.input-group-addon, .input-group-sm>.input-group-btn>.btn { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 0; } select.input-group-sm>.form-control, select.input-group-sm>.input-group-addon, select.input-group-sm>.input-group-btn>.btn { height: 30px; line-height: 30px; } textarea.input-group-sm>.form-control, textarea.input-group-sm>.input-group-addon, textarea.input-group-sm>.input-group-btn>.btn { height: auto; } .input-group-addon, .input-group-btn, .input-group .form-control { display: table-cell; } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } .input-group-addon, .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle; } .input-group-addon { padding: 6px 12px; font-size: 15px; font-weight: normal; line-height: 1; color: #6f6f6f; text-align: center; background-color: #eee; border: 1px solid #ccc; border-radius: 0; } .input-group-addon.input-sm { padding: 5px 10px; font-size: 12px; border-radius: 0; } .input-group-addon.input-lg { padding: 10px 16px; font-size: 19px; border-radius: 0; } .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { margin-top: 0; } .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group-addon:first-child { border-right: 0; } .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child>.btn, .input-group-btn:last-child>.dropdown-toggle, .input-group-btn:first-child>.btn:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } .input-group-addon:last-child { border-left: 0; } .input-group-btn { position: relative; white-space: nowrap; } .input-group-btn:first-child>.btn { margin-right: -1px; } .input-group-btn:last-child>.btn { margin-left: -1px; } .input-group-btn>.btn { position: relative; } .input-group-btn>.btn+.btn { margin-left: -4px; } .input-group-btn>.btn:hover, .input-group-btn>.btn:active { z-index: 2; } .nav { font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; padding-left: 0; margin-bottom: 0; list-style: none; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav:before, .nav:after { display: table; content: " "} .nav:after { clear: both; } .nav>li { position: relative; display: block; } .nav>li>a { position: relative; display: block; padding: 10px 15px; } .nav>li>a:hover, .nav>li>a:focus { text-decoration: none; background-color: #eee; } .nav>li.disabled>a { color: #999; } .nav>li.disabled>a:hover, .nav>li.disabled>a:focus { color: #999; text-decoration: none; cursor: not-allowed; background-color: transparent; } .nav .open>a, .nav .open>a:hover, .nav .open>a:focus { background-color: #eee; border-color: #008cba; } .nav .nav-divider { height: 1px; margin: 9.5px 0; overflow: hidden; background-color: #e5e5e5; } .nav>li>a>img { max-width: none; } .nav-tabs { border-bottom: 1px solid #ddd; } .nav-tabs>li { float: left; margin-bottom: -1px; } .nav-tabs>li>a { margin-right: 2px; line-height: 1.428571429; border: 1px solid transparent; border-radius: 0; } .nav-tabs>li>a:hover { border-color: #eee #eee #ddd; } .nav-tabs>li.active>a, .nav-tabs>li.active>a:hover, .nav-tabs>li.active>a:focus { color: #6f6f6f; cursor: default; background-color: #fff; border: 1px solid #ddd; border-bottom-color: transparent; } .nav-tabs.nav-justified { width: 100%; border-bottom: 0; } .nav-tabs.nav-justified>li { float: none; } .nav-tabs.nav-justified>li>a { margin-bottom: 5px; text-align: center; } .nav-tabs.nav-justified>.dropdown .dropdown-menu { top: auto; left: auto; } @media(min-width:768px) { .nav-tabs.nav-justified>li { display: table-cell; width: 1%} .nav-tabs.nav-justified>li>a { margin-bottom: 0; } }.nav-tabs.nav-justified>li>a { margin-right: 0; border-radius: 0; } .nav-tabs.nav-justified>.active>a, .nav-tabs.nav-justified>.active>a:hover, .nav-tabs.nav-justified>.active>a:focus { border: 1px solid #ddd; } @media(min-width:768px) { .nav-tabs.nav-justified>li>a { border-bottom: 1px solid #ddd; border-radius: 0; } .nav-tabs.nav-justified>.active>a, .nav-tabs.nav-justified>.active>a:hover, .nav-tabs.nav-justified>.active>a:focus { border-bottom-color: #fff; } }.nav-pills>li { float: left; } .nav-pills>li>a { border-radius: 0; } .nav-pills>li+li { margin-left: 2px; } .nav-pills>li.active>a, .nav-pills>li.active>a:hover, .nav-pills>li.active>a:focus { color: #fff; background-color: #008cba; } .nav-stacked>li { float: none; } .nav-stacked>li+li { margin-top: 2px; margin-left: 0; } .nav-justified { width: 100%} .nav-justified>li { float: none; } .nav-justified>li>a { margin-bottom: 5px; text-align: center; } .nav-justified>.dropdown .dropdown-menu { top: auto; left: auto; } @media(min-width:768px) { .nav-justified>li { display: table-cell; width: 1%} .nav-justified>li>a { margin-bottom: 0; } }.nav-tabs-justified { border-bottom: 0; } .nav-tabs-justified>li>a { margin-right: 0; border-radius: 0; } .nav-tabs-justified>.active>a, .nav-tabs-justified>.active>a:hover, .nav-tabs-justified>.active>a:focus { border: 1px solid #ddd; } @media(min-width:768px) { .nav-tabs-justified>li>a { border-bottom: 1px solid #ddd; border-radius: 0; } .nav-tabs-justified>.active>a, .nav-tabs-justified>.active>a:hover, .nav-tabs-justified>.active>a:focus { border-bottom-color: #fff; } }.tab-content>.tab-pane { display: none; } .tab-content>.active { display: block; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-right-radius: 0; border-top-left-radius: 0; } .navbar { position: relative; min-height: 45px; margin-bottom: 21px; border: 1px solid transparent; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } .navbar:before, .navbar:after { display: table; content: " "} .navbar:after { clear: both; } @media(min-width:768px) { .navbar { border-radius: 0; } }.navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } .navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } .navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } .navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } .navbar-header:before, .navbar-header:after { display: table; content: " "} .navbar-header:after { clear: both; } @media(min-width:768px) { .navbar-header { float: left; } }.navbar-collapse { max-height: 340px; padding-right: 15px; padding-left: 15px; overflow-x: visible; border-top: 1px solid transparent; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); -webkit-overflow-scrolling: touch; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse:before, .navbar-collapse:after { display: table; content: " "} .navbar-collapse:after { clear: both; } .navbar-collapse.in { overflow-y: auto; } @media(min-width:768px) { .navbar-collapse { width: auto; border-top: 0; box-shadow: none; } .navbar-collapse.collapse { display: block!important; height: auto!important; padding-bottom: 0; overflow: visible!important; } .navbar-collapse.in { overflow-y: visible; } .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { padding-right: 0; padding-left: 0; } }.container>.navbar-header, .container>.navbar-collapse { margin-right: -15px; margin-left: -15px; } @media(min-width:768px) { .container>.navbar-header, .container>.navbar-collapse { margin-right: 0; margin-left: 0; } }.navbar-static-top { z-index: 1000; border-width: 0 0 1px; } @media(min-width:768px) { .navbar-static-top { border-radius: 0; } }.navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; } @media(min-width:768px) { .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; } }.navbar-fixed-top { top: 0; border-width: 0 0 1px; } .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; border-width: 1px 0 0; } .navbar-brand { font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; float: left; padding: 12px 15px; font-size: 19px; line-height: 21px; } .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } @media(min-width:768px) { .navbar>.container .navbar-brand { margin-left: -15px; } }.navbar-toggle { position: relative; float: right; padding: 9px 10px; margin-top: 5.5px; margin-right: 15px; margin-bottom: 5.5px; background-color: transparent; background-image: none; border: 1px solid transparent; border-radius: 0; } .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px; } .navbar-toggle .icon-bar+.icon-bar { margin-top: 4px; } @media(min-width:768px) { .navbar-toggle { display: none; } }.navbar-nav { margin: 6px -15px; } .navbar-nav>li>a { padding-top: 10px; padding-bottom: 10px; line-height: 21px; } @media(max-width:767px) { .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0; background-color: transparent; border: 0; box-shadow: none; } .navbar-nav .open .dropdown-menu>li>a, .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } .navbar-nav .open .dropdown-menu>li>a { line-height: 21px; } .navbar-nav .open .dropdown-menu>li>a:hover, .navbar-nav .open .dropdown-menu>li>a:focus { background-image: none; } }@media(min-width:768px) { .navbar-nav { float: left; margin: 0; } .navbar-nav>li { float: left; } .navbar-nav>li>a { padding-top: 12px; padding-bottom: 12px; } .navbar-nav.navbar-right:last-child { margin-right: -15px; } }@media(min-width:768px) { .navbar-left { float: left!important; } .navbar-right { float: right!important; } }.navbar-form { padding: 10px 15px; margin-top: 5px; margin-right: -15px; margin-bottom: 5px; margin-left: -15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); } @media(min-width:768px) { .navbar-form .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } .navbar-form .form-control { display: inline-block; } .navbar-form select.form-control { width: auto; } .navbar-form .radio, .navbar-form .checkbox { display: inline-block; padding-left: 0; margin-top: 0; margin-bottom: 0; } .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { float: none; margin-left: 0; } }@media(max-width:767px) { .navbar-form .form-group { margin-bottom: 5px; } }@media(min-width:768px) { .navbar-form { width: auto; padding-top: 0; padding-bottom: 0; margin-right: 0; margin-left: 0; border: 0; -webkit-box-shadow: none; box-shadow: none; } .navbar-form.navbar-right:last-child { margin-right: -15px; } }.navbar-nav>li>.dropdown-menu { margin-top: 0; border-top-right-radius: 0; border-top-left-radius: 0; } .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .navbar-nav.pull-right>li>.dropdown-menu, .navbar-nav>li>.dropdown-menu.pull-right { right: 0; left: auto; } .navbar-btn { margin-top: 5px; margin-bottom: 5px; } .navbar-btn.btn-sm { margin-top: 7.5px; margin-bottom: 7.5px; } .navbar-btn.btn-xs { margin-top: 11.5px; margin-bottom: 11.5px; } .navbar-text { margin-top: 12px; margin-bottom: 12px; } @media(min-width:768px) { .navbar-text { float: left; margin-right: 15px; margin-left: 15px; } .navbar-text.navbar-right:last-child { margin-right: 0; } }.navbar-default { background-color: #333; border-color: #222; } .navbar-default .navbar-brand { color: #fff; } .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { color: #fff; background-color: transparent; } .navbar-default .navbar-text { color: #fff; } .navbar-default .navbar-nav>li>a { color: #fff; } .navbar-default .navbar-nav>li>a:hover, .navbar-default .navbar-nav>li>a:focus { color: #fff; background-color: #272727; } .navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:hover, .navbar-default .navbar-nav>.active>a:focus { color: #fff; background-color: #272727; } .navbar-default .navbar-nav>.disabled>a, .navbar-default .navbar-nav>.disabled>a:hover, .navbar-default .navbar-nav>.disabled>a:focus { color: #ccc; background-color: transparent; } .navbar-default .navbar-toggle { border-color: transparent; } .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { background-color: transparent; } .navbar-default .navbar-toggle .icon-bar { background-color: #fff; } .navbar-default .navbar-collapse, .navbar-default .navbar-form { border-color: #222; } .navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:hover, .navbar-default .navbar-nav>.open>a:focus { color: #fff; background-color: #272727; } @media(max-width:767px) { .navbar-default .navbar-nav .open .dropdown-menu>li>a { color: #fff; } .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover, .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus { color: #fff; background-color: #272727; } .navbar-default .navbar-nav .open .dropdown-menu>.active>a, .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover, .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus { color: #fff; background-color: #272727; } .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a, .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover, .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus { color: #ccc; background-color: transparent; } }.navbar-default .navbar-link { color: #fff; } .navbar-default .navbar-link:hover { color: #fff; } .navbar-inverse { background-color: #008cba; border-color: #006687; } .navbar-inverse .navbar-brand { color: #fff; } .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { color: #fff; background-color: transparent; } .navbar-inverse .navbar-text { color: #fff; } .navbar-inverse .navbar-nav>li>a { color: #fff; } .navbar-inverse .navbar-nav>li>a:hover, .navbar-inverse .navbar-nav>li>a:focus { color: #fff; background-color: #006687; } .navbar-inverse .navbar-nav>.active>a, .navbar-inverse .navbar-nav>.active>a:hover, .navbar-inverse .navbar-nav>.active>a:focus { color: #fff; background-color: #006687; } .navbar-inverse .navbar-nav>.disabled>a, .navbar-inverse .navbar-nav>.disabled>a:hover, .navbar-inverse .navbar-nav>.disabled>a:focus { color: #444; background-color: transparent; } .navbar-inverse .navbar-toggle { border-color: transparent; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: transparent; } .navbar-inverse .navbar-toggle .icon-bar { background-color: #fff; } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #007196; } .navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:hover, .navbar-inverse .navbar-nav>.open>a:focus { color: #fff; background-color: #006687; } @media(max-width:767px) { .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header { border-color: #006687; } .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #006687; } .navbar-inverse .navbar-nav .open .dropdown-menu>li>a { color: #fff; } .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus { color: #fff; background-color: #006687; } .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a, .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus { color: #fff; background-color: #006687; } .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a, .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus { color: #444; background-color: transparent; } }.navbar-inverse .navbar-link { color: #fff; } .navbar-inverse .navbar-link:hover { color: #fff; } .breadcrumb { padding: 8px 15px; margin-bottom: 21px; list-style: none; background-color: #f5f5f5; border-radius: 0; } .breadcrumb>li { display: inline-block; } .breadcrumb>li+li:before { padding: 0 5px; color: #999; content: "/\00a0"} .breadcrumb>.active { color: #333; } .pagination { display: inline-block; padding-left: 0; margin: 21px 0; border-radius: 0; } .pagination>li { display: inline; } .pagination>li>a, .pagination>li>span { position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.428571429; text-decoration: none; background-color: transparent; border: 1px solid transparent; } .pagination>li:first-child>a, .pagination>li:first-child>span { margin-left: 0; border-bottom-left-radius: 0; border-top-left-radius: 0; } .pagination>li:last-child>a, .pagination>li:last-child>span { border-top-right-radius: 0; border-bottom-right-radius: 0; } .pagination>li>a:hover, .pagination>li>span:hover, .pagination>li>a:focus, .pagination>li>span:focus { background-color: #eee; } .pagination>.active>a, .pagination>.active>span, .pagination>.active>a:hover, .pagination>.active>span:hover, .pagination>.active>a:focus, .pagination>.active>span:focus { z-index: 2; color: #fff; cursor: default; background-color: #008cba; border-color: #008cba; } .pagination>.disabled>span, .pagination>.disabled>span:hover, .pagination>.disabled>span:focus, .pagination>.disabled>a, .pagination>.disabled>a:hover, .pagination>.disabled>a:focus { color: #999; cursor: not-allowed; background-color: transparent; border-color: transparent; } .pagination-lg>li>a, .pagination-lg>li>span { padding: 10px 16px; font-size: 19px; } .pagination-lg>li:first-child>a, .pagination-lg>li:first-child>span { border-bottom-left-radius: 0; border-top-left-radius: 0; } .pagination-lg>li:last-child>a, .pagination-lg>li:last-child>span { border-top-right-radius: 0; border-bottom-right-radius: 0; } .pagination-sm>li>a, .pagination-sm>li>span { padding: 5px 10px; font-size: 12px; } .pagination-sm>li:first-child>a, .pagination-sm>li:first-child>span { border-bottom-left-radius: 0; border-top-left-radius: 0; } .pagination-sm>li:last-child>a, .pagination-sm>li:last-child>span { border-top-right-radius: 0; border-bottom-right-radius: 0; } .pager { padding-left: 0; margin: 21px 0; text-align: center; list-style: none; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager:before, .pager:after { display: table; content: " "} .pager:after { clear: both; } .pager li { display: inline; } .pager li>a, .pager li>span { display: inline-block; padding: 5px 14px; background-color: transparent; border: 1px solid transparent; border-radius: 3px; } .pager li>a:hover, .pager li>a:focus { text-decoration: none; background-color: #eee; } .pager .next>a, .pager .next>span { float: right; } .pager .previous>a, .pager .previous>span { float: left; } .pager .disabled>a, .pager .disabled>a:hover, .pager .disabled>a:focus, .pager .disabled>span { color: #999; cursor: not-allowed; background-color: transparent; } .label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: bold; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; } .label[href]:hover, .label[href]:focus { color: #fff; text-decoration: none; cursor: pointer; } .label:empty { display: none; } .btn .label { position: relative; top: -1px; } .label-default { background-color: #999; } .label-default[href]:hover, .label-default[href]:focus { background-color: #808080; } .label-primary { background-color: #008cba; } .label-primary[href]:hover, .label-primary[href]:focus { background-color: #006687; } .label-success { background-color: #43ac6a; } .label-success[href]:hover, .label-success[href]:focus { background-color: #358753; } .label-info { background-color: #5bc0de; } .label-info[href]:hover, .label-info[href]:focus { background-color: #31b0d5; } .label-warning { background-color: #e99002; } .label-warning[href]:hover, .label-warning[href]:focus { background-color: #b67102; } .label-danger { background-color: #f04124; } .label-danger[href]:hover, .label-danger[href]:focus { background-color: #d32a0e; } .badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 12px; font-weight: bold; line-height: 1; color: #777; text-align: center; white-space: nowrap; vertical-align: baseline; background-color: #e7e7e7; border-radius: 10px; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } a.badge:hover, a.badge:focus { color: #fff; text-decoration: none; cursor: pointer; } a.list-group-item.active>.badge, .nav-pills>.active>a>.badge { color: #008cba; background-color: #fff; } .nav-pills>li>a>.badge { margin-left: 3px; } .jumbotron { padding: 30px; margin-bottom: 30px; font-size: 23px; font-weight: 200; line-height: 2.1428571435; color: inherit; background-color: #fafafa; } .jumbotron h1, .jumbotron .h1 { line-height: 1; color: inherit; } .jumbotron p { line-height: 1.4; } .container .jumbotron { border-radius: 0; } .jumbotron .container { max-width: 100%} @media screen and (min-width:768px) { .jumbotron { padding-top: 48px; padding-bottom: 48px; } .container .jumbotron { padding-right: 60px; padding-left: 60px; } .jumbotron h1, .jumbotron .h1 { font-size: 67.5px; } }.thumbnail { display: block; padding: 4px; margin-bottom: 21px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 0; -webkit-transition: all .2s ease-in-out; transition: all .2s ease-in-out; } .thumbnail>img, .thumbnail a>img { display: block; height: auto; max-width: 100%; margin-right: auto; margin-left: auto; } a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { border-color: #008cba; } .thumbnail .caption { padding: 9px; color: #222; } .alert { position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: 0.25rem; } .alert-heading { color: inherit; } .alert-link { font-weight: 700; } .alert-dismissible { padding-right: 4rem; } .alert-dismissible .close { position: absolute; top: 0; right: 0; padding: 0.75rem 1.25rem; color: inherit; } .alert-primary { color: #004085; background-color: #cce5ff; border-color: #b8daff; } .alert-primary hr { border-top-color: #9fcdff; } .alert-primary .alert-link { color: #002752; } .alert-secondary { color: #383d41; background-color: #e2e3e5; border-color: #d6d8db; } .alert-secondary hr { border-top-color: #c8cbcf; } .alert-secondary .alert-link { color: #202326; } .alert-success { color: #155724; background-color: #d4edda; border-color: #c3e6cb; } .alert-success hr { border-top-color: #b1dfbb; } .alert-success .alert-link { color: #0b2e13; } .alert-info { color: #0c5460; background-color: #d1ecf1; border-color: #bee5eb; } .alert-info hr { border-top-color: #abdde5; } .alert-info .alert-link { color: #062c33; } .alert-warning { color: #856404; background-color: #fff3cd; border-color: #ffeeba; } .alert-warning hr { border-top-color: #ffe8a1; } .alert-warning .alert-link { color: #533f03; } .alert-danger { color: #721c24; background-color: #f8d7da; border-color: #f5c6cb; } .alert-danger hr { border-top-color: #f1b0b7; } .alert-danger .alert-link { color: #491217; } .alert-light { color: #818182; background-color: #fefefe; border-color: #fdfdfe; } .alert-light hr { border-top-color: #ececf6; } .alert-light .alert-link { color: #686868; } .alert-dark { color: #1b1e21; background-color: #d6d8d9; border-color: #c6c8ca; } .alert-dark hr { border-top-color: #b9bbbe; } .alert-dark .alert-link { color: #040505; } @-webkit-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } }@keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } }.progress { height: 21px; margin-bottom: 21px; overflow: hidden; background-color: #f5f5f5; border-radius: 0; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } .progress-bar { float: left; width: 0; height: 100%; font-size: 12px; line-height: 21px; color: #fff; text-align: center; background-color: #008cba; -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); -webkit-transition: width .6s ease; transition: width .6s ease; } .progress-striped .progress-bar { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 40px 40px; } .progress.active .progress-bar { -webkit-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } .progress-bar-success { background-color: #43ac6a; } .progress-striped .progress-bar-success { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-info { background-color: #5bc0de; } .progress-striped .progress-bar-info { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-warning { background-color: #e99002; } .progress-striped .progress-bar-warning { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-bar-danger { background-color: #f04124; } .progress-striped .progress-bar-danger { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .media, .media-body { overflow: hidden; zoom: 1; } .media, .media .media { margin-top: 15px; } .media:first-child { margin-top: 0; } .media-object { display: block; } .media-heading { margin: 0 0 5px; } .media>.pull-left { margin-right: 10px; } .media>.pull-right { margin-left: 10px; } .media-list { padding-left: 0; list-style: none; } .list-group { padding-left: 0; margin-bottom: 20px; } .list-group-item { position: relative; display: block; padding: 10px 15px; margin-bottom: -1px; background-color: #fff; border: 1px solid #ddd; } .list-group-item:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .list-group-item>.badge { float: right; } .list-group-item>.badge+.badge { margin-right: 5px; } a.list-group-item { color: #555; } a.list-group-item .list-group-item-heading { color: #333; } a.list-group-item:hover, a.list-group-item:focus { text-decoration: none; background-color: #f5f5f5; } a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { z-index: 2; color: #fff; background-color: #008cba; border-color: #008cba; } a.list-group-item.active .list-group-item-heading, a.list-group-item.active:hover .list-group-item-heading, a.list-group-item.active:focus .list-group-item-heading { color: inherit; } a.list-group-item.active .list-group-item-text, a.list-group-item.active:hover .list-group-item-text, a.list-group-item.active:focus .list-group-item-text { color: #87e1ff; } .list-group-item-heading { margin-top: 0; margin-bottom: 5px; } .list-group-item-text { margin-bottom: 0; line-height: 1.3; } .panel { margin-bottom: 21px; background-color: #fff; border: 1px solid transparent; border-radius: 0; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } .panel-body { padding: 15px; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel-body:before, .panel-body:after { display: table; content: " "} .panel-body:after { clear: both; } .panel>.list-group { margin-bottom: 0; } .panel>.list-group .list-group-item { border-width: 1px 0; } .panel>.list-group .list-group-item:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } .panel>.list-group .list-group-item:last-child { border-bottom: 0; } .panel-heading+.list-group .list-group-item:first-child { border-top-width: 0; } .panel>.table, .panel>.table-responsive>.table { margin-bottom: 0; } .panel>.panel-body+.table, .panel>.panel-body+.table-responsive { border-top: 1px solid #ddd; } .panel>.table>tbody:first-child th, .panel>.table>tbody:first-child td { border-top: 0; } .panel>.table-bordered, .panel>.table-responsive>.table-bordered { border: 0; } .panel>.table-bordered>thead>tr>th:first-child, .panel>.table-responsive>.table-bordered>thead>tr>th:first-child, .panel>.table-bordered>tbody>tr>th:first-child, .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child, .panel>.table-bordered>tfoot>tr>th:first-child, .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child, .panel>.table-bordered>thead>tr>td:first-child, .panel>.table-responsive>.table-bordered>thead>tr>td:first-child, .panel>.table-bordered>tbody>tr>td:first-child, .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child, .panel>.table-bordered>tfoot>tr>td:first-child, .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child { border-left: 0; } .panel>.table-bordered>thead>tr>th:last-child, .panel>.table-responsive>.table-bordered>thead>tr>th:last-child, .panel>.table-bordered>tbody>tr>th:last-child, .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child, .panel>.table-bordered>tfoot>tr>th:last-child, .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child, .panel>.table-bordered>thead>tr>td:last-child, .panel>.table-responsive>.table-bordered>thead>tr>td:last-child, .panel>.table-bordered>tbody>tr>td:last-child, .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child, .panel>.table-bordered>tfoot>tr>td:last-child, .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child { border-right: 0; } .panel>.table-bordered>thead>tr:last-child>th, .panel>.table-responsive>.table-bordered>thead>tr:last-child>th, .panel>.table-bordered>tbody>tr:last-child>th, .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th, .panel>.table-bordered>tfoot>tr:last-child>th, .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th, .panel>.table-bordered>thead>tr:last-child>td, .panel>.table-responsive>.table-bordered>thead>tr:last-child>td, .panel>.table-bordered>tbody>tr:last-child>td, .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td, .panel>.table-bordered>tfoot>tr:last-child>td, .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td { border-bottom: 0; } .panel>.table-responsive { margin-bottom: 0; border: 0; } .panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent; border-top-right-radius: -1; border-top-left-radius: -1; } .panel-heading>.dropdown .dropdown-toggle { color: inherit; } .panel-title { margin-top: 0; margin-bottom: 0; font-size: 17px; color: inherit; } .panel-title>a { color: inherit; } .panel-footer { padding: 10px 15px; background-color: #f5f5f5; border-top: 1px solid #ddd; border-bottom-right-radius: -1; border-bottom-left-radius: -1; } .panel-group .panel { margin-bottom: 0; overflow: hidden; border-radius: 0; } .panel-group .panel+.panel { margin-top: 5px; } .panel-group .panel-heading { border-bottom: 0; } .panel-group .panel-heading+.panel-collapse .panel-body { border-top: 1px solid #ddd; } .panel-group .panel-footer { border-top: 0; } .panel-group .panel-footer+.panel-collapse .panel-body { border-bottom: 1px solid #ddd; } .panel-default { border-color: #ddd; } .panel-default>.panel-heading { color: #333; background-color: #f5f5f5; border-color: #ddd; } .panel-default>.panel-heading+.panel-collapse .panel-body { border-top-color: #ddd; } .panel-default>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #ddd; } .panel-primary { border-color: #008cba; } .panel-primary>.panel-heading { color: #fff; background-color: #008cba; border-color: #008cba; } .panel-primary>.panel-heading+.panel-collapse .panel-body { border-top-color: #008cba; } .panel-primary>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #008cba; } .panel-success { border-color: #3c9a5f; } .panel-success>.panel-heading { color: #43ac6a; background-color: #dff0d8; border-color: #3c9a5f; } .panel-success>.panel-heading+.panel-collapse .panel-body { border-top-color: #3c9a5f; } .panel-success>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #3c9a5f; } .panel-warning { border-color: #d08002; } .panel-warning>.panel-heading { color: #e99002; background-color: #fcf8e3; border-color: #d08002; } .panel-warning>.panel-heading+.panel-collapse .panel-body { border-top-color: #d08002; } .panel-warning>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #d08002; } .panel-danger { border-color: #ea2f10; } .panel-danger>.panel-heading { color: #f04124; background-color: #f2dede; border-color: #ea2f10; } .panel-danger>.panel-heading+.panel-collapse .panel-body { border-top-color: #ea2f10; } .panel-danger>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #ea2f10; } .panel-info { border-color: #3db5d8; } .panel-info>.panel-heading { color: #5bc0de; background-color: #d9edf7; border-color: #3db5d8; } .panel-info>.panel-heading+.panel-collapse .panel-body { border-top-color: #3db5d8; } .panel-info>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #3db5d8; } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #fafafa; border: 1px solid #e8e8e8; border-radius: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, 0.15); } .well-lg { padding: 24px; border-radius: 0; } .well-sm { padding: 9px; border-radius: 0; } .close { float: right; font-size: 22.5px; font-weight: bold; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; opacity: .2; filter: alpha(opacity=20); } .close:hover, .close:focus { color: #000; text-decoration: none; cursor: pointer; opacity: .5; filter: alpha(opacity=50); } button.close { padding: 0; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; } .modal-open { overflow: hidden; } .modal { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; display: none; overflow: auto; overflow-y: scroll; } .modal.fade .modal-dialog { -webkit-transform: translate(0, -25%); -ms-transform: translate(0, -25%); transform: translate(0, -25%); -webkit-transition: -webkit-transform .3s ease-out; -moz-transition: -moz-transform .3s ease-out; -o-transition: -o-transform .3s ease-out; transition: transform .3s ease-out; } .modal.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); transform: translate(0, 0); } .modal-dialog { position: relative; z-index: 1050; width: auto; margin: 10px; } .modal-content { position: relative; background-color: #fff; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0; outline: 0; -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); background-clip: padding-box; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1030; background-color: #000; } .modal-backdrop.fade { opacity: 0; filter: alpha(opacity=0); } .modal-backdrop.in { opacity: .5; filter: alpha(opacity=50); } .modal-header { min-height: 16.428571429px; padding: 15px; border-bottom: 1px solid #e5e5e5; } .modal-header .close { margin-top: -2px; } .modal-title { margin: 0; line-height: 1.428571429; } .modal-body { position: relative; padding: 20px; } .modal-footer { padding: 19px 20px 20px; margin-top: 15px; text-align: right; border-top: 1px solid #e5e5e5; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer:before, .modal-footer:after { display: table; content: " "} .modal-footer:after { clear: both; } .modal-footer .btn+.btn { margin-bottom: 0; margin-left: 5px; } .modal-footer .btn-group .btn+.btn { margin-left: -1px; } .modal-footer .btn-block+.btn-block { margin-left: 0; } @media screen and (min-width:768px) { .modal-dialog { width: 600px; margin: 30px auto; } .modal-content { -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } }.tooltip { position: absolute; z-index: 1030; display: block; font-size: 12px; line-height: 1.4; opacity: 0; filter: alpha(opacity=0); visibility: visible; } .tooltip.in { opacity: .9; filter: alpha(opacity=90); } .tooltip.top { padding: 5px 0; margin-top: -3px; } .tooltip.right { padding: 0 5px; margin-left: 3px; } .tooltip.bottom { padding: 5px 0; margin-top: 3px; } .tooltip.left { padding: 0 5px; margin-left: -3px; } .tooltip-inner { max-width: 200px; padding: 3px 8px; color: #fff; text-align: center; text-decoration: none; background-color: #333; border-radius: 0; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-color: #333; border-width: 5px 5px 0; } .tooltip.top-left .tooltip-arrow { bottom: 0; left: 5px; border-top-color: #333; border-width: 5px 5px 0; } .tooltip.top-right .tooltip-arrow { right: 5px; bottom: 0; border-top-color: #333; border-width: 5px 5px 0; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-right-color: #333; border-width: 5px 5px 5px 0; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-left-color: #333; border-width: 5px 0 5px 5px; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-bottom-color: #333; border-width: 0 5px 5px; } .tooltip.bottom-left .tooltip-arrow { top: 0; left: 5px; border-bottom-color: #333; border-width: 0 5px 5px; } .tooltip.bottom-right .tooltip-arrow { top: 0; right: 5px; border-bottom-color: #333; border-width: 0 5px 5px; } .popover { position: absolute; top: 0; left: 0; z-index: 1010; display: none; max-width: 276px; padding: 1px; text-align: left; white-space: normal; background-color: #333; border: 1px solid #333; border: 1px solid transparent; border-radius: 0; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); background-clip: padding-box; } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { padding: 8px 14px; margin: 0; font-size: 15px; font-weight: normal; line-height: 18px; background-color: #333; border-bottom: 1px solid #262626; border-radius: 5px 5px 0 0; } .popover-content { padding: 9px 14px; } .popover .arrow, .popover .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover .arrow { border-width: 11px; } .popover .arrow:after { border-width: 10px; content: ""} .popover.top .arrow { bottom: -11px; left: 50%; margin-left: -11px; border-top-color: #999; border-top-color: rgba(0, 0, 0, 0.25); border-bottom-width: 0; } .popover.top .arrow:after { bottom: 1px; margin-left: -10px; border-top-color: #333; border-bottom-width: 0; content: " "} .popover.right .arrow { top: 50%; left: -11px; margin-top: -11px; border-right-color: #999; border-right-color: rgba(0, 0, 0, 0.25); border-left-width: 0; } .popover.right .arrow:after { bottom: -10px; left: 1px; border-right-color: #333; border-left-width: 0; content: " "} .popover.bottom .arrow { top: -11px; left: 50%; margin-left: -11px; border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, 0.25); border-top-width: 0; } .popover.bottom .arrow:after { top: 1px; margin-left: -10px; border-bottom-color: #333; border-top-width: 0; content: " "} .popover.left .arrow { top: 50%; right: -11px; margin-top: -11px; border-left-color: #999; border-left-color: rgba(0, 0, 0, 0.25); border-right-width: 0; } .popover.left .arrow:after { right: 1px; bottom: -10px; border-left-color: #333; border-right-width: 0; content: " "} .carousel { position: relative; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner>.item { position: relative; display: none; -webkit-transition: .6s ease-in-out left; transition: .6s ease-in-out left; } .carousel-inner>.item>img, .carousel-inner>.item>a>img { display: block; height: auto; max-width: 100%; line-height: 1; } .carousel-inner>.active, .carousel-inner>.next, .carousel-inner>.prev { display: block; } .carousel-inner>.active { left: 0; } .carousel-inner>.next, .carousel-inner>.prev { position: absolute; top: 0; width: 100%} .carousel-inner>.next { left: 100%} .carousel-inner>.prev { left: -100%} .carousel-inner>.next.left, .carousel-inner>.prev.right { left: 0; } .carousel-inner>.active.left { left: -100%} .carousel-inner>.active.right { left: 100%} .carousel-control { position: absolute; top: 0; bottom: 0; left: 0; width: 15%; font-size: 20px; color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); opacity: .5; filter: alpha(opacity=50); } .carousel-control.left { background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); } .carousel-control.right { right: 0; left: auto; background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } .carousel-control:hover, .carousel-control:focus { color: #fff; text-decoration: none; outline: 0; opacity: .9; filter: alpha(opacity=90); } .carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { position: absolute; top: 50%; z-index: 5; display: inline-block; } .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { left: 50%} .carousel-control .icon-next, .carousel-control .glyphicon-chevron-right { right: 50%} .carousel-control .icon-prev, .carousel-control .icon-next { width: 20px; height: 20px; margin-top: -10px; margin-left: -10px; font-family: serif; } .carousel-control .icon-prev:before { content: '\2039'} .carousel-control .icon-next:before { content: '\203a'} .carousel-indicators { position: absolute; bottom: 10px; left: 50%; z-index: 15; width: 60%; padding-left: 0; margin-left: -30%; text-align: center; list-style: none; } .carousel-indicators li { display: inline-block; width: 10px; height: 10px; margin: 1px; text-indent: -999px; cursor: pointer; background-color: #000 \9; background-color: rgba(0, 0, 0, 0); border: 1px solid #fff; border-radius: 10px; } .carousel-indicators .active { width: 12px; height: 12px; margin: 0; background-color: #fff; } .carousel-caption { position: absolute; right: 15%; bottom: 20px; left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } .carousel-caption .btn { text-shadow: none; } @media screen and (min-width:768px) { .carousel-control .glyphicons-chevron-left, .carousel-control .glyphicons-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { width: 30px; height: 30px; margin-top: -15px; margin-left: -15px; font-size: 30px; } .carousel-caption { right: 20%; left: 20%; padding-bottom: 30px; } .carousel-indicators { bottom: 20px; } }.clearfix:before, .clearfix:after { display: table; content: " "} .clearfix:after { clear: both; } .clearfix:before, .clearfix:after { display: table; content: " "} .clearfix:after { clear: both; } .center-block { display: block; margin-right: auto; margin-left: auto; } .pull-right { float: right!important; } .pull-left { float: left!important; } .hide { display: none!important; } .show { display: block!important; } .invisible { visibility: hidden; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .hidden { display: none!important; visibility: hidden!important; } .affix { position: fixed; } @-ms-viewport { width: device-width; } .visible-xs, tr.visible-xs, th.visible-xs, td.visible-xs { display: none!important; } @media(max-width:767px) { .visible-xs { display: block!important; } table.visible-xs { display: table; } tr.visible-xs { display: table-row!important; } th.visible-xs, td.visible-xs { display: table-cell!important; } }@media(min-width:768px) and (max-width:991px) { .visible-xs.visible-sm { display: block!important; } table.visible-xs.visible-sm { display: table; } tr.visible-xs.visible-sm { display: table-row!important; } th.visible-xs.visible-sm, td.visible-xs.visible-sm { display: table-cell!important; } }@media(min-width:992px) and (max-width:1199px) { .visible-xs.visible-md { display: block!important; } table.visible-xs.visible-md { display: table; } tr.visible-xs.visible-md { display: table-row!important; } th.visible-xs.visible-md, td.visible-xs.visible-md { display: table-cell!important; } }@media(min-width:1200px) { .visible-xs.visible-lg { display: block!important; } table.visible-xs.visible-lg { display: table; } tr.visible-xs.visible-lg { display: table-row!important; } th.visible-xs.visible-lg, td.visible-xs.visible-lg { display: table-cell!important; } }.visible-sm, tr.visible-sm, th.visible-sm, td.visible-sm { display: none!important; } @media(max-width:767px) { .visible-sm.visible-xs { display: block!important; } table.visible-sm.visible-xs { display: table; } tr.visible-sm.visible-xs { display: table-row!important; } th.visible-sm.visible-xs, td.visible-sm.visible-xs { display: table-cell!important; } }@media(min-width:768px) and (max-width:991px) { .visible-sm { display: block!important; } table.visible-sm { display: table; } tr.visible-sm { display: table-row!important; } th.visible-sm, td.visible-sm { display: table-cell!important; } }@media(min-width:992px) and (max-width:1199px) { .visible-sm.visible-md { display: block!important; } table.visible-sm.visible-md { display: table; } tr.visible-sm.visible-md { display: table-row!important; } th.visible-sm.visible-md, td.visible-sm.visible-md { display: table-cell!important; } }@media(min-width:1200px) { .visible-sm.visible-lg { display: block!important; } table.visible-sm.visible-lg { display: table; } tr.visible-sm.visible-lg { display: table-row!important; } th.visible-sm.visible-lg, td.visible-sm.visible-lg { display: table-cell!important; } }.visible-md, tr.visible-md, th.visible-md, td.visible-md { display: none!important; } @media(max-width:767px) { .visible-md.visible-xs { display: block!important; } table.visible-md.visible-xs { display: table; } tr.visible-md.visible-xs { display: table-row!important; } th.visible-md.visible-xs, td.visible-md.visible-xs { display: table-cell!important; } }@media(min-width:768px) and (max-width:991px) { .visible-md.visible-sm { display: block!important; } table.visible-md.visible-sm { display: table; } tr.visible-md.visible-sm { display: table-row!important; } th.visible-md.visible-sm, td.visible-md.visible-sm { display: table-cell!important; } }@media(min-width:992px) and (max-width:1199px) { .visible-md { display: block!important; } table.visible-md { display: table; } tr.visible-md { display: table-row!important; } th.visible-md, td.visible-md { display: table-cell!important; } }@media(min-width:1200px) { .visible-md.visible-lg { display: block!important; } table.visible-md.visible-lg { display: table; } tr.visible-md.visible-lg { display: table-row!important; } th.visible-md.visible-lg, td.visible-md.visible-lg { display: table-cell!important; } }.visible-lg, tr.visible-lg, th.visible-lg, td.visible-lg { display: none!important; } @media(max-width:767px) { .visible-lg.visible-xs { display: block!important; } table.visible-lg.visible-xs { display: table; } tr.visible-lg.visible-xs { display: table-row!important; } th.visible-lg.visible-xs, td.visible-lg.visible-xs { display: table-cell!important; } }@media(min-width:768px) and (max-width:991px) { .visible-lg.visible-sm { display: block!important; } table.visible-lg.visible-sm { display: table; } tr.visible-lg.visible-sm { display: table-row!important; } th.visible-lg.visible-sm, td.visible-lg.visible-sm { display: table-cell!important; } }@media(min-width:992px) and (max-width:1199px) { .visible-lg.visible-md { display: block!important; } table.visible-lg.visible-md { display: table; } tr.visible-lg.visible-md { display: table-row!important; } th.visible-lg.visible-md, td.visible-lg.visible-md { display: table-cell!important; } }@media(min-width:1200px) { .visible-lg { display: block!important; } table.visible-lg { display: table; } tr.visible-lg { display: table-row!important; } th.visible-lg, td.visible-lg { display: table-cell!important; } }.hidden-xs { display: block!important; } table.hidden-xs { display: table; } tr.hidden-xs { display: table-row!important; } th.hidden-xs, td.hidden-xs { display: table-cell!important; } @media(max-width:767px) { .hidden-xs, tr.hidden-xs, th.hidden-xs, td.hidden-xs { display: none!important; } }@media(min-width:768px) and (max-width:991px) { .hidden-xs.hidden-sm, tr.hidden-xs.hidden-sm, th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm { display: none!important; } }@media(min-width:992px) and (max-width:1199px) { .hidden-xs.hidden-md, tr.hidden-xs.hidden-md, th.hidden-xs.hidden-md, td.hidden-xs.hidden-md { display: none!important; } }@media(min-width:1200px) { .hidden-xs.hidden-lg, tr.hidden-xs.hidden-lg, th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg { display: none!important; } }.hidden-sm { display: block!important; } table.hidden-sm { display: table; } tr.hidden-sm { display: table-row!important; } th.hidden-sm, td.hidden-sm { display: table-cell!important; } @media(max-width:767px) { .hidden-sm.hidden-xs, tr.hidden-sm.hidden-xs, th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs { display: none!important; } }@media(min-width:768px) and (max-width:991px) { .hidden-sm, tr.hidden-sm, th.hidden-sm, td.hidden-sm { display: none!important; } }@media(min-width:992px) and (max-width:1199px) { .hidden-sm.hidden-md, tr.hidden-sm.hidden-md, th.hidden-sm.hidden-md, td.hidden-sm.hidden-md { display: none!important; } }@media(min-width:1200px) { .hidden-sm.hidden-lg, tr.hidden-sm.hidden-lg, th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg { display: none!important; } }.hidden-md { display: block!important; } table.hidden-md { display: table; } tr.hidden-md { display: table-row!important; } th.hidden-md, td.hidden-md { display: table-cell!important; } @media(max-width:767px) { .hidden-md.hidden-xs, tr.hidden-md.hidden-xs, th.hidden-md.hidden-xs, td.hidden-md.hidden-xs { display: none!important; } }@media(min-width:768px) and (max-width:991px) { .hidden-md.hidden-sm, tr.hidden-md.hidden-sm, th.hidden-md.hidden-sm, td.hidden-md.hidden-sm { display: none!important; } }@media(min-width:992px) and (max-width:1199px) { .hidden-md, tr.hidden-md, th.hidden-md, td.hidden-md { display: none!important; } }@media(min-width:1200px) { .hidden-md.hidden-lg, tr.hidden-md.hidden-lg, th.hidden-md.hidden-lg, td.hidden-md.hidden-lg { display: none!important; } }.hidden-lg { display: block!important; } table.hidden-lg { display: table; } tr.hidden-lg { display: table-row!important; } th.hidden-lg, td.hidden-lg { display: table-cell!important; } @media(max-width:767px) { .hidden-lg.hidden-xs, tr.hidden-lg.hidden-xs, th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs { display: none!important; } }@media(min-width:768px) and (max-width:991px) { .hidden-lg.hidden-sm, tr.hidden-lg.hidden-sm, th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm { display: none!important; } }@media(min-width:992px) and (max-width:1199px) { .hidden-lg.hidden-md, tr.hidden-lg.hidden-md, th.hidden-lg.hidden-md, td.hidden-lg.hidden-md { display: none!important; } }@media(min-width:1200px) { .hidden-lg, tr.hidden-lg, th.hidden-lg, td.hidden-lg { display: none!important; } }.visible-print, tr.visible-print, th.visible-print, td.visible-print { display: none!important; } @media print { .visible-print { display: block!important; } table.visible-print { display: table; } tr.visible-print { display: table-row!important; } th.visible-print, td.visible-print { display: table-cell!important; } .hidden-print, tr.hidden-print, th.hidden-print, td.hidden-print { display: none!important; } }.navbar { font-size: 13px; font-weight: 300; border: 0; } .navbar .navbar-toggle:hover .icon-bar { background-color: #b3b3b3; } .navbar-collapse { border-top-color: rgba(0, 0, 0, 0.2); -webkit-box-shadow: none; box-shadow: none; } .navbar .dropdown-menu { border: 0; } .navbar .dropdown-menu>li>a, .navbar .dropdown-menu>li>a:focus { font-size: 13px; font-weight: 300; background-color: transparent; } .navbar .dropdown-header { color: rgba(255, 255, 255, 0.5); } .navbar-default .dropdown-menu { background-color: #333; } .navbar-default .dropdown-menu>li>a, .navbar-default .dropdown-menu>li>a:focus { color: #fff; } .navbar-default .dropdown-menu>li>a:hover, .navbar-default .dropdown-menu>.active>a, .navbar-default .dropdown-menu>.active>a:hover { background-color: #272727; } .navbar-inverse .dropdown-menu { background-color: #008cba; } .navbar-inverse .dropdown-menu>li>a, .navbar-inverse .dropdown-menu>li>a:focus { color: #fff; } .navbar-inverse .dropdown-menu>li>a:hover, .navbar-inverse .dropdown-menu>.active>a, .navbar-inverse .dropdown-menu>.active>a:hover { background-color: #006687; } .btn { padding: 14px 28px; } .btn-lg { padding: 16px 32px; } .btn-sm { padding: 8px 16px; } .btn-xs { padding: 4px 8px; } .btn-group .btn~.dropdown-toggle { padding-right: 16px; padding-left: 16px; } .btn-group .dropdown-menu { border-top-width: 0; } .btn-group.dropup .dropdown-menu { margin-bottom: 0; border-top-width: 1px; border-bottom-width: 0; } .btn-group .dropdown-toggle.btn-default~.dropdown-menu { background-color: #e7e7e7; border-color: #dadada; } .btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a { color: #333; } .btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a:hover { background-color: #d3d3d3; } .btn-group .dropdown-toggle.btn-primary~.dropdown-menu { background-color: #008cba; border-color: #0079a1; } .btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a:hover { background-color: #006d91; } .btn-group .dropdown-toggle.btn-success~.dropdown-menu { background-color: #43ac6a; border-color: #3c9a5f; } .btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a:hover { background-color: #388f58; } .btn-group .dropdown-toggle.btn-info~.dropdown-menu { background-color: #5bc0de; border-color: #46b8da; } .btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a:hover { background-color: #39b3d7; } .btn-group .dropdown-toggle.btn-warning~.dropdown-menu { background-color: #e99002; border-color: #d08002; } .btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a:hover { background-color: #c17702; } .btn-group .dropdown-toggle.btn-danger~.dropdown-menu { background-color: #f04124; border-color: #ea2f10; } .btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a { color: #fff; } .btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a:hover { background-color: #dc2c0f; } .lead { color: #6f6f6f; } cite { font-style: italic; } blockquote { color: #6f6f6f; border-left-width: 1px; } blockquote.pull-right { border-right-width: 1px; } blockquote small { font-size: 12px; font-weight: 300; } table { font-size: 12px; } input, .form-control { padding: 7px; font-size: 12px; } label, .control-label, .help-block, .checkbox, .radio { font-size: 12px; font-weight: normal; } .form-group .btn, .input-group-addon, .input-group-btn .btn { padding: 8px 14px; font-size: 12px; } .nav .open>a, .nav .open>a:hover, .nav .open>a:focus { border-color: transparent; } .nav-tabs>li>a { color: #222; background-color: #e7e7e7; } .nav-tabs .caret { border-top-color: #222; border-bottom-color: #222; } .nav-pills { font-weight: 300; } .breadcrumb { font-size: 10px; font-weight: 300; text-transform: uppercase; border: 1px solid #ddd; border-radius: 3px; } .pagination { font-size: 12px; font-weight: 300; color: #999; } .pagination>li>a, .pagination>li>span { margin-left: 4px; color: #999; } .pagination>.active>a, .pagination>.active>span { color: #fff; } .pagination>li>a, .pagination>li:first-child>a, .pagination>li:last-child>a, .pagination>li>span, .pagination>li:first-child>span, .pagination>li:last-child>span { border-radius: 3px; } .pagination-lg>li>a { padding-right: 22px; padding-left: 22px; } .pagination-sm>li>a { padding: 0 5px; } .pager { font-size: 12px; font-weight: 300; color: #999; } .list-group { font-size: 12px; font-weight: 300; } .label { padding-right: 1em; padding-left: 1em; font-weight: 300; border-radius: 0; } .label-default { color: #333; background-color: #e7e7e7; } .badge { font-weight: 300; } .progress { height: 22px; padding: 2px; background-color: #f6f6f6; border: 1px solid #ccc; -webkit-box-shadow: none; box-shadow: none; } .dropdown-menu { padding: 0; margin-top: 0; font-size: 12px; } .dropdown-menu>li>a { padding: 12px 15px; } .dropdown-header { padding-right: 15px; padding-left: 15px; font-size: 9px; text-transform: uppercase; } .popover { font-size: 12px; font-weight: 300; color: #fff; } .panel-heading, .panel-footer { border-top-right-radius: 0; border-top-left-radius: 0; } .clearfix:before, .clearfix:after { display: table; content: " "} .clearfix:after { clear: both; } .clearfix:before, .clearfix:after { display: table; content: " "} .clearfix:after { clear: both; } .center-block { display: block; margin-right: auto; margin-left: auto; } .pull-right { float: right!important; } .pull-left { float: left!important; } .hide { display: none!important; } .show { display: block!important; } .invisible { visibility: hidden; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .hidden { display: none!important; visibility: hidden!important; } .affix { position: fixed; } ================================================ FILE: docs/site/css/cinder.css ================================================ /* Cinder Theme for MkDocs | Copyright 2015 Christopher Simpkins | MIT License */ body { font-family:"Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; background-color: #FFF; color: #343838; } h1, h2, h3, h4, h5, h6 { font-family:'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #222; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { color: #B1B7B9; } h2 { margin-top: 35px; } h1, h2 { font-weight: 700; } h4 { font-family: 'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: 300; margin-top: 20px; font-style: italic; } h5 { font-family: 'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: 300; font-variant: small-caps; } pre, code { background-color: #FCFDFF; } pre>code { font-size: 13px; } pre { margin-top: 25px; margin-bottom: 25px; } .lead { font-family:"Inter", "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 400; line-height: 1.4; letter-spacing: 0.0312em; color: #B1B7B9; } .navbar-default { background-color: #343838; border-bottom: 8px #EBF2F2 solid; } .bs-sidenav { background-image: url("../img/grid11.png"); background-repeat: repeat; font-family: Inter,"Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 13px; } .well { background-color: #FCFDFF; } .btn-default { background-color:#FCFDFF; } .table-striped > tbody > tr:nth-child(2n+1) > td, .table-striped > tbody > tr:nth-child(2n+1) > th { background-color: #FCFDFF; } #mkdocs-search-query:focus { outline: none; -webkit-box-shadow: none; box-shadow: none; } #mkdocs-search-query { font-family:"Inter", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 20px; font-weight: 700; color: #343838; height: 45px; } footer > hr { width: 35%; } ================================================ FILE: docs/site/css/highlight.css ================================================ /* github.com style (c) Vasily Polovnyov */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #FCFDFF; } .hljs-comment, .hljs-quote { color: #998; font-style: italic; } .hljs-keyword, .hljs-selector-tag, .hljs-subst { color: #333; font-weight: bold; } .hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr { color: #008080; } .hljs-string, .hljs-doctag { color: #d14; } .hljs-title, .hljs-section, .hljs-selector-id { color: #900; font-weight: bold; } .hljs-subst { font-weight: normal; } .hljs-type, .hljs-class .hljs-title { color: #458; font-weight: bold; } .hljs-tag, .hljs-name, .hljs-attribute { color: #000080; font-weight: normal; } .hljs-regexp, .hljs-link { color: #009926; } .hljs-symbol, .hljs-bullet { color: #990073; } .hljs-built_in, .hljs-builtin-name { color: #0086b3; } .hljs-meta { color: #999; font-weight: bold; } .hljs-deletion { background: #fdd; } .hljs-addition { background: #dfd; } .hljs-emphasis { font-style: italic; } .hljs-strong { font-weight: bold; } ================================================ FILE: docs/site/custom/style.css ================================================ @media (min-width: 992px) { /* Allow the sidebar to scroll if it overflows the page. */ .bs-sidebar { overflow-y: scroll; } } .btn.btn-primary { /* Change for github issues buttons. */ border-radius: 30px; font-size: 15px; } ================================================ FILE: docs/site/faq/index.html ================================================ F.A.Q. - regenie

    Frequently asked questions

    General

    • Why doesn’t regenie need a genetic relatedness matrix (GRM)?

    regenie performs whole genome regression using the following model

    where is a phenotype, is a genotype matrix, and . This model has close ties to a linear mixed model (LMM) based on an infinitesimal model

    where with is referred to as the genetic relatedness matrix (GRM). In the LMM, the polygenic effects have been integrated out so that model only involves the GRM $K$ through a variance component in the covariance matrix of the trait.

    In regenie, we directly estimate the polygenic effects parameter by using ridge regression, which corresponds to fitting a linear regression model with a L2 penalty to impose shrinkage. Hence, we bypass having to use the GRM and use the polygenic effect estimates to control for population structure when testing variants for association.


    • Can regenie be run on small sample sizes?

    For quantitative traits, we have not obtained issues running regenie on small data sets. For binary traits, we have obtained successful runs of regenie (step 1 and 2) on data sets with as little as 300 samples. A few factors to consider:

    1. Convergence issues may occur in step 1 (all the more if a trait is highly unbalanced) see below
    2. Similarly, convergence issues may occur in step 2 when using Firth approximation see below

    Note: we have found that regenie can get conservative in more extreme relatedness scenarios so we recommend not to use it for smaller cohorts with high amounts of relatedness like founder populations where exact mixed-model methods can be used

    Step 1

    • What block size to use in step 1?

    We recommend to use blocks of size 1000 as we have observed that it leads to a reasonable number of ridge predictors at level 1 (e.g. 2,500 with 500K SNPs used and the default regenie parameters) and have noticed little change in the final predictions when varying the block size.


    • How many variants to use in step 1?

    We recommend to use a smaller set of about 500K directly genotyped SNPs in step 1, which should be sufficient to capture genome-wide polygenic effects. Note that using too many SNPs in Step 1 (e.g. >1M) can lead to a high computational burden due to the resulting higher number of predictors in the level 1 models.


    • What do I do if I get the error "Uh-oh, SNP XX has low variance (=XX)" in step 1?

    This is due to variants with very low minor allele count (MAC) being included in step 1. To avoid this, you should use a MAC filter to remove such variants in a pre-processing step before running Regenie.

    For example, in PLINK2 you would use the --mac option and obtain a list of variants that pass the MAC filter (note that if you are using --keep/--remove in Regenie, you should also use it in the PLINK2 command)

    plink2 \
      --bfile my_bed_file \
      --mac 100 \
      --write-snplist \
      --out snps_pass
    

    You would then use the output file in regenie as --extract snps_pass.snplist (and this would avoid having to make a new genotype file).


    • What to do if Step 1 of regenie failed for a binary trait when fitting the penalized logsitic regression model?

    This can occur when the sample size used to fit the model is small and/or if the trait is extremely unbalanced.

    1. If using K-fold CV, switch to LOOCV (option --loocv) to increase the size of the sample used to fit the model (note: LOOCV is now used by default when the sample size is below 5,000)
    2. If it is due to quasi-separation (i.e. Var(Y)=0 occurred in model fitting), either increase the sample size using LOOCV or increase the MAF threshold for variants included in step 1 analysis

    Step 2

    • What to do if Step 2 of regenie fails when fitting the null model for the approximate Firth correction?

    This can occur when the sample size used to fit the model is small and/or if the trait is extremely unbalanced. We have implemented the same measures as in the logistf function in R to avoid convergence issues, which include the use of a step size threshold when performing a Newton step.

    1. We first try fitting the model with a step size threshold that is more liberal (=25) as well as a maximum number of iterations of 1,000 and if convergence fails, we retry the model fit using a more stringent step size threshold (=5) and a higher threshold for the number of iterations (=5,000), which will slow down convergence.
    2. The user can also specify a maximum step size threshold using --maxstep-null (use value <5) as well as increase the maximum number of iterations using --maxiter-null (use value >5000). In that case, no retries are perfomed if convergence fails.
      • We recommend to test chromosomes separately (using --chr) as these parameters may need to be altered when fitting the null model for each chromosome


    • What is reported in A1FREQ when building masks?

      • For the max and comphet rules, the resulting burden masks take on values in [0,2] just like single variants so we compute A1FREQ the same way as done for single variants (i.e. mean(G)/2 where G is a genotype vector).
      • For the sum rule, A1FREQ is computed as the average of the effect allele frequencies across all sites included in the mask.


    • How is missingness handled in the genotype data?

    Missing genotypes are imputed with per-SNP averages when performing association tests (note: the genotype summaries reported like AAF, INFO are only based on non-missing genotypes).

    ================================================ FILE: docs/site/index.html ================================================ Home - regenie

    regenie

    regenie is a C++ program for whole genome regression modelling of large genome-wide association studies.

    It is developed and supported by a team of scientists at the Regeneron Genetics Center.

    The method has the following properties

    • It works on quantitative and binary traits, including binary traits with unbalanced case-control ratios
    • It can handle population structure and relatedness
    • It can process multiple phenotypes at once efficiently
    • For binary traits, it supports Firth logistic regression and an SPA test
    • It can perform gene/region-based tests (Burden, SBAT, SKAT/SKATO, ACATV/ACATO)
    • It can perform interaction tests (GxE, GxG) as well as conditional analyses
    • Meta-analysis of REGENIE summary statistics can be performed using REMETA
    • It is fast and memory efficient 🔥
    • It supports the BGEN, PLINK bed/bim/fam and PLINK2 pgen/pvar/psam genetic data formats
    • It is ideally suited for implementation in Apache Spark (see GLOW)
    • It can be installed with Conda

    Citation

    Mbatchou, J., Barnard, L., Backman, J. et al. Computationally efficient whole-genome regression for quantitative and binary traits. Nat Genet 53, 1097–1103 (2021). https://doi.org/10.1038/s41588-021-00870-7

    License

    regenie is distributed under an MIT license.

    Contact

    If you have any questions about regenie please contact

    If you want to submit a issue concerning the software please do so using the regenie Github repository.

    ================================================ FILE: docs/site/install/index.html ================================================ Install - regenie

    Download

    The regenie source code is hosted on Github.

    Installation

    Pre-requisites

    regenie requires compilation with GCC version >= 5.1 (on Linux) or Clang version >=3.3 (on Mac OSX). It also requires having GFortran library installed.

    Pre-compiled binaries

    Pre-compiled binaries are available in the Github repository. These are provided for Linux (including Centos7) and Mac OSX computing environments and are statically linked. For the Linux binaries, users should have GLIBC version >= 2.22 installed. Additionally, they are provided compiled with Intel MKL library which will provide speedups for many of the operations done in regenie.

    Standard installation

    1. regenie requires the BGEN library so you will need to download and install that library.
    2. Edit the BGEN_PATH variable in the Makefile to the BGEN library path.
    3. On the command line type make while in the main source code directory.
    4. This should produce the executable called regenie.

    regenie has been enhanced to allow for gzip compressed input (for phenotype/covariate files) and output (for association results files) using the Boost Iostream library. If this library is installed on the system, you should compile using make HAS_BOOST_IOSTREAM=1.

    Furthermore, we have enabled compilation of regenie with the Intel Math Kernel (MKL) library. You first need to have it installed on your system and modify the MKLROOT variable in the Makefile to the installed MKL library path.

    With CMake

    You can compile the binary using CMake version >=3.13 (instead of make as above).

    mkdir -p build
    cd build
    BGEN_PATH=<path_to_bgen_lib> cmake ..
    make
    

    This will generate the binary in the build/ subdirectory. To use with Boost Iostreams and/or Intel MKL library, add the corresponding flags before the cmake command on line 3 (e.g. BGEN_PATH=<path_to_bgen_lib> HAS_BOOST_IOSTREAM=1 cmake ..).

    With Docker

    Alternatively, you can use a Docker image to run regenie. A guide to using docker is available on the Github page.

    With conda

    To install with conda, you can use the following commands:

    # create new environment
    conda create -n regenie_env -c conda-forge -c bioconda regenie
    # load it
    conda activate regenie_env
    

    Computing requirements

    We have tested regenie on 64-bit Linux and 64-bit Mac OSX computing environments.

    Note that for Mac OSX computing environments, compiling is done without OpenMP, as the library is not built-in by default and has to be installed separately.

    Memory usage

    In both Step 1 and Step 2 of a regenie run the genetic data file is read once, in blocks of SNPs, so at no point is the full dataset ever stored in memory.

    regenie uses a dimension reduction approach using ridge regression to produce a relatively small set of genetic predictors, that are then used to fit a whole-genome regression model. These genetic predictors are stored in memory by default, and can be relatively large if many phenotypes are stored at once.

    For example, if there are phenotypes, SNPs and samples, and a block size of SNPs is used with ridge parameters, then regenie needs to store roughly doubles per phenotype, which is 8Gb per phenotype when and 200Gb in total when .

    However, the --lowmem option can be used to avoid that memory usage, at negligible extra computational cost, by writing temporary files to disk.

    Threading

    regenie can take advantage of multiple cores using threading. The number of threads can be specified using the --threads option.

    regenie uses the Eigen library for efficient linear algebra operations and this uses threading where possible.

    For PLINK bed/bim/fam files, PLINK2 pgen/pvar/psam files, as well as BGEN v1.2 files with 8-bit encoding (format used for UK Biobank 500K imputed data), step 2 of regenie has been optimized by using multithreading through OpenMP.

    When running the SKAT/ACAT gene-based tests, we recommend to use at most 2 threads and instead parallelize the runs over partitions of the genome (e.g. groups of genes).

    For Windows platforms

    If you are on a Windows machine, we recommend to use Windows Subsystem for Linux (WSL) to install a Ubuntu distribution so that you will be able to run REGENIE from a Linux terminal. You can download pre-compiled REGENIE binaries from the Github repository (note that you will need to install the libgomp1 library).

    Note: from your Windows command prompt, you can run REGENIE using wsl regenie.

    ================================================ FILE: docs/site/js/base.js ================================================ function getSearchTerm() { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == 'q') { return sParameterName[1]; } } } $(document).ready(function() { /** * ------------------------------------------------------------------------ * Taken from themes/mkdocs/js/base.js * ------------------------------------------------------------------------ */ var search_term = getSearchTerm(), $search_modal = $('#mkdocs_search_modal'), $keyboard_modal = $('#mkdocs_keyboard_modal'); if (search_term) { $search_modal.modal(); } // make sure search input gets autofocus everytime modal opens. $search_modal.on('shown.bs.modal', function() { $search_modal.find('#mkdocs-search-query').focus(); }); // Close search modal when result is selected // The links get added later so listen to parent $('#mkdocs-search-results').click(function(e) { if ($(e.target).is('a')) { $search_modal.modal('hide'); } }); if (typeof shortcuts !== 'undefined') { // Populate keyboard modal with proper Keys $keyboard_modal.find('.help.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.help]; $keyboard_modal.find('.prev.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.previous]; $keyboard_modal.find('.next.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.next]; $keyboard_modal.find('.search.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.search]; // Keyboard navigation document.addEventListener("keydown", function(e) { if ($(e.target).is(':input')) return true; var key = e.which || e.key || window.event && window.event.key; var page; switch (key) { case shortcuts.next: page = $('.navbar a[rel="next"]:first').prop('href'); break; case shortcuts.previous: page = $('.navbar a[rel="prev"]:first').prop('href'); break; case shortcuts.search: e.preventDefault(); $keyboard_modal.modal('hide'); $search_modal.modal('show'); $search_modal.find('#mkdocs-search-query').focus(); break; case shortcuts.help: $search_modal.modal('hide'); $keyboard_modal.modal('show'); break; default: break; } if (page) { $keyboard_modal.modal('hide'); window.location.href = page; } }); } $('table').addClass('table table-striped table-hover'); // Improve the scrollspy behaviour when users click on a TOC item. $(".bs-sidenav a").on("click", function() { var clicked = this; setTimeout(function() { var active = $('.nav li.active a'); active = active[active.length - 1]; if (clicked !== active) { $(active).parent().removeClass("active"); $(clicked).parent().addClass("active"); } }, 50); }); }); /** * ------------------------------------------------------------------------ * Taken from themes/mkdocs/js/base.js * ------------------------------------------------------------------------ */ $('body').scrollspy({ target: '.bs-sidebar', offset: 100 }); /* Prevent disabled links from causing a page reload */ $("li.disabled a").click(function() { event.preventDefault(); }); // See https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes // We only list common keys below. Obscure keys are omited and their use is discouraged. var keyCodes = { 8: 'backspace', 9: 'tab', 13: 'enter', 16: 'shift', 17: 'ctrl', 18: 'alt', 19: 'pause/break', 20: 'caps lock', 27: 'escape', 32: 'spacebar', 33: 'page up', 34: 'page down', 35: 'end', 36: 'home', 37: '←', 38: '↑', 39: '→', 40: '↓', 45: 'insert', 46: 'delete', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9', 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 91: 'Left Windows Key / Left ⌘', 92: 'Right Windows Key', 93: 'Windows Menu / Right ⌘', 96: 'numpad 0', 97: 'numpad 1', 98: 'numpad 2', 99: 'numpad 3', 100: 'numpad 4', 101: 'numpad 5', 102: 'numpad 6', 103: 'numpad 7', 104: 'numpad 8', 105: 'numpad 9', 106: 'multiply', 107: 'add', 109: 'subtract', 110: 'decimal point', 111: 'divide', 112: 'f1', 113: 'f2', 114: 'f3', 115: 'f4', 116: 'f5', 117: 'f6', 118: 'f7', 119: 'f8', 120: 'f9', 121: 'f10', 122: 'f11', 123: 'f12', 124: 'f13', 125: 'f14', 126: 'f15', 127: 'f16', 128: 'f17', 129: 'f18', 130: 'f19', 131: 'f20', 132: 'f21', 133: 'f22', 134: 'f23', 135: 'f24', 144: 'num lock', 145: 'scroll lock', 186: ';', 187: '=', 188: ',', 189: '‐', 190: '.', 191: '?', 192: '`', 219: '[', 220: '\', 221: ']', 222: ''', }; ================================================ FILE: docs/site/options/index.html ================================================ Documentation - regenie

    Getting started

    To run regenie, use the command ./regenie on the command line, followed by options and flags as needed.

    To get a full list of options use

    ./regenie --help
    

    The directory examples/ contains some small example files that are useful when getting started. A test run on a set of binary traits can be achieved by the following 2 commands.

    In Step 1, the whole genome regression model is fit to the traits, and a set of genomic predictions are produced as output

    ./regenie \
      --step 1 \
      --bed example/example \
      --exclude example/snplist_rm.txt \
      --covarFile example/covariates.txt \
      --phenoFile example/phenotype_bin.txt \
      --remove example/fid_iid_to_remove.txt \
      --bsize 100 \
      --bt --lowmem \
      --lowmem-prefix tmp_rg \
      --out fit_bin_out
    

    In Step 2, a set of imputed SNPs are tested for association using a Firth logistic regression model

    ./regenie \
      --step 2 \
      --bgen example/example.bgen \
      --covarFile example/covariates.txt \
      --phenoFile example/phenotype_bin.txt \
      --remove example/fid_iid_to_remove.txt \
      --bsize 200 \
      --bt \
      --firth --approx \
      --pThresh 0.01 \
      --pred fit_bin_out_pred.list \
      --out test_bin_out_firth
    

    One of the output files from these two commands is included in example/test_bin_out_firth_Y1.regenie.

    Basic options

    Input

    Option Argument Type Description
    --bgen, --bed, --pgen FILE Required Input genetic data file. Either BGEN file eg. file.bgen, or bed/bim/fam prefix that assumesfile.bed, file.bim, file.fam exist, or pgen/pvar/psam prefix that assumesfile.pgen, file.pvar, file.psam exist
    --sample FILE Optional Sample file corresponding to input BGEN file
    --bgi FILE Optional Index bgi file corresponding to input BGEN file
    --ref-first FLAG Optional Specify to use the first allele as the reference allele for BGEN or PLINK bed/bim/fam file input [default is to use the last allele as the reference]
    --keep FILE Optional Inclusion file that lists individuals to retain in the analysis
    --remove FILE Optional Exclusion file that lists individuals to remove from the analysis
    --extract FILE Optional Inclusion file that lists IDs of variants to keep
    --exclude FILE Optional Exclusion file that lists IDs of variants to remove
    --extract-or FILE Optional Inclusion file that lists IDs of variants to keep regardless of minimum MAC filter
    --exclude-or FILE Optional Exclusion file that lists IDs of variants to remove unless MAC is above threshold
    --phenoFile FILE Required Phenotypes file
    --phenoCol STRING Optional Use for each phenotype you want to include in the analysis
    --phenoColList STRING Optional Comma separated list of phenotypes to include in the analysis
    --eventColList STRING Optional Comma separated list of columns in the phenotype file to include in the analysis that contain the event times
    --phenoExcludeList STRING Optional Comma separated list of phenotypes to ignore from the analysis
    --covarFile FILE Optional Covariates file
    --covarCol STRING Optional Use for each covariate you want to include in the analysis
    --covarColList STRING Optional Comma separated list of covariates to include in the analysis
    --catCovarList STRING Optional Comma separated list of categorical covariates to include in the analysis
    --covarExcludeList STRING Optional Comma separated list of covariates to ignore
    --pred FILE Optional File containing predictions from Step 1 (see Overview). This is required for --step 2
    --tpheno-file STRING Optional to use a phenotype file in transposed format (e.g. BED format)
    --tpheno-indexCol INT Optional index of phenotype name column in transposed phenotype file
    --tpheno-ignoreCols INT Optional indexes of columns to ignore in transposed phenotype file
    --iid-only FLAG Optional to specify if header in transposed phenotype file only contains sample IID (assume FID=IID)

    Note: Parameter expansion can be used when specifying phenotypes/covariates (e.g. --covarCol PC{1:10}). Also, multiple files can be specified for --extract/--exclude/--keep/--remove by using a comma-separated list.

    Genetic data file format

    regenie can read BGEN files, bed/bim/fam files or pgen/psam/pvar files in Step 1 and Step 2.

    The BGEN file format is described here.

    The bed/bim/fam file format is described here.

    The pgen/pvar/psam file format is described here.

    Tools useful for genetic data file format conversion are : PLINK, QCTOOL, BCFTOOLS.

    Step 2 of regenie can be sped up by using BGEN files using v1.2 format with 8 bits encoding (genotype file can be generated with PLINK2 using option --export bgen-1.2 'bits=8') as well as having an accompanying .bgi index file (a useful tool to create such file is bgenix which is part of the BGEN library).

    To include X chromosome genotypes in step 1 and/or step 2, males should be coded as diploid so that their genotypes are 0/2 (this is done automatically for BED and PGEN file formats with haploid genotypes). Chromosome values of 23 (for human analyses), X, Y, XY, PAR1 and PAR2 are all acceptable and will be collapsed into a single chromosome.

    Sample inclusion/exclusion file format
    2 2 
    7 7 
    .
    

    No header. Each line starts with individual FID IID. Space/tab separated.

    Samples listed in the file that are not in bgen/bed/pgen file are ignored.

    Variant inclusion/exclusion file format
    20
    31
    .
    

    No header. Each line must start with variant ID (if there are additional columns, file must be space/tab separated).

    Variants listed in this file that are not in bgen/bed/pgen file are ignored.

    Covariate file format

    FID IID V1 V2 V3
    1 1 1.46837294454993 1.93779743016325 0.152887004505393
    2 2 -1.2234390803815 -1.63408619199948 -0.190201446835255
    3 3 0.0711531925667286 0.0863906292357564 0.14254739715665
    .
    

    Line 1 : Header with FID, IID and covariate names.

    Followed by lines of values. Space/tab separated.

    Each line contains individual FID and IID followed by covariate values.

    Samples listed in this file that are not in bgen/bed/pgen file are ignored. Genotyped samples that are not in this file are removed from the analysis as well as samples with missing values at any of the covariates included.

    If --step 2 is specified, then the covariate file should be the same as that used in Step 1.

    Phenotype file format

    FID IID Y1 Y2
    1 1 1.64818554321186 2.2765234736685
    2 2 -2.67352013711554 -1.53680421614647
    3 3 0.217542851471485 0.437289912695016
    .
    

    Line 1 : Header with FID, IID and phenotypes names.

    Followed by lines of values. Space/tab separated. Each line contains individual FID and IID followed by P phenotype values (for binary traits, must be coded as 0=control, 1=case, NA=missing unless using --1).

    Samples listed in this file that are not in bgen/bed/pgen file are ignored. Genotyped samples that are not in this file are removed from the analysis.

    Missing values must be coded as NA.

    With QTs, missing values are mean-imputed in Step 1 and they are dropped when testing each phenotype in Step 2 (unless using --force-impute).

    With BTs, missing values are mean-imputed in Step 1 when fitting the level 0 linear ridge regression and they are dropped when fitting the level 1 logistic ridge regression for each trait . In Step 2, missing values are dropped when testing each trait.

    To remove all samples that have missing values at any of the phenotypes, use option --strict in Step 1 and 2.

    If using the transposed phenotype file format with option --tpheno-file, the header line must contain subject IDs as "FID_IID", otherwise use option --iid-only and only include IIDs (so will assume FID=IID).

    Predictions file format

    Running --step 1 --out foo will produce

    1. A set of files containing genomic predictions for each phenotype from Step 1 (see Output section below).
    2. A file called foo_pred.list listing the locations of the prediction files.

    The file list is needed as an input file when using --step 2 via the --pred option. It has one line per phenotype (in any order) that specifies the name of the phenotype and its corresponding prediction file name. Each phenotype must have exactly one prediction file and phenotype names must match with those in the phenotype file. Phenotypes in this file not included in the analysis are ignored.

    Each prediction file contains the genetic predictions for the phenotype (space separated).

    Line 1 starts with 'FID_IID' followed by $N$ sample identifiers. It is followed by 23 lines containing the genetic predictions for each chromosome (sex chromosomes are collapsed into chromosome 23).

    More specifically, each line has $N+1$ values which are the chromosome number followed by the $N$ leave-one chromosome out (LOCO) predictions for each individual.

    Samples in this file not in the bed/pgen/bgen input file are ignored. Genotyped samples not present in this file will be ignored in the analysis of the corresponding trait.

    Samples with missing LOCO predictions must have their corresponding phenotype value set to missing.

    Options

    Option Argument Type Description
    --step INT Required specify step for the regenie run (see Overview) [argument can be 1 or 2]
    --qt FLAG Optional specify that traits are quantitative (this is the default so can be ommitted)
    --bt FLAG Optional specify that traits are binary with 0=control,1=case,NA=missing
    --t2e FLAG Optional specify that traits are time-to-event data with 0=censoring,1=event,NA=missing in event column
    -1,--cc12 FLAG Optional specify to use 1/2/NA encoding for binary traits (1=control,2=case,NA=missing)
    --bsize INT Required size of the genotype blocks
    --cv INT Optional number of cross validation (CV) folds [default is 5]
    --loocv FLAG Optional flag to use leave-one out cross validation
    --lowmem FLAG Optional flag to reduce memory usage by writing level 0 predictions to disk (details below). This is very useful if the number of traits is large (e.g. greater than 10)
    --lowmem-prefix FILE PREFIX Optional prefix where to temporarily write the level 0 predictions
    --split-l0 PREFIX,N Optional split level 0 across N jobs and set prefix of output files of level 0 predictions
    --run-l0 FILE,K Optional run level 0 for job K in {1..N} specifying the master file created from '--split-l0'
    --run-l1 FILE Optional run level 1 specifying the master file from '--split-l0'
    --l1-phenoList STRING Optional to specify a subset of phenotypes to analyze when using --run-l1
    --keep-l0 FLAG Optional avoid deleting the level 0 predictions written on disk after fitting the level 1 models
    --print-prs FLAG Optional flag to print whole genome predictions (i.e. PRS) without using LOCO scheme
    --force-step1 FLAG Optional flag to run step 1 when >1M variants are used (not recommened)
    --minCaseCount INT Optional flag to ignore BTs with low case counts [default is 10]
    --apply-rint FLAG Optional to apply Rank Inverse Normal Transformation (RINT) to quantitative phenotypes (use in both Step 1 & 2)
    --nb INT Optional number of blocks (determined from block size if not provided)
    --strict FLAG Optional flag to removing samples with missing data at any of the phenotypes
    --ignore-pred FLAG Optional skip reading the file specified by --pred (corresponds to simple linear/logistic regression)
    --htp STRING Optional to output the summary statistics file in the HTP format (string should correspond to cohort name, e.g. 'UKB_450_EUR')
    --exact-p FLAG Optional avoid capping p-values at 2.2E-307 in the HTP format summary statistics output
    --use-relative-path FLAG Optional to use relative paths instead of absolute ones for the step 1 output pred.list file
    --use-prs FLAG Optional flag to use whole genome PRS in --pred (this is output in step 1 when using --print-prs)
    --gz FLAG Optional flag to output files in compressed gzip format (LOCO prediction files in step 1 and association results files in step 2) [this only works when compiling with Boost Iostream library (see Install tab)].
    --force-impute FLAG Optional flag to keep and impute missing observations for QTs in step 2
    --write-samples FLAG Optional flag to write sample IDs for those kept in the analysis for each trait in step 2
    --print-pheno FLAG Optional flag to write phenotype name in the first line of the sample ID files when using --write-samples
    --firth FLAG Optional specify to use Firth likelihood ratio test (LRT) as fallback for p-values less than threshold
    --approx FLAG Optional flag to use approximate Firth LRT for computational speedup (only works when option --firth is used)
    --firth-se FLAG Optional flag to compute SE based on effect size and LRT p-value when using Firth correction (instead of based on Hessian of unpenalized log-likelihood)
    --write-null-firth FLAG Optional to write the null estimates for approximate Firth [can be used in step 1 or 2]
    --compute-all FLAG Optional to write the null Firth estimates for all chromosomes (regardless of the genotype file)
    --use-null-firth FILE Optional to use stored null estimates for approximate Firth in step 2
    --spa FLAG Optional specify to use Saddlepoint approximation as fallback for p-values less than threshold
    --pThresh FLOAT Optional P-value threshold below which to apply Firth/SPA correction [default is 0.05]
    --test STRING Optional specify to carry out dominant or recessive test [default is additive; argument can be dominant or recessive]
    --chr INT Optional specify which chromosomes to test in step 2 (use for each chromosome to include)
    --chrList STRING Optional Comma separated list of chromosomes to test in step 2
    --range STRING Optional specify chromosome region for variants to test in step 2 [format=CHR:MINPOS-MAXPOS]
    --minMAC FLOAT Optional flag to specify the minimum minor allele count (MAC) when testing variants [default is 5]. Variants with lower MAC are ignored.
    --minINFO FLOAT Optional flag to specify the minimum imputation info score (IMPUTE/MACH R^2) when testing variants. Variants with lower info score are ignored.
    --sex-specific STRING Optional to perform sex-specific analyses [either 'male'/'female']
    --af-cc FLAG Optional to output A1FREQ in case/controls separately in the step 2 result file
    --no-split FLAG Optional flag to have summary statistics for all traits output in the same file
    --starting-block INT Optional to start step 2 at a specific block/set number (useful if program crashes during a job)
    --nauto INT Optional number of autosomal chromosomes (for non-human studies) [default is 22]
    --maxCatLevels INT Optional maximum number of levels for categorical covariates (for non-human studies) [default is 10]
    --niter INT Optional maximum number of iterations for logistic regression [default is 30]
    --maxstep-null INT Optional maximum step size for logistic model with Firth penalty under the null [default is 25]
    --maxiter-null INT Optional maximum number of iterations for logistic model with Firth penalty under the null [default is 1000]
    --par-region STRING Optional specify build code to determine bounds for PAR1/PAR2 regions (can be 'b36/b37/b38/hg18/hg19/hg38' or 'start,end' bp bounds of non-PAR region) [default is hg38]
    --force-qt FLAG Optional force QT run for binary traits
    --threads INT Optional number of computational threads to use [default=all-1]
    --debug FLAG Optional debug flag (for use by developers)
    --verbose FLAG Optional verbose screen output
    --version FLAG Optional print version number and exit
    --help FLAG Optional Prints usage and options list to screen

    When step 1 of regenie is run in low memory mode (i.e. using --lowmem), temporary files are created on disk (using --lowmem-prefix tmp_prefix determines where the files are written [as in tmp_prefix_l0_Y1,...,tmp_prefix_l0_YP for P phenotypes]). If the prefix is not specified, the default is to use the prefix specified by --out (see below). These are automatically deleted at the end of the program (unless the run was not successful in which case the user would need to delete the files)

    See the Wiki page for more details on how to run the level 0 models for Step 1 of regenie in parallel.

    Output

    Option Argument Type Description
    --out FILE PREFIX Required Output files that depends on --step

    A log file file.log of the output is generated.

    Using --step 1 --out file

    For the phenotypes, files file_1.loco,...,file_P.loco are output with the per-chromosome LOCO predictions as rows of the files (following the order of the phenotypes in the phenotype file header). If option --gz was used, the files will be compressed in gzip format and have extension .loco.gz.

    Genotyped individuals specified using option --remove are excluded from this file. Individuals with missing phenotype values kept in the analysis are included in the file and have their predictions set to missing.

    The list of blup files needed for step 2 (association testing) is written to file_pred.list.

    If using --print-prs, files file_1.prs,...,file_P.prs will be written with the whole genome predictions (i.e. PRS) without using LOCO scheme (similar format as the .loco files). The list of these files is written to file_prs.list and can be used in step 2 with --pred and specifying flag --use-prs. Note that as these are not obtained using a LOCO scheme, association tests could suffer from proximal contamination.

    If using option --write-null-firth, the estimates for approximate Firth under the null will be written to files file_1.firth,...,file_P.firth and the list of these files is written to file_firth.list. This can be used in step 2 as --use-null-firth file_firth.list. Note that it assumes the same set of covariates are used in Step 1 and 2.

    Using--step 2 --out file

    By default, results are written in separate files for each phenotype file_<phenotype1_name>.regenie,...,file_<phenotypeP_name>.regenie. Each file has one line per SNP along with a header line. If option --gz was used, the files will be compressed in gzip format and have extension .regenie.gz.

    The entries of each row specify chromosome, position, ID, reference allele (allele 0), alternative allele (allele 1), frequency of the alternative allele, sample size and the test performed (additive/dominant/recessive). With BGEN/PGEN files with dosages, the imputation INFO score is provided (IMPUTE info score for BGEN and Mach Rsq for PGEN). Allele frequency, sample size and INFO score, if applicable, are computed using only non-missing samples for each phenotype.

    These are followed by the estimated effect sizes (for allele 1 on the original scale), standard errors, chi-square test statistics and p-value. An additional column is included to specify if Firth/SPA corrections failed.

    With option --no-split, the summary statistics for all traits are written to a single file file.regenie, with the same format as above. Additionaly, an accompanying file with the trait names corresponding to Y1,Y2,... will be generated in ‘file.regenie.Ydict’. Note that allele frequency, sample size and INFO score are computed using all analyzed samples.

    With option --htp, the summary statistics file will follow the HTP format.

    If option --write-samples was used, IDs of samples used for each trait will be written in files file_<phenotype1_name>.regenie.ids,...,file_<phenotypeP_name>.regenie.ids (tab separated, no header).

    When using --par-region, the default boundaries used for the chrX PAR regions are:

    • b36/hg18: 2709520 and 154584238
    • b37/hg19: 2699520 and 154931044
    • b38/hg38: 2781479 and 155701383

    Gene-based testing

    Starting from version 3.0, Step 2 of regenie provides a complimentary set of gene-based test in addition to the burden testing functionality introduced in version 2.0. More specifically, for a given set of variants (eg within a gene) which can be defined using functional annotations, regenie can apply various set-based tests on the variants as well as collapse them into a single combined 'mask' genotype that can be tested for association just like a single variant.

    Input

    Option Argument Type Description
    --anno-file FILE Required File with variant annotations for each set
    --set-list FILE Required File listing variant sets
    --extract-sets FILE Optional Inclusion file that lists IDs of variant sets to keep
    --exclude-sets FILE Optional Exclusion file that lists IDs of variant sets to remove
    --extract-setlist STRING Optional Comma-separated list of variant sets to keep
    --exclude-setlist STRING Optional Comma-separated list of variant sets to remove
    --aaf-file FILE Optional File with variant AAF to use when building masks (instead of AAF estimated from sample)
    --mask-def FILE Required File with mask definitions using the annotations defined in --anno-file

    Note: multiple files can be specified for --extract-sets/--exclude-sets by using a comma-separated list.

    Annotation input files

    The following files are used to define variant sets and functional annotations which will be used to generate masks.

    Annotation file
    1:55039839:T:C PCSK9 LoF
    1:55039842:G:A PCSK9 missense
    .
    

    This file defines functional annotations for variants. It is designed to accommodate for variants with separate annotations for different sets/genes.

    Each line contains the variant name, the set/gene name and a single annotation category (space/tab separated).

    Variants not in this file will be assigned to a default "NULL" category. A maximum of 63 annotation categories (+NULL category) is allowed.

    For gene sets, tools you can use to obtain variant annotations per transcripts are snpEFF or VEP. To obtain a single annotation per gene, you could choose the most deleterious functional annotation across the gene transcripts or alternatively use the canonical transcript (note that its definition can vary across software).

    We have implemented an extended 4-column format of the annotation file which also categorizes sets into domains (e.g. for gene sets, these would correspond to gene domains).

    1:55039839:T:C PCSK9 Prodomain LoF
    1:55039842:G:A PCSK9 Prodomain missense
    .
    

    Masks will be generated for each domain (maximum of 8 per set/gene) in addition to a mask combining across all domains. Variants can only be assigned to a single domain for each set/gene.

    Starting with v4.1, you can also specify custom variant weights which will be used in the burden, SKAT/SKAT-O and ACAT-V tests ($w_i$'s in the gene-based testing overview). Multiple weights can be included in the annotation file after the 3rd column, e.g.

    1:55039839:T:C PCSK9 LoF 0.9 0.812 1
    1:55039842:G:A PCSK9 missense 0.4 0.23 0.55
    .
    

    Using --weights-col 4 will use weights in the 4-th column for the gene-based tests.

    Set list file

    This file lists variants within each set/gene to use when building masks. Each line contains the set/gene name followed by a chromosome and physical position for the set/gene, then by a comma-separated list of variants included in the set/gene.

    A1BG 19  58346922  19:58346922:C:A,19:58346924:G:A,...
    A1CF 10  50806630  10:50806630:A:G,10:50806630:A:AT,...
    .
    
    Set inclusion/exclusion file format

    The file must have a single column of set/gene names corresponding to those in the set list file.

    PIGP
    ZBTB38
    .
    
    AAF file (optional)

    Both functional annotations and alternative allele frequency (AAF) cutoffs are used when building masks (e.g. only considering LoF sites where AAF is below 1%). By default, the AAF for each variant is computed from the sample but alternatively, the user can specify variant AAFs using this file.

    Each line contains the variant name followed by its AAF (it should be for the ALT allele used in the genetic data input). AAF must be a numerical value (i.e. it cannot be '.').

    7:6187101:C:T 1.53918207864341e-05
    7:6190395:C:A 2.19920388819247e-06
    .
    

    Since singleton variants cannot be identified from this file, they are determined by default based on the input genetic data. To enforce which sites should be included in the singleton masks (see --set-singletons), you can add a third column in the file with a binary indicator (1=singleton; 0=not singleton). So only variants which are specified as singletons will be considered for the singleton masks, regardless of whether they are singletons in the input genetic data. Note that with this flag, singleton sites will be included in all masks (regardless of the AAF in file).

    7:6187101:C:T 1.53918207864341e-05 0
    7:6190395:C:A 2.19920388819247e-06 1
    .
    

    Mask definitions

    Mask file

    This file specifies which annotation categories should be combined into masks. Each line contains a mask name followed by a comma-seperated list of categories included in the mask (i.e. union is taken over categories).

    For example below, Mask1 uses only LoF variants and Mask2 uses LoF and missense annotated variants.

    Mask1 LoF
    Mask2 LoF,missense
    .
    
    AAF cutoffs

    Option --aaf-bins specifies the AAF upper bounds used to generate burden masks (AAF and not MAF [minor allele frequency] is used when deciding which variants go into a mask). By default, a mask based on singleton sites are always included.

    For example, --aaf-bins 0.01,0.05 will generate 3 burden masks for AAFs in [0,0.01], [0,0.05] and singletons.

    SKAT/ACAT tests

    The option --vc-tests is used to specify the gene-based tests to run. By default, these tests use all variants in each mask category. If you'd like to only include variants whose AAF is below a given threshold ,e.g. only including rare variants, you can use --vc-maxAAF.

    Test Name in regenie Description
    SKAT skat Variance component test
    SKATO skato Omnibus test combining features of SKAT and Burden
    SKATO-ACAT skato-acat Same as SKATO but using Cauchy combination method to maximize power across SKATO models
    ACATV acatv Test using Cauchy combination method to combine single-variant p-values
    ACATO acato Omnibus test combining features of ACATV, SKAT and Burden
    ACATO-FULL acato-full Same as ACATO but using the larger set of SKATO models used in the SKATO test

    For example, --vc-tests skato,acato-full will run SKATO and ACATO (both using the default grid of 8 rho values for the SKATO models) and the p-values for SKAT, SKATO, ACATV and ACATO will be output.

    Ultra-rare variants (defined by default as MAC$\le$10, see --vc-MACthr) are collapsed into a burden mask which is then included in the tests instead of the individual variants.

    For additional details on the tests, see here.

    Joint test for burden masks

    The following tests can be used to combine different burden masks generated using different annotation classes as well as AAF thresholds.

    Test Name in regenie QT BT Robust to LD Assumes same effect direction
    Minimum P-value minp $\checkmark$ $\checkmark$ $\times$ $\times$
    ACAT acat $\checkmark$ $\checkmark$ $\checkmark$ $\times$
    SBAT sbat $\checkmark$ $\times$ $\checkmark$ $\checkmark$

    The ACAT test combines the p-values of the individual burden masks using the Cauchy combination method (see ref. 14 here). The SBAT test is described into more detail here.

    If you only want to output the results for the joint tests (ignore the marginal tests), use --joint-only.

    LOVO/LODO schemes

    The leave-one-variant-out (LOVO) scheme takes all sites going into a mask, and builds LOVO masks by leaving out one variant at a time from the full set of sites. The mask including all sites will also be computed.

    The argument for --mask-lovo is a comma-separated list which consists of the set/gene name, the mask name, and the AAF cutoff (either 'singleton' or a double in (0,1)).

    If using a 4-column annotation file, then --mask-lovo should have the gene name, the domain name, the mask name, and the AAF cutoff. So the LOVO masks will be generated for a specific gene domain.

    The leave-one-domain-out (LODO) scheme (specified by --mask-lodo) takes all sites going into a mask and builds a LODO mask for each domain specified for the gene by excluding all variants in the domain. The full mask including all sites will also be computed. The argument for --mask-lodo should have the gene name, the mask name and the AAF cutoff.

    Writing mask files

    Burden masks built in regenie can be written to PLINK bed format. If the input genetic data contains dosages, the masks dosages will be converted to hard-calls prior to being written to file and these hard-calls will be used for the association testing.

    The PLINK bed file is written using 'ref-last' encoding (i.e. REF allele is listed last in the bim file).

    Note that this cannot be used with the LOVO/LODO schemes.

    Options

    Option Argument Type Description
    --aaf-bins FLOAT,...,FLOAT Optional comma-separated list of AAF upper bounds to use when building masks [default is a single cutoff of 1%]
    --build-mask STRING Optional build masks using the maximum number of ALT alleles across sites ('max'; the default), or the sum of ALT alleles ('sum'), or thresholding the sum to 2 ('comphet')
    --singleton-carrier FLAG Optional to define singletons as variants with a single carrier in the sample (rather than alternative allele count=1)
    --set-singletons FLAG Optional to use 3rd column in AAF file to specify variants included in singleton masks
    --write-mask FLAG Optional write mask to PLINK bed format (does not work when building masks with 'sum')
    --vc-tests STRING Optional comma-separated list of SKAT/ACAT-type tests to run
    --vc-maxAAF FLOAT Optional AAF upper bound to use for SKAT/ACAT-type tests [default is 100%]
    --skat-params FLOAT,FLAT Optional a1,a2 values for the single variant weights computed from Beta(MAF,a1,a2) used in SKAT/ACAT-type tests [default is (1,25)]
    --skato-rho FLOAT,...,FLOAT Optional comma-separated list of $\rho$ values used for SKATO models
    --vc-MACthr FLOAT Optional MAC threshold below which to collapse variants in SKAT/ACAT-type tests [default is 10]
    --joint STRING Optional comma-separated list of joint tests to apply on the generated burden masks
    --rgc-gene-p FLAG Optional to compute the GENE_P test
    --skip-test FLAG Optional to skip computing association tests after building masks and writing them to file
    --mask-lovo STRING Optional to perform LOVO scheme
    --lovo-snplist FILE Optional File with list of variants for which to compute LOVO masks
    --mask-lodo FLAG Optional to perform LODO scheme
    --weights-col INT Optional column index (1-based) in annotation file to use custom weights in gene-based tests
    --write-mask-snplist FLAG Optional to write list of variants that went into each mask to file
    --check-burden-files FLAG Optional to check the concordance between annotation, set list and mask files [see below]
    --strict-check-burden FLAG Optional to exit early if the annotation, set list and mask definition files dont agree [see below]

    Three rules can be used to build masks with --build-mask as shown in diagram below, where the last rule comphet applies a threshold of 2 to the mask from the sum rule.

    MaskRules

    Output

    With --out file

    Results are written in separate files for each phenotype file_<phenotype1_name>.regenie,...,file_<phenotypeP_name>.regenie with the same output format mentioned above. Additionally, a header line is included (starting with ##) which contains mask definition information.

    Masks will have name <set_name>.<mask_name>.<AAF_cutoff> with the chromosome and physical position having been defined in the set list file, and the reference allele being ref, and the alternate allele corresponding to <mask_name>.<AAF_cutoff>. When using --mask-lovo, the mask name will be the same as above but have suffix _<variant_name> to specify the variant which was excluded when building the mask.

    With --build-mask sum, the reported mask AAF corresponds to the average AAF across sites included in the mask.

    If using --write-mask, the masks will be saved to file_masks.{bed,bim,fam} and if using --write-mask-snplist, the list of variants included in each mask will be saved to file_masks.snplist.

    When using --rgc-gene-p, it will apply the single p-value per gene GENE_P strategy using all masks (see here for details).

    Example run

    Using Step 1 results from the Step 1 command above, we use the following command to build and test masks in Step 2

    ./regenie \
      --step 2 \
      --bed example/example_3chr \
      --covarFile example/covariates.txt \
      --phenoFile example/phenotype_bin.txt \
      --bt \
      --remove example/fid_iid_to_remove.txt \
      --firth --approx \
      --pred fit_bin_out_pred.list \
      --anno-file example/example_3chr.annotations \
      --set-list example/example_3chr.setlist \
      --mask-def example/example_3chr.masks \
      --aaf-bins 0.1,0.05 \
      --write-mask \
      --bsize 200 \
      --out test_bin_out_firth
    

    For each set, this will produce masks using 3 AAF cutoffs (singletons, 5% and 10% AAF). The masks are written to PLINK bed file (in test_bin_out_firth_masks.{bed,bim,fam}) and tested for association with each binary trait using Firth approximate test (summary stats in test_bin_out_firth_<phenotype_name>.regenie). Note that the test uses the whole genome regression LOCO PRS from Step 1 of regenie (specified by --pred).

    Checking input files

    To assess the concordance between the input files for building masks, you can use --check-burden-files which will generate a report in file_masks_report.txt containing:

    1. for each set, the list the variants in the set-list file which are unrecognized (not genotyped or not present in annotation file for the set)

    2. for each mask, the list of annotations in the mask definition file which are not in the annotation file

    Additionally, you can use --strict-check-burden to enforce full agreement between the three files (if not, program will terminate) :

    1. all genotyped variants in the set list file must be in the annotation file (for the corresponding set)

    2. all annotations in the mask definition file must be present in the annotation file

    Interaction testing

    Starting from regenie v3.0, you can perform scans for interactions (either GxE or GxG). For GxE tests, the interacting variable should be part of the covariate file (if it is categorical, specify it in --catCovarList). For GxG tests, the interacting variant can be part of the input genetic file or it can be present in an external file (see --interaction-snp-file)

    Options

    Option Argument Type Description
    --interaction STRING Optional to run GxE test specifying the interacting covariate (see below)
    --interaction-snp STRING Optional to run GxG test specifying the interacting variant (see below)
    --interaction-file FORMAT,FILE Optional external genotype file containing the interacting variant [FORMAT can be bed/bgen/pgen and FILE is the file name (bgen) or file prefix (bed/pgen)]
    --interaction-file-sample FILE Optional accompagnying sample file for BGEN format
    --interaction-file-reffirst FLAG Optional use the first allele as the reference for BGEN or PLINK BED formats
    --no-condtl FLAG Optional to print out all the main effects from the interaction model (see Output section below)
    --force-condtl FLAG Optional to include the interacting SNP as a covariate in the marginal test (see Output section below)
    --rare-mac FLOAT Optional minor allele count (MAC) threshold below which to use HLM method for QTs [default is 1000]

    For GxE tests where the interacting variable is categorical, you can specify the baseline level using --interaction VARNAME[BASE_LEVEL] (e.g. --interaction BMI[<25]). Otherwise, the first value found in the covariate file will be used as the baseline level.

    For GxG tests, the default coding for the interacting variant is additive. If you would like to use dominant/recessive/categorical coding, use --interaction-snp SNP_NAME[dom/rec/cat] (for example with dominant coding, --interaction-snp SNPNAME[dom] will allow for separate effects between carriers vs non-carriers of the interacting variant). The allowed values in the brackets are add/dom/rec/cat.

    Output

    The result files will contain multiple lines for the same variant corresponding to the different null hypotheses being tested in the interaction model

    The suffix in the "TEST" column indicates which hypothesis is being tested:

    • "ADD": marginal test where the interacting variable has not been added as a covariate $-$ this corresponds to $H_0: \beta = 0$ given $\alpha=\gamma = 0$
      • this is only printed for GxG tests by default, or GxE using --no-condtl
    • "ADD-CONDTL": marginal test where the interacting variable has been added as a covariate (default for GxE tests) $-$ this corresponds to $H_0: \beta = 0$ given $\gamma = 0$
      • this is only printed for GxE tests by default, or GxG using --force-condtl
    • "ADD-INT_VAR": test for the main effect of the interaction variable ("VAR" will be replaced by the name of the interacting variable) $-$ this corresponds to $H_0: \alpha = 0$
      • this is only printed for GxG tests by default, or GxE using --no-condtl
      • If the interacting variable is categorical, you will have separate lines for each level aside from the baseline level (e.g. "ADD-INT_BMI=25-30" and "ADD-INT_BMI=30+" where baseline level is "$<$25")
      • will also output the effect of $E^2$ in "ADD-INT_VAR^2" if the trait is binary (see here)
    • "ADD-INT_SNP": test for main effect of tested SNP in the interaction model $-$ this corresponds to $H_0: \beta = 0$
    • "ADD-INT_SNPxVAR": test for interaction effect ("VAR" will be replaced by the name of the interacting variable) $-$ this corresponds to $H_0: \gamma = 0$
      • If the interacting variable is categorical, you will have separate lines for each level aside from the baseline level (e.g. "ADD-INT_SNPxBMI=25-30" and "ADD-INT_SNPxBMI=30+" where baseline level is "$<$25")
        • With Firth correction, only the effect sizes for the interaction effect at each level will be reported and the LRT p-value will only be computed for the joint test on the interaction effects
    • "ADD-INT_$k$DF": joint test for main and interaction effect of tested variant ($k\ge2$ for categorical interacting variables) $-$ this corresponds to $H_0: \beta = \gamma = 0$

    Conditional analyses

    Starting from regenie v3.0, you can specify genetic variants to add to the set of covariates when performing association testing. This works in both step 1 and 2, and can be used in conjunction with the gene-based tests or the interactiong testing feature. The conditioning variants will automatically be ignored from the analysis.

    Option Argument Type Description
    --condition-list FILE Required file with list of variants to condition on
    --condition-file FORMAT,FILE Optional get conditioning variants from external file (same argument format as --interaction-file)
    --condition-file-sample FILE Optional accompagnying sample file for BGEN format
    --max-condition-vars INT Optional maximum number of conditioning variants [default is 10,000]

    Survival analyses

    Starting from regenie v4.0, you can conduct survival analysis for time-to-event data.

    Phenotype file format

    In this small example, there are 5 samples, and the event of interest is the diagnosis of cancer over a period of 10 years.

    Survival_eg

    Sample 1 is diagnosed with cancer during the study; the time variable is the number of years until the sample is diagnosed with cancer. Sample 2 drops out of the study; sample 3 dies during the study; sample 4 and 5 complete the study without being diagnosed with cancer; they are all right-censored, and the time variable is the last encounter or death time. The corresponding phenotype file is

    FID IID Time Cancer
    1 1 6 1
    2 2 5 0
    3 3 2 0
    4 4 10 0
    5 5 10 0
    

    Required options

    Survival analysis in regenie requires the following specific options in step 1, step 2 and gene-based burden tests.

    Option Argument Type Description
    --t2e FLAG Required specify the traits are time-to-event data
    --phenoColList STRING Required Comma separated list of time names to include in the analysis
    --eventColList STRING Required Comma separated list of columns in the phenotype file to include in the analysis that contain the events. These event columns should have 0=no event,1=event,NA=missing

    For the example above, the regenie call is

    ./regenie \
    --t2e \
    --phenoColList Time \
    --eventColList Cancer \
    ...
    

    For a phenotype file containing multiple time-to-event traits, the order of censor variables listed in --eventColList should match the order of time names specified in --phenoColList. For example, the phenotype file is

    FID IID Cancer_Time Cancer Asthma_Time Asthma
    1 1 6 1 4 0
    2 2 5 0 8 1
    

    The regenie call is

    ./regenie \
    --t2e \
    --phenoColList Cancer_Time,Asthma_Time \
    --eventColList Cancer,Asthma \
    ...
    

    The output format is the same as the output file for quantitative and binary traits, with the BETA column containing the estimated harzard ratio (on log scale).

    LD computation

    REGENIE can calculate LD between a group of variants on the same chromosome.

    Option Argument Type Description
    --compute-corr FLAG Required compute LD matrix and write to binary file
    --output-corr-text FLAG Optional write Pearson correlations to text file
    --forcein-vars FLAG Optional retain all variants specified in --extract which absent from the genetic data in the LD matrix
    --ld-extract FILE Optional file listing single variants as well as burden masks to include in LD matrix (see below)

    Note that this can be quite memory intensive for large groups of variants (memory ~$8M^2$ bytes for $M$ variants).

    Output

    Using--step 2 --out file

    By default, the LD matrix is stored in a binary compressed file file.corr and the list of variants corresponding to the columns of the LD matrix are stored in file.corr.snplist. The R script scripts/parseLD.r contains a function which returns the LD matrix, e.g. get.corr.sq.matrix("file.corr"). Using --output-corr-text will write the Pearson correlations to a text file instead.

    When using --forcein-vars, variants not present in the genetic data will be added as extra column/rows in the LD matrix. For these variants, the diagonal entries in the matrix will be set to 1 and the off-diagonal entries 0.

    Using--ld-extract info.txt

    This option is used compute LD between single variants and burden masks generated on-the-fly in REGENIE; it requires specifying annotation files. The file info.txt should have three columns: variant type ('sv' or 'mask'), variant name, followed by the set (e.g. gene) name (this can be 'NA' for single variant). For example, it would look like:

    sv 1:1111:A:G NA 
    sv 1:2222:C:T NA 
    mask PCSK9.M1.0.01 PCSK9
    .
    

    Note that the set and mask names must match that used in REGENIE based on provided annotation files and allele frequency cutoffs. Variant/masks not present in the data will be kept in the LD matrix but will have the corresponding correlations set to 0.

    ================================================ FILE: docs/site/overview/index.html ================================================ Overview - regenie

    Overview

    This page provides an overview of the models and methods implemented in regenie. A full description is given in our paper.

    regenie carries out genome-wide association tests for both quantitative and binary (case-control) phenotypes. Starting at regenie v4.0, it also supports survival analysis for time-to-event data (See Survival analysis section below). It is designed to handle

    1. A large number of samples. For example, it is ideally suited to the UK Biobank dataset with 500,000 samples.
    2. A combination of genetic data from a micro-array, imputation and exome sequencing.
    3. A large number of either quantitative traits (QTs), binary (case-control) traits (BTs), or time-to-event traits (TTEs)
    4. Accounting for a set of covariates

    An overview of the regenie method is provided in the figure below. Essentially, regenie is run in 2 steps:

    1. In the first step a subset of genetic markers are used to fit a whole genome regression model that captures a good fraction of the phenotype variance attributable to genetic effects.
    2. In the second step, a larger set of genetic markers (e.g. imputed markers) are tested for association with the phenotype conditional upon the prediction from the regression model in Step 1, using a leave one chromosome out (LOCO) scheme, that avoids proximal contamination.

    Rflow

    Step 1 : Whole genome model

    In Step 1 a whole genome regression model is fit at a subset of the total set of available genetic markers. These are typically a set of several hundred thousand () common markers from a micro-array.

    Ridge regression (level 0)

    regenie reads in the markers in blocks of consecutive markers (--bsize option).

    In each block, a set of ridge regression predictors are calculated for a small range of shrinkage parameters (using --l0 option [default is 5]) .

    For a block of SNPs in a matrix and phenotype vector we calculate predictors

    where

    The idea behind using a range of shrinkage values is to capture the unknown number and size of truly associated genetic markers within each window. The ridge regression takes account of Linkage disequilibrium (LD) within each block.

    These predictors are stored in place of the genetic markers in matrix , providing a large reduction in data size. For example, if and and shrinkage parameters are used, then the reduced dataset will have predictors.

    Ridge regression is used in this step for both quantitative and binary traits.

    Cross-validation (level 1)

    The predictors generated by the ridge regression step will all be positively correlated with the phenotype. Thus, it is important to account for that correlation when building a whole genome wide regression model.

    When analyzing a quantitative trait we use a second level of ridge regression on the full set of predictors in . This approach is inspired by the method of stacked regressions1.

    We fit the ridge regression for a range of shrinkage parameters (--l1 option) and choose a single best value using K-fold cross validation scheme. This assesses the predictive performance of the model using held out sets of data, and aims to control any over-fitting induced by using the first level of ridge regression to derive the predictors.

    In other words, we fit the model

    where is estimated as and the parameter is chosen via K-fold cross-validation.

    For binary traits, we use a logistic ridge regression model to combine the predictors in

    where is the probability of being a case and captures the effects of non-genetic covariates.

    Genetic predictors and LOCO

    Once has been estimated we can construct the genetic prediction

    Also, since each column of the matrix will be associated with a chromosome we can can also construct a genetic prediction ignoring any one chromosome, by simply ignoring those columns when calculating the prediction. This is known as the Leave One Chromosome Out (LOCO) approach. These LOCO predictions are valuable at Step 2 of regenie when each marker is tested for associated (see below).

    For binary traits, it is the linear predictor in a logistic regression model using LOCO that is saved, and used as an offset when fitting logistic regression models to test for association.

    Multiple phenotypes

    The dimension reduction step using ridge regression can be used very efficiently to model multiple phenotypes at once. The ridge regression equations for a block of SNPs in a matrix and a single phenotype in a matrix take the form

    where does not depend on

    If instead phenotypes are stored in columns of a matrix , then the matrix can be applied jointly to calculate the matrix of estimates , and this can take advantage of parallel linear algebra implementations in the Eigen matrix library.

    Covariates

    Covariates, such as age and sex and batch effect variables can be included in the regenie model.

    For quantitative traits, any covariates are regressed out of phenotypes and genotypes before fitting the model.

    For binary traits, we fit a null model with only covariates, and use predictions from that model as an offset when fitting the logistic regression model.

    Step 2 : Single-variant association testing

    In Step 2, a larger set of markers are tested for association with the trait (or traits). As with Step 1, these markers are also read in blocks of markers, and tested for association. This avoids having to have all markers stored in memory at once.

    Quantitative traits

    For quantitative traits, we use a linear regression model for association testing.

    • Covariates are regressed out of the phenotypes and genetic markers.
    • The LOCO predictions from Step 1 are removed from the phenotypes.
    • Linear regression is then used to test association of the residualized phenotype and the genetic marker.
    • Parallel linear algebra operations in the Eigen library are used where possible.

    Binary traits

    For binary traits, logistic regression score test is used to test association of the phenotype and the genetic marker.

    The logistic regression model includes the LOCO predictions from Step 1 as an offset. Covariates are included in the linear predictor in the usual way.

    When the case-control ratio is imbalanced, standard association tests don't control Type I error well at rare genetic markers. regenie has two options to handle this

    Firth logistic regression

    Standard maximum likelihood estimates are generally biased. The Firth correction2 removes much of the bias, and results in better calibrated test statistics. The correction involves adding a penalty term to the log-likelihood,

    where the penalty term corresponds to the use of Jeffrey's Prior. This prior has the effect of shrinking the effect size towards zero.

    regenie uses a Firth correction when the p-value from the standard logistic regression test is below a threshold (default 0.05). It also includes a novel, accurate and fast approximate Firth correction which is ~60x faster than the exact Firth correction (see the option --firth).

    The p-value reported in regenie is based on a likelihood ratio test (LRT), and we use the Hessian of the log-likelihood without the penalty term to estimate the standard error (SE). This may cause an issue in meta-analyses with rare variants, as the effect size estimate and SE may not match with the LRT p-value. Hence, we added an option --firth-se to report a SE computed instead from the effect size estimate and the LRT p-value.

    Saddle point approxiation (SPA) test

    The SPA test approximates the null distribution of the test statistic by approximating the cumulant generating function of the test statistic, which involves all of the higher order moments3$^,$4. This provides a better estimation of the tail probabilities compared to using standard asymptotic theory which relies on the normal approximation and uses only the first two moments of the dsitribution. A tail probability is obtained as

    and is the cumulant generating function of the test statistic and is obtained by using a root-finding algorithm for . As this approximation has been found not to work very well for ultra-rare variants, a minimum minor allele count (MAC) is used to filter out these variants before testing (option --minMAC).

    Step 2 : Gene-based testing

    Instead of performing single-variant association tests, multiple variants can be aggregated in a given region, such as a gene, using the following model

    where 's represent the single variants included in the test, 's and 's are weights and effect sizes, respectively, for each variant, and is a link function for the phenotypic mean . We also denote by the score statistics obtained from the single-variant tests. This can be especially helpful when testing rare variants as single-variant tests usually have lower power performance.

    To avoid inflation in the gene-based tests due to rare variants as well as reduce computation time, we have implemented the collapsing approach proposed in SAIGE-GENE+5, where ultra-rare variants are aggregated into a mask. For highly imbalanced binary traits, SPA/Firth correction can be used to calibrate the test statistics in the gene-based tests as proposed in Zhao et al. (2020)6 using --firth/--spa.

    Burden tests

    Burden tests, as defined in Lee et al. (2014)7, assume , where is a fixed coefficient, which then leads to the test statistic These tests collapse variants into a single variable which is then tested for association with the phenotype. Hence, they are more powerful when variants have effects in the same direction and of similar magnitude. In regenie, multiple options are available to aggregate variants together into a burden mask beyond the linear combination above (see here). For example, the burden tests that were employed in Backman et al. (2021)8 use the default strategy in regenie of collapsing variants by taking the maximum number of rare alleles across the sites.

    Variance component tests

    Unlike burden tests, SKAT9 assume the effect sizes $\beta_i$ come from an arbitrary distribution with mean 0 and variance $\tau^2$ which leads to the test statistic Hence, SKAT can remain powerful when variant effects are in opposite directions.

    The omnibus test SKATO10 combines the SKAT and burden tests as So setting $\rho=0$ corresponds to SKAT and $\rho=1$ to the burden test. In practice, the parameter $\rho$ is chosen to maximize the power [regenie uses a default grid of 8 values {$0, 0.1^2, 0.2^2, 0.3^2, 0.4^2, 0.5^2, 0.5, 1$} and set the weights $w_i = Beta(MAF_i,1,25)$].

    To obtain the p-value from a linear combination of chi-squared variables, regenie uses Davies' exact method11 by default. Following Wu et al (2016)12, regenie uses Kuonen's saddlepoint approximation method13 when the Davies' p-value is below 1e-5 and if that fails, it uses Davies' method with more stringent convergence parameters (lim=1e5,acc=1e-9).

    The original SKATO method uses numerical integration when maximizing power across the various SKATO models that use different values for $\rho$. We also implement a modification of SKATO, named SKATO-ACAT, which instead uses the Cauchy combination method14 to combine the p-values from the different SKATO models.

    Cauchy combination tests

    The ACATV15 test uses the Cauchy combination method ACAT to combine single variant p-values $p_i$ as where we set $\widetilde{w}_i = w_i \sqrt{MAF(1-MAF)}$. This test is highly computationally tractable and is robust to correlation between the single variant tests.

    The omnibus test ACATO15 combines ACATV with the SKAT and burden tests as

    where unlike the original ACATO test, we only use one set of the weights $w_i$. Alternatively, we augment the test to include an extended set of SKATO models beyond SKAT and Burden (which correspond to $\rho$ of 0 and 1 in SKATO respectively) and use the default SKATO grid of 8 values for $\rho$.

    Sparse Burden Association Test

    regenie can generate burden masks which are obtained by aggregating single variants using various annotation classes as well as allele frequency thresholds. The Sparse Burden Association Test (SBAT)16 combines these burden masks in a joint model imposing constraints of same direction of effects where $M_i$ represent a burden mask and we solve

    The SBAT method tests the hypothesis $H_0: \gamma_i=0$ for all $i$ vs. $H_1: \gamma_i > 0$ for some $i$. By using this joint model, the SBAT test accounts for the correlation structure between the burden masks and with the non-negative constraints, it can lead to boost in power performance when multiple burden masks are causal and have concordant effects. This test has the nice property that it combines model selection of the masks (via the sparsity induced by the non-negative assumption) with model inference (it is well calibrated and powerful).

    GENE_P

    As the different gene-based tests in REGENIE can be more powerful under different genetic architectures, we propose a unified strategy, named GENE_P, that combines the strengths of these tests. It uses ACAT to combine the p-values of the SKATO, ACATV, Burden and SBAT tests and obtain an overall assessment of significance for a genetic region (e.g. gene). The diagram below illustrates the GENE_P test using 4 masks (i.e. combination of variant annotations) and 3 allele frequency cutoffs when performing gene-based tests.

    GENE_P_flow

    Step 2 : Interaction testing

    The GxE tests are of the form where $E$ is an environmental risk factor and $G$ is a marker of interest, and $\odot$ represents the Haddamard (entry-wise) product of the two. The last term in the model allows for the variant to have different effects across values of the risk factor. Note: if $E$ is categorical, we use a dummy variable for each level of $E$ in the model above.

    We can look at the following hypotheses:

    1. $H_0: \beta = 0$ given $\gamma = 0$, which is a marginal test for the SNP
    2. $H_0: \beta = 0$, which is a test for the main effect of the SNP in the full model
    3. $H_0: \gamma = 0$, which is a test for interaction
    4. $H_0: \beta = \gamma = 0$, which tests both main and interaction effects for the SNP

    Misspecification of the model above, such as in the presence of heteroskedasticity, or the presence of high case-control imbalance can lead to inflation in the tests. Robust (sandwich) standard error (SE) estimators17 can be used to adress model misspecification however, they can suffer from inflation when testing rare variants or in the presence of high case-control imbalance18$^,$19.

    In regenie, we use a hybrid approach which combines:

    • Wald test with sandwich estimators
    • Wald test with heteroskedastic linear models (for quantitative traits)
    • LRT with penalized Firth regression (for binary traits)

    For quantitative traits, we use the sandwich estimators HC3 to perform a Wald test for variants whose minor allele count (MAC) is above 1000 (see --rare-mac). For the remaining variants, we fit a heteroskedastic linear model (HLM)20

    where we assume $\epsilon \sim N(0, D)$ where $D$ is a diagonal matrix with entries $\sigma^2\exp{(1 + E\theta_1 + E^2\theta_2)}$. This formulation allows for the phenotypic variance to also depend on the risk factor $E$. By incorporating both the linear and quadratic effect of $E$ in the mean and variance of $Y$, this model provides robustness to heteroskedasticity (Note: the $E^2$ terms are only added when $E$ is quantitative). Wald tests are then performed for the null hypotheses listed above.

    For binary traits, we consider the following interaction model where we also include a non-linear effect for $E$ (not if categorical). The sandwich estimator HC3 is used in a Wald test for variants whose MAC is above 1000 (see --rare-mac) otherwise the model-based standard errors are used. When Firth is specified, we only apply the Firth correction using LRT if the p-value for the interaction term $\gamma$ from the Wald test is below a specified threshold (see --pThresh). So the added $E^2$ term as well as the use of the Firth penalty help with case-control imbalance and model misspecification for the effect of $E$ on the phenotype.

    Survival analysis

    Starting with regenie v4.0, we have enabled survival analysis, improving the power for analyzing common diseases where time-to-event data is available by leveraging the Cox Proportional Harzard model. We assume that samples without an event are right-censored, i.e. the survival time is only known to be greater than a certain value. It is important to encode this information correctly into the phenotypes.

    Step 1: Whole genome model using cox ridge regression

    In step 1, Level 0 is run using linear ridge regression with the time variable taken as the response. In Level 1, instead of linear/logistic ridge regression, we use Cox Ridge regression21 to combine the predictions $W$ from Level 0.

    where $\lambda_0(t)$ is the baseline hazard function, and, for the $i$-th individual, $\lambda_i(t)$ is the hazard function, $w_i$ is the set of ridge predictors from Level 0, and $\mu_i$ captures the effects of non-genetic covariates.

    We fit the cox ridge regression for a range of shrinkage parameters and select the best value using a K-fold cross validation scheme.

    With the estimated $\hat{\alpha}$, we construct LOCO predictions which capture population structure, relatedness and polygenicity.

    Step 2: Single variant and gene-based burden tests

    For time-to-event traits, the cox proportional hazard regression model is used to test the association between the phenotype and the genetic marker. Note: the only supported gene-based test is the burden test.

    The cox proportional hazard regression model includes the LOCO predictions from Step 1 as an offset.

    We test the null hypothesis $H_0: \beta = 0$ using a score test. When the event rate is low, the standard score test doesn't control Type I error well at rare genetic markers. To reduce the bias and achieve a more robust test, regenie uses Firth correction22 when the p-value from the standard score test is below a threshold (default 0.05).

    The firth correction provides a well-calibrated test, but comes with a computational cost. To mitigate this burden in Cox regression, we include a fast approximate test, which gives results very similar to the exact Firth test.

    Missing Phenotype data

    With QTs, missing values are mean-imputed in Step 1 and they are dropped when testing each phenotype in Step 2 (unless using --force-impute).

    With BTs, missing values are mean-imputed in Step 1 when fitting the level 0 linear ridge regression and they are dropped when fitting the level 1 logistic ridge regression for each trait. In Step 2, missing values are dropped when testing each trait.

    To remove all samples that have missing values at any of the phenotypes from the analysis, use option --strict in step 1 and 2. This can also be used when analyzing a single trait to only keep individuals with complete data by setting the phenotype values of individuals to remove to NA.

    Note: imputation is only applied to phenotypes; covariates are not allowed to have missing data.

    References


    1. Breiman, L. Stacked regressions. Machine learning 24, 49–64 (1996). 

    2. Firth, D. Bias reduction of maximum likelihood estimates. Biometrika 80, 27–38 (1993). 

    3. Butler, R. W. Saddlepoint approximations with applications. (Cambridge University Press, 2007). 

    4. Dey, R., Schmidt, E. M., Abecasis, G. R. & Lee, S. A fast and accurate algorithm to test for binary phenotypes and its application to PheWAS. The American Journal of Human Genetics 101, 37–49 (2017). 

    5. Zhou, W. et al. Set-based rare variant association tests for biobank scale sequencing data sets. medRxiv (2021). 

    6. Zhao, Z. et al. UK biobank whole-exome sequence binary phenome analysis with robust region-based rare-variant test. Am J Hum Genet 106, 3–12 (2020). 

    7. Lee, S., Abecasis, G. R., Boehnke, M. & Lin, X. Rare-variant association analysis: Study designs and statistical tests. Am J Hum Genet 95, 5–23 (2014). 

    8. Backman, J. D. et al. Exome sequencing and analysis of 454,787 UK biobank participants. Nature 599, 628–634 (2021). 

    9. Wu, M. C. et al. Rare-variant association testing for sequencing data with the sequence kernel association test. Am J Hum Genet 89, 82–93 (2011). 

    10. Lee, S., Wu, M. C. & Lin, X. Optimal tests for rare variant effects in sequencing association studies. Biostatistics 13, 762–75 (2012). 

    11. Davies, R. B. Algorithm AS 155: The distribution of a linear combination of χ 2 random variables. Applied Statistics 29, 323–333 (1980). 

    12. Wu, B., Guan, W. & Pankow, J. S. On efficient and accurate calculation of significance p-values for sequence kernel association testing of variant set. Ann Hum Genet 80, 123–35 (2016). 

    13. Kuonen, D. Miscellanea. Saddlepoint approximations for distributions of quadratic forms in normal variables. Biometrika 86, 929–935 (1999). 

    14. Liu, Y. & Xie, J. Cauchy combination test: A powerful test with analytic p-value calculation under arbitrary dependency structures. J Am Stat Assoc 115, 393–402 (2020). 

    15. Liu, Y. et al. ACAT: A fast and powerful p value combination method for rare-variant analysis in sequencing studies. Am J Hum Genet 104, 410–421 (2019). 

    16. Ziyatdinov, A. et al. Joint testing of rare variant burden scores using non-negative least squares. The American Journal of Human Genetics 111, 2139–2149 (2024). 

    17. MacKinnon, J. G. & White, H. Some heteroskedasticity-consistent covariance matrix estimators with improved finite sample properties. Journal of Econometrics 29, 305–325 (1985). 

    18. Tchetgen Tchetgen, E. J. & Kraft, P. On the robustness of tests of genetic associations incorporating gene-environment interaction when the environmental exposure is misspecified. Epidemiology 22, 257–61 (2011). 

    19. Voorman, A., Lumley, T., McKnight, B. & Rice, K. Behavior of QQ-plots and genomic control in studies of gene-environment interaction. PLoS One 6, (2011). 

    20. Young, A. I., Wauthier, F. L. & Donnelly, P. Identifying loci affecting trait variability and detecting interactions in genome-wide association studies. Nat Genet 50, 1608–1614 (2018). 

    21. Simon, N., Friedman, J. H., Hastie, T. & Tibshirani, R. Regularization paths for cox’s proportional hazards model via coordinate descent. Journal of statistical software 39, 1–13 (2011). 

    22. Heinze, G. & Schemper, M. A solution to the problem of monotone likelihood in cox regression. Biometrics 57, 114–119 (2001). 

    ================================================ FILE: docs/site/performance/index.html ================================================ Performance - regenie

    Performance

    We assessed the performance of regenie against 3 other programs for GWAS on large cohorts.

    1. BOLT-LMM Loh et al. (2015) Nature Genetics 47, 284–290 [Software]
    2. SAIGE - Zhou et al. (2018) Nature Genetics 50, 1335–1341[Software]
    3. fastGWA - Jiang et al. (2019) Nature Genetics 51, 1749–1755 [Software]

    Full details for all the runs are available in our paper.

    Quantitative traits

    We ran regenie, BOLT-LMM and fastGWA on 3 quantitative phenotypes measured on white British UK Biobank participants (LDL, N=389,189; Body mass index [BMI], N=407,609; and Bilirubin, N=388,303) where testing was performed on 9.8 million imputed SNPs.

    The Manhattan plots for all three phenotypes (see below) show good agreement between the methods with both regenie and BOLT-LMM resulting in stronger association signals relative to fastGWA at known peaks of association (note that in the plots, the scaling of the y-axis changes above the upper dashed line).

    QTmanP

    We assessed the computational requirements of all three methods using a larger set of 50 quantitative traits from the UK Biobank, looking at computational timings as well as memory usage. For regenie and BOLT LMM, 469,336 LD-pruned SNPs were used as model SNPs when fitting the null model (step 1) and for fastGWA, these SNPs were used to compute the sparse GRM (timing not included). Tests were performed on 11.4M imputed SNPs (step 2).

    QTtime

    From the table above, regenie was 151x faster than BOLT-LMM in elapsed time for Step 1 and 11.5x faster for Step 2, which translated into $>$30x overall speed-up in terms of elapsed time. In addition, regenie had a maximum memory usage of 12.9 GB, which is mostly due to regenie only reading a small portion of the genotype data at a time, whereas BOLT-LMM required 50GB. regenie was 2.8x faster than fastGWA, but fastGWA is very memory efficient and used only a maximum of 2GB.

    Binary traits

    regenie was compared to BOLT-LMM and SAIGE on a set of four binary traits measured on white British UK Biobank participants (coronary artery disease [CAD], N=352,063, case-control ratio=1:11; glaucoma, N=406,927, case-control ratio=1:52; colorectal cancer, N=407,746, case-control ratio=1:97; and thyroid cancer, N=407,746, case-control ratio=1:660) and Step 2 testing was performed on 11.6 million imputed SNPs. A novel and fast approximate Firth correction was used in regenie as well as a SPA correction.

    As seen in the Manhattan plots below (note that the scaling of the y-axis changes above the upper dashed line), all four approaches show very good agreement for the most balanced trait (CAD; case-control ratio=1:11), but as the fraction of cases decreases BOLT-LMM tends to give inflated test statistics. However both regenie with Firth and SPA corrections, as well as SAIGE, which uses SPA correction, are all robust to this inflation and show similar agreement for the associations detected.

    BTmanP

    We assessed the computational requirements of regenie and SAIGE using a larger set of 50 binary traits from the UK Biobank that have a range of different case-control ratios and distinct missing data patterns. 469,336 LD-pruned SNPs were used as model SNPs when fitting the null model (step 1) and tests were performed on 11.4M imputed SNPs (step 2). In step 1, regenie was run using LOOCV and for two traits SAIGE did not finish as it took longer than the 4-week limit. In step 2, the approximate Firth correction was used in regenie in addition to SPA correction.

    BTtime

    From the table above, Step 1 of regenie was about 350x faster and required only $40\%$ of the memory used by SAIGE. In Step 2, regenie Firth and SPA were 2x and 3x faster than SAIGE in CPU time, respectively, but were 21x and 34x faster than SAIGE in elapsed time, respectively, which suggests that regenie makes better use of parallelization in this step. Overall, regenie using Firth correction was 8x faster than SAIGE in CPU hours and 26.8x faster in elapsed time.

    All runs above were done on the same computing environment (16 virtual CPU cores of a 2.1GHz AMD EPYC 7571 processor, 64GB of memory, and 600GB solid-state disk).

    Timings improvements in v2.2

    We have several changes in regenie v2.2 to improve the computational efficiency:

    • The genotype file reading in Step 1 is now multi-threaded for all supported formats (i.e. BED, PGEN, and BGEN) and uses a faster file reading implementation for BGEN v1.2 format with 8-bit encoding. From our timings experiments below, these changes helped reduce the CPU time by 40-60% depending on the input format.

    Step1time

    Note that we used a small number of SNPs for Step 1 in our experiments (20K) so the timing improvement will not be as high in a real Step 1 run where ~500K SNPs would be used.

    • We have improved the implementation of the score tests for binary traits to reduce the number of matrix operations performed and this reduced the CPU timings by ~60% from the previous version 2.0.2.

    Step2time Note that there is an added memory cost of ~8NKP bytes [N=#samples; K=#covariates;P=#samples] so ~800MB extra for a UKB 500K run with 10 traits & 20 covariates.

    • We have also made use of the sparsity of the genotype vector for rarer variants in Step 2 (more so with binary traits) and this reduced the timing in our experiments by ~20% on average.

    Step2SparseTime

    In our experiments, common variants are defined as having MAF > 5% and rare variants are defined as having MAF < 1% and no correction (i.e. Firth/SPA) is used.

    • We have added new options --write-null-firth and --use-null-firth to reduce the timing of Step 2 with approximate Firth when ran in parallel jobs split in smaller chunks within chromosomes. More specifically, --write-null-firth can be used in Step 1 to fit the null model for approximate Firth test and store the resulting estimates to file. Then in Step 2, specifying --use-null-firth will re-use these parameter estimates to reduce the timing of the approximate Firth null model fitting. We thank Juha Karjalainen for suggesting this feature.

    Note: in our timings experiments, the PGEN genotype file only includes hard-calls. We ran a single trait in regenie and each setting was replicated 5 times.

    Gene-based testing

    regenie v3.0 adds in a wide range of gene-based tests. We have performed simulation experiments to assess the calibration of the tests with quantitative and binary traits using real genetic data from the UK Biobank where we randomly selected 100,000 samples obtained from the set of white British participants (see the "Methods" section of the Regenie paper for details on phenotype simulation where we set the heritability to 20%).

    Using whole exome sequencing data, we constructed variant sets incorporating functional annotations (LoF and missense, where missense vairants were predicted as deleterious using a score based on 5 in-silico algorithms), as well as allele frequency thresholds focusing on rarer variation (1%, 0.1% and 0.01%). The SKAT/ACAT tests were applied only to variant sets using a 1% or 0.01% AAF threshold and SBAT and BURDEN-ACAT joint tests combined all burden mask signals from the 1%, 0.1%, 0.01% and singleton thresholds. 1000 genes on even chromosomes were randonly selected and tested for association (causal variants were on odd chromosomes). The QQ plots below show the distribution p-values for each test across the different annotation categories (ran in Regenie v3.2).

    Quantitative traits

    Using a 1% allele frequency cutoff for the SKAT/ACAT tests. QT_gene

    Binary traits

    We simulated highly imbalanced phenotypes with a disease prevalence of 1% (case-control ratio of 1:99) and applied Firth/SPA correction to the tests.

    Using a 1% allele frequency cutoff for the SKAT/ACAT tests. BT_gene1

    Using a 0.01% allele frequency cutoff for the SKAT/ACAT tests. BT_gene_001

    ================================================ FILE: docs/site/recommendations/index.html ================================================ UKBB Analysis - regenie

    Recommendations for UK Biobank analysis

    regenie is ideally suited for large-scale analyses such as 500K UK Biobank (UKBB) data, where records are available for thousands of phenotypes.

    We provide below a few guidelines on how to perform such analysis on the UKBB files that all UKBB approved researchers have access to.

    Pre-processing

    We will first go over important steps to consider before running regenie.

    Selection of traits

    regenie can perform whole genome regression on multiple traits at once, which is where higher computational gains are obtained.

    As different traits can have distinct missing patterns, regenie uses an imputation scheme to handle missing data. From the real data applications we have performed so far with traits having up to ~20% (for quantitative) and ~5% (for binary) missing observations, our imputation scheme resulted in nearly identical results as from discarding missing observations when analyzing each trait separately (see the paper for details). Hence, we recommend to analyze traits in groups that have similar missingness patterns with resonably low amount of missingness (<15%).

    The number of phenotypes in a group will affect the computational resources required and the table below shows typical computational requirements based on using 500,000 markers in step 1 split in blocks of 1000 and using blocks of size 200 when testing SNPs in step 2. The estimates are shown when step 1 of regenie is run in low-memory mode so that within-block predictions are temporarily stored on disk (see Documentation).

    Rflow

    In the following sections, we'll assume traits (let's say binary) and covariates used in the analysis have been chosen and data are in files ukb_phenotypes_BT.txt and ukb_covariates.txt, which follow the format requirement for regenie (see Documentation).

    Preparing genotype file

    Step 1 of a regenie run requires a single genotype file as input; we recommend using array genotypes for this step. The UKBB genotype files are split by chromosome, so we recommend using PLINK to merge the files using the following code.

    NOTE: please change XXX to you own UKBB application ID number

    rm -f list_beds.txt
    for chr in {2..22}; do echo "ukb_cal_chr${chr}_v2.bed ukb_snp_chr${chr}_v2.bim ukbXXX_int_chr1_v2_s488373.fam" >> list_beds.txt; done
    
    plink \
      --bed ukb_cal_chr1_v2.bed \
      --bim ukb_snp_chr1_v2.bim \
      --fam ukbXXX_int_chr1_v2_s488373.fam \
      --merge-list list_beds.txt \
      --make-bed --out ukb_cal_allChrs
    

    Exclusion files

    Quality control (QC) filters can be applied using PLINK2 to filter out samples and markers in the genotype file prior to step 1 of regenie.

    Note: regenie will throw an error if a low-variance SNP is included in the step 1 run. Hence, the user should run adequate QC filtering prior to running regenie to identify and remove such SNPs.

    For example, to filter out SNPs with minor allele frequency (MAF) below 1%, minor allele count (MAC) below 100, genotype missingess above 10% and Hardy-Weinberg equilibrium p-value exceeding , and samples with more than 10% missingness,

    plink2 \
      --bfile ukb_cal_allChrs \
      --maf 0.01 --mac 100 --geno 0.1 --hwe 1e-15 \
      --mind 0.1 \
      --write-snplist --write-samples --no-id-header \
      --out qc_pass
    

    Step 1

    We recommend to run regenie using multi-threading (8+ threads) which will decrease the overall runtime of the program. As this step can be quite memory intensive (due to storing block predictions), we recommend to use option --lowmem, where the number of phenotypes analyzed will determine how much disk space is required (see table above).

    Running step 1 of regenie (by default, all available threads are used)

    ./regenie \
      --step 1 \
      --bed ukb_cal_allChrs \
      --extract qc_pass.snplist \
      --keep qc_pass.id \
      --phenoFile ukb_phenotypes_BT.txt \
      --covarFile ukb_covariates.txt \
      --bt \
      --bsize 1000 \
      --lowmem \
      --lowmem-prefix tmpdir/regenie_tmp_preds \
      --out ukb_step1_BT
    

    For P phenotypes analyzed, this will generate a set of $P$ files ending with .loco which contain the genetic predictions using a LOCO scheme that will be needed for step 2, as well as a prediction list file ukb_step1_BT_pred.list, which lists the names of these predictions files and can be used as input for step 2.

    Step 2

    As step 1 and 2 are completely decoupled in regenie, you could either use all the traits for testing in step 2 or select a subset of the traits to perform association testing. Furthermore, you can use the same Step 1 output to test on array, exome or imputed variants; below, we will illustrate testing on imputed variants.

    Step 2 of regenie can be run in parallel across chromosomes so if you have access to multiple machines, we recommend to split the runs over chromosomes (using 8+ threads).

    Running regenie tesing on a single chromosome (here chromosome 1) and using the fast Firth correction as fallback for p-values below 0.01

    ./regenie \
      --step 2 \
      --bgen ukb_imp_chr1_v3.bgen \
      --ref-first \
      --sample ukbXXX_imp_chr1_v3_s487395.sample \
      --phenoFile ukb_phenotypes_BT.txt \
      --covarFile ukb_covariates.txt \
      --bt \
      --firth --approx --pThresh 0.01 \
      --pred ukb_step1_BT_pred.list \
      --bsize 400 \
      --split \
      --out ukb_step2_BT_chr1
    
    

    This will create separate association results files for each phenotype as ukb_step2_BT_chr1_*.regenie.

    When running the SKAT/ACAT gene-based tests, we recommend to use at most 2 threads and instead parallelize the runs over partitions of the genome (e.g. groups of genes).

    ================================================ FILE: docs/site/search/lunr.js ================================================ /** * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 * Copyright (C) 2020 Oliver Nightingale * @license MIT */ ;(function(){ /** * A convenience function for configuring and constructing * a new lunr Index. * * A lunr.Builder instance is created and the pipeline setup * with a trimmer, stop word filter and stemmer. * * This builder object is yielded to the configuration function * that is passed as a parameter, allowing the list of fields * and other builder parameters to be customised. * * All documents _must_ be added within the passed config function. * * @example * var idx = lunr(function () { * this.field('title') * this.field('body') * this.ref('id') * * documents.forEach(function (doc) { * this.add(doc) * }, this) * }) * * @see {@link lunr.Builder} * @see {@link lunr.Pipeline} * @see {@link lunr.trimmer} * @see {@link lunr.stopWordFilter} * @see {@link lunr.stemmer} * @namespace {function} lunr */ var lunr = function (config) { var builder = new lunr.Builder builder.pipeline.add( lunr.trimmer, lunr.stopWordFilter, lunr.stemmer ) builder.searchPipeline.add( lunr.stemmer ) config.call(builder, builder) return builder.build() } lunr.version = "2.3.9" /*! * lunr.utils * Copyright (C) 2020 Oliver Nightingale */ /** * A namespace containing utils for the rest of the lunr library * @namespace lunr.utils */ lunr.utils = {} /** * Print a warning message to the console. * * @param {String} message The message to be printed. * @memberOf lunr.utils * @function */ lunr.utils.warn = (function (global) { /* eslint-disable no-console */ return function (message) { if (global.console && console.warn) { console.warn(message) } } /* eslint-enable no-console */ })(this) /** * Convert an object to a string. * * In the case of `null` and `undefined` the function returns * the empty string, in all other cases the result of calling * `toString` on the passed object is returned. * * @param {Any} obj The object to convert to a string. * @return {String} string representation of the passed object. * @memberOf lunr.utils */ lunr.utils.asString = function (obj) { if (obj === void 0 || obj === null) { return "" } else { return obj.toString() } } /** * Clones an object. * * Will create a copy of an existing object such that any mutations * on the copy cannot affect the original. * * Only shallow objects are supported, passing a nested object to this * function will cause a TypeError. * * Objects with primitives, and arrays of primitives are supported. * * @param {Object} obj The object to clone. * @return {Object} a clone of the passed object. * @throws {TypeError} when a nested object is passed. * @memberOf Utils */ lunr.utils.clone = function (obj) { if (obj === null || obj === undefined) { return obj } var clone = Object.create(null), keys = Object.keys(obj) for (var i = 0; i < keys.length; i++) { var key = keys[i], val = obj[key] if (Array.isArray(val)) { clone[key] = val.slice() continue } if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') { clone[key] = val continue } throw new TypeError("clone is not deep and does not support nested objects") } return clone } lunr.FieldRef = function (docRef, fieldName, stringValue) { this.docRef = docRef this.fieldName = fieldName this._stringValue = stringValue } lunr.FieldRef.joiner = "/" lunr.FieldRef.fromString = function (s) { var n = s.indexOf(lunr.FieldRef.joiner) if (n === -1) { throw "malformed field ref string" } var fieldRef = s.slice(0, n), docRef = s.slice(n + 1) return new lunr.FieldRef (docRef, fieldRef, s) } lunr.FieldRef.prototype.toString = function () { if (this._stringValue == undefined) { this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef } return this._stringValue } /*! * lunr.Set * Copyright (C) 2020 Oliver Nightingale */ /** * A lunr set. * * @constructor */ lunr.Set = function (elements) { this.elements = Object.create(null) if (elements) { this.length = elements.length for (var i = 0; i < this.length; i++) { this.elements[elements[i]] = true } } else { this.length = 0 } } /** * A complete set that contains all elements. * * @static * @readonly * @type {lunr.Set} */ lunr.Set.complete = { intersect: function (other) { return other }, union: function () { return this }, contains: function () { return true } } /** * An empty set that contains no elements. * * @static * @readonly * @type {lunr.Set} */ lunr.Set.empty = { intersect: function () { return this }, union: function (other) { return other }, contains: function () { return false } } /** * Returns true if this set contains the specified object. * * @param {object} object - Object whose presence in this set is to be tested. * @returns {boolean} - True if this set contains the specified object. */ lunr.Set.prototype.contains = function (object) { return !!this.elements[object] } /** * Returns a new set containing only the elements that are present in both * this set and the specified set. * * @param {lunr.Set} other - set to intersect with this set. * @returns {lunr.Set} a new set that is the intersection of this and the specified set. */ lunr.Set.prototype.intersect = function (other) { var a, b, elements, intersection = [] if (other === lunr.Set.complete) { return this } if (other === lunr.Set.empty) { return other } if (this.length < other.length) { a = this b = other } else { a = other b = this } elements = Object.keys(a.elements) for (var i = 0; i < elements.length; i++) { var element = elements[i] if (element in b.elements) { intersection.push(element) } } return new lunr.Set (intersection) } /** * Returns a new set combining the elements of this and the specified set. * * @param {lunr.Set} other - set to union with this set. * @return {lunr.Set} a new set that is the union of this and the specified set. */ lunr.Set.prototype.union = function (other) { if (other === lunr.Set.complete) { return lunr.Set.complete } if (other === lunr.Set.empty) { return this } return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) } /** * A function to calculate the inverse document frequency for * a posting. This is shared between the builder and the index * * @private * @param {object} posting - The posting for a given term * @param {number} documentCount - The total number of documents. */ lunr.idf = function (posting, documentCount) { var documentsWithTerm = 0 for (var fieldName in posting) { if (fieldName == '_index') continue // Ignore the term index, its not a field documentsWithTerm += Object.keys(posting[fieldName]).length } var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) return Math.log(1 + Math.abs(x)) } /** * A token wraps a string representation of a token * as it is passed through the text processing pipeline. * * @constructor * @param {string} [str=''] - The string token being wrapped. * @param {object} [metadata={}] - Metadata associated with this token. */ lunr.Token = function (str, metadata) { this.str = str || "" this.metadata = metadata || {} } /** * Returns the token string that is being wrapped by this object. * * @returns {string} */ lunr.Token.prototype.toString = function () { return this.str } /** * A token update function is used when updating or optionally * when cloning a token. * * @callback lunr.Token~updateFunction * @param {string} str - The string representation of the token. * @param {Object} metadata - All metadata associated with this token. */ /** * Applies the given function to the wrapped string token. * * @example * token.update(function (str, metadata) { * return str.toUpperCase() * }) * * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. * @returns {lunr.Token} */ lunr.Token.prototype.update = function (fn) { this.str = fn(this.str, this.metadata) return this } /** * Creates a clone of this token. Optionally a function can be * applied to the cloned token. * * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. * @returns {lunr.Token} */ lunr.Token.prototype.clone = function (fn) { fn = fn || function (s) { return s } return new lunr.Token (fn(this.str, this.metadata), this.metadata) } /*! * lunr.tokenizer * Copyright (C) 2020 Oliver Nightingale */ /** * A function for splitting a string into tokens ready to be inserted into * the search index. Uses `lunr.tokenizer.separator` to split strings, change * the value of this property to change how strings are split into tokens. * * This tokenizer will convert its parameter to a string by calling `toString` and * then will split this string on the character in `lunr.tokenizer.separator`. * Arrays will have their elements converted to strings and wrapped in a lunr.Token. * * Optional metadata can be passed to the tokenizer, this metadata will be cloned and * added as metadata to every token that is created from the object to be tokenized. * * @static * @param {?(string|object|object[])} obj - The object to convert into tokens * @param {?object} metadata - Optional metadata to associate with every token * @returns {lunr.Token[]} * @see {@link lunr.Pipeline} */ lunr.tokenizer = function (obj, metadata) { if (obj == null || obj == undefined) { return [] } if (Array.isArray(obj)) { return obj.map(function (t) { return new lunr.Token( lunr.utils.asString(t).toLowerCase(), lunr.utils.clone(metadata) ) }) } var str = obj.toString().toLowerCase(), len = str.length, tokens = [] for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { var char = str.charAt(sliceEnd), sliceLength = sliceEnd - sliceStart if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { if (sliceLength > 0) { var tokenMetadata = lunr.utils.clone(metadata) || {} tokenMetadata["position"] = [sliceStart, sliceLength] tokenMetadata["index"] = tokens.length tokens.push( new lunr.Token ( str.slice(sliceStart, sliceEnd), tokenMetadata ) ) } sliceStart = sliceEnd + 1 } } return tokens } /** * The separator used to split a string into tokens. Override this property to change the behaviour of * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. * * @static * @see lunr.tokenizer */ lunr.tokenizer.separator = /[\s\-]+/ /*! * lunr.Pipeline * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.Pipelines maintain an ordered list of functions to be applied to all * tokens in documents entering the search index and queries being ran against * the index. * * An instance of lunr.Index created with the lunr shortcut will contain a * pipeline with a stop word filter and an English language stemmer. Extra * functions can be added before or after either of these functions or these * default functions can be removed. * * When run the pipeline will call each function in turn, passing a token, the * index of that token in the original list of all tokens and finally a list of * all the original tokens. * * The output of functions in the pipeline will be passed to the next function * in the pipeline. To exclude a token from entering the index the function * should return undefined, the rest of the pipeline will not be called with * this token. * * For serialisation of pipelines to work, all functions used in an instance of * a pipeline should be registered with lunr.Pipeline. Registered functions can * then be loaded. If trying to load a serialised pipeline that uses functions * that are not registered an error will be thrown. * * If not planning on serialising the pipeline then registering pipeline functions * is not necessary. * * @constructor */ lunr.Pipeline = function () { this._stack = [] } lunr.Pipeline.registeredFunctions = Object.create(null) /** * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token * string as well as all known metadata. A pipeline function can mutate the token string * or mutate (or add) metadata for a given token. * * A pipeline function can indicate that the passed token should be discarded by returning * null, undefined or an empty string. This token will not be passed to any downstream pipeline * functions and will not be added to the index. * * Multiple tokens can be returned by returning an array of tokens. Each token will be passed * to any downstream pipeline functions and all will returned tokens will be added to the index. * * Any number of pipeline functions may be chained together using a lunr.Pipeline. * * @interface lunr.PipelineFunction * @param {lunr.Token} token - A token from the document being processed. * @param {number} i - The index of this token in the complete list of tokens for this document/field. * @param {lunr.Token[]} tokens - All tokens for this document/field. * @returns {(?lunr.Token|lunr.Token[])} */ /** * Register a function with the pipeline. * * Functions that are used in the pipeline should be registered if the pipeline * needs to be serialised, or a serialised pipeline needs to be loaded. * * Registering a function does not add it to a pipeline, functions must still be * added to instances of the pipeline for them to be used when running a pipeline. * * @param {lunr.PipelineFunction} fn - The function to check for. * @param {String} label - The label to register this function with */ lunr.Pipeline.registerFunction = function (fn, label) { if (label in this.registeredFunctions) { lunr.utils.warn('Overwriting existing registered function: ' + label) } fn.label = label lunr.Pipeline.registeredFunctions[fn.label] = fn } /** * Warns if the function is not registered as a Pipeline function. * * @param {lunr.PipelineFunction} fn - The function to check for. * @private */ lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { var isRegistered = fn.label && (fn.label in this.registeredFunctions) if (!isRegistered) { lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) } } /** * Loads a previously serialised pipeline. * * All functions to be loaded must already be registered with lunr.Pipeline. * If any function from the serialised data has not been registered then an * error will be thrown. * * @param {Object} serialised - The serialised pipeline to load. * @returns {lunr.Pipeline} */ lunr.Pipeline.load = function (serialised) { var pipeline = new lunr.Pipeline serialised.forEach(function (fnName) { var fn = lunr.Pipeline.registeredFunctions[fnName] if (fn) { pipeline.add(fn) } else { throw new Error('Cannot load unregistered function: ' + fnName) } }) return pipeline } /** * Adds new functions to the end of the pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. */ lunr.Pipeline.prototype.add = function () { var fns = Array.prototype.slice.call(arguments) fns.forEach(function (fn) { lunr.Pipeline.warnIfFunctionNotRegistered(fn) this._stack.push(fn) }, this) } /** * Adds a single function after a function that already exists in the * pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. */ lunr.Pipeline.prototype.after = function (existingFn, newFn) { lunr.Pipeline.warnIfFunctionNotRegistered(newFn) var pos = this._stack.indexOf(existingFn) if (pos == -1) { throw new Error('Cannot find existingFn') } pos = pos + 1 this._stack.splice(pos, 0, newFn) } /** * Adds a single function before a function that already exists in the * pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. */ lunr.Pipeline.prototype.before = function (existingFn, newFn) { lunr.Pipeline.warnIfFunctionNotRegistered(newFn) var pos = this._stack.indexOf(existingFn) if (pos == -1) { throw new Error('Cannot find existingFn') } this._stack.splice(pos, 0, newFn) } /** * Removes a function from the pipeline. * * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. */ lunr.Pipeline.prototype.remove = function (fn) { var pos = this._stack.indexOf(fn) if (pos == -1) { return } this._stack.splice(pos, 1) } /** * Runs the current list of functions that make up the pipeline against the * passed tokens. * * @param {Array} tokens The tokens to run through the pipeline. * @returns {Array} */ lunr.Pipeline.prototype.run = function (tokens) { var stackLength = this._stack.length for (var i = 0; i < stackLength; i++) { var fn = this._stack[i] var memo = [] for (var j = 0; j < tokens.length; j++) { var result = fn(tokens[j], j, tokens) if (result === null || result === void 0 || result === '') continue if (Array.isArray(result)) { for (var k = 0; k < result.length; k++) { memo.push(result[k]) } } else { memo.push(result) } } tokens = memo } return tokens } /** * Convenience method for passing a string through a pipeline and getting * strings out. This method takes care of wrapping the passed string in a * token and mapping the resulting tokens back to strings. * * @param {string} str - The string to pass through the pipeline. * @param {?object} metadata - Optional metadata to associate with the token * passed to the pipeline. * @returns {string[]} */ lunr.Pipeline.prototype.runString = function (str, metadata) { var token = new lunr.Token (str, metadata) return this.run([token]).map(function (t) { return t.toString() }) } /** * Resets the pipeline by removing any existing processors. * */ lunr.Pipeline.prototype.reset = function () { this._stack = [] } /** * Returns a representation of the pipeline ready for serialisation. * * Logs a warning if the function has not been registered. * * @returns {Array} */ lunr.Pipeline.prototype.toJSON = function () { return this._stack.map(function (fn) { lunr.Pipeline.warnIfFunctionNotRegistered(fn) return fn.label }) } /*! * lunr.Vector * Copyright (C) 2020 Oliver Nightingale */ /** * A vector is used to construct the vector space of documents and queries. These * vectors support operations to determine the similarity between two documents or * a document and a query. * * Normally no parameters are required for initializing a vector, but in the case of * loading a previously dumped vector the raw elements can be provided to the constructor. * * For performance reasons vectors are implemented with a flat array, where an elements * index is immediately followed by its value. E.g. [index, value, index, value]. This * allows the underlying array to be as sparse as possible and still offer decent * performance when being used for vector calculations. * * @constructor * @param {Number[]} [elements] - The flat list of element index and element value pairs. */ lunr.Vector = function (elements) { this._magnitude = 0 this.elements = elements || [] } /** * Calculates the position within the vector to insert a given index. * * This is used internally by insert and upsert. If there are duplicate indexes then * the position is returned as if the value for that index were to be updated, but it * is the callers responsibility to check whether there is a duplicate at that index * * @param {Number} insertIdx - The index at which the element should be inserted. * @returns {Number} */ lunr.Vector.prototype.positionForIndex = function (index) { // For an empty vector the tuple can be inserted at the beginning if (this.elements.length == 0) { return 0 } var start = 0, end = this.elements.length / 2, sliceLength = end - start, pivotPoint = Math.floor(sliceLength / 2), pivotIndex = this.elements[pivotPoint * 2] while (sliceLength > 1) { if (pivotIndex < index) { start = pivotPoint } if (pivotIndex > index) { end = pivotPoint } if (pivotIndex == index) { break } sliceLength = end - start pivotPoint = start + Math.floor(sliceLength / 2) pivotIndex = this.elements[pivotPoint * 2] } if (pivotIndex == index) { return pivotPoint * 2 } if (pivotIndex > index) { return pivotPoint * 2 } if (pivotIndex < index) { return (pivotPoint + 1) * 2 } } /** * Inserts an element at an index within the vector. * * Does not allow duplicates, will throw an error if there is already an entry * for this index. * * @param {Number} insertIdx - The index at which the element should be inserted. * @param {Number} val - The value to be inserted into the vector. */ lunr.Vector.prototype.insert = function (insertIdx, val) { this.upsert(insertIdx, val, function () { throw "duplicate index" }) } /** * Inserts or updates an existing index within the vector. * * @param {Number} insertIdx - The index at which the element should be inserted. * @param {Number} val - The value to be inserted into the vector. * @param {function} fn - A function that is called for updates, the existing value and the * requested value are passed as arguments */ lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { this._magnitude = 0 var position = this.positionForIndex(insertIdx) if (this.elements[position] == insertIdx) { this.elements[position + 1] = fn(this.elements[position + 1], val) } else { this.elements.splice(position, 0, insertIdx, val) } } /** * Calculates the magnitude of this vector. * * @returns {Number} */ lunr.Vector.prototype.magnitude = function () { if (this._magnitude) return this._magnitude var sumOfSquares = 0, elementsLength = this.elements.length for (var i = 1; i < elementsLength; i += 2) { var val = this.elements[i] sumOfSquares += val * val } return this._magnitude = Math.sqrt(sumOfSquares) } /** * Calculates the dot product of this vector and another vector. * * @param {lunr.Vector} otherVector - The vector to compute the dot product with. * @returns {Number} */ lunr.Vector.prototype.dot = function (otherVector) { var dotProduct = 0, a = this.elements, b = otherVector.elements, aLen = a.length, bLen = b.length, aVal = 0, bVal = 0, i = 0, j = 0 while (i < aLen && j < bLen) { aVal = a[i], bVal = b[j] if (aVal < bVal) { i += 2 } else if (aVal > bVal) { j += 2 } else if (aVal == bVal) { dotProduct += a[i + 1] * b[j + 1] i += 2 j += 2 } } return dotProduct } /** * Calculates the similarity between this vector and another vector. * * @param {lunr.Vector} otherVector - The other vector to calculate the * similarity with. * @returns {Number} */ lunr.Vector.prototype.similarity = function (otherVector) { return this.dot(otherVector) / this.magnitude() || 0 } /** * Converts the vector to an array of the elements within the vector. * * @returns {Number[]} */ lunr.Vector.prototype.toArray = function () { var output = new Array (this.elements.length / 2) for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { output[j] = this.elements[i] } return output } /** * A JSON serializable representation of the vector. * * @returns {Number[]} */ lunr.Vector.prototype.toJSON = function () { return this.elements } /* eslint-disable */ /*! * lunr.stemmer * Copyright (C) 2020 Oliver Nightingale * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt */ /** * lunr.stemmer is an english language stemmer, this is a JavaScript * implementation of the PorterStemmer taken from http://tartarus.org/~martin * * @static * @implements {lunr.PipelineFunction} * @param {lunr.Token} token - The string to stem * @returns {lunr.Token} * @see {@link lunr.Pipeline} * @function */ lunr.stemmer = (function(){ var step2list = { "ational" : "ate", "tional" : "tion", "enci" : "ence", "anci" : "ance", "izer" : "ize", "bli" : "ble", "alli" : "al", "entli" : "ent", "eli" : "e", "ousli" : "ous", "ization" : "ize", "ation" : "ate", "ator" : "ate", "alism" : "al", "iveness" : "ive", "fulness" : "ful", "ousness" : "ous", "aliti" : "al", "iviti" : "ive", "biliti" : "ble", "logi" : "log" }, step3list = { "icate" : "ic", "ative" : "", "alize" : "al", "iciti" : "ic", "ical" : "ic", "ful" : "", "ness" : "" }, c = "[^aeiou]", // consonant v = "[aeiouy]", // vowel C = c + "[^aeiouy]*", // consonant sequence V = v + "[aeiou]*", // vowel sequence mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 s_v = "^(" + C + ")?" + v; // vowel in stem var re_mgr0 = new RegExp(mgr0); var re_mgr1 = new RegExp(mgr1); var re_meq1 = new RegExp(meq1); var re_s_v = new RegExp(s_v); var re_1a = /^(.+?)(ss|i)es$/; var re2_1a = /^(.+?)([^s])s$/; var re_1b = /^(.+?)eed$/; var re2_1b = /^(.+?)(ed|ing)$/; var re_1b_2 = /.$/; var re2_1b_2 = /(at|bl|iz)$/; var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); var re_1c = /^(.+?[^aeiou])y$/; var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; var re2_4 = /^(.+?)(s|t)(ion)$/; var re_5 = /^(.+?)e$/; var re_5_1 = /ll$/; var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); var porterStemmer = function porterStemmer(w) { var stem, suffix, firstch, re, re2, re3, re4; if (w.length < 3) { return w; } firstch = w.substr(0,1); if (firstch == "y") { w = firstch.toUpperCase() + w.substr(1); } // Step 1a re = re_1a re2 = re2_1a; if (re.test(w)) { w = w.replace(re,"$1$2"); } else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } // Step 1b re = re_1b; re2 = re2_1b; if (re.test(w)) { var fp = re.exec(w); re = re_mgr0; if (re.test(fp[1])) { re = re_1b_2; w = w.replace(re,""); } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1]; re2 = re_s_v; if (re2.test(stem)) { w = stem; re2 = re2_1b_2; re3 = re3_1b_2; re4 = re4_1b_2; if (re2.test(w)) { w = w + "e"; } else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } else if (re4.test(w)) { w = w + "e"; } } } // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) re = re_1c; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; w = stem + "i"; } // Step 2 re = re_2; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = re_mgr0; if (re.test(stem)) { w = stem + step2list[suffix]; } } // Step 3 re = re_3; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = re_mgr0; if (re.test(stem)) { w = stem + step3list[suffix]; } } // Step 4 re = re_4; re2 = re2_4; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = re_mgr1; if (re.test(stem)) { w = stem; } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1] + fp[2]; re2 = re_mgr1; if (re2.test(stem)) { w = stem; } } // Step 5 re = re_5; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = re_mgr1; re2 = re_meq1; re3 = re3_5; if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { w = stem; } } re = re_5_1; re2 = re_mgr1; if (re.test(w) && re2.test(w)) { re = re_1b_2; w = w.replace(re,""); } // and turn initial Y back to y if (firstch == "y") { w = firstch.toLowerCase() + w.substr(1); } return w; }; return function (token) { return token.update(porterStemmer); } })(); lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') /*! * lunr.stopWordFilter * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.generateStopWordFilter builds a stopWordFilter function from the provided * list of stop words. * * The built in lunr.stopWordFilter is built using this generator and can be used * to generate custom stopWordFilters for applications or non English languages. * * @function * @param {Array} token The token to pass through the filter * @returns {lunr.PipelineFunction} * @see lunr.Pipeline * @see lunr.stopWordFilter */ lunr.generateStopWordFilter = function (stopWords) { var words = stopWords.reduce(function (memo, stopWord) { memo[stopWord] = stopWord return memo }, {}) return function (token) { if (token && words[token.toString()] !== token.toString()) return token } } /** * lunr.stopWordFilter is an English language stop word list filter, any words * contained in the list will not be passed through the filter. * * This is intended to be used in the Pipeline. If the token does not pass the * filter then undefined will be returned. * * @function * @implements {lunr.PipelineFunction} * @params {lunr.Token} token - A token to check for being a stop word. * @returns {lunr.Token} * @see {@link lunr.Pipeline} */ lunr.stopWordFilter = lunr.generateStopWordFilter([ 'a', 'able', 'about', 'across', 'after', 'all', 'almost', 'also', 'am', 'among', 'an', 'and', 'any', 'are', 'as', 'at', 'be', 'because', 'been', 'but', 'by', 'can', 'cannot', 'could', 'dear', 'did', 'do', 'does', 'either', 'else', 'ever', 'every', 'for', 'from', 'get', 'got', 'had', 'has', 'have', 'he', 'her', 'hers', 'him', 'his', 'how', 'however', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'just', 'least', 'let', 'like', 'likely', 'may', 'me', 'might', 'most', 'must', 'my', 'neither', 'no', 'nor', 'not', 'of', 'off', 'often', 'on', 'only', 'or', 'other', 'our', 'own', 'rather', 'said', 'say', 'says', 'she', 'should', 'since', 'so', 'some', 'than', 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'tis', 'to', 'too', 'twas', 'us', 'wants', 'was', 'we', 'were', 'what', 'when', 'where', 'which', 'while', 'who', 'whom', 'why', 'will', 'with', 'would', 'yet', 'you', 'your' ]) lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') /*! * lunr.trimmer * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.trimmer is a pipeline function for trimming non word * characters from the beginning and end of tokens before they * enter the index. * * This implementation may not work correctly for non latin * characters and should either be removed or adapted for use * with languages with non-latin characters. * * @static * @implements {lunr.PipelineFunction} * @param {lunr.Token} token The token to pass through the filter * @returns {lunr.Token} * @see lunr.Pipeline */ lunr.trimmer = function (token) { return token.update(function (s) { return s.replace(/^\W+/, '').replace(/\W+$/, '') }) } lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') /*! * lunr.TokenSet * Copyright (C) 2020 Oliver Nightingale */ /** * A token set is used to store the unique list of all tokens * within an index. Token sets are also used to represent an * incoming query to the index, this query token set and index * token set are then intersected to find which tokens to look * up in the inverted index. * * A token set can hold multiple tokens, as in the case of the * index token set, or it can hold a single token as in the * case of a simple query token set. * * Additionally token sets are used to perform wildcard matching. * Leading, contained and trailing wildcards are supported, and * from this edit distance matching can also be provided. * * Token sets are implemented as a minimal finite state automata, * where both common prefixes and suffixes are shared between tokens. * This helps to reduce the space used for storing the token set. * * @constructor */ lunr.TokenSet = function () { this.final = false this.edges = {} this.id = lunr.TokenSet._nextId lunr.TokenSet._nextId += 1 } /** * Keeps track of the next, auto increment, identifier to assign * to a new tokenSet. * * TokenSets require a unique identifier to be correctly minimised. * * @private */ lunr.TokenSet._nextId = 1 /** * Creates a TokenSet instance from the given sorted array of words. * * @param {String[]} arr - A sorted array of strings to create the set from. * @returns {lunr.TokenSet} * @throws Will throw an error if the input array is not sorted. */ lunr.TokenSet.fromArray = function (arr) { var builder = new lunr.TokenSet.Builder for (var i = 0, len = arr.length; i < len; i++) { builder.insert(arr[i]) } builder.finish() return builder.root } /** * Creates a token set from a query clause. * * @private * @param {Object} clause - A single clause from lunr.Query. * @param {string} clause.term - The query clause term. * @param {number} [clause.editDistance] - The optional edit distance for the term. * @returns {lunr.TokenSet} */ lunr.TokenSet.fromClause = function (clause) { if ('editDistance' in clause) { return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) } else { return lunr.TokenSet.fromString(clause.term) } } /** * Creates a token set representing a single string with a specified * edit distance. * * Insertions, deletions, substitutions and transpositions are each * treated as an edit distance of 1. * * Increasing the allowed edit distance will have a dramatic impact * on the performance of both creating and intersecting these TokenSets. * It is advised to keep the edit distance less than 3. * * @param {string} str - The string to create the token set from. * @param {number} editDistance - The allowed edit distance to match. * @returns {lunr.Vector} */ lunr.TokenSet.fromFuzzyString = function (str, editDistance) { var root = new lunr.TokenSet var stack = [{ node: root, editsRemaining: editDistance, str: str }] while (stack.length) { var frame = stack.pop() // no edit if (frame.str.length > 0) { var char = frame.str.charAt(0), noEditNode if (char in frame.node.edges) { noEditNode = frame.node.edges[char] } else { noEditNode = new lunr.TokenSet frame.node.edges[char] = noEditNode } if (frame.str.length == 1) { noEditNode.final = true } stack.push({ node: noEditNode, editsRemaining: frame.editsRemaining, str: frame.str.slice(1) }) } if (frame.editsRemaining == 0) { continue } // insertion if ("*" in frame.node.edges) { var insertionNode = frame.node.edges["*"] } else { var insertionNode = new lunr.TokenSet frame.node.edges["*"] = insertionNode } if (frame.str.length == 0) { insertionNode.final = true } stack.push({ node: insertionNode, editsRemaining: frame.editsRemaining - 1, str: frame.str }) // deletion // can only do a deletion if we have enough edits remaining // and if there are characters left to delete in the string if (frame.str.length > 1) { stack.push({ node: frame.node, editsRemaining: frame.editsRemaining - 1, str: frame.str.slice(1) }) } // deletion // just removing the last character from the str if (frame.str.length == 1) { frame.node.final = true } // substitution // can only do a substitution if we have enough edits remaining // and if there are characters left to substitute if (frame.str.length >= 1) { if ("*" in frame.node.edges) { var substitutionNode = frame.node.edges["*"] } else { var substitutionNode = new lunr.TokenSet frame.node.edges["*"] = substitutionNode } if (frame.str.length == 1) { substitutionNode.final = true } stack.push({ node: substitutionNode, editsRemaining: frame.editsRemaining - 1, str: frame.str.slice(1) }) } // transposition // can only do a transposition if there are edits remaining // and there are enough characters to transpose if (frame.str.length > 1) { var charA = frame.str.charAt(0), charB = frame.str.charAt(1), transposeNode if (charB in frame.node.edges) { transposeNode = frame.node.edges[charB] } else { transposeNode = new lunr.TokenSet frame.node.edges[charB] = transposeNode } if (frame.str.length == 1) { transposeNode.final = true } stack.push({ node: transposeNode, editsRemaining: frame.editsRemaining - 1, str: charA + frame.str.slice(2) }) } } return root } /** * Creates a TokenSet from a string. * * The string may contain one or more wildcard characters (*) * that will allow wildcard matching when intersecting with * another TokenSet. * * @param {string} str - The string to create a TokenSet from. * @returns {lunr.TokenSet} */ lunr.TokenSet.fromString = function (str) { var node = new lunr.TokenSet, root = node /* * Iterates through all characters within the passed string * appending a node for each character. * * When a wildcard character is found then a self * referencing edge is introduced to continually match * any number of any characters. */ for (var i = 0, len = str.length; i < len; i++) { var char = str[i], final = (i == len - 1) if (char == "*") { node.edges[char] = node node.final = final } else { var next = new lunr.TokenSet next.final = final node.edges[char] = next node = next } } return root } /** * Converts this TokenSet into an array of strings * contained within the TokenSet. * * This is not intended to be used on a TokenSet that * contains wildcards, in these cases the results are * undefined and are likely to cause an infinite loop. * * @returns {string[]} */ lunr.TokenSet.prototype.toArray = function () { var words = [] var stack = [{ prefix: "", node: this }] while (stack.length) { var frame = stack.pop(), edges = Object.keys(frame.node.edges), len = edges.length if (frame.node.final) { /* In Safari, at this point the prefix is sometimes corrupted, see: * https://github.com/olivernn/lunr.js/issues/279 Calling any * String.prototype method forces Safari to "cast" this string to what * it's supposed to be, fixing the bug. */ frame.prefix.charAt(0) words.push(frame.prefix) } for (var i = 0; i < len; i++) { var edge = edges[i] stack.push({ prefix: frame.prefix.concat(edge), node: frame.node.edges[edge] }) } } return words } /** * Generates a string representation of a TokenSet. * * This is intended to allow TokenSets to be used as keys * in objects, largely to aid the construction and minimisation * of a TokenSet. As such it is not designed to be a human * friendly representation of the TokenSet. * * @returns {string} */ lunr.TokenSet.prototype.toString = function () { // NOTE: Using Object.keys here as this.edges is very likely // to enter 'hash-mode' with many keys being added // // avoiding a for-in loop here as it leads to the function // being de-optimised (at least in V8). From some simple // benchmarks the performance is comparable, but allowing // V8 to optimize may mean easy performance wins in the future. if (this._str) { return this._str } var str = this.final ? '1' : '0', labels = Object.keys(this.edges).sort(), len = labels.length for (var i = 0; i < len; i++) { var label = labels[i], node = this.edges[label] str = str + label + node.id } return str } /** * Returns a new TokenSet that is the intersection of * this TokenSet and the passed TokenSet. * * This intersection will take into account any wildcards * contained within the TokenSet. * * @param {lunr.TokenSet} b - An other TokenSet to intersect with. * @returns {lunr.TokenSet} */ lunr.TokenSet.prototype.intersect = function (b) { var output = new lunr.TokenSet, frame = undefined var stack = [{ qNode: b, output: output, node: this }] while (stack.length) { frame = stack.pop() // NOTE: As with the #toString method, we are using // Object.keys and a for loop instead of a for-in loop // as both of these objects enter 'hash' mode, causing // the function to be de-optimised in V8 var qEdges = Object.keys(frame.qNode.edges), qLen = qEdges.length, nEdges = Object.keys(frame.node.edges), nLen = nEdges.length for (var q = 0; q < qLen; q++) { var qEdge = qEdges[q] for (var n = 0; n < nLen; n++) { var nEdge = nEdges[n] if (nEdge == qEdge || qEdge == '*') { var node = frame.node.edges[nEdge], qNode = frame.qNode.edges[qEdge], final = node.final && qNode.final, next = undefined if (nEdge in frame.output.edges) { // an edge already exists for this character // no need to create a new node, just set the finality // bit unless this node is already final next = frame.output.edges[nEdge] next.final = next.final || final } else { // no edge exists yet, must create one // set the finality bit and insert it // into the output next = new lunr.TokenSet next.final = final frame.output.edges[nEdge] = next } stack.push({ qNode: qNode, output: next, node: node }) } } } } return output } lunr.TokenSet.Builder = function () { this.previousWord = "" this.root = new lunr.TokenSet this.uncheckedNodes = [] this.minimizedNodes = {} } lunr.TokenSet.Builder.prototype.insert = function (word) { var node, commonPrefix = 0 if (word < this.previousWord) { throw new Error ("Out of order word insertion") } for (var i = 0; i < word.length && i < this.previousWord.length; i++) { if (word[i] != this.previousWord[i]) break commonPrefix++ } this.minimize(commonPrefix) if (this.uncheckedNodes.length == 0) { node = this.root } else { node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child } for (var i = commonPrefix; i < word.length; i++) { var nextNode = new lunr.TokenSet, char = word[i] node.edges[char] = nextNode this.uncheckedNodes.push({ parent: node, char: char, child: nextNode }) node = nextNode } node.final = true this.previousWord = word } lunr.TokenSet.Builder.prototype.finish = function () { this.minimize(0) } lunr.TokenSet.Builder.prototype.minimize = function (downTo) { for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { var node = this.uncheckedNodes[i], childKey = node.child.toString() if (childKey in this.minimizedNodes) { node.parent.edges[node.char] = this.minimizedNodes[childKey] } else { // Cache the key for this node since // we know it can't change anymore node.child._str = childKey this.minimizedNodes[childKey] = node.child } this.uncheckedNodes.pop() } } /*! * lunr.Index * Copyright (C) 2020 Oliver Nightingale */ /** * An index contains the built index of all documents and provides a query interface * to the index. * * Usually instances of lunr.Index will not be created using this constructor, instead * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be * used to load previously built and serialized indexes. * * @constructor * @param {Object} attrs - The attributes of the built search index. * @param {Object} attrs.invertedIndex - An index of term/field to document reference. * @param {Object} attrs.fieldVectors - Field vectors * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. * @param {string[]} attrs.fields - The names of indexed document fields. * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. */ lunr.Index = function (attrs) { this.invertedIndex = attrs.invertedIndex this.fieldVectors = attrs.fieldVectors this.tokenSet = attrs.tokenSet this.fields = attrs.fields this.pipeline = attrs.pipeline } /** * A result contains details of a document matching a search query. * @typedef {Object} lunr.Index~Result * @property {string} ref - The reference of the document this result represents. * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. */ /** * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple * query language which itself is parsed into an instance of lunr.Query. * * For programmatically building queries it is advised to directly use lunr.Query, the query language * is best used for human entered text rather than program generated text. * * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' * or 'world', though those that contain both will rank higher in the results. * * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding * wildcards will increase the number of documents that will be found but can also have a negative * impact on query performance, especially with wildcards at the beginning of a term. * * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term * hello in the title field will match this query. Using a field not present in the index will lead * to an error being thrown. * * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. * Avoid large values for edit distance to improve query performance. * * Each term also supports a presence modifier. By default a term's presence in document is optional, however * this can be changed to either required or prohibited. For a term's presence to be required in a document the * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. * * To escape special characters the backslash character '\' can be used, this allows searches to include * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead * of attempting to apply a boost of 2 to the search term "foo". * * @typedef {string} lunr.Index~QueryString * @example Simple single term query * hello * @example Multiple term query * hello world * @example term scoped to a field * title:hello * @example term with a boost of 10 * hello^10 * @example term with an edit distance of 2 * hello~2 * @example terms with presence modifiers * -foo +bar baz */ /** * Performs a search against the index using lunr query syntax. * * Results will be returned sorted by their score, the most relevant results * will be returned first. For details on how the score is calculated, please see * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. * * For more programmatic querying use lunr.Index#query. * * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. * @returns {lunr.Index~Result[]} */ lunr.Index.prototype.search = function (queryString) { return this.query(function (query) { var parser = new lunr.QueryParser(queryString, query) parser.parse() }) } /** * A query builder callback provides a query object to be used to express * the query to perform on the index. * * @callback lunr.Index~queryBuilder * @param {lunr.Query} query - The query object to build up. * @this lunr.Query */ /** * Performs a query against the index using the yielded lunr.Query object. * * If performing programmatic queries against the index, this method is preferred * over lunr.Index#search so as to avoid the additional query parsing overhead. * * A query object is yielded to the supplied function which should be used to * express the query to be run against the index. * * Note that although this function takes a callback parameter it is _not_ an * asynchronous operation, the callback is just yielded a query object to be * customized. * * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. * @returns {lunr.Index~Result[]} */ lunr.Index.prototype.query = function (fn) { // for each query clause // * process terms // * expand terms from token set // * find matching documents and metadata // * get document vectors // * score documents var query = new lunr.Query(this.fields), matchingFields = Object.create(null), queryVectors = Object.create(null), termFieldCache = Object.create(null), requiredMatches = Object.create(null), prohibitedMatches = Object.create(null) /* * To support field level boosts a query vector is created per * field. An empty vector is eagerly created to support negated * queries. */ for (var i = 0; i < this.fields.length; i++) { queryVectors[this.fields[i]] = new lunr.Vector } fn.call(query, query) for (var i = 0; i < query.clauses.length; i++) { /* * Unless the pipeline has been disabled for this term, which is * the case for terms with wildcards, we need to pass the clause * term through the search pipeline. A pipeline returns an array * of processed terms. Pipeline functions may expand the passed * term, which means we may end up performing multiple index lookups * for a single query term. */ var clause = query.clauses[i], terms = null, clauseMatches = lunr.Set.empty if (clause.usePipeline) { terms = this.pipeline.runString(clause.term, { fields: clause.fields }) } else { terms = [clause.term] } for (var m = 0; m < terms.length; m++) { var term = terms[m] /* * Each term returned from the pipeline needs to use the same query * clause object, e.g. the same boost and or edit distance. The * simplest way to do this is to re-use the clause object but mutate * its term property. */ clause.term = term /* * From the term in the clause we create a token set which will then * be used to intersect the indexes token set to get a list of terms * to lookup in the inverted index */ var termTokenSet = lunr.TokenSet.fromClause(clause), expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() /* * If a term marked as required does not exist in the tokenSet it is * impossible for the search to return any matches. We set all the field * scoped required matches set to empty and stop examining any further * clauses. */ if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { for (var k = 0; k < clause.fields.length; k++) { var field = clause.fields[k] requiredMatches[field] = lunr.Set.empty } break } for (var j = 0; j < expandedTerms.length; j++) { /* * For each term get the posting and termIndex, this is required for * building the query vector. */ var expandedTerm = expandedTerms[j], posting = this.invertedIndex[expandedTerm], termIndex = posting._index for (var k = 0; k < clause.fields.length; k++) { /* * For each field that this query term is scoped by (by default * all fields are in scope) we need to get all the document refs * that have this term in that field. * * The posting is the entry in the invertedIndex for the matching * term from above. */ var field = clause.fields[k], fieldPosting = posting[field], matchingDocumentRefs = Object.keys(fieldPosting), termField = expandedTerm + "/" + field, matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) /* * if the presence of this term is required ensure that the matching * documents are added to the set of required matches for this clause. * */ if (clause.presence == lunr.Query.presence.REQUIRED) { clauseMatches = clauseMatches.union(matchingDocumentsSet) if (requiredMatches[field] === undefined) { requiredMatches[field] = lunr.Set.complete } } /* * if the presence of this term is prohibited ensure that the matching * documents are added to the set of prohibited matches for this field, * creating that set if it does not yet exist. */ if (clause.presence == lunr.Query.presence.PROHIBITED) { if (prohibitedMatches[field] === undefined) { prohibitedMatches[field] = lunr.Set.empty } prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) /* * Prohibited matches should not be part of the query vector used for * similarity scoring and no metadata should be extracted so we continue * to the next field */ continue } /* * The query field vector is populated using the termIndex found for * the term and a unit value with the appropriate boost applied. * Using upsert because there could already be an entry in the vector * for the term we are working with. In that case we just add the scores * together. */ queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) /** * If we've already seen this term, field combo then we've already collected * the matching documents and metadata, no need to go through all that again */ if (termFieldCache[termField]) { continue } for (var l = 0; l < matchingDocumentRefs.length; l++) { /* * All metadata for this term/field/document triple * are then extracted and collected into an instance * of lunr.MatchData ready to be returned in the query * results */ var matchingDocumentRef = matchingDocumentRefs[l], matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), metadata = fieldPosting[matchingDocumentRef], fieldMatch if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) } else { fieldMatch.add(expandedTerm, field, metadata) } } termFieldCache[termField] = true } } } /** * If the presence was required we need to update the requiredMatches field sets. * We do this after all fields for the term have collected their matches because * the clause terms presence is required in _any_ of the fields not _all_ of the * fields. */ if (clause.presence === lunr.Query.presence.REQUIRED) { for (var k = 0; k < clause.fields.length; k++) { var field = clause.fields[k] requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) } } } /** * Need to combine the field scoped required and prohibited * matching documents into a global set of required and prohibited * matches */ var allRequiredMatches = lunr.Set.complete, allProhibitedMatches = lunr.Set.empty for (var i = 0; i < this.fields.length; i++) { var field = this.fields[i] if (requiredMatches[field]) { allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) } if (prohibitedMatches[field]) { allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) } } var matchingFieldRefs = Object.keys(matchingFields), results = [], matches = Object.create(null) /* * If the query is negated (contains only prohibited terms) * we need to get _all_ fieldRefs currently existing in the * index. This is only done when we know that the query is * entirely prohibited terms to avoid any cost of getting all * fieldRefs unnecessarily. * * Additionally, blank MatchData must be created to correctly * populate the results. */ if (query.isNegated()) { matchingFieldRefs = Object.keys(this.fieldVectors) for (var i = 0; i < matchingFieldRefs.length; i++) { var matchingFieldRef = matchingFieldRefs[i] var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) matchingFields[matchingFieldRef] = new lunr.MatchData } } for (var i = 0; i < matchingFieldRefs.length; i++) { /* * Currently we have document fields that match the query, but we * need to return documents. The matchData and scores are combined * from multiple fields belonging to the same document. * * Scores are calculated by field, using the query vectors created * above, and combined into a final document score using addition. */ var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), docRef = fieldRef.docRef if (!allRequiredMatches.contains(docRef)) { continue } if (allProhibitedMatches.contains(docRef)) { continue } var fieldVector = this.fieldVectors[fieldRef], score = queryVectors[fieldRef.fieldName].similarity(fieldVector), docMatch if ((docMatch = matches[docRef]) !== undefined) { docMatch.score += score docMatch.matchData.combine(matchingFields[fieldRef]) } else { var match = { ref: docRef, score: score, matchData: matchingFields[fieldRef] } matches[docRef] = match results.push(match) } } /* * Sort the results objects by score, highest first. */ return results.sort(function (a, b) { return b.score - a.score }) } /** * Prepares the index for JSON serialization. * * The schema for this JSON blob will be described in a * separate JSON schema file. * * @returns {Object} */ lunr.Index.prototype.toJSON = function () { var invertedIndex = Object.keys(this.invertedIndex) .sort() .map(function (term) { return [term, this.invertedIndex[term]] }, this) var fieldVectors = Object.keys(this.fieldVectors) .map(function (ref) { return [ref, this.fieldVectors[ref].toJSON()] }, this) return { version: lunr.version, fields: this.fields, fieldVectors: fieldVectors, invertedIndex: invertedIndex, pipeline: this.pipeline.toJSON() } } /** * Loads a previously serialized lunr.Index * * @param {Object} serializedIndex - A previously serialized lunr.Index * @returns {lunr.Index} */ lunr.Index.load = function (serializedIndex) { var attrs = {}, fieldVectors = {}, serializedVectors = serializedIndex.fieldVectors, invertedIndex = Object.create(null), serializedInvertedIndex = serializedIndex.invertedIndex, tokenSetBuilder = new lunr.TokenSet.Builder, pipeline = lunr.Pipeline.load(serializedIndex.pipeline) if (serializedIndex.version != lunr.version) { lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") } for (var i = 0; i < serializedVectors.length; i++) { var tuple = serializedVectors[i], ref = tuple[0], elements = tuple[1] fieldVectors[ref] = new lunr.Vector(elements) } for (var i = 0; i < serializedInvertedIndex.length; i++) { var tuple = serializedInvertedIndex[i], term = tuple[0], posting = tuple[1] tokenSetBuilder.insert(term) invertedIndex[term] = posting } tokenSetBuilder.finish() attrs.fields = serializedIndex.fields attrs.fieldVectors = fieldVectors attrs.invertedIndex = invertedIndex attrs.tokenSet = tokenSetBuilder.root attrs.pipeline = pipeline return new lunr.Index(attrs) } /*! * lunr.Builder * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.Builder performs indexing on a set of documents and * returns instances of lunr.Index ready for querying. * * All configuration of the index is done via the builder, the * fields to index, the document reference, the text processing * pipeline and document scoring parameters are all set on the * builder before indexing. * * @constructor * @property {string} _ref - Internal reference to the document reference field. * @property {string[]} _fields - Internal reference to the document fields to index. * @property {object} invertedIndex - The inverted index maps terms to document fields. * @property {object} documentTermFrequencies - Keeps track of document term frequencies. * @property {object} documentLengths - Keeps track of the length of documents added to the index. * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. * @property {number} documentCount - Keeps track of the total number of documents indexed. * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. */ lunr.Builder = function () { this._ref = "id" this._fields = Object.create(null) this._documents = Object.create(null) this.invertedIndex = Object.create(null) this.fieldTermFrequencies = {} this.fieldLengths = {} this.tokenizer = lunr.tokenizer this.pipeline = new lunr.Pipeline this.searchPipeline = new lunr.Pipeline this.documentCount = 0 this._b = 0.75 this._k1 = 1.2 this.termIndex = 0 this.metadataWhitelist = [] } /** * Sets the document field used as the document reference. Every document must have this field. * The type of this field in the document should be a string, if it is not a string it will be * coerced into a string by calling toString. * * The default ref is 'id'. * * The ref should _not_ be changed during indexing, it should be set before any documents are * added to the index. Changing it during indexing can lead to inconsistent results. * * @param {string} ref - The name of the reference field in the document. */ lunr.Builder.prototype.ref = function (ref) { this._ref = ref } /** * A function that is used to extract a field from a document. * * Lunr expects a field to be at the top level of a document, if however the field * is deeply nested within a document an extractor function can be used to extract * the right field for indexing. * * @callback fieldExtractor * @param {object} doc - The document being added to the index. * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. * @example Extracting a nested field * function (doc) { return doc.nested.field } */ /** * Adds a field to the list of document fields that will be indexed. Every document being * indexed should have this field. Null values for this field in indexed documents will * not cause errors but will limit the chance of that document being retrieved by searches. * * All fields should be added before adding documents to the index. Adding fields after * a document has been indexed will have no effect on already indexed documents. * * Fields can be boosted at build time. This allows terms within that field to have more * importance when ranking search results. Use a field boost to specify that matches within * one field are more important than other fields. * * @param {string} fieldName - The name of a field to index in all documents. * @param {object} attributes - Optional attributes associated with this field. * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. * @throws {RangeError} fieldName cannot contain unsupported characters '/' */ lunr.Builder.prototype.field = function (fieldName, attributes) { if (/\//.test(fieldName)) { throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") } this._fields[fieldName] = attributes || {} } /** * A parameter to tune the amount of field length normalisation that is applied when * calculating relevance scores. A value of 0 will completely disable any normalisation * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b * will be clamped to the range 0 - 1. * * @param {number} number - The value to set for this tuning parameter. */ lunr.Builder.prototype.b = function (number) { if (number < 0) { this._b = 0 } else if (number > 1) { this._b = 1 } else { this._b = number } } /** * A parameter that controls the speed at which a rise in term frequency results in term * frequency saturation. The default value is 1.2. Setting this to a higher value will give * slower saturation levels, a lower value will result in quicker saturation. * * @param {number} number - The value to set for this tuning parameter. */ lunr.Builder.prototype.k1 = function (number) { this._k1 = number } /** * Adds a document to the index. * * Before adding fields to the index the index should have been fully setup, with the document * ref and all fields to index already having been specified. * * The document must have a field name as specified by the ref (by default this is 'id') and * it should have all fields defined for indexing, though null or undefined values will not * cause errors. * * Entire documents can be boosted at build time. Applying a boost to a document indicates that * this document should rank higher in search results than other documents. * * @param {object} doc - The document to add to the index. * @param {object} attributes - Optional attributes associated with this document. * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. */ lunr.Builder.prototype.add = function (doc, attributes) { var docRef = doc[this._ref], fields = Object.keys(this._fields) this._documents[docRef] = attributes || {} this.documentCount += 1 for (var i = 0; i < fields.length; i++) { var fieldName = fields[i], extractor = this._fields[fieldName].extractor, field = extractor ? extractor(doc) : doc[fieldName], tokens = this.tokenizer(field, { fields: [fieldName] }), terms = this.pipeline.run(tokens), fieldRef = new lunr.FieldRef (docRef, fieldName), fieldTerms = Object.create(null) this.fieldTermFrequencies[fieldRef] = fieldTerms this.fieldLengths[fieldRef] = 0 // store the length of this field for this document this.fieldLengths[fieldRef] += terms.length // calculate term frequencies for this field for (var j = 0; j < terms.length; j++) { var term = terms[j] if (fieldTerms[term] == undefined) { fieldTerms[term] = 0 } fieldTerms[term] += 1 // add to inverted index // create an initial posting if one doesn't exist if (this.invertedIndex[term] == undefined) { var posting = Object.create(null) posting["_index"] = this.termIndex this.termIndex += 1 for (var k = 0; k < fields.length; k++) { posting[fields[k]] = Object.create(null) } this.invertedIndex[term] = posting } // add an entry for this term/fieldName/docRef to the invertedIndex if (this.invertedIndex[term][fieldName][docRef] == undefined) { this.invertedIndex[term][fieldName][docRef] = Object.create(null) } // store all whitelisted metadata about this token in the // inverted index for (var l = 0; l < this.metadataWhitelist.length; l++) { var metadataKey = this.metadataWhitelist[l], metadata = term.metadata[metadataKey] if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { this.invertedIndex[term][fieldName][docRef][metadataKey] = [] } this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) } } } } /** * Calculates the average document length for this index * * @private */ lunr.Builder.prototype.calculateAverageFieldLengths = function () { var fieldRefs = Object.keys(this.fieldLengths), numberOfFields = fieldRefs.length, accumulator = {}, documentsWithField = {} for (var i = 0; i < numberOfFields; i++) { var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), field = fieldRef.fieldName documentsWithField[field] || (documentsWithField[field] = 0) documentsWithField[field] += 1 accumulator[field] || (accumulator[field] = 0) accumulator[field] += this.fieldLengths[fieldRef] } var fields = Object.keys(this._fields) for (var i = 0; i < fields.length; i++) { var fieldName = fields[i] accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] } this.averageFieldLength = accumulator } /** * Builds a vector space model of every document using lunr.Vector * * @private */ lunr.Builder.prototype.createFieldVectors = function () { var fieldVectors = {}, fieldRefs = Object.keys(this.fieldTermFrequencies), fieldRefsLength = fieldRefs.length, termIdfCache = Object.create(null) for (var i = 0; i < fieldRefsLength; i++) { var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), fieldName = fieldRef.fieldName, fieldLength = this.fieldLengths[fieldRef], fieldVector = new lunr.Vector, termFrequencies = this.fieldTermFrequencies[fieldRef], terms = Object.keys(termFrequencies), termsLength = terms.length var fieldBoost = this._fields[fieldName].boost || 1, docBoost = this._documents[fieldRef.docRef].boost || 1 for (var j = 0; j < termsLength; j++) { var term = terms[j], tf = termFrequencies[term], termIndex = this.invertedIndex[term]._index, idf, score, scoreWithPrecision if (termIdfCache[term] === undefined) { idf = lunr.idf(this.invertedIndex[term], this.documentCount) termIdfCache[term] = idf } else { idf = termIdfCache[term] } score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) score *= fieldBoost score *= docBoost scoreWithPrecision = Math.round(score * 1000) / 1000 // Converts 1.23456789 to 1.234. // Reducing the precision so that the vectors take up less // space when serialised. Doing it now so that they behave // the same before and after serialisation. Also, this is // the fastest approach to reducing a number's precision in // JavaScript. fieldVector.insert(termIndex, scoreWithPrecision) } fieldVectors[fieldRef] = fieldVector } this.fieldVectors = fieldVectors } /** * Creates a token set of all tokens in the index using lunr.TokenSet * * @private */ lunr.Builder.prototype.createTokenSet = function () { this.tokenSet = lunr.TokenSet.fromArray( Object.keys(this.invertedIndex).sort() ) } /** * Builds the index, creating an instance of lunr.Index. * * This completes the indexing process and should only be called * once all documents have been added to the index. * * @returns {lunr.Index} */ lunr.Builder.prototype.build = function () { this.calculateAverageFieldLengths() this.createFieldVectors() this.createTokenSet() return new lunr.Index({ invertedIndex: this.invertedIndex, fieldVectors: this.fieldVectors, tokenSet: this.tokenSet, fields: Object.keys(this._fields), pipeline: this.searchPipeline }) } /** * Applies a plugin to the index builder. * * A plugin is a function that is called with the index builder as its context. * Plugins can be used to customise or extend the behaviour of the index * in some way. A plugin is just a function, that encapsulated the custom * behaviour that should be applied when building the index. * * The plugin function will be called with the index builder as its argument, additional * arguments can also be passed when calling use. The function will be called * with the index builder as its context. * * @param {Function} plugin The plugin to apply. */ lunr.Builder.prototype.use = function (fn) { var args = Array.prototype.slice.call(arguments, 1) args.unshift(this) fn.apply(this, args) } /** * Contains and collects metadata about a matching document. * A single instance of lunr.MatchData is returned as part of every * lunr.Index~Result. * * @constructor * @param {string} term - The term this match data is associated with * @param {string} field - The field in which the term was found * @param {object} metadata - The metadata recorded about this term in this field * @property {object} metadata - A cloned collection of metadata associated with this document. * @see {@link lunr.Index~Result} */ lunr.MatchData = function (term, field, metadata) { var clonedMetadata = Object.create(null), metadataKeys = Object.keys(metadata || {}) // Cloning the metadata to prevent the original // being mutated during match data combination. // Metadata is kept in an array within the inverted // index so cloning the data can be done with // Array#slice for (var i = 0; i < metadataKeys.length; i++) { var key = metadataKeys[i] clonedMetadata[key] = metadata[key].slice() } this.metadata = Object.create(null) if (term !== undefined) { this.metadata[term] = Object.create(null) this.metadata[term][field] = clonedMetadata } } /** * An instance of lunr.MatchData will be created for every term that matches a * document. However only one instance is required in a lunr.Index~Result. This * method combines metadata from another instance of lunr.MatchData with this * objects metadata. * * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. * @see {@link lunr.Index~Result} */ lunr.MatchData.prototype.combine = function (otherMatchData) { var terms = Object.keys(otherMatchData.metadata) for (var i = 0; i < terms.length; i++) { var term = terms[i], fields = Object.keys(otherMatchData.metadata[term]) if (this.metadata[term] == undefined) { this.metadata[term] = Object.create(null) } for (var j = 0; j < fields.length; j++) { var field = fields[j], keys = Object.keys(otherMatchData.metadata[term][field]) if (this.metadata[term][field] == undefined) { this.metadata[term][field] = Object.create(null) } for (var k = 0; k < keys.length; k++) { var key = keys[k] if (this.metadata[term][field][key] == undefined) { this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] } else { this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) } } } } } /** * Add metadata for a term/field pair to this instance of match data. * * @param {string} term - The term this match data is associated with * @param {string} field - The field in which the term was found * @param {object} metadata - The metadata recorded about this term in this field */ lunr.MatchData.prototype.add = function (term, field, metadata) { if (!(term in this.metadata)) { this.metadata[term] = Object.create(null) this.metadata[term][field] = metadata return } if (!(field in this.metadata[term])) { this.metadata[term][field] = metadata return } var metadataKeys = Object.keys(metadata) for (var i = 0; i < metadataKeys.length; i++) { var key = metadataKeys[i] if (key in this.metadata[term][field]) { this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) } else { this.metadata[term][field][key] = metadata[key] } } } /** * A lunr.Query provides a programmatic way of defining queries to be performed * against a {@link lunr.Index}. * * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method * so the query object is pre-initialized with the right index fields. * * @constructor * @property {lunr.Query~Clause[]} clauses - An array of query clauses. * @property {string[]} allFields - An array of all available fields in a lunr.Index. */ lunr.Query = function (allFields) { this.clauses = [] this.allFields = allFields } /** * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. * * This allows wildcards to be added to the beginning and end of a term without having to manually do any string * concatenation. * * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. * * @constant * @default * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists * @see lunr.Query~Clause * @see lunr.Query#clause * @see lunr.Query#term * @example query term with trailing wildcard * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) * @example query term with leading and trailing wildcard * query.term('foo', { * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING * }) */ lunr.Query.wildcard = new String ("*") lunr.Query.wildcard.NONE = 0 lunr.Query.wildcard.LEADING = 1 lunr.Query.wildcard.TRAILING = 2 /** * Constants for indicating what kind of presence a term must have in matching documents. * * @constant * @enum {number} * @see lunr.Query~Clause * @see lunr.Query#clause * @see lunr.Query#term * @example query term with required presence * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) */ lunr.Query.presence = { /** * Term's presence in a document is optional, this is the default value. */ OPTIONAL: 1, /** * Term's presence in a document is required, documents that do not contain * this term will not be returned. */ REQUIRED: 2, /** * Term's presence in a document is prohibited, documents that do contain * this term will not be returned. */ PROHIBITED: 3 } /** * A single clause in a {@link lunr.Query} contains a term and details on how to * match that term against a {@link lunr.Index}. * * @typedef {Object} lunr.Query~Clause * @property {string[]} fields - The fields in an index this clause should be matched against. * @property {number} [boost=1] - Any boost that should be applied when matching this clause. * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. */ /** * Adds a {@link lunr.Query~Clause} to this query. * * Unless the clause contains the fields to be matched all fields will be matched. In addition * a default boost of 1 is applied to the clause. * * @param {lunr.Query~Clause} clause - The clause to add to this query. * @see lunr.Query~Clause * @returns {lunr.Query} */ lunr.Query.prototype.clause = function (clause) { if (!('fields' in clause)) { clause.fields = this.allFields } if (!('boost' in clause)) { clause.boost = 1 } if (!('usePipeline' in clause)) { clause.usePipeline = true } if (!('wildcard' in clause)) { clause.wildcard = lunr.Query.wildcard.NONE } if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { clause.term = "*" + clause.term } if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { clause.term = "" + clause.term + "*" } if (!('presence' in clause)) { clause.presence = lunr.Query.presence.OPTIONAL } this.clauses.push(clause) return this } /** * A negated query is one in which every clause has a presence of * prohibited. These queries require some special processing to return * the expected results. * * @returns boolean */ lunr.Query.prototype.isNegated = function () { for (var i = 0; i < this.clauses.length; i++) { if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { return false } } return true } /** * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} * to the list of clauses that make up this query. * * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion * to a token or token-like string should be done before calling this method. * * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an * array, each term in the array will share the same options. * * @param {object|object[]} term - The term(s) to add to the query. * @param {object} [options] - Any additional properties to add to the query clause. * @returns {lunr.Query} * @see lunr.Query#clause * @see lunr.Query~Clause * @example adding a single term to a query * query.term("foo") * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard * query.term("foo", { * fields: ["title"], * boost: 10, * wildcard: lunr.Query.wildcard.TRAILING * }) * @example using lunr.tokenizer to convert a string to tokens before using them as terms * query.term(lunr.tokenizer("foo bar")) */ lunr.Query.prototype.term = function (term, options) { if (Array.isArray(term)) { term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) return this } var clause = options || {} clause.term = term.toString() this.clause(clause) return this } lunr.QueryParseError = function (message, start, end) { this.name = "QueryParseError" this.message = message this.start = start this.end = end } lunr.QueryParseError.prototype = new Error lunr.QueryLexer = function (str) { this.lexemes = [] this.str = str this.length = str.length this.pos = 0 this.start = 0 this.escapeCharPositions = [] } lunr.QueryLexer.prototype.run = function () { var state = lunr.QueryLexer.lexText while (state) { state = state(this) } } lunr.QueryLexer.prototype.sliceString = function () { var subSlices = [], sliceStart = this.start, sliceEnd = this.pos for (var i = 0; i < this.escapeCharPositions.length; i++) { sliceEnd = this.escapeCharPositions[i] subSlices.push(this.str.slice(sliceStart, sliceEnd)) sliceStart = sliceEnd + 1 } subSlices.push(this.str.slice(sliceStart, this.pos)) this.escapeCharPositions.length = 0 return subSlices.join('') } lunr.QueryLexer.prototype.emit = function (type) { this.lexemes.push({ type: type, str: this.sliceString(), start: this.start, end: this.pos }) this.start = this.pos } lunr.QueryLexer.prototype.escapeCharacter = function () { this.escapeCharPositions.push(this.pos - 1) this.pos += 1 } lunr.QueryLexer.prototype.next = function () { if (this.pos >= this.length) { return lunr.QueryLexer.EOS } var char = this.str.charAt(this.pos) this.pos += 1 return char } lunr.QueryLexer.prototype.width = function () { return this.pos - this.start } lunr.QueryLexer.prototype.ignore = function () { if (this.start == this.pos) { this.pos += 1 } this.start = this.pos } lunr.QueryLexer.prototype.backup = function () { this.pos -= 1 } lunr.QueryLexer.prototype.acceptDigitRun = function () { var char, charCode do { char = this.next() charCode = char.charCodeAt(0) } while (charCode > 47 && charCode < 58) if (char != lunr.QueryLexer.EOS) { this.backup() } } lunr.QueryLexer.prototype.more = function () { return this.pos < this.length } lunr.QueryLexer.EOS = 'EOS' lunr.QueryLexer.FIELD = 'FIELD' lunr.QueryLexer.TERM = 'TERM' lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' lunr.QueryLexer.BOOST = 'BOOST' lunr.QueryLexer.PRESENCE = 'PRESENCE' lunr.QueryLexer.lexField = function (lexer) { lexer.backup() lexer.emit(lunr.QueryLexer.FIELD) lexer.ignore() return lunr.QueryLexer.lexText } lunr.QueryLexer.lexTerm = function (lexer) { if (lexer.width() > 1) { lexer.backup() lexer.emit(lunr.QueryLexer.TERM) } lexer.ignore() if (lexer.more()) { return lunr.QueryLexer.lexText } } lunr.QueryLexer.lexEditDistance = function (lexer) { lexer.ignore() lexer.acceptDigitRun() lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) return lunr.QueryLexer.lexText } lunr.QueryLexer.lexBoost = function (lexer) { lexer.ignore() lexer.acceptDigitRun() lexer.emit(lunr.QueryLexer.BOOST) return lunr.QueryLexer.lexText } lunr.QueryLexer.lexEOS = function (lexer) { if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } } // This matches the separator used when tokenising fields // within a document. These should match otherwise it is // not possible to search for some tokens within a document. // // It is possible for the user to change the separator on the // tokenizer so it _might_ clash with any other of the special // characters already used within the search string, e.g. :. // // This means that it is possible to change the separator in // such a way that makes some words unsearchable using a search // string. lunr.QueryLexer.termSeparator = lunr.tokenizer.separator lunr.QueryLexer.lexText = function (lexer) { while (true) { var char = lexer.next() if (char == lunr.QueryLexer.EOS) { return lunr.QueryLexer.lexEOS } // Escape character is '\' if (char.charCodeAt(0) == 92) { lexer.escapeCharacter() continue } if (char == ":") { return lunr.QueryLexer.lexField } if (char == "~") { lexer.backup() if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } return lunr.QueryLexer.lexEditDistance } if (char == "^") { lexer.backup() if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } return lunr.QueryLexer.lexBoost } // "+" indicates term presence is required // checking for length to ensure that only // leading "+" are considered if (char == "+" && lexer.width() === 1) { lexer.emit(lunr.QueryLexer.PRESENCE) return lunr.QueryLexer.lexText } // "-" indicates term presence is prohibited // checking for length to ensure that only // leading "-" are considered if (char == "-" && lexer.width() === 1) { lexer.emit(lunr.QueryLexer.PRESENCE) return lunr.QueryLexer.lexText } if (char.match(lunr.QueryLexer.termSeparator)) { return lunr.QueryLexer.lexTerm } } } lunr.QueryParser = function (str, query) { this.lexer = new lunr.QueryLexer (str) this.query = query this.currentClause = {} this.lexemeIdx = 0 } lunr.QueryParser.prototype.parse = function () { this.lexer.run() this.lexemes = this.lexer.lexemes var state = lunr.QueryParser.parseClause while (state) { state = state(this) } return this.query } lunr.QueryParser.prototype.peekLexeme = function () { return this.lexemes[this.lexemeIdx] } lunr.QueryParser.prototype.consumeLexeme = function () { var lexeme = this.peekLexeme() this.lexemeIdx += 1 return lexeme } lunr.QueryParser.prototype.nextClause = function () { var completedClause = this.currentClause this.query.clause(completedClause) this.currentClause = {} } lunr.QueryParser.parseClause = function (parser) { var lexeme = parser.peekLexeme() if (lexeme == undefined) { return } switch (lexeme.type) { case lunr.QueryLexer.PRESENCE: return lunr.QueryParser.parsePresence case lunr.QueryLexer.FIELD: return lunr.QueryParser.parseField case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expected either a field or a term, found " + lexeme.type if (lexeme.str.length >= 1) { errorMessage += " with value '" + lexeme.str + "'" } throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } } lunr.QueryParser.parsePresence = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } switch (lexeme.str) { case "-": parser.currentClause.presence = lunr.Query.presence.PROHIBITED break case "+": parser.currentClause.presence = lunr.Query.presence.REQUIRED break default: var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { var errorMessage = "expecting term or field, found nothing" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } switch (nextLexeme.type) { case lunr.QueryLexer.FIELD: return lunr.QueryParser.parseField case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseField = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } if (parser.query.allFields.indexOf(lexeme.str) == -1) { var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.fields = [lexeme.str] var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { var errorMessage = "expecting term, found nothing" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expecting term, found '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseTerm = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } parser.currentClause.term = lexeme.str.toLowerCase() if (lexeme.str.indexOf("*") != -1) { parser.currentClause.usePipeline = false } var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseEditDistance = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } var editDistance = parseInt(lexeme.str, 10) if (isNaN(editDistance)) { var errorMessage = "edit distance must be numeric" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.editDistance = editDistance var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseBoost = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } var boost = parseInt(lexeme.str, 10) if (isNaN(boost)) { var errorMessage = "boost must be numeric" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.boost = boost var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ;(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) root.lunr = factory() } }(this, function () { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return lunr })) })(); ================================================ FILE: docs/site/search/main.js ================================================ function getSearchTermFromLocation() { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == 'q') { return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); } } } function joinUrl (base, path) { if (path.substring(0, 1) === "/") { // path starts with `/`. Thus it is absolute. return path; } if (base.substring(base.length-1) === "/") { // base ends with `/` return base + path; } return base + "/" + path; } function escapeHtml (value) { return value.replace(/&/g, '&') .replace(/"/g, '"') .replace(//g, '>'); } function formatResult (location, title, summary) { return ''; } function displayResults (results) { var search_results = document.getElementById("mkdocs-search-results"); while (search_results.firstChild) { search_results.removeChild(search_results.firstChild); } if (results.length > 0){ for (var i=0; i < results.length; i++){ var result = results[i]; var html = formatResult(result.location, result.title, result.summary); search_results.insertAdjacentHTML('beforeend', html); } } else { var noResultsText = search_results.getAttribute('data-no-results-text'); if (!noResultsText) { noResultsText = "No results found"; } search_results.insertAdjacentHTML('beforeend', '

    ' + noResultsText + '

    '); } } function doSearch () { var query = document.getElementById('mkdocs-search-query').value; if (query.length > min_search_length) { if (!window.Worker) { displayResults(search(query)); } else { searchWorker.postMessage({query: query}); } } else { // Clear results for short queries displayResults([]); } } function initSearch () { var search_input = document.getElementById('mkdocs-search-query'); if (search_input) { search_input.addEventListener("keyup", doSearch); } var term = getSearchTermFromLocation(); if (term) { search_input.value = term; doSearch(); } } function onWorkerMessage (e) { if (e.data.allowSearch) { initSearch(); } else if (e.data.results) { var results = e.data.results; displayResults(results); } else if (e.data.config) { min_search_length = e.data.config.min_search_length-1; } } if (!window.Worker) { console.log('Web Worker API not supported'); // load index in main thread $.getScript(joinUrl(base_url, "search/worker.js")).done(function () { console.log('Loaded worker'); init(); window.postMessage = function (msg) { onWorkerMessage({data: msg}); }; }).fail(function (jqxhr, settings, exception) { console.error('Could not load worker.js'); }); } else { // Wrap search in a web worker var searchWorker = new Worker(joinUrl(base_url, "search/worker.js")); searchWorker.postMessage({init: true}); searchWorker.onmessage = onWorkerMessage; } ================================================ FILE: docs/site/search/search_index.json ================================================ {"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"regenie regenie is a C++ program for whole genome regression modelling of large genome-wide association studies . It is developed and supported by a team of scientists at the Regeneron Genetics Center. The method has the following properties It works on quantitative and binary traits, including binary traits with unbalanced case-control ratios It can handle population structure and relatedness It can process multiple phenotypes at once efficiently For binary traits, it supports Firth logistic regression and an SPA test It can perform gene/region-based tests (Burden, SBAT , SKAT/SKATO, ACATV/ACATO) It can perform interaction tests (GxE, GxG) as well as conditional analyses Meta-analysis of REGENIE summary statistics can be performed using REMETA It is fast and memory efficient \ud83d\udd25 It supports the BGEN , PLINK bed/bim/fam and PLINK2 pgen/pvar/psam genetic data formats It is ideally suited for implementation in Apache Spark (see GLOW ) It can be installed with Conda Citation Mbatchou, J., Barnard, L., Backman, J. et al. Computationally efficient whole-genome regression for quantitative and binary traits. Nat Genet 53, 1097\u20131103 (2021). https://doi.org/10.1038/s41588-021-00870-7 License regenie is distributed under an MIT license . Contact If you have any questions about regenie please contact jonathan.marchini@regeneron.com joelle.mbatchou@regeneron.com If you want to submit a issue concerning the software please do so using the regenie Github repository . Report Issue Active Issues","title":"Home"},{"location":"#regenie","text":"regenie is a C++ program for whole genome regression modelling of large genome-wide association studies . It is developed and supported by a team of scientists at the Regeneron Genetics Center. The method has the following properties It works on quantitative and binary traits, including binary traits with unbalanced case-control ratios It can handle population structure and relatedness It can process multiple phenotypes at once efficiently For binary traits, it supports Firth logistic regression and an SPA test It can perform gene/region-based tests (Burden, SBAT , SKAT/SKATO, ACATV/ACATO) It can perform interaction tests (GxE, GxG) as well as conditional analyses Meta-analysis of REGENIE summary statistics can be performed using REMETA It is fast and memory efficient \ud83d\udd25 It supports the BGEN , PLINK bed/bim/fam and PLINK2 pgen/pvar/psam genetic data formats It is ideally suited for implementation in Apache Spark (see GLOW ) It can be installed with Conda","title":"regenie"},{"location":"#citation","text":"Mbatchou, J., Barnard, L., Backman, J. et al. Computationally efficient whole-genome regression for quantitative and binary traits. Nat Genet 53, 1097\u20131103 (2021). https://doi.org/10.1038/s41588-021-00870-7","title":"Citation"},{"location":"#license","text":"regenie is distributed under an MIT license .","title":"License"},{"location":"#contact","text":"If you have any questions about regenie please contact jonathan.marchini@regeneron.com joelle.mbatchou@regeneron.com If you want to submit a issue concerning the software please do so using the regenie Github repository . Report Issue Active Issues","title":"Contact"},{"location":"faq/","text":"Frequently asked questions General Why doesn\u2019t regenie need a genetic relatedness matrix (GRM)? regenie performs whole genome regression using the following model Y = X\\beta + \\epsilon where Y_{N\\times 1} is a phenotype, X_{N\\times M} is a genotype matrix, and \\epsilon_i\\sim N(0,\\sigma^2) . This model has close ties to a linear mixed model (LMM) based on an infinitesimal model Y = u + \\epsilon where u\\sim N(0,\\sigma_u^2 K) with K_{N\\times N}=XX^T/M is referred to as the genetic relatedness matrix (GRM). In the LMM, the polygenic effects have been integrated out so that model only involves the GRM $K$ through a variance component in the covariance matrix of the trait. In regenie , we directly estimate the polygenic effects parameter \\beta by using ridge regression, which corresponds to fitting a linear regression model with a L2 penalty to impose shrinkage. Hence, we bypass having to use the GRM K and use the polygenic effect estimates X\\hat{\\beta} to control for population structure when testing variants for association. Can regenie be run on small sample sizes? For quantitative traits, we have not obtained issues running regenie on small data sets. For binary traits, we have obtained successful runs of regenie (step 1 and 2) on data sets with as little as 300 samples. A few factors to consider: Convergence issues may occur in step 1 (all the more if a trait is highly unbalanced) - see below Similarly, convergence issues may occur in step 2 when using Firth approximation - see below Note: we have found that regenie can get conservative in more extreme relatedness scenarios so we recommend not to use it for smaller cohorts with high amounts of relatedness like founder populations where exact mixed-model methods can be used Step 1 What block size to use in step 1? We recommend to use blocks of size 1000 as we have observed that it leads to a reasonable number of ridge predictors at level 1 (e.g. 2,500 with 500K SNPs used and the default regenie parameters) and have noticed little change in the final predictions when varying the block size. How many variants to use in step 1? We recommend to use a smaller set of about 500K directly genotyped SNPs in step 1, which should be sufficient to capture genome-wide polygenic effects. Note that using too many SNPs in Step 1 (e.g. >1M) can lead to a high computational burden due to the resulting higher number of predictors in the level 1 models. What do I do if I get the error \"Uh-oh, SNP XX has low variance (=XX)\" in step 1? This is due to variants with very low minor allele count (MAC) being included in step 1. To avoid this, you should use a MAC filter to remove such variants in a pre-processing step before running Regenie. For example, in PLINK2 you would use the --mac option and obtain a list of variants that pass the MAC filter (note that if you are using --keep/--remove in Regenie, you should also use it in the PLINK2 command) plink2 \\ --bfile my_bed_file \\ --mac 100 \\ --write-snplist \\ --out snps_pass You would then use the output file in regenie as --extract snps_pass.snplist (and this would avoid having to make a new genotype file). What to do if Step 1 of regenie failed for a binary trait when fitting the penalized logsitic regression model? This can occur when the sample size used to fit the model is small and/or if the trait is extremely unbalanced. If using K-fold CV, switch to LOOCV (option --loocv ) to increase the size of the sample used to fit the model (note: LOOCV is now used by default when the sample size is below 5,000) If it is due to quasi-separation (i.e. Var(Y)=0 occurred in model fitting), either increase the sample size using LOOCV or increase the MAF threshold for variants included in step 1 analysis Step 2 What to do if Step 2 of regenie fails when fitting the null model for the approximate Firth correction? This can occur when the sample size used to fit the model is small and/or if the trait is extremely unbalanced. We have implemented the same measures as in the logistf function in R to avoid convergence issues, which include the use of a step size threshold when performing a Newton step. We first try fitting the model with a step size threshold that is more liberal (=25) as well as a maximum number of iterations of 1,000 and if convergence fails, we retry the model fit using a more stringent step size threshold (=5) and a higher threshold for the number of iterations (=5,000), which will slow down convergence. The user can also specify a maximum step size threshold using --maxstep-null (use value <5) as well as increase the maximum number of iterations using --maxiter-null (use value >5000). In that case, no retries are perfomed if convergence fails. We recommend to test chromosomes separately (using --chr ) as these parameters may need to be altered when fitting the null model for each chromosome What is reported in A1FREQ when building masks? For the max and comphet rules, the resulting burden masks take on values in [0,2] just like single variants so we compute A1FREQ the same way as done for single variants (i.e. mean(G)/2 where G is a genotype vector). For the sum rule, A1FREQ is computed as the average of the effect allele frequencies across all sites included in the mask. How is missingness handled in the genotype data? Missing genotypes are imputed with per-SNP averages when performing association tests (note: the genotype summaries reported like AAF, INFO are only based on non-missing genotypes).","title":"F.A.Q."},{"location":"faq/#frequently-asked-questions","text":"","title":"Frequently asked questions"},{"location":"faq/#general","text":"Why doesn\u2019t regenie need a genetic relatedness matrix (GRM)? regenie performs whole genome regression using the following model Y = X\\beta + \\epsilon where Y_{N\\times 1} is a phenotype, X_{N\\times M} is a genotype matrix, and \\epsilon_i\\sim N(0,\\sigma^2) . This model has close ties to a linear mixed model (LMM) based on an infinitesimal model Y = u + \\epsilon where u\\sim N(0,\\sigma_u^2 K) with K_{N\\times N}=XX^T/M is referred to as the genetic relatedness matrix (GRM). In the LMM, the polygenic effects have been integrated out so that model only involves the GRM $K$ through a variance component in the covariance matrix of the trait. In regenie , we directly estimate the polygenic effects parameter \\beta by using ridge regression, which corresponds to fitting a linear regression model with a L2 penalty to impose shrinkage. Hence, we bypass having to use the GRM K and use the polygenic effect estimates X\\hat{\\beta} to control for population structure when testing variants for association. Can regenie be run on small sample sizes? For quantitative traits, we have not obtained issues running regenie on small data sets. For binary traits, we have obtained successful runs of regenie (step 1 and 2) on data sets with as little as 300 samples. A few factors to consider: Convergence issues may occur in step 1 (all the more if a trait is highly unbalanced) - see below Similarly, convergence issues may occur in step 2 when using Firth approximation - see below Note: we have found that regenie can get conservative in more extreme relatedness scenarios so we recommend not to use it for smaller cohorts with high amounts of relatedness like founder populations where exact mixed-model methods can be used","title":"General"},{"location":"faq/#step-1","text":"What block size to use in step 1? We recommend to use blocks of size 1000 as we have observed that it leads to a reasonable number of ridge predictors at level 1 (e.g. 2,500 with 500K SNPs used and the default regenie parameters) and have noticed little change in the final predictions when varying the block size. How many variants to use in step 1? We recommend to use a smaller set of about 500K directly genotyped SNPs in step 1, which should be sufficient to capture genome-wide polygenic effects. Note that using too many SNPs in Step 1 (e.g. >1M) can lead to a high computational burden due to the resulting higher number of predictors in the level 1 models. What do I do if I get the error \"Uh-oh, SNP XX has low variance (=XX)\" in step 1? This is due to variants with very low minor allele count (MAC) being included in step 1. To avoid this, you should use a MAC filter to remove such variants in a pre-processing step before running Regenie. For example, in PLINK2 you would use the --mac option and obtain a list of variants that pass the MAC filter (note that if you are using --keep/--remove in Regenie, you should also use it in the PLINK2 command) plink2 \\ --bfile my_bed_file \\ --mac 100 \\ --write-snplist \\ --out snps_pass You would then use the output file in regenie as --extract snps_pass.snplist (and this would avoid having to make a new genotype file). What to do if Step 1 of regenie failed for a binary trait when fitting the penalized logsitic regression model? This can occur when the sample size used to fit the model is small and/or if the trait is extremely unbalanced. If using K-fold CV, switch to LOOCV (option --loocv ) to increase the size of the sample used to fit the model (note: LOOCV is now used by default when the sample size is below 5,000) If it is due to quasi-separation (i.e. Var(Y)=0 occurred in model fitting), either increase the sample size using LOOCV or increase the MAF threshold for variants included in step 1 analysis","title":"Step 1"},{"location":"faq/#step-2","text":"What to do if Step 2 of regenie fails when fitting the null model for the approximate Firth correction? This can occur when the sample size used to fit the model is small and/or if the trait is extremely unbalanced. We have implemented the same measures as in the logistf function in R to avoid convergence issues, which include the use of a step size threshold when performing a Newton step. We first try fitting the model with a step size threshold that is more liberal (=25) as well as a maximum number of iterations of 1,000 and if convergence fails, we retry the model fit using a more stringent step size threshold (=5) and a higher threshold for the number of iterations (=5,000), which will slow down convergence. The user can also specify a maximum step size threshold using --maxstep-null (use value <5) as well as increase the maximum number of iterations using --maxiter-null (use value >5000). In that case, no retries are perfomed if convergence fails. We recommend to test chromosomes separately (using --chr ) as these parameters may need to be altered when fitting the null model for each chromosome What is reported in A1FREQ when building masks? For the max and comphet rules, the resulting burden masks take on values in [0,2] just like single variants so we compute A1FREQ the same way as done for single variants (i.e. mean(G)/2 where G is a genotype vector). For the sum rule, A1FREQ is computed as the average of the effect allele frequencies across all sites included in the mask. How is missingness handled in the genotype data? Missing genotypes are imputed with per-SNP averages when performing association tests (note: the genotype summaries reported like AAF, INFO are only based on non-missing genotypes).","title":"Step 2"},{"location":"install/","text":"Download The regenie source code is hosted on Github . Installation Pre-requisites regenie requires compilation with GCC version >= 5.1 (on Linux) or Clang version >=3.3 (on Mac OSX). It also requires having GFortran library installed. Pre-compiled binaries Pre-compiled binaries are available in the Github repository . These are provided for Linux (including Centos7) and Mac OSX computing environments and are statically linked. For the Linux binaries, users should have GLIBC version >= 2.22 installed. Additionally, they are provided compiled with Intel MKL library which will provide speedups for many of the operations done in regenie . Standard installation regenie requires the BGEN library so you will need to download and install that library. Edit the BGEN_PATH variable in the Makefile to the BGEN library path. On the command line type make while in the main source code directory. This should produce the executable called regenie . regenie has been enhanced to allow for gzip compressed input (for phenotype/covariate files) and output (for association results files) using the Boost Iostream library. If this library is installed on the system, you should compile using make HAS_BOOST_IOSTREAM=1 . Furthermore, we have enabled compilation of regenie with the Intel Math Kernel (MKL) library. You first need to have it installed on your system and modify the MKLROOT variable in the Makefile to the installed MKL library path. With CMake You can compile the binary using CMake version >=3.13 (instead of make as above). mkdir -p build cd build BGEN_PATH= cmake .. make This will generate the binary in the build/ subdirectory. To use with Boost Iostreams and/or Intel MKL library, add the corresponding flags before the cmake command on line 3 (e.g. BGEN_PATH= HAS_BOOST_IOSTREAM=1 cmake .. ). With Docker Alternatively, you can use a Docker image to run regenie . A guide to using docker is available on the Github page . With conda To install with conda , you can use the following commands: # create new environment conda create -n regenie_env -c conda-forge -c bioconda regenie # load it conda activate regenie_env Computing requirements We have tested regenie on 64-bit Linux and 64-bit Mac OSX computing environments. Note that for Mac OSX computing environments, compiling is done without OpenMP, as the library is not built-in by default and has to be installed separately. Memory usage In both Step 1 and Step 2 of a regenie run the genetic data file is read once, in blocks of SNPs, so at no point is the full dataset ever stored in memory. regenie uses a dimension reduction approach using ridge regression to produce a relatively small set of genetic predictors, that are then used to fit a whole-genome regression model. These genetic predictors are stored in memory by default, and can be relatively large if many phenotypes are stored at once. For example, if there are P phenotypes, M SNPs and N samples, and a block size of B SNPs is used with R ridge parameters, then regenie needs to store roughly N\\times M/B\\times R doubles per phenotype, which is 8Gb per phenotype when M=500,000, N=400,000, B =1,000,R=5 and 200Gb in total when P=25 . However, the --lowmem option can be used to avoid that memory usage, at negligible extra computational cost, by writing temporary files to disk. Threading regenie can take advantage of multiple cores using threading. The number of threads can be specified using the --threads option. regenie uses the Eigen library for efficient linear algebra operations and this uses threading where possible. For PLINK bed/bim/fam files, PLINK2 pgen/pvar/psam files, as well as BGEN v1.2 files with 8-bit encoding (format used for UK Biobank 500K imputed data), step 2 of regenie has been optimized by using multithreading through OpenMP . When running the SKAT/ACAT gene-based tests, we recommend to use at most 2 threads and instead parallelize the runs over partitions of the genome (e.g. groups of genes). For Windows platforms If you are on a Windows machine, we recommend to use Windows Subsystem for Linux (WSL) to install a Ubuntu distribution so that you will be able to run REGENIE from a Linux terminal. You can download pre-compiled REGENIE binaries from the Github repository (note that you will need to install the libgomp1 library). Note: from your Windows command prompt, you can run REGENIE using wsl regenie .","title":"Install"},{"location":"install/#download","text":"The regenie source code is hosted on Github .","title":"Download"},{"location":"install/#installation","text":"","title":"Installation"},{"location":"install/#pre-compiled-binaries","text":"Pre-compiled binaries are available in the Github repository . These are provided for Linux (including Centos7) and Mac OSX computing environments and are statically linked. For the Linux binaries, users should have GLIBC version >= 2.22 installed. Additionally, they are provided compiled with Intel MKL library which will provide speedups for many of the operations done in regenie .","title":"Pre-compiled binaries"},{"location":"install/#standard-installation","text":"regenie requires the BGEN library so you will need to download and install that library. Edit the BGEN_PATH variable in the Makefile to the BGEN library path. On the command line type make while in the main source code directory. This should produce the executable called regenie . regenie has been enhanced to allow for gzip compressed input (for phenotype/covariate files) and output (for association results files) using the Boost Iostream library. If this library is installed on the system, you should compile using make HAS_BOOST_IOSTREAM=1 . Furthermore, we have enabled compilation of regenie with the Intel Math Kernel (MKL) library. You first need to have it installed on your system and modify the MKLROOT variable in the Makefile to the installed MKL library path.","title":"Standard installation"},{"location":"install/#with-cmake","text":"You can compile the binary using CMake version >=3.13 (instead of make as above). mkdir -p build cd build BGEN_PATH= cmake .. make This will generate the binary in the build/ subdirectory. To use with Boost Iostreams and/or Intel MKL library, add the corresponding flags before the cmake command on line 3 (e.g. BGEN_PATH= HAS_BOOST_IOSTREAM=1 cmake .. ).","title":"With CMake"},{"location":"install/#with-docker","text":"Alternatively, you can use a Docker image to run regenie . A guide to using docker is available on the Github page .","title":"With Docker"},{"location":"install/#with-conda","text":"To install with conda , you can use the following commands: # create new environment conda create -n regenie_env -c conda-forge -c bioconda regenie # load it conda activate regenie_env","title":"With conda"},{"location":"install/#computing-requirements","text":"We have tested regenie on 64-bit Linux and 64-bit Mac OSX computing environments. Note that for Mac OSX computing environments, compiling is done without OpenMP, as the library is not built-in by default and has to be installed separately.","title":"Computing requirements"},{"location":"install/#memory-usage","text":"In both Step 1 and Step 2 of a regenie run the genetic data file is read once, in blocks of SNPs, so at no point is the full dataset ever stored in memory. regenie uses a dimension reduction approach using ridge regression to produce a relatively small set of genetic predictors, that are then used to fit a whole-genome regression model. These genetic predictors are stored in memory by default, and can be relatively large if many phenotypes are stored at once. For example, if there are P phenotypes, M SNPs and N samples, and a block size of B SNPs is used with R ridge parameters, then regenie needs to store roughly N\\times M/B\\times R doubles per phenotype, which is 8Gb per phenotype when M=500,000, N=400,000, B =1,000,R=5 and 200Gb in total when P=25 . However, the --lowmem option can be used to avoid that memory usage, at negligible extra computational cost, by writing temporary files to disk.","title":"Memory usage"},{"location":"install/#threading","text":"regenie can take advantage of multiple cores using threading. The number of threads can be specified using the --threads option. regenie uses the Eigen library for efficient linear algebra operations and this uses threading where possible. For PLINK bed/bim/fam files, PLINK2 pgen/pvar/psam files, as well as BGEN v1.2 files with 8-bit encoding (format used for UK Biobank 500K imputed data), step 2 of regenie has been optimized by using multithreading through OpenMP . When running the SKAT/ACAT gene-based tests, we recommend to use at most 2 threads and instead parallelize the runs over partitions of the genome (e.g. groups of genes).","title":"Threading"},{"location":"install/#for-windows-platforms","text":"If you are on a Windows machine, we recommend to use Windows Subsystem for Linux (WSL) to install a Ubuntu distribution so that you will be able to run REGENIE from a Linux terminal. You can download pre-compiled REGENIE binaries from the Github repository (note that you will need to install the libgomp1 library). Note: from your Windows command prompt, you can run REGENIE using wsl regenie .","title":"For Windows platforms"},{"location":"options/","text":"Getting started To run regenie , use the command ./regenie on the command line, followed by options and flags as needed. To get a full list of options use ./regenie --help The directory examples/ contains some small example files that are useful when getting started. A test run on a set of binary traits can be achieved by the following 2 commands. In Step 1 , the whole genome regression model is fit to the traits, and a set of genomic predictions are produced as output ./regenie \\ --step 1 \\ --bed example/example \\ --exclude example/snplist_rm.txt \\ --covarFile example/covariates.txt \\ --phenoFile example/phenotype_bin.txt \\ --remove example/fid_iid_to_remove.txt \\ --bsize 100 \\ --bt --lowmem \\ --lowmem-prefix tmp_rg \\ --out fit_bin_out In Step 2 , a set of imputed SNPs are tested for association using a Firth logistic regression model ./regenie \\ --step 2 \\ --bgen example/example.bgen \\ --covarFile example/covariates.txt \\ --phenoFile example/phenotype_bin.txt \\ --remove example/fid_iid_to_remove.txt \\ --bsize 200 \\ --bt \\ --firth --approx \\ --pThresh 0.01 \\ --pred fit_bin_out_pred.list \\ --out test_bin_out_firth One of the output files from these two commands is included in example/test_bin_out_firth_Y1.regenie . Basic options Input Option Argument Type Description --bgen, --bed, --pgen FILE Required Input genetic data file. Either BGEN file eg. file.bgen , or bed/bim/fam prefix that assumes file.bed , file.bim , file.fam exist, or pgen/pvar/psam prefix that assumes file.pgen , file.pvar , file.psam exist --sample FILE Optional Sample file corresponding to input BGEN file --bgi FILE Optional Index bgi file corresponding to input BGEN file --ref-first FLAG Optional Specify to use the first allele as the reference allele for BGEN or PLINK bed/bim/fam file input [default is to use the last allele as the reference] --keep FILE Optional Inclusion file that lists individuals to retain in the analysis --remove FILE Optional Exclusion file that lists individuals to remove from the analysis --extract FILE Optional Inclusion file that lists IDs of variants to keep --exclude FILE Optional Exclusion file that lists IDs of variants to remove --extract-or FILE Optional Inclusion file that lists IDs of variants to keep regardless of minimum MAC filter --exclude-or FILE Optional Exclusion file that lists IDs of variants to remove unless MAC is above threshold --phenoFile FILE Required Phenotypes file --phenoCol STRING Optional Use for each phenotype you want to include in the analysis --phenoColList STRING Optional Comma separated list of phenotypes to include in the analysis --eventColList STRING Optional Comma separated list of columns in the phenotype file to include in the analysis that contain the event times --phenoExcludeList STRING Optional Comma separated list of phenotypes to ignore from the analysis --covarFile FILE Optional Covariates file --covarCol STRING Optional Use for each covariate you want to include in the analysis --covarColList STRING Optional Comma separated list of covariates to include in the analysis --catCovarList STRING Optional Comma separated list of categorical covariates to include in the analysis --covarExcludeList STRING Optional Comma separated list of covariates to ignore --pred FILE Optional File containing predictions from Step 1 (see Overview). This is required for --step 2 --tpheno-file STRING Optional to use a phenotype file in transposed format (e.g. BED format) --tpheno-indexCol INT Optional index of phenotype name column in transposed phenotype file --tpheno-ignoreCols INT Optional indexes of columns to ignore in transposed phenotype file --iid-only FLAG Optional to specify if header in transposed phenotype file only contains sample IID (assume FID=IID) Note: Parameter expansion can be used when specifying phenotypes/covariates (e.g. --covarCol PC{1:10} ). Also, multiple files can be specified for --extract/--exclude/--keep/--remove by using a comma-separated list. Genetic data file format regenie can read BGEN files, bed/bim/fam files or pgen/psam/pvar files in Step 1 and Step 2. The BGEN file format is described here . The bed/bim/fam file format is described here . The pgen/pvar/psam file format is described here . Tools useful for genetic data file format conversion are : PLINK , QCTOOL , BCFTOOLS . Step 2 of regenie can be sped up by using BGEN files using v1.2 format with 8 bits encoding (genotype file can be generated with PLINK2 using option --export bgen-1.2 'bits=8' ) as well as having an accompanying .bgi index file (a useful tool to create such file is bgenix which is part of the BGEN library). To include X chromosome genotypes in step 1 and/or step 2, males should be coded as diploid so that their genotypes are 0/2 (this is done automatically for BED and PGEN file formats with haploid genotypes). Chromosome values of 23 (for human analyses), X, Y, XY, PAR1 and PAR2 are all acceptable and will be collapsed into a single chromosome. Sample inclusion/exclusion file format 2 2 7 7 . No header. Each line starts with individual FID IID. Space/tab separated. Samples listed in the file that are not in bgen/bed/pgen file are ignored. Variant inclusion/exclusion file format 20 31 . No header. Each line must start with variant ID (if there are additional columns, file must be space/tab separated). Variants listed in this file that are not in bgen/bed/pgen file are ignored. Covariate file format FID IID V1 V2 V3 1 1 1.46837294454993 1.93779743016325 0.152887004505393 2 2 -1.2234390803815 -1.63408619199948 -0.190201446835255 3 3 0.0711531925667286 0.0863906292357564 0.14254739715665 . Line 1 : Header with FID, IID and C covariate names. Followed by lines of C+2 values. Space/tab separated. Each line contains individual FID and IID followed by C covariate values. Samples listed in this file that are not in bgen/bed/pgen file are ignored. Genotyped samples that are not in this file are removed from the analysis as well as samples with missing values at any of the covariates included. If --step 2 is specified, then the covariate file should be the same as that used in Step 1. Phenotype file format FID IID Y1 Y2 1 1 1.64818554321186 2.2765234736685 2 2 -2.67352013711554 -1.53680421614647 3 3 0.217542851471485 0.437289912695016 . Line 1 : Header with FID, IID and P phenotypes names. Followed by lines of P+2 values. Space/tab separated. Each line contains individual FID and IID followed by P phenotype values (for binary traits, must be coded as 0=control, 1=case, NA=missing unless using --1 ). Samples listed in this file that are not in bgen/bed/pgen file are ignored. Genotyped samples that are not in this file are removed from the analysis. Missing values must be coded as NA. With QTs, missing values are mean-imputed in Step 1 and they are dropped when testing each phenotype in Step 2 (unless using --force-impute ). With BTs, missing values are mean-imputed in Step 1 when fitting the level 0 linear ridge regression and they are dropped when fitting the level 1 logistic ridge regression for each trait . In Step 2, missing values are dropped when testing each trait. To remove all samples that have missing values at any of the P phenotypes, use option --strict in Step 1 and 2. If using the transposed phenotype file format with option --tpheno-file , the header line must contain subject IDs as \"FID_IID\", otherwise use option --iid-only and only include IIDs (so will assume FID=IID). Predictions file format Running --step 1 --out foo will produce A set of files containing genomic predictions for each phenotype from Step 1 (see Output section below). A file called foo_pred.list listing the locations of the prediction files. The file list is needed as an input file when using --step 2 via the --pred option. It has one line per phenotype (in any order) that specifies the name of the phenotype and its corresponding prediction file name. Each phenotype must have exactly one prediction file and phenotype names must match with those in the phenotype file. Phenotypes in this file not included in the analysis are ignored. Each prediction file contains the genetic predictions for the phenotype (space separated). Line 1 starts with 'FID_IID' followed by $N$ sample identifiers. It is followed by 23 lines containing the genetic predictions for each chromosome (sex chromosomes are collapsed into chromosome 23). More specifically, each line has $N+1$ values which are the chromosome number followed by the $N$ leave-one chromosome out (LOCO) predictions for each individual. Samples in this file not in the bed/pgen/bgen input file are ignored. Genotyped samples not present in this file will be ignored in the analysis of the corresponding trait. Samples with missing LOCO predictions must have their corresponding phenotype value set to missing. Options Option Argument Type Description --step INT Required specify step for the regenie run (see Overview) [argument can be 1 or 2 ] --qt FLAG Optional specify that traits are quantitative (this is the default so can be ommitted) --bt FLAG Optional specify that traits are binary with 0=control,1=case,NA=missing --t2e FLAG Optional specify that traits are time-to-event data with 0=censoring,1=event,NA=missing in event column -1,--cc12 FLAG Optional specify to use 1/2/NA encoding for binary traits (1=control,2=case,NA=missing) --bsize INT Required size of the genotype blocks --cv INT Optional number of cross validation (CV) folds [default is 5] --loocv FLAG Optional flag to use leave-one out cross validation --lowmem FLAG Optional flag to reduce memory usage by writing level 0 predictions to disk (details below). This is very useful if the number of traits is large (e.g. greater than 10) --lowmem-prefix FILE PREFIX Optional prefix where to temporarily write the level 0 predictions --split-l0 PREFIX,N Optional split level 0 across N jobs and set prefix of output files of level 0 predictions --run-l0 FILE,K Optional run level 0 for job K in {1..N} specifying the master file created from '--split-l0' --run-l1 FILE Optional run level 1 specifying the master file from '--split-l0' --l1-phenoList STRING Optional to specify a subset of phenotypes to analyze when using --run-l1 --keep-l0 FLAG Optional avoid deleting the level 0 predictions written on disk after fitting the level 1 models --print-prs FLAG Optional flag to print whole genome predictions (i.e. PRS) without using LOCO scheme --force-step1 FLAG Optional flag to run step 1 when >1M variants are used (not recommened) --minCaseCount INT Optional flag to ignore BTs with low case counts [default is 10] --apply-rint FLAG Optional to apply Rank Inverse Normal Transformation (RINT) to quantitative phenotypes (use in both Step 1 & 2) --nb INT Optional number of blocks (determined from block size if not provided) --strict FLAG Optional flag to removing samples with missing data at any of the phenotypes --ignore-pred FLAG Optional skip reading the file specified by --pred (corresponds to simple linear/logistic regression) --htp STRING Optional to output the summary statistics file in the HTP format (string should correspond to cohort name, e.g. 'UKB_450_EUR') --exact-p FLAG Optional avoid capping p-values at 2.2E-307 in the HTP format summary statistics output --use-relative-path FLAG Optional to use relative paths instead of absolute ones for the step 1 output pred.list file --use-prs FLAG Optional flag to use whole genome PRS in --pred (this is output in step 1 when using --print-prs ) --gz FLAG Optional flag to output files in compressed gzip format (LOCO prediction files in step 1 and association results files in step 2) [this only works when compiling with Boost Iostream library (see Install tab)] . --force-impute FLAG Optional flag to keep and impute missing observations for QTs in step 2 --write-samples FLAG Optional flag to write sample IDs for those kept in the analysis for each trait in step 2 --print-pheno FLAG Optional flag to write phenotype name in the first line of the sample ID files when using --write-samples --firth FLAG Optional specify to use Firth likelihood ratio test (LRT) as fallback for p-values less than threshold --approx FLAG Optional flag to use approximate Firth LRT for computational speedup (only works when option --firth is used) --firth-se FLAG Optional flag to compute SE based on effect size and LRT p-value when using Firth correction (instead of based on Hessian of unpenalized log-likelihood) --write-null-firth FLAG Optional to write the null estimates for approximate Firth [can be used in step 1 or 2] --compute-all FLAG Optional to write the null Firth estimates for all chromosomes (regardless of the genotype file) --use-null-firth FILE Optional to use stored null estimates for approximate Firth in step 2 --spa FLAG Optional specify to use Saddlepoint approximation as fallback for p-values less than threshold --pThresh FLOAT Optional P-value threshold below which to apply Firth/SPA correction [default is 0.05] --test STRING Optional specify to carry out dominant or recessive test [default is additive; argument can be dominant or recessive ] --chr INT Optional specify which chromosomes to test in step 2 (use for each chromosome to include) --chrList STRING Optional Comma separated list of chromosomes to test in step 2 --range STRING Optional specify chromosome region for variants to test in step 2 [format=CHR:MINPOS-MAXPOS] --minMAC FLOAT Optional flag to specify the minimum minor allele count (MAC) when testing variants [default is 5]. Variants with lower MAC are ignored. --minINFO FLOAT Optional flag to specify the minimum imputation info score (IMPUTE/MACH R^2) when testing variants. Variants with lower info score are ignored. --sex-specific STRING Optional to perform sex-specific analyses [either 'male'/'female'] --af-cc FLAG Optional to output A1FREQ in case/controls separately in the step 2 result file --no-split FLAG Optional flag to have summary statistics for all traits output in the same file --starting-block INT Optional to start step 2 at a specific block/set number (useful if program crashes during a job) --nauto INT Optional number of autosomal chromosomes (for non-human studies) [default is 22] --maxCatLevels INT Optional maximum number of levels for categorical covariates (for non-human studies) [default is 10] --niter INT Optional maximum number of iterations for logistic regression [default is 30] --maxstep-null INT Optional maximum step size for logistic model with Firth penalty under the null [default is 25] --maxiter-null INT Optional maximum number of iterations for logistic model with Firth penalty under the null [default is 1000] --par-region STRING Optional specify build code to determine bounds for PAR1/PAR2 regions (can be 'b36/b37/b38/hg18/hg19/hg38' or 'start,end' bp bounds of non-PAR region) [default is hg38] --force-qt FLAG Optional force QT run for binary traits --threads INT Optional number of computational threads to use [default=all-1] --debug FLAG Optional debug flag (for use by developers) --verbose FLAG Optional verbose screen output --version FLAG Optional print version number and exit --help FLAG Optional Prints usage and options list to screen When step 1 of regenie is run in low memory mode (i.e. using --lowmem ), temporary files are created on disk (using --lowmem-prefix tmp_prefix determines where the files are written [as in tmp_prefix_l0_Y1 ,..., tmp_prefix_l0_YP for P phenotypes]). If the prefix is not specified, the default is to use the prefix specified by --out (see below). These are automatically deleted at the end of the program (unless the run was not successful in which case the user would need to delete the files) See the Wiki page for more details on how to run the level 0 models for Step 1 of regenie in parallel. Output Option Argument Type Description --out FILE PREFIX Required Output files that depends on --step A log file file.log of the output is generated. Using --step 1 --out file For the P phenotypes, files file_1.loco ,..., file_P.loco are output with the per-chromosome LOCO predictions as rows of the files (following the order of the phenotypes in the phenotype file header). If option --gz was used, the files will be compressed in gzip format and have extension .loco.gz . Genotyped individuals specified using option --remove are excluded from this file. Individuals with missing phenotype values kept in the analysis are included in the file and have their predictions set to missing. The list of blup files needed for step 2 (association testing) is written to file_pred.list . If using --print-prs , files file_1.prs ,..., file_P.prs will be written with the whole genome predictions (i.e. PRS) without using LOCO scheme (similar format as the .loco files). The list of these files is written to file_prs.list and can be used in step 2 with --pred and specifying flag --use-prs . Note that as these are not obtained using a LOCO scheme, association tests could suffer from proximal contamination. If using option --write-null-firth , the estimates for approximate Firth under the null will be written to files file_1.firth,...,file_P.firth and the list of these files is written to file_firth.list . This can be used in step 2 as --use-null-firth file_firth.list . Note that it assumes the same set of covariates are used in Step 1 and 2. Using --step 2 --out file By default, results are written in separate files for each phenotype file_.regenie,...,file_.regenie . Each file has one line per SNP along with a header line. If option --gz was used, the files will be compressed in gzip format and have extension .regenie.gz . The entries of each row specify chromosome, position, ID, reference allele (allele 0), alternative allele (allele 1), frequency of the alternative allele, sample size and the test performed (additive/dominant/recessive). With BGEN/PGEN files with dosages, the imputation INFO score is provided (IMPUTE info score for BGEN and Mach Rsq for PGEN). Allele frequency, sample size and INFO score, if applicable, are computed using only non-missing samples for each phenotype. These are followed by the estimated effect sizes (for allele 1 on the original scale), standard errors, chi-square test statistics and -\\log_{10} p-value. An additional column is included to specify if Firth/SPA corrections failed. With option --no-split , the summary statistics for all traits are written to a single file file.regenie , with the same format as above. Additionaly, an accompanying file with the trait names corresponding to Y1,Y2,... will be generated in \u2018file.regenie.Ydict\u2019. Note that allele frequency, sample size and INFO score are computed using all analyzed samples. With option --htp , the summary statistics file will follow the HTP format. If option --write-samples was used, IDs of samples used for each trait will be written in files file_.regenie.ids,...,file_.regenie.ids (tab separated, no header). When using --par-region , the default boundaries used for the chrX PAR regions are: b36/hg18: 2709520 and 154584238 b37/hg19: 2699520 and 154931044 b38/hg38: 2781479 and 155701383 Gene-based testing Starting from version 3.0, Step 2 of regenie provides a complimentary set of gene-based test in addition to the burden testing functionality introduced in version 2.0. More specifically, for a given set of variants (eg within a gene) which can be defined using functional annotations, regenie can apply various set-based tests on the variants as well as collapse them into a single combined 'mask' genotype that can be tested for association just like a single variant. Input Option Argument Type Description --anno-file FILE Required File with variant annotations for each set --set-list FILE Required File listing variant sets --extract-sets FILE Optional Inclusion file that lists IDs of variant sets to keep --exclude-sets FILE Optional Exclusion file that lists IDs of variant sets to remove --extract-setlist STRING Optional Comma-separated list of variant sets to keep --exclude-setlist STRING Optional Comma-separated list of variant sets to remove --aaf-file FILE Optional File with variant AAF to use when building masks (instead of AAF estimated from sample) --mask-def FILE Required File with mask definitions using the annotations defined in --anno-file Note: multiple files can be specified for --extract-sets/--exclude-sets by using a comma-separated list. Annotation input files The following files are used to define variant sets and functional annotations which will be used to generate masks. Annotation file 1:55039839:T:C PCSK9 LoF 1:55039842:G:A PCSK9 missense . This file defines functional annotations for variants. It is designed to accommodate for variants with separate annotations for different sets/genes. Each line contains the variant name, the set/gene name and a single annotation category (space/tab separated). Variants not in this file will be assigned to a default \"NULL\" category. A maximum of 63 annotation categories (+NULL category) is allowed. For gene sets, tools you can use to obtain variant annotations per transcripts are snpEFF or VEP . To obtain a single annotation per gene, you could choose the most deleterious functional annotation across the gene transcripts or alternatively use the canonical transcript (note that its definition can vary across software). We have implemented an extended 4-column format of the annotation file which also categorizes sets into domains (e.g. for gene sets, these would correspond to gene domains). 1:55039839:T:C PCSK9 Prodomain LoF 1:55039842:G:A PCSK9 Prodomain missense . Masks will be generated for each domain (maximum of 8 per set/gene) in addition to a mask combining across all domains. Variants can only be assigned to a single domain for each set/gene. Starting with v4.1, you can also specify custom variant weights which will be used in the burden, SKAT/SKAT-O and ACAT-V tests ($w_i$'s in the gene-based testing overview ). Multiple weights can be included in the annotation file after the 3rd column, e.g. 1:55039839:T:C PCSK9 LoF 0.9 0.812 1 1:55039842:G:A PCSK9 missense 0.4 0.23 0.55 . Using --weights-col 4 will use weights in the 4-th column for the gene-based tests. Set list file This file lists variants within each set/gene to use when building masks. Each line contains the set/gene name followed by a chromosome and physical position for the set/gene, then by a comma-separated list of variants included in the set/gene. A1BG 19 58346922 19:58346922:C:A,19:58346924:G:A,... A1CF 10 50806630 10:50806630:A:G,10:50806630:A:AT,... . Set inclusion/exclusion file format The file must have a single column of set/gene names corresponding to those in the set list file. PIGP ZBTB38 . AAF file (optional) Both functional annotations and alternative allele frequency (AAF) cutoffs are used when building masks (e.g. only considering LoF sites where AAF is below 1%). By default, the AAF for each variant is computed from the sample but alternatively, the user can specify variant AAFs using this file. Each line contains the variant name followed by its AAF (it should be for the ALT allele used in the genetic data input). AAF must be a numerical value (i.e. it cannot be '.'). 7:6187101:C:T 1.53918207864341e-05 7:6190395:C:A 2.19920388819247e-06 . Since singleton variants cannot be identified from this file, they are determined by default based on the input genetic data. To enforce which sites should be included in the singleton masks (see --set-singletons ), you can add a third column in the file with a binary indicator (1=singleton; 0=not singleton). So only variants which are specified as singletons will be considered for the singleton masks, regardless of whether they are singletons in the input genetic data. Note that with this flag, singleton sites will be included in all masks (regardless of the AAF in file). 7:6187101:C:T 1.53918207864341e-05 0 7:6190395:C:A 2.19920388819247e-06 1 . Mask definitions Mask file This file specifies which annotation categories should be combined into masks. Each line contains a mask name followed by a comma-seperated list of categories included in the mask (i.e. union is taken over categories). For example below, Mask1 uses only LoF variants and Mask2 uses LoF and missense annotated variants. Mask1 LoF Mask2 LoF,missense . AAF cutoffs Option --aaf-bins specifies the AAF upper bounds used to generate burden masks ( AAF and not MAF [minor allele frequency] is used when deciding which variants go into a mask) . By default, a mask based on singleton sites are always included. For example, --aaf-bins 0.01,0.05 will generate 3 burden masks for AAFs in [0,0.01], [0,0.05] and singletons. SKAT/ACAT tests The option --vc-tests is used to specify the gene-based tests to run. By default, these tests use all variants in each mask category. If you'd like to only include variants whose AAF is below a given threshold ,e.g. only including rare variants, you can use --vc-maxAAF . Test Name in regenie Description SKAT skat Variance component test SKATO skato Omnibus test combining features of SKAT and Burden SKATO-ACAT skato-acat Same as SKATO but using Cauchy combination method to maximize power across SKATO models ACATV acatv Test using Cauchy combination method to combine single-variant p-values ACATO acato Omnibus test combining features of ACATV, SKAT and Burden ACATO-FULL acato-full Same as ACATO but using the larger set of SKATO models used in the SKATO test For example, --vc-tests skato,acato-full will run SKATO and ACATO (both using the default grid of 8 rho values for the SKATO models) and the p-values for SKAT, SKATO, ACATV and ACATO will be output. Ultra-rare variants (defined by default as MAC$\\le$10, see --vc-MACthr ) are collapsed into a burden mask which is then included in the tests instead of the individual variants. For additional details on the tests, see here . Joint test for burden masks The following tests can be used to combine different burden masks generated using different annotation classes as well as AAF thresholds. Test Name in regenie QT BT Robust to LD Assumes same effect direction Minimum P-value minp $\\checkmark$ $\\checkmark$ $\\times$ $\\times$ ACAT acat $\\checkmark$ $\\checkmark$ $\\checkmark$ $\\times$ SBAT sbat $\\checkmark$ $\\times$ $\\checkmark$ $\\checkmark$ The ACAT test combines the p-values of the individual burden masks using the Cauchy combination method (see ref. 14 here ). The SBAT test is described into more detail here . If you only want to output the results for the joint tests (ignore the marginal tests), use --joint-only . LOVO/LODO schemes The leave-one-variant-out (LOVO) scheme takes all sites going into a mask, and builds LOVO masks by leaving out one variant at a time from the full set of sites. The mask including all sites will also be computed. The argument for --mask-lovo is a comma-separated list which consists of the set/gene name, the mask name, and the AAF cutoff (either 'singleton' or a double in (0,1)). If using a 4-column annotation file, then --mask-lovo should have the gene name, the domain name, the mask name, and the AAF cutoff. So the LOVO masks will be generated for a specific gene domain. The leave-one-domain-out (LODO) scheme (specified by --mask-lodo ) takes all sites going into a mask and builds a LODO mask for each domain specified for the gene by excluding all variants in the domain. The full mask including all sites will also be computed. The argument for --mask-lodo should have the gene name, the mask name and the AAF cutoff. Writing mask files Burden masks built in regenie can be written to PLINK bed format. If the input genetic data contains dosages, the masks dosages will be converted to hard-calls prior to being written to file and these hard-calls will be used for the association testing. The PLINK bed file is written using 'ref-last' encoding (i.e. REF allele is listed last in the bim file). Note that this cannot be used with the LOVO/LODO schemes. Options Option Argument Type Description --aaf-bins FLOAT,...,FLOAT Optional comma-separated list of AAF upper bounds to use when building masks [default is a single cutoff of 1%] --build-mask STRING Optional build masks using the maximum number of ALT alleles across sites ( 'max' ; the default), or the sum of ALT alleles ( 'sum' ), or thresholding the sum to 2 ( 'comphet' ) --singleton-carrier FLAG Optional to define singletons as variants with a single carrier in the sample (rather than alternative allele count=1) --set-singletons FLAG Optional to use 3rd column in AAF file to specify variants included in singleton masks --write-mask FLAG Optional write mask to PLINK bed format (does not work when building masks with 'sum') --vc-tests STRING Optional comma-separated list of SKAT/ACAT-type tests to run --vc-maxAAF FLOAT Optional AAF upper bound to use for SKAT/ACAT-type tests [default is 100%] --skat-params FLOAT,FLAT Optional a1,a2 values for the single variant weights computed from Beta(MAF,a1,a2) used in SKAT/ACAT-type tests [default is (1,25)] --skato-rho FLOAT,...,FLOAT Optional comma-separated list of $\\rho$ values used for SKATO models --vc-MACthr FLOAT Optional MAC threshold below which to collapse variants in SKAT/ACAT-type tests [default is 10] --joint STRING Optional comma-separated list of joint tests to apply on the generated burden masks --rgc-gene-p FLAG Optional to compute the GENE_P test --skip-test FLAG Optional to skip computing association tests after building masks and writing them to file --mask-lovo STRING Optional to perform LOVO scheme --lovo-snplist FILE Optional File with list of variants for which to compute LOVO masks --mask-lodo FLAG Optional to perform LODO scheme --weights-col INT Optional column index (1-based) in annotation file to use custom weights in gene-based tests --write-mask-snplist FLAG Optional to write list of variants that went into each mask to file --check-burden-files FLAG Optional to check the concordance between annotation, set list and mask files [see below ] --strict-check-burden FLAG Optional to exit early if the annotation, set list and mask definition files dont agree [see below ] Three rules can be used to build masks with --build-mask as shown in diagram below, where the last rule comphet applies a threshold of 2 to the mask from the sum rule. Output With --out file Results are written in separate files for each phenotype file_.regenie,...,file_.regenie with the same output format mentioned above . Additionally, a header line is included (starting with ## ) which contains mask definition information. Masks will have name .. with the chromosome and physical position having been defined in the set list file, and the reference allele being ref , and the alternate allele corresponding to . . When using --mask-lovo , the mask name will be the same as above but have suffix _ to specify the variant which was excluded when building the mask. With --build-mask sum , the reported mask AAF corresponds to the average AAF across sites included in the mask. If using --write-mask , the masks will be saved to file_masks.{bed,bim,fam} and if using --write-mask-snplist , the list of variants included in each mask will be saved to file_masks.snplist . When using --rgc-gene-p , it will apply the single p-value per gene GENE_P strategy using all masks (see here for details). Example run Using Step 1 results from the Step 1 command above , we use the following command to build and test masks in Step 2 ./regenie \\ --step 2 \\ --bed example/example_3chr \\ --covarFile example/covariates.txt \\ --phenoFile example/phenotype_bin.txt \\ --bt \\ --remove example/fid_iid_to_remove.txt \\ --firth --approx \\ --pred fit_bin_out_pred.list \\ --anno-file example/example_3chr.annotations \\ --set-list example/example_3chr.setlist \\ --mask-def example/example_3chr.masks \\ --aaf-bins 0.1,0.05 \\ --write-mask \\ --bsize 200 \\ --out test_bin_out_firth For each set, this will produce masks using 3 AAF cutoffs (singletons, 5% and 10% AAF). The masks are written to PLINK bed file (in test_bin_out_firth_masks.{bed,bim,fam} ) and tested for association with each binary trait using Firth approximate test (summary stats in test_bin_out_firth_.regenie ). Note that the test uses the whole genome regression LOCO PRS from Step 1 of regenie (specified by --pred ). Checking input files To assess the concordance between the input files for building masks, you can use --check-burden-files which will generate a report in file_masks_report.txt containing: for each set, the list the variants in the set-list file which are unrecognized (not genotyped or not present in annotation file for the set) for each mask, the list of annotations in the mask definition file which are not in the annotation file Additionally, you can use --strict-check-burden to enforce full agreement between the three files (if not, program will terminate) : all genotyped variants in the set list file must be in the annotation file (for the corresponding set) all annotations in the mask definition file must be present in the annotation file Interaction testing Starting from regenie v3.0, you can perform scans for interactions (either GxE or GxG). For GxE tests, the interacting variable should be part of the covariate file (if it is categorical, specify it in --catCovarList ). For GxG tests, the interacting variant can be part of the input genetic file or it can be present in an external file (see --interaction-snp-file ) Options Option Argument Type Description --interaction STRING Optional to run GxE test specifying the interacting covariate (see below) --interaction-snp STRING Optional to run GxG test specifying the interacting variant (see below) --interaction-file FORMAT,FILE Optional external genotype file containing the interacting variant [FORMAT can be bed/bgen/pgen and FILE is the file name (bgen) or file prefix (bed/pgen)] --interaction-file-sample FILE Optional accompagnying sample file for BGEN format --interaction-file-reffirst FLAG Optional use the first allele as the reference for BGEN or PLINK BED formats --no-condtl FLAG Optional to print out all the main effects from the interaction model (see Output section below) --force-condtl FLAG Optional to include the interacting SNP as a covariate in the marginal test (see Output section below) --rare-mac FLOAT Optional minor allele count (MAC) threshold below which to use HLM method for QTs [default is 1000] For GxE tests where the interacting variable is categorical, you can specify the baseline level using --interaction VARNAME[BASE_LEVEL] (e.g. --interaction BMI[<25] ). Otherwise, the first value found in the covariate file will be used as the baseline level. For GxG tests, the default coding for the interacting variant is additive. If you would like to use dominant/recessive/categorical coding, use --interaction-snp SNP_NAME[dom/rec/cat] (for example with dominant coding, --interaction-snp SNPNAME[dom] will allow for separate effects between carriers vs non-carriers of the interacting variant). The allowed values in the brackets are add/dom/rec/cat . Output The result files will contain multiple lines for the same variant corresponding to the different null hypotheses being tested in the interaction model g(\\mu) = E\\alpha + G\\beta + (G\\odot E)\\gamma The suffix in the \"TEST\" column indicates which hypothesis is being tested: \"ADD\": marginal test where the interacting variable has not been added as a covariate $-$ this corresponds to $H_0: \\beta = 0$ given $\\alpha=\\gamma = 0$ this is only printed for GxG tests by default, or GxE using --no-condtl \"ADD-CONDTL\": marginal test where the interacting variable has been added as a covariate (default for GxE tests) $-$ this corresponds to $H_0: \\beta = 0$ given $\\gamma = 0$ this is only printed for GxE tests by default, or GxG using --force-condtl \"ADD-INT_VAR\": test for the main effect of the interaction variable (\"VAR\" will be replaced by the name of the interacting variable) $-$ this corresponds to $H_0: \\alpha = 0$ this is only printed for GxG tests by default, or GxE using --no-condtl If the interacting variable is categorical, you will have separate lines for each level aside from the baseline level (e.g. \"ADD-INT_BMI=25-30\" and \"ADD-INT_BMI=30+\" where baseline level is \"$<$25\") will also output the effect of $E^2$ in \"ADD-INT_VAR^2\" if the trait is binary (see here ) \"ADD-INT_SNP\": test for main effect of tested SNP in the interaction model $-$ this corresponds to $H_0: \\beta = 0$ \"ADD-INT_SNPxVAR\": test for interaction effect (\"VAR\" will be replaced by the name of the interacting variable) $-$ this corresponds to $H_0: \\gamma = 0$ If the interacting variable is categorical, you will have separate lines for each level aside from the baseline level (e.g. \"ADD-INT_SNPxBMI=25-30\" and \"ADD-INT_SNPxBMI=30+\" where baseline level is \"$<$25\") With Firth correction, only the effect sizes for the interaction effect at each level will be reported and the LRT p-value will only be computed for the joint test on the interaction effects \"ADD-INT_$k$DF\": joint test for main and interaction effect of tested variant ($k\\ge2$ for categorical interacting variables) $-$ this corresponds to $H_0: \\beta = \\gamma = 0$ Conditional analyses Starting from regenie v3.0, you can specify genetic variants to add to the set of covariates when performing association testing. This works in both step 1 and 2, and can be used in conjunction with the gene-based tests or the interactiong testing feature. The conditioning variants will automatically be ignored from the analysis. Option Argument Type Description --condition-list FILE Required file with list of variants to condition on --condition-file FORMAT,FILE Optional get conditioning variants from external file (same argument format as --interaction-file ) --condition-file-sample FILE Optional accompagnying sample file for BGEN format --max-condition-vars INT Optional maximum number of conditioning variants [default is 10,000] Survival analyses Starting from regenie v4.0, you can conduct survival analysis for time-to-event data. Phenotype file format In this small example, there are 5 samples, and the event of interest is the diagnosis of cancer over a period of 10 years. Sample 1 is diagnosed with cancer during the study; the time variable is the number of years until the sample is diagnosed with cancer. Sample 2 drops out of the study; sample 3 dies during the study; sample 4 and 5 complete the study without being diagnosed with cancer; they are all right-censored, and the time variable is the last encounter or death time. The corresponding phenotype file is FID IID Time Cancer 1 1 6 1 2 2 5 0 3 3 2 0 4 4 10 0 5 5 10 0 Required options Survival analysis in regenie requires the following specific options in step 1, step 2 and gene-based burden tests. Option Argument Type Description --t2e FLAG Required specify the traits are time-to-event data --phenoColList STRING Required Comma separated list of time names to include in the analysis --eventColList STRING Required Comma separated list of columns in the phenotype file to include in the analysis that contain the events. These event columns should have 0=no event,1=event,NA=missing For the example above, the regenie call is ./regenie \\ --t2e \\ --phenoColList Time \\ --eventColList Cancer \\ ... For a phenotype file containing multiple time-to-event traits, the order of censor variables listed in --eventColList should match the order of time names specified in --phenoColList . For example, the phenotype file is FID IID Cancer_Time Cancer Asthma_Time Asthma 1 1 6 1 4 0 2 2 5 0 8 1 The regenie call is ./regenie \\ --t2e \\ --phenoColList Cancer_Time,Asthma_Time \\ --eventColList Cancer,Asthma \\ ... The output format is the same as the output file for quantitative and binary traits , with the BETA column containing the estimated harzard ratio (on log scale). LD computation REGENIE can calculate LD between a group of variants on the same chromosome. Option Argument Type Description --compute-corr FLAG Required compute LD matrix and write to binary file --output-corr-text FLAG Optional write Pearson correlations to text file --forcein-vars FLAG Optional retain all variants specified in --extract which absent from the genetic data in the LD matrix --ld-extract FILE Optional file listing single variants as well as burden masks to include in LD matrix (see below) Note that this can be quite memory intensive for large groups of variants (memory ~$8M^2$ bytes for $M$ variants). Output Using --step 2 --out file By default, the LD matrix is stored in a binary compressed file file.corr and the list of variants corresponding to the columns of the LD matrix are stored in file.corr.snplist . The R script scripts/parseLD.r contains a function which returns the LD matrix, e.g. get.corr.sq.matrix(\"file.corr\") . Using --output-corr-text will write the Pearson correlations to a text file instead. When using --forcein-vars , variants not present in the genetic data will be added as extra column/rows in the LD matrix. For these variants, the diagonal entries in the matrix will be set to 1 and the off-diagonal entries 0. Using --ld-extract info.txt This option is used compute LD between single variants and burden masks generated on-the-fly in REGENIE; it requires specifying annotation files . The file info.txt should have three columns: variant type ('sv' or 'mask'), variant name, followed by the set (e.g. gene) name (this can be 'NA' for single variant). For example, it would look like: sv 1:1111:A:G NA sv 1:2222:C:T NA mask PCSK9.M1.0.01 PCSK9 . Note that the set and mask names must match that used in REGENIE based on provided annotation files and allele frequency cutoffs. Variant/masks not present in the data will be kept in the LD matrix but will have the corresponding correlations set to 0.","title":"Documentation"},{"location":"options/#getting-started","text":"To run regenie , use the command ./regenie on the command line, followed by options and flags as needed. To get a full list of options use ./regenie --help The directory examples/ contains some small example files that are useful when getting started. A test run on a set of binary traits can be achieved by the following 2 commands. In Step 1 , the whole genome regression model is fit to the traits, and a set of genomic predictions are produced as output ./regenie \\ --step 1 \\ --bed example/example \\ --exclude example/snplist_rm.txt \\ --covarFile example/covariates.txt \\ --phenoFile example/phenotype_bin.txt \\ --remove example/fid_iid_to_remove.txt \\ --bsize 100 \\ --bt --lowmem \\ --lowmem-prefix tmp_rg \\ --out fit_bin_out In Step 2 , a set of imputed SNPs are tested for association using a Firth logistic regression model ./regenie \\ --step 2 \\ --bgen example/example.bgen \\ --covarFile example/covariates.txt \\ --phenoFile example/phenotype_bin.txt \\ --remove example/fid_iid_to_remove.txt \\ --bsize 200 \\ --bt \\ --firth --approx \\ --pThresh 0.01 \\ --pred fit_bin_out_pred.list \\ --out test_bin_out_firth One of the output files from these two commands is included in example/test_bin_out_firth_Y1.regenie .","title":"Getting started"},{"location":"options/#basic-options","text":"","title":"Basic options"},{"location":"options/#input","text":"Option Argument Type Description --bgen, --bed, --pgen FILE Required Input genetic data file. Either BGEN file eg. file.bgen , or bed/bim/fam prefix that assumes file.bed , file.bim , file.fam exist, or pgen/pvar/psam prefix that assumes file.pgen , file.pvar , file.psam exist --sample FILE Optional Sample file corresponding to input BGEN file --bgi FILE Optional Index bgi file corresponding to input BGEN file --ref-first FLAG Optional Specify to use the first allele as the reference allele for BGEN or PLINK bed/bim/fam file input [default is to use the last allele as the reference] --keep FILE Optional Inclusion file that lists individuals to retain in the analysis --remove FILE Optional Exclusion file that lists individuals to remove from the analysis --extract FILE Optional Inclusion file that lists IDs of variants to keep --exclude FILE Optional Exclusion file that lists IDs of variants to remove --extract-or FILE Optional Inclusion file that lists IDs of variants to keep regardless of minimum MAC filter --exclude-or FILE Optional Exclusion file that lists IDs of variants to remove unless MAC is above threshold --phenoFile FILE Required Phenotypes file --phenoCol STRING Optional Use for each phenotype you want to include in the analysis --phenoColList STRING Optional Comma separated list of phenotypes to include in the analysis --eventColList STRING Optional Comma separated list of columns in the phenotype file to include in the analysis that contain the event times --phenoExcludeList STRING Optional Comma separated list of phenotypes to ignore from the analysis --covarFile FILE Optional Covariates file --covarCol STRING Optional Use for each covariate you want to include in the analysis --covarColList STRING Optional Comma separated list of covariates to include in the analysis --catCovarList STRING Optional Comma separated list of categorical covariates to include in the analysis --covarExcludeList STRING Optional Comma separated list of covariates to ignore --pred FILE Optional File containing predictions from Step 1 (see Overview). This is required for --step 2 --tpheno-file STRING Optional to use a phenotype file in transposed format (e.g. BED format) --tpheno-indexCol INT Optional index of phenotype name column in transposed phenotype file --tpheno-ignoreCols INT Optional indexes of columns to ignore in transposed phenotype file --iid-only FLAG Optional to specify if header in transposed phenotype file only contains sample IID (assume FID=IID) Note: Parameter expansion can be used when specifying phenotypes/covariates (e.g. --covarCol PC{1:10} ). Also, multiple files can be specified for --extract/--exclude/--keep/--remove by using a comma-separated list.","title":"Input"},{"location":"options/#genetic-data-file-format","text":"regenie can read BGEN files, bed/bim/fam files or pgen/psam/pvar files in Step 1 and Step 2. The BGEN file format is described here . The bed/bim/fam file format is described here . The pgen/pvar/psam file format is described here . Tools useful for genetic data file format conversion are : PLINK , QCTOOL , BCFTOOLS . Step 2 of regenie can be sped up by using BGEN files using v1.2 format with 8 bits encoding (genotype file can be generated with PLINK2 using option --export bgen-1.2 'bits=8' ) as well as having an accompanying .bgi index file (a useful tool to create such file is bgenix which is part of the BGEN library). To include X chromosome genotypes in step 1 and/or step 2, males should be coded as diploid so that their genotypes are 0/2 (this is done automatically for BED and PGEN file formats with haploid genotypes). Chromosome values of 23 (for human analyses), X, Y, XY, PAR1 and PAR2 are all acceptable and will be collapsed into a single chromosome.","title":"Genetic data file format"},{"location":"options/#sample-inclusionexclusion-file-format","text":"2 2 7 7 . No header. Each line starts with individual FID IID. Space/tab separated. Samples listed in the file that are not in bgen/bed/pgen file are ignored.","title":"Sample inclusion/exclusion file format"},{"location":"options/#variant-inclusionexclusion-file-format","text":"20 31 . No header. Each line must start with variant ID (if there are additional columns, file must be space/tab separated). Variants listed in this file that are not in bgen/bed/pgen file are ignored.","title":"Variant inclusion/exclusion file format"},{"location":"options/#covariate-file-format","text":"FID IID V1 V2 V3 1 1 1.46837294454993 1.93779743016325 0.152887004505393 2 2 -1.2234390803815 -1.63408619199948 -0.190201446835255 3 3 0.0711531925667286 0.0863906292357564 0.14254739715665 . Line 1 : Header with FID, IID and C covariate names. Followed by lines of C+2 values. Space/tab separated. Each line contains individual FID and IID followed by C covariate values. Samples listed in this file that are not in bgen/bed/pgen file are ignored. Genotyped samples that are not in this file are removed from the analysis as well as samples with missing values at any of the covariates included. If --step 2 is specified, then the covariate file should be the same as that used in Step 1.","title":"Covariate file format"},{"location":"options/#phenotype-file-format","text":"FID IID Y1 Y2 1 1 1.64818554321186 2.2765234736685 2 2 -2.67352013711554 -1.53680421614647 3 3 0.217542851471485 0.437289912695016 . Line 1 : Header with FID, IID and P phenotypes names. Followed by lines of P+2 values. Space/tab separated. Each line contains individual FID and IID followed by P phenotype values (for binary traits, must be coded as 0=control, 1=case, NA=missing unless using --1 ). Samples listed in this file that are not in bgen/bed/pgen file are ignored. Genotyped samples that are not in this file are removed from the analysis. Missing values must be coded as NA. With QTs, missing values are mean-imputed in Step 1 and they are dropped when testing each phenotype in Step 2 (unless using --force-impute ). With BTs, missing values are mean-imputed in Step 1 when fitting the level 0 linear ridge regression and they are dropped when fitting the level 1 logistic ridge regression for each trait . In Step 2, missing values are dropped when testing each trait. To remove all samples that have missing values at any of the P phenotypes, use option --strict in Step 1 and 2. If using the transposed phenotype file format with option --tpheno-file , the header line must contain subject IDs as \"FID_IID\", otherwise use option --iid-only and only include IIDs (so will assume FID=IID).","title":"Phenotype file format"},{"location":"options/#predictions-file-format","text":"Running --step 1 --out foo will produce A set of files containing genomic predictions for each phenotype from Step 1 (see Output section below). A file called foo_pred.list listing the locations of the prediction files. The file list is needed as an input file when using --step 2 via the --pred option. It has one line per phenotype (in any order) that specifies the name of the phenotype and its corresponding prediction file name. Each phenotype must have exactly one prediction file and phenotype names must match with those in the phenotype file. Phenotypes in this file not included in the analysis are ignored. Each prediction file contains the genetic predictions for the phenotype (space separated). Line 1 starts with 'FID_IID' followed by $N$ sample identifiers. It is followed by 23 lines containing the genetic predictions for each chromosome (sex chromosomes are collapsed into chromosome 23). More specifically, each line has $N+1$ values which are the chromosome number followed by the $N$ leave-one chromosome out (LOCO) predictions for each individual. Samples in this file not in the bed/pgen/bgen input file are ignored. Genotyped samples not present in this file will be ignored in the analysis of the corresponding trait. Samples with missing LOCO predictions must have their corresponding phenotype value set to missing.","title":"Predictions file format"},{"location":"options/#options","text":"Option Argument Type Description --step INT Required specify step for the regenie run (see Overview) [argument can be 1 or 2 ] --qt FLAG Optional specify that traits are quantitative (this is the default so can be ommitted) --bt FLAG Optional specify that traits are binary with 0=control,1=case,NA=missing --t2e FLAG Optional specify that traits are time-to-event data with 0=censoring,1=event,NA=missing in event column -1,--cc12 FLAG Optional specify to use 1/2/NA encoding for binary traits (1=control,2=case,NA=missing) --bsize INT Required size of the genotype blocks --cv INT Optional number of cross validation (CV) folds [default is 5] --loocv FLAG Optional flag to use leave-one out cross validation --lowmem FLAG Optional flag to reduce memory usage by writing level 0 predictions to disk (details below). This is very useful if the number of traits is large (e.g. greater than 10) --lowmem-prefix FILE PREFIX Optional prefix where to temporarily write the level 0 predictions --split-l0 PREFIX,N Optional split level 0 across N jobs and set prefix of output files of level 0 predictions --run-l0 FILE,K Optional run level 0 for job K in {1..N} specifying the master file created from '--split-l0' --run-l1 FILE Optional run level 1 specifying the master file from '--split-l0' --l1-phenoList STRING Optional to specify a subset of phenotypes to analyze when using --run-l1 --keep-l0 FLAG Optional avoid deleting the level 0 predictions written on disk after fitting the level 1 models --print-prs FLAG Optional flag to print whole genome predictions (i.e. PRS) without using LOCO scheme --force-step1 FLAG Optional flag to run step 1 when >1M variants are used (not recommened) --minCaseCount INT Optional flag to ignore BTs with low case counts [default is 10] --apply-rint FLAG Optional to apply Rank Inverse Normal Transformation (RINT) to quantitative phenotypes (use in both Step 1 & 2) --nb INT Optional number of blocks (determined from block size if not provided) --strict FLAG Optional flag to removing samples with missing data at any of the phenotypes --ignore-pred FLAG Optional skip reading the file specified by --pred (corresponds to simple linear/logistic regression) --htp STRING Optional to output the summary statistics file in the HTP format (string should correspond to cohort name, e.g. 'UKB_450_EUR') --exact-p FLAG Optional avoid capping p-values at 2.2E-307 in the HTP format summary statistics output --use-relative-path FLAG Optional to use relative paths instead of absolute ones for the step 1 output pred.list file --use-prs FLAG Optional flag to use whole genome PRS in --pred (this is output in step 1 when using --print-prs ) --gz FLAG Optional flag to output files in compressed gzip format (LOCO prediction files in step 1 and association results files in step 2) [this only works when compiling with Boost Iostream library (see Install tab)] . --force-impute FLAG Optional flag to keep and impute missing observations for QTs in step 2 --write-samples FLAG Optional flag to write sample IDs for those kept in the analysis for each trait in step 2 --print-pheno FLAG Optional flag to write phenotype name in the first line of the sample ID files when using --write-samples --firth FLAG Optional specify to use Firth likelihood ratio test (LRT) as fallback for p-values less than threshold --approx FLAG Optional flag to use approximate Firth LRT for computational speedup (only works when option --firth is used) --firth-se FLAG Optional flag to compute SE based on effect size and LRT p-value when using Firth correction (instead of based on Hessian of unpenalized log-likelihood) --write-null-firth FLAG Optional to write the null estimates for approximate Firth [can be used in step 1 or 2] --compute-all FLAG Optional to write the null Firth estimates for all chromosomes (regardless of the genotype file) --use-null-firth FILE Optional to use stored null estimates for approximate Firth in step 2 --spa FLAG Optional specify to use Saddlepoint approximation as fallback for p-values less than threshold --pThresh FLOAT Optional P-value threshold below which to apply Firth/SPA correction [default is 0.05] --test STRING Optional specify to carry out dominant or recessive test [default is additive; argument can be dominant or recessive ] --chr INT Optional specify which chromosomes to test in step 2 (use for each chromosome to include) --chrList STRING Optional Comma separated list of chromosomes to test in step 2 --range STRING Optional specify chromosome region for variants to test in step 2 [format=CHR:MINPOS-MAXPOS] --minMAC FLOAT Optional flag to specify the minimum minor allele count (MAC) when testing variants [default is 5]. Variants with lower MAC are ignored. --minINFO FLOAT Optional flag to specify the minimum imputation info score (IMPUTE/MACH R^2) when testing variants. Variants with lower info score are ignored. --sex-specific STRING Optional to perform sex-specific analyses [either 'male'/'female'] --af-cc FLAG Optional to output A1FREQ in case/controls separately in the step 2 result file --no-split FLAG Optional flag to have summary statistics for all traits output in the same file --starting-block INT Optional to start step 2 at a specific block/set number (useful if program crashes during a job) --nauto INT Optional number of autosomal chromosomes (for non-human studies) [default is 22] --maxCatLevels INT Optional maximum number of levels for categorical covariates (for non-human studies) [default is 10] --niter INT Optional maximum number of iterations for logistic regression [default is 30] --maxstep-null INT Optional maximum step size for logistic model with Firth penalty under the null [default is 25] --maxiter-null INT Optional maximum number of iterations for logistic model with Firth penalty under the null [default is 1000] --par-region STRING Optional specify build code to determine bounds for PAR1/PAR2 regions (can be 'b36/b37/b38/hg18/hg19/hg38' or 'start,end' bp bounds of non-PAR region) [default is hg38] --force-qt FLAG Optional force QT run for binary traits --threads INT Optional number of computational threads to use [default=all-1] --debug FLAG Optional debug flag (for use by developers) --verbose FLAG Optional verbose screen output --version FLAG Optional print version number and exit --help FLAG Optional Prints usage and options list to screen When step 1 of regenie is run in low memory mode (i.e. using --lowmem ), temporary files are created on disk (using --lowmem-prefix tmp_prefix determines where the files are written [as in tmp_prefix_l0_Y1 ,..., tmp_prefix_l0_YP for P phenotypes]). If the prefix is not specified, the default is to use the prefix specified by --out (see below). These are automatically deleted at the end of the program (unless the run was not successful in which case the user would need to delete the files) See the Wiki page for more details on how to run the level 0 models for Step 1 of regenie in parallel.","title":"Options"},{"location":"options/#output","text":"Option Argument Type Description --out FILE PREFIX Required Output files that depends on --step A log file file.log of the output is generated. Using --step 1 --out file For the P phenotypes, files file_1.loco ,..., file_P.loco are output with the per-chromosome LOCO predictions as rows of the files (following the order of the phenotypes in the phenotype file header). If option --gz was used, the files will be compressed in gzip format and have extension .loco.gz . Genotyped individuals specified using option --remove are excluded from this file. Individuals with missing phenotype values kept in the analysis are included in the file and have their predictions set to missing. The list of blup files needed for step 2 (association testing) is written to file_pred.list . If using --print-prs , files file_1.prs ,..., file_P.prs will be written with the whole genome predictions (i.e. PRS) without using LOCO scheme (similar format as the .loco files). The list of these files is written to file_prs.list and can be used in step 2 with --pred and specifying flag --use-prs . Note that as these are not obtained using a LOCO scheme, association tests could suffer from proximal contamination. If using option --write-null-firth , the estimates for approximate Firth under the null will be written to files file_1.firth,...,file_P.firth and the list of these files is written to file_firth.list . This can be used in step 2 as --use-null-firth file_firth.list . Note that it assumes the same set of covariates are used in Step 1 and 2. Using --step 2 --out file By default, results are written in separate files for each phenotype file_.regenie,...,file_.regenie . Each file has one line per SNP along with a header line. If option --gz was used, the files will be compressed in gzip format and have extension .regenie.gz . The entries of each row specify chromosome, position, ID, reference allele (allele 0), alternative allele (allele 1), frequency of the alternative allele, sample size and the test performed (additive/dominant/recessive). With BGEN/PGEN files with dosages, the imputation INFO score is provided (IMPUTE info score for BGEN and Mach Rsq for PGEN). Allele frequency, sample size and INFO score, if applicable, are computed using only non-missing samples for each phenotype. These are followed by the estimated effect sizes (for allele 1 on the original scale), standard errors, chi-square test statistics and -\\log_{10} p-value. An additional column is included to specify if Firth/SPA corrections failed. With option --no-split , the summary statistics for all traits are written to a single file file.regenie , with the same format as above. Additionaly, an accompanying file with the trait names corresponding to Y1,Y2,... will be generated in \u2018file.regenie.Ydict\u2019. Note that allele frequency, sample size and INFO score are computed using all analyzed samples. With option --htp , the summary statistics file will follow the HTP format. If option --write-samples was used, IDs of samples used for each trait will be written in files file_.regenie.ids,...,file_.regenie.ids (tab separated, no header). When using --par-region , the default boundaries used for the chrX PAR regions are: b36/hg18: 2709520 and 154584238 b37/hg19: 2699520 and 154931044 b38/hg38: 2781479 and 155701383","title":"Output"},{"location":"options/#gene-based-testing","text":"Starting from version 3.0, Step 2 of regenie provides a complimentary set of gene-based test in addition to the burden testing functionality introduced in version 2.0. More specifically, for a given set of variants (eg within a gene) which can be defined using functional annotations, regenie can apply various set-based tests on the variants as well as collapse them into a single combined 'mask' genotype that can be tested for association just like a single variant.","title":"Gene-based testing"},{"location":"options/#input_1","text":"Option Argument Type Description --anno-file FILE Required File with variant annotations for each set --set-list FILE Required File listing variant sets --extract-sets FILE Optional Inclusion file that lists IDs of variant sets to keep --exclude-sets FILE Optional Exclusion file that lists IDs of variant sets to remove --extract-setlist STRING Optional Comma-separated list of variant sets to keep --exclude-setlist STRING Optional Comma-separated list of variant sets to remove --aaf-file FILE Optional File with variant AAF to use when building masks (instead of AAF estimated from sample) --mask-def FILE Required File with mask definitions using the annotations defined in --anno-file Note: multiple files can be specified for --extract-sets/--exclude-sets by using a comma-separated list.","title":"Input"},{"location":"options/#annotation-input-files","text":"The following files are used to define variant sets and functional annotations which will be used to generate masks.","title":"Annotation input files"},{"location":"options/#annotation-file","text":"1:55039839:T:C PCSK9 LoF 1:55039842:G:A PCSK9 missense . This file defines functional annotations for variants. It is designed to accommodate for variants with separate annotations for different sets/genes. Each line contains the variant name, the set/gene name and a single annotation category (space/tab separated). Variants not in this file will be assigned to a default \"NULL\" category. A maximum of 63 annotation categories (+NULL category) is allowed. For gene sets, tools you can use to obtain variant annotations per transcripts are snpEFF or VEP . To obtain a single annotation per gene, you could choose the most deleterious functional annotation across the gene transcripts or alternatively use the canonical transcript (note that its definition can vary across software). We have implemented an extended 4-column format of the annotation file which also categorizes sets into domains (e.g. for gene sets, these would correspond to gene domains). 1:55039839:T:C PCSK9 Prodomain LoF 1:55039842:G:A PCSK9 Prodomain missense . Masks will be generated for each domain (maximum of 8 per set/gene) in addition to a mask combining across all domains. Variants can only be assigned to a single domain for each set/gene. Starting with v4.1, you can also specify custom variant weights which will be used in the burden, SKAT/SKAT-O and ACAT-V tests ($w_i$'s in the gene-based testing overview ). Multiple weights can be included in the annotation file after the 3rd column, e.g. 1:55039839:T:C PCSK9 LoF 0.9 0.812 1 1:55039842:G:A PCSK9 missense 0.4 0.23 0.55 . Using --weights-col 4 will use weights in the 4-th column for the gene-based tests.","title":"Annotation file"},{"location":"options/#set-list-file","text":"This file lists variants within each set/gene to use when building masks. Each line contains the set/gene name followed by a chromosome and physical position for the set/gene, then by a comma-separated list of variants included in the set/gene. A1BG 19 58346922 19:58346922:C:A,19:58346924:G:A,... A1CF 10 50806630 10:50806630:A:G,10:50806630:A:AT,... .","title":"Set list file"},{"location":"options/#set-inclusionexclusion-file-format","text":"The file must have a single column of set/gene names corresponding to those in the set list file. PIGP ZBTB38 .","title":"Set inclusion/exclusion file format"},{"location":"options/#aaf-file-optional","text":"Both functional annotations and alternative allele frequency (AAF) cutoffs are used when building masks (e.g. only considering LoF sites where AAF is below 1%). By default, the AAF for each variant is computed from the sample but alternatively, the user can specify variant AAFs using this file. Each line contains the variant name followed by its AAF (it should be for the ALT allele used in the genetic data input). AAF must be a numerical value (i.e. it cannot be '.'). 7:6187101:C:T 1.53918207864341e-05 7:6190395:C:A 2.19920388819247e-06 . Since singleton variants cannot be identified from this file, they are determined by default based on the input genetic data. To enforce which sites should be included in the singleton masks (see --set-singletons ), you can add a third column in the file with a binary indicator (1=singleton; 0=not singleton). So only variants which are specified as singletons will be considered for the singleton masks, regardless of whether they are singletons in the input genetic data. Note that with this flag, singleton sites will be included in all masks (regardless of the AAF in file). 7:6187101:C:T 1.53918207864341e-05 0 7:6190395:C:A 2.19920388819247e-06 1 .","title":"AAF file (optional)"},{"location":"options/#mask-definitions","text":"","title":"Mask definitions"},{"location":"options/#mask-file","text":"This file specifies which annotation categories should be combined into masks. Each line contains a mask name followed by a comma-seperated list of categories included in the mask (i.e. union is taken over categories). For example below, Mask1 uses only LoF variants and Mask2 uses LoF and missense annotated variants. Mask1 LoF Mask2 LoF,missense .","title":"Mask file"},{"location":"options/#aaf-cutoffs","text":"Option --aaf-bins specifies the AAF upper bounds used to generate burden masks ( AAF and not MAF [minor allele frequency] is used when deciding which variants go into a mask) . By default, a mask based on singleton sites are always included. For example, --aaf-bins 0.01,0.05 will generate 3 burden masks for AAFs in [0,0.01], [0,0.05] and singletons.","title":"AAF cutoffs"},{"location":"options/#skatacat-tests","text":"The option --vc-tests is used to specify the gene-based tests to run. By default, these tests use all variants in each mask category. If you'd like to only include variants whose AAF is below a given threshold ,e.g. only including rare variants, you can use --vc-maxAAF . Test Name in regenie Description SKAT skat Variance component test SKATO skato Omnibus test combining features of SKAT and Burden SKATO-ACAT skato-acat Same as SKATO but using Cauchy combination method to maximize power across SKATO models ACATV acatv Test using Cauchy combination method to combine single-variant p-values ACATO acato Omnibus test combining features of ACATV, SKAT and Burden ACATO-FULL acato-full Same as ACATO but using the larger set of SKATO models used in the SKATO test For example, --vc-tests skato,acato-full will run SKATO and ACATO (both using the default grid of 8 rho values for the SKATO models) and the p-values for SKAT, SKATO, ACATV and ACATO will be output. Ultra-rare variants (defined by default as MAC$\\le$10, see --vc-MACthr ) are collapsed into a burden mask which is then included in the tests instead of the individual variants. For additional details on the tests, see here .","title":"SKAT/ACAT tests"},{"location":"options/#joint-test-for-burden-masks","text":"The following tests can be used to combine different burden masks generated using different annotation classes as well as AAF thresholds. Test Name in regenie QT BT Robust to LD Assumes same effect direction Minimum P-value minp $\\checkmark$ $\\checkmark$ $\\times$ $\\times$ ACAT acat $\\checkmark$ $\\checkmark$ $\\checkmark$ $\\times$ SBAT sbat $\\checkmark$ $\\times$ $\\checkmark$ $\\checkmark$ The ACAT test combines the p-values of the individual burden masks using the Cauchy combination method (see ref. 14 here ). The SBAT test is described into more detail here . If you only want to output the results for the joint tests (ignore the marginal tests), use --joint-only .","title":"Joint test for burden masks"},{"location":"options/#lovolodo-schemes","text":"The leave-one-variant-out (LOVO) scheme takes all sites going into a mask, and builds LOVO masks by leaving out one variant at a time from the full set of sites. The mask including all sites will also be computed. The argument for --mask-lovo is a comma-separated list which consists of the set/gene name, the mask name, and the AAF cutoff (either 'singleton' or a double in (0,1)). If using a 4-column annotation file, then --mask-lovo should have the gene name, the domain name, the mask name, and the AAF cutoff. So the LOVO masks will be generated for a specific gene domain. The leave-one-domain-out (LODO) scheme (specified by --mask-lodo ) takes all sites going into a mask and builds a LODO mask for each domain specified for the gene by excluding all variants in the domain. The full mask including all sites will also be computed. The argument for --mask-lodo should have the gene name, the mask name and the AAF cutoff.","title":"LOVO/LODO schemes"},{"location":"options/#writing-mask-files","text":"Burden masks built in regenie can be written to PLINK bed format. If the input genetic data contains dosages, the masks dosages will be converted to hard-calls prior to being written to file and these hard-calls will be used for the association testing. The PLINK bed file is written using 'ref-last' encoding (i.e. REF allele is listed last in the bim file). Note that this cannot be used with the LOVO/LODO schemes.","title":"Writing mask files"},{"location":"options/#options_1","text":"Option Argument Type Description --aaf-bins FLOAT,...,FLOAT Optional comma-separated list of AAF upper bounds to use when building masks [default is a single cutoff of 1%] --build-mask STRING Optional build masks using the maximum number of ALT alleles across sites ( 'max' ; the default), or the sum of ALT alleles ( 'sum' ), or thresholding the sum to 2 ( 'comphet' ) --singleton-carrier FLAG Optional to define singletons as variants with a single carrier in the sample (rather than alternative allele count=1) --set-singletons FLAG Optional to use 3rd column in AAF file to specify variants included in singleton masks --write-mask FLAG Optional write mask to PLINK bed format (does not work when building masks with 'sum') --vc-tests STRING Optional comma-separated list of SKAT/ACAT-type tests to run --vc-maxAAF FLOAT Optional AAF upper bound to use for SKAT/ACAT-type tests [default is 100%] --skat-params FLOAT,FLAT Optional a1,a2 values for the single variant weights computed from Beta(MAF,a1,a2) used in SKAT/ACAT-type tests [default is (1,25)] --skato-rho FLOAT,...,FLOAT Optional comma-separated list of $\\rho$ values used for SKATO models --vc-MACthr FLOAT Optional MAC threshold below which to collapse variants in SKAT/ACAT-type tests [default is 10] --joint STRING Optional comma-separated list of joint tests to apply on the generated burden masks --rgc-gene-p FLAG Optional to compute the GENE_P test --skip-test FLAG Optional to skip computing association tests after building masks and writing them to file --mask-lovo STRING Optional to perform LOVO scheme --lovo-snplist FILE Optional File with list of variants for which to compute LOVO masks --mask-lodo FLAG Optional to perform LODO scheme --weights-col INT Optional column index (1-based) in annotation file to use custom weights in gene-based tests --write-mask-snplist FLAG Optional to write list of variants that went into each mask to file --check-burden-files FLAG Optional to check the concordance between annotation, set list and mask files [see below ] --strict-check-burden FLAG Optional to exit early if the annotation, set list and mask definition files dont agree [see below ] Three rules can be used to build masks with --build-mask as shown in diagram below, where the last rule comphet applies a threshold of 2 to the mask from the sum rule.","title":"Options"},{"location":"options/#output_1","text":"With --out file Results are written in separate files for each phenotype file_.regenie,...,file_.regenie with the same output format mentioned above . Additionally, a header line is included (starting with ## ) which contains mask definition information. Masks will have name .. with the chromosome and physical position having been defined in the set list file, and the reference allele being ref , and the alternate allele corresponding to . . When using --mask-lovo , the mask name will be the same as above but have suffix _ to specify the variant which was excluded when building the mask. With --build-mask sum , the reported mask AAF corresponds to the average AAF across sites included in the mask. If using --write-mask , the masks will be saved to file_masks.{bed,bim,fam} and if using --write-mask-snplist , the list of variants included in each mask will be saved to file_masks.snplist . When using --rgc-gene-p , it will apply the single p-value per gene GENE_P strategy using all masks (see here for details).","title":"Output"},{"location":"options/#example-run","text":"Using Step 1 results from the Step 1 command above , we use the following command to build and test masks in Step 2 ./regenie \\ --step 2 \\ --bed example/example_3chr \\ --covarFile example/covariates.txt \\ --phenoFile example/phenotype_bin.txt \\ --bt \\ --remove example/fid_iid_to_remove.txt \\ --firth --approx \\ --pred fit_bin_out_pred.list \\ --anno-file example/example_3chr.annotations \\ --set-list example/example_3chr.setlist \\ --mask-def example/example_3chr.masks \\ --aaf-bins 0.1,0.05 \\ --write-mask \\ --bsize 200 \\ --out test_bin_out_firth For each set, this will produce masks using 3 AAF cutoffs (singletons, 5% and 10% AAF). The masks are written to PLINK bed file (in test_bin_out_firth_masks.{bed,bim,fam} ) and tested for association with each binary trait using Firth approximate test (summary stats in test_bin_out_firth_.regenie ). Note that the test uses the whole genome regression LOCO PRS from Step 1 of regenie (specified by --pred ).","title":"Example run"},{"location":"options/#checking-input-files","text":"To assess the concordance between the input files for building masks, you can use --check-burden-files which will generate a report in file_masks_report.txt containing: for each set, the list the variants in the set-list file which are unrecognized (not genotyped or not present in annotation file for the set) for each mask, the list of annotations in the mask definition file which are not in the annotation file Additionally, you can use --strict-check-burden to enforce full agreement between the three files (if not, program will terminate) : all genotyped variants in the set list file must be in the annotation file (for the corresponding set) all annotations in the mask definition file must be present in the annotation file","title":"Checking input files"},{"location":"options/#interaction-testing","text":"Starting from regenie v3.0, you can perform scans for interactions (either GxE or GxG). For GxE tests, the interacting variable should be part of the covariate file (if it is categorical, specify it in --catCovarList ). For GxG tests, the interacting variant can be part of the input genetic file or it can be present in an external file (see --interaction-snp-file )","title":"Interaction testing"},{"location":"options/#options_2","text":"Option Argument Type Description --interaction STRING Optional to run GxE test specifying the interacting covariate (see below) --interaction-snp STRING Optional to run GxG test specifying the interacting variant (see below) --interaction-file FORMAT,FILE Optional external genotype file containing the interacting variant [FORMAT can be bed/bgen/pgen and FILE is the file name (bgen) or file prefix (bed/pgen)] --interaction-file-sample FILE Optional accompagnying sample file for BGEN format --interaction-file-reffirst FLAG Optional use the first allele as the reference for BGEN or PLINK BED formats --no-condtl FLAG Optional to print out all the main effects from the interaction model (see Output section below) --force-condtl FLAG Optional to include the interacting SNP as a covariate in the marginal test (see Output section below) --rare-mac FLOAT Optional minor allele count (MAC) threshold below which to use HLM method for QTs [default is 1000] For GxE tests where the interacting variable is categorical, you can specify the baseline level using --interaction VARNAME[BASE_LEVEL] (e.g. --interaction BMI[<25] ). Otherwise, the first value found in the covariate file will be used as the baseline level. For GxG tests, the default coding for the interacting variant is additive. If you would like to use dominant/recessive/categorical coding, use --interaction-snp SNP_NAME[dom/rec/cat] (for example with dominant coding, --interaction-snp SNPNAME[dom] will allow for separate effects between carriers vs non-carriers of the interacting variant). The allowed values in the brackets are add/dom/rec/cat .","title":"Options"},{"location":"options/#output_2","text":"The result files will contain multiple lines for the same variant corresponding to the different null hypotheses being tested in the interaction model g(\\mu) = E\\alpha + G\\beta + (G\\odot E)\\gamma The suffix in the \"TEST\" column indicates which hypothesis is being tested: \"ADD\": marginal test where the interacting variable has not been added as a covariate $-$ this corresponds to $H_0: \\beta = 0$ given $\\alpha=\\gamma = 0$ this is only printed for GxG tests by default, or GxE using --no-condtl \"ADD-CONDTL\": marginal test where the interacting variable has been added as a covariate (default for GxE tests) $-$ this corresponds to $H_0: \\beta = 0$ given $\\gamma = 0$ this is only printed for GxE tests by default, or GxG using --force-condtl \"ADD-INT_VAR\": test for the main effect of the interaction variable (\"VAR\" will be replaced by the name of the interacting variable) $-$ this corresponds to $H_0: \\alpha = 0$ this is only printed for GxG tests by default, or GxE using --no-condtl If the interacting variable is categorical, you will have separate lines for each level aside from the baseline level (e.g. \"ADD-INT_BMI=25-30\" and \"ADD-INT_BMI=30+\" where baseline level is \"$<$25\") will also output the effect of $E^2$ in \"ADD-INT_VAR^2\" if the trait is binary (see here ) \"ADD-INT_SNP\": test for main effect of tested SNP in the interaction model $-$ this corresponds to $H_0: \\beta = 0$ \"ADD-INT_SNPxVAR\": test for interaction effect (\"VAR\" will be replaced by the name of the interacting variable) $-$ this corresponds to $H_0: \\gamma = 0$ If the interacting variable is categorical, you will have separate lines for each level aside from the baseline level (e.g. \"ADD-INT_SNPxBMI=25-30\" and \"ADD-INT_SNPxBMI=30+\" where baseline level is \"$<$25\") With Firth correction, only the effect sizes for the interaction effect at each level will be reported and the LRT p-value will only be computed for the joint test on the interaction effects \"ADD-INT_$k$DF\": joint test for main and interaction effect of tested variant ($k\\ge2$ for categorical interacting variables) $-$ this corresponds to $H_0: \\beta = \\gamma = 0$","title":"Output"},{"location":"options/#conditional-analyses","text":"Starting from regenie v3.0, you can specify genetic variants to add to the set of covariates when performing association testing. This works in both step 1 and 2, and can be used in conjunction with the gene-based tests or the interactiong testing feature. The conditioning variants will automatically be ignored from the analysis. Option Argument Type Description --condition-list FILE Required file with list of variants to condition on --condition-file FORMAT,FILE Optional get conditioning variants from external file (same argument format as --interaction-file ) --condition-file-sample FILE Optional accompagnying sample file for BGEN format --max-condition-vars INT Optional maximum number of conditioning variants [default is 10,000]","title":"Conditional analyses"},{"location":"options/#survival-analyses","text":"Starting from regenie v4.0, you can conduct survival analysis for time-to-event data.","title":"Survival analyses"},{"location":"options/#phenotype-file-format_1","text":"In this small example, there are 5 samples, and the event of interest is the diagnosis of cancer over a period of 10 years. Sample 1 is diagnosed with cancer during the study; the time variable is the number of years until the sample is diagnosed with cancer. Sample 2 drops out of the study; sample 3 dies during the study; sample 4 and 5 complete the study without being diagnosed with cancer; they are all right-censored, and the time variable is the last encounter or death time. The corresponding phenotype file is FID IID Time Cancer 1 1 6 1 2 2 5 0 3 3 2 0 4 4 10 0 5 5 10 0","title":"Phenotype file format"},{"location":"options/#required-options","text":"Survival analysis in regenie requires the following specific options in step 1, step 2 and gene-based burden tests. Option Argument Type Description --t2e FLAG Required specify the traits are time-to-event data --phenoColList STRING Required Comma separated list of time names to include in the analysis --eventColList STRING Required Comma separated list of columns in the phenotype file to include in the analysis that contain the events. These event columns should have 0=no event,1=event,NA=missing For the example above, the regenie call is ./regenie \\ --t2e \\ --phenoColList Time \\ --eventColList Cancer \\ ... For a phenotype file containing multiple time-to-event traits, the order of censor variables listed in --eventColList should match the order of time names specified in --phenoColList . For example, the phenotype file is FID IID Cancer_Time Cancer Asthma_Time Asthma 1 1 6 1 4 0 2 2 5 0 8 1 The regenie call is ./regenie \\ --t2e \\ --phenoColList Cancer_Time,Asthma_Time \\ --eventColList Cancer,Asthma \\ ... The output format is the same as the output file for quantitative and binary traits , with the BETA column containing the estimated harzard ratio (on log scale).","title":"Required options"},{"location":"options/#ld-computation","text":"REGENIE can calculate LD between a group of variants on the same chromosome. Option Argument Type Description --compute-corr FLAG Required compute LD matrix and write to binary file --output-corr-text FLAG Optional write Pearson correlations to text file --forcein-vars FLAG Optional retain all variants specified in --extract which absent from the genetic data in the LD matrix --ld-extract FILE Optional file listing single variants as well as burden masks to include in LD matrix (see below) Note that this can be quite memory intensive for large groups of variants (memory ~$8M^2$ bytes for $M$ variants).","title":"LD computation"},{"location":"options/#output_3","text":"Using --step 2 --out file By default, the LD matrix is stored in a binary compressed file file.corr and the list of variants corresponding to the columns of the LD matrix are stored in file.corr.snplist . The R script scripts/parseLD.r contains a function which returns the LD matrix, e.g. get.corr.sq.matrix(\"file.corr\") . Using --output-corr-text will write the Pearson correlations to a text file instead. When using --forcein-vars , variants not present in the genetic data will be added as extra column/rows in the LD matrix. For these variants, the diagonal entries in the matrix will be set to 1 and the off-diagonal entries 0. Using --ld-extract info.txt This option is used compute LD between single variants and burden masks generated on-the-fly in REGENIE; it requires specifying annotation files . The file info.txt should have three columns: variant type ('sv' or 'mask'), variant name, followed by the set (e.g. gene) name (this can be 'NA' for single variant). For example, it would look like: sv 1:1111:A:G NA sv 1:2222:C:T NA mask PCSK9.M1.0.01 PCSK9 . Note that the set and mask names must match that used in REGENIE based on provided annotation files and allele frequency cutoffs. Variant/masks not present in the data will be kept in the LD matrix but will have the corresponding correlations set to 0.","title":"Output"},{"location":"overview/","text":"Overview This page provides an overview of the models and methods implemented in regenie . A full description is given in our paper . regenie carries out genome-wide association tests for both quantitative and binary (case-control) phenotypes. Starting at regenie v4.0 , it also supports survival analysis for time-to-event data (See Survival analysis section below). It is designed to handle A large number of samples. For example, it is ideally suited to the UK Biobank dataset with 500,000 samples. A combination of genetic data from a micro-array, imputation and exome sequencing. A large number of either quantitative traits (QTs), binary (case-control) traits (BTs), or time-to-event traits (TTEs) Accounting for a set of covariates An overview of the regenie method is provided in the figure below. Essentially, regenie is run in 2 steps: In the first step a subset of genetic markers are used to fit a whole genome regression model that captures a good fraction of the phenotype variance attributable to genetic effects. In the second step, a larger set of genetic markers (e.g. imputed markers) are tested for association with the phenotype conditional upon the prediction from the regression model in Step 1, using a leave one chromosome out (LOCO) scheme, that avoids proximal contamination. Step 1 : Whole genome model In Step 1 a whole genome regression model is fit at a subset of the total set of available genetic markers. These are typically a set of several hundred thousand ( M ) common markers from a micro-array. Ridge regression (level 0) regenie reads in the M markers in blocks of B consecutive markers ( --bsize option). In each block, a set of ridge regression predictors are calculated for a small range of J shrinkage parameters \\{\\tau_1,\\ldots, \\tau_J\\} (using --l0 option [default is 5]) . For a block of SNPs in a N\\times B matrix X and N\\times 1 phenotype vector Y we calculate J predictors X\\widehat{\\beta}_1 \\ldots, X\\widehat{\\beta}_J where \\widehat{\\beta}_j = (X^TX+\\tau_j I)^{-1}X^T Y The idea behind using a range of shrinkage values is to capture the unknown number and size of truly associated genetic markers within each window. The ridge regression takes account of Linkage disequilibrium (LD) within each block. These predictors are stored in place of the genetic markers in matrix W , providing a large reduction in data size. For example, if M=500,000 and B=1,000 and J=5 shrinkage parameters are used, then the reduced dataset will have JM/B=2,500 predictors. Ridge regression is used in this step for both quantitative and binary traits. Cross-validation (level 1) The predictors generated by the ridge regression step will all be positively correlated with the phenotype. Thus, it is important to account for that correlation when building a whole genome wide regression model. When analyzing a quantitative trait we use a second level of ridge regression on the full set of JM/B predictors in W . This approach is inspired by the method of stacked regressions 1 . We fit the ridge regression for a range of shrinkage parameters ( --l1 option) and choose a single best value using K-fold cross validation scheme. This assesses the predictive performance of the model using held out sets of data, and aims to control any over-fitting induced by using the first level of ridge regression to derive the predictors. In other words, we fit the model Y = W\\alpha + \\epsilon where \\alpha is estimated as \\widehat{\\alpha} = (W^TW + \\phi\\,I)^{-1}W^TY and the parameter \\phi is chosen via K-fold cross-validation. For binary traits, we use a logistic ridge regression model to combine the predictors in W \\text{logit}(p) = \\mu + W\\alpha where p is the probability of being a case and \\mu captures the effects of non-genetic covariates. Genetic predictors and LOCO Once \\alpha has been estimated we can construct the genetic prediction Z = W\\widehat{\\alpha} Also, since each column of the matrix W will be associated with a chromosome we can can also construct a genetic prediction ignoring any one chromosome, by simply ignoring those columns when calculating the prediction. This is known as the Leave One Chromosome Out (LOCO) approach. These LOCO predictions are valuable at Step 2 of regenie when each marker is tested for associated (see below). For binary traits, it is the linear predictor in a logistic regression model using LOCO that is saved, and used as an offset when fitting logistic regression models to test for association. Multiple phenotypes The dimension reduction step using ridge regression can be used very efficiently to model multiple phenotypes at once. The ridge regression equations for a block of SNPs in a N\\times B matrix X and a single phenotype in a N\\times 1 matrix Y take the form \\widehat{\\beta} = AY where A = (X^TX+\\tau I)^{-1}X^T does not depend on Y If instead P phenotypes are stored in columns of a N\\times P matrix Y , then the matrix A can be applied jointly to calculate the matrix of estimates \\widehat{\\beta} = AY , and this can take advantage of parallel linear algebra implementations in the Eigen matrix library. Covariates Covariates, such as age and sex and batch effect variables can be included in the regenie model. For quantitative traits, any covariates are regressed out of phenotypes and genotypes before fitting the model. For binary traits, we fit a null model with only covariates, and use predictions from that model as an offset when fitting the logistic regression model. Step 2 : Single-variant association testing In Step 2, a larger set of markers are tested for association with the trait (or traits). As with Step 1, these markers are also read in blocks of B markers, and tested for association. This avoids having to have all markers stored in memory at once. Quantitative traits For quantitative traits, we use a linear regression model for association testing. Covariates are regressed out of the phenotypes and genetic markers. The LOCO predictions from Step 1 are removed from the phenotypes. Linear regression is then used to test association of the residualized phenotype and the genetic marker. Parallel linear algebra operations in the Eigen library are used where possible. Binary traits For binary traits, logistic regression score test is used to test association of the phenotype and the genetic marker. The logistic regression model includes the LOCO predictions from Step 1 as an offset . Covariates are included in the linear predictor in the usual way. When the case-control ratio is imbalanced, standard association tests don't control Type I error well at rare genetic markers. regenie has two options to handle this Firth logistic regression Standard maximum likelihood estimates are generally biased. The Firth correction 2 removes much of the bias, and results in better calibrated test statistics. The correction involves adding a penalty term to the log-likelihood, \\widetilde{l}(\\theta) = l(\\theta) + {1 \\over 2} \\log I|\\theta| where the penalty term corresponds to the use of Jeffrey's Prior. This prior has the effect of shrinking the effect size towards zero. regenie uses a Firth correction when the p-value from the standard logistic regression test is below a threshold (default 0.05). It also includes a novel, accurate and fast approximate Firth correction which is ~60x faster than the exact Firth correction (see the option --firth ). The p-value reported in regenie is based on a likelihood ratio test (LRT), and we use the Hessian of the log-likelihood without the penalty term to estimate the standard error (SE). This may cause an issue in meta-analyses with rare variants, as the effect size estimate and SE may not match with the LRT p-value. Hence, we added an option --firth-se to report a SE computed instead from the effect size estimate and the LRT p-value. Saddle point approxiation (SPA) test The SPA test approximates the null distribution of the test statistic by approximating the cumulant generating function of the test statistic, which involves all of the higher order moments 3 $^,$ 4 . This provides a better estimation of the tail probabilities compared to using standard asymptotic theory which relies on the normal approximation and uses only the first two moments of the dsitribution. A tail probability is obtained as \\begin{align*} P&(T < t_{\\text{obs}}) \\approx \\Phi(z), \\text{ where,}\\\\ z &= w + \\frac{1}{w}\\log{\\frac{v}{w}}\\\\ w &= \\text{sign}(\\delta^*)\\sqrt{ 2 [ t_{\\text{obs}}\\, \\delta^* - K(\\delta^*)}],\\, v = \\delta^*\\sqrt{K''(\\delta^*)} \\end{align*} and K(\\delta) is the cumulant generating function of the test statistic and \\delta^* is obtained by using a root-finding algorithm for K'(\\delta)=t_{\\text{obs}} . As this approximation has been found not to work very well for ultra-rare variants, a minimum minor allele count (MAC) is used to filter out these variants before testing (option --minMAC ). Step 2 : Gene-based testing Instead of performing single-variant association tests, multiple variants can be aggregated in a given region, such as a gene, using the following model g(\\mu) = w_1G_1\\beta_1 + \\dots + w_mG_m\\beta_m where G_i 's represent the single variants included in the test, w_i 's and \\beta_i 's are weights and effect sizes, respectively, for each variant, and g(.) is a link function for the phenotypic mean \\mu . We also denote by S_i the score statistics obtained from the single-variant tests . This can be especially helpful when testing rare variants as single-variant tests usually have lower power performance. To avoid inflation in the gene-based tests due to rare variants as well as reduce computation time, we have implemented the collapsing approach proposed in SAIGE-GENE+ 5 , where ultra-rare variants are aggregated into a mask. For highly imbalanced binary traits, SPA/Firth correction can be used to calibrate the test statistics in the gene-based tests as proposed in Zhao et al. (2020) 6 using --firth/--spa . Burden tests Burden tests, as defined in Lee et al. (2014) 7 , assume \\beta_i=\\beta\\; \\forall i , where \\beta is a fixed coefficient, which then leads to the test statistic Q_{BURDEN} = \\left(\\sum_i w_iS_i\\right)^2 These tests collapse variants into a single variable which is then tested for association with the phenotype. Hence, they are more powerful when variants have effects in the same direction and of similar magnitude. In regenie , multiple options are available to aggregate variants together into a burden mask beyond the linear combination above ( see here ). For example, the burden tests that were employed in Backman et al. (2021) 8 use the default strategy in regenie of collapsing variants by taking the maximum number of rare alleles across the sites. Variance component tests Unlike burden tests, SKAT 9 assume the effect sizes $\\beta_i$ come from an arbitrary distribution with mean 0 and variance $\\tau^2$ which leads to the test statistic Q_{SKAT} = \\sum_i w_i^2S_i^2 Hence, SKAT can remain powerful when variant effects are in opposite directions. The omnibus test SKATO 10 combines the SKAT and burden tests as Q_{SKATO} = \\rho Q_{BURDEN} + (1-\\rho) Q_{SKAT} So setting $\\rho=0$ corresponds to SKAT and $\\rho=1$ to the burden test. In practice, the parameter $\\rho$ is chosen to maximize the power [ regenie uses a default grid of 8 values {$0, 0.1^2, 0.2^2, 0.3^2, 0.4^2, 0.5^2, 0.5, 1$} and set the weights $w_i = Beta(MAF_i,1,25)$]. To obtain the p-value from a linear combination of chi-squared variables, regenie uses Davies' exact method 11 by default. Following Wu et al (2016) 12 , regenie uses Kuonen's saddlepoint approximation method 13 when the Davies' p-value is below 1e-5 and if that fails, it uses Davies' method with more stringent convergence parameters (lim=1e5,acc=1e-9). The original SKATO method uses numerical integration when maximizing power across the various SKATO models that use different values for $\\rho$. We also implement a modification of SKATO, named SKATO-ACAT, which instead uses the Cauchy combination method 14 to combine the p-values from the different SKATO models. Cauchy combination tests The ACATV 15 test uses the Cauchy combination method ACAT to combine single variant p-values $p_i$ as Q_{ACATV} = \\sum_i \\widetilde{w}_i^2\\tan{\\{\\pi(0.5 - p_i)\\}} where we set $\\widetilde{w}_i = w_i \\sqrt{MAF(1-MAF)}$. This test is highly computationally tractable and is robust to correlation between the single variant tests. The omnibus test ACATO 15 combines ACATV with the SKAT and burden tests as Q_{ACATO} = \\frac{1}{3}\\tan{\\{\\pi(0.5 - p_{ACATV})\\}}+ \\frac{1}{3}\\tan{\\{\\pi(0.5 - p_{Burden})\\}}+ \\frac{1}{3}\\tan{\\{\\pi(0.5 - p_{SKAT})\\}} where unlike the original ACATO test, we only use one set of the weights $w_i$. Alternatively, we augment the test to include an extended set of SKATO models beyond SKAT and Burden (which correspond to $\\rho$ of 0 and 1 in SKATO respectively) and use the default SKATO grid of 8 values for $\\rho$. Sparse Burden Association Test regenie can generate burden masks which are obtained by aggregating single variants using various annotation classes as well as allele frequency thresholds. The Sparse Burden Association Test (SBAT) 16 combines these burden masks in a joint model imposing constraints of same direction of effects \\mu = \\sum_{\\text{mask }i} M_i\\gamma_i where $M_i$ represent a burden mask and we solve \\underset{\\boldsymbol\\gamma}{\\min} || Y - \\sum_i M_i\\gamma_i||^2 \\text{ subject to } \\gamma_i \\ge 0 \\text{ for all } i The SBAT method tests the hypothesis $H_0: \\gamma_i=0$ for all $i$ vs. $H_1: \\gamma_i > 0$ for some $i$. By using this joint model, the SBAT test accounts for the correlation structure between the burden masks and with the non-negative constraints, it can lead to boost in power performance when multiple burden masks are causal and have concordant effects. This test has the nice property that it combines model selection of the masks (via the sparsity induced by the non-negative assumption) with model inference (it is well calibrated and powerful). GENE_P As the different gene-based tests in REGENIE can be more powerful under different genetic architectures, we propose a unified strategy, named GENE_P, that combines the strengths of these tests. It uses ACAT to combine the p-values of the SKATO, ACATV, Burden and SBAT tests and obtain an overall assessment of significance for a genetic region (e.g. gene). The diagram below illustrates the GENE_P test using 4 masks (i.e. combination of variant annotations) and 3 allele frequency cutoffs when performing gene-based tests. Step 2 : Interaction testing The GxE tests are of the form g(\\mu) = E\\alpha + G\\beta + (G\\odot E)\\gamma where $E$ is an environmental risk factor and $G$ is a marker of interest, and $\\odot$ represents the Haddamard (entry-wise) product of the two. The last term in the model allows for the variant to have different effects across values of the risk factor. Note: if $E$ is categorical, we use a dummy variable for each level of $E$ in the model above. We can look at the following hypotheses: $H_0: \\beta = 0$ given $\\gamma = 0$, which is a marginal test for the SNP $H_0: \\beta = 0$, which is a test for the main effect of the SNP in the full model $H_0: \\gamma = 0$, which is a test for interaction $H_0: \\beta = \\gamma = 0$, which tests both main and interaction effects for the SNP Misspecification of the model above, such as in the presence of heteroskedasticity, or the presence of high case-control imbalance can lead to inflation in the tests. Robust (sandwich) standard error (SE) estimators 17 can be used to adress model misspecification however, they can suffer from inflation when testing rare variants or in the presence of high case-control imbalance 18 $^,$ 19 . In regenie , we use a hybrid approach which combines: Wald test with sandwich estimators Wald test with heteroskedastic linear models (for quantitative traits) LRT with penalized Firth regression (for binary traits) For quantitative traits, we use the sandwich estimators HC3 to perform a Wald test for variants whose minor allele count (MAC) is above 1000 (see --rare-mac ). For the remaining variants, we fit a heteroskedastic linear model (HLM) 20 Y = E\\alpha + E^2\\zeta + G\\beta + (G\\odot E)\\gamma + \\epsilon where we assume $\\epsilon \\sim N(0, D)$ where $D$ is a diagonal matrix with entries $\\sigma^2\\exp{(1 + E\\theta_1 + E^2\\theta_2)}$. This formulation allows for the phenotypic variance to also depend on the risk factor $E$. By incorporating both the linear and quadratic effect of $E$ in the mean and variance of $Y$, this model provides robustness to heteroskedasticity ( Note: the $E^2$ terms are only added when $E$ is quantitative ). Wald tests are then performed for the null hypotheses listed above. For binary traits, we consider the following interaction model \\text{logit}(\\mu) = E\\alpha + E^2\\zeta + G\\beta + (G\\odot E)\\gamma where we also include a non-linear effect for $E$ (not if categorical). The sandwich estimator HC3 is used in a Wald test for variants whose MAC is above 1000 (see --rare-mac ) otherwise the model-based standard errors are used. When Firth is specified, we only apply the Firth correction using LRT if the p-value for the interaction term $\\gamma$ from the Wald test is below a specified threshold (see --pThresh ). So the added $E^2$ term as well as the use of the Firth penalty help with case-control imbalance and model misspecification for the effect of $E$ on the phenotype. Survival analysis Starting with regenie v4.0 , we have enabled survival analysis, improving the power for analyzing common diseases where time-to-event data is available by leveraging the Cox Proportional Harzard model. We assume that samples without an event are right-censored, i.e. the survival time is only known to be greater than a certain value. It is important to encode this information correctly into the phenotypes . Step 1: Whole genome model using cox ridge regression In step 1, Level 0 is run using linear ridge regression with the time variable taken as the response. In Level 1, instead of linear/logistic ridge regression, we use Cox Ridge regression 21 to combine the predictions $W$ from Level 0. \\lambda_i(t) = \\lambda_0(t) \\exp(\\mu_i + w_i^\\intercal \\alpha) where $\\lambda_0(t)$ is the baseline hazard function, and, for the $i$-th individual, $\\lambda_i(t)$ is the hazard function, $w_i$ is the set of ridge predictors from Level 0, and $\\mu_i$ captures the effects of non-genetic covariates. We fit the cox ridge regression for a range of shrinkage parameters and select the best value using a K-fold cross validation scheme. With the estimated $\\hat{\\alpha}$, we construct LOCO predictions which capture population structure, relatedness and polygenicity. Step 2: Single variant and gene-based burden tests For time-to-event traits, the cox proportional hazard regression model is used to test the association between the phenotype and the genetic marker. Note : the only supported gene-based test is the burden test. The cox proportional hazard regression model includes the LOCO predictions from Step 1 as an offset. \\lambda_i(t) = \\lambda_0(t) \\exp(\\mu_i + w_{i, LOCO} + g_i \\beta) We test the null hypothesis $H_0: \\beta = 0$ using a score test. When the event rate is low, the standard score test doesn't control Type I error well at rare genetic markers. To reduce the bias and achieve a more robust test, regenie uses Firth correction 22 when the p-value from the standard score test is below a threshold (default 0.05). The firth correction provides a well-calibrated test, but comes with a computational cost. To mitigate this burden in Cox regression, we include a fast approximate test, which gives results very similar to the exact Firth test. Missing Phenotype data With QTs, missing values are mean-imputed in Step 1 and they are dropped when testing each phenotype in Step 2 (unless using --force-impute ). With BTs, missing values are mean-imputed in Step 1 when fitting the level 0 linear ridge regression and they are dropped when fitting the level 1 logistic ridge regression for each trait. In Step 2, missing values are dropped when testing each trait. To remove all samples that have missing values at any of the P phenotypes from the analysis, use option --strict in step 1 and 2. This can also be used when analyzing a single trait to only keep individuals with complete data by setting the phenotype values of individuals to remove to NA. Note: imputation is only applied to phenotypes; covariates are not allowed to have missing data. References Breiman, L. Stacked regressions. Machine learning 24 , 49\u201364 (1996). \u21a9 Firth, D. Bias reduction of maximum likelihood estimates. Biometrika 80 , 27\u201338 (1993). \u21a9 Butler, R. W. Saddlepoint approximations with applications . (Cambridge University Press, 2007). \u21a9 Dey, R., Schmidt, E. M., Abecasis, G. R. & Lee, S. A fast and accurate algorithm to test for binary phenotypes and its application to PheWAS. The American Journal of Human Genetics 101 , 37\u201349 (2017). \u21a9 Zhou, W. et al. Set-based rare variant association tests for biobank scale sequencing data sets. medRxiv (2021). \u21a9 Zhao, Z. et al. UK biobank whole-exome sequence binary phenome analysis with robust region-based rare-variant test. Am J Hum Genet 106 , 3\u201312 (2020). \u21a9 Lee, S., Abecasis, G. R., Boehnke, M. & Lin, X. Rare-variant association analysis: Study designs and statistical tests. Am J Hum Genet 95 , 5\u201323 (2014). \u21a9 Backman, J. D. et al. Exome sequencing and analysis of 454,787 UK biobank participants. Nature 599 , 628\u2013634 (2021). \u21a9 Wu, M. C. et al. Rare-variant association testing for sequencing data with the sequence kernel association test. Am J Hum Genet 89 , 82\u201393 (2011). \u21a9 Lee, S., Wu, M. C. & Lin, X. Optimal tests for rare variant effects in sequencing association studies. Biostatistics 13 , 762\u201375 (2012). \u21a9 Davies, R. B. Algorithm AS 155: The distribution of a linear combination of \u03c7 2 random variables. Applied Statistics 29 , 323\u2013333 (1980). \u21a9 Wu, B., Guan, W. & Pankow, J. S. On efficient and accurate calculation of significance p-values for sequence kernel association testing of variant set. Ann Hum Genet 80 , 123\u201335 (2016). \u21a9 Kuonen, D. Miscellanea. Saddlepoint approximations for distributions of quadratic forms in normal variables. Biometrika 86 , 929\u2013935 (1999). \u21a9 Liu, Y. & Xie, J. Cauchy combination test: A powerful test with analytic p-value calculation under arbitrary dependency structures. J Am Stat Assoc 115 , 393\u2013402 (2020). \u21a9 Liu, Y. et al. ACAT: A fast and powerful p value combination method for rare-variant analysis in sequencing studies. Am J Hum Genet 104 , 410\u2013421 (2019). \u21a9 \u21a9 Ziyatdinov, A. et al. Joint testing of rare variant burden scores using non-negative least squares. The American Journal of Human Genetics 111 , 2139\u20132149 (2024). \u21a9 MacKinnon, J. G. & White, H. Some heteroskedasticity-consistent covariance matrix estimators with improved finite sample properties. Journal of Econometrics 29 , 305\u2013325 (1985). \u21a9 Tchetgen Tchetgen, E. J. & Kraft, P. On the robustness of tests of genetic associations incorporating gene-environment interaction when the environmental exposure is misspecified. Epidemiology 22 , 257\u201361 (2011). \u21a9 Voorman, A., Lumley, T., McKnight, B. & Rice, K. Behavior of QQ-plots and genomic control in studies of gene-environment interaction. PLoS One 6 , (2011). \u21a9 Young, A. I., Wauthier, F. L. & Donnelly, P. Identifying loci affecting trait variability and detecting interactions in genome-wide association studies. Nat Genet 50 , 1608\u20131614 (2018). \u21a9 Simon, N., Friedman, J. H., Hastie, T. & Tibshirani, R. Regularization paths for cox\u2019s proportional hazards model via coordinate descent. Journal of statistical software 39 , 1\u201313 (2011). \u21a9 Heinze, G. & Schemper, M. A solution to the problem of monotone likelihood in cox regression. Biometrics 57 , 114\u2013119 (2001). \u21a9","title":"Overview"},{"location":"overview/#overview","text":"This page provides an overview of the models and methods implemented in regenie . A full description is given in our paper . regenie carries out genome-wide association tests for both quantitative and binary (case-control) phenotypes. Starting at regenie v4.0 , it also supports survival analysis for time-to-event data (See Survival analysis section below). It is designed to handle A large number of samples. For example, it is ideally suited to the UK Biobank dataset with 500,000 samples. A combination of genetic data from a micro-array, imputation and exome sequencing. A large number of either quantitative traits (QTs), binary (case-control) traits (BTs), or time-to-event traits (TTEs) Accounting for a set of covariates An overview of the regenie method is provided in the figure below. Essentially, regenie is run in 2 steps: In the first step a subset of genetic markers are used to fit a whole genome regression model that captures a good fraction of the phenotype variance attributable to genetic effects. In the second step, a larger set of genetic markers (e.g. imputed markers) are tested for association with the phenotype conditional upon the prediction from the regression model in Step 1, using a leave one chromosome out (LOCO) scheme, that avoids proximal contamination.","title":"Overview"},{"location":"overview/#step-1-whole-genome-model","text":"In Step 1 a whole genome regression model is fit at a subset of the total set of available genetic markers. These are typically a set of several hundred thousand ( M ) common markers from a micro-array.","title":"Step 1 : Whole genome model"},{"location":"overview/#ridge-regression-level-0","text":"regenie reads in the M markers in blocks of B consecutive markers ( --bsize option). In each block, a set of ridge regression predictors are calculated for a small range of J shrinkage parameters \\{\\tau_1,\\ldots, \\tau_J\\} (using --l0 option [default is 5]) . For a block of SNPs in a N\\times B matrix X and N\\times 1 phenotype vector Y we calculate J predictors X\\widehat{\\beta}_1 \\ldots, X\\widehat{\\beta}_J where \\widehat{\\beta}_j = (X^TX+\\tau_j I)^{-1}X^T Y The idea behind using a range of shrinkage values is to capture the unknown number and size of truly associated genetic markers within each window. The ridge regression takes account of Linkage disequilibrium (LD) within each block. These predictors are stored in place of the genetic markers in matrix W , providing a large reduction in data size. For example, if M=500,000 and B=1,000 and J=5 shrinkage parameters are used, then the reduced dataset will have JM/B=2,500 predictors. Ridge regression is used in this step for both quantitative and binary traits.","title":"Ridge regression (level 0)"},{"location":"overview/#cross-validation-level-1","text":"The predictors generated by the ridge regression step will all be positively correlated with the phenotype. Thus, it is important to account for that correlation when building a whole genome wide regression model. When analyzing a quantitative trait we use a second level of ridge regression on the full set of JM/B predictors in W . This approach is inspired by the method of stacked regressions 1 . We fit the ridge regression for a range of shrinkage parameters ( --l1 option) and choose a single best value using K-fold cross validation scheme. This assesses the predictive performance of the model using held out sets of data, and aims to control any over-fitting induced by using the first level of ridge regression to derive the predictors. In other words, we fit the model Y = W\\alpha + \\epsilon where \\alpha is estimated as \\widehat{\\alpha} = (W^TW + \\phi\\,I)^{-1}W^TY and the parameter \\phi is chosen via K-fold cross-validation. For binary traits, we use a logistic ridge regression model to combine the predictors in W \\text{logit}(p) = \\mu + W\\alpha where p is the probability of being a case and \\mu captures the effects of non-genetic covariates.","title":"Cross-validation (level 1)"},{"location":"overview/#genetic-predictors-and-loco","text":"Once \\alpha has been estimated we can construct the genetic prediction Z = W\\widehat{\\alpha} Also, since each column of the matrix W will be associated with a chromosome we can can also construct a genetic prediction ignoring any one chromosome, by simply ignoring those columns when calculating the prediction. This is known as the Leave One Chromosome Out (LOCO) approach. These LOCO predictions are valuable at Step 2 of regenie when each marker is tested for associated (see below). For binary traits, it is the linear predictor in a logistic regression model using LOCO that is saved, and used as an offset when fitting logistic regression models to test for association.","title":"Genetic predictors and LOCO"},{"location":"overview/#multiple-phenotypes","text":"The dimension reduction step using ridge regression can be used very efficiently to model multiple phenotypes at once. The ridge regression equations for a block of SNPs in a N\\times B matrix X and a single phenotype in a N\\times 1 matrix Y take the form \\widehat{\\beta} = AY where A = (X^TX+\\tau I)^{-1}X^T does not depend on Y If instead P phenotypes are stored in columns of a N\\times P matrix Y , then the matrix A can be applied jointly to calculate the matrix of estimates \\widehat{\\beta} = AY , and this can take advantage of parallel linear algebra implementations in the Eigen matrix library.","title":"Multiple phenotypes"},{"location":"overview/#covariates","text":"Covariates, such as age and sex and batch effect variables can be included in the regenie model. For quantitative traits, any covariates are regressed out of phenotypes and genotypes before fitting the model. For binary traits, we fit a null model with only covariates, and use predictions from that model as an offset when fitting the logistic regression model.","title":"Covariates"},{"location":"overview/#step-2-single-variant-association-testing","text":"In Step 2, a larger set of markers are tested for association with the trait (or traits). As with Step 1, these markers are also read in blocks of B markers, and tested for association. This avoids having to have all markers stored in memory at once.","title":"Step 2 : Single-variant association testing"},{"location":"overview/#quantitative-traits","text":"For quantitative traits, we use a linear regression model for association testing. Covariates are regressed out of the phenotypes and genetic markers. The LOCO predictions from Step 1 are removed from the phenotypes. Linear regression is then used to test association of the residualized phenotype and the genetic marker. Parallel linear algebra operations in the Eigen library are used where possible.","title":"Quantitative traits"},{"location":"overview/#binary-traits","text":"For binary traits, logistic regression score test is used to test association of the phenotype and the genetic marker. The logistic regression model includes the LOCO predictions from Step 1 as an offset . Covariates are included in the linear predictor in the usual way. When the case-control ratio is imbalanced, standard association tests don't control Type I error well at rare genetic markers. regenie has two options to handle this","title":"Binary traits"},{"location":"overview/#firth-logistic-regression","text":"Standard maximum likelihood estimates are generally biased. The Firth correction 2 removes much of the bias, and results in better calibrated test statistics. The correction involves adding a penalty term to the log-likelihood, \\widetilde{l}(\\theta) = l(\\theta) + {1 \\over 2} \\log I|\\theta| where the penalty term corresponds to the use of Jeffrey's Prior. This prior has the effect of shrinking the effect size towards zero. regenie uses a Firth correction when the p-value from the standard logistic regression test is below a threshold (default 0.05). It also includes a novel, accurate and fast approximate Firth correction which is ~60x faster than the exact Firth correction (see the option --firth ). The p-value reported in regenie is based on a likelihood ratio test (LRT), and we use the Hessian of the log-likelihood without the penalty term to estimate the standard error (SE). This may cause an issue in meta-analyses with rare variants, as the effect size estimate and SE may not match with the LRT p-value. Hence, we added an option --firth-se to report a SE computed instead from the effect size estimate and the LRT p-value.","title":"Firth logistic regression"},{"location":"overview/#saddle-point-approxiation-spa-test","text":"The SPA test approximates the null distribution of the test statistic by approximating the cumulant generating function of the test statistic, which involves all of the higher order moments 3 $^,$ 4 . This provides a better estimation of the tail probabilities compared to using standard asymptotic theory which relies on the normal approximation and uses only the first two moments of the dsitribution. A tail probability is obtained as \\begin{align*} P&(T < t_{\\text{obs}}) \\approx \\Phi(z), \\text{ where,}\\\\ z &= w + \\frac{1}{w}\\log{\\frac{v}{w}}\\\\ w &= \\text{sign}(\\delta^*)\\sqrt{ 2 [ t_{\\text{obs}}\\, \\delta^* - K(\\delta^*)}],\\, v = \\delta^*\\sqrt{K''(\\delta^*)} \\end{align*} and K(\\delta) is the cumulant generating function of the test statistic and \\delta^* is obtained by using a root-finding algorithm for K'(\\delta)=t_{\\text{obs}} . As this approximation has been found not to work very well for ultra-rare variants, a minimum minor allele count (MAC) is used to filter out these variants before testing (option --minMAC ).","title":"Saddle point approxiation (SPA) test"},{"location":"overview/#step-2-gene-based-testing","text":"Instead of performing single-variant association tests, multiple variants can be aggregated in a given region, such as a gene, using the following model g(\\mu) = w_1G_1\\beta_1 + \\dots + w_mG_m\\beta_m where G_i 's represent the single variants included in the test, w_i 's and \\beta_i 's are weights and effect sizes, respectively, for each variant, and g(.) is a link function for the phenotypic mean \\mu . We also denote by S_i the score statistics obtained from the single-variant tests . This can be especially helpful when testing rare variants as single-variant tests usually have lower power performance. To avoid inflation in the gene-based tests due to rare variants as well as reduce computation time, we have implemented the collapsing approach proposed in SAIGE-GENE+ 5 , where ultra-rare variants are aggregated into a mask. For highly imbalanced binary traits, SPA/Firth correction can be used to calibrate the test statistics in the gene-based tests as proposed in Zhao et al. (2020) 6 using --firth/--spa .","title":"Step 2 : Gene-based testing"},{"location":"overview/#burden-tests","text":"Burden tests, as defined in Lee et al. (2014) 7 , assume \\beta_i=\\beta\\; \\forall i , where \\beta is a fixed coefficient, which then leads to the test statistic Q_{BURDEN} = \\left(\\sum_i w_iS_i\\right)^2 These tests collapse variants into a single variable which is then tested for association with the phenotype. Hence, they are more powerful when variants have effects in the same direction and of similar magnitude. In regenie , multiple options are available to aggregate variants together into a burden mask beyond the linear combination above ( see here ). For example, the burden tests that were employed in Backman et al. (2021) 8 use the default strategy in regenie of collapsing variants by taking the maximum number of rare alleles across the sites.","title":"Burden tests"},{"location":"overview/#variance-component-tests","text":"Unlike burden tests, SKAT 9 assume the effect sizes $\\beta_i$ come from an arbitrary distribution with mean 0 and variance $\\tau^2$ which leads to the test statistic Q_{SKAT} = \\sum_i w_i^2S_i^2 Hence, SKAT can remain powerful when variant effects are in opposite directions. The omnibus test SKATO 10 combines the SKAT and burden tests as Q_{SKATO} = \\rho Q_{BURDEN} + (1-\\rho) Q_{SKAT} So setting $\\rho=0$ corresponds to SKAT and $\\rho=1$ to the burden test. In practice, the parameter $\\rho$ is chosen to maximize the power [ regenie uses a default grid of 8 values {$0, 0.1^2, 0.2^2, 0.3^2, 0.4^2, 0.5^2, 0.5, 1$} and set the weights $w_i = Beta(MAF_i,1,25)$]. To obtain the p-value from a linear combination of chi-squared variables, regenie uses Davies' exact method 11 by default. Following Wu et al (2016) 12 , regenie uses Kuonen's saddlepoint approximation method 13 when the Davies' p-value is below 1e-5 and if that fails, it uses Davies' method with more stringent convergence parameters (lim=1e5,acc=1e-9). The original SKATO method uses numerical integration when maximizing power across the various SKATO models that use different values for $\\rho$. We also implement a modification of SKATO, named SKATO-ACAT, which instead uses the Cauchy combination method 14 to combine the p-values from the different SKATO models.","title":"Variance component tests"},{"location":"overview/#cauchy-combination-tests","text":"The ACATV 15 test uses the Cauchy combination method ACAT to combine single variant p-values $p_i$ as Q_{ACATV} = \\sum_i \\widetilde{w}_i^2\\tan{\\{\\pi(0.5 - p_i)\\}} where we set $\\widetilde{w}_i = w_i \\sqrt{MAF(1-MAF)}$. This test is highly computationally tractable and is robust to correlation between the single variant tests. The omnibus test ACATO 15 combines ACATV with the SKAT and burden tests as Q_{ACATO} = \\frac{1}{3}\\tan{\\{\\pi(0.5 - p_{ACATV})\\}}+ \\frac{1}{3}\\tan{\\{\\pi(0.5 - p_{Burden})\\}}+ \\frac{1}{3}\\tan{\\{\\pi(0.5 - p_{SKAT})\\}} where unlike the original ACATO test, we only use one set of the weights $w_i$. Alternatively, we augment the test to include an extended set of SKATO models beyond SKAT and Burden (which correspond to $\\rho$ of 0 and 1 in SKATO respectively) and use the default SKATO grid of 8 values for $\\rho$.","title":"Cauchy combination tests"},{"location":"overview/#sparse-burden-association-test","text":"regenie can generate burden masks which are obtained by aggregating single variants using various annotation classes as well as allele frequency thresholds. The Sparse Burden Association Test (SBAT) 16 combines these burden masks in a joint model imposing constraints of same direction of effects \\mu = \\sum_{\\text{mask }i} M_i\\gamma_i where $M_i$ represent a burden mask and we solve \\underset{\\boldsymbol\\gamma}{\\min} || Y - \\sum_i M_i\\gamma_i||^2 \\text{ subject to } \\gamma_i \\ge 0 \\text{ for all } i The SBAT method tests the hypothesis $H_0: \\gamma_i=0$ for all $i$ vs. $H_1: \\gamma_i > 0$ for some $i$. By using this joint model, the SBAT test accounts for the correlation structure between the burden masks and with the non-negative constraints, it can lead to boost in power performance when multiple burden masks are causal and have concordant effects. This test has the nice property that it combines model selection of the masks (via the sparsity induced by the non-negative assumption) with model inference (it is well calibrated and powerful).","title":"Sparse Burden Association Test"},{"location":"overview/#gene_p","text":"As the different gene-based tests in REGENIE can be more powerful under different genetic architectures, we propose a unified strategy, named GENE_P, that combines the strengths of these tests. It uses ACAT to combine the p-values of the SKATO, ACATV, Burden and SBAT tests and obtain an overall assessment of significance for a genetic region (e.g. gene). The diagram below illustrates the GENE_P test using 4 masks (i.e. combination of variant annotations) and 3 allele frequency cutoffs when performing gene-based tests.","title":"GENE_P"},{"location":"overview/#step-2-interaction-testing","text":"The GxE tests are of the form g(\\mu) = E\\alpha + G\\beta + (G\\odot E)\\gamma where $E$ is an environmental risk factor and $G$ is a marker of interest, and $\\odot$ represents the Haddamard (entry-wise) product of the two. The last term in the model allows for the variant to have different effects across values of the risk factor. Note: if $E$ is categorical, we use a dummy variable for each level of $E$ in the model above. We can look at the following hypotheses: $H_0: \\beta = 0$ given $\\gamma = 0$, which is a marginal test for the SNP $H_0: \\beta = 0$, which is a test for the main effect of the SNP in the full model $H_0: \\gamma = 0$, which is a test for interaction $H_0: \\beta = \\gamma = 0$, which tests both main and interaction effects for the SNP Misspecification of the model above, such as in the presence of heteroskedasticity, or the presence of high case-control imbalance can lead to inflation in the tests. Robust (sandwich) standard error (SE) estimators 17 can be used to adress model misspecification however, they can suffer from inflation when testing rare variants or in the presence of high case-control imbalance 18 $^,$ 19 . In regenie , we use a hybrid approach which combines: Wald test with sandwich estimators Wald test with heteroskedastic linear models (for quantitative traits) LRT with penalized Firth regression (for binary traits) For quantitative traits, we use the sandwich estimators HC3 to perform a Wald test for variants whose minor allele count (MAC) is above 1000 (see --rare-mac ). For the remaining variants, we fit a heteroskedastic linear model (HLM) 20 Y = E\\alpha + E^2\\zeta + G\\beta + (G\\odot E)\\gamma + \\epsilon where we assume $\\epsilon \\sim N(0, D)$ where $D$ is a diagonal matrix with entries $\\sigma^2\\exp{(1 + E\\theta_1 + E^2\\theta_2)}$. This formulation allows for the phenotypic variance to also depend on the risk factor $E$. By incorporating both the linear and quadratic effect of $E$ in the mean and variance of $Y$, this model provides robustness to heteroskedasticity ( Note: the $E^2$ terms are only added when $E$ is quantitative ). Wald tests are then performed for the null hypotheses listed above. For binary traits, we consider the following interaction model \\text{logit}(\\mu) = E\\alpha + E^2\\zeta + G\\beta + (G\\odot E)\\gamma where we also include a non-linear effect for $E$ (not if categorical). The sandwich estimator HC3 is used in a Wald test for variants whose MAC is above 1000 (see --rare-mac ) otherwise the model-based standard errors are used. When Firth is specified, we only apply the Firth correction using LRT if the p-value for the interaction term $\\gamma$ from the Wald test is below a specified threshold (see --pThresh ). So the added $E^2$ term as well as the use of the Firth penalty help with case-control imbalance and model misspecification for the effect of $E$ on the phenotype.","title":"Step 2 : Interaction testing"},{"location":"overview/#survival-analysis","text":"Starting with regenie v4.0 , we have enabled survival analysis, improving the power for analyzing common diseases where time-to-event data is available by leveraging the Cox Proportional Harzard model. We assume that samples without an event are right-censored, i.e. the survival time is only known to be greater than a certain value. It is important to encode this information correctly into the phenotypes .","title":"Survival analysis"},{"location":"overview/#step-1-whole-genome-model-using-cox-ridge-regression","text":"In step 1, Level 0 is run using linear ridge regression with the time variable taken as the response. In Level 1, instead of linear/logistic ridge regression, we use Cox Ridge regression 21 to combine the predictions $W$ from Level 0. \\lambda_i(t) = \\lambda_0(t) \\exp(\\mu_i + w_i^\\intercal \\alpha) where $\\lambda_0(t)$ is the baseline hazard function, and, for the $i$-th individual, $\\lambda_i(t)$ is the hazard function, $w_i$ is the set of ridge predictors from Level 0, and $\\mu_i$ captures the effects of non-genetic covariates. We fit the cox ridge regression for a range of shrinkage parameters and select the best value using a K-fold cross validation scheme. With the estimated $\\hat{\\alpha}$, we construct LOCO predictions which capture population structure, relatedness and polygenicity.","title":"Step 1: Whole genome model using cox ridge regression"},{"location":"overview/#step-2-single-variant-and-gene-based-burden-tests","text":"For time-to-event traits, the cox proportional hazard regression model is used to test the association between the phenotype and the genetic marker. Note : the only supported gene-based test is the burden test. The cox proportional hazard regression model includes the LOCO predictions from Step 1 as an offset. \\lambda_i(t) = \\lambda_0(t) \\exp(\\mu_i + w_{i, LOCO} + g_i \\beta) We test the null hypothesis $H_0: \\beta = 0$ using a score test. When the event rate is low, the standard score test doesn't control Type I error well at rare genetic markers. To reduce the bias and achieve a more robust test, regenie uses Firth correction 22 when the p-value from the standard score test is below a threshold (default 0.05). The firth correction provides a well-calibrated test, but comes with a computational cost. To mitigate this burden in Cox regression, we include a fast approximate test, which gives results very similar to the exact Firth test.","title":"Step 2: Single variant and gene-based burden tests"},{"location":"overview/#missing-phenotype-data","text":"With QTs, missing values are mean-imputed in Step 1 and they are dropped when testing each phenotype in Step 2 (unless using --force-impute ). With BTs, missing values are mean-imputed in Step 1 when fitting the level 0 linear ridge regression and they are dropped when fitting the level 1 logistic ridge regression for each trait. In Step 2, missing values are dropped when testing each trait. To remove all samples that have missing values at any of the P phenotypes from the analysis, use option --strict in step 1 and 2. This can also be used when analyzing a single trait to only keep individuals with complete data by setting the phenotype values of individuals to remove to NA. Note: imputation is only applied to phenotypes; covariates are not allowed to have missing data.","title":"Missing Phenotype data"},{"location":"overview/#references","text":"Breiman, L. Stacked regressions. Machine learning 24 , 49\u201364 (1996). \u21a9 Firth, D. Bias reduction of maximum likelihood estimates. Biometrika 80 , 27\u201338 (1993). \u21a9 Butler, R. W. Saddlepoint approximations with applications . (Cambridge University Press, 2007). \u21a9 Dey, R., Schmidt, E. M., Abecasis, G. R. & Lee, S. A fast and accurate algorithm to test for binary phenotypes and its application to PheWAS. The American Journal of Human Genetics 101 , 37\u201349 (2017). \u21a9 Zhou, W. et al. Set-based rare variant association tests for biobank scale sequencing data sets. medRxiv (2021). \u21a9 Zhao, Z. et al. UK biobank whole-exome sequence binary phenome analysis with robust region-based rare-variant test. Am J Hum Genet 106 , 3\u201312 (2020). \u21a9 Lee, S., Abecasis, G. R., Boehnke, M. & Lin, X. Rare-variant association analysis: Study designs and statistical tests. Am J Hum Genet 95 , 5\u201323 (2014). \u21a9 Backman, J. D. et al. Exome sequencing and analysis of 454,787 UK biobank participants. Nature 599 , 628\u2013634 (2021). \u21a9 Wu, M. C. et al. Rare-variant association testing for sequencing data with the sequence kernel association test. Am J Hum Genet 89 , 82\u201393 (2011). \u21a9 Lee, S., Wu, M. C. & Lin, X. Optimal tests for rare variant effects in sequencing association studies. Biostatistics 13 , 762\u201375 (2012). \u21a9 Davies, R. B. Algorithm AS 155: The distribution of a linear combination of \u03c7 2 random variables. Applied Statistics 29 , 323\u2013333 (1980). \u21a9 Wu, B., Guan, W. & Pankow, J. S. On efficient and accurate calculation of significance p-values for sequence kernel association testing of variant set. Ann Hum Genet 80 , 123\u201335 (2016). \u21a9 Kuonen, D. Miscellanea. Saddlepoint approximations for distributions of quadratic forms in normal variables. Biometrika 86 , 929\u2013935 (1999). \u21a9 Liu, Y. & Xie, J. Cauchy combination test: A powerful test with analytic p-value calculation under arbitrary dependency structures. J Am Stat Assoc 115 , 393\u2013402 (2020). \u21a9 Liu, Y. et al. ACAT: A fast and powerful p value combination method for rare-variant analysis in sequencing studies. Am J Hum Genet 104 , 410\u2013421 (2019). \u21a9 \u21a9 Ziyatdinov, A. et al. Joint testing of rare variant burden scores using non-negative least squares. The American Journal of Human Genetics 111 , 2139\u20132149 (2024). \u21a9 MacKinnon, J. G. & White, H. Some heteroskedasticity-consistent covariance matrix estimators with improved finite sample properties. Journal of Econometrics 29 , 305\u2013325 (1985). \u21a9 Tchetgen Tchetgen, E. J. & Kraft, P. On the robustness of tests of genetic associations incorporating gene-environment interaction when the environmental exposure is misspecified. Epidemiology 22 , 257\u201361 (2011). \u21a9 Voorman, A., Lumley, T., McKnight, B. & Rice, K. Behavior of QQ-plots and genomic control in studies of gene-environment interaction. PLoS One 6 , (2011). \u21a9 Young, A. I., Wauthier, F. L. & Donnelly, P. Identifying loci affecting trait variability and detecting interactions in genome-wide association studies. Nat Genet 50 , 1608\u20131614 (2018). \u21a9 Simon, N., Friedman, J. H., Hastie, T. & Tibshirani, R. Regularization paths for cox\u2019s proportional hazards model via coordinate descent. Journal of statistical software 39 , 1\u201313 (2011). \u21a9 Heinze, G. & Schemper, M. A solution to the problem of monotone likelihood in cox regression. Biometrics 57 , 114\u2013119 (2001). \u21a9","title":"References"},{"location":"performance/","text":"Performance We assessed the performance of regenie against 3 other programs for GWAS on large cohorts. BOLT-LMM Loh et al. (2015) Nature Genetics 47, 284\u2013290 [Software] SAIGE - Zhou et al. (2018) Nature Genetics 50, 1335\u20131341 [Software] fastGWA - Jiang et al. (2019) Nature Genetics 51, 1749\u20131755 [Software] Full details for all the runs are available in our paper . Quantitative traits We ran regenie , BOLT-LMM and fastGWA on 3 quantitative phenotypes measured on white British UK Biobank participants (LDL, N=389,189; Body mass index [BMI], N=407,609; and Bilirubin, N=388,303) where testing was performed on 9.8 million imputed SNPs. The Manhattan plots for all three phenotypes (see below) show good agreement between the methods with both regenie and BOLT-LMM resulting in stronger association signals relative to fastGWA at known peaks of association (note that in the plots, the scaling of the y-axis changes above the upper dashed line). We assessed the computational requirements of all three methods using a larger set of 50 quantitative traits from the UK Biobank, looking at computational timings as well as memory usage. For regenie and BOLT LMM, 469,336 LD-pruned SNPs were used as model SNPs when fitting the null model (step 1) and for fastGWA, these SNPs were used to compute the sparse GRM (timing not included). Tests were performed on 11.4M imputed SNPs (step 2). From the table above, regenie was 151x faster than BOLT-LMM in elapsed time for Step 1 and 11.5x faster for Step 2, which translated into $>$30x overall speed-up in terms of elapsed time. In addition, regenie had a maximum memory usage of 12.9 GB, which is mostly due to regenie only reading a small portion of the genotype data at a time, whereas BOLT-LMM required 50GB. regenie was 2.8x faster than fastGWA, but fastGWA is very memory efficient and used only a maximum of 2GB. Binary traits regenie was compared to BOLT-LMM and SAIGE on a set of four binary traits measured on white British UK Biobank participants (coronary artery disease [CAD], N=352,063, case-control ratio=1:11; glaucoma, N=406,927, case-control ratio=1:52; colorectal cancer, N=407,746, case-control ratio=1:97; and thyroid cancer, N=407,746, case-control ratio=1:660) and Step 2 testing was performed on 11.6 million imputed SNPs. A novel and fast approximate Firth correction was used in regenie as well as a SPA correction. As seen in the Manhattan plots below (note that the scaling of the y-axis changes above the upper dashed line), all four approaches show very good agreement for the most balanced trait (CAD; case-control ratio=1:11), but as the fraction of cases decreases BOLT-LMM tends to give inflated test statistics. However both regenie with Firth and SPA corrections, as well as SAIGE, which uses SPA correction, are all robust to this inflation and show similar agreement for the associations detected. We assessed the computational requirements of regenie and SAIGE using a larger set of 50 binary traits from the UK Biobank that have a range of different case-control ratios and distinct missing data patterns. 469,336 LD-pruned SNPs were used as model SNPs when fitting the null model (step 1) and tests were performed on 11.4M imputed SNPs (step 2). In step 1, regenie was run using LOOCV and for two traits SAIGE did not finish as it took longer than the 4-week limit. In step 2, the approximate Firth correction was used in regenie in addition to SPA correction. From the table above, Step 1 of regenie was about 350x faster and required only $40\\%$ of the memory used by SAIGE. In Step 2, regenie Firth and SPA were 2x and 3x faster than SAIGE in CPU time, respectively, but were 21x and 34x faster than SAIGE in elapsed time, respectively, which suggests that regenie makes better use of parallelization in this step. Overall, regenie using Firth correction was 8x faster than SAIGE in CPU hours and 26.8x faster in elapsed time. All runs above were done on the same computing environment (16 virtual CPU cores of a 2.1GHz AMD EPYC 7571 processor, 64GB of memory, and 600GB solid-state disk). Timings improvements in v2.2 We have several changes in regenie v2.2 to improve the computational efficiency: The genotype file reading in Step 1 is now multi-threaded for all supported formats (i.e. BED, PGEN, and BGEN) and uses a faster file reading implementation for BGEN v1.2 format with 8-bit encoding. From our timings experiments below, these changes helped reduce the CPU time by 40-60% depending on the input format. Note that we used a small number of SNPs for Step 1 in our experiments (20K) so the timing improvement will not be as high in a real Step 1 run where ~500K SNPs would be used. We have improved the implementation of the score tests for binary traits to reduce the number of matrix operations performed and this reduced the CPU timings by ~60% from the previous version 2.0.2. Note that there is an added memory cost of ~8NKP bytes [N=#samples; K=#covariates;P=#samples] so ~800MB extra for a UKB 500K run with 10 traits & 20 covariates. We have also made use of the sparsity of the genotype vector for rarer variants in Step 2 (more so with binary traits) and this reduced the timing in our experiments by ~20% on average. In our experiments, common variants are defined as having MAF > 5% and rare variants are defined as having MAF < 1% and no correction (i.e. Firth/SPA) is used. We have added new options --write-null-firth and --use-null-firth to reduce the timing of Step 2 with approximate Firth when ran in parallel jobs split in smaller chunks within chromosomes. More specifically, --write-null-firth can be used in Step 1 to fit the null model for approximate Firth test and store the resulting estimates to file. Then in Step 2, specifying --use-null-firth will re-use these parameter estimates to reduce the timing of the approximate Firth null model fitting. We thank Juha Karjalainen for suggesting this feature. Note: in our timings experiments, the PGEN genotype file only includes hard-calls. We ran a single trait in regenie and each setting was replicated 5 times. Gene-based testing regenie v3.0 adds in a wide range of gene-based tests . We have performed simulation experiments to assess the calibration of the tests with quantitative and binary traits using real genetic data from the UK Biobank where we randomly selected 100,000 samples obtained from the set of white British participants (see the \"Methods\" section of the Regenie paper for details on phenotype simulation where we set the heritability to 20%). Using whole exome sequencing data, we constructed variant sets incorporating functional annotations (LoF and missense, where missense vairants were predicted as deleterious using a score based on 5 in-silico algorithms), as well as allele frequency thresholds focusing on rarer variation (1%, 0.1% and 0.01%). The SKAT/ACAT tests were applied only to variant sets using a 1% or 0.01% AAF threshold and SBAT and BURDEN-ACAT joint tests combined all burden mask signals from the 1%, 0.1%, 0.01% and singleton thresholds. 1000 genes on even chromosomes were randonly selected and tested for association (causal variants were on odd chromosomes). The QQ plots below show the distribution p-values for each test across the different annotation categories (ran in Regenie v3.2). Quantitative traits Using a 1% allele frequency cutoff for the SKAT/ACAT tests. Binary traits We simulated highly imbalanced phenotypes with a disease prevalence of 1% (case-control ratio of 1:99) and applied Firth/SPA correction to the tests. Using a 1% allele frequency cutoff for the SKAT/ACAT tests. Using a 0.01% allele frequency cutoff for the SKAT/ACAT tests.","title":"Performance"},{"location":"performance/#performance","text":"We assessed the performance of regenie against 3 other programs for GWAS on large cohorts. BOLT-LMM Loh et al. (2015) Nature Genetics 47, 284\u2013290 [Software] SAIGE - Zhou et al. (2018) Nature Genetics 50, 1335\u20131341 [Software] fastGWA - Jiang et al. (2019) Nature Genetics 51, 1749\u20131755 [Software] Full details for all the runs are available in our paper .","title":"Performance"},{"location":"performance/#quantitative-traits","text":"We ran regenie , BOLT-LMM and fastGWA on 3 quantitative phenotypes measured on white British UK Biobank participants (LDL, N=389,189; Body mass index [BMI], N=407,609; and Bilirubin, N=388,303) where testing was performed on 9.8 million imputed SNPs. The Manhattan plots for all three phenotypes (see below) show good agreement between the methods with both regenie and BOLT-LMM resulting in stronger association signals relative to fastGWA at known peaks of association (note that in the plots, the scaling of the y-axis changes above the upper dashed line). We assessed the computational requirements of all three methods using a larger set of 50 quantitative traits from the UK Biobank, looking at computational timings as well as memory usage. For regenie and BOLT LMM, 469,336 LD-pruned SNPs were used as model SNPs when fitting the null model (step 1) and for fastGWA, these SNPs were used to compute the sparse GRM (timing not included). Tests were performed on 11.4M imputed SNPs (step 2). From the table above, regenie was 151x faster than BOLT-LMM in elapsed time for Step 1 and 11.5x faster for Step 2, which translated into $>$30x overall speed-up in terms of elapsed time. In addition, regenie had a maximum memory usage of 12.9 GB, which is mostly due to regenie only reading a small portion of the genotype data at a time, whereas BOLT-LMM required 50GB. regenie was 2.8x faster than fastGWA, but fastGWA is very memory efficient and used only a maximum of 2GB.","title":"Quantitative traits"},{"location":"performance/#binary-traits","text":"regenie was compared to BOLT-LMM and SAIGE on a set of four binary traits measured on white British UK Biobank participants (coronary artery disease [CAD], N=352,063, case-control ratio=1:11; glaucoma, N=406,927, case-control ratio=1:52; colorectal cancer, N=407,746, case-control ratio=1:97; and thyroid cancer, N=407,746, case-control ratio=1:660) and Step 2 testing was performed on 11.6 million imputed SNPs. A novel and fast approximate Firth correction was used in regenie as well as a SPA correction. As seen in the Manhattan plots below (note that the scaling of the y-axis changes above the upper dashed line), all four approaches show very good agreement for the most balanced trait (CAD; case-control ratio=1:11), but as the fraction of cases decreases BOLT-LMM tends to give inflated test statistics. However both regenie with Firth and SPA corrections, as well as SAIGE, which uses SPA correction, are all robust to this inflation and show similar agreement for the associations detected. We assessed the computational requirements of regenie and SAIGE using a larger set of 50 binary traits from the UK Biobank that have a range of different case-control ratios and distinct missing data patterns. 469,336 LD-pruned SNPs were used as model SNPs when fitting the null model (step 1) and tests were performed on 11.4M imputed SNPs (step 2). In step 1, regenie was run using LOOCV and for two traits SAIGE did not finish as it took longer than the 4-week limit. In step 2, the approximate Firth correction was used in regenie in addition to SPA correction. From the table above, Step 1 of regenie was about 350x faster and required only $40\\%$ of the memory used by SAIGE. In Step 2, regenie Firth and SPA were 2x and 3x faster than SAIGE in CPU time, respectively, but were 21x and 34x faster than SAIGE in elapsed time, respectively, which suggests that regenie makes better use of parallelization in this step. Overall, regenie using Firth correction was 8x faster than SAIGE in CPU hours and 26.8x faster in elapsed time. All runs above were done on the same computing environment (16 virtual CPU cores of a 2.1GHz AMD EPYC 7571 processor, 64GB of memory, and 600GB solid-state disk).","title":"Binary traits"},{"location":"performance/#timings-improvements-in-v22","text":"We have several changes in regenie v2.2 to improve the computational efficiency: The genotype file reading in Step 1 is now multi-threaded for all supported formats (i.e. BED, PGEN, and BGEN) and uses a faster file reading implementation for BGEN v1.2 format with 8-bit encoding. From our timings experiments below, these changes helped reduce the CPU time by 40-60% depending on the input format. Note that we used a small number of SNPs for Step 1 in our experiments (20K) so the timing improvement will not be as high in a real Step 1 run where ~500K SNPs would be used. We have improved the implementation of the score tests for binary traits to reduce the number of matrix operations performed and this reduced the CPU timings by ~60% from the previous version 2.0.2. Note that there is an added memory cost of ~8NKP bytes [N=#samples; K=#covariates;P=#samples] so ~800MB extra for a UKB 500K run with 10 traits & 20 covariates. We have also made use of the sparsity of the genotype vector for rarer variants in Step 2 (more so with binary traits) and this reduced the timing in our experiments by ~20% on average. In our experiments, common variants are defined as having MAF > 5% and rare variants are defined as having MAF < 1% and no correction (i.e. Firth/SPA) is used. We have added new options --write-null-firth and --use-null-firth to reduce the timing of Step 2 with approximate Firth when ran in parallel jobs split in smaller chunks within chromosomes. More specifically, --write-null-firth can be used in Step 1 to fit the null model for approximate Firth test and store the resulting estimates to file. Then in Step 2, specifying --use-null-firth will re-use these parameter estimates to reduce the timing of the approximate Firth null model fitting. We thank Juha Karjalainen for suggesting this feature. Note: in our timings experiments, the PGEN genotype file only includes hard-calls. We ran a single trait in regenie and each setting was replicated 5 times.","title":"Timings improvements in v2.2"},{"location":"performance/#gene-based-testing","text":"regenie v3.0 adds in a wide range of gene-based tests . We have performed simulation experiments to assess the calibration of the tests with quantitative and binary traits using real genetic data from the UK Biobank where we randomly selected 100,000 samples obtained from the set of white British participants (see the \"Methods\" section of the Regenie paper for details on phenotype simulation where we set the heritability to 20%). Using whole exome sequencing data, we constructed variant sets incorporating functional annotations (LoF and missense, where missense vairants were predicted as deleterious using a score based on 5 in-silico algorithms), as well as allele frequency thresholds focusing on rarer variation (1%, 0.1% and 0.01%). The SKAT/ACAT tests were applied only to variant sets using a 1% or 0.01% AAF threshold and SBAT and BURDEN-ACAT joint tests combined all burden mask signals from the 1%, 0.1%, 0.01% and singleton thresholds. 1000 genes on even chromosomes were randonly selected and tested for association (causal variants were on odd chromosomes). The QQ plots below show the distribution p-values for each test across the different annotation categories (ran in Regenie v3.2).","title":"Gene-based testing"},{"location":"performance/#quantitative-traits_1","text":"Using a 1% allele frequency cutoff for the SKAT/ACAT tests.","title":"Quantitative traits"},{"location":"performance/#binary-traits_1","text":"We simulated highly imbalanced phenotypes with a disease prevalence of 1% (case-control ratio of 1:99) and applied Firth/SPA correction to the tests. Using a 1% allele frequency cutoff for the SKAT/ACAT tests. Using a 0.01% allele frequency cutoff for the SKAT/ACAT tests.","title":"Binary traits"},{"location":"recommendations/","text":"Recommendations for UK Biobank analysis regenie is ideally suited for large-scale analyses such as 500K UK Biobank (UKBB) data, where records are available for thousands of phenotypes. We provide below a few guidelines on how to perform such analysis on the UKBB files that all UKBB approved researchers have access to. Pre-processing We will first go over important steps to consider before running regenie . Selection of traits regenie can perform whole genome regression on multiple traits at once, which is where higher computational gains are obtained. As different traits can have distinct missing patterns, regenie uses an imputation scheme to handle missing data. From the real data applications we have performed so far with traits having up to ~20% (for quantitative) and ~5% (for binary) missing observations, our imputation scheme resulted in nearly identical results as from discarding missing observations when analyzing each trait separately (see the paper for details). Hence, we recommend to analyze traits in groups that have similar missingness patterns with resonably low amount of missingness (<15%). The number of phenotypes in a group will affect the computational resources required and the table below shows typical computational requirements based on using 500,000 markers in step 1 split in blocks of 1000 and using blocks of size 200 when testing SNPs in step 2. The estimates are shown when step 1 of regenie is run in low-memory mode so that within-block predictions are temporarily stored on disk (see Documentation). In the following sections, we'll assume traits (let's say binary) and covariates used in the analysis have been chosen and data are in files ukb_phenotypes_BT.txt and ukb_covariates.txt , which follow the format requirement for regenie (see Documentation). Preparing genotype file Step 1 of a regenie run requires a single genotype file as input; we recommend using array genotypes for this step. The UKBB genotype files are split by chromosome, so we recommend using PLINK to merge the files using the following code. NOTE : please change XXX to you own UKBB application ID number rm -f list_beds.txt for chr in {2..22}; do echo \"ukb_cal_chr${chr}_v2.bed ukb_snp_chr${chr}_v2.bim ukbXXX_int_chr1_v2_s488373.fam\" >> list_beds.txt; done plink \\ --bed ukb_cal_chr1_v2.bed \\ --bim ukb_snp_chr1_v2.bim \\ --fam ukbXXX_int_chr1_v2_s488373.fam \\ --merge-list list_beds.txt \\ --make-bed --out ukb_cal_allChrs Exclusion files Quality control (QC) filters can be applied using PLINK2 to filter out samples and markers in the genotype file prior to step 1 of regenie . Note: regenie will throw an error if a low-variance SNP is included in the step 1 run. Hence, the user should run adequate QC filtering prior to running regenie to identify and remove such SNPs. For example, to filter out SNPs with minor allele frequency (MAF) below 1%, minor allele count (MAC) below 100, genotype missingess above 10% and Hardy-Weinberg equilibrium p-value exceeding 10^{-15} , and samples with more than 10% missingness, plink2 \\ --bfile ukb_cal_allChrs \\ --maf 0.01 --mac 100 --geno 0.1 --hwe 1e-15 \\ --mind 0.1 \\ --write-snplist --write-samples --no-id-header \\ --out qc_pass Step 1 We recommend to run regenie using multi-threading (8+ threads) which will decrease the overall runtime of the program. As this step can be quite memory intensive (due to storing block predictions), we recommend to use option --lowmem , where the number of phenotypes analyzed will determine how much disk space is required (see table above). Running step 1 of regenie (by default, all available threads are used) ./regenie \\ --step 1 \\ --bed ukb_cal_allChrs \\ --extract qc_pass.snplist \\ --keep qc_pass.id \\ --phenoFile ukb_phenotypes_BT.txt \\ --covarFile ukb_covariates.txt \\ --bt \\ --bsize 1000 \\ --lowmem \\ --lowmem-prefix tmpdir/regenie_tmp_preds \\ --out ukb_step1_BT For P phenotypes analyzed, this will generate a set of $P$ files ending with .loco which contain the genetic predictions using a LOCO scheme that will be needed for step 2, as well as a prediction list file ukb_step1_BT_pred.list , which lists the names of these predictions files and can be used as input for step 2. Step 2 As step 1 and 2 are completely decoupled in regenie , you could either use all the traits for testing in step 2 or select a subset of the traits to perform association testing. Furthermore, you can use the same Step 1 output to test on array, exome or imputed variants; below, we will illustrate testing on imputed variants. Step 2 of regenie can be run in parallel across chromosomes so if you have access to multiple machines, we recommend to split the runs over chromosomes (using 8+ threads). Running regenie tesing on a single chromosome (here chromosome 1) and using the fast Firth correction as fallback for p-values below 0.01 ./regenie \\ --step 2 \\ --bgen ukb_imp_chr1_v3.bgen \\ --ref-first \\ --sample ukbXXX_imp_chr1_v3_s487395.sample \\ --phenoFile ukb_phenotypes_BT.txt \\ --covarFile ukb_covariates.txt \\ --bt \\ --firth --approx --pThresh 0.01 \\ --pred ukb_step1_BT_pred.list \\ --bsize 400 \\ --split \\ --out ukb_step2_BT_chr1 This will create separate association results files for each phenotype as ukb_step2_BT_chr1_*.regenie . When running the SKAT/ACAT gene-based tests, we recommend to use at most 2 threads and instead parallelize the runs over partitions of the genome (e.g. groups of genes).","title":"UKBB Analysis"},{"location":"recommendations/#recommendations-for-uk-biobank-analysis","text":"regenie is ideally suited for large-scale analyses such as 500K UK Biobank (UKBB) data, where records are available for thousands of phenotypes. We provide below a few guidelines on how to perform such analysis on the UKBB files that all UKBB approved researchers have access to.","title":"Recommendations for UK Biobank analysis"},{"location":"recommendations/#pre-processing","text":"We will first go over important steps to consider before running regenie .","title":"Pre-processing"},{"location":"recommendations/#selection-of-traits","text":"regenie can perform whole genome regression on multiple traits at once, which is where higher computational gains are obtained. As different traits can have distinct missing patterns, regenie uses an imputation scheme to handle missing data. From the real data applications we have performed so far with traits having up to ~20% (for quantitative) and ~5% (for binary) missing observations, our imputation scheme resulted in nearly identical results as from discarding missing observations when analyzing each trait separately (see the paper for details). Hence, we recommend to analyze traits in groups that have similar missingness patterns with resonably low amount of missingness (<15%). The number of phenotypes in a group will affect the computational resources required and the table below shows typical computational requirements based on using 500,000 markers in step 1 split in blocks of 1000 and using blocks of size 200 when testing SNPs in step 2. The estimates are shown when step 1 of regenie is run in low-memory mode so that within-block predictions are temporarily stored on disk (see Documentation). In the following sections, we'll assume traits (let's say binary) and covariates used in the analysis have been chosen and data are in files ukb_phenotypes_BT.txt and ukb_covariates.txt , which follow the format requirement for regenie (see Documentation).","title":"Selection of traits"},{"location":"recommendations/#preparing-genotype-file","text":"Step 1 of a regenie run requires a single genotype file as input; we recommend using array genotypes for this step. The UKBB genotype files are split by chromosome, so we recommend using PLINK to merge the files using the following code. NOTE : please change XXX to you own UKBB application ID number rm -f list_beds.txt for chr in {2..22}; do echo \"ukb_cal_chr${chr}_v2.bed ukb_snp_chr${chr}_v2.bim ukbXXX_int_chr1_v2_s488373.fam\" >> list_beds.txt; done plink \\ --bed ukb_cal_chr1_v2.bed \\ --bim ukb_snp_chr1_v2.bim \\ --fam ukbXXX_int_chr1_v2_s488373.fam \\ --merge-list list_beds.txt \\ --make-bed --out ukb_cal_allChrs","title":"Preparing genotype file"},{"location":"recommendations/#exclusion-files","text":"Quality control (QC) filters can be applied using PLINK2 to filter out samples and markers in the genotype file prior to step 1 of regenie . Note: regenie will throw an error if a low-variance SNP is included in the step 1 run. Hence, the user should run adequate QC filtering prior to running regenie to identify and remove such SNPs. For example, to filter out SNPs with minor allele frequency (MAF) below 1%, minor allele count (MAC) below 100, genotype missingess above 10% and Hardy-Weinberg equilibrium p-value exceeding 10^{-15} , and samples with more than 10% missingness, plink2 \\ --bfile ukb_cal_allChrs \\ --maf 0.01 --mac 100 --geno 0.1 --hwe 1e-15 \\ --mind 0.1 \\ --write-snplist --write-samples --no-id-header \\ --out qc_pass","title":"Exclusion files"},{"location":"recommendations/#step-1","text":"We recommend to run regenie using multi-threading (8+ threads) which will decrease the overall runtime of the program. As this step can be quite memory intensive (due to storing block predictions), we recommend to use option --lowmem , where the number of phenotypes analyzed will determine how much disk space is required (see table above). Running step 1 of regenie (by default, all available threads are used) ./regenie \\ --step 1 \\ --bed ukb_cal_allChrs \\ --extract qc_pass.snplist \\ --keep qc_pass.id \\ --phenoFile ukb_phenotypes_BT.txt \\ --covarFile ukb_covariates.txt \\ --bt \\ --bsize 1000 \\ --lowmem \\ --lowmem-prefix tmpdir/regenie_tmp_preds \\ --out ukb_step1_BT For P phenotypes analyzed, this will generate a set of $P$ files ending with .loco which contain the genetic predictions using a LOCO scheme that will be needed for step 2, as well as a prediction list file ukb_step1_BT_pred.list , which lists the names of these predictions files and can be used as input for step 2.","title":"Step 1"},{"location":"recommendations/#step-2","text":"As step 1 and 2 are completely decoupled in regenie , you could either use all the traits for testing in step 2 or select a subset of the traits to perform association testing. Furthermore, you can use the same Step 1 output to test on array, exome or imputed variants; below, we will illustrate testing on imputed variants. Step 2 of regenie can be run in parallel across chromosomes so if you have access to multiple machines, we recommend to split the runs over chromosomes (using 8+ threads). Running regenie tesing on a single chromosome (here chromosome 1) and using the fast Firth correction as fallback for p-values below 0.01 ./regenie \\ --step 2 \\ --bgen ukb_imp_chr1_v3.bgen \\ --ref-first \\ --sample ukbXXX_imp_chr1_v3_s487395.sample \\ --phenoFile ukb_phenotypes_BT.txt \\ --covarFile ukb_covariates.txt \\ --bt \\ --firth --approx --pThresh 0.01 \\ --pred ukb_step1_BT_pred.list \\ --bsize 400 \\ --split \\ --out ukb_step2_BT_chr1 This will create separate association results files for each phenotype as ukb_step2_BT_chr1_*.regenie . When running the SKAT/ACAT gene-based tests, we recommend to use at most 2 threads and instead parallelize the runs over partitions of the genome (e.g. groups of genes).","title":"Step 2"}]} ================================================ FILE: docs/site/search/worker.js ================================================ var base_path = 'function' === typeof importScripts ? '.' : '/search/'; var allowSearch = false; var index; var documents = {}; var lang = ['en']; var data; function getScript(script, callback) { console.log('Loading script: ' + script); $.getScript(base_path + script).done(function () { callback(); }).fail(function (jqxhr, settings, exception) { console.log('Error: ' + exception); }); } function getScriptsInOrder(scripts, callback) { if (scripts.length === 0) { callback(); return; } getScript(scripts[0], function() { getScriptsInOrder(scripts.slice(1), callback); }); } function loadScripts(urls, callback) { if( 'function' === typeof importScripts ) { importScripts.apply(null, urls); callback(); } else { getScriptsInOrder(urls, callback); } } function onJSONLoaded () { data = JSON.parse(this.responseText); var scriptsToLoad = ['lunr.js']; if (data.config && data.config.lang && data.config.lang.length) { lang = data.config.lang; } if (lang.length > 1 || lang[0] !== "en") { scriptsToLoad.push('lunr.stemmer.support.js'); if (lang.length > 1) { scriptsToLoad.push('lunr.multi.js'); } if (lang.includes("ja") || lang.includes("jp")) { scriptsToLoad.push('tinyseg.js'); } for (var i=0; i < lang.length; i++) { if (lang[i] != 'en') { scriptsToLoad.push(['lunr', lang[i], 'js'].join('.')); } } } loadScripts(scriptsToLoad, onScriptsLoaded); } function onScriptsLoaded () { console.log('All search scripts loaded, building Lunr index...'); if (data.config && data.config.separator && data.config.separator.length) { lunr.tokenizer.separator = new RegExp(data.config.separator); } if (data.index) { index = lunr.Index.load(data.index); data.docs.forEach(function (doc) { documents[doc.location] = doc; }); console.log('Lunr pre-built index loaded, search ready'); } else { index = lunr(function () { if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { this.use(lunr[lang[0]]); } else if (lang.length > 1) { this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility } this.field('title'); this.field('text'); this.ref('location'); for (var i=0; i < data.docs.length; i++) { var doc = data.docs[i]; this.add(doc); documents[doc.location] = doc; } }); console.log('Lunr index built, search ready'); } allowSearch = true; postMessage({config: data.config}); postMessage({allowSearch: allowSearch}); } function init () { var oReq = new XMLHttpRequest(); oReq.addEventListener("load", onJSONLoaded); var index_path = base_path + '/search_index.json'; if( 'function' === typeof importScripts ){ index_path = 'search_index.json'; } oReq.open("GET", index_path); oReq.send(); } function search (query) { if (!allowSearch) { console.error('Assets for search still loading'); return; } var resultDocuments = []; var results = index.search(query); for (var i=0; i < results.length; i++){ var result = results[i]; doc = documents[result.ref]; doc.summary = doc.text.substring(0, 200); resultDocuments.push(doc); } return resultDocuments; } if( 'function' === typeof importScripts ) { onmessage = function (e) { if (e.data.init) { init(); } else if (e.data.query) { postMessage({ results: search(e.data.query) }); } else { console.error("Worker - Unrecognized message: " + e); } }; } ================================================ FILE: docs/site/sitemap.xml ================================================ ================================================ FILE: example/covariates.txt ================================================ FID IID V1 V2 V3 1 1 1.46837294454993 1.93779743016325 0.152887004505393 2 2 -1.2234390803815 -1.63408619199948 -0.190201446835255 3 3 0.0711531925667286 0.0863906292357564 0.14254739715665 4 4 -1.92175859469857 -1.08321238171368 0.208887472917422 5 5 -0.0373289339713292 -1.02834354890759 0.113500249292194 6 6 1.12924506994131 1.1642622220428 -1.02039868555522 7 7 0.124570790547411 -0.561055497363546 0.266002220960573 8 8 2.31188685141419 -2.08340899187172 0.312355654322118 9 9 0.832119089619467 0.743684102977159 1.4746796732347 10 10 1.19036673925773 -0.918912693235152 1.00113959536299 11 11 1.01766824645197 -0.583733242666349 0.595862997663805 12 12 -0.191218100107435 0.124413606154074 -0.445679018953628 13 13 -0.418092416107334 -1.22068710435991 -0.25828255958323 14 14 -1.54261453972438 -1.14822985845664 0.947663490874804 15 15 -1.49758037380989 0.353191967570147 -1.67473384357928 16 16 0.700744945491556 -1.62219012789145 0.387547883143897 17 17 -1.25780414213882 -0.436076358461935 0.285499268174478 18 18 -1.82390541901684 0.198218919902063 0.666614806000583 19 19 1.13251580815108 -0.265775299506002 -0.0622306805127668 20 20 0.492114198246884 -0.00131788422869951 0.62113003145282 21 21 0.020249216380171 0.207516653723503 -0.0720650681777961 22 22 -0.127426361484408 0.111646074875877 -0.374605100762307 23 23 -0.351735264827349 -1.8897756276129 -1.31446887736062 24 24 0.556201645642524 -0.927216741194837 -0.670921897387582 25 25 -0.288227411101263 -0.773639775533156 0.918378798010682 26 26 0.179204261620817 1.98212082136632 -1.74323255012925 27 27 -2.99510044590467 1.01591614247507 -1.30656023151223 28 28 0.687164856614254 0.022038634604751 -0.653736026177123 29 29 -0.458120017369043 -1.66046537945916 -0.764679088096362 30 30 0.298664963756903 -0.874055548644782 -0.968587352908588 31 31 -0.704867333000956 1.32657624471891 -1.33679098153286 32 32 0.268933322714231 0.634297194777424 1.04284699511091 33 33 -0.0576012700122912 0.99383446207855 1.10194755457429 34 34 -0.252690865124064 1.23747530714928 -0.0517462476666047 35 35 0.816772061606045 1.53381358254476 0.474727910680923 36 36 0.0813075115319745 -0.087716758923924 0.100410038903451 37 37 -1.13911071553845 1.29564833748642 -0.478956382232604 38 38 -2.30071562796601 0.300738731314805 -0.587279800319767 39 39 -0.665550531017432 1.60151461457328 -0.578031352497875 40 40 0.535504325816876 -1.17772515604129 -0.636974061582677 41 41 -0.10719986983704 1.66696346737119 -0.540441207204226 42 42 1.73168907075819 0.512908202298933 0.349054138222236 43 43 1.11493936987582 1.19669056647332 0.228930749067015 44 44 -0.346445574383567 0.367702234607877 -2.01861235544002 45 45 -0.739824907504471 -1.30905646878106 1.52321090007486 46 46 1.41317473388373 -0.603924429292353 -0.203040768129117 47 47 1.85238519526021 -0.706549112690604 -0.261031628260632 48 48 -0.704988799276764 0.114948625495636 0.355374004192616 49 49 -0.717470008055363 -1.44512231702472 0.355989548318291 50 50 -1.28379457125631 -0.382175768757946 0.520030874615731 51 51 -0.980701226576033 -0.344572505242403 -0.345634149621111 52 52 -1.80608450923547 -1.01970469537602 -2.3276246808876 53 53 0.519469347430971 -0.844754918129089 -1.2448698272613 54 54 -1.03887288283886 0.120699005791946 -1.69087920435963 55 55 0.19044941960321 -0.0120025498001641 0.994938056990633 56 56 1.36752395617169 1.84207966816907 0.0771531293507437 57 57 0.420300599394053 -0.93219359335265 -1.31203233361224 58 58 -0.238882262339433 -0.0165310522813234 0.734926334380315 59 59 0.358719740827443 -1.33502048770872 -0.263817757991046 60 60 0.504605771212752 0.681252342506506 -0.904607552825463 61 61 -0.934190605753742 -1.26782065594274 0.208035565503809 62 62 -1.22455262725579 0.1509010640874 0.124649479798584 63 63 1.30730858869995 -0.110656485868179 0.263451989549831 64 64 1.39985768650602 1.026009752497 0.517978165296883 65 65 0.095020228154413 -1.1000660873379 0.270727993728319 66 66 0.608899641360111 0.540149707396411 -1.54990095597012 67 67 0.515181246442935 1.03283997845031 -0.598311429953097 68 68 -1.05053525281487 0.262030474106311 -1.6341839988117 69 69 1.21927685400957 -0.857445715909335 -0.594636964825966 70 70 1.67375624667927 -0.548726446385269 1.75395956332388 71 71 -0.359877890356401 -3.5067326146456 1.37036291074209 72 72 -1.09299550519151 1.44830224283004 -2.16743621882942 73 73 -0.644736566441107 -0.089869044743121 0.0157496509969957 74 74 -0.304781057115279 -0.899765409637697 -0.911192242073904 75 75 -1.2386459290929 -1.08396716080357 0.53095029374935 76 76 -1.43742182165094 -0.505799913163813 -1.07762545065595 77 77 -0.61144987235439 1.09389573161241 0.915378408790216 78 78 0.335552961558524 -0.151631851536941 0.520623670829672 79 79 -1.72481360521243 0.18465858767883 -1.23789473827296 80 80 -1.0628773718348 0.938054224929031 -1.07536881040853 81 81 -2.0725041748917 1.28659123477811 -1.27480582537542 82 82 0.278898903282693 0.915747535671584 0.55591984832299 83 83 0.621800798547842 -0.0411897312845134 0.326220002147429 84 84 1.01833141709715 -0.343103002784949 0.614665471191135 85 85 1.09275660021931 -0.768682708638166 -0.251264904741988 86 86 -2.19013321410478 -0.965279741272168 1.67709773629732 87 87 0.82468268003704 1.09516657815012 -0.602551763995042 88 88 -3.32757908284742 -0.613034406172903 0.995413942815396 89 89 2.14490953111301 0.41713527242053 0.119270852551482 90 90 -0.123021396945538 0.584708744638207 0.258426919134879 91 91 1.34707751342789 0.241851724594599 1.7743815928603 92 92 -1.48611681075474 -0.960983764449003 -1.10120747231238 93 93 0.602164533183808 1.11310413285595 -0.986378172755791 94 94 -1.44188156628395 0.260944168274445 0.399639205570009 95 95 0.453576746586724 0.141478026440519 -0.534967261642291 96 96 -0.575544600833662 1.09070201543903 0.0984300561574584 97 97 0.175108204140961 0.0423557034039549 0.830270964031336 98 98 0.573709971323814 -0.986655769988478 -0.971784839773789 99 99 -1.42869342105159 0.78872631854699 -1.32537307288953 100 100 -0.606025357733767 0.501351903678155 -0.154203629882223 101 101 -1.45292711932486 0.443502488353178 -1.13128315823256 102 102 0.541792990472648 -1.60372007316255 1.15784127932312 103 103 -0.220676004523668 -0.494421188316861 1.36807060346171 104 104 -1.6615260282383 0.159178498429531 1.83335537436144 105 105 -0.0830454257821562 -0.447210910574869 0.718339375016038 106 106 0.522189914991477 0.9967269236725 0.449048331266212 107 107 -1.13210863595693 0.479113626661238 -1.56296622564352 108 108 -0.36380704330813 -1.7603273967847 -1.77651590916735 109 109 -1.68813107977496 1.16438431893709 2.03822965391838 110 110 1.58554022854969 -0.00724971621805309 -1.11900650247014 111 111 -0.998291492606998 0.00462754240275728 1.88127607035992 112 112 0.223497419145838 -1.32110280636091 0.524684732289228 113 113 0.573627223018489 0.311650995532555 -0.784376215211658 114 114 -1.61446325699769 1.08295716575695 1.79168179051707 115 115 1.44890500897322 0.0976050676871842 0.413386003360211 116 116 -1.33405141338608 0.784867755549606 0.454339460511901 117 117 1.0281760163777 -0.944176657853787 -0.849636093259524 118 118 0.442700323648412 1.00456272654013 -0.443199964334976 119 119 1.01841904624174 0.268656649347677 1.33990112172931 120 120 0.382476233707342 -0.133406454088862 -1.05408793400058 121 121 -0.0606854651306287 -0.311512521960318 0.605184001519958 122 122 -0.639314792216002 -1.51802669112881 -0.236607587664175 123 123 -0.991173875599332 -0.321572448363572 -0.236993428622127 124 124 0.895207300368696 0.245650549532927 1.34382738721527 125 125 0.0111936474428609 0.380086793801876 1.81260457198851 126 126 -0.38738113615745 -0.491841324400474 -1.01039561599705 127 127 -0.447750196400813 0.0866189943446268 -0.567089508145962 128 128 -1.48635114845613 -1.07099393611687 -0.830055469382584 129 129 0.430022245376917 -0.00469201513204358 -0.46713689804785 130 130 0.782370060240196 -1.15989373062202 -1.17827870092203 131 131 0.136338134070754 1.71167953754715 1.48059989978744 132 132 -0.431976638941024 -0.578190737622724 0.425291746107116 133 133 1.40246708059836 0.502745109733989 -0.944177272188536 134 134 0.720069270112552 -0.935145947387637 0.443871660569289 135 135 -0.31657492076431 -0.409901081300051 -0.145753345426725 136 136 0.11060517957052 -1.04605134276557 -1.12208334105097 137 137 0.346605932663756 0.770750900962366 -0.2274781373841 138 138 -0.199304950037624 1.51815799081416 1.46398209533402 139 139 -0.252212740769667 1.66993552357908 0.306825359307706 140 140 -0.888389791747243 0.232247159480735 0.499389375456319 141 141 -0.890347761887952 -0.728192084856763 0.551271266403087 142 142 0.152029144559496 2.23859123192986 0.274484191198587 143 143 -0.0701403417878827 0.927860684923288 0.556779551740602 144 144 0.639338644011505 0.149843448572823 -0.418168329086757 145 145 1.35683552548457 0.71545062816494 0.480718819473869 146 146 -0.0671855408009469 -1.00497960305324 -0.591564299670578 147 147 -0.0417901194712151 -0.740058558181522 -0.880215881028116 148 148 0.208014563936714 0.310692176853491 0.336489601755259 149 149 0.974528118011505 0.700687451289159 -1.96272108587345 150 150 0.434609242618411 1.06890916681593 -0.75356705741942 151 151 -2.02537341898317 -0.188261566304373 0.471200182938936 152 152 0.860627995182198 -0.720148339360642 -0.770997708738759 153 153 -0.9230520186645 1.51275275292047 2.05561908754561 154 154 -2.89482526571973 0.0142176828942394 -0.673661017251696 155 155 2.14764230980825 1.11836182023814 0.561414328616239 156 156 0.191691835549594 1.69954007643337 1.10060477315528 157 157 1.93391937196771 -2.14759361064734 0.103062267210891 158 158 -1.00666688093144 0.27389584173868 1.25113180056298 159 159 0.867271912923313 0.550421539001593 -0.606209597163998 160 160 0.239744640961947 0.871455671502197 -1.33433166716954 161 161 -1.16673162601532 -0.923729049541734 0.882931371107068 162 162 1.19623249643198 0.267536839445432 0.140965625037645 163 163 -0.606314083879166 0.83108108713256 2.24244959411634 164 164 0.627891419343745 0.316909753958488 -0.0892333697150752 165 165 0.681239498389416 0.0685010764996153 1.60785602940155 166 166 -0.137622766408917 -0.219358052457248 0.0236094358672588 167 167 1.65738740105425 -0.168396179630893 -0.391093556590735 168 168 -0.0532183341365486 -0.0971607395158495 -0.185753106858513 169 169 1.33325582492572 0.04748966314378 0.930597282445587 170 170 0.503095045815024 0.620836572358743 1.32907834680476 171 171 -0.833086643323573 1.57378927452153 0.282482508773599 172 172 0.263414370073657 1.46655819123308 -0.440357980899672 173 173 -3.01149418318528 -0.758603658576047 1.29712100326943 174 174 0.775355123038991 -0.345255487752741 -0.432940728990831 175 175 -0.736899573490554 0.475328905667524 -0.486614757521328 176 176 -0.705382244908399 -0.317658781371191 -0.950665118202799 177 177 -1.10205074755081 1.04709464276291 0.358444545273432 178 178 0.291626211880807 -2.24414390554635 -0.6114433881961 179 179 -0.616258050186511 -0.213352918058229 -0.206848220065374 180 180 -0.258221445691404 1.13323440192968 -0.520510426658636 181 181 1.0173814591059 0.335230742824172 1.80773614044068 182 182 -0.754582244072964 0.558863580112927 2.22272421500294 183 183 0.962254883537811 0.952711758939796 0.26257629591948 184 184 1.32361093350711 0.726199653116666 -1.20705098917927 185 185 0.451636911802343 1.05241988015365 -0.704114083257637 186 186 1.02960288576369 -0.915563518318848 0.224463903618335 187 187 0.215069384601449 1.58967716981485 -2.36256657114121 188 188 0.857706091343454 0.469806032976427 0.218452229983434 189 189 0.9829607592393 -0.0244241933878937 -0.425470731739842 190 190 0.113277626559119 0.0683882014999158 -0.277787951143784 191 191 -0.244180929885842 -1.82173257463395 0.394327358484765 192 192 0.705378901432609 -0.442735603414705 -0.723030937642743 193 193 1.15231800216468 0.594526314383486 1.49937846443481 194 194 -0.0824836561278376 0.502688722215784 1.02692569356233 195 195 -0.51533276030488 -1.111301710122 -1.00163288726315 196 196 0.352508349429745 -1.58333473521584 -0.321749790049319 197 197 0.509737117278231 1.89680480039478 -0.415803626548454 198 198 0.408429190860523 -0.283375339941657 -1.7310558218924 199 199 2.63318259159922 -1.37220135481674 -1.07011609149891 200 200 -0.300070178621705 0.116053618430679 -0.128957573780873 201 201 0.0618158070410208 -0.257104455391491 0.700960192076722 202 202 1.1967442135137 -2.53945571436358 -1.18290930991659 203 203 -0.390733348779326 -0.565154112561019 1.54609780274072 204 204 -0.635434530912397 -0.783691703875507 -0.241253478697975 205 205 0.453171623475049 -0.963323712166816 -0.17591279169021 206 206 0.497137673599994 -0.298292757497476 1.52472484723303 207 207 0.983044864096795 -0.182609328743605 1.08285068777089 208 208 0.121863300305586 -0.785472105457895 -0.024584067857987 209 209 0.238155363079482 0.0801843336257735 0.699724938898343 210 210 -1.54623884763307 0.583293080796527 -1.01858438189806 211 211 -0.968055736721857 -0.638630086897045 1.40318747864031 212 212 -0.00349665688432686 1.414451490428 -1.73762899052836 213 213 -0.00457607386072327 -0.525635302551504 -1.45373867624621 214 214 -0.366134409356681 -0.666235621241421 -0.505336833078742 215 215 1.89024923544878 0.741764948637318 -1.0155203395098 216 216 -0.918308636321609 -0.0868765217265333 -0.509826529424641 217 217 -0.591074858895521 0.566777955769371 0.99434556045379 218 218 2.25670365684985 -0.315748293528222 0.365477681343191 219 219 -1.57233822739218 -0.850792763875279 0.904498367464702 220 220 -0.0682314485516372 -0.795866178677262 1.66930347041193 221 221 -0.533686551757233 -0.465695098147421 -0.981684351830436 222 222 -0.650744878298164 0.715410607037681 0.815096345271332 223 223 -1.73483240099147 1.15510538447811 0.744813039979084 224 224 1.08722268180171 1.19413693413092 -0.240273728814771 225 225 -0.195458351526377 -1.12708948860974 0.0483699010155095 226 226 -0.377051472458811 -0.762275563055573 0.738733077024699 227 227 -0.18142884904785 1.08723994079201 0.8524808816003 228 228 -1.08408259984194 -0.11623045844534 0.0936085321037543 229 229 0.980923357579053 -1.36753072430618 0.501720860018512 230 230 -1.41202933071188 0.0433877791285629 -0.0803230747661825 231 231 -0.629131853656102 -0.549328075703398 1.62922107570998 232 232 1.70458554314851 -0.127408146304953 -0.247666680166544 233 233 0.0114661310717726 -1.14727853739666 0.601845776132469 234 234 0.0055302906322214 0.548837223017019 0.998310060979668 235 235 -1.47169674493235 -2.51801462427645 -0.565532684958423 236 236 0.375248849183357 1.88760055391672 -0.256481599828999 237 237 0.264296911165029 -1.33259359592374 0.0487652939597159 238 238 0.17719004528226 -0.193701321174802 2.39465797007541 239 239 -0.188329921279762 0.319697619525775 0.00805067416711713 240 240 0.638949836393311 -0.175011559041567 -0.565935078051149 241 241 -0.521513973408463 0.790904235650827 0.086850161445771 242 242 0.119178273767935 -0.18779594966625 -0.665865387079382 243 243 1.48244098394491 -1.24068304414465 1.73031811007768 244 244 1.68422348507766 -1.12591550053402 -1.06202319844172 245 245 -0.617850744913592 -0.719053349775352 -0.395999153143368 246 246 -0.962425935625463 -1.37957764887356 -0.935088714487197 247 247 -0.676307216820063 0.455639497484506 0.988656830560121 248 248 -0.429803260399542 -0.95897644987832 0.349991019844699 249 249 -0.734494319621749 0.503398184636999 -0.400247221684379 250 250 -0.989528415514397 0.839136294267078 0.358362266762923 251 251 -0.297578949619101 -0.304572573458164 0.820639931338014 252 252 0.0466280488595221 -0.125534729133879 0.753705551836252 253 253 -0.736475374938984 0.818502653041985 -0.0959214566187271 254 254 0.762687847709622 -0.992359225839721 -0.619136896682819 255 255 1.96977235146495 -1.56438387774728 0.595399026635289 256 256 1.44477711575254 0.102540189204669 0.119666699672157 257 257 2.93644221009186 0.132408626655896 -0.571253063956656 258 258 -1.64340825575722 -1.71647380349127 0.624636435244488 259 259 0.199821292254365 0.0108931677881925 0.832449327129177 260 260 -2.89904313683447 -0.665617585302284 -0.32470371115627 261 261 0.0110238851144448 -1.1241917371126 -1.70605047017061 262 262 -0.111135443892226 -2.02513040821815 -0.595550283069873 263 263 0.296956907479138 -1.49235331862979 0.674294916418284 264 264 -1.58806982701449 -0.87293526942144 0.618676976339737 265 265 -1.20599790707864 -0.668896146097892 -0.285472859290853 266 266 -0.984446076989712 0.405512286601059 -0.992812408330569 267 267 0.873981222118058 0.130636382839266 0.223138783736783 268 268 1.15137901211244 0.269341912478004 -0.370276060801822 269 269 -0.237522073285531 -1.16941542159274 -0.292375309742259 270 270 0.521451560069117 0.229210872300789 0.117145303707847 271 271 -0.721109911792939 0.973353505683337 0.725840321699984 272 272 -1.71579509456485 0.331053754108528 -0.309686238454332 273 273 1.41631965677878 0.40590149419227 -0.776581169847057 274 274 -1.26764883299582 0.602765703689368 0.20167773869961 275 275 0.350036194906335 0.944979275948657 -2.23712574677926 276 276 0.0841339962579271 1.07519734277879 -0.674417825943384 277 277 -0.38880461324062 1.68072282441877 -1.55548606060339 278 278 0.712520575225716 -0.783525953643761 -0.0692911345356956 279 279 1.37756660256157 -1.09914891659094 -0.112098933740495 280 280 -2.09233520668221 0.122388401239843 0.0745129102324621 281 281 0.0444170182142923 0.789377590728428 0.781404555410717 282 282 -1.04676495729127 0.560383614998423 -0.620929998169237 283 283 -0.464676156313911 0.78832301597018 0.933006648642985 284 284 1.57997933674385 0.808076546805481 0.620128179317599 285 285 -0.062235704507387 -1.1873901649143 0.233185939981184 286 286 0.64560171538111 1.19921535710876 -0.360792071066905 287 287 1.7600404868672 0.86971773121211 -1.1225428057822 288 288 -1.73949071882268 0.70280563800663 -0.514981312838415 289 289 1.65736411683642 -1.1437399326179 -1.3031282156944 290 290 -0.296467972076117 0.444850043146052 1.20300225757892 291 291 1.82460367451811 -1.94034273153412 0.155062051356154 292 292 -0.217403205034682 -2.29536071176852 1.44441176711928 293 293 -1.49109063118087 -0.952864885483231 -0.648197148440543 294 294 0.417681616508874 -1.1291558960589 -0.627291915158984 295 295 -0.335530289243836 -1.56795725710696 -2.19360085121039 296 296 0.562029616139559 -1.00515927301376 0.471217907177394 297 297 1.10716329206117 0.275315611994426 0.726923493424635 298 298 -0.376045966162074 -0.545860364876667 0.695162762922577 299 299 -1.01169881487892 0.421285842494731 -0.127456459580007 300 300 -0.233735457417624 0.234001376530343 -0.279210500761352 301 301 -0.191041983162951 -1.26656674240632 0.268176102391084 302 302 -2.14079033007813 -0.661582208240859 -1.45671616402897 303 303 0.171697377948325 1.19790586667098 -0.303744643932396 304 304 -0.51178438806716 -0.370359287706688 0.492310733041444 305 305 -2.1521556116937 0.211447694327415 1.13994230933885 306 306 1.78336611406654 1.81258706009664 2.21509213437292 307 307 -1.66459000979854 1.05607813943896 1.01618343377454 308 308 -1.23831539739212 0.174125333480291 -0.211814661895119 309 309 0.748196335956892 1.31893965065117 -0.811219973030862 310 310 0.288925126152792 -0.790047372466064 0.774907436039824 311 311 0.218752902211661 -0.295691693617648 -0.369586168708846 312 312 -1.31711372445576 -0.382572814059577 -0.698393008336702 313 313 0.746165575759412 -1.10415473494955 0.926750246438677 314 314 0.558474345090657 0.46862507716215 -1.33073599449416 315 315 -0.949839805579198 1.45613405551077 -0.171630169552659 316 316 -1.00348096735362 0.0952170340869715 -0.20894959044786 317 317 1.06190967772141 0.938709503535816 -0.191898660438186 318 318 -0.203767226505989 1.45446480582589 -0.266331940952407 319 319 0.514968594844155 0.474162886855075 1.3500815223921 320 320 -0.876709951973288 -0.64595588629736 -0.354804926698781 321 321 1.05242687576023 0.11435781464134 -1.2750296485476 322 322 -1.01289579517596 -0.0270744081097838 -0.974583689186217 323 323 0.628597759786413 0.871057057558597 0.878410823840972 324 324 -1.18536815436662 0.237656085500654 -0.0974493631407294 325 325 -0.263263415095149 -1.44171449442434 -0.308858102387813 326 326 2.187931429856 -0.0448832133939714 -0.0916768117939348 327 327 0.721356341862245 1.92071654161163 -0.953374022528519 328 328 -0.848363397809302 -0.917608912846968 0.552862656060789 329 329 -0.988155592500341 -0.462056013220845 -1.00920674215424 330 330 -1.94058845096277 -0.856316424989464 -1.0908984822071 331 331 -0.0505232383727004 0.531545092071155 -0.00176212129430811 332 332 -0.145093288027965 -0.726857837930715 0.00291095009469781 333 333 -0.619765511690178 0.717145096834534 0.405405931529327 334 334 0.764451579068619 1.47070599637375 -0.669689678089283 335 335 0.183358257558995 -0.0831282511368581 0.433822596451396 336 336 1.01683887092612 -0.486724368684249 -0.00835953903736881 337 337 -0.231482025850402 -1.04112143594274 -0.312872327654019 338 338 0.125226073338694 -0.612502253575669 1.9613718864005 339 339 -1.5853989455743 -0.0332048306778363 -0.809711201156886 340 340 -0.270814906273368 1.15150627999799 -1.31156103028854 341 341 -0.327455226114505 -0.299027016341994 1.15257784935637 342 342 2.29830643498446 2.01125132335651 -0.248521329194713 343 343 0.00699298749237794 -0.256989059952088 2.39698946550435 344 344 -0.840138408391043 1.4845727187796 -0.581505185126562 345 345 0.299514178506534 -1.49891507259923 -1.79871610742881 346 346 0.686550825661833 -0.528289957966227 1.48029842182583 347 347 -0.45001370605832 0.684382356816486 -0.55071117530745 348 348 -1.31452129325411 0.552333014970822 -0.955732804108503 349 349 -0.889682558174095 -3.75500098361948 0.951415382296232 350 350 0.127431832080324 -0.632802305886436 -0.50627913852573 351 351 -0.112048132821479 -0.503652039649308 0.658186027591559 352 352 0.735555560160039 -0.0103500057568764 -0.288778640557989 353 353 0.0770376641676405 0.26837203940238 0.139251213851349 354 354 -1.99258172213664 -0.145854539283609 -0.937226004051109 355 355 -1.4921334606253 0.0760290066359275 -0.638203445360267 356 356 -0.363076454646316 0.341697577899652 -1.66226713422437 357 357 0.187916092171361 -1.52064147800193 -0.363134323290455 358 358 -0.676067238311435 -1.41454450811721 -0.360419845512291 359 359 -1.01818400664782 2.70689103153848 -0.736411170974868 360 360 0.643991543128254 -0.84244496364137 0.00437956636730414 361 361 0.845439889290235 -0.656289941005438 -0.194854955864464 362 362 2.17243394080198 1.499611543096 0.502358577899669 363 363 0.478976866575967 -1.17700453542394 -0.617667076190438 364 364 -2.40615948097953 -1.81461389360954 0.802839788167135 365 365 -0.706072441494411 2.02228197750379 -0.393308607676681 366 366 -0.0805784158116847 0.716674158295844 -1.20246006637217 367 367 -0.732597151075011 0.415601284249849 0.597589404816867 368 368 0.667621992718285 1.23843683950396 -0.418220413620227 369 369 0.443331659603023 -1.78033791585069 1.64559431645404 370 370 -1.49759006993034 -1.1661095878874 1.38886171190481 371 371 0.635231718115305 -0.570508750553901 0.270193218342475 372 372 0.795574536325585 1.38952054318901 -0.205021901201099 373 373 0.56175250763996 0.368582315379003 0.299124792547437 374 374 -0.00544817501613968 1.47285432322312 -0.175075944959192 375 375 -1.69155549579082 -0.522545241727092 1.35619066795485 376 376 -0.338280840627237 0.64061716359716 0.495058300057172 377 377 -1.84062788360435 -0.355930890969487 -1.47395465638291 378 378 -0.397429042886146 -0.30562148009681 0.120362124409584 379 379 -1.4104795179153 0.152843003542133 1.6088215156232 380 380 -0.178517695940274 0.293126647080975 1.04376969864201 381 381 -0.948112187155606 -0.104263127842352 2.01674968189082 382 382 -1.10574447253708 -2.08945842089725 1.25622755105695 383 383 -0.979730638517688 0.0244491496356701 0.0131309866640956 384 384 -0.673906243517 -0.531445823842769 -0.790683740625223 385 385 -1.13364545455527 -0.404537314875365 0.155635186040039 386 386 -0.544213920615126 0.0943483987549832 -0.742451229248762 387 387 0.10566817085088 -0.228181117759124 -0.221996955410298 388 388 1.08989772734619 1.07364626904529 0.762173293406158 389 389 1.40469250953944 -0.850683420122761 -0.58653583423649 390 390 0.949585868985058 1.03517537412855 -1.87918662807997 391 391 -0.286124446529293 0.865896478013803 -0.807980429679611 392 392 2.41071373910191 -1.40414958026209 -1.43279514328709 393 393 -1.17629915685666 1.22302514103282 -1.64891740853755 394 394 -1.0735260519271 -0.181197904670042 1.8538972843443 395 395 -0.249694418967338 0.568791794274843 0.799644391373855 396 396 0.53313024140876 0.823257011438389 0.324712688536363 397 397 -0.550317144410589 0.0436005278514163 0.207942449005962 398 398 -0.155761262486867 -1.14990959168668 -0.764908731593276 399 399 0.773772943927362 1.81975886909259 0.429061628933955 400 400 0.674723374180998 0.877810943242963 0.155783475742268 401 401 0.416502491862716 0.371382546084973 0.633832727114365 402 402 0.936820455308487 0.374779777022824 -1.16031064831011 403 403 0.138571094768104 1.00722231541159 1.94388506551436 404 404 1.01977424998782 0.934263379091051 -0.190841598063365 405 405 -0.515549291460727 -0.761080273866144 1.49489860185877 406 406 1.57382617280842 -0.6285950389952 0.221592151733597 407 407 -0.284188972855081 1.31926052837367 1.20558354387342 408 408 -0.492467477098651 0.304497413279957 -1.30021219352541 409 409 -1.55223859906654 -0.169894465482847 1.73532648540805 410 410 -1.04365171199321 -1.07757830499426 0.402542715177659 411 411 0.337313503023761 0.0199790004416643 -1.01955597162537 412 412 0.567261737834834 0.343272499619591 0.783825957039741 413 413 1.33158903264638 -1.01907899097234 0.98033162542721 414 414 -0.943621151033741 0.511887198257892 1.95695832761542 415 415 1.29204107155955 0.685314763403991 1.35338962435436 416 416 1.11776473650734 -0.216629079829078 0.718584038343791 417 417 0.285225183001854 0.871964787681798 1.08138246909397 418 418 0.148853156447729 -0.418646580112241 -0.00875510873997657 419 419 0.9634192645878 2.06024524083206 1.4282865686655 420 420 0.6982079781091 -0.255827825174668 -0.801982390755466 421 421 0.101877872863502 0.337286115522036 0.142716608348129 422 422 -0.13514834258085 -0.343489389055775 -0.758550307258719 423 423 0.780193790567571 -0.262196400577283 0.222568348036814 424 424 0.521884516147666 -0.417526584412931 -0.906475641944693 425 425 -0.296271249700639 0.464767162492862 0.573146275298587 426 426 2.12583517147699 -1.58032505698937 -0.380971930202218 427 427 -0.164761291230633 1.19279208925353 0.0835927061035099 428 428 0.14894821294202 0.76227578842078 0.762337668292594 429 429 1.6625574780885 -1.6267191199893 -1.60935036726086 430 430 0.153377215776703 0.139804711923426 -0.578691503310998 431 431 -0.0609168353150149 1.00578542421274 -1.77184370913112 432 432 1.0195152003104 0.37007924120698 -0.102790498134211 433 433 0.639411740672879 -0.0510277115266688 -1.00291397287483 434 434 0.320803185489027 -1.51000030797827 -0.5238142805057 435 435 0.166796515737489 -0.125374640293625 0.0127264778716913 436 436 -0.183655679680401 -0.89949432185981 -0.709872187274793 437 437 2.71174074551991 1.57493867587087 -0.688704599128927 438 438 0.30320726335083 0.398285443256563 0.452069614194104 439 439 -0.412194239388631 -1.55399453877199 -0.0474936213927865 440 440 -1.32210482514306 -0.0332684613144726 -0.564368017626722 441 441 0.498774860942123 0.824228609926728 0.258177910093118 442 442 0.21463224937359 -2.06128512704817 -1.93738868157208 443 443 1.63849897616018 1.38946467311879 -0.782600239716082 444 444 1.52595304052576 -0.173539684026595 -0.947528184549204 445 445 0.0943440845394678 0.048931842077725 -0.382348837456813 446 446 -1.45168435143579 0.461979227971236 0.705776365553554 447 447 1.52072550218058 0.726264516797679 -0.298656274471634 448 448 -0.323154618456321 0.556172618285506 -0.65020645754813 449 449 2.28150475194183 1.2238359582073 -0.162320784068865 450 450 -0.00321711228625246 1.97248349042151 -0.146851872836864 451 451 -0.556550139004402 -0.887450564229401 0.0246591820773215 452 452 0.870946331189198 -1.4242008489949 -0.228144189377569 453 453 -0.109528854075021 1.29851845650738 1.21485370791291 454 454 -0.19355636344534 -0.416879433808446 -1.31833494834954 455 455 -0.411465876118703 -0.086353157737709 -1.88835452998271 456 456 -2.4756239289431 -0.567341520954236 1.58452126894583 457 457 0.60407680403628 -0.104022236597136 0.303493523505913 458 458 0.435994231991519 0.490238626736052 0.465480501523705 459 459 1.21081371343492 -0.94108333025015 0.0647524048924119 460 460 -2.58974911648449 1.28896474154759 -1.05216239641956 461 461 1.68527704564746 -0.169581954989677 -1.4370621269365 462 462 -1.15537249457013 2.48262760909883 0.956932733058004 463 463 -0.8369395055165 0.327073379726694 -0.0250871351453328 464 464 -0.0246541906360803 1.01311111432097 -0.0406603252497205 465 465 -0.393540020013427 0.193263006981446 -0.245017187295811 466 466 0.117928972785921 0.969861570326182 -1.68803941979426 467 467 -2.05095990457672 -0.717641462001806 -0.434291460991705 468 468 -0.791287688998045 0.619984113947591 -0.191140071315513 469 469 -0.661430923721985 -0.0264585781045273 -0.815567832840785 470 470 0.110540452409726 -1.60122797696722 -1.47297570682647 471 471 -1.13396161893926 0.302603493382267 1.17916441880041 472 472 -0.428447500162837 0.032378655629795 -1.44127777219403 473 473 1.97777565279044 0.188174543632119 0.496490678160897 474 474 0.478443080714877 -0.247911441813345 -0.389620540233551 475 475 1.88049273822024 0.758524313832996 0.815524985613147 476 476 -0.94451472563566 -1.46724267422952 0.0614521434616583 477 477 1.20862127917688 -1.29044795160467 0.161638205861625 478 478 -0.426800286844427 -2.13199751519076 -0.889888607904783 479 479 0.0701446752362957 -0.814190152930211 1.54613706801577 480 480 0.0247771557425567 2.21242490448656 0.170594216971674 481 481 -2.14479871510897 -1.26350470899781 -0.624638080485053 482 482 0.219042700250454 -0.997236453336354 0.895137214974744 483 483 -0.838546037838302 -1.36990425123737 0.392828897434324 484 484 1.95646567445163 -0.766893627230944 -2.25829087824114 485 485 -0.623694160458828 0.0617174904526453 0.223828879773566 486 486 0.105750753213039 -0.718526178019354 1.6796384333845 487 487 0.352984673775129 0.034045039443356 -0.236623000367563 488 488 -0.86099663862995 -0.899747742375208 0.739197695312269 489 489 1.90188671459261 0.945309117844356 0.270334048921035 490 490 0.232188200392006 -0.766806972425336 1.44920475451477 491 491 0.439708463348097 -0.100496086063684 1.19993066069441 492 492 -0.470814417895129 0.0876334399810952 0.0778379117905729 493 493 0.720297214674885 1.55770018984445 1.7692979541215 494 494 -0.996123733624525 0.0915562557433139 0.846450462395275 495 495 -0.138496948697237 0.0402966317738195 0.333453434403395 496 496 0.537127981267897 -0.0564681049010715 0.48119562320416 497 497 -0.0511684766636894 1.20246232935816 0.693052533966201 498 498 -1.46506280238144 1.17424105978661 0.642855642554621 499 499 -0.516533720439536 -0.576053588281794 0.161069003359382 500 500 -1.04827117969018 0.926623357058696 0.86635561319519 ================================================ FILE: example/covariates_wBin.txt ================================================ FID IID V1 V2 V3 V4 V5 1 1 1.46837294454993 1.93779743016325 0.152887004505393 1 urban 2 2 -1.2234390803815 -1.63408619199948 -0.190201446835255 2 other 3 3 0.0711531925667286 0.0863906292357564 0.14254739715665 1 rural 4 4 -1.92175859469857 -1.08321238171368 0.208887472917422 2 urban 5 5 -0.0373289339713292 -1.02834354890759 0.113500249292194 1 urban 6 6 1.12924506994131 1.1642622220428 -1.02039868555522 1 other 7 7 0.124570790547411 -0.561055497363546 0.266002220960573 1 urban 8 8 2.31188685141419 -2.08340899187172 0.312355654322118 2 other 9 9 0.832119089619467 0.743684102977159 1.4746796732347 1 urban 10 10 1.19036673925773 -0.918912693235152 1.00113959536299 2 other 11 11 1.01766824645197 -0.583733242666349 0.595862997663805 2 other 12 12 -0.191218100107435 0.124413606154074 -0.445679018953628 2 rural 13 13 -0.418092416107334 -1.22068710435991 -0.25828255958323 1 rural 14 14 -1.54261453972438 -1.14822985845664 0.947663490874804 1 rural 15 15 -1.49758037380989 0.353191967570147 -1.67473384357928 1 other 16 16 0.700744945491556 -1.62219012789145 0.387547883143897 1 rural 17 17 -1.25780414213882 -0.436076358461935 0.285499268174478 1 urban 18 18 -1.82390541901684 0.198218919902063 0.666614806000583 1 urban 19 19 1.13251580815108 -0.265775299506002 -0.0622306805127668 2 other 20 20 0.492114198246884 -0.00131788422869951 0.62113003145282 1 rural 21 21 0.020249216380171 0.207516653723503 -0.0720650681777961 2 rural 22 22 -0.127426361484408 0.111646074875877 -0.374605100762307 1 urban 23 23 -0.351735264827349 -1.8897756276129 -1.31446887736062 2 other 24 24 0.556201645642524 -0.927216741194837 -0.670921897387582 2 other 25 25 -0.288227411101263 -0.773639775533156 0.918378798010682 1 other 26 26 0.179204261620817 1.98212082136632 -1.74323255012925 1 other 27 27 -2.99510044590467 1.01591614247507 -1.30656023151223 2 urban 28 28 0.687164856614254 0.022038634604751 -0.653736026177123 1 urban 29 29 -0.458120017369043 -1.66046537945916 -0.764679088096362 2 urban 30 30 0.298664963756903 -0.874055548644782 -0.968587352908588 1 other 31 31 -0.704867333000956 1.32657624471891 -1.33679098153286 2 urban 32 32 0.268933322714231 0.634297194777424 1.04284699511091 1 other 33 33 -0.0576012700122912 0.99383446207855 1.10194755457429 2 other 34 34 -0.252690865124064 1.23747530714928 -0.0517462476666047 1 rural 35 35 0.816772061606045 1.53381358254476 0.474727910680923 2 other 36 36 0.0813075115319745 -0.087716758923924 0.100410038903451 1 other 37 37 -1.13911071553845 1.29564833748642 -0.478956382232604 2 urban 38 38 -2.30071562796601 0.300738731314805 -0.587279800319767 2 urban 39 39 -0.665550531017432 1.60151461457328 -0.578031352497875 1 other 40 40 0.535504325816876 -1.17772515604129 -0.636974061582677 2 rural 41 41 -0.10719986983704 1.66696346737119 -0.540441207204226 2 rural 42 42 1.73168907075819 0.512908202298933 0.349054138222236 1 rural 43 43 1.11493936987582 1.19669056647332 0.228930749067015 2 other 44 44 -0.346445574383567 0.367702234607877 -2.01861235544002 1 urban 45 45 -0.739824907504471 -1.30905646878106 1.52321090007486 2 other 46 46 1.41317473388373 -0.603924429292353 -0.203040768129117 1 rural 47 47 1.85238519526021 -0.706549112690604 -0.261031628260632 1 urban 48 48 -0.704988799276764 0.114948625495636 0.355374004192616 1 other 49 49 -0.717470008055363 -1.44512231702472 0.355989548318291 1 urban 50 50 -1.28379457125631 -0.382175768757946 0.520030874615731 1 other 51 51 -0.980701226576033 -0.344572505242403 -0.345634149621111 2 urban 52 52 -1.80608450923547 -1.01970469537602 -2.3276246808876 1 rural 53 53 0.519469347430971 -0.844754918129089 -1.2448698272613 2 urban 54 54 -1.03887288283886 0.120699005791946 -1.69087920435963 2 other 55 55 0.19044941960321 -0.0120025498001641 0.994938056990633 2 other 56 56 1.36752395617169 1.84207966816907 0.0771531293507437 2 rural 57 57 0.420300599394053 -0.93219359335265 -1.31203233361224 2 urban 58 58 -0.238882262339433 -0.0165310522813234 0.734926334380315 1 urban 59 59 0.358719740827443 -1.33502048770872 -0.263817757991046 2 urban 60 60 0.504605771212752 0.681252342506506 -0.904607552825463 1 other 61 61 -0.934190605753742 -1.26782065594274 0.208035565503809 1 rural 62 62 -1.22455262725579 0.1509010640874 0.124649479798584 1 rural 63 63 1.30730858869995 -0.110656485868179 0.263451989549831 1 urban 64 64 1.39985768650602 1.026009752497 0.517978165296883 2 urban 65 65 0.095020228154413 -1.1000660873379 0.270727993728319 2 other 66 66 0.608899641360111 0.540149707396411 -1.54990095597012 1 urban 67 67 0.515181246442935 1.03283997845031 -0.598311429953097 1 urban 68 68 -1.05053525281487 0.262030474106311 -1.6341839988117 1 rural 69 69 1.21927685400957 -0.857445715909335 -0.594636964825966 2 urban 70 70 1.67375624667927 -0.548726446385269 1.75395956332388 1 rural 71 71 -0.359877890356401 -3.5067326146456 1.37036291074209 1 other 72 72 -1.09299550519151 1.44830224283004 -2.16743621882942 2 rural 73 73 -0.644736566441107 -0.089869044743121 0.0157496509969957 1 rural 74 74 -0.304781057115279 -0.899765409637697 -0.911192242073904 1 urban 75 75 -1.2386459290929 -1.08396716080357 0.53095029374935 2 urban 76 76 -1.43742182165094 -0.505799913163813 -1.07762545065595 2 rural 77 77 -0.61144987235439 1.09389573161241 0.915378408790216 1 urban 78 78 0.335552961558524 -0.151631851536941 0.520623670829672 2 rural 79 79 -1.72481360521243 0.18465858767883 -1.23789473827296 1 urban 80 80 -1.0628773718348 0.938054224929031 -1.07536881040853 2 rural 81 81 -2.0725041748917 1.28659123477811 -1.27480582537542 2 urban 82 82 0.278898903282693 0.915747535671584 0.55591984832299 2 urban 83 83 0.621800798547842 -0.0411897312845134 0.326220002147429 1 rural 84 84 1.01833141709715 -0.343103002784949 0.614665471191135 1 urban 85 85 1.09275660021931 -0.768682708638166 -0.251264904741988 1 other 86 86 -2.19013321410478 -0.965279741272168 1.67709773629732 1 other 87 87 0.82468268003704 1.09516657815012 -0.602551763995042 2 rural 88 88 -3.32757908284742 -0.613034406172903 0.995413942815396 1 urban 89 89 2.14490953111301 0.41713527242053 0.119270852551482 2 other 90 90 -0.123021396945538 0.584708744638207 0.258426919134879 1 urban 91 91 1.34707751342789 0.241851724594599 1.7743815928603 2 urban 92 92 -1.48611681075474 -0.960983764449003 -1.10120747231238 1 rural 93 93 0.602164533183808 1.11310413285595 -0.986378172755791 2 other 94 94 -1.44188156628395 0.260944168274445 0.399639205570009 1 rural 95 95 0.453576746586724 0.141478026440519 -0.534967261642291 1 other 96 96 -0.575544600833662 1.09070201543903 0.0984300561574584 2 other 97 97 0.175108204140961 0.0423557034039549 0.830270964031336 1 rural 98 98 0.573709971323814 -0.986655769988478 -0.971784839773789 1 rural 99 99 -1.42869342105159 0.78872631854699 -1.32537307288953 2 urban 100 100 -0.606025357733767 0.501351903678155 -0.154203629882223 1 other 101 101 -1.45292711932486 0.443502488353178 -1.13128315823256 2 rural 102 102 0.541792990472648 -1.60372007316255 1.15784127932312 1 other 103 103 -0.220676004523668 -0.494421188316861 1.36807060346171 1 urban 104 104 -1.6615260282383 0.159178498429531 1.83335537436144 1 rural 105 105 -0.0830454257821562 -0.447210910574869 0.718339375016038 1 urban 106 106 0.522189914991477 0.9967269236725 0.449048331266212 2 other 107 107 -1.13210863595693 0.479113626661238 -1.56296622564352 2 rural 108 108 -0.36380704330813 -1.7603273967847 -1.77651590916735 1 rural 109 109 -1.68813107977496 1.16438431893709 2.03822965391838 2 rural 110 110 1.58554022854969 -0.00724971621805309 -1.11900650247014 1 urban 111 111 -0.998291492606998 0.00462754240275728 1.88127607035992 1 other 112 112 0.223497419145838 -1.32110280636091 0.524684732289228 2 urban 113 113 0.573627223018489 0.311650995532555 -0.784376215211658 2 other 114 114 -1.61446325699769 1.08295716575695 1.79168179051707 2 urban 115 115 1.44890500897322 0.0976050676871842 0.413386003360211 1 other 116 116 -1.33405141338608 0.784867755549606 0.454339460511901 1 urban 117 117 1.0281760163777 -0.944176657853787 -0.849636093259524 2 urban 118 118 0.442700323648412 1.00456272654013 -0.443199964334976 2 other 119 119 1.01841904624174 0.268656649347677 1.33990112172931 1 other 120 120 0.382476233707342 -0.133406454088862 -1.05408793400058 2 other 121 121 -0.0606854651306287 -0.311512521960318 0.605184001519958 2 other 122 122 -0.639314792216002 -1.51802669112881 -0.236607587664175 1 other 123 123 -0.991173875599332 -0.321572448363572 -0.236993428622127 1 urban 124 124 0.895207300368696 0.245650549532927 1.34382738721527 2 urban 125 125 0.0111936474428609 0.380086793801876 1.81260457198851 1 other 126 126 -0.38738113615745 -0.491841324400474 -1.01039561599705 1 other 127 127 -0.447750196400813 0.0866189943446268 -0.567089508145962 2 other 128 128 -1.48635114845613 -1.07099393611687 -0.830055469382584 1 rural 129 129 0.430022245376917 -0.00469201513204358 -0.46713689804785 2 rural 130 130 0.782370060240196 -1.15989373062202 -1.17827870092203 2 urban 131 131 0.136338134070754 1.71167953754715 1.48059989978744 1 urban 132 132 -0.431976638941024 -0.578190737622724 0.425291746107116 2 urban 133 133 1.40246708059836 0.502745109733989 -0.944177272188536 2 urban 134 134 0.720069270112552 -0.935145947387637 0.443871660569289 2 other 135 135 -0.31657492076431 -0.409901081300051 -0.145753345426725 2 rural 136 136 0.11060517957052 -1.04605134276557 -1.12208334105097 1 urban 137 137 0.346605932663756 0.770750900962366 -0.2274781373841 2 other 138 138 -0.199304950037624 1.51815799081416 1.46398209533402 2 rural 139 139 -0.252212740769667 1.66993552357908 0.306825359307706 2 urban 140 140 -0.888389791747243 0.232247159480735 0.499389375456319 2 rural 141 141 -0.890347761887952 -0.728192084856763 0.551271266403087 1 urban 142 142 0.152029144559496 2.23859123192986 0.274484191198587 1 other 143 143 -0.0701403417878827 0.927860684923288 0.556779551740602 2 urban 144 144 0.639338644011505 0.149843448572823 -0.418168329086757 2 rural 145 145 1.35683552548457 0.71545062816494 0.480718819473869 2 other 146 146 -0.0671855408009469 -1.00497960305324 -0.591564299670578 2 urban 147 147 -0.0417901194712151 -0.740058558181522 -0.880215881028116 1 urban 148 148 0.208014563936714 0.310692176853491 0.336489601755259 2 rural 149 149 0.974528118011505 0.700687451289159 -1.96272108587345 2 urban 150 150 0.434609242618411 1.06890916681593 -0.75356705741942 2 other 151 151 -2.02537341898317 -0.188261566304373 0.471200182938936 1 urban 152 152 0.860627995182198 -0.720148339360642 -0.770997708738759 1 urban 153 153 -0.9230520186645 1.51275275292047 2.05561908754561 1 urban 154 154 -2.89482526571973 0.0142176828942394 -0.673661017251696 1 urban 155 155 2.14764230980825 1.11836182023814 0.561414328616239 2 urban 156 156 0.191691835549594 1.69954007643337 1.10060477315528 1 rural 157 157 1.93391937196771 -2.14759361064734 0.103062267210891 1 other 158 158 -1.00666688093144 0.27389584173868 1.25113180056298 1 urban 159 159 0.867271912923313 0.550421539001593 -0.606209597163998 2 rural 160 160 0.239744640961947 0.871455671502197 -1.33433166716954 2 rural 161 161 -1.16673162601532 -0.923729049541734 0.882931371107068 1 urban 162 162 1.19623249643198 0.267536839445432 0.140965625037645 2 rural 163 163 -0.606314083879166 0.83108108713256 2.24244959411634 1 urban 164 164 0.627891419343745 0.316909753958488 -0.0892333697150752 2 other 165 165 0.681239498389416 0.0685010764996153 1.60785602940155 1 urban 166 166 -0.137622766408917 -0.219358052457248 0.0236094358672588 1 urban 167 167 1.65738740105425 -0.168396179630893 -0.391093556590735 1 other 168 168 -0.0532183341365486 -0.0971607395158495 -0.185753106858513 2 other 169 169 1.33325582492572 0.04748966314378 0.930597282445587 2 other 170 170 0.503095045815024 0.620836572358743 1.32907834680476 1 other 171 171 -0.833086643323573 1.57378927452153 0.282482508773599 1 urban 172 172 0.263414370073657 1.46655819123308 -0.440357980899672 2 other 173 173 -3.01149418318528 -0.758603658576047 1.29712100326943 2 other 174 174 0.775355123038991 -0.345255487752741 -0.432940728990831 1 other 175 175 -0.736899573490554 0.475328905667524 -0.486614757521328 2 rural 176 176 -0.705382244908399 -0.317658781371191 -0.950665118202799 1 rural 177 177 -1.10205074755081 1.04709464276291 0.358444545273432 1 urban 178 178 0.291626211880807 -2.24414390554635 -0.6114433881961 1 urban 179 179 -0.616258050186511 -0.213352918058229 -0.206848220065374 1 urban 180 180 -0.258221445691404 1.13323440192968 -0.520510426658636 2 other 181 181 1.0173814591059 0.335230742824172 1.80773614044068 1 other 182 182 -0.754582244072964 0.558863580112927 2.22272421500294 2 rural 183 183 0.962254883537811 0.952711758939796 0.26257629591948 1 rural 184 184 1.32361093350711 0.726199653116666 -1.20705098917927 2 rural 185 185 0.451636911802343 1.05241988015365 -0.704114083257637 2 rural 186 186 1.02960288576369 -0.915563518318848 0.224463903618335 1 urban 187 187 0.215069384601449 1.58967716981485 -2.36256657114121 2 urban 188 188 0.857706091343454 0.469806032976427 0.218452229983434 2 urban 189 189 0.9829607592393 -0.0244241933878937 -0.425470731739842 2 rural 190 190 0.113277626559119 0.0683882014999158 -0.277787951143784 1 other 191 191 -0.244180929885842 -1.82173257463395 0.394327358484765 1 urban 192 192 0.705378901432609 -0.442735603414705 -0.723030937642743 1 rural 193 193 1.15231800216468 0.594526314383486 1.49937846443481 1 other 194 194 -0.0824836561278376 0.502688722215784 1.02692569356233 2 urban 195 195 -0.51533276030488 -1.111301710122 -1.00163288726315 2 urban 196 196 0.352508349429745 -1.58333473521584 -0.321749790049319 1 rural 197 197 0.509737117278231 1.89680480039478 -0.415803626548454 1 rural 198 198 0.408429190860523 -0.283375339941657 -1.7310558218924 1 rural 199 199 2.63318259159922 -1.37220135481674 -1.07011609149891 2 urban 200 200 -0.300070178621705 0.116053618430679 -0.128957573780873 2 rural 201 201 0.0618158070410208 -0.257104455391491 0.700960192076722 2 rural 202 202 1.1967442135137 -2.53945571436358 -1.18290930991659 1 urban 203 203 -0.390733348779326 -0.565154112561019 1.54609780274072 2 other 204 204 -0.635434530912397 -0.783691703875507 -0.241253478697975 2 urban 205 205 0.453171623475049 -0.963323712166816 -0.17591279169021 2 other 206 206 0.497137673599994 -0.298292757497476 1.52472484723303 2 other 207 207 0.983044864096795 -0.182609328743605 1.08285068777089 1 other 208 208 0.121863300305586 -0.785472105457895 -0.024584067857987 2 urban 209 209 0.238155363079482 0.0801843336257735 0.699724938898343 1 rural 210 210 -1.54623884763307 0.583293080796527 -1.01858438189806 1 other 211 211 -0.968055736721857 -0.638630086897045 1.40318747864031 1 rural 212 212 -0.00349665688432686 1.414451490428 -1.73762899052836 2 rural 213 213 -0.00457607386072327 -0.525635302551504 -1.45373867624621 1 urban 214 214 -0.366134409356681 -0.666235621241421 -0.505336833078742 1 other 215 215 1.89024923544878 0.741764948637318 -1.0155203395098 2 rural 216 216 -0.918308636321609 -0.0868765217265333 -0.509826529424641 2 other 217 217 -0.591074858895521 0.566777955769371 0.99434556045379 1 other 218 218 2.25670365684985 -0.315748293528222 0.365477681343191 2 other 219 219 -1.57233822739218 -0.850792763875279 0.904498367464702 1 urban 220 220 -0.0682314485516372 -0.795866178677262 1.66930347041193 1 other 221 221 -0.533686551757233 -0.465695098147421 -0.981684351830436 2 rural 222 222 -0.650744878298164 0.715410607037681 0.815096345271332 1 other 223 223 -1.73483240099147 1.15510538447811 0.744813039979084 1 urban 224 224 1.08722268180171 1.19413693413092 -0.240273728814771 2 urban 225 225 -0.195458351526377 -1.12708948860974 0.0483699010155095 1 rural 226 226 -0.377051472458811 -0.762275563055573 0.738733077024699 1 urban 227 227 -0.18142884904785 1.08723994079201 0.8524808816003 1 rural 228 228 -1.08408259984194 -0.11623045844534 0.0936085321037543 2 other 229 229 0.980923357579053 -1.36753072430618 0.501720860018512 2 other 230 230 -1.41202933071188 0.0433877791285629 -0.0803230747661825 1 urban 231 231 -0.629131853656102 -0.549328075703398 1.62922107570998 1 other 232 232 1.70458554314851 -0.127408146304953 -0.247666680166544 1 rural 233 233 0.0114661310717726 -1.14727853739666 0.601845776132469 1 urban 234 234 0.0055302906322214 0.548837223017019 0.998310060979668 1 other 235 235 -1.47169674493235 -2.51801462427645 -0.565532684958423 2 other 236 236 0.375248849183357 1.88760055391672 -0.256481599828999 1 urban 237 237 0.264296911165029 -1.33259359592374 0.0487652939597159 1 other 238 238 0.17719004528226 -0.193701321174802 2.39465797007541 1 other 239 239 -0.188329921279762 0.319697619525775 0.00805067416711713 2 rural 240 240 0.638949836393311 -0.175011559041567 -0.565935078051149 2 rural 241 241 -0.521513973408463 0.790904235650827 0.086850161445771 2 rural 242 242 0.119178273767935 -0.18779594966625 -0.665865387079382 1 urban 243 243 1.48244098394491 -1.24068304414465 1.73031811007768 1 other 244 244 1.68422348507766 -1.12591550053402 -1.06202319844172 1 rural 245 245 -0.617850744913592 -0.719053349775352 -0.395999153143368 2 other 246 246 -0.962425935625463 -1.37957764887356 -0.935088714487197 2 other 247 247 -0.676307216820063 0.455639497484506 0.988656830560121 2 urban 248 248 -0.429803260399542 -0.95897644987832 0.349991019844699 2 other 249 249 -0.734494319621749 0.503398184636999 -0.400247221684379 2 other 250 250 -0.989528415514397 0.839136294267078 0.358362266762923 1 other 251 251 -0.297578949619101 -0.304572573458164 0.820639931338014 2 urban 252 252 0.0466280488595221 -0.125534729133879 0.753705551836252 2 rural 253 253 -0.736475374938984 0.818502653041985 -0.0959214566187271 1 other 254 254 0.762687847709622 -0.992359225839721 -0.619136896682819 1 other 255 255 1.96977235146495 -1.56438387774728 0.595399026635289 1 other 256 256 1.44477711575254 0.102540189204669 0.119666699672157 1 urban 257 257 2.93644221009186 0.132408626655896 -0.571253063956656 2 urban 258 258 -1.64340825575722 -1.71647380349127 0.624636435244488 2 urban 259 259 0.199821292254365 0.0108931677881925 0.832449327129177 2 rural 260 260 -2.89904313683447 -0.665617585302284 -0.32470371115627 2 urban 261 261 0.0110238851144448 -1.1241917371126 -1.70605047017061 1 urban 262 262 -0.111135443892226 -2.02513040821815 -0.595550283069873 2 other 263 263 0.296956907479138 -1.49235331862979 0.674294916418284 1 rural 264 264 -1.58806982701449 -0.87293526942144 0.618676976339737 2 urban 265 265 -1.20599790707864 -0.668896146097892 -0.285472859290853 1 urban 266 266 -0.984446076989712 0.405512286601059 -0.992812408330569 1 urban 267 267 0.873981222118058 0.130636382839266 0.223138783736783 2 urban 268 268 1.15137901211244 0.269341912478004 -0.370276060801822 2 urban 269 269 -0.237522073285531 -1.16941542159274 -0.292375309742259 1 urban 270 270 0.521451560069117 0.229210872300789 0.117145303707847 1 other 271 271 -0.721109911792939 0.973353505683337 0.725840321699984 1 other 272 272 -1.71579509456485 0.331053754108528 -0.309686238454332 2 other 273 273 1.41631965677878 0.40590149419227 -0.776581169847057 1 urban 274 274 -1.26764883299582 0.602765703689368 0.20167773869961 1 rural 275 275 0.350036194906335 0.944979275948657 -2.23712574677926 2 urban 276 276 0.0841339962579271 1.07519734277879 -0.674417825943384 2 rural 277 277 -0.38880461324062 1.68072282441877 -1.55548606060339 1 rural 278 278 0.712520575225716 -0.783525953643761 -0.0692911345356956 1 rural 279 279 1.37756660256157 -1.09914891659094 -0.112098933740495 2 rural 280 280 -2.09233520668221 0.122388401239843 0.0745129102324621 1 other 281 281 0.0444170182142923 0.789377590728428 0.781404555410717 2 rural 282 282 -1.04676495729127 0.560383614998423 -0.620929998169237 1 urban 283 283 -0.464676156313911 0.78832301597018 0.933006648642985 1 urban 284 284 1.57997933674385 0.808076546805481 0.620128179317599 2 urban 285 285 -0.062235704507387 -1.1873901649143 0.233185939981184 2 rural 286 286 0.64560171538111 1.19921535710876 -0.360792071066905 1 rural 287 287 1.7600404868672 0.86971773121211 -1.1225428057822 1 rural 288 288 -1.73949071882268 0.70280563800663 -0.514981312838415 1 rural 289 289 1.65736411683642 -1.1437399326179 -1.3031282156944 2 other 290 290 -0.296467972076117 0.444850043146052 1.20300225757892 1 urban 291 291 1.82460367451811 -1.94034273153412 0.155062051356154 2 other 292 292 -0.217403205034682 -2.29536071176852 1.44441176711928 2 urban 293 293 -1.49109063118087 -0.952864885483231 -0.648197148440543 1 rural 294 294 0.417681616508874 -1.1291558960589 -0.627291915158984 1 other 295 295 -0.335530289243836 -1.56795725710696 -2.19360085121039 2 urban 296 296 0.562029616139559 -1.00515927301376 0.471217907177394 1 rural 297 297 1.10716329206117 0.275315611994426 0.726923493424635 2 other 298 298 -0.376045966162074 -0.545860364876667 0.695162762922577 2 rural 299 299 -1.01169881487892 0.421285842494731 -0.127456459580007 2 other 300 300 -0.233735457417624 0.234001376530343 -0.279210500761352 1 other 301 301 -0.191041983162951 -1.26656674240632 0.268176102391084 1 urban 302 302 -2.14079033007813 -0.661582208240859 -1.45671616402897 1 other 303 303 0.171697377948325 1.19790586667098 -0.303744643932396 2 other 304 304 -0.51178438806716 -0.370359287706688 0.492310733041444 2 urban 305 305 -2.1521556116937 0.211447694327415 1.13994230933885 1 urban 306 306 1.78336611406654 1.81258706009664 2.21509213437292 1 urban 307 307 -1.66459000979854 1.05607813943896 1.01618343377454 2 other 308 308 -1.23831539739212 0.174125333480291 -0.211814661895119 2 urban 309 309 0.748196335956892 1.31893965065117 -0.811219973030862 2 other 310 310 0.288925126152792 -0.790047372466064 0.774907436039824 1 other 311 311 0.218752902211661 -0.295691693617648 -0.369586168708846 1 urban 312 312 -1.31711372445576 -0.382572814059577 -0.698393008336702 1 rural 313 313 0.746165575759412 -1.10415473494955 0.926750246438677 1 rural 314 314 0.558474345090657 0.46862507716215 -1.33073599449416 1 rural 315 315 -0.949839805579198 1.45613405551077 -0.171630169552659 2 urban 316 316 -1.00348096735362 0.0952170340869715 -0.20894959044786 1 other 317 317 1.06190967772141 0.938709503535816 -0.191898660438186 2 other 318 318 -0.203767226505989 1.45446480582589 -0.266331940952407 2 urban 319 319 0.514968594844155 0.474162886855075 1.3500815223921 1 other 320 320 -0.876709951973288 -0.64595588629736 -0.354804926698781 2 rural 321 321 1.05242687576023 0.11435781464134 -1.2750296485476 2 rural 322 322 -1.01289579517596 -0.0270744081097838 -0.974583689186217 2 urban 323 323 0.628597759786413 0.871057057558597 0.878410823840972 1 urban 324 324 -1.18536815436662 0.237656085500654 -0.0974493631407294 2 urban 325 325 -0.263263415095149 -1.44171449442434 -0.308858102387813 1 rural 326 326 2.187931429856 -0.0448832133939714 -0.0916768117939348 1 rural 327 327 0.721356341862245 1.92071654161163 -0.953374022528519 2 other 328 328 -0.848363397809302 -0.917608912846968 0.552862656060789 1 urban 329 329 -0.988155592500341 -0.462056013220845 -1.00920674215424 1 rural 330 330 -1.94058845096277 -0.856316424989464 -1.0908984822071 1 rural 331 331 -0.0505232383727004 0.531545092071155 -0.00176212129430811 1 rural 332 332 -0.145093288027965 -0.726857837930715 0.00291095009469781 1 other 333 333 -0.619765511690178 0.717145096834534 0.405405931529327 2 other 334 334 0.764451579068619 1.47070599637375 -0.669689678089283 1 urban 335 335 0.183358257558995 -0.0831282511368581 0.433822596451396 2 other 336 336 1.01683887092612 -0.486724368684249 -0.00835953903736881 2 other 337 337 -0.231482025850402 -1.04112143594274 -0.312872327654019 2 other 338 338 0.125226073338694 -0.612502253575669 1.9613718864005 2 rural 339 339 -1.5853989455743 -0.0332048306778363 -0.809711201156886 1 other 340 340 -0.270814906273368 1.15150627999799 -1.31156103028854 1 urban 341 341 -0.327455226114505 -0.299027016341994 1.15257784935637 2 rural 342 342 2.29830643498446 2.01125132335651 -0.248521329194713 1 other 343 343 0.00699298749237794 -0.256989059952088 2.39698946550435 2 rural 344 344 -0.840138408391043 1.4845727187796 -0.581505185126562 2 urban 345 345 0.299514178506534 -1.49891507259923 -1.79871610742881 1 urban 346 346 0.686550825661833 -0.528289957966227 1.48029842182583 2 other 347 347 -0.45001370605832 0.684382356816486 -0.55071117530745 2 urban 348 348 -1.31452129325411 0.552333014970822 -0.955732804108503 1 urban 349 349 -0.889682558174095 -3.75500098361948 0.951415382296232 1 rural 350 350 0.127431832080324 -0.632802305886436 -0.50627913852573 2 other 351 351 -0.112048132821479 -0.503652039649308 0.658186027591559 2 other 352 352 0.735555560160039 -0.0103500057568764 -0.288778640557989 1 rural 353 353 0.0770376641676405 0.26837203940238 0.139251213851349 2 rural 354 354 -1.99258172213664 -0.145854539283609 -0.937226004051109 1 urban 355 355 -1.4921334606253 0.0760290066359275 -0.638203445360267 2 other 356 356 -0.363076454646316 0.341697577899652 -1.66226713422437 1 rural 357 357 0.187916092171361 -1.52064147800193 -0.363134323290455 2 urban 358 358 -0.676067238311435 -1.41454450811721 -0.360419845512291 2 urban 359 359 -1.01818400664782 2.70689103153848 -0.736411170974868 2 urban 360 360 0.643991543128254 -0.84244496364137 0.00437956636730414 2 other 361 361 0.845439889290235 -0.656289941005438 -0.194854955864464 1 urban 362 362 2.17243394080198 1.499611543096 0.502358577899669 1 other 363 363 0.478976866575967 -1.17700453542394 -0.617667076190438 1 urban 364 364 -2.40615948097953 -1.81461389360954 0.802839788167135 2 rural 365 365 -0.706072441494411 2.02228197750379 -0.393308607676681 1 urban 366 366 -0.0805784158116847 0.716674158295844 -1.20246006637217 2 rural 367 367 -0.732597151075011 0.415601284249849 0.597589404816867 1 other 368 368 0.667621992718285 1.23843683950396 -0.418220413620227 1 rural 369 369 0.443331659603023 -1.78033791585069 1.64559431645404 1 rural 370 370 -1.49759006993034 -1.1661095878874 1.38886171190481 1 urban 371 371 0.635231718115305 -0.570508750553901 0.270193218342475 1 urban 372 372 0.795574536325585 1.38952054318901 -0.205021901201099 2 rural 373 373 0.56175250763996 0.368582315379003 0.299124792547437 2 rural 374 374 -0.00544817501613968 1.47285432322312 -0.175075944959192 2 other 375 375 -1.69155549579082 -0.522545241727092 1.35619066795485 2 other 376 376 -0.338280840627237 0.64061716359716 0.495058300057172 2 rural 377 377 -1.84062788360435 -0.355930890969487 -1.47395465638291 2 other 378 378 -0.397429042886146 -0.30562148009681 0.120362124409584 1 other 379 379 -1.4104795179153 0.152843003542133 1.6088215156232 1 urban 380 380 -0.178517695940274 0.293126647080975 1.04376969864201 2 urban 381 381 -0.948112187155606 -0.104263127842352 2.01674968189082 2 other 382 382 -1.10574447253708 -2.08945842089725 1.25622755105695 1 other 383 383 -0.979730638517688 0.0244491496356701 0.0131309866640956 1 urban 384 384 -0.673906243517 -0.531445823842769 -0.790683740625223 2 other 385 385 -1.13364545455527 -0.404537314875365 0.155635186040039 1 rural 386 386 -0.544213920615126 0.0943483987549832 -0.742451229248762 2 urban 387 387 0.10566817085088 -0.228181117759124 -0.221996955410298 1 other 388 388 1.08989772734619 1.07364626904529 0.762173293406158 1 urban 389 389 1.40469250953944 -0.850683420122761 -0.58653583423649 1 urban 390 390 0.949585868985058 1.03517537412855 -1.87918662807997 2 rural 391 391 -0.286124446529293 0.865896478013803 -0.807980429679611 1 rural 392 392 2.41071373910191 -1.40414958026209 -1.43279514328709 2 rural 393 393 -1.17629915685666 1.22302514103282 -1.64891740853755 2 urban 394 394 -1.0735260519271 -0.181197904670042 1.8538972843443 1 urban 395 395 -0.249694418967338 0.568791794274843 0.799644391373855 1 urban 396 396 0.53313024140876 0.823257011438389 0.324712688536363 2 urban 397 397 -0.550317144410589 0.0436005278514163 0.207942449005962 1 other 398 398 -0.155761262486867 -1.14990959168668 -0.764908731593276 2 urban 399 399 0.773772943927362 1.81975886909259 0.429061628933955 2 other 400 400 0.674723374180998 0.877810943242963 0.155783475742268 2 urban 401 401 0.416502491862716 0.371382546084973 0.633832727114365 2 urban 402 402 0.936820455308487 0.374779777022824 -1.16031064831011 1 urban 403 403 0.138571094768104 1.00722231541159 1.94388506551436 2 rural 404 404 1.01977424998782 0.934263379091051 -0.190841598063365 1 other 405 405 -0.515549291460727 -0.761080273866144 1.49489860185877 2 other 406 406 1.57382617280842 -0.6285950389952 0.221592151733597 2 urban 407 407 -0.284188972855081 1.31926052837367 1.20558354387342 2 other 408 408 -0.492467477098651 0.304497413279957 -1.30021219352541 2 urban 409 409 -1.55223859906654 -0.169894465482847 1.73532648540805 1 other 410 410 -1.04365171199321 -1.07757830499426 0.402542715177659 2 urban 411 411 0.337313503023761 0.0199790004416643 -1.01955597162537 2 other 412 412 0.567261737834834 0.343272499619591 0.783825957039741 2 rural 413 413 1.33158903264638 -1.01907899097234 0.98033162542721 2 rural 414 414 -0.943621151033741 0.511887198257892 1.95695832761542 1 urban 415 415 1.29204107155955 0.685314763403991 1.35338962435436 1 urban 416 416 1.11776473650734 -0.216629079829078 0.718584038343791 1 rural 417 417 0.285225183001854 0.871964787681798 1.08138246909397 2 rural 418 418 0.148853156447729 -0.418646580112241 -0.00875510873997657 1 rural 419 419 0.9634192645878 2.06024524083206 1.4282865686655 2 other 420 420 0.6982079781091 -0.255827825174668 -0.801982390755466 1 other 421 421 0.101877872863502 0.337286115522036 0.142716608348129 2 rural 422 422 -0.13514834258085 -0.343489389055775 -0.758550307258719 2 urban 423 423 0.780193790567571 -0.262196400577283 0.222568348036814 2 rural 424 424 0.521884516147666 -0.417526584412931 -0.906475641944693 2 other 425 425 -0.296271249700639 0.464767162492862 0.573146275298587 1 other 426 426 2.12583517147699 -1.58032505698937 -0.380971930202218 1 other 427 427 -0.164761291230633 1.19279208925353 0.0835927061035099 2 rural 428 428 0.14894821294202 0.76227578842078 0.762337668292594 2 urban 429 429 1.6625574780885 -1.6267191199893 -1.60935036726086 1 other 430 430 0.153377215776703 0.139804711923426 -0.578691503310998 1 other 431 431 -0.0609168353150149 1.00578542421274 -1.77184370913112 2 rural 432 432 1.0195152003104 0.37007924120698 -0.102790498134211 1 rural 433 433 0.639411740672879 -0.0510277115266688 -1.00291397287483 2 other 434 434 0.320803185489027 -1.51000030797827 -0.5238142805057 1 rural 435 435 0.166796515737489 -0.125374640293625 0.0127264778716913 2 other 436 436 -0.183655679680401 -0.89949432185981 -0.709872187274793 1 rural 437 437 2.71174074551991 1.57493867587087 -0.688704599128927 2 rural 438 438 0.30320726335083 0.398285443256563 0.452069614194104 2 urban 439 439 -0.412194239388631 -1.55399453877199 -0.0474936213927865 1 other 440 440 -1.32210482514306 -0.0332684613144726 -0.564368017626722 2 other 441 441 0.498774860942123 0.824228609926728 0.258177910093118 2 rural 442 442 0.21463224937359 -2.06128512704817 -1.93738868157208 2 other 443 443 1.63849897616018 1.38946467311879 -0.782600239716082 1 other 444 444 1.52595304052576 -0.173539684026595 -0.947528184549204 1 urban 445 445 0.0943440845394678 0.048931842077725 -0.382348837456813 1 rural 446 446 -1.45168435143579 0.461979227971236 0.705776365553554 2 rural 447 447 1.52072550218058 0.726264516797679 -0.298656274471634 1 urban 448 448 -0.323154618456321 0.556172618285506 -0.65020645754813 1 urban 449 449 2.28150475194183 1.2238359582073 -0.162320784068865 2 other 450 450 -0.00321711228625246 1.97248349042151 -0.146851872836864 2 rural 451 451 -0.556550139004402 -0.887450564229401 0.0246591820773215 2 urban 452 452 0.870946331189198 -1.4242008489949 -0.228144189377569 1 other 453 453 -0.109528854075021 1.29851845650738 1.21485370791291 1 rural 454 454 -0.19355636344534 -0.416879433808446 -1.31833494834954 1 other 455 455 -0.411465876118703 -0.086353157737709 -1.88835452998271 1 other 456 456 -2.4756239289431 -0.567341520954236 1.58452126894583 1 rural 457 457 0.60407680403628 -0.104022236597136 0.303493523505913 2 other 458 458 0.435994231991519 0.490238626736052 0.465480501523705 1 rural 459 459 1.21081371343492 -0.94108333025015 0.0647524048924119 2 other 460 460 -2.58974911648449 1.28896474154759 -1.05216239641956 2 other 461 461 1.68527704564746 -0.169581954989677 -1.4370621269365 1 rural 462 462 -1.15537249457013 2.48262760909883 0.956932733058004 2 rural 463 463 -0.8369395055165 0.327073379726694 -0.0250871351453328 2 other 464 464 -0.0246541906360803 1.01311111432097 -0.0406603252497205 2 urban 465 465 -0.393540020013427 0.193263006981446 -0.245017187295811 1 other 466 466 0.117928972785921 0.969861570326182 -1.68803941979426 1 rural 467 467 -2.05095990457672 -0.717641462001806 -0.434291460991705 2 other 468 468 -0.791287688998045 0.619984113947591 -0.191140071315513 2 rural 469 469 -0.661430923721985 -0.0264585781045273 -0.815567832840785 1 other 470 470 0.110540452409726 -1.60122797696722 -1.47297570682647 1 urban 471 471 -1.13396161893926 0.302603493382267 1.17916441880041 1 rural 472 472 -0.428447500162837 0.032378655629795 -1.44127777219403 2 urban 473 473 1.97777565279044 0.188174543632119 0.496490678160897 1 rural 474 474 0.478443080714877 -0.247911441813345 -0.389620540233551 2 urban 475 475 1.88049273822024 0.758524313832996 0.815524985613147 1 urban 476 476 -0.94451472563566 -1.46724267422952 0.0614521434616583 2 rural 477 477 1.20862127917688 -1.29044795160467 0.161638205861625 2 other 478 478 -0.426800286844427 -2.13199751519076 -0.889888607904783 1 other 479 479 0.0701446752362957 -0.814190152930211 1.54613706801577 2 rural 480 480 0.0247771557425567 2.21242490448656 0.170594216971674 2 rural 481 481 -2.14479871510897 -1.26350470899781 -0.624638080485053 2 other 482 482 0.219042700250454 -0.997236453336354 0.895137214974744 1 rural 483 483 -0.838546037838302 -1.36990425123737 0.392828897434324 2 rural 484 484 1.95646567445163 -0.766893627230944 -2.25829087824114 1 rural 485 485 -0.623694160458828 0.0617174904526453 0.223828879773566 1 urban 486 486 0.105750753213039 -0.718526178019354 1.6796384333845 1 rural 487 487 0.352984673775129 0.034045039443356 -0.236623000367563 2 rural 488 488 -0.86099663862995 -0.899747742375208 0.739197695312269 1 rural 489 489 1.90188671459261 0.945309117844356 0.270334048921035 1 rural 490 490 0.232188200392006 -0.766806972425336 1.44920475451477 2 other 491 491 0.439708463348097 -0.100496086063684 1.19993066069441 2 rural 492 492 -0.470814417895129 0.0876334399810952 0.0778379117905729 2 urban 493 493 0.720297214674885 1.55770018984445 1.7692979541215 1 rural 494 494 -0.996123733624525 0.0915562557433139 0.846450462395275 2 rural 495 495 -0.138496948697237 0.0402966317738195 0.333453434403395 1 urban 496 496 0.537127981267897 -0.0564681049010715 0.48119562320416 2 urban 497 497 -0.0511684766636894 1.20246232935816 0.693052533966201 2 urban 498 498 -1.46506280238144 1.17424105978661 0.642855642554621 1 urban 499 499 -0.516533720439536 -0.576053588281794 0.161069003359382 2 rural 500 500 -1.04827117969018 0.926623357058696 0.86635561319519 1 urban ================================================ FILE: example/example.bed ================================================ l+;>>ο*+?꼾;;Ͽ?룿?;ᄏ;:ώ>ʻ??ή.?㿺ﳿ;Ͼ뿋?꾪뿯믯Ͽꫳ?>?ﯪϿ>>;Ϫ2￾˿?/*/;뿿ﺺ?>:￿;οϫ̯򿻺￾<;:>뫾̿//˪ﻫ믮뾿/+꿫ﻯ>﫿2뿾㿯￿󿿳>(뿻:κ￯+;꿿請ﯿ믿Ϋﳻ좻ﯯ;?:?:/;˿33:.?믿?쌯+;//￾>ᄒ꿋λ?כּ;>>";>:??ξ..?/:ﯲ/򯏿:꾾﫮?ﻏ?:㻺//>뾫￾,>.ﯾ꺮몿<3<;﮿謹⿿..겿?;+ᅧ;̯/?ﯻó/;;ﺪ/>>꺮/Ͽ<Ϻ;>:ϻ?ξ;?뫾?3/>/3?ﯺʾ>2믯;<+￿:>뿿?뾫쯯?;+請+*:꿾꿿<ϻ>þ?.ﺾ˸﾿ʿ.:;;.꾻+»ˮ﫿.>˿;/.ﻻϿ?<>Ͽ>/3/<˺﫾*﮿:/>ᆵ뻿σ#˿/￿?:>뿿ﯻ;ꫳ磌請뿯ʾ*:/ﯮ?꪿(/Ȼ?絛:￿_??+;>?>﫫?莿>꺾:?ί뻾?ο>﾿ȿ?뿺3˿;;↑/;>?﾿뾾Ͽ;???ί￯ο꿾?ﻫ﮻;.?ο??껮﻾/?໾?󻿫/?ﯺ?>:￿*꿿˫Ͽï꯯?+ﯿ+>??;;;??*>?:꿿 ⿿츿2.;ﻯϾ:?˯*<8.￿Ͽ/.+/?﫻??ϻ8κ*꿿./ȿ謹ʯ?*/﻾>뿿뻮>*;Ϣꪺ;㮫쮳#ϲ;/ί>>ﺾϻ+￿ᄇ;⿻꿿??㺻﫯;>/?򿮌?:>볺/˾?/?￾˻꾯?/*?Ͽ?:??ﺻ>ξ.+?+뾯/ί?뾿?ᆱ<磌㾮ʫ쯪:/:먿?뺮?ϻ:󿿻*;︿+/˾뿋Ϻ.Ͽ?쾿?.8:;Ϻ↑.ﯯ/﮿;+.;>>Ϻ*+<Ϻ/?//ϻ뿮>>?뾣(:;?+ο?﫻ί/>/>Ͽ>>.뿯?.?ﯫ>+ꮯ?;?/::?/.>??뿾 ﺫ?꾯˻﻾?/* ϫﯾ믳;;?꿳˸?￯,.+ﺿ뻿+뾾ᆵ?/>˿+;ϯ?.?ﯾ﫨꺿뻿￿?.뿻˺+뿾>;;﮳ᅫ?>/ˮ>>?￾*?;;<˾뿯Ͼ˿Ϋﻯ?Ͼ;ϯ*+뾻/>믯:/;>κ? 꾻￿?>?;ﻯ?/謹*+?Ⱥ?:￿뻮;꾿;;ʪ뫮ᄏϿ?ꮿ:<ο?>:꯿?.3?>マ>˿?;﮻2꺺;>;ﺾ>˪ﻈ?Ͽ꿳?,?;*볻.?뻪/￿/?,?ϲ믾뿺?;>;캿:;:﾿??;>˫돺￯?迫??Ͽ컿κ;ﯫ﾿˯ϋʻ?뿿?ﯾ?Ͽʼ/?>*﫾뿿Ͽ??뿫+>?󻿯˿?*/○Ͽ/ϯ>ﯾ>;+>?﫻;B+3>?/꺿/ϻ>+ο..ê?::<?ﮮ￯̿? 꿿?Ϫ:˾ﯮ/>>,; ϫﺮξ﮿?;ﺮ:;/:;軾볿?//?￯;;ο﫼>Ͽ㺯ﯮ￯돻ꮾ룮???3>:?8ᆱ:⾣:˯;>?><+>;;?ᆵ+ʿ>꿯̪뺏ﯿ﮻Ͼ+2?뾪"?꯾?3?Ͽ>?龜"*>?/?Ͽ;/>(..뿿ﺃ+?+￿?￿::?>ﺬ*ꪮ?3⯫?﾿믻#?￾?;>/?꿯/;+.﫾<<ᄏ뿨;>뻫:⬻˺/켫>;→ξ++輯￯﫾ﺫ?;˿>;ﯾ?.?﾿>>*뻻﮻ȼ>￿󻿻?;.꿫ﻮ￿>꿾>?/ﻻﻻ?Ϻ뾫κ:￯뿳.ﺯ Ϻ> λ+꿪Ⱦᆴ꿪Ϋ?/>?○﫿?.?/:?ꯪϺ辿2?;+>+*>ﻻ??>>..˿*민ϻﯻﯿ>;>/뿯ϫﯪÿ?>򻮫.뫮><+>ホ꬏;<+/?ﺯ?뮮ϯ#;>+Ͽ/Ͼ/,뺿:뻿Ͽ/.:돳??뮺:?ꪺ㳿ﯻ>ﯻ?;ȯﯿ/?3.￿ʮ+*γ/ꎿ￾→?>㯻?.?>?Ϯ΋￿뿯>?򿻾ˮ迿/+ϯ?.?뿿󯯮;;.>;? 3ﺿ:>뾻;꾊.//κ?<뺯ﮊ+.Ϻ?﯋;ί//+뾻/:˸??Ϫ>>??ϯϮ˾>꿫??￾??>??˾":*;뫺뿻Ϻ>/˿/ﺪﯻ뾿;ʿϪ㮪.?뺾;*>.>Ϯ>쾮믿//?,+#*ʾ>ﻺ:*:뢮.꿲?꺯;¯ ϳ+?믻㻯.??︿ȯϿξ>2￯?+???ϯ/?:<?﻾￯>>;*?;뫾?ﻫ/?..?.?ᄏ뿿>ʫ쿮,ȿ*??￿뾿>;΋ϯ>>>믫#:￯ﺼ/:"볿?;쿻>>>쳺>?>+*/ᄏ뾻>Ͽ뼯̢ﺾ?→*>?뻫?諭.Ͽ?˿?Ϻ>+/￿? ꫪ>;⿻8/뿾??뾿쪾;꿬//+.ϯ:Ϯ˿>ʺϪꮻ볾.Ͽ?+;/껮뺼/꿎;˿/꿳ÿ+>ﯫ+볿;8??????3; ꪮ(ʻ:ϾϮ>>//﮲?/뿻?:?꿲?>/;/.?˻+ᄎ/?;:꯿돻??誾;;?/λίﺿ>;믯?㾻>ϻ?/::?ꫯ꿫"?λήϮ;:ᄏ.?;?:;+?˿.ϯ/+.诿좾￸௯/?㯾/;;/?ί.>꿿ﯯ??ᆱ:?ᆴ磌꿳??/>/ᄎϻ..><>>/꺳뻯>>??ﯿ뎿;3ϋʿ?3;?/Ͽ2ï/ﺾ?㿿?;>￿ή2:;?ϻ￿3?¾:?￿;󿯢מּ달?/ﺿ:3ϲ;*+*;ﯫ˾#>뾮3˫?○:>;/.뿾?㻯ﻻ?>?;;;?ﻻ??Ϊ?ʾ>?꿾뾯:Ͽ?:˿묢뾯?>/Ͽ/ﯿ뮫ﮫ?ϻ;믺ﺪ8?Ͽ?Ψ>/>?2??î+󼺾;ﯺ?몺K?>ᄏʪ?껾??뿮Ͽ뫯?////8:?:??>꯮屮.><ʺ?Ͼ;*.뾻;/;>:/<Ͽ?ϫ*?뿻絛﫮>(/?ﯾ>ᆵο:?;;?直ﺻ㾯>˫.(򾸾뫿:뿯껫﮾뿿ﺾ믾>˻"ξ?< →>/3.>??ﯺ?>/*ΫήϿ?Ͼ?>뿾Ϯ/ϻ컯꫿뿺>??ϻ??⻸>>>ﯿ;ʻ?˾; ϫ<뿿뼮ϯʪ/?㿮*Ͽﯯ몿;ϻ?;?￯+ꮯ뻻;㯿;+ᄒ몮;Ͼ;뮻?/>?>/Ͽÿ+?뼿ꮻϿᄏ:/+??+?*>⾻:뿿.//꾺꿾﬿/???뿾;ˮ?;:쿯*ϫ﫪󯿫:뻾.ϫ/?￯/￾?Ϋ./;/+;+/ﯳ/ᄒ̪+뿿﾿>*.뾿???+:꺯;.*:꯿;?;辯;;>ᅧﯿ/ᄏ<諸>﮻;>ίﯲ.˿Ͽ뾯뻾?8ʻ﮻ʯ???;￿>○벰뫯>;;אָ/￿;ﺯ?>˿﫯? ?ϯ.?ﲿ;:??뿿:3/?/;(./ʿ;>󿾾˿+;>*>>ʿϏ 뾻꿫ᆵëο˾??:/#?ﮯ8˯?/OϪﺯ>?3:/;.;/;?/ﲯ:΋뫬?>?꯿/?/+/뿿?ˮ;/;돪*Ͼ뫻/몿ϫ;;?뻿?*Ͽώ*˾;￿.??<ʻ/ήﺻ뿾 ᅬ?ϻ뾮?;믿￾Ͼ3>?ﯺ3>?﾿?>ᄐ뻻/̲??﮻ξ↓/;+*>?˾￾˫뾿ﺬʯ3ᄐ;*??ﯿ;マ?*;ﯿ˿˯8..>ﯿ/?*>ﺿ?:諭??/ή/???3>;쮻>Ϻ+;+벪﫮?>?>ﻺ.?λﻺ?>:뾻:>/?꾾ﮬϯ?>8.;Ϯ˾뻿κ/ϳ ;?Ϋ믻?ϣ;/,;￾?:?:믯??/↑?>???>诫?K#3./.8ﯻ:>뿾뾿ϻ,﾿￿(:Ͽ??/︿迿;ʫ뻻ÿ?컫/ʾ뫯絛/?⿫3?ﻼ*ʏ+<ᆵ;*>ʋ;/﮺/﮻/>墨뾺﮿:뿮룿+ﻳ?/θ뻻?/>↓>?˾󫺿 >ﮯϪ2:>8ﯿ쯾>:Ϻ>?뻿?(￯+닾?ᆱί:>;??﫺Ϋ?뾻>*/ﯾ?/?>￿;>ϯ;ﺻ>꯻?>뻾/?軮뺮꿻/諭?:뾿Ͽ못λ?>뾿+/:>ﻸϾ﫿ʯ?˾:>ο˺벯/?;뾮/>ϋγ//○￿?>돎뿿ϻ/?꿻Σ>?Ͼο?+:ﰿ/﫬++*>ʺ;>쿋*?/(.?ˋ*ϫﯪ;?.￿>>Ⱦ﻾Ͽ/⿿+??󾳳뿻3+겫 﫻˼;??ϻ+:ϲ/?>󻺻?/󯺾ᆱ/?˻?;Ͽ?ο3/.몿?㻻<ϻ?￾+ꬫϻꪾ?돯>꿻㿯믾﫯￿ήϿ̿.ﺿ;;/Ͽ?㿯/ᄒ??↑?벯:뾾뿺﻾/ϻξ몮뻿?ﯻ껯+꾯+/:?>??>?﮿?;￾?믻>(>>??++??*;뿿;?뻺ο/꾫Ͽ/꾾;/*˾;;?>/?뺻?>믬+﾿뻿꾪:˾ë:辿?﯋>>?.:λ/𿻺ο;:Ͼ3<3/??ʻ?;:/+:>>ﯿ2뿻?.﮾3>.???꾫?+?¾?;:/.?ﯺ↑???;<;/>?뺾>?뺻￿:ʾ>/,뾿/:?꾮/;˿?>?;ϻ>/?//￿/:<(//.뻻++ο.:뻿￿:;ﺯ?﾿2אָ/￾;?;./﮻ᆱﯳȃ￯/>;;:?迾:?#;?ﺪ?;ﯻϻ.ϫ?→뫯.?;Ͽο<뿿;/*/ᄏ;,ϻ?;Ϯ˯+ʺ뿺?Ͽ﫨κ;Ͽ꾻:;>>??￯/Ͽ*>˾/﻾>+/+ή;껻΋ʳ>￾.㾾/+#>꾿Ͼ/꿿+;Ͽ뾾?뿿絛?믿*;/絛.￾;?뿯;;??>Ͼ;﮻;>>:뮿꼿?>>Ͽ?>>+꿿?￯ﯮ/ﮮ˻.ﯾ<뿯ﺏ?Ͼ?뿮.쯯?ᄒ뮿뎿?ꣿ?Ͼ*/˿Ͽ﫺뾺>븿?.>˺שׁ꾪̯믬﫯ﻣ?<>*;믫???<>/ﻯ>?ο;Ͼ?;ϫϿ;>,/￾Ͽ/?>ᆱ﫬>>>;ʮ?;뿾>;/꿺+>#ᄎ/+/㻻?뿿Ϫᄏ?ꮪ﫯ﺺ>#⿻/?/;<ᄏ/뺾>ᄒ?→ϣﯿ:;?Ώ;󫾫㫋󾻪;:>Ϻ*뻾®?#?˾ﻻ/3+>꿎+<ʿ./?+/*ˮ﮺ʮ3;?,꫺?˾/+/>/?>ᆰ+;?￿*?">?ﻪ?믺﫻??﫻;뿿+ϫ ̿/+○→/?ﻻ?>ήί2?;;뿫˿? ᅨ>ˀ+>뾮ﯨ몪/+ﻻﻻ㿲?뿾ϯ:Ϗ뻾ϫ*˫ϫ:?3㿻﫿뻸￾:뻼㯿+Ͽ?/뫺ί뾳꾳?;ϻ.Ώ,;;뾊↑룿뿿«;㻿:3.﫾+,>﫿+>?:¾﻾?.;?+/>?>꯳/??:꯻ˋϾ/ᆰ(Ͽ㳿?/ ᆵﯿΫ/.:/ϋ>?>뻼˿ο/謹/Ϊ﻾;>+˿쾿뿿>˯3?諭?﯏﮿.ﯿ??몾?쾿;ϣ+껿??ϻ꯸?.>ﺮ.#οʯ?뿿?;˪ﯫ?>˫;/;?>?돮﫯뎯+˯> :.?>캺8;믻//??﮾?;Ͼ/ÿ꾼??./?﮺?/*ί:ᄒ?꿫;꿻㿿*3?:?뿾.;Ͽ.ʻ>*+:˿/꯾;?꿯뻿*?/>?Ͽ?뿿..?*.誯 ￾볯*ﯾ?;,>￯?ϻ룯뿢>ꮾ꼯?;+.﫮;?>?Ͼî>˿????"꪿.??ﯳホ;?ϯ?#ο;?󿿯쏿>Ͽ￿.?./;/ϫ㿻?뻯*.>/ﯾ;껿;?ο꿳Ͼﺿ:;*.;ﯣλꣾ./;?;?﫣/>/#ᄏ:+;/?껿?/ᆵ/;?:벿/ﯾθ/￿>쾳//Ϊ￾ᅨ;+>Ϫ뾾ϯ2?ί*ﯿ>?Ϻ.*게ˮ뿪ﻏ˯?꾾?/쿏2￿?>??Ͼ;Ϋᄏ??ꫯﳾ+ﻻ󾿯絛ᆴ*;/;+Ͽ?>;?+뾯꺮>:ﯯ?﫯/󾻪ʼ;?/;<ή/+λϾ?꯿>ϺϪ뿫/뺿..꺫謹輪;뻣뿿;*ﻊﮯ?;뫫.뿿:ᅬˮ.⯾˿?_;++뾾;ﺿ>:+?￯*쫻.?/ί쫲﾿??3>⎿˯?ϻ﫻*>꯻:ʋ讯﮿++>/뮮?+;?Ͽ?.?+Ͽϯ?>뮿꫏￿?:Ϻ/???/ﻯ볮:?/ϯ++?﾿ο"*+>??>Ϊ踿+;Ͽ뎿꿾*>?ᆱ+:Ϋ믺뿿*ﻼ˿ﯺ꫿ί;븿?:ʻϿ뻾ϿϺ:˿ʿ?/.Ͽ+?+8,>ϫᆱ?.뿯￿?>ᆵ˻쳺;/ᄒ;?꿿?..뿿;븿/Ͽ.?ϯ:/.?ﺼ￳?/;ﯻ˸○?;;:ꮮ>?￾?;﫫:/;?3??뫼*2꯾ϻ/? ﻾(ᄏ뻼ﯯ뫿?뿮│ú뺻???????￯?￾?????˿???﾿;?˿ﯯ;/Ͽ???○;?﫿?/????￿+?˿?;;?ﯿϻ˾?Ͼ﾿//??뿿Ͽﯾ￿2→;?ᄎ./ﯻϯ˿+￿?;;?ο?>?>￿믿>>??￿˿;?/ʿ﾿￿/???￿??>Ͼﻮ.;?????￿ϻᄒ?ﺯ/.???;?Ͽﳿ￾/￿>?㿿Ͼ?￿>￿????￿?￯>/+?[;??뿾???/?;ﻻ??뿾﾿?>?￿ϻ?/﮻Ͽ>ﯿ???;Ͽ?;/?뿿>뿿?/꿿￿?+;?ˮ￿￿ο쿯꿿?/?Ͽ????3Ͽώ???;ﻯ̿?￯/?ʾ??;ʻ○Ͽ/뿿￲??>ϯ?þ˿ί>?Ͼ?→￿ﯿ￿○ᄏ→㿫??/˾￿?﫿>Ͽ??2>Ͼ;Ͽ3ﻻ:ᄎ?;;믻?Ͽ??ﳮ??/ﯿ￿>;ᄒ??ϻ:ﺺ??.￿?￿>￯ϻ?;ﯿΪ￿ﺿ???;??﫿;???￾???뿿￿?>;?>/??﫾οϿ￿>>ﻯ>﾿/뿿?;Ͽϻ꯯>???+ﯻ뫿꿿뻿??:Ͽﯿ￾﾿;מּ/;>?>;?>????.;㻯??;ο󾿻???/﾿믿￿ﯾϿ?/?￿???;Ͼ????>˾?ϫ뻿?ώ??Ͼί;￿;?ﯿ?󾻿;㿿뾿*??//:Ͽ>;??.???+?3??Ͽ?￿?ﺿ?￿?￿?3?;뻿→﾿??ϯ??>뻾>>Ͽ˿??뾯//>ﯿ>>?Ͽ??뿻;//믯￿?.??︣뻿?￿?//?믿ϿϿ?>?;?￾//??￾ᄏϻ???>??ﻯ>￿?Ͽ??>/?;Ͽﮯ뿿>?+?;꿯?8;+?뿾뾿ϳ??￿/?Ͽ??ﯿ￿??ᅬ/?;?﮻+ﯿ뿿?+λ?>+>???.ᅬ￿;??ϳ?￿Ϯ;/??￿Ͽ**?뿿>8>?. ;뿿;????????/;?>;+/뿿ᆵ?￿ﳿ뿾?;ﯾ/ﯾ;꿪ﳎ?/?Ͽ?.?>????3謹￿??Ϋ????ϻϾ?+￿﾿0￿ᄎ︿?ﯿ￿ﻻ?>?+믮㿿?>?/;>﾿.?/??︿￳?ί?>?+//??;????+→￿ﯿﯿ믿/ο>○>ϻ?ﻺ???ﳿ;○;/￿>/??뿯Ͼ;?￿.￿⿿Ͼ?￿???Ͽ??믾뻿/→>;?>?>?????+?>???ᆱ??򯾾ϿξϿ￿﾿뿿?/;?>?;:Ͽ믻Ͽﯿ?Ͽ￾?/￿:????>?;??:￿??Ͽ??;>ά;???+ﯯ?˾?λ?ᆵϻ??˿ﯿ>?>?뿿Ͽﯿ꿻?????οϫ/뾿???뿿﾿￿>?﮿?/??/??????￿?.>￿ᄏϫ?￿￾+..;￯?ﯿ￿?ο???????ﯿ./??뿻>???ﯳ++/*??> +?/;̿˻??Ͽ뻿?>?Ͽ ================================================ FILE: example/example.bim ================================================ 1 1 0 1 1 2 1 2 0 2 1 2 1 3 0 3 1 2 1 4 0 4 1 2 1 5 0 5 1 2 1 6 0 6 1 2 1 7 0 7 1 2 1 8 0 8 1 2 1 9 0 9 1 2 1 10 0 10 1 2 1 11 0 11 1 2 1 12 0 12 1 2 1 13 0 13 1 2 1 14 0 14 1 2 1 15 0 15 1 2 1 16 0 16 1 2 1 17 0 17 1 2 1 18 0 18 1 2 1 19 0 19 1 2 1 20 0 20 1 2 1 21 0 21 1 2 1 22 0 22 1 2 1 23 0 23 1 2 1 24 0 24 1 2 1 25 0 25 1 2 1 26 0 26 1 2 1 27 0 27 1 2 1 28 0 28 1 2 1 29 0 29 1 2 1 30 0 30 1 2 1 31 0 31 1 2 1 32 0 32 1 2 1 33 0 33 1 2 1 34 0 34 1 2 1 35 0 35 1 2 1 36 0 36 1 2 1 37 0 37 1 2 1 38 0 38 1 2 1 39 0 39 1 2 1 40 0 40 1 2 1 41 0 41 1 2 1 42 0 42 1 2 1 43 0 43 1 2 1 44 0 44 1 2 1 45 0 45 1 2 1 46 0 46 1 2 1 47 0 47 1 2 1 48 0 48 1 2 1 49 0 49 1 2 1 50 0 50 1 2 1 51 0 51 1 2 1 52 0 52 1 2 1 53 0 53 1 2 1 54 0 54 1 2 1 55 0 55 1 2 1 56 0 56 1 2 1 57 0 57 1 2 1 58 0 58 1 2 1 59 0 59 1 2 1 60 0 60 1 2 1 61 0 61 1 2 1 62 0 62 1 2 1 63 0 63 1 2 1 64 0 64 1 2 1 65 0 65 1 2 1 66 0 66 1 2 1 67 0 67 1 2 1 68 0 68 1 2 1 69 0 69 1 2 1 70 0 70 1 2 1 71 0 71 1 2 1 72 0 72 1 2 1 73 0 73 1 2 1 74 0 74 1 2 1 75 0 75 1 2 1 76 0 76 1 2 1 77 0 77 1 2 1 78 0 78 1 2 1 79 0 79 1 2 1 80 0 80 1 2 1 81 0 81 1 2 1 82 0 82 1 2 1 83 0 83 1 2 1 84 0 84 1 2 1 85 0 85 1 2 1 86 0 86 1 2 1 87 0 87 1 2 1 88 0 88 1 2 1 89 0 89 1 2 1 90 0 90 1 2 1 91 0 91 1 2 1 92 0 92 1 2 1 93 0 93 1 2 1 94 0 94 1 2 1 95 0 95 1 2 1 96 0 96 1 2 1 97 0 97 1 2 1 98 0 98 1 2 1 99 0 99 1 2 1 100 0 100 1 2 1 101 0 101 1 2 1 102 0 102 1 2 1 103 0 103 1 2 1 104 0 104 1 2 1 105 0 105 1 2 1 106 0 106 1 2 1 107 0 107 1 2 1 108 0 108 1 2 1 109 0 109 1 2 1 110 0 110 1 2 1 111 0 111 1 2 1 112 0 112 1 2 1 113 0 113 1 2 1 114 0 114 1 2 1 115 0 115 1 2 1 116 0 116 1 2 1 117 0 117 1 2 1 118 0 118 1 2 1 119 0 119 1 2 1 120 0 120 1 2 1 121 0 121 1 2 1 122 0 122 1 2 1 123 0 123 1 2 1 124 0 124 1 2 1 125 0 125 1 2 1 126 0 126 1 2 1 127 0 127 1 2 1 128 0 128 1 2 1 129 0 129 1 2 1 130 0 130 1 2 1 131 0 131 1 2 1 132 0 132 1 2 1 133 0 133 1 2 1 134 0 134 1 2 1 135 0 135 1 2 1 136 0 136 1 2 1 137 0 137 1 2 1 138 0 138 1 2 1 139 0 139 1 2 1 140 0 140 1 2 1 141 0 141 1 2 1 142 0 142 1 2 1 143 0 143 1 2 1 144 0 144 1 2 1 145 0 145 1 2 1 146 0 146 1 2 1 147 0 147 1 2 1 148 0 148 1 2 1 149 0 149 1 2 1 150 0 150 1 2 1 151 0 151 1 2 1 152 0 152 1 2 1 153 0 153 1 2 1 154 0 154 1 2 1 155 0 155 1 2 1 156 0 156 1 2 1 157 0 157 1 2 1 158 0 158 1 2 1 159 0 159 1 2 1 160 0 160 1 2 1 161 0 161 1 2 1 162 0 162 1 2 1 163 0 163 1 2 1 164 0 164 1 2 1 165 0 165 1 2 1 166 0 166 1 2 1 167 0 167 1 2 1 168 0 168 1 2 1 169 0 169 1 2 1 170 0 170 1 2 1 171 0 171 1 2 1 172 0 172 1 2 1 173 0 173 1 2 1 174 0 174 1 2 1 175 0 175 1 2 1 176 0 176 1 2 1 177 0 177 1 2 1 178 0 178 1 2 1 179 0 179 1 2 1 180 0 180 1 2 1 181 0 181 1 2 1 182 0 182 1 2 1 183 0 183 1 2 1 184 0 184 1 2 1 185 0 185 1 2 1 186 0 186 1 2 1 187 0 187 1 2 1 188 0 188 1 2 1 189 0 189 1 2 1 190 0 190 1 2 1 191 0 191 1 2 1 192 0 192 1 2 1 193 0 193 1 2 1 194 0 194 1 2 1 195 0 195 1 2 1 196 0 196 1 2 1 197 0 197 1 2 1 198 0 198 1 2 1 199 0 199 1 2 1 200 0 200 1 2 1 201 0 201 1 2 1 202 0 202 1 2 1 203 0 203 1 2 1 204 0 204 1 2 1 205 0 205 1 2 1 206 0 206 1 2 1 207 0 207 1 2 1 208 0 208 1 2 1 209 0 209 1 2 1 210 0 210 1 2 1 211 0 211 1 2 1 212 0 212 1 2 1 213 0 213 1 2 1 214 0 214 1 2 1 215 0 215 1 2 1 216 0 216 1 2 1 217 0 217 1 2 1 218 0 218 1 2 1 219 0 219 1 2 1 220 0 220 1 2 1 221 0 221 1 2 1 222 0 222 1 2 1 223 0 223 1 2 1 224 0 224 1 2 1 225 0 225 1 2 1 226 0 226 1 2 1 227 0 227 1 2 1 228 0 228 1 2 1 229 0 229 1 2 1 230 0 230 1 2 1 231 0 231 1 2 1 232 0 232 1 2 1 233 0 233 1 2 1 234 0 234 1 2 1 235 0 235 1 2 1 236 0 236 1 2 1 237 0 237 1 2 1 238 0 238 1 2 1 239 0 239 1 2 1 240 0 240 1 2 1 241 0 241 1 2 1 242 0 242 1 2 1 243 0 243 1 2 1 244 0 244 1 2 1 245 0 245 1 2 1 246 0 246 1 2 1 247 0 247 1 2 1 248 0 248 1 2 1 249 0 249 1 2 1 250 0 250 1 2 1 251 0 251 1 2 1 252 0 252 1 2 1 253 0 253 1 2 1 254 0 254 1 2 1 255 0 255 1 2 1 256 0 256 1 2 1 257 0 257 1 2 1 258 0 258 1 2 1 259 0 259 1 2 1 260 0 260 1 2 1 261 0 261 1 2 1 262 0 262 1 2 1 263 0 263 1 2 1 264 0 264 1 2 1 265 0 265 1 2 1 266 0 266 1 2 1 267 0 267 1 2 1 268 0 268 1 2 1 269 0 269 1 2 1 270 0 270 1 2 1 271 0 271 1 2 1 272 0 272 1 2 1 273 0 273 1 2 1 274 0 274 1 2 1 275 0 275 1 2 1 276 0 276 1 2 1 277 0 277 1 2 1 278 0 278 1 2 1 279 0 279 1 2 1 280 0 280 1 2 1 281 0 281 1 2 1 282 0 282 1 2 1 283 0 283 1 2 1 284 0 284 1 2 1 285 0 285 1 2 1 286 0 286 1 2 1 287 0 287 1 2 1 288 0 288 1 2 1 289 0 289 1 2 1 290 0 290 1 2 1 291 0 291 1 2 1 292 0 292 1 2 1 293 0 293 1 2 1 294 0 294 1 2 1 295 0 295 1 2 1 296 0 296 1 2 1 297 0 297 1 2 1 298 0 298 1 2 1 299 0 299 1 2 1 300 0 300 1 2 1 301 0 301 1 2 1 302 0 302 1 2 1 303 0 303 1 2 1 304 0 304 1 2 1 305 0 305 1 2 1 306 0 306 1 2 1 307 0 307 1 2 1 308 0 308 1 2 1 309 0 309 1 2 1 310 0 310 1 2 1 311 0 311 1 2 1 312 0 312 1 2 1 313 0 313 1 2 1 314 0 314 1 2 1 315 0 315 1 2 1 316 0 316 1 2 1 317 0 317 1 2 1 318 0 318 1 2 1 319 0 319 1 2 1 320 0 320 1 2 1 321 0 321 1 2 1 322 0 322 1 2 1 323 0 323 1 2 1 324 0 324 1 2 1 325 0 325 1 2 1 326 0 326 1 2 1 327 0 327 1 2 1 328 0 328 1 2 1 329 0 329 1 2 1 330 0 330 1 2 1 331 0 331 1 2 1 332 0 332 1 2 1 333 0 333 1 2 1 334 0 334 1 2 1 335 0 335 1 2 1 336 0 336 1 2 1 337 0 337 1 2 1 338 0 338 1 2 1 339 0 339 1 2 1 340 0 340 1 2 1 341 0 341 1 2 1 342 0 342 1 2 1 343 0 343 1 2 1 344 0 344 1 2 1 345 0 345 1 2 1 346 0 346 1 2 1 347 0 347 1 2 1 348 0 348 1 2 1 349 0 349 1 2 1 350 0 350 1 2 1 351 0 351 1 2 1 352 0 352 1 2 1 353 0 353 1 2 1 354 0 354 1 2 1 355 0 355 1 2 1 356 0 356 1 2 1 357 0 357 1 2 1 358 0 358 1 2 1 359 0 359 1 2 1 360 0 360 1 2 1 361 0 361 1 2 1 362 0 362 1 2 1 363 0 363 1 2 1 364 0 364 1 2 1 365 0 365 1 2 1 366 0 366 1 2 1 367 0 367 1 2 1 368 0 368 1 2 1 369 0 369 1 2 1 370 0 370 1 2 1 371 0 371 1 2 1 372 0 372 1 2 1 373 0 373 1 2 1 374 0 374 1 2 1 375 0 375 1 2 1 376 0 376 1 2 1 377 0 377 1 2 1 378 0 378 1 2 1 379 0 379 1 2 1 380 0 380 1 2 1 381 0 381 1 2 1 382 0 382 1 2 1 383 0 383 1 2 1 384 0 384 1 2 1 385 0 385 1 2 1 386 0 386 1 2 1 387 0 387 1 2 1 388 0 388 1 2 1 389 0 389 1 2 1 390 0 390 1 2 1 391 0 391 1 2 1 392 0 392 1 2 1 393 0 393 1 2 1 394 0 394 1 2 1 395 0 395 1 2 1 396 0 396 1 2 1 397 0 397 1 2 1 398 0 398 1 2 1 399 0 399 1 2 1 400 0 400 1 2 1 401 0 401 1 2 1 402 0 402 1 2 1 403 0 403 1 2 1 404 0 404 1 2 1 405 0 405 1 2 1 406 0 406 1 2 1 407 0 407 1 2 1 408 0 408 1 2 1 409 0 409 1 2 1 410 0 410 1 2 1 411 0 411 1 2 1 412 0 412 1 2 1 413 0 413 1 2 1 414 0 414 1 2 1 415 0 415 1 2 1 416 0 416 1 2 1 417 0 417 1 2 1 418 0 418 1 2 1 419 0 419 1 2 1 420 0 420 1 2 1 421 0 421 1 2 1 422 0 422 1 2 1 423 0 423 1 2 1 424 0 424 1 2 1 425 0 425 1 2 1 426 0 426 1 2 1 427 0 427 1 2 1 428 0 428 1 2 1 429 0 429 1 2 1 430 0 430 1 2 1 431 0 431 1 2 1 432 0 432 1 2 1 433 0 433 1 2 1 434 0 434 1 2 1 435 0 435 1 2 1 436 0 436 1 2 1 437 0 437 1 2 1 438 0 438 1 2 1 439 0 439 1 2 1 440 0 440 1 2 1 441 0 441 1 2 1 442 0 442 1 2 1 443 0 443 1 2 1 444 0 444 1 2 1 445 0 445 1 2 1 446 0 446 1 2 1 447 0 447 1 2 1 448 0 448 1 2 1 449 0 449 1 2 1 450 0 450 1 2 1 451 0 451 1 2 1 452 0 452 1 2 1 453 0 453 1 2 1 454 0 454 1 2 1 455 0 455 1 2 1 456 0 456 1 2 1 457 0 457 1 2 1 458 0 458 1 2 1 459 0 459 1 2 1 460 0 460 1 2 1 461 0 461 1 2 1 462 0 462 1 2 1 463 0 463 1 2 1 464 0 464 1 2 1 465 0 465 1 2 1 466 0 466 1 2 1 467 0 467 1 2 1 468 0 468 1 2 1 469 0 469 1 2 1 470 0 470 1 2 1 471 0 471 1 2 1 472 0 472 1 2 1 473 0 473 1 2 1 474 0 474 1 2 1 475 0 475 1 2 1 476 0 476 1 2 1 477 0 477 1 2 1 478 0 478 1 2 1 479 0 479 1 2 1 480 0 480 1 2 1 481 0 481 1 2 1 482 0 482 1 2 1 483 0 483 1 2 1 484 0 484 1 2 1 485 0 485 1 2 1 486 0 486 1 2 1 487 0 487 1 2 1 488 0 488 1 2 1 489 0 489 1 2 1 490 0 490 1 2 1 491 0 491 1 2 1 492 0 492 1 2 1 493 0 493 1 2 1 494 0 494 1 2 1 495 0 495 1 2 1 496 0 496 1 2 1 497 0 497 1 2 1 498 0 498 1 2 1 499 0 499 1 2 1 500 0 500 1 2 1 501 0 501 1 2 1 502 0 502 1 2 1 503 0 503 1 2 1 504 0 504 1 2 1 505 0 505 1 2 1 506 0 506 1 2 1 507 0 507 1 2 1 508 0 508 1 2 1 509 0 509 1 2 1 510 0 510 1 2 1 511 0 511 1 2 1 512 0 512 1 2 1 513 0 513 1 2 1 514 0 514 1 2 1 515 0 515 1 2 1 516 0 516 1 2 1 517 0 517 1 2 1 518 0 518 1 2 1 519 0 519 1 2 1 520 0 520 1 2 1 521 0 521 1 2 1 522 0 522 1 2 1 523 0 523 1 2 1 524 0 524 1 2 1 525 0 525 1 2 1 526 0 526 1 2 1 527 0 527 1 2 1 528 0 528 1 2 1 529 0 529 1 2 1 530 0 530 1 2 1 531 0 531 1 2 1 532 0 532 1 2 1 533 0 533 1 2 1 534 0 534 1 2 1 535 0 535 1 2 1 536 0 536 1 2 1 537 0 537 1 2 1 538 0 538 1 2 1 539 0 539 1 2 1 540 0 540 1 2 1 541 0 541 1 2 1 542 0 542 1 2 1 543 0 543 1 2 1 544 0 544 1 2 1 545 0 545 1 2 1 546 0 546 1 2 1 547 0 547 1 2 1 548 0 548 1 2 1 549 0 549 1 2 1 550 0 550 1 2 1 551 0 551 1 2 1 552 0 552 1 2 1 553 0 553 1 2 1 554 0 554 1 2 1 555 0 555 1 2 1 556 0 556 1 2 1 557 0 557 1 2 1 558 0 558 1 2 1 559 0 559 1 2 1 560 0 560 1 2 1 561 0 561 1 2 1 562 0 562 1 2 1 563 0 563 1 2 1 564 0 564 1 2 1 565 0 565 1 2 1 566 0 566 1 2 1 567 0 567 1 2 1 568 0 568 1 2 1 569 0 569 1 2 1 570 0 570 1 2 1 571 0 571 1 2 1 572 0 572 1 2 1 573 0 573 1 2 1 574 0 574 1 2 1 575 0 575 1 2 1 576 0 576 1 2 1 577 0 577 1 2 1 578 0 578 1 2 1 579 0 579 1 2 1 580 0 580 1 2 1 581 0 581 1 2 1 582 0 582 1 2 1 583 0 583 1 2 1 584 0 584 1 2 1 585 0 585 1 2 1 586 0 586 1 2 1 587 0 587 1 2 1 588 0 588 1 2 1 589 0 589 1 2 1 590 0 590 1 2 1 591 0 591 1 2 1 592 0 592 1 2 1 593 0 593 1 2 1 594 0 594 1 2 1 595 0 595 1 2 1 596 0 596 1 2 1 597 0 597 1 2 1 598 0 598 1 2 1 599 0 599 1 2 1 600 0 600 1 2 1 601 0 601 1 2 1 602 0 602 1 2 1 603 0 603 1 2 1 604 0 604 1 2 1 605 0 605 1 2 1 606 0 606 1 2 1 607 0 607 1 2 1 608 0 608 1 2 1 609 0 609 1 2 1 610 0 610 1 2 1 611 0 611 1 2 1 612 0 612 1 2 1 613 0 613 1 2 1 614 0 614 1 2 1 615 0 615 1 2 1 616 0 616 1 2 1 617 0 617 1 2 1 618 0 618 1 2 1 619 0 619 1 2 1 620 0 620 1 2 1 621 0 621 1 2 1 622 0 622 1 2 1 623 0 623 1 2 1 624 0 624 1 2 1 625 0 625 1 2 1 626 0 626 1 2 1 627 0 627 1 2 1 628 0 628 1 2 1 629 0 629 1 2 1 630 0 630 1 2 1 631 0 631 1 2 1 632 0 632 1 2 1 633 0 633 1 2 1 634 0 634 1 2 1 635 0 635 1 2 1 636 0 636 1 2 1 637 0 637 1 2 1 638 0 638 1 2 1 639 0 639 1 2 1 640 0 640 1 2 1 641 0 641 1 2 1 642 0 642 1 2 1 643 0 643 1 2 1 644 0 644 1 2 1 645 0 645 1 2 1 646 0 646 1 2 1 647 0 647 1 2 1 648 0 648 1 2 1 649 0 649 1 2 1 650 0 650 1 2 1 651 0 651 1 2 1 652 0 652 1 2 1 653 0 653 1 2 1 654 0 654 1 2 1 655 0 655 1 2 1 656 0 656 1 2 1 657 0 657 1 2 1 658 0 658 1 2 1 659 0 659 1 2 1 660 0 660 1 2 1 661 0 661 1 2 1 662 0 662 1 2 1 663 0 663 1 2 1 664 0 664 1 2 1 665 0 665 1 2 1 666 0 666 1 2 1 667 0 667 1 2 1 668 0 668 1 2 1 669 0 669 1 2 1 670 0 670 1 2 1 671 0 671 1 2 1 672 0 672 1 2 1 673 0 673 1 2 1 674 0 674 1 2 1 675 0 675 1 2 1 676 0 676 1 2 1 677 0 677 1 2 1 678 0 678 1 2 1 679 0 679 1 2 1 680 0 680 1 2 1 681 0 681 1 2 1 682 0 682 1 2 1 683 0 683 1 2 1 684 0 684 1 2 1 685 0 685 1 2 1 686 0 686 1 2 1 687 0 687 1 2 1 688 0 688 1 2 1 689 0 689 1 2 1 690 0 690 1 2 1 691 0 691 1 2 1 692 0 692 1 2 1 693 0 693 1 2 1 694 0 694 1 2 1 695 0 695 1 2 1 696 0 696 1 2 1 697 0 697 1 2 1 698 0 698 1 2 1 699 0 699 1 2 1 700 0 700 1 2 1 701 0 701 1 2 1 702 0 702 1 2 1 703 0 703 1 2 1 704 0 704 1 2 1 705 0 705 1 2 1 706 0 706 1 2 1 707 0 707 1 2 1 708 0 708 1 2 1 709 0 709 1 2 1 710 0 710 1 2 1 711 0 711 1 2 1 712 0 712 1 2 1 713 0 713 1 2 1 714 0 714 1 2 1 715 0 715 1 2 1 716 0 716 1 2 1 717 0 717 1 2 1 718 0 718 1 2 1 719 0 719 1 2 1 720 0 720 1 2 1 721 0 721 1 2 1 722 0 722 1 2 1 723 0 723 1 2 1 724 0 724 1 2 1 725 0 725 1 2 1 726 0 726 1 2 1 727 0 727 1 2 1 728 0 728 1 2 1 729 0 729 1 2 1 730 0 730 1 2 1 731 0 731 1 2 1 732 0 732 1 2 1 733 0 733 1 2 1 734 0 734 1 2 1 735 0 735 1 2 1 736 0 736 1 2 1 737 0 737 1 2 1 738 0 738 1 2 1 739 0 739 1 2 1 740 0 740 1 2 1 741 0 741 1 2 1 742 0 742 1 2 1 743 0 743 1 2 1 744 0 744 1 2 1 745 0 745 1 2 1 746 0 746 1 2 1 747 0 747 1 2 1 748 0 748 1 2 1 749 0 749 1 2 1 750 0 750 1 2 1 751 0 751 1 2 1 752 0 752 1 2 1 753 0 753 1 2 1 754 0 754 1 2 1 755 0 755 1 2 1 756 0 756 1 2 1 757 0 757 1 2 1 758 0 758 1 2 1 759 0 759 1 2 1 760 0 760 1 2 1 761 0 761 1 2 1 762 0 762 1 2 1 763 0 763 1 2 1 764 0 764 1 2 1 765 0 765 1 2 1 766 0 766 1 2 1 767 0 767 1 2 1 768 0 768 1 2 1 769 0 769 1 2 1 770 0 770 1 2 1 771 0 771 1 2 1 772 0 772 1 2 1 773 0 773 1 2 1 774 0 774 1 2 1 775 0 775 1 2 1 776 0 776 1 2 1 777 0 777 1 2 1 778 0 778 1 2 1 779 0 779 1 2 1 780 0 780 1 2 1 781 0 781 1 2 1 782 0 782 1 2 1 783 0 783 1 2 1 784 0 784 1 2 1 785 0 785 1 2 1 786 0 786 1 2 1 787 0 787 1 2 1 788 0 788 1 2 1 789 0 789 1 2 1 790 0 790 1 2 1 791 0 791 1 2 1 792 0 792 1 2 1 793 0 793 1 2 1 794 0 794 1 2 1 795 0 795 1 2 1 796 0 796 1 2 1 797 0 797 1 2 1 798 0 798 1 2 1 799 0 799 1 2 1 800 0 800 1 2 1 801 0 801 1 2 1 802 0 802 1 2 1 803 0 803 1 2 1 804 0 804 1 2 1 805 0 805 1 2 1 806 0 806 1 2 1 807 0 807 1 2 1 808 0 808 1 2 1 809 0 809 1 2 1 810 0 810 1 2 1 811 0 811 1 2 1 812 0 812 1 2 1 813 0 813 1 2 1 814 0 814 1 2 1 815 0 815 1 2 1 816 0 816 1 2 1 817 0 817 1 2 1 818 0 818 1 2 1 819 0 819 1 2 1 820 0 820 1 2 1 821 0 821 1 2 1 822 0 822 1 2 1 823 0 823 1 2 1 824 0 824 1 2 1 825 0 825 1 2 1 826 0 826 1 2 1 827 0 827 1 2 1 828 0 828 1 2 1 829 0 829 1 2 1 830 0 830 1 2 1 831 0 831 1 2 1 832 0 832 1 2 1 833 0 833 1 2 1 834 0 834 1 2 1 835 0 835 1 2 1 836 0 836 1 2 1 837 0 837 1 2 1 838 0 838 1 2 1 839 0 839 1 2 1 840 0 840 1 2 1 841 0 841 1 2 1 842 0 842 1 2 1 843 0 843 1 2 1 844 0 844 1 2 1 845 0 845 1 2 1 846 0 846 1 2 1 847 0 847 1 2 1 848 0 848 1 2 1 849 0 849 1 2 1 850 0 850 1 2 1 851 0 851 1 2 1 852 0 852 1 2 1 853 0 853 1 2 1 854 0 854 1 2 1 855 0 855 1 2 1 856 0 856 1 2 1 857 0 857 1 2 1 858 0 858 1 2 1 859 0 859 1 2 1 860 0 860 1 2 1 861 0 861 1 2 1 862 0 862 1 2 1 863 0 863 1 2 1 864 0 864 1 2 1 865 0 865 1 2 1 866 0 866 1 2 1 867 0 867 1 2 1 868 0 868 1 2 1 869 0 869 1 2 1 870 0 870 1 2 1 871 0 871 1 2 1 872 0 872 1 2 1 873 0 873 1 2 1 874 0 874 1 2 1 875 0 875 1 2 1 876 0 876 1 2 1 877 0 877 1 2 1 878 0 878 1 2 1 879 0 879 1 2 1 880 0 880 1 2 1 881 0 881 1 2 1 882 0 882 1 2 1 883 0 883 1 2 1 884 0 884 1 2 1 885 0 885 1 2 1 886 0 886 1 2 1 887 0 887 1 2 1 888 0 888 1 2 1 889 0 889 1 2 1 890 0 890 1 2 1 891 0 891 1 2 1 892 0 892 1 2 1 893 0 893 1 2 1 894 0 894 1 2 1 895 0 895 1 2 1 896 0 896 1 2 1 897 0 897 1 2 1 898 0 898 1 2 1 899 0 899 1 2 1 900 0 900 1 2 1 901 0 901 1 2 1 902 0 902 1 2 1 903 0 903 1 2 1 904 0 904 1 2 1 905 0 905 1 2 1 906 0 906 1 2 1 907 0 907 1 2 1 908 0 908 1 2 1 909 0 909 1 2 1 910 0 910 1 2 1 911 0 911 1 2 1 912 0 912 1 2 1 913 0 913 1 2 1 914 0 914 1 2 1 915 0 915 1 2 1 916 0 916 1 2 1 917 0 917 1 2 1 918 0 918 1 2 1 919 0 919 1 2 1 920 0 920 1 2 1 921 0 921 1 2 1 922 0 922 1 2 1 923 0 923 1 2 1 924 0 924 1 2 1 925 0 925 1 2 1 926 0 926 1 2 1 927 0 927 1 2 1 928 0 928 1 2 1 929 0 929 1 2 1 930 0 930 1 2 1 931 0 931 1 2 1 932 0 932 1 2 1 933 0 933 1 2 1 934 0 934 1 2 1 935 0 935 1 2 1 936 0 936 1 2 1 937 0 937 1 2 1 938 0 938 1 2 1 939 0 939 1 2 1 940 0 940 1 2 1 941 0 941 1 2 1 942 0 942 1 2 1 943 0 943 1 2 1 944 0 944 1 2 1 945 0 945 1 2 1 946 0 946 1 2 1 947 0 947 1 2 1 948 0 948 1 2 1 949 0 949 1 2 1 950 0 950 1 2 1 951 0 951 1 2 1 952 0 952 1 2 1 953 0 953 1 2 1 954 0 954 1 2 1 955 0 955 1 2 1 956 0 956 1 2 1 957 0 957 1 2 1 958 0 958 1 2 1 959 0 959 1 2 1 960 0 960 1 2 1 961 0 961 1 2 1 962 0 962 1 2 1 963 0 963 1 2 1 964 0 964 1 2 1 965 0 965 1 2 1 966 0 966 1 2 1 967 0 967 1 2 1 968 0 968 1 2 1 969 0 969 1 2 1 970 0 970 1 2 1 971 0 971 1 2 1 972 0 972 1 2 1 973 0 973 1 2 1 974 0 974 1 2 1 975 0 975 1 2 1 976 0 976 1 2 1 977 0 977 1 2 1 978 0 978 1 2 1 979 0 979 1 2 1 980 0 980 1 2 1 981 0 981 1 2 1 982 0 982 1 2 1 983 0 983 1 2 1 984 0 984 1 2 1 985 0 985 1 2 1 986 0 986 1 2 1 987 0 987 1 2 1 988 0 988 1 2 1 989 0 989 1 2 1 990 0 990 1 2 1 991 0 991 1 2 1 992 0 992 1 2 1 993 0 993 1 2 1 994 0 994 1 2 1 995 0 995 1 2 1 996 0 996 1 2 1 997 0 997 1 2 1 998 0 998 1 2 1 999 0 999 1 2 1 1000 0 1000 1 2 ================================================ FILE: example/example.fam ================================================ 1 1 0 0 2 -0.4267761781290719 2 2 0 0 2 0.553949147355921 3 3 0 0 2 -0.6501615855731889 4 4 0 0 2 0.6658237998926421 5 5 0 0 2 2.153525389108508 6 6 0 0 2 1.603607081080267 7 7 0 0 2 0.9245092282950891 8 8 0 0 2 0.16695520568640973 9 9 0 0 2 -0.44678076953973184 10 10 0 0 2 0.9130182655669581 11 11 0 0 2 -0.12365315280028831 12 12 0 0 2 0.45120658048742923 13 13 0 0 2 -1.813422352445905 14 14 0 0 2 0.10916042619322039 15 15 0 0 2 1.2606692333542373 16 16 0 0 2 0.5532311359350739 17 17 0 0 2 0.20945215196889685 18 18 0 0 2 -0.5132181734188253 19 19 0 0 2 0.6119067760087953 20 20 0 0 2 1.5394566797469251 21 21 0 0 2 -0.3865037693784083 22 22 0 0 2 -2.5143419880300866 23 23 0 0 2 0.405703045213449 24 24 0 0 2 0.5185603274229008 25 25 0 0 2 1.0611484493881813 26 26 0 0 2 0.19594051011058977 27 27 0 0 2 -0.24979581720203475 28 28 0 0 2 -0.2676477096598135 29 29 0 0 2 0.7177935231258309 30 30 0 0 2 1.1861246517682622 31 31 0 0 2 0.08629622130288517 32 32 0 0 2 -0.35304293360949707 33 33 0 0 2 0.2354296885149071 34 34 0 0 2 1.530452595962293 35 35 0 0 2 0.4579547646635299 36 36 0 0 2 0.4118304659618171 37 37 0 0 2 1.0173491056828072 38 38 0 0 2 -1.3848053256406825 39 39 0 0 2 1.7510265942816932 40 40 0 0 2 0.274954268508773 41 41 0 0 2 -1.9897038536605167 42 42 0 0 2 -0.2744230179428616 43 43 0 0 2 1.426414899954135 44 44 0 0 2 1.6794358446939521 45 45 0 0 2 -1.9762223272212731 46 46 0 0 2 1.31328879515592 47 47 0 0 2 -1.2379452021381565 48 48 0 0 2 -1.2230942245689198 49 49 0 0 2 -0.2086823379220931 50 50 0 0 2 0.046591344965807927 51 51 0 0 2 0.6454664759221705 52 52 0 0 2 -0.3366711458816414 53 53 0 0 2 -1.4251415011354847 54 54 0 0 2 -1.7404106776289252 55 55 0 0 2 -0.9899916360986122 56 56 0 0 2 -0.6813055796709735 57 57 0 0 2 1.4523360524496092 58 58 0 0 2 -0.14395595141327489 59 59 0 0 2 -0.4378362565094535 60 60 0 0 2 -0.1519268773269188 61 61 0 0 2 -1.0918707470545093 62 62 0 0 2 0.11886585929161704 63 63 0 0 2 -0.7446821129490644 64 64 0 0 2 -0.3515988379695028 65 65 0 0 2 -0.2505242457789806 66 66 0 0 2 -1.1445325100301038 67 67 0 0 2 0.4021008709651108 68 68 0 0 2 -0.26967294800034874 69 69 0 0 2 -1.071043452154829 70 70 0 0 2 0.5466104498110623 71 71 0 0 2 0.9059888912622454 72 72 0 0 2 -0.9302463996121689 73 73 0 0 2 -0.1649348560132909 74 74 0 0 2 -0.2592977286319428 75 75 0 0 2 -2.114476477667718 76 76 0 0 2 -0.6076341029698831 77 77 0 0 2 0.7748006221315341 78 78 0 0 2 -2.0962224712289843 79 79 0 0 2 -1.9116579659512944 80 80 0 0 2 1.0353397078763547 81 81 0 0 2 0.7294502561042351 82 82 0 0 2 -0.09793421592240978 83 83 0 0 2 0.24566617144478756 84 84 0 0 2 0.9386731103091898 85 85 0 0 2 1.7337564931524567 86 86 0 0 2 3.5965463607888486 87 87 0 0 2 0.10417950242086334 88 88 0 0 2 0.8181457381771525 89 89 0 0 2 -0.4717474685706561 90 90 0 0 2 1.3263850865010316 91 91 0 0 2 -0.616465031940274 92 92 0 0 2 -1.1963740018230864 93 93 0 0 2 -2.523429651265045 94 94 0 0 2 -1.6775958547520566 95 95 0 0 2 -1.325183339632047 96 96 0 0 2 0.5882935940652537 97 97 0 0 2 1.2377386081497168 98 98 0 0 2 -0.2927710750283572 99 99 0 0 2 2.2130683684766117 100 100 0 0 2 1.3907852235803377 101 101 0 0 2 0.3489648675330413 102 102 0 0 2 -0.17965231137324936 103 103 0 0 2 -1.714950186712027 104 104 0 0 2 -0.3606425914729865 105 105 0 0 2 0.2558071082994665 106 106 0 0 2 0.7848503716979157 107 107 0 0 2 2.505180527543909 108 108 0 0 2 -1.8168385585899676 109 109 0 0 2 -0.01565688433622611 110 110 0 0 2 0.7040291497308593 111 111 0 0 2 -0.011386617718583729 112 112 0 0 2 -0.6404979013481404 113 113 0 0 2 2.0784381335821682 114 114 0 0 2 -0.2254928329575596 115 115 0 0 2 0.0021879911560499826 116 116 0 0 2 0.4530758437690287 117 117 0 0 2 0.7111556836519528 118 118 0 0 2 -7.926457716849677e-5 119 119 0 0 2 1.2716437121248285 120 120 0 0 2 0.13091641539525625 121 121 0 0 2 0.9601642531802883 122 122 0 0 2 -0.6946269492816117 123 123 0 0 2 1.2083545960448898 124 124 0 0 2 -0.5558287669378148 125 125 0 0 2 0.40869932288799415 126 126 0 0 2 0.8632834147663099 127 127 0 0 2 0.8642022294643745 128 128 0 0 2 -0.45151257769571096 129 129 0 0 2 -0.1914051114382599 130 130 0 0 2 -0.037649137239090524 131 131 0 0 2 1.069953907594907 132 132 0 0 2 0.7332632139169448 133 133 0 0 2 -1.3859563214470878 134 134 0 0 2 -0.16882598316337785 135 135 0 0 2 1.2341578254519214 136 136 0 0 2 -0.13018118909812346 137 137 0 0 2 -0.849622061183973 138 138 0 0 2 1.65558791310931 139 139 0 0 2 -0.8557488969973114 140 140 0 0 2 -0.591996102804245 141 141 0 0 2 1.4766090213622798 142 142 0 0 2 -1.7606788880705646 143 143 0 0 2 0.3331349454598871 144 144 0 0 2 -1.316796818445614 145 145 0 0 2 2.2658417254598926 146 146 0 0 2 -0.5855466346375702 147 147 0 0 2 1.004242318973581 148 148 0 0 2 0.5950634513012234 149 149 0 0 2 -2.3589818092376342 150 150 0 0 2 1.020059747279963 151 151 0 0 2 -1.2578575928423548 152 152 0 0 2 -0.09700531448496873 153 153 0 0 2 0.33638529718875043 154 154 0 0 2 1.7972793724047749 155 155 0 0 2 0.27013487552553606 156 156 0 0 2 -0.3808633841949227 157 157 0 0 2 0.04018926790384476 158 158 0 0 2 -0.3965127185254764 159 159 0 0 2 1.4936455086379186 160 160 0 0 2 -1.2993293254003835 161 161 0 0 2 0.2519277543876505 162 162 0 0 2 0.691774608729148 163 163 0 0 2 0.7407513064839535 164 164 0 0 2 -0.31056687191510746 165 165 0 0 2 -0.5552597332076762 166 166 0 0 2 -1.0057835319597124 167 167 0 0 2 0.05450686156271301 168 168 0 0 2 -0.6349282429298715 169 169 0 0 2 -0.6695465895569117 170 170 0 0 2 -0.23226063332510133 171 171 0 0 2 0.7035825230515401 172 172 0 0 2 -0.31327835211735766 173 173 0 0 2 -0.24917314601702809 174 174 0 0 2 -0.6592080848536208 175 175 0 0 2 -0.9477879953319399 176 176 0 0 2 0.48009125370245204 177 177 0 0 2 0.4706100983663504 178 178 0 0 2 -0.06505632309350708 179 179 0 0 2 -1.4959269095746512 180 180 0 0 2 0.5405485678497597 181 181 0 0 2 1.1232696382170495 182 182 0 0 2 0.0074418075185122565 183 183 0 0 2 0.6639986494873168 184 184 0 0 2 -0.5678566487451827 185 185 0 0 2 0.2299383937915558 186 186 0 0 2 -0.17076218909155186 187 187 0 0 2 0.3420901284971981 188 188 0 0 2 -0.10950363726652125 189 189 0 0 2 -0.06808902942736765 190 190 0 0 2 -2.3144897119335965 191 191 0 0 2 -1.0777725703353438 192 192 0 0 2 -0.3394034459756072 193 193 0 0 2 -1.5321020124626434 194 194 0 0 2 1.277838035763474 195 195 0 0 2 -0.6186969481783715 196 196 0 0 2 0.24483826998859312 197 197 0 0 2 -0.08972472068807524 198 198 0 0 2 0.28563820059484707 199 199 0 0 2 0.02665228610242174 200 200 0 0 2 -0.8558456209545621 201 201 0 0 2 0.10326780109110945 202 202 0 0 2 -0.4683803455991253 203 203 0 0 2 -0.039629458692737506 204 204 0 0 2 0.5010288555718972 205 205 0 0 2 -1.614633788145904 206 206 0 0 2 -0.8221081713776588 207 207 0 0 2 -0.4154327362321607 208 208 0 0 2 0.19255584244438567 209 209 0 0 2 -0.013616312773019643 210 210 0 0 2 -0.475529391106999 211 211 0 0 2 0.10232966150402548 212 212 0 0 2 0.7488940724700807 213 213 0 0 2 0.44197886128432695 214 214 0 0 2 1.018806470717939 215 215 0 0 2 1.187231623861802 216 216 0 0 2 0.8022976145656721 217 217 0 0 2 -0.4774086494408861 218 218 0 0 2 -0.14197769264202192 219 219 0 0 2 -0.1747777783307673 220 220 0 0 2 1.0313282851738685 221 221 0 0 2 0.09414395331571555 222 222 0 0 2 0.07864110999174483 223 223 0 0 2 -0.5611965282485419 224 224 0 0 2 -0.6176835872308691 225 225 0 0 2 -0.624780748917754 226 226 0 0 2 0.7262504583960367 227 227 0 0 2 0.6736681336462624 228 228 0 0 2 1.2074649724277058 229 229 0 0 2 -0.7000910464946777 230 230 0 0 2 1.0132498153713987 231 231 0 0 2 0.1086125064282297 232 232 0 0 2 1.5378432998509857 233 233 0 0 2 -0.38864483884544576 234 234 0 0 2 0.5853901243650999 235 235 0 0 2 0.6361493273442497 236 236 0 0 2 -2.3727188226249276 237 237 0 0 2 -0.1546518851418047 238 238 0 0 2 -0.4535321516545124 239 239 0 0 2 0.20059745542046717 240 240 0 0 2 1.6700071185481635 241 241 0 0 2 1.0303745125812633 242 242 0 0 2 -0.2080769141106961 243 243 0 0 2 0.1640491851783853 244 244 0 0 2 -0.28813258919928886 245 245 0 0 2 0.5230500717020431 246 246 0 0 2 0.3072979372247395 247 247 0 0 2 0.11651870056658613 248 248 0 0 2 -0.0020664157587947755 249 249 0 0 2 0.6554963064376974 250 250 0 0 2 -1.2541501943392634 251 251 0 0 2 0.0072657109833799294 252 252 0 0 2 2.6072042439689764 253 253 0 0 2 0.7873316028203755 254 254 0 0 2 -0.5739394940501295 255 255 0 0 2 0.4301393873631534 256 256 0 0 2 0.4980033880636772 257 257 0 0 2 -0.472708427483925 258 258 0 0 2 -2.115773568613388 259 259 0 0 2 -0.3027911974132581 260 260 0 0 2 0.1357209008468077 261 261 0 0 2 0.7462827401513036 262 262 0 0 2 1.0510433172779923 263 263 0 0 2 -0.9143361188838738 264 264 0 0 2 -1.980776740834876 265 265 0 0 2 0.5590372219564149 266 266 0 0 2 -1.4215222131613703 267 267 0 0 2 0.9366889840084335 268 268 0 0 2 0.38076689746763476 269 269 0 0 2 0.9453281558278972 270 270 0 0 2 0.057035845832356935 271 271 0 0 2 1.4745050564310078 272 272 0 0 2 -0.5174737513107168 273 273 0 0 2 -1.5571441883774875 274 274 0 0 2 -1.0887963283029611 275 275 0 0 2 1.2310204712452886 276 276 0 0 2 -0.4769402620727404 277 277 0 0 2 -0.22419481188150195 278 278 0 0 2 -0.5375714580159776 279 279 0 0 2 0.019698038241142538 280 280 0 0 2 1.1825833509904307 281 281 0 0 2 -0.7811541586520457 282 282 0 0 2 -0.4601117935870594 283 283 0 0 2 0.7033250873409186 284 284 0 0 2 -0.8409243958041983 285 285 0 0 2 0.5573349116266615 286 286 0 0 2 -1.6278769464058696 287 287 0 0 2 1.6583911801881541 288 288 0 0 2 -1.212032621830397 289 289 0 0 2 -0.9721467722081951 290 290 0 0 2 -0.5965740298455487 291 291 0 0 2 -1.2351363670664182 292 292 0 0 2 1.641895301641597 293 293 0 0 2 -0.42141703006240455 294 294 0 0 2 0.38753100560495457 295 295 0 0 2 -1.070382200424481 296 296 0 0 2 -0.517780452691308 297 297 0 0 2 1.1565871160947803 298 298 0 0 2 -0.6679020556063455 299 299 0 0 2 -0.970542580114166 300 300 0 0 2 -0.8655455001063305 301 301 0 0 2 -1.0789380083099478 302 302 0 0 2 -1.2440796197575608 303 303 0 0 2 -1.0446790730803917 304 304 0 0 2 -0.5695802535356469 305 305 0 0 2 -0.8473514861984687 306 306 0 0 2 -1.190100919435714 307 307 0 0 2 1.022380976723825 308 308 0 0 2 -1.9790492535631858 309 309 0 0 2 -1.5253493737129327 310 310 0 0 2 1.0894028037803278 311 311 0 0 2 0.6962558464296542 312 312 0 0 2 0.9874048999158505 313 313 0 0 2 0.11245625794433396 314 314 0 0 2 -0.050027987070537086 315 315 0 0 2 -0.8717433837106624 316 316 0 0 2 0.8146794446207906 317 317 0 0 2 -0.5526641897761696 318 318 0 0 2 1.2573937760035447 319 319 0 0 2 -1.2648304446149456 320 320 0 0 2 1.6530274769204985 321 321 0 0 2 1.30110161745003 322 322 0 0 2 -0.02018948002691863 323 323 0 0 2 -1.8836740231429716 324 324 0 0 2 1.4205846188601483 325 325 0 0 2 -0.689172153743396 326 326 0 0 2 -0.3044880253487302 327 327 0 0 2 -0.08520417701732463 328 328 0 0 2 2.851634453916995 329 329 0 0 2 -1.156810978360592 330 330 0 0 2 0.2825803847207173 331 331 0 0 2 -1.9500708808705018 332 332 0 0 2 -1.1752612835403988 333 333 0 0 2 -1.3324335054916632 334 334 0 0 2 0.706410116238176 335 335 0 0 2 -0.4389661673885548 336 336 0 0 2 -0.47198568412366393 337 337 0 0 2 -0.196005627932633 338 338 0 0 2 -0.3926918515697784 339 339 0 0 2 -1.2586337442612614 340 340 0 0 2 -0.28572183266312384 341 341 0 0 2 -0.821333467643559 342 342 0 0 2 1.0406689409301526 343 343 0 0 2 -0.38669408702632374 344 344 0 0 2 -1.7090986597057412 345 345 0 0 2 0.567446046270448 346 346 0 0 2 0.01714990950414205 347 347 0 0 2 0.0977745741751222 348 348 0 0 2 0.822230557498965 349 349 0 0 2 0.3963812215631262 350 350 0 0 2 -1.4985341158085754 351 351 0 0 2 -0.029960047096039638 352 352 0 0 2 -0.6528662364260229 353 353 0 0 2 -0.12170910991193998 354 354 0 0 2 1.0300254802129547 355 355 0 0 2 -0.16690139482289537 356 356 0 0 2 0.8377731253742943 357 357 0 0 2 -0.3887229530927819 358 358 0 0 2 0.14451356330621065 359 359 0 0 2 1.6073233297076983 360 360 0 0 2 0.07950441212552996 361 361 0 0 2 2.1497157962418174 362 362 0 0 2 -0.30427052777531594 363 363 0 0 2 -0.3025923417388714 364 364 0 0 2 -0.4397850120995375 365 365 0 0 2 0.45039620392874236 366 366 0 0 2 -0.8475714740581328 367 367 0 0 2 0.49438582682424076 368 368 0 0 2 1.7877305550184646 369 369 0 0 2 1.4928728753892113 370 370 0 0 2 1.0028215376206 371 371 0 0 2 -1.579481582437942 372 372 0 0 2 -1.4112071973049491 373 373 0 0 2 -0.3287910850620258 374 374 0 0 2 0.6335258906599922 375 375 0 0 2 1.5884402065569267 376 376 0 0 2 0.239439976093505 377 377 0 0 2 0.3730542303129533 378 378 0 0 2 -0.23125572369556183 379 379 0 0 2 0.04114817676435756 380 380 0 0 2 1.3148209110260505 381 381 0 0 2 0.4153394063226016 382 382 0 0 2 -2.119037113120731 383 383 0 0 2 -0.7357404438785312 384 384 0 0 2 -0.5458519940698457 385 385 0 0 2 -1.2600086040654477 386 386 0 0 2 0.5429663518299074 387 387 0 0 2 -0.24886613651789177 388 388 0 0 2 1.393586775779869 389 389 0 0 2 0.7655351504255072 390 390 0 0 2 1.574341948844662 391 391 0 0 2 0.28337819436221234 392 392 0 0 2 -0.28215538210870866 393 393 0 0 2 0.32677930042765563 394 394 0 0 2 -0.8933433333160953 395 395 0 0 2 -0.30611223649551184 396 396 0 0 2 -1.6327825926249717 397 397 0 0 2 0.983996289771191 398 398 0 0 2 -2.1094276028051713 399 399 0 0 2 -0.03004231237784647 400 400 0 0 2 0.2677517204111873 401 401 0 0 2 0.024441125372044015 402 402 0 0 2 -0.5518207938279379 403 403 0 0 2 -0.012559704828846413 404 404 0 0 2 0.7819900863897892 405 405 0 0 2 0.1331898731839282 406 406 0 0 2 0.48489696095614787 407 407 0 0 2 0.6642443953751778 408 408 0 0 2 -0.8030871260696271 409 409 0 0 2 -0.1895839551659786 410 410 0 0 2 -0.8034926266352286 411 411 0 0 2 0.09187570772040049 412 412 0 0 2 0.029248814008252747 413 413 0 0 2 -0.01533630905590288 414 414 0 0 2 1.1280827301911354 415 415 0 0 2 -0.2065160921398899 416 416 0 0 2 -0.05126145885052354 417 417 0 0 2 -1.3434267805209248 418 418 0 0 2 -0.18518422658884665 419 419 0 0 2 -0.24844114482463325 420 420 0 0 2 -0.06967600698783584 421 421 0 0 2 0.37664675241912393 422 422 0 0 2 -0.2569614554903415 423 423 0 0 2 0.7233028036905063 424 424 0 0 2 1.1103498482848735 425 425 0 0 2 -0.11945647973589903 426 426 0 0 2 -0.6396046050764921 427 427 0 0 2 0.5643452560242491 428 428 0 0 2 -0.3440947789770541 429 429 0 0 2 -2.22653169151592 430 430 0 0 2 -0.956032968271431 431 431 0 0 2 -0.8191888326171307 432 432 0 0 2 -2.4494492803640022 433 433 0 0 2 -0.0670051947640402 434 434 0 0 2 -1.0212450480574558 435 435 0 0 2 1.5642134356006847 436 436 0 0 2 -0.7686850358271917 437 437 0 0 2 0.9013174516851364 438 438 0 0 2 0.32615832192874417 439 439 0 0 2 -0.1396620902625725 440 440 0 0 2 0.7175824082953346 441 441 0 0 2 -1.298832108780333 442 442 0 0 2 -0.6380248204283618 443 443 0 0 2 1.3777981524996168 444 444 0 0 2 1.650381986618911 445 445 0 0 2 0.5867431709972836 446 446 0 0 2 -0.005896067871319781 447 447 0 0 2 0.13319016302360676 448 448 0 0 2 -1.2696437250217552 449 449 0 0 2 -0.12518065096985312 450 450 0 0 2 -1.244542673659207 451 451 0 0 2 -0.06610093209244285 452 452 0 0 2 2.5740374683027536 453 453 0 0 2 0.9289638283088296 454 454 0 0 2 0.5106401356154838 455 455 0 0 2 -1.3219451447015316 456 456 0 0 2 1.3056699098740336 457 457 0 0 2 -0.7429788972407904 458 458 0 0 2 -0.5935982739213578 459 459 0 0 2 -1.2444771294790702 460 460 0 0 2 -0.11027752291961805 461 461 0 0 2 0.15968337228108687 462 462 0 0 2 0.10015721622156738 463 463 0 0 2 -1.6712997326777923 464 464 0 0 2 1.1224222088370677 465 465 0 0 2 -0.8848696262558821 466 466 0 0 2 -0.43388376934423967 467 467 0 0 2 0.2330906457766794 468 468 0 0 2 -0.06850210820133934 469 469 0 0 2 -0.43079920208533806 470 470 0 0 2 0.6801247297121218 471 471 0 0 2 0.7062942755405903 472 472 0 0 2 -1.0125163790266498 473 473 0 0 2 1.1402191818385525 474 474 0 0 2 -0.09512756382895157 475 475 0 0 2 1.2043113720050476 476 476 0 0 2 -1.3101439365860013 477 477 0 0 2 -1.010236868117858 478 478 0 0 2 0.8681701631563481 479 479 0 0 2 -1.1399558386575048 480 480 0 0 2 0.2205328932586634 481 481 0 0 2 -0.5859626268400073 482 482 0 0 2 0.9365883769687702 483 483 0 0 2 -1.589591178874074 484 484 0 0 2 0.1145164389832793 485 485 0 0 2 0.275658677194189 486 486 0 0 2 1.8238148121727578 487 487 0 0 2 0.9195632859199347 488 488 0 0 2 1.1992281082636649 489 489 0 0 2 -0.28717216124743894 490 490 0 0 2 -0.1255644094578015 491 491 0 0 2 0.7660599548056037 492 492 0 0 2 0.0485016949386254 493 493 0 0 2 0.9191104275425048 494 494 0 0 2 -0.07849111590769194 495 495 0 0 2 -1.602274500274993 496 496 0 0 2 -2.016184028763443 497 497 0 0 2 1.3436149731702158 498 498 0 0 2 -1.8171186074532928 499 499 0 0 2 -0.46317733040012826 500 500 0 0 2 -0.9433895891176977 ================================================ FILE: example/example.psam ================================================ #FID IID SEX PHENO1 1 1 NA -0.426776 2 2 NA 0.553949 3 3 NA -0.650162 4 4 NA 0.665824 5 5 NA 2.15353 6 6 NA 1.60361 7 7 NA 0.924509 8 8 NA 0.166955 9 9 NA -0.446781 10 10 NA 0.913018 11 11 NA -0.123653 12 12 NA 0.451207 13 13 NA -1.81342 14 14 NA 0.10916 15 15 NA 1.26067 16 16 NA 0.553231 17 17 NA 0.209452 18 18 NA -0.513218 19 19 NA 0.611907 20 20 NA 1.53946 21 21 NA -0.386504 22 22 NA -2.51434 23 23 NA 0.405703 24 24 NA 0.51856 25 25 NA 1.06115 26 26 NA 0.195941 27 27 NA -0.249796 28 28 NA -0.267648 29 29 NA 0.717794 30 30 NA 1.18612 31 31 NA 0.0862962 32 32 NA -0.353043 33 33 NA 0.23543 34 34 NA 1.53045 35 35 NA 0.457955 36 36 NA 0.41183 37 37 NA 1.01735 38 38 NA -1.38481 39 39 NA 1.75103 40 40 NA 0.274954 41 41 NA -1.9897 42 42 NA -0.274423 43 43 NA 1.42641 44 44 NA 1.67944 45 45 NA -1.97622 46 46 NA 1.31329 47 47 NA -1.23795 48 48 NA -1.22309 49 49 NA -0.208682 50 50 NA 0.0465913 51 51 NA 0.645466 52 52 NA -0.336671 53 53 NA -1.42514 54 54 NA -1.74041 55 55 NA -0.989992 56 56 NA -0.681306 57 57 NA 1.45234 58 58 NA -0.143956 59 59 NA -0.437836 60 60 NA -0.151927 61 61 NA -1.09187 62 62 NA 0.118866 63 63 NA -0.744682 64 64 NA -0.351599 65 65 NA -0.250524 66 66 NA -1.14453 67 67 NA 0.402101 68 68 NA -0.269673 69 69 NA -1.07104 70 70 NA 0.54661 71 71 NA 0.905989 72 72 NA -0.930246 73 73 NA -0.164935 74 74 NA -0.259298 75 75 NA -2.11448 76 76 NA -0.607634 77 77 NA 0.774801 78 78 NA -2.09622 79 79 NA -1.91166 80 80 NA 1.03534 81 81 NA 0.72945 82 82 NA -0.0979342 83 83 NA 0.245666 84 84 NA 0.938673 85 85 NA 1.73376 86 86 NA 3.59655 87 87 NA 0.10418 88 88 NA 0.818146 89 89 NA -0.471747 90 90 NA 1.32639 91 91 NA -0.616465 92 92 NA -1.19637 93 93 NA -2.52343 94 94 NA -1.6776 95 95 NA -1.32518 96 96 NA 0.588294 97 97 NA 1.23774 98 98 NA -0.292771 99 99 NA 2.21307 100 100 NA 1.39079 101 101 NA 0.348965 102 102 NA -0.179652 103 103 NA -1.71495 104 104 NA -0.360643 105 105 NA 0.255807 106 106 NA 0.78485 107 107 NA 2.50518 108 108 NA -1.81684 109 109 NA -0.0156569 110 110 NA 0.704029 111 111 NA -0.0113866 112 112 NA -0.640498 113 113 NA 2.07844 114 114 NA -0.225493 115 115 NA 0.00218799 116 116 NA 0.453076 117 117 NA 0.711156 118 118 NA -7.92646e-05 119 119 NA 1.27164 120 120 NA 0.130916 121 121 NA 0.960164 122 122 NA -0.694627 123 123 NA 1.20835 124 124 NA -0.555829 125 125 NA 0.408699 126 126 NA 0.863283 127 127 NA 0.864202 128 128 NA -0.451513 129 129 NA -0.191405 130 130 NA -0.0376491 131 131 NA 1.06995 132 132 NA 0.733263 133 133 NA -1.38596 134 134 NA -0.168826 135 135 NA 1.23416 136 136 NA -0.130181 137 137 NA -0.849622 138 138 NA 1.65559 139 139 NA -0.855749 140 140 NA -0.591996 141 141 NA 1.47661 142 142 NA -1.76068 143 143 NA 0.333135 144 144 NA -1.3168 145 145 NA 2.26584 146 146 NA -0.585547 147 147 NA 1.00424 148 148 NA 0.595063 149 149 NA -2.35898 150 150 NA 1.02006 151 151 NA -1.25786 152 152 NA -0.0970053 153 153 NA 0.336385 154 154 NA 1.79728 155 155 NA 0.270135 156 156 NA -0.380863 157 157 NA 0.0401893 158 158 NA -0.396513 159 159 NA 1.49365 160 160 NA -1.29933 161 161 NA 0.251928 162 162 NA 0.691775 163 163 NA 0.740751 164 164 NA -0.310567 165 165 NA -0.55526 166 166 NA -1.00578 167 167 NA 0.0545069 168 168 NA -0.634928 169 169 NA -0.669547 170 170 NA -0.232261 171 171 NA 0.703583 172 172 NA -0.313278 173 173 NA -0.249173 174 174 NA -0.659208 175 175 NA -0.947788 176 176 NA 0.480091 177 177 NA 0.47061 178 178 NA -0.0650563 179 179 NA -1.49593 180 180 NA 0.540549 181 181 NA 1.12327 182 182 NA 0.00744181 183 183 NA 0.663999 184 184 NA -0.567857 185 185 NA 0.229938 186 186 NA -0.170762 187 187 NA 0.34209 188 188 NA -0.109504 189 189 NA -0.068089 190 190 NA -2.31449 191 191 NA -1.07777 192 192 NA -0.339403 193 193 NA -1.5321 194 194 NA 1.27784 195 195 NA -0.618697 196 196 NA 0.244838 197 197 NA -0.0897247 198 198 NA 0.285638 199 199 NA 0.0266523 200 200 NA -0.855846 201 201 NA 0.103268 202 202 NA -0.46838 203 203 NA -0.0396295 204 204 NA 0.501029 205 205 NA -1.61463 206 206 NA -0.822108 207 207 NA -0.415433 208 208 NA 0.192556 209 209 NA -0.0136163 210 210 NA -0.475529 211 211 NA 0.10233 212 212 NA 0.748894 213 213 NA 0.441979 214 214 NA 1.01881 215 215 NA 1.18723 216 216 NA 0.802298 217 217 NA -0.477409 218 218 NA -0.141978 219 219 NA -0.174778 220 220 NA 1.03133 221 221 NA 0.094144 222 222 NA 0.0786411 223 223 NA -0.561197 224 224 NA -0.617684 225 225 NA -0.624781 226 226 NA 0.72625 227 227 NA 0.673668 228 228 NA 1.20746 229 229 NA -0.700091 230 230 NA 1.01325 231 231 NA 0.108613 232 232 NA 1.53784 233 233 NA -0.388645 234 234 NA 0.58539 235 235 NA 0.636149 236 236 NA -2.37272 237 237 NA -0.154652 238 238 NA -0.453532 239 239 NA 0.200597 240 240 NA 1.67001 241 241 NA 1.03037 242 242 NA -0.208077 243 243 NA 0.164049 244 244 NA -0.288133 245 245 NA 0.52305 246 246 NA 0.307298 247 247 NA 0.116519 248 248 NA -0.00206642 249 249 NA 0.655496 250 250 NA -1.25415 251 251 NA 0.00726571 252 252 NA 2.6072 253 253 NA 0.787332 254 254 NA -0.573939 255 255 NA 0.430139 256 256 NA 0.498003 257 257 NA -0.472708 258 258 NA -2.11577 259 259 NA -0.302791 260 260 NA 0.135721 261 261 NA 0.746283 262 262 NA 1.05104 263 263 NA -0.914336 264 264 NA -1.98078 265 265 NA 0.559037 266 266 NA -1.42152 267 267 NA 0.936689 268 268 NA 0.380767 269 269 NA 0.945328 270 270 NA 0.0570358 271 271 NA 1.47451 272 272 NA -0.517474 273 273 NA -1.55714 274 274 NA -1.0888 275 275 NA 1.23102 276 276 NA -0.47694 277 277 NA -0.224195 278 278 NA -0.537571 279 279 NA 0.019698 280 280 NA 1.18258 281 281 NA -0.781154 282 282 NA -0.460112 283 283 NA 0.703325 284 284 NA -0.840924 285 285 NA 0.557335 286 286 NA -1.62788 287 287 NA 1.65839 288 288 NA -1.21203 289 289 NA -0.972147 290 290 NA -0.596574 291 291 NA -1.23514 292 292 NA 1.6419 293 293 NA -0.421417 294 294 NA 0.387531 295 295 NA -1.07038 296 296 NA -0.51778 297 297 NA 1.15659 298 298 NA -0.667902 299 299 NA -0.970543 300 300 NA -0.865546 301 301 NA -1.07894 302 302 NA -1.24408 303 303 NA -1.04468 304 304 NA -0.56958 305 305 NA -0.847351 306 306 NA -1.1901 307 307 NA 1.02238 308 308 NA -1.97905 309 309 NA -1.52535 310 310 NA 1.0894 311 311 NA 0.696256 312 312 NA 0.987405 313 313 NA 0.112456 314 314 NA -0.050028 315 315 NA -0.871743 316 316 NA 0.814679 317 317 NA -0.552664 318 318 NA 1.25739 319 319 NA -1.26483 320 320 NA 1.65303 321 321 NA 1.3011 322 322 NA -0.0201895 323 323 NA -1.88367 324 324 NA 1.42058 325 325 NA -0.689172 326 326 NA -0.304488 327 327 NA -0.0852042 328 328 NA 2.85163 329 329 NA -1.15681 330 330 NA 0.28258 331 331 NA -1.95007 332 332 NA -1.17526 333 333 NA -1.33243 334 334 NA 0.70641 335 335 NA -0.438966 336 336 NA -0.471986 337 337 NA -0.196006 338 338 NA -0.392692 339 339 NA -1.25863 340 340 NA -0.285722 341 341 NA -0.821333 342 342 NA 1.04067 343 343 NA -0.386694 344 344 NA -1.7091 345 345 NA 0.567446 346 346 NA 0.0171499 347 347 NA 0.0977746 348 348 NA 0.822231 349 349 NA 0.396381 350 350 NA -1.49853 351 351 NA -0.02996 352 352 NA -0.652866 353 353 NA -0.121709 354 354 NA 1.03003 355 355 NA -0.166901 356 356 NA 0.837773 357 357 NA -0.388723 358 358 NA 0.144514 359 359 NA 1.60732 360 360 NA 0.0795044 361 361 NA 2.14972 362 362 NA -0.304271 363 363 NA -0.302592 364 364 NA -0.439785 365 365 NA 0.450396 366 366 NA -0.847571 367 367 NA 0.494386 368 368 NA 1.78773 369 369 NA 1.49287 370 370 NA 1.00282 371 371 NA -1.57948 372 372 NA -1.41121 373 373 NA -0.328791 374 374 NA 0.633526 375 375 NA 1.58844 376 376 NA 0.23944 377 377 NA 0.373054 378 378 NA -0.231256 379 379 NA 0.0411482 380 380 NA 1.31482 381 381 NA 0.415339 382 382 NA -2.11904 383 383 NA -0.73574 384 384 NA -0.545852 385 385 NA -1.26001 386 386 NA 0.542966 387 387 NA -0.248866 388 388 NA 1.39359 389 389 NA 0.765535 390 390 NA 1.57434 391 391 NA 0.283378 392 392 NA -0.282155 393 393 NA 0.326779 394 394 NA -0.893343 395 395 NA -0.306112 396 396 NA -1.63278 397 397 NA 0.983996 398 398 NA -2.10943 399 399 NA -0.0300423 400 400 NA 0.267752 401 401 NA 0.0244411 402 402 NA -0.551821 403 403 NA -0.0125597 404 404 NA 0.78199 405 405 NA 0.13319 406 406 NA 0.484897 407 407 NA 0.664244 408 408 NA -0.803087 409 409 NA -0.189584 410 410 NA -0.803493 411 411 NA 0.0918757 412 412 NA 0.0292488 413 413 NA -0.0153363 414 414 NA 1.12808 415 415 NA -0.206516 416 416 NA -0.0512615 417 417 NA -1.34343 418 418 NA -0.185184 419 419 NA -0.248441 420 420 NA -0.069676 421 421 NA 0.376647 422 422 NA -0.256961 423 423 NA 0.723303 424 424 NA 1.11035 425 425 NA -0.119456 426 426 NA -0.639605 427 427 NA 0.564345 428 428 NA -0.344095 429 429 NA -2.22653 430 430 NA -0.956033 431 431 NA -0.819189 432 432 NA -2.44945 433 433 NA -0.0670052 434 434 NA -1.02125 435 435 NA 1.56421 436 436 NA -0.768685 437 437 NA 0.901317 438 438 NA 0.326158 439 439 NA -0.139662 440 440 NA 0.717582 441 441 NA -1.29883 442 442 NA -0.638025 443 443 NA 1.3778 444 444 NA 1.65038 445 445 NA 0.586743 446 446 NA -0.00589607 447 447 NA 0.13319 448 448 NA -1.26964 449 449 NA -0.125181 450 450 NA -1.24454 451 451 NA -0.0661009 452 452 NA 2.57404 453 453 NA 0.928964 454 454 NA 0.51064 455 455 NA -1.32195 456 456 NA 1.30567 457 457 NA -0.742979 458 458 NA -0.593598 459 459 NA -1.24448 460 460 NA -0.110278 461 461 NA 0.159683 462 462 NA 0.100157 463 463 NA -1.6713 464 464 NA 1.12242 465 465 NA -0.88487 466 466 NA -0.433884 467 467 NA 0.233091 468 468 NA -0.0685021 469 469 NA -0.430799 470 470 NA 0.680125 471 471 NA 0.706294 472 472 NA -1.01252 473 473 NA 1.14022 474 474 NA -0.0951276 475 475 NA 1.20431 476 476 NA -1.31014 477 477 NA -1.01024 478 478 NA 0.86817 479 479 NA -1.13996 480 480 NA 0.220533 481 481 NA -0.585963 482 482 NA 0.936588 483 483 NA -1.58959 484 484 NA 0.114516 485 485 NA 0.275659 486 486 NA 1.82381 487 487 NA 0.919563 488 488 NA 1.19923 489 489 NA -0.287172 490 490 NA -0.125564 491 491 NA 0.76606 492 492 NA 0.0485017 493 493 NA 0.91911 494 494 NA -0.0784911 495 495 NA -1.60227 496 496 NA -2.01618 497 497 NA 1.34361 498 498 NA -1.81712 499 499 NA -0.463177 500 500 NA -0.94339 ================================================ FILE: example/example.pvar ================================================ #CHROM POS ID REF ALT 1 1 1 2 1 1 2 2 2 1 1 3 3 2 1 1 4 4 2 1 1 5 5 2 1 1 6 6 2 1 1 7 7 2 1 1 8 8 2 1 1 9 9 2 1 1 10 10 2 1 1 11 11 2 1 1 12 12 2 1 1 13 13 2 1 1 14 14 2 1 1 15 15 2 1 1 16 16 2 1 1 17 17 2 1 1 18 18 2 1 1 19 19 2 1 1 20 20 2 1 1 21 21 2 1 1 22 22 2 1 1 23 23 2 1 1 24 24 2 1 1 25 25 2 1 1 26 26 2 1 1 27 27 2 1 1 28 28 2 1 1 29 29 2 1 1 30 30 2 1 1 31 31 2 1 1 32 32 2 1 1 33 33 2 1 1 34 34 2 1 1 35 35 2 1 1 36 36 2 1 1 37 37 2 1 1 38 38 2 1 1 39 39 2 1 1 40 40 2 1 1 41 41 2 1 1 42 42 2 1 1 43 43 2 1 1 44 44 2 1 1 45 45 2 1 1 46 46 2 1 1 47 47 2 1 1 48 48 2 1 1 49 49 2 1 1 50 50 2 1 1 51 51 2 1 1 52 52 2 1 1 53 53 2 1 1 54 54 2 1 1 55 55 2 1 1 56 56 2 1 1 57 57 2 1 1 58 58 2 1 1 59 59 2 1 1 60 60 2 1 1 61 61 2 1 1 62 62 2 1 1 63 63 2 1 1 64 64 2 1 1 65 65 2 1 1 66 66 2 1 1 67 67 2 1 1 68 68 2 1 1 69 69 2 1 1 70 70 2 1 1 71 71 2 1 1 72 72 2 1 1 73 73 2 1 1 74 74 2 1 1 75 75 2 1 1 76 76 2 1 1 77 77 2 1 1 78 78 2 1 1 79 79 2 1 1 80 80 2 1 1 81 81 2 1 1 82 82 2 1 1 83 83 2 1 1 84 84 2 1 1 85 85 2 1 1 86 86 2 1 1 87 87 2 1 1 88 88 2 1 1 89 89 2 1 1 90 90 2 1 1 91 91 2 1 1 92 92 2 1 1 93 93 2 1 1 94 94 2 1 1 95 95 2 1 1 96 96 2 1 1 97 97 2 1 1 98 98 2 1 1 99 99 2 1 1 100 100 2 1 1 101 101 2 1 1 102 102 2 1 1 103 103 2 1 1 104 104 2 1 1 105 105 2 1 1 106 106 2 1 1 107 107 2 1 1 108 108 2 1 1 109 109 2 1 1 110 110 2 1 1 111 111 2 1 1 112 112 2 1 1 113 113 2 1 1 114 114 2 1 1 115 115 2 1 1 116 116 2 1 1 117 117 2 1 1 118 118 2 1 1 119 119 2 1 1 120 120 2 1 1 121 121 2 1 1 122 122 2 1 1 123 123 2 1 1 124 124 2 1 1 125 125 2 1 1 126 126 2 1 1 127 127 2 1 1 128 128 2 1 1 129 129 2 1 1 130 130 2 1 1 131 131 2 1 1 132 132 2 1 1 133 133 2 1 1 134 134 2 1 1 135 135 2 1 1 136 136 2 1 1 137 137 2 1 1 138 138 2 1 1 139 139 2 1 1 140 140 2 1 1 141 141 2 1 1 142 142 2 1 1 143 143 2 1 1 144 144 2 1 1 145 145 2 1 1 146 146 2 1 1 147 147 2 1 1 148 148 2 1 1 149 149 2 1 1 150 150 2 1 1 151 151 2 1 1 152 152 2 1 1 153 153 2 1 1 154 154 2 1 1 155 155 2 1 1 156 156 2 1 1 157 157 2 1 1 158 158 2 1 1 159 159 2 1 1 160 160 2 1 1 161 161 2 1 1 162 162 2 1 1 163 163 2 1 1 164 164 2 1 1 165 165 2 1 1 166 166 2 1 1 167 167 2 1 1 168 168 2 1 1 169 169 2 1 1 170 170 2 1 1 171 171 2 1 1 172 172 2 1 1 173 173 2 1 1 174 174 2 1 1 175 175 2 1 1 176 176 2 1 1 177 177 2 1 1 178 178 2 1 1 179 179 2 1 1 180 180 2 1 1 181 181 2 1 1 182 182 2 1 1 183 183 2 1 1 184 184 2 1 1 185 185 2 1 1 186 186 2 1 1 187 187 2 1 1 188 188 2 1 1 189 189 2 1 1 190 190 2 1 1 191 191 2 1 1 192 192 2 1 1 193 193 2 1 1 194 194 2 1 1 195 195 2 1 1 196 196 2 1 1 197 197 2 1 1 198 198 2 1 1 199 199 2 1 1 200 200 2 1 1 201 201 2 1 1 202 202 2 1 1 203 203 2 1 1 204 204 2 1 1 205 205 2 1 1 206 206 2 1 1 207 207 2 1 1 208 208 2 1 1 209 209 2 1 1 210 210 2 1 1 211 211 2 1 1 212 212 2 1 1 213 213 2 1 1 214 214 2 1 1 215 215 2 1 1 216 216 2 1 1 217 217 2 1 1 218 218 2 1 1 219 219 2 1 1 220 220 2 1 1 221 221 2 1 1 222 222 2 1 1 223 223 2 1 1 224 224 2 1 1 225 225 2 1 1 226 226 2 1 1 227 227 2 1 1 228 228 2 1 1 229 229 2 1 1 230 230 2 1 1 231 231 2 1 1 232 232 2 1 1 233 233 2 1 1 234 234 2 1 1 235 235 2 1 1 236 236 2 1 1 237 237 2 1 1 238 238 2 1 1 239 239 2 1 1 240 240 2 1 1 241 241 2 1 1 242 242 2 1 1 243 243 2 1 1 244 244 2 1 1 245 245 2 1 1 246 246 2 1 1 247 247 2 1 1 248 248 2 1 1 249 249 2 1 1 250 250 2 1 1 251 251 2 1 1 252 252 2 1 1 253 253 2 1 1 254 254 2 1 1 255 255 2 1 1 256 256 2 1 1 257 257 2 1 1 258 258 2 1 1 259 259 2 1 1 260 260 2 1 1 261 261 2 1 1 262 262 2 1 1 263 263 2 1 1 264 264 2 1 1 265 265 2 1 1 266 266 2 1 1 267 267 2 1 1 268 268 2 1 1 269 269 2 1 1 270 270 2 1 1 271 271 2 1 1 272 272 2 1 1 273 273 2 1 1 274 274 2 1 1 275 275 2 1 1 276 276 2 1 1 277 277 2 1 1 278 278 2 1 1 279 279 2 1 1 280 280 2 1 1 281 281 2 1 1 282 282 2 1 1 283 283 2 1 1 284 284 2 1 1 285 285 2 1 1 286 286 2 1 1 287 287 2 1 1 288 288 2 1 1 289 289 2 1 1 290 290 2 1 1 291 291 2 1 1 292 292 2 1 1 293 293 2 1 1 294 294 2 1 1 295 295 2 1 1 296 296 2 1 1 297 297 2 1 1 298 298 2 1 1 299 299 2 1 1 300 300 2 1 1 301 301 2 1 1 302 302 2 1 1 303 303 2 1 1 304 304 2 1 1 305 305 2 1 1 306 306 2 1 1 307 307 2 1 1 308 308 2 1 1 309 309 2 1 1 310 310 2 1 1 311 311 2 1 1 312 312 2 1 1 313 313 2 1 1 314 314 2 1 1 315 315 2 1 1 316 316 2 1 1 317 317 2 1 1 318 318 2 1 1 319 319 2 1 1 320 320 2 1 1 321 321 2 1 1 322 322 2 1 1 323 323 2 1 1 324 324 2 1 1 325 325 2 1 1 326 326 2 1 1 327 327 2 1 1 328 328 2 1 1 329 329 2 1 1 330 330 2 1 1 331 331 2 1 1 332 332 2 1 1 333 333 2 1 1 334 334 2 1 1 335 335 2 1 1 336 336 2 1 1 337 337 2 1 1 338 338 2 1 1 339 339 2 1 1 340 340 2 1 1 341 341 2 1 1 342 342 2 1 1 343 343 2 1 1 344 344 2 1 1 345 345 2 1 1 346 346 2 1 1 347 347 2 1 1 348 348 2 1 1 349 349 2 1 1 350 350 2 1 1 351 351 2 1 1 352 352 2 1 1 353 353 2 1 1 354 354 2 1 1 355 355 2 1 1 356 356 2 1 1 357 357 2 1 1 358 358 2 1 1 359 359 2 1 1 360 360 2 1 1 361 361 2 1 1 362 362 2 1 1 363 363 2 1 1 364 364 2 1 1 365 365 2 1 1 366 366 2 1 1 367 367 2 1 1 368 368 2 1 1 369 369 2 1 1 370 370 2 1 1 371 371 2 1 1 372 372 2 1 1 373 373 2 1 1 374 374 2 1 1 375 375 2 1 1 376 376 2 1 1 377 377 2 1 1 378 378 2 1 1 379 379 2 1 1 380 380 2 1 1 381 381 2 1 1 382 382 2 1 1 383 383 2 1 1 384 384 2 1 1 385 385 2 1 1 386 386 2 1 1 387 387 2 1 1 388 388 2 1 1 389 389 2 1 1 390 390 2 1 1 391 391 2 1 1 392 392 2 1 1 393 393 2 1 1 394 394 2 1 1 395 395 2 1 1 396 396 2 1 1 397 397 2 1 1 398 398 2 1 1 399 399 2 1 1 400 400 2 1 1 401 401 2 1 1 402 402 2 1 1 403 403 2 1 1 404 404 2 1 1 405 405 2 1 1 406 406 2 1 1 407 407 2 1 1 408 408 2 1 1 409 409 2 1 1 410 410 2 1 1 411 411 2 1 1 412 412 2 1 1 413 413 2 1 1 414 414 2 1 1 415 415 2 1 1 416 416 2 1 1 417 417 2 1 1 418 418 2 1 1 419 419 2 1 1 420 420 2 1 1 421 421 2 1 1 422 422 2 1 1 423 423 2 1 1 424 424 2 1 1 425 425 2 1 1 426 426 2 1 1 427 427 2 1 1 428 428 2 1 1 429 429 2 1 1 430 430 2 1 1 431 431 2 1 1 432 432 2 1 1 433 433 2 1 1 434 434 2 1 1 435 435 2 1 1 436 436 2 1 1 437 437 2 1 1 438 438 2 1 1 439 439 2 1 1 440 440 2 1 1 441 441 2 1 1 442 442 2 1 1 443 443 2 1 1 444 444 2 1 1 445 445 2 1 1 446 446 2 1 1 447 447 2 1 1 448 448 2 1 1 449 449 2 1 1 450 450 2 1 1 451 451 2 1 1 452 452 2 1 1 453 453 2 1 1 454 454 2 1 1 455 455 2 1 1 456 456 2 1 1 457 457 2 1 1 458 458 2 1 1 459 459 2 1 1 460 460 2 1 1 461 461 2 1 1 462 462 2 1 1 463 463 2 1 1 464 464 2 1 1 465 465 2 1 1 466 466 2 1 1 467 467 2 1 1 468 468 2 1 1 469 469 2 1 1 470 470 2 1 1 471 471 2 1 1 472 472 2 1 1 473 473 2 1 1 474 474 2 1 1 475 475 2 1 1 476 476 2 1 1 477 477 2 1 1 478 478 2 1 1 479 479 2 1 1 480 480 2 1 1 481 481 2 1 1 482 482 2 1 1 483 483 2 1 1 484 484 2 1 1 485 485 2 1 1 486 486 2 1 1 487 487 2 1 1 488 488 2 1 1 489 489 2 1 1 490 490 2 1 1 491 491 2 1 1 492 492 2 1 1 493 493 2 1 1 494 494 2 1 1 495 495 2 1 1 496 496 2 1 1 497 497 2 1 1 498 498 2 1 1 499 499 2 1 1 500 500 2 1 1 501 501 2 1 1 502 502 2 1 1 503 503 2 1 1 504 504 2 1 1 505 505 2 1 1 506 506 2 1 1 507 507 2 1 1 508 508 2 1 1 509 509 2 1 1 510 510 2 1 1 511 511 2 1 1 512 512 2 1 1 513 513 2 1 1 514 514 2 1 1 515 515 2 1 1 516 516 2 1 1 517 517 2 1 1 518 518 2 1 1 519 519 2 1 1 520 520 2 1 1 521 521 2 1 1 522 522 2 1 1 523 523 2 1 1 524 524 2 1 1 525 525 2 1 1 526 526 2 1 1 527 527 2 1 1 528 528 2 1 1 529 529 2 1 1 530 530 2 1 1 531 531 2 1 1 532 532 2 1 1 533 533 2 1 1 534 534 2 1 1 535 535 2 1 1 536 536 2 1 1 537 537 2 1 1 538 538 2 1 1 539 539 2 1 1 540 540 2 1 1 541 541 2 1 1 542 542 2 1 1 543 543 2 1 1 544 544 2 1 1 545 545 2 1 1 546 546 2 1 1 547 547 2 1 1 548 548 2 1 1 549 549 2 1 1 550 550 2 1 1 551 551 2 1 1 552 552 2 1 1 553 553 2 1 1 554 554 2 1 1 555 555 2 1 1 556 556 2 1 1 557 557 2 1 1 558 558 2 1 1 559 559 2 1 1 560 560 2 1 1 561 561 2 1 1 562 562 2 1 1 563 563 2 1 1 564 564 2 1 1 565 565 2 1 1 566 566 2 1 1 567 567 2 1 1 568 568 2 1 1 569 569 2 1 1 570 570 2 1 1 571 571 2 1 1 572 572 2 1 1 573 573 2 1 1 574 574 2 1 1 575 575 2 1 1 576 576 2 1 1 577 577 2 1 1 578 578 2 1 1 579 579 2 1 1 580 580 2 1 1 581 581 2 1 1 582 582 2 1 1 583 583 2 1 1 584 584 2 1 1 585 585 2 1 1 586 586 2 1 1 587 587 2 1 1 588 588 2 1 1 589 589 2 1 1 590 590 2 1 1 591 591 2 1 1 592 592 2 1 1 593 593 2 1 1 594 594 2 1 1 595 595 2 1 1 596 596 2 1 1 597 597 2 1 1 598 598 2 1 1 599 599 2 1 1 600 600 2 1 1 601 601 2 1 1 602 602 2 1 1 603 603 2 1 1 604 604 2 1 1 605 605 2 1 1 606 606 2 1 1 607 607 2 1 1 608 608 2 1 1 609 609 2 1 1 610 610 2 1 1 611 611 2 1 1 612 612 2 1 1 613 613 2 1 1 614 614 2 1 1 615 615 2 1 1 616 616 2 1 1 617 617 2 1 1 618 618 2 1 1 619 619 2 1 1 620 620 2 1 1 621 621 2 1 1 622 622 2 1 1 623 623 2 1 1 624 624 2 1 1 625 625 2 1 1 626 626 2 1 1 627 627 2 1 1 628 628 2 1 1 629 629 2 1 1 630 630 2 1 1 631 631 2 1 1 632 632 2 1 1 633 633 2 1 1 634 634 2 1 1 635 635 2 1 1 636 636 2 1 1 637 637 2 1 1 638 638 2 1 1 639 639 2 1 1 640 640 2 1 1 641 641 2 1 1 642 642 2 1 1 643 643 2 1 1 644 644 2 1 1 645 645 2 1 1 646 646 2 1 1 647 647 2 1 1 648 648 2 1 1 649 649 2 1 1 650 650 2 1 1 651 651 2 1 1 652 652 2 1 1 653 653 2 1 1 654 654 2 1 1 655 655 2 1 1 656 656 2 1 1 657 657 2 1 1 658 658 2 1 1 659 659 2 1 1 660 660 2 1 1 661 661 2 1 1 662 662 2 1 1 663 663 2 1 1 664 664 2 1 1 665 665 2 1 1 666 666 2 1 1 667 667 2 1 1 668 668 2 1 1 669 669 2 1 1 670 670 2 1 1 671 671 2 1 1 672 672 2 1 1 673 673 2 1 1 674 674 2 1 1 675 675 2 1 1 676 676 2 1 1 677 677 2 1 1 678 678 2 1 1 679 679 2 1 1 680 680 2 1 1 681 681 2 1 1 682 682 2 1 1 683 683 2 1 1 684 684 2 1 1 685 685 2 1 1 686 686 2 1 1 687 687 2 1 1 688 688 2 1 1 689 689 2 1 1 690 690 2 1 1 691 691 2 1 1 692 692 2 1 1 693 693 2 1 1 694 694 2 1 1 695 695 2 1 1 696 696 2 1 1 697 697 2 1 1 698 698 2 1 1 699 699 2 1 1 700 700 2 1 1 701 701 2 1 1 702 702 2 1 1 703 703 2 1 1 704 704 2 1 1 705 705 2 1 1 706 706 2 1 1 707 707 2 1 1 708 708 2 1 1 709 709 2 1 1 710 710 2 1 1 711 711 2 1 1 712 712 2 1 1 713 713 2 1 1 714 714 2 1 1 715 715 2 1 1 716 716 2 1 1 717 717 2 1 1 718 718 2 1 1 719 719 2 1 1 720 720 2 1 1 721 721 2 1 1 722 722 2 1 1 723 723 2 1 1 724 724 2 1 1 725 725 2 1 1 726 726 2 1 1 727 727 2 1 1 728 728 2 1 1 729 729 2 1 1 730 730 2 1 1 731 731 2 1 1 732 732 2 1 1 733 733 2 1 1 734 734 2 1 1 735 735 2 1 1 736 736 2 1 1 737 737 2 1 1 738 738 2 1 1 739 739 2 1 1 740 740 2 1 1 741 741 2 1 1 742 742 2 1 1 743 743 2 1 1 744 744 2 1 1 745 745 2 1 1 746 746 2 1 1 747 747 2 1 1 748 748 2 1 1 749 749 2 1 1 750 750 2 1 1 751 751 2 1 1 752 752 2 1 1 753 753 2 1 1 754 754 2 1 1 755 755 2 1 1 756 756 2 1 1 757 757 2 1 1 758 758 2 1 1 759 759 2 1 1 760 760 2 1 1 761 761 2 1 1 762 762 2 1 1 763 763 2 1 1 764 764 2 1 1 765 765 2 1 1 766 766 2 1 1 767 767 2 1 1 768 768 2 1 1 769 769 2 1 1 770 770 2 1 1 771 771 2 1 1 772 772 2 1 1 773 773 2 1 1 774 774 2 1 1 775 775 2 1 1 776 776 2 1 1 777 777 2 1 1 778 778 2 1 1 779 779 2 1 1 780 780 2 1 1 781 781 2 1 1 782 782 2 1 1 783 783 2 1 1 784 784 2 1 1 785 785 2 1 1 786 786 2 1 1 787 787 2 1 1 788 788 2 1 1 789 789 2 1 1 790 790 2 1 1 791 791 2 1 1 792 792 2 1 1 793 793 2 1 1 794 794 2 1 1 795 795 2 1 1 796 796 2 1 1 797 797 2 1 1 798 798 2 1 1 799 799 2 1 1 800 800 2 1 1 801 801 2 1 1 802 802 2 1 1 803 803 2 1 1 804 804 2 1 1 805 805 2 1 1 806 806 2 1 1 807 807 2 1 1 808 808 2 1 1 809 809 2 1 1 810 810 2 1 1 811 811 2 1 1 812 812 2 1 1 813 813 2 1 1 814 814 2 1 1 815 815 2 1 1 816 816 2 1 1 817 817 2 1 1 818 818 2 1 1 819 819 2 1 1 820 820 2 1 1 821 821 2 1 1 822 822 2 1 1 823 823 2 1 1 824 824 2 1 1 825 825 2 1 1 826 826 2 1 1 827 827 2 1 1 828 828 2 1 1 829 829 2 1 1 830 830 2 1 1 831 831 2 1 1 832 832 2 1 1 833 833 2 1 1 834 834 2 1 1 835 835 2 1 1 836 836 2 1 1 837 837 2 1 1 838 838 2 1 1 839 839 2 1 1 840 840 2 1 1 841 841 2 1 1 842 842 2 1 1 843 843 2 1 1 844 844 2 1 1 845 845 2 1 1 846 846 2 1 1 847 847 2 1 1 848 848 2 1 1 849 849 2 1 1 850 850 2 1 1 851 851 2 1 1 852 852 2 1 1 853 853 2 1 1 854 854 2 1 1 855 855 2 1 1 856 856 2 1 1 857 857 2 1 1 858 858 2 1 1 859 859 2 1 1 860 860 2 1 1 861 861 2 1 1 862 862 2 1 1 863 863 2 1 1 864 864 2 1 1 865 865 2 1 1 866 866 2 1 1 867 867 2 1 1 868 868 2 1 1 869 869 2 1 1 870 870 2 1 1 871 871 2 1 1 872 872 2 1 1 873 873 2 1 1 874 874 2 1 1 875 875 2 1 1 876 876 2 1 1 877 877 2 1 1 878 878 2 1 1 879 879 2 1 1 880 880 2 1 1 881 881 2 1 1 882 882 2 1 1 883 883 2 1 1 884 884 2 1 1 885 885 2 1 1 886 886 2 1 1 887 887 2 1 1 888 888 2 1 1 889 889 2 1 1 890 890 2 1 1 891 891 2 1 1 892 892 2 1 1 893 893 2 1 1 894 894 2 1 1 895 895 2 1 1 896 896 2 1 1 897 897 2 1 1 898 898 2 1 1 899 899 2 1 1 900 900 2 1 1 901 901 2 1 1 902 902 2 1 1 903 903 2 1 1 904 904 2 1 1 905 905 2 1 1 906 906 2 1 1 907 907 2 1 1 908 908 2 1 1 909 909 2 1 1 910 910 2 1 1 911 911 2 1 1 912 912 2 1 1 913 913 2 1 1 914 914 2 1 1 915 915 2 1 1 916 916 2 1 1 917 917 2 1 1 918 918 2 1 1 919 919 2 1 1 920 920 2 1 1 921 921 2 1 1 922 922 2 1 1 923 923 2 1 1 924 924 2 1 1 925 925 2 1 1 926 926 2 1 1 927 927 2 1 1 928 928 2 1 1 929 929 2 1 1 930 930 2 1 1 931 931 2 1 1 932 932 2 1 1 933 933 2 1 1 934 934 2 1 1 935 935 2 1 1 936 936 2 1 1 937 937 2 1 1 938 938 2 1 1 939 939 2 1 1 940 940 2 1 1 941 941 2 1 1 942 942 2 1 1 943 943 2 1 1 944 944 2 1 1 945 945 2 1 1 946 946 2 1 1 947 947 2 1 1 948 948 2 1 1 949 949 2 1 1 950 950 2 1 1 951 951 2 1 1 952 952 2 1 1 953 953 2 1 1 954 954 2 1 1 955 955 2 1 1 956 956 2 1 1 957 957 2 1 1 958 958 2 1 1 959 959 2 1 1 960 960 2 1 1 961 961 2 1 1 962 962 2 1 1 963 963 2 1 1 964 964 2 1 1 965 965 2 1 1 966 966 2 1 1 967 967 2 1 1 968 968 2 1 1 969 969 2 1 1 970 970 2 1 1 971 971 2 1 1 972 972 2 1 1 973 973 2 1 1 974 974 2 1 1 975 975 2 1 1 976 976 2 1 1 977 977 2 1 1 978 978 2 1 1 979 979 2 1 1 980 980 2 1 1 981 981 2 1 1 982 982 2 1 1 983 983 2 1 1 984 984 2 1 1 985 985 2 1 1 986 986 2 1 1 987 987 2 1 1 988 988 2 1 1 989 989 2 1 1 990 990 2 1 1 991 991 2 1 1 992 992 2 1 1 993 993 2 1 1 994 994 2 1 1 995 995 2 1 1 996 996 2 1 1 997 997 2 1 1 998 998 2 1 1 999 999 2 1 1 1000 1000 2 1 ================================================ FILE: example/example.test_bin_out_firth_Y1.regenie ================================================ CHROM GENPOS ID ALLELE0 ALLELE1 A1FREQ INFO N TEST BETA SE CHISQ LOG10P 1 1 1 2 1 0.214575 1 494 ADD 0.0775674 0.230001 0.113736 0.133163 1 2 2 2 1 0.218623 1 494 ADD 0.131068 0.239808 0.29872 0.233077 1 3 3 2 1 0.211538 1 494 ADD -0.256723 0.244611 1.10148 0.531739 1 4 4 2 1 0.191296 1 494 ADD -0.131175 0.250523 0.274164 0.221449 1 5 5 2 1 0.195344 1 494 ADD -0.187228 0.235372 0.632751 0.370236 1 6 6 2 1 0.190283 1 494 ADD -0.234935 0.245557 0.91536 0.47019 1 7 7 2 1 0.206478 1 494 ADD 0.11647 0.227747 0.26153 0.215332 1 8 8 2 1 0.188259 1 494 ADD -0.353772 0.251712 1.97533 0.796197 1 9 9 2 1 0.194332 1 494 ADD 0.283254 0.241072 1.38057 0.619781 1 10 10 2 1 0.210526 1 494 ADD 0.0244317 0.236825 0.0106427 0.0372363 1 11 11 2 1 0.183198 1 494 ADD -0.754117 0.264706 8.70619 2.49876 1 12 12 2 1 0.20749 1 494 ADD 0.150619 0.229383 0.431159 0.291222 1 13 13 2 1 0.198381 1 494 ADD 0.176768 0.249666 0.501286 0.319723 1 14 14 2 1 0.191296 1 494 ADD -0.0898607 0.250264 0.128927 0.142941 1 15 15 2 1 0.196356 1 494 ADD 0.0706531 0.24931 0.0803127 0.109649 1 16 16 2 1 0.213563 1 494 ADD 0.127126 0.224028 0.322005 0.243817 1 17 17 2 1 0.173077 1 494 ADD -0.0815387 0.258668 0.0993673 0.123441 1 18 18 2 1 0.181174 1 494 ADD -0.245885 0.247926 0.983608 0.493076 1 19 19 2 1 0.197368 1 494 ADD -0.229608 0.245176 0.87704 0.457157 1 20 20 2 1 0.210526 1 494 ADD 0.0317603 0.23126 0.0188612 0.0502367 1 21 21 2 1 0.197368 1 494 ADD -0.0978523 0.248042 0.15563 0.159134 1 22 22 2 1 0.190283 1 494 ADD 0.0389733 0.24774 0.024748 0.0579936 1 23 23 2 1 0.200405 1 494 ADD -0.0571134 0.229344 0.0620155 0.0951015 1 24 24 2 1 0.197368 1 494 ADD -0.0144344 0.234569 0.00378665 0.0218503 1 25 25 2 1 0.226721 1 494 ADD 0.482245 0.232228 4.31227 1.42207 1 26 26 2 1 0.203441 1 494 ADD -0.237063 0.224814 1.11194 0.535123 1 27 27 2 1 0.208502 1 494 ADD -0.0111253 0.23845 0.00217683 0.0164698 1 28 28 2 1 0.17004 1 494 ADD 0.200861 0.25324 0.629112 0.36888 1 29 29 2 1 0.210526 1 494 ADD -0.0404564 0.25006 0.026175 0.0597457 1 30 30 2 1 0.169028 1 494 ADD -0.292083 0.244579 1.42618 0.633785 1 31 31 2 1 0.224696 1 494 ADD -0.114124 0.24243 0.221604 0.195302 1 32 32 2 1 0.209514 1 494 ADD 0.375668 0.224165 2.80849 1.02795 1 33 33 2 1 0.211538 1 494 ADD -0.0482982 0.2361 0.0418475 0.0768022 1 34 34 2 1 0.178138 1 494 ADD -0.078399 0.24941 0.0988087 0.123053 1 35 35 2 1 0.187247 1 494 ADD -0.24506 0.233506 1.10141 0.531716 1 36 36 2 1 0.188259 1 494 ADD 0.311055 0.249723 1.55151 0.671799 1 37 37 2 1 0.190283 1 494 ADD -0.269829 0.260116 1.07608 0.523491 1 38 38 2 1 0.188259 1 494 ADD 0.512363 0.237949 4.63648 1.50447 1 39 39 2 1 0.211538 1 494 ADD 0.095859 0.218075 0.19322 0.180292 1 40 40 2 1 0.174089 1 494 ADD 0.0137348 0.251811 0.00297503 0.0193142 1 41 41 2 1 0.188259 1 494 ADD 0.0336069 0.245772 0.0186979 0.0500072 1 42 42 2 1 0.223684 1 494 ADD -0.526916 0.226359 5.41861 1.70064 1 43 43 2 1 0.197368 1 494 ADD 0.191427 0.248981 0.591118 0.35459 1 44 44 2 1 0.194332 1 494 ADD -0.0685846 0.224834 0.0930525 0.118997 1 45 45 2 1 0.20749 1 494 ADD 0.329215 0.231375 2.02453 0.810295 1 46 46 2 1 0.214575 1 494 ADD 0.318271 0.233289 1.86126 0.763262 1 47 47 2 1 0.178138 1 494 ADD 0.0441797 0.262924 0.0282347 0.0622022 1 48 48 2 1 0.210526 1 494 ADD 0.0576357 0.231684 0.0618859 0.0949927 1 49 49 2 1 0.196356 1 494 ADD -0.080932 0.262523 0.0950402 0.120408 1 50 50 2 1 0.198381 1 494 ADD -0.0320333 0.236181 0.0183956 0.0495799 1 51 51 2 1 0.200405 1 494 ADD -0.162379 0.258126 0.395724 0.276293 1 52 52 2 1 0.183198 1 494 ADD -0.295989 0.238547 1.53959 0.668211 1 53 53 2 1 0.206478 1 494 ADD 0.196395 0.227096 0.7479 0.41213 1 54 54 2 1 0.201417 1 494 ADD 0.539329 0.236908 5.18259 1.64179 1 55 55 2 1 0.197368 1 494 ADD 0.0152131 0.229608 0.00439001 0.0235706 1 56 56 2 1 0.172065 1 494 ADD 0.185535 0.252526 0.539807 0.334877 1 57 57 2 1 0.17915 1 494 ADD 0.429497 0.259998 2.72884 1.00634 1 58 58 2 1 0.196356 1 494 ADD -0.229797 0.242554 0.897575 0.464158 1 59 59 2 1 0.208502 1 494 ADD 0.187161 0.218477 0.733865 0.407121 1 60 60 2 1 0.210526 1 494 ADD 0.0522758 0.231395 0.0510379 0.0855156 1 61 61 2 1 0.208502 1 494 ADD 0.260822 0.240551 1.17564 0.555573 1 62 62 2 1 0.216599 1 494 ADD -0.0669554 0.219653 0.0929169 0.1189 1 63 63 2 1 0.201417 1 494 ADD 0.336326 0.245913 1.87051 0.765947 1 64 64 2 1 0.17915 1 494 ADD -0.086792 0.252983 0.1177 0.13576 1 65 65 2 1 0.209514 1 494 ADD -0.396664 0.226994 3.05362 1.09389 1 66 66 2 1 0.215587 1 494 ADD -0.142472 0.234949 0.367717 0.264201 1 67 67 2 1 0.188259 1 494 ADD 0.140352 0.23105 0.369001 0.264761 1 68 68 2 1 0.197368 1 494 ADD -0.164904 0.232686 0.50225 0.320106 1 69 69 2 1 0.211538 1 494 ADD -0.205059 0.227167 0.814833 0.435695 1 70 70 2 1 0.182186 1 494 ADD 0.217693 0.246619 0.779177 0.423206 1 71 71 2 1 0.20749 1 494 ADD -0.00511998 0.253841 0.000406829 0.00704562 1 72 72 2 1 0.204453 1 494 ADD -0.157021 0.234262 0.449275 0.298709 1 73 73 2 1 0.205466 1 494 ADD 0.287335 0.24273 1.40129 0.626155 1 74 74 2 1 0.194332 1 494 ADD 0.456076 0.246102 3.43436 1.19482 1 75 75 2 1 0.172065 1 494 ADD 0.158581 0.264409 0.359709 0.26069 1 76 76 2 1 0.240891 1 494 ADD 0.391273 0.221665 3.11577 1.11049 1 77 77 2 1 0.201417 1 494 ADD -0.118872 0.235721 0.254308 0.21179 1 78 78 2 1 0.211538 1 494 ADD -0.274321 0.236845 1.3415 0.60771 1 79 79 2 1 0.199393 1 494 ADD -0.239712 0.230005 1.08619 0.52678 1 80 80 2 1 0.185223 1 494 ADD -0.0376364 0.260651 0.0208496 0.0529637 1 81 81 2 1 0.201417 1 494 ADD -0.325847 0.235856 1.90869 0.777 1 82 82 2 1 0.213563 1 494 ADD 0.130661 0.22521 0.336603 0.250421 1 83 83 2 1 0.201417 1 494 ADD 0.279562 0.239 1.36824 0.615979 1 84 84 2 1 0.216599 1 494 ADD -0.0182119 0.229628 0.00629015 0.0283598 1 85 85 2 1 0.219636 1 494 ADD -0.0530995 0.235816 0.050703 0.0852104 1 86 86 2 1 0.202429 1 494 ADD -0.0830595 0.230345 0.130023 0.143629 1 87 87 2 1 0.195344 1 494 ADD -0.1256 0.233704 0.288832 0.228435 1 88 88 2 1 0.203441 1 494 ADD 0.294784 0.244878 1.44913 0.640795 1 89 89 2 1 0.210526 1 494 ADD -0.244525 0.234147 1.09061 0.528216 1 90 90 2 1 0.183198 1 494 ADD 0.4162 0.252007 2.7276 1.006 1 91 91 2 1 0.203441 1 494 ADD 0.0327289 0.231936 0.0199126 0.0516939 1 92 92 2 1 0.204453 1 494 ADD 0.288721 0.249324 1.341 0.607553 1 93 93 2 1 0.196356 1 494 ADD -0.736078 0.254769 8.86739 2.53714 1 94 94 2 1 0.204453 1 494 ADD -0.257101 0.236491 1.1819 0.557566 1 95 95 2 1 0.195344 1 494 ADD 0.161937 0.259032 0.390827 0.274199 1 96 96 2 1 0.19332 1 494 ADD -0.337784 0.243267 1.92802 0.782582 1 97 97 2 1 0.187247 1 494 ADD 0.218805 0.2386 0.840957 0.444756 1 98 98 2 1 0.204453 1 494 ADD 0.0927028 0.233065 0.15821 0.160641 1 99 99 2 1 0.194332 1 494 ADD 0.272401 0.23222 1.37599 0.618371 1 100 100 2 1 0.197368 1 494 ADD -0.0079439 0.258667 0.000943158 0.0107727 1 101 101 2 1 0.208502 1 494 ADD -0.00976784 0.22342 0.00191141 0.0154151 1 102 102 2 1 0.189271 1 494 ADD -0.0719744 0.227469 0.100118 0.123962 1 103 103 2 1 0.195344 1 494 ADD 0.267385 0.23489 1.29583 0.593499 1 104 104 2 1 0.186235 1 494 ADD 0.0171918 0.236113 0.00530154 0.0259694 1 105 105 2 1 0.224696 1 494 ADD 0.0463889 0.229778 0.0407578 0.0757175 1 106 106 2 1 0.204453 1 494 ADD 0.209573 0.227116 0.851479 0.448386 1 107 107 2 1 0.189271 1 494 ADD 0.199423 0.224984 0.785686 0.425497 1 108 108 2 1 0.216599 1 494 ADD 0.337977 0.237924 2.0179 0.808398 1 109 109 2 1 0.210526 1 494 ADD -0.0987036 0.237601 0.172572 0.168875 1 110 110 2 1 0.215587 1 494 ADD -0.0390161 0.229524 0.0288956 0.0629737 1 111 111 2 1 0.197368 1 494 ADD 0.286579 0.246533 1.35125 0.610729 1 112 112 2 1 0.180162 1 494 ADD 0.360755 0.266713 1.82952 0.754032 1 113 113 2 1 0.214575 1 494 ADD -0.416251 0.226915 3.36498 1.17655 1 114 114 2 1 0.215587 1 494 ADD -0.0622402 0.232877 0.0714314 0.102778 1 115 115 2 1 0.196356 1 494 ADD 0.542127 0.245454 4.8782 1.56546 1 116 116 2 1 0.210526 1 494 ADD -0.0249269 0.227466 0.0120089 0.0396537 1 117 117 2 1 0.20749 1 494 ADD 0.362257 0.229285 2.49621 0.942635 1 118 118 2 1 0.189271 1 494 ADD 0.153986 0.239736 0.412567 0.283438 1 119 119 2 1 0.194332 1 494 ADD -0.0445348 0.257544 0.0299017 0.0641334 1 120 120 2 1 0.208502 1 494 ADD -0.13184 0.225575 0.341597 0.252659 1 121 121 2 1 0.183198 1 494 ADD -0.103698 0.245506 0.178411 0.172151 1 122 122 2 1 0.187247 1 494 ADD -0.168238 0.260791 0.416162 0.284951 1 123 123 2 1 0.187247 1 494 ADD 0.56839 0.259103 4.81224 1.54885 1 124 124 2 1 0.194332 1 494 ADD 0.0990443 0.238431 0.172557 0.168867 1 125 125 2 1 0.199393 1 494 ADD 0.0242139 0.233819 0.0107244 0.0373846 1 126 126 2 1 0.192308 1 494 ADD -0.0635237 0.247483 0.0658841 0.0983093 1 127 127 2 1 0.211538 1 494 ADD -0.310185 0.216771 2.04758 0.816876 1 128 128 2 1 0.189271 1 494 ADD 0.130459 0.245538 0.282299 0.225338 1 129 129 2 1 0.199393 1 494 ADD 0.011662 0.245723 0.00225244 0.0167587 1 130 130 2 1 0.208502 1 494 ADD -0.481741 0.231767 4.3204 1.42414 1 131 131 2 1 0.186235 1 494 ADD -0.0707131 0.251207 0.0792386 0.108835 1 132 132 2 1 0.19332 1 494 ADD 0.0197285 0.251053 0.00617529 0.0280916 1 133 133 2 1 0.19332 1 494 ADD -0.113898 0.226748 0.252316 0.210808 1 134 134 2 1 0.181174 1 494 ADD 0.0272865 0.257303 0.0112462 0.0383207 1 135 135 2 1 0.212551 1 494 ADD 0.551368 0.23462 5.52274 1.72652 1 136 136 2 1 0.198381 1 494 ADD -0.0377658 0.237599 0.0252644 0.0586327 1 137 137 2 1 0.210526 1 494 ADD 0.172952 0.22854 0.5727 0.347572 1 138 138 2 1 0.206478 1 494 ADD 0.654425 0.227399 8.05732 2.34371 1 139 139 2 1 0.188259 1 494 ADD 0.127514 0.255762 0.248566 0.208951 1 140 140 2 1 0.195344 1 494 ADD 0.137092 0.229052 0.358224 0.260037 1 141 141 2 1 0.197368 1 494 ADD 0.221022 0.239153 0.854121 0.449296 1 142 142 2 1 0.190283 1 494 ADD -0.107879 0.243711 0.19594 0.181762 1 143 143 2 1 0.220648 1 494 ADD -0.171045 0.236941 0.521126 0.327568 1 144 144 2 1 0.188259 1 494 ADD -0.445567 0.244672 3.31632 1.16371 1 145 145 2 1 0.200405 1 494 ADD 0.336883 0.247684 1.84995 0.759977 1 146 146 2 1 0.20749 1 494 ADD -0.0354943 0.233717 0.0230641 0.0558676 1 147 147 2 1 0.223684 1 494 ADD -0.0783441 0.219802 0.127043 0.141753 1 148 148 2 1 0.192308 1 494 ADD 0.462904 0.238452 3.76859 1.28213 1 149 149 2 1 0.197368 1 494 ADD 0.00482043 0.236012 0.000417162 0.00713525 1 150 150 2 1 0.209514 1 494 ADD 0.0733423 0.242037 0.0918215 0.118117 1 151 151 2 1 0.19332 1 494 ADD 0.137108 0.260469 0.277085 0.22285 1 152 152 2 1 0.189271 1 494 ADD 0.269233 0.254198 1.12179 0.538302 1 153 153 2 1 0.181174 1 494 ADD 0.0524316 0.246177 0.0453619 0.0802214 1 154 154 2 1 0.204453 1 494 ADD -0.0532762 0.237997 0.0501098 0.0846675 1 155 155 2 1 0.209514 1 494 ADD 0.0024961 0.235479 0.000112363 0.00368867 1 156 156 2 1 0.186235 1 494 ADD -0.249799 0.236163 1.11881 0.537341 1 157 157 2 1 0.208502 1 494 ADD -0.421515 0.249013 2.86538 1.04333 1 158 158 2 1 0.189271 1 494 ADD -0.0767536 0.240251 0.102063 0.125305 1 159 159 2 1 0.202429 1 494 ADD 0.364345 0.236085 2.38171 0.910932 1 160 160 2 1 0.187247 1 494 ADD -0.130187 0.24101 0.291786 0.229827 1 161 161 2 1 0.205466 1 494 ADD -0.324356 0.23566 1.8944 0.772869 1 162 162 2 1 0.199393 1 494 ADD -0.251815 0.236096 1.13759 0.543388 1 163 163 2 1 0.17915 1 494 ADD 0.549634 0.262562 4.38211 1.43988 1 164 164 2 1 0.197368 1 494 ADD 0.0498387 0.249499 0.0399021 0.0748571 1 165 165 2 1 0.188259 1 494 ADD -0.0048665 0.243378 0.000399827 0.00698424 1 166 166 2 1 0.196356 1 494 ADD 0.189153 0.25008 0.572093 0.34734 1 167 167 2 1 0.187247 1 494 ADD 0.114594 0.228898 0.250635 0.209976 1 168 168 2 1 0.205466 1 494 ADD 0.20514 0.235785 0.756952 0.415348 1 169 169 2 1 0.201417 1 494 ADD 0.371147 0.235378 2.48634 0.939912 1 170 170 2 1 0.188259 1 494 ADD -0.0325784 0.243087 0.0179612 0.0489602 1 171 171 2 1 0.205466 1 494 ADD 0.0806316 0.232338 0.12044 0.137536 1 172 172 2 1 0.215587 1 494 ADD -0.0291194 0.246949 0.0139043 0.0428077 1 173 173 2 1 0.210526 1 494 ADD -0.525094 0.246333 4.54389 1.48101 1 174 174 2 1 0.20749 1 494 ADD -0.477343 0.241393 3.91031 1.31884 1 175 175 2 1 0.22166 1 494 ADD 0.159839 0.239087 0.446944 0.297751 1 176 176 2 1 0.182186 1 494 ADD -0.273088 0.248103 1.21156 0.566992 1 177 177 2 1 0.212551 1 494 ADD 0.100509 0.240498 0.174657 0.17005 1 178 178 2 1 0.219636 1 494 ADD 0.219401 0.239146 0.841688 0.445009 1 179 179 2 1 0.194332 1 494 ADD -0.44054 0.248412 3.14505 1.11829 1 180 180 2 1 0.198381 1 494 ADD -0.0222736 0.231566 0.0092519 0.0346232 1 181 181 2 1 0.212551 1 494 ADD 0.0446498 0.225942 0.0390522 0.0739946 1 182 182 2 1 0.189271 1 494 ADD -0.529348 0.232001 5.20601 1.64765 1 183 183 2 1 0.200405 1 494 ADD -0.173841 0.232296 0.56004 0.342711 1 184 184 2 1 0.197368 1 494 ADD -0.0869827 0.23773 0.133875 0.146029 1 185 185 2 1 0.198381 1 494 ADD -0.31736 0.246738 1.65436 0.702532 1 186 186 2 1 0.219636 1 494 ADD 0.415424 0.217999 3.63141 1.24643 1 187 187 2 1 0.204453 1 494 ADD -0.127341 0.230953 0.30401 0.23554 1 188 188 2 1 0.197368 1 494 ADD -0.131344 0.237589 0.30561 0.236283 1 189 189 2 1 0.195344 1 494 ADD 0.282696 0.235248 1.44406 0.639249 1 190 190 2 1 0.187247 1 494 ADD -0.190845 0.25003 0.582608 0.351355 1 191 191 2 1 0.209514 1 494 ADD 0.579174 0.216042 7.07423 2.10679 1 192 192 2 1 0.171053 1 494 ADD 0.125639 0.24471 0.263599 0.21634 1 193 193 2 1 0.192308 1 494 ADD -0.102295 0.254299 0.161814 0.162733 1 194 194 2 1 0.208502 1 494 ADD -0.0561295 0.236682 0.0562408 0.0901556 1 195 195 2 1 0.217611 1 494 ADD 0.00759132 0.234183 0.00105081 0.0113785 1 196 196 2 1 0.203441 1 494 ADD 0.336144 0.244164 1.89533 0.773138 1 197 197 2 1 0.202429 1 494 ADD 0.326072 0.237557 1.88405 0.769871 1 198 198 2 1 0.198381 1 494 ADD -0.124779 0.228909 0.297134 0.232336 1 199 199 2 1 0.185223 1 494 ADD -0.526894 0.242737 4.71165 1.52348 1 200 200 2 1 0.188259 1 494 ADD 0.104052 0.243099 0.183203 0.174811 1 201 201 2 1 0.216599 1 494 ADD -0.233208 0.235642 0.979449 0.491693 1 202 202 2 1 0.175101 1 494 ADD -0.0460542 0.241999 0.0362167 0.0710572 1 203 203 2 1 0.222672 1 494 ADD -0.353509 0.24956 2.00655 0.80515 1 204 204 2 1 0.183198 1 494 ADD -0.0277105 0.236089 0.0137764 0.0426013 1 205 205 2 1 0.190283 1 494 ADD -0.225238 0.234208 0.924866 0.473402 1 206 206 2 1 0.181174 1 494 ADD -0.118214 0.250118 0.223381 0.196218 1 207 207 2 1 0.19332 1 494 ADD 0.194133 0.248703 0.609304 0.361461 1 208 208 2 1 0.208502 1 494 ADD 0.0870885 0.248417 0.122902 0.139118 1 209 209 2 1 0.176113 1 494 ADD -0.316245 0.235764 1.79925 0.745203 1 210 210 2 1 0.210526 1 494 ADD -0.452566 0.2169 4.35358 1.43261 1 211 211 2 1 0.191296 1 494 ADD 0.347337 0.250765 1.91853 0.779843 1 212 212 2 1 0.209514 1 494 ADD -0.0637143 0.2245 0.0805453 0.109825 1 213 213 2 1 0.180162 1 494 ADD 0.125401 0.257536 0.237096 0.203209 1 214 214 2 1 0.192308 1 494 ADD -0.280003 0.254352 1.21187 0.56709 1 215 215 2 1 0.202429 1 494 ADD 0.273454 0.240409 1.2938 0.592866 1 216 216 2 1 0.211538 1 494 ADD 0.0877622 0.244877 0.128445 0.142638 1 217 217 2 1 0.215587 1 494 ADD 0.147027 0.219577 0.44835 0.298329 1 218 218 2 1 0.195344 1 494 ADD 0.11561 0.247524 0.218148 0.193512 1 219 219 2 1 0.201417 1 494 ADD -0.165098 0.22573 0.534945 0.332981 1 220 220 2 1 0.185223 1 494 ADD -0.227127 0.241249 0.886352 0.460337 1 221 221 2 1 0.19332 1 494 ADD -0.245511 0.241253 1.03561 0.51026 1 222 222 2 1 0.17915 1 494 ADD 0.126374 0.238576 0.280581 0.22452 1 223 223 2 1 0.20749 1 494 ADD 0.0432905 0.235591 0.033765 0.0684366 1 224 224 2 1 0.203441 1 494 ADD -0.239607 0.250357 0.915968 0.470395 1 225 225 2 1 0.182186 1 494 ADD 0.208018 0.235924 0.777421 0.422588 1 226 226 2 1 0.211538 1 494 ADD 0.00814029 0.217043 0.00140666 0.0131916 1 227 227 2 1 0.203441 1 494 ADD 0.0233924 0.247722 0.00891698 0.0339673 1 228 228 2 1 0.178138 1 494 ADD 0.00411336 0.243644 0.000285025 0.00588961 1 229 229 2 1 0.208502 1 494 ADD 0.205819 0.237378 0.751776 0.413509 1 230 230 2 1 0.171053 1 494 ADD -0.28898 0.249136 1.34543 0.608927 1 231 231 2 1 0.188259 1 494 ADD 0.388264 0.241396 2.58699 0.967602 1 232 232 2 1 0.181174 1 494 ADD 0.171533 0.247554 0.480128 0.311256 1 233 233 2 1 0.201417 1 494 ADD 0.0469302 0.237934 0.0389036 0.073843 1 234 234 2 1 0.197368 1 494 ADD 0.186589 0.241115 0.598854 0.35752 1 235 235 2 1 0.186235 1 494 ADD 0.164584 0.243268 0.457722 0.302169 1 236 236 2 1 0.196356 1 494 ADD 0.686872 0.246731 7.53337 2.21777 1 237 237 2 1 0.216599 1 494 ADD -0.232181 0.237769 0.953545 0.483044 1 238 238 2 1 0.190283 1 494 ADD 0.507344 0.241471 4.41444 1.44811 1 239 239 2 1 0.17915 1 494 ADD -0.141981 0.252332 0.316603 0.241348 1 240 240 2 1 0.217611 1 494 ADD 0.0184468 0.227884 0.00655256 0.0289639 1 241 241 2 1 0.185223 1 494 ADD -0.440588 0.24769 3.1641 1.12335 1 242 242 2 1 0.198381 1 494 ADD 0.256868 0.240376 1.14192 0.544779 1 243 243 2 1 0.219636 1 494 ADD -0.0875526 0.243105 0.129703 0.143428 1 244 244 2 1 0.196356 1 494 ADD 0.241806 0.23834 1.02929 0.508183 1 245 245 2 1 0.187247 1 494 ADD -0.440328 0.23728 3.44375 1.19729 1 246 246 2 1 0.196356 1 494 ADD -0.310991 0.233608 1.77224 0.737298 1 247 247 2 1 0.189271 1 494 ADD 0.107724 0.255013 0.178445 0.17217 1 248 248 2 1 0.183198 1 494 ADD 0.0316461 0.238284 0.0176381 0.0484949 1 249 249 2 1 0.175101 1 494 ADD 0.27444 0.257176 1.13876 0.543765 1 250 250 2 1 0.17915 1 494 ADD 0.0614279 0.252795 0.0590466 0.0925837 1 251 251 2 1 0.226721 1 494 ADD -0.228603 0.237876 0.923556 0.472959 1 252 252 2 1 0.197368 1 494 ADD 0.121706 0.230814 0.278035 0.223305 1 253 253 2 1 0.209514 1 494 ADD 0.488668 0.224401 4.74218 1.53118 1 254 254 2 1 0.209514 1 494 ADD 0.177626 0.229557 0.598737 0.357476 1 255 255 2 1 0.212551 1 494 ADD 0.313204 0.240614 1.69439 0.71439 1 256 256 2 1 0.195344 1 494 ADD -0.191068 0.237769 0.645748 0.375061 1 257 257 2 1 0.186235 1 494 ADD 0.472663 0.24021 3.87186 1.3089 1 258 258 2 1 0.212551 1 494 ADD 0.454249 0.230918 3.86965 1.30833 1 259 259 2 1 0.218623 1 494 ADD -0.00686996 0.233375 0.000866564 0.0103208 1 260 260 2 1 0.201417 1 494 ADD -0.633816 0.247666 6.84194 2.0504 1 261 261 2 1 0.186235 1 494 ADD 0.0238221 0.239516 0.00989219 0.0358472 1 262 262 2 1 0.225709 1 494 ADD -0.360946 0.250435 2.07727 0.825338 1 263 263 2 1 0.187247 1 494 ADD -0.169709 0.240098 0.499613 0.319057 1 264 264 2 1 0.183198 1 494 ADD -0.256245 0.242189 1.11944 0.537544 1 265 265 2 1 0.20749 1 494 ADD 0.0243429 0.222907 0.0119261 0.0395108 1 266 266 2 1 0.194332 1 494 ADD -0.662439 0.251044 7.3146 2.16497 1 267 267 2 1 0.203441 1 494 ADD -0.239132 0.241563 0.979975 0.491868 1 268 268 2 1 0.219636 1 494 ADD 0.0951827 0.225713 0.17783 0.171827 1 269 269 2 1 0.184211 1 494 ADD 0.282981 0.231405 1.49544 0.654873 1 270 270 2 1 0.191296 1 494 ADD 0.453645 0.255768 3.14586 1.1185 1 271 271 2 1 0.200405 1 494 ADD -0.0808228 0.240269 0.113154 0.132779 1 272 272 2 1 0.186235 1 494 ADD -0.042941 0.242151 0.0314466 0.0658816 1 273 273 2 1 0.191296 1 494 ADD 0.0133505 0.243043 0.00301736 0.0194541 1 274 274 2 1 0.177126 1 494 ADD 0.0551893 0.250015 0.0487279 0.0833925 1 275 275 2 1 0.216599 1 494 ADD -0.210649 0.219884 0.917769 0.471004 1 276 276 2 1 0.195344 1 494 ADD -0.155271 0.231073 0.451528 0.299634 1 277 277 2 1 0.180162 1 494 ADD 0.159026 0.236068 0.453795 0.300563 1 278 278 2 1 0.200405 1 494 ADD 0.0996347 0.235063 0.179661 0.172847 1 279 279 2 1 0.210526 1 494 ADD 0.317616 0.23165 1.87992 0.768675 1 280 280 2 1 0.202429 1 494 ADD 0.0963706 0.22526 0.18303 0.174715 1 281 281 2 1 0.210526 1 494 ADD -0.315037 0.228802 1.89585 0.773289 1 282 282 2 1 0.219636 1 494 ADD -0.076133 0.236931 0.103252 0.126121 1 283 283 2 1 0.213563 1 494 ADD 0.0220752 0.223137 0.0097874 0.0356494 1 284 284 2 1 0.185223 1 494 ADD 0.351599 0.252479 1.93929 0.785831 1 285 285 2 1 0.202429 1 494 ADD -0.321853 0.245204 1.72291 0.722805 1 286 286 2 1 0.219636 1 494 ADD -0.147106 0.223449 0.433414 0.292159 1 287 287 2 1 0.192308 1 494 ADD 0.151032 0.246317 0.375968 0.267792 1 288 288 2 1 0.200405 1 494 ADD -0.187541 0.240239 0.609402 0.361498 1 289 289 2 1 0.189271 1 494 ADD -0.0840863 0.227902 0.136131 0.147423 1 290 290 2 1 0.214575 1 494 ADD 0.292289 0.23618 1.53158 0.665798 1 291 291 2 1 0.216599 1 494 ADD 0.268234 0.219577 1.4923 0.653921 1 292 292 2 1 0.19332 1 494 ADD -0.344072 0.235297 2.13829 0.842658 1 293 293 2 1 0.205466 1 494 ADD -0.0864626 0.230699 0.140464 0.150077 1 294 294 2 1 0.184211 1 494 ADD 0.489442 0.262504 3.47641 1.20586 1 295 295 2 1 0.203441 1 494 ADD 0.331204 0.231665 2.04395 0.815841 1 296 296 2 1 0.209514 1 494 ADD -0.0805619 0.239349 0.113291 0.13287 1 297 297 2 1 0.215587 1 494 ADD 0.165862 0.22921 0.523633 0.328553 1 298 298 2 1 0.20749 1 494 ADD -0.188592 0.237428 0.630932 0.369558 1 299 299 2 1 0.216599 1 494 ADD 0.176591 0.233697 0.570993 0.346918 1 300 300 2 1 0.202429 1 494 ADD -0.144656 0.248427 0.339061 0.251524 1 301 301 2 1 0.209514 1 494 ADD -0.0933582 0.244644 0.145625 0.153198 1 302 302 2 1 0.209514 1 494 ADD -0.154235 0.239447 0.414902 0.284421 1 303 303 2 1 0.187247 1 494 ADD 0.112938 0.226548 0.248519 0.208927 1 304 304 2 1 0.19332 1 494 ADD -0.0369757 0.234443 0.0248747 0.058151 1 305 305 2 1 0.185223 1 494 ADD -0.160382 0.230493 0.484166 0.31288 1 306 306 2 1 0.195344 1 494 ADD 0.148343 0.227192 0.426332 0.289211 1 307 307 2 1 0.202429 1 494 ADD -0.364964 0.246993 2.18339 0.855404 1 308 308 2 1 0.189271 1 494 ADD 0.0113414 0.230555 0.00241983 0.0173822 1 309 309 2 1 0.200405 1 494 ADD -0.550167 0.232754 5.58719 1.74251 1 310 310 2 1 0.208502 1 494 ADD -0.313848 0.246007 1.62758 0.694567 1 311 311 2 1 0.201417 1 494 ADD -0.0230018 0.231591 0.00986463 0.0357953 1 312 312 2 1 0.204453 1 494 ADD -0.247301 0.217641 1.29114 0.592034 1 313 313 2 1 0.208502 1 494 ADD 0.0489485 0.230112 0.0452481 0.0801124 1 314 314 2 1 0.197368 1 494 ADD -0.236284 0.243026 0.94528 0.480272 1 315 315 2 1 0.186235 1 494 ADD -0.0544366 0.238678 0.0520186 0.0864048 1 316 316 2 1 0.191296 1 494 ADD -0.156108 0.233868 0.445563 0.297182 1 317 317 2 1 0.200405 1 494 ADD -0.170493 0.230598 0.546638 0.337531 1 318 318 2 1 0.201417 1 494 ADD -0.0836236 0.240343 0.121059 0.137935 1 319 319 2 1 0.218623 1 494 ADD -0.264531 0.224167 1.39255 0.623468 1 320 320 2 1 0.183198 1 494 ADD -0.207568 0.226662 0.838617 0.443948 1 321 321 2 1 0.178138 1 494 ADD -0.0122218 0.240989 0.00257204 0.0179313 1 322 322 2 1 0.194332 1 494 ADD -0.000149906 0.246105 3.71023e-07 0.00021112 1 323 323 2 1 0.201417 1 494 ADD 0.32419 0.254198 1.62651 0.694247 1 324 324 2 1 0.210526 1 494 ADD 0.0770296 0.248347 0.0962048 0.12123 1 325 325 2 1 0.19332 1 494 ADD 0.313602 0.236354 1.76048 0.733851 1 326 326 2 1 0.185223 1 494 ADD -0.0525833 0.240257 0.047901 0.0826222 1 327 327 2 1 0.200405 1 494 ADD -0.0591845 0.238504 0.0615781 0.0947337 1 328 328 2 1 0.210526 1 494 ADD 0.354506 0.233132 2.3123 0.891591 1 329 329 2 1 0.208502 1 494 ADD 0.111997 0.229837 0.237451 0.203389 1 330 330 2 1 0.17915 1 494 ADD -0.12819 0.236699 0.2933 0.230539 1 331 331 2 1 0.19332 1 494 ADD 0.408404 0.23602 2.99421 1.07799 1 332 332 2 1 0.188259 1 494 ADD 0.195833 0.246878 0.629226 0.368922 1 333 333 2 1 0.209514 1 494 ADD -0.151887 0.226026 0.451569 0.29965 1 334 334 2 1 0.19332 1 494 ADD 0.0416929 0.230151 0.032817 0.0674014 1 335 335 2 1 0.212551 1 494 ADD 0.0613165 0.225989 0.0736173 0.1045 1 336 336 2 1 0.186235 1 494 ADD 0.129016 0.238361 0.292966 0.230382 1 337 337 2 1 0.218623 1 494 ADD 0.152594 0.23628 0.417082 0.285338 1 338 338 2 1 0.190283 1 494 ADD -0.239065 0.254347 0.883446 0.459346 1 339 339 2 1 0.19332 1 494 ADD -0.135831 0.242476 0.313803 0.240064 1 340 340 2 1 0.192308 1 494 ADD -0.263052 0.233923 1.26455 0.583707 1 341 341 2 1 0.191296 1 494 ADD -0.184736 0.232458 0.631558 0.369791 1 342 342 2 1 0.197368 1 494 ADD -0.280695 0.252277 1.23798 0.575345 1 343 343 2 1 0.216599 1 494 ADD 0.119036 0.229639 0.268699 0.218815 1 344 344 2 1 0.17915 1 494 ADD 0.643606 0.228023 7.76068 2.27249 1 345 345 2 1 0.178138 1 494 ADD -0.249486 0.256349 0.947174 0.480908 1 346 346 2 1 0.226721 1 494 ADD -0.119133 0.22382 0.283311 0.225819 1 347 347 2 1 0.183198 1 494 ADD -0.271723 0.256981 1.11802 0.537086 1 348 348 2 1 0.190283 1 494 ADD -0.132357 0.24202 0.299083 0.233247 1 349 349 2 1 0.185223 1 494 ADD -0.406789 0.238202 2.9164 1.05708 1 350 350 2 1 0.197368 1 494 ADD -0.309055 0.244167 1.60213 0.686973 1 351 351 2 1 0.211538 1 494 ADD -0.0346362 0.242827 0.0203455 0.0522838 1 352 352 2 1 0.197368 1 494 ADD 0.222792 0.243363 0.83809 0.443766 1 353 353 2 1 0.195344 1 494 ADD 0.220816 0.259398 0.724649 0.403818 1 354 354 2 1 0.214575 1 494 ADD 0.423568 0.232507 3.31876 1.16435 1 355 355 2 1 0.218623 1 494 ADD 0.15006 0.229652 0.426959 0.289472 1 356 356 2 1 0.201417 1 494 ADD 0.137602 0.227091 0.367158 0.263956 1 357 357 2 1 0.189271 1 494 ADD -0.357142 0.233423 2.34096 0.89959 1 358 358 2 1 0.213563 1 494 ADD -0.415095 0.244066 2.89255 1.05066 1 359 359 2 1 0.180162 1 494 ADD 0.18873 0.242497 0.605714 0.360109 1 360 360 2 1 0.20749 1 494 ADD 0.194504 0.239236 0.661007 0.380693 1 361 361 2 1 0.19332 1 494 ADD -0.231122 0.239437 0.931756 0.475724 1 362 362 2 1 0.196356 1 494 ADD -0.000245258 0.23587 1.08119e-06 0.000360459 1 363 363 2 1 0.214575 1 494 ADD -0.168907 0.234424 0.519147 0.326789 1 364 364 2 1 0.201417 1 494 ADD 0.340148 0.254778 1.78242 0.740282 1 365 365 2 1 0.17915 1 494 ADD 0.259736 0.243495 1.13786 0.543473 1 366 366 2 1 0.205466 1 494 ADD -0.326632 0.231234 1.99532 0.801932 1 367 367 2 1 0.162955 1 494 ADD -0.568275 0.268885 4.46667 1.4614 1 368 368 2 1 0.187247 1 494 ADD 0.0128547 0.244311 0.00276847 0.0186174 1 369 369 2 1 0.198381 1 494 ADD 0.0975411 0.228457 0.182291 0.174307 1 370 370 2 1 0.212551 1 494 ADD -0.084123 0.226825 0.137546 0.148294 1 371 371 2 1 0.202429 1 494 ADD 0.0480171 0.223419 0.0461905 0.0810109 1 372 372 2 1 0.20749 1 494 ADD 0.56381 0.218129 6.54312 1.97761 1 373 373 2 1 0.191296 1 494 ADD -0.0834276 0.243188 0.117688 0.135753 1 374 374 2 1 0.182186 1 494 ADD -0.363118 0.23859 2.31629 0.892704 1 375 375 2 1 0.196356 1 494 ADD 0.0651676 0.237644 0.0751985 0.105732 1 376 376 2 1 0.19332 1 494 ADD -0.241227 0.235149 1.05236 0.515752 1 377 377 2 1 0.205466 1 494 ADD 0.341688 0.249721 1.87218 0.766432 1 378 378 2 1 0.204453 1 494 ADD 0.158864 0.248605 0.408348 0.281657 1 379 379 2 1 0.199393 1 494 ADD -0.0481929 0.244 0.0390108 0.0739524 1 380 380 2 1 0.195344 1 494 ADD -0.0734079 0.248604 0.0871903 0.114763 1 381 381 2 1 0.210526 1 494 ADD -0.0105475 0.228929 0.00212273 0.0162601 1 382 382 2 1 0.194332 1 494 ADD 0.0416356 0.239626 0.0301899 0.0644624 1 383 383 2 1 0.197368 1 494 ADD -0.0417624 0.234217 0.0317932 0.0662686 1 384 384 2 1 0.197368 1 494 ADD -0.0227064 0.258763 0.00770003 0.0314818 1 385 385 2 1 0.19332 1 494 ADD -0.17419 0.2265 0.591438 0.354712 1 386 386 2 1 0.209514 1 494 ADD 0.204922 0.236581 0.750272 0.412974 1 387 387 2 1 0.216599 1 494 ADD -0.433229 0.242266 3.19781 1.13231 1 388 388 2 1 0.182186 1 494 ADD -0.0664087 0.261258 0.0646118 0.0972631 1 389 389 2 1 0.201417 1 494 ADD -0.0964735 0.24814 0.151155 0.156497 1 390 390 2 1 0.211538 1 494 ADD -0.21901 0.235598 0.864138 0.452738 1 391 391 2 1 0.192308 1 494 ADD -0.336766 0.239517 1.9769 0.796649 1 392 392 2 1 0.218623 1 494 ADD -0.191544 0.228947 0.699952 0.394911 1 393 393 2 1 0.190283 1 494 ADD 0.0611308 0.245398 0.0620552 0.0951349 1 394 394 2 1 0.194332 1 494 ADD 0.0518504 0.246149 0.0443718 0.0792698 1 395 395 2 1 0.172065 1 494 ADD -0.224502 0.261258 0.738422 0.40875 1 396 396 2 1 0.210526 1 494 ADD 0.0912253 0.234707 0.15107 0.156447 1 397 397 2 1 0.178138 1 494 ADD -0.162788 0.252472 0.415737 0.284773 1 398 398 2 1 0.231781 1 494 ADD 0.01235 0.235618 0.00274739 0.0185449 1 399 399 2 1 0.175101 1 494 ADD -0.0479172 0.267481 0.0320921 0.066601 1 400 400 2 1 0.209514 1 494 ADD 0.0439179 0.233626 0.0353379 0.0701269 1 401 401 2 1 0.200405 1 494 ADD -0.329615 0.247943 1.76729 0.735849 1 402 402 2 1 0.203441 1 494 ADD 0.272774 0.22381 1.48541 0.651832 1 403 403 2 1 0.195344 1 494 ADD -0.0152635 0.246255 0.00384184 0.0220128 1 404 404 2 1 0.17915 1 494 ADD -0.140991 0.243505 0.33525 0.249812 1 405 405 2 1 0.22166 1 494 ADD -0.256102 0.22605 1.28357 0.589667 1 406 406 2 1 0.191296 1 494 ADD -0.723328 0.262164 8.04727 2.3413 1 407 407 2 1 0.204453 1 494 ADD 0.00669707 0.228699 0.000857517 0.0102661 1 408 408 2 1 0.195344 1 494 ADD 0.00669866 0.229694 0.000850504 0.0102236 1 409 409 2 1 0.225709 1 494 ADD 0.100527 0.224966 0.199679 0.183772 1 410 410 2 1 0.204453 1 494 ADD -0.0269847 0.230987 0.0136477 0.0423928 1 411 411 2 1 0.205466 1 494 ADD -0.469791 0.240515 3.81526 1.29424 1 412 412 2 1 0.19332 1 494 ADD 0.0515073 0.229386 0.05042 0.0849517 1 413 413 2 1 0.20749 1 494 ADD 0.182291 0.248882 0.53647 0.333576 1 414 414 2 1 0.190283 1 494 ADD 0.289216 0.2395 1.45825 0.643574 1 415 415 2 1 0.199393 1 494 ADD 0.113183 0.232928 0.236113 0.202713 1 416 416 2 1 0.203441 1 494 ADD 0.252299 0.243939 1.06972 0.52142 1 417 417 2 1 0.197368 1 494 ADD 0.686466 0.233128 8.5754 2.46758 1 418 418 2 1 0.19332 1 494 ADD -0.223279 0.240453 0.862256 0.452092 1 419 419 2 1 0.184211 1 494 ADD 0.0289128 0.254994 0.0128565 0.0410902 1 420 420 2 1 0.208502 1 494 ADD 0.258976 0.231243 1.25423 0.580465 1 421 421 2 1 0.190283 1 494 ADD 0.261297 0.236457 1.22113 0.570024 1 422 422 2 1 0.211538 1 494 ADD 0.363307 0.228262 2.53327 0.952846 1 423 423 2 1 0.188259 1 494 ADD 0.0530746 0.237276 0.0500343 0.0845983 1 424 424 2 1 0.211538 1 494 ADD -0.139296 0.219001 0.404565 0.280055 1 425 425 2 1 0.202429 1 494 ADD -0.0346592 0.247346 0.0196348 0.0513124 1 426 426 2 1 0.209514 1 494 ADD 0.0378373 0.226134 0.0279968 0.0619226 1 427 427 2 1 0.19332 1 494 ADD 0.09836 0.262449 0.140459 0.150074 1 428 428 2 1 0.192308 1 494 ADD 0.25426 0.241674 1.10687 0.533483 1 429 429 2 1 0.22166 1 494 ADD 0.14721 0.237802 0.383212 0.270925 1 430 430 2 1 0.225709 1 494 ADD 0.278268 0.223631 1.54832 0.670839 1 431 431 2 1 0.200405 1 494 ADD -0.26871 0.219408 1.4999 0.656223 1 432 432 2 1 0.194332 1 494 ADD -0.226225 0.237684 0.905906 0.466987 1 433 433 2 1 0.187247 1 494 ADD -0.117095 0.24086 0.236346 0.202831 1 434 434 2 1 0.229757 1 494 ADD 0.0478362 0.221533 0.0466272 0.0814246 1 435 435 2 1 0.215587 1 494 ADD -0.11193 0.230876 0.235038 0.202169 1 436 436 2 1 0.198381 1 494 ADD -0.102686 0.235687 0.189825 0.178446 1 437 437 2 1 0.187247 1 494 ADD 0.728619 0.24406 8.84078 2.53081 1 438 438 2 1 0.19332 1 494 ADD 0.0639365 0.257064 0.061861 0.0949717 1 439 439 2 1 0.211538 1 494 ADD 0.0643578 0.227473 0.0800465 0.109448 1 440 440 2 1 0.208502 1 494 ADD -0.178705 0.230782 0.599609 0.357805 1 441 441 2 1 0.17915 1 494 ADD -0.149983 0.246238 0.371001 0.265633 1 442 442 2 1 0.192308 1 494 ADD -0.121635 0.23594 0.265772 0.217397 1 443 443 2 1 0.210526 1 494 ADD 0.316958 0.234743 1.82314 0.752174 1 444 444 2 1 0.212551 1 494 ADD -0.0059142 0.2386 0.000614398 0.00867431 1 445 445 2 1 0.183198 1 494 ADD 0.382624 0.260668 2.1546 0.847274 1 446 446 2 1 0.211538 1 494 ADD -0.210875 0.227938 0.855887 0.449903 1 447 447 2 1 0.228745 1 494 ADD -0.284376 0.231705 1.50632 0.658167 1 448 448 2 1 0.212551 1 494 ADD -0.0950486 0.23883 0.158385 0.160743 1 449 449 2 1 0.190283 1 494 ADD 0.461651 0.231861 3.96434 1.33279 1 450 450 2 1 0.199393 1 494 ADD 0.45498 0.234569 3.76221 1.28047 1 451 451 2 1 0.219636 1 494 ADD 0.334421 0.221311 2.28338 0.883504 1 452 452 2 1 0.205466 1 494 ADD -0.0479219 0.231013 0.0430323 0.077968 1 453 453 2 1 0.203441 1 494 ADD 0.234922 0.240263 0.956035 0.483877 1 454 454 2 1 0.196356 1 494 ADD -0.155836 0.234057 0.443291 0.296246 1 455 455 2 1 0.209514 1 494 ADD -0.330102 0.237573 1.93065 0.783339 1 456 456 2 1 0.173077 1 494 ADD 0.144614 0.26702 0.293312 0.230545 1 457 457 2 1 0.210526 1 494 ADD 0.145348 0.234285 0.384882 0.271644 1 458 458 2 1 0.196356 1 494 ADD 0.140847 0.234703 0.360127 0.260874 1 459 459 2 1 0.208502 1 494 ADD 0.193186 0.233238 0.686043 0.389858 1 460 460 2 1 0.203441 1 494 ADD 0.21919 0.23817 0.846969 0.446832 1 461 461 2 1 0.215587 1 494 ADD 0.0552649 0.217075 0.0648158 0.0974314 1 462 462 2 1 0.219636 1 494 ADD 0.502447 0.232709 4.66178 1.51087 1 463 463 2 1 0.181174 1 494 ADD 0.304298 0.254609 1.42841 0.634466 1 464 464 2 1 0.189271 1 494 ADD 0.116401 0.240485 0.234283 0.201787 1 465 465 2 1 0.20749 1 494 ADD 0.492254 0.244773 4.04438 1.35341 1 466 466 2 1 0.187247 1 494 ADD -0.286202 0.233459 1.50287 0.657124 1 467 467 2 1 0.222672 1 494 ADD -0.327509 0.237497 1.90165 0.774965 1 468 468 2 1 0.201417 1 494 ADD 0.314591 0.245737 1.6389 0.697936 1 469 469 2 1 0.209514 1 494 ADD -0.0718081 0.240121 0.0894309 0.116394 1 470 470 2 1 0.20749 1 494 ADD -0.146232 0.238125 0.377114 0.268289 1 471 471 2 1 0.201417 1 494 ADD -0.233836 0.230135 1.03242 0.509212 1 472 472 2 1 0.205466 1 494 ADD -0.17052 0.23098 0.545008 0.336898 1 473 473 2 1 0.206478 1 494 ADD 0.26603 0.240309 1.22553 0.571414 1 474 474 2 1 0.206478 1 494 ADD -0.321393 0.238402 1.81741 0.750504 1 475 475 2 1 0.197368 1 494 ADD 0.16096 0.234656 0.470515 0.307373 1 476 476 2 1 0.177126 1 494 ADD 0.318222 0.264096 1.4519 0.641639 1 477 477 2 1 0.204453 1 494 ADD -0.246297 0.23133 1.13359 0.542103 1 478 478 2 1 0.190283 1 494 ADD -0.319282 0.244343 1.70746 0.718251 1 479 479 2 1 0.200405 1 494 ADD 0.088342 0.23918 0.136422 0.147603 1 480 480 2 1 0.202429 1 494 ADD -0.367588 0.241076 2.32495 0.895122 1 481 481 2 1 0.214575 1 494 ADD -0.0688842 0.215156 0.102502 0.125607 1 482 482 2 1 0.224696 1 494 ADD -0.247391 0.229359 1.16341 0.551666 1 483 483 2 1 0.209514 1 494 ADD -0.0761799 0.245489 0.0962979 0.121295 1 484 484 2 1 0.192308 1 494 ADD 0.239937 0.245257 0.957087 0.48423 1 485 485 2 1 0.200405 1 494 ADD -0.176733 0.243536 0.526638 0.329732 1 486 486 2 1 0.20749 1 494 ADD -0.0285663 0.23836 0.0143628 0.0435405 1 487 487 2 1 0.189271 1 494 ADD 0.241237 0.239242 1.01675 0.504051 1 488 488 2 1 0.175101 1 494 ADD 0.199374 0.24945 0.638806 0.372487 1 489 489 2 1 0.184211 1 494 ADD -0.0551669 0.240631 0.0525597 0.0868924 1 490 490 2 1 0.206478 1 494 ADD 0.0445959 0.242774 0.0337432 0.0684129 1 491 491 2 1 0.194332 1 494 ADD -0.172776 0.241915 0.510081 0.323212 1 492 492 2 1 0.208502 1 494 ADD -0.412855 0.235595 3.07089 1.09851 1 493 493 2 1 0.186235 1 494 ADD -0.391253 0.247675 2.49547 0.942432 1 494 494 2 1 0.197368 1 494 ADD -0.655712 0.250739 7.25122 2.14964 1 495 495 2 1 0.189271 1 494 ADD -0.249574 0.25173 0.982941 0.492854 1 496 496 2 1 0.199393 1 494 ADD 0.306995 0.239526 1.64269 0.699064 1 497 497 2 1 0.217611 1 494 ADD -0.130407 0.225958 0.33308 0.248836 1 498 498 2 1 0.201417 1 494 ADD -0.225674 0.236261 0.912386 0.469183 1 499 499 2 1 0.197368 1 494 ADD -0.102442 0.22702 0.203622 0.185877 1 500 500 2 1 0.192308 1 494 ADD 0.119692 0.231191 0.268035 0.218494 1 501 501 2 1 0.0941296 1 494 ADD -0.436143 0.326923 1.77978 0.739508 1 502 502 2 1 0.090081 1 494 ADD 0.310088 0.331368 0.875688 0.456695 1 503 503 2 1 0.110324 1 494 ADD 0.00955919 0.295072 0.00104951 0.0113714 1 504 504 2 1 0.105263 1 494 ADD -0.198829 0.29301 0.460463 0.303288 1 505 505 2 1 0.090081 1 494 ADD 0.102455 0.337407 0.0922059 0.118392 1 506 506 2 1 0.0921053 1 494 ADD -0.440926 0.344414 1.63897 0.697958 1 507 507 2 1 0.0991903 1 494 ADD -0.276535 0.311384 0.788693 0.426553 1 508 508 2 1 0.11336 1 494 ADD -0.381384 0.29551 1.66564 0.70588 1 509 509 2 1 0.118421 1 494 ADD 0.0492791 0.295938 0.0277283 0.0616058 1 510 510 2 1 0.0850202 1 494 ADD 0.175166 0.356854 0.240946 0.205147 1 511 511 2 1 0.102227 1 494 ADD 0.442525 0.309508 2.04424 0.815924 1 512 512 2 1 0.0840081 1 494 ADD 0.404764 0.340089 1.4165 0.630821 1 513 513 2 1 0.0941296 1 494 ADD -0.187753 0.353107 0.282722 0.22554 1 514 514 2 1 0.0961538 1 494 ADD -0.290289 0.335819 0.747222 0.411889 1 515 515 2 1 0.120445 1 494 ADD -0.273577 0.293766 0.867278 0.453815 1 516 516 2 1 0.118421 1 494 ADD -0.0311153 0.272691 0.0130198 0.0413621 1 517 517 2 1 0.107287 1 494 ADD 0.0467026 0.302144 0.0238922 0.0569214 1 518 518 2 1 0.090081 1 494 ADD -0.274852 0.328647 0.699418 0.394717 1 519 519 2 1 0.097166 1 494 ADD 0.0331264 0.314412 0.0111007 0.0380618 1 520 520 2 1 0.0961538 1 494 ADD 0.67885 0.32347 4.40432 1.44553 1 521 521 2 1 0.0981781 1 494 ADD -0.22432 0.321376 0.487203 0.314099 1 522 522 2 1 0.101215 1 494 ADD -0.336213 0.330141 1.03713 0.510757 1 523 523 2 1 0.118421 1 494 ADD -0.194195 0.288911 0.451804 0.299747 1 524 524 2 1 0.097166 1 494 ADD 0.0436768 0.318337 0.0188247 0.0501856 1 525 525 2 1 0.0981781 1 494 ADD 0.0439357 0.304233 0.0208556 0.0529718 1 526 526 2 1 0.107287 1 494 ADD -0.154487 0.304537 0.257339 0.213281 1 527 527 2 1 0.102227 1 494 ADD -0.497902 0.309017 2.59611 0.970103 1 528 528 2 1 0.112348 1 494 ADD 0.419456 0.301802 1.93164 0.783626 1 529 529 2 1 0.107287 1 494 ADD 0.202182 0.315614 0.41037 0.282511 1 530 530 2 1 0.103239 1 494 ADD -0.284723 0.314279 0.820758 0.437756 1 531 531 2 1 0.097166 1 494 ADD 0.45056 0.306155 2.16583 0.850446 1 532 532 2 1 0.111336 1 494 ADD -0.12298 0.302944 0.164796 0.16445 1 533 533 2 1 0.103239 1 494 ADD -0.00615803 0.331467 0.000345145 0.00648543 1 534 534 2 1 0.0910931 1 494 ADD 0.0614936 0.35137 0.0306289 0.064961 1 535 535 2 1 0.105263 1 494 ADD -0.56162 0.308947 3.30458 1.1606 1 536 536 2 1 0.123482 1 494 ADD 0.0686062 0.280172 0.0599623 0.0933657 1 537 537 2 1 0.0931174 1 494 ADD -0.261754 0.334214 0.613392 0.362997 1 538 538 2 1 0.097166 1 494 ADD -0.591172 0.340475 3.01479 1.0835 1 539 539 2 1 0.0809717 1 494 ADD 0.288105 0.339798 0.718885 0.401746 1 540 540 2 1 0.102227 1 494 ADD -0.415544 0.317059 1.71772 0.721276 1 541 541 2 1 0.0910931 1 494 ADD -0.208688 0.314065 0.441523 0.295516 1 542 542 2 1 0.110324 1 494 ADD -0.275261 0.33381 0.679969 0.387643 1 543 543 2 1 0.109312 1 494 ADD 0.260132 0.306144 0.721994 0.402864 1 544 544 2 1 0.0961538 1 494 ADD -0.220378 0.310263 0.504515 0.321006 1 545 545 2 1 0.0951417 1 494 ADD 0.358749 0.329067 1.18854 0.559682 1 546 546 2 1 0.0991903 1 494 ADD -0.180057 0.334088 0.29047 0.229207 1 547 547 2 1 0.097166 1 494 ADD 0.377218 0.297313 1.60975 0.689249 1 548 548 2 1 0.0941296 1 494 ADD 0.0172713 0.33197 0.00270679 0.0184045 1 549 549 2 1 0.0951417 1 494 ADD -0.353715 0.305211 1.34309 0.608202 1 550 550 2 1 0.0961538 1 494 ADD 0.488113 0.28927 2.8473 1.03845 1 551 551 2 1 0.103239 1 494 ADD -0.327791 0.311237 1.10921 0.534239 1 552 552 2 1 0.0931174 1 494 ADD 0.528817 0.333953 2.50749 0.945747 1 553 553 2 1 0.0981781 1 494 ADD -0.197011 0.317247 0.385644 0.271973 1 554 554 2 1 0.100202 1 494 ADD 0.824718 0.296976 7.50068 2.20989 1 555 555 2 1 0.105263 1 494 ADD 0.0664456 0.315261 0.0444214 0.0793177 1 556 556 2 1 0.0961538 1 494 ADD -0.59352 0.313385 3.58686 1.23479 1 557 557 2 1 0.082996 1 494 ADD -0.820179 0.360396 5.17913 1.64093 1 558 558 2 1 0.0991903 1 494 ADD -0.0604722 0.279883 0.0466831 0.0814775 1 559 559 2 1 0.0981781 1 494 ADD -0.22426 0.318886 0.494576 0.317049 1 560 560 2 1 0.107287 1 494 ADD 0.0816086 0.322466 0.0640477 0.0967965 1 561 561 2 1 0.0789474 1 494 ADD -0.324927 0.308107 1.11217 0.535196 1 562 562 2 1 0.101215 1 494 ADD 0.726097 0.328889 4.87406 1.56442 1 563 563 2 1 0.0991903 1 494 ADD -0.282247 0.318377 0.785917 0.425578 1 564 564 2 1 0.107287 1 494 ADD -0.314569 0.301737 1.08686 0.526999 1 565 565 2 1 0.103239 1 494 ADD -0.0507034 0.310511 0.0266636 0.060336 1 566 566 2 1 0.0981781 1 494 ADD 0.180708 0.317846 0.323236 0.244377 1 567 567 2 1 0.101215 1 494 ADD 0.0743624 0.29151 0.065073 0.0976433 1 568 568 2 1 0.0981781 1 494 ADD 0.511137 0.338147 2.28488 0.883922 1 569 569 2 1 0.0951417 1 494 ADD 0.0731738 0.331255 0.0487962 0.0834559 1 570 570 2 1 0.100202 1 494 ADD -0.460413 0.31248 2.17096 0.851895 1 571 571 2 1 0.0890688 1 494 ADD 0.180927 0.3386 0.285517 0.226867 1 572 572 2 1 0.119433 1 494 ADD -0.228535 0.294676 0.601473 0.358509 1 573 573 2 1 0.0921053 1 494 ADD 0.375456 0.342802 1.19959 0.563195 1 574 574 2 1 0.090081 1 494 ADD 0.00581415 0.338572 0.000294897 0.00599143 1 575 575 2 1 0.0931174 1 494 ADD -0.0765169 0.310069 0.0608972 0.0941591 1 576 576 2 1 0.116397 1 494 ADD -0.146635 0.287723 0.259734 0.214455 1 577 577 2 1 0.0921053 1 494 ADD -0.381399 0.345533 1.21838 0.569152 1 578 578 2 1 0.0850202 1 494 ADD -0.351122 0.363064 0.935301 0.476918 1 579 579 2 1 0.107287 1 494 ADD 0.424554 0.302515 1.96956 0.794541 1 580 580 2 1 0.109312 1 494 ADD -0.587852 0.291894 4.05589 1.35638 1 581 581 2 1 0.102227 1 494 ADD 0.0873115 0.29797 0.0858615 0.113788 1 582 582 2 1 0.100202 1 494 ADD -0.198621 0.337732 0.345866 0.254564 1 583 583 2 1 0.105263 1 494 ADD 0.408208 0.33393 1.49435 0.654542 1 584 584 2 1 0.102227 1 494 ADD -0.40841 0.305103 1.79185 0.74304 1 585 585 2 1 0.102227 1 494 ADD 0.196912 0.304119 0.419234 0.286241 1 586 586 2 1 0.0910931 1 494 ADD -0.349025 0.348287 1.00424 0.499921 1 587 587 2 1 0.118421 1 494 ADD 0.0416863 0.294488 0.0200379 0.0518653 1 588 588 2 1 0.100202 1 494 ADD 0.340765 0.322271 1.11806 0.5371 1 589 589 2 1 0.105263 1 494 ADD 0.177953 0.303563 0.343646 0.253574 1 590 590 2 1 0.0910931 1 494 ADD 0.296492 0.310501 0.911801 0.468985 1 591 591 2 1 0.0961538 1 494 ADD 0.013249 0.34901 0.00144109 0.0133544 1 592 592 2 1 0.102227 1 494 ADD 0.465436 0.347409 1.79489 0.743928 1 593 593 2 1 0.0991903 1 494 ADD 0.0934979 0.335674 0.077583 0.107571 1 594 594 2 1 0.0931174 1 494 ADD -0.169601 0.319473 0.28183 0.225115 1 595 595 2 1 0.0880567 1 494 ADD -0.201814 0.345762 0.340683 0.25225 1 596 596 2 1 0.097166 1 494 ADD -0.167482 0.331951 0.254558 0.211914 1 597 597 2 1 0.124494 1 494 ADD 0.190094 0.278027 0.467482 0.306143 1 598 598 2 1 0.0921053 1 494 ADD -0.37021 0.32461 1.30069 0.595016 1 599 599 2 1 0.0840081 1 494 ADD 0.573399 0.345478 2.75469 1.01336 1 600 600 2 1 0.0951417 1 494 ADD 0.453057 0.322865 1.96908 0.794401 1 601 601 2 1 0.0880567 1 494 ADD -0.308767 0.347657 0.788789 0.426587 1 602 602 2 1 0.104251 1 494 ADD -0.0118625 0.308863 0.00147508 0.0135134 1 603 603 2 1 0.0981781 1 494 ADD 0.00980135 0.317011 0.000955924 0.0108462 1 604 604 2 1 0.102227 1 494 ADD 0.6312 0.314387 4.03093 1.34995 1 605 605 2 1 0.100202 1 494 ADD 0.354484 0.317973 1.24283 0.576874 1 606 606 2 1 0.0890688 1 494 ADD 0.226357 0.362994 0.388858 0.273354 1 607 607 2 1 0.0991903 1 494 ADD 0.391518 0.308032 1.61552 0.690971 1 608 608 2 1 0.0860324 1 494 ADD -0.203021 0.343307 0.349716 0.256275 1 609 609 2 1 0.105263 1 494 ADD 0.254146 0.33115 0.589003 0.353788 1 610 610 2 1 0.0870445 1 494 ADD -0.199706 0.317443 0.395779 0.276317 1 611 611 2 1 0.0931174 1 494 ADD -0.747393 0.354263 4.45087 1.45738 1 612 612 2 1 0.0991903 1 494 ADD -0.063561 0.298737 0.0452692 0.0801326 1 613 613 2 1 0.0931174 1 494 ADD 0.455252 0.338464 1.80917 0.748098 1 614 614 2 1 0.101215 1 494 ADD -0.190535 0.328875 0.33565 0.249992 1 615 615 2 1 0.102227 1 494 ADD 0.287376 0.300412 0.915093 0.470099 1 616 616 2 1 0.090081 1 494 ADD -0.177886 0.315293 0.318315 0.242132 1 617 617 2 1 0.0921053 1 494 ADD -0.158722 0.37289 0.18118 0.173691 1 618 618 2 1 0.116397 1 494 ADD 0.144019 0.303738 0.224824 0.196961 1 619 619 2 1 0.082996 1 494 ADD -1.50511 0.433968 14.3319 3.81462 1 620 620 2 1 0.110324 1 494 ADD 0.319165 0.278322 1.31503 0.599485 1 621 621 2 1 0.0910931 1 494 ADD -0.434971 0.327481 1.7642 0.734943 1 622 622 2 1 0.110324 1 494 ADD 0.00335707 0.289329 0.000134628 0.00403925 1 623 623 2 1 0.0981781 1 494 ADD 0.11689 0.340496 0.11785 0.135858 1 624 624 2 1 0.110324 1 494 ADD 0.236098 0.336082 0.49351 0.316624 1 625 625 2 1 0.100202 1 494 ADD 0.429245 0.285215 2.26498 0.878347 1 626 626 2 1 0.106275 1 494 ADD 0.433645 0.309938 1.95758 0.791095 1 627 627 2 1 0.109312 1 494 ADD -0.320424 0.289873 1.2219 0.570267 1 628 628 2 1 0.0840081 1 494 ADD -0.616213 0.343009 3.22739 1.14016 1 629 629 2 1 0.0961538 1 494 ADD 0.167743 0.301854 0.308811 0.237764 1 630 630 2 1 0.0961538 1 494 ADD 0.0365878 0.303249 0.0145571 0.0438479 1 631 631 2 1 0.0860324 1 494 ADD 0.103795 0.328547 0.0998064 0.123746 1 632 632 2 1 0.104251 1 494 ADD 0.310586 0.313347 0.982457 0.492694 1 633 633 2 1 0.119433 1 494 ADD 0.00278218 0.274045 0.000103068 0.00353219 1 634 634 2 1 0.0941296 1 494 ADD -0.0578071 0.316995 0.0332551 0.0678814 1 635 635 2 1 0.102227 1 494 ADD 0.496969 0.289865 2.93945 1.06329 1 636 636 2 1 0.0991903 1 494 ADD 0.0180658 0.304152 0.00352804 0.0210732 1 637 637 2 1 0.102227 1 494 ADD 0.126479 0.332471 0.144721 0.152654 1 638 638 2 1 0.111336 1 494 ADD 0.0436574 0.294947 0.0219093 0.0543696 1 639 639 2 1 0.111336 1 494 ADD -0.581278 0.305376 3.62325 1.2443 1 640 640 2 1 0.0991903 1 494 ADD 0.417522 0.322791 1.67307 0.708083 1 641 641 2 1 0.0991903 1 494 ADD 0.108077 0.318881 0.114871 0.13391 1 642 642 2 1 0.109312 1 494 ADD 0.0848109 0.302968 0.0783629 0.108168 1 643 643 2 1 0.104251 1 494 ADD -0.198427 0.325269 0.372148 0.266133 1 644 644 2 1 0.097166 1 494 ADD -0.0469447 0.332968 0.0198777 0.0516462 1 645 645 2 1 0.1083 1 494 ADD -0.0480022 0.30452 0.0248479 0.0581177 1 646 646 2 1 0.0880567 1 494 ADD 0.123623 0.335671 0.135635 0.147118 1 647 647 2 1 0.111336 1 494 ADD 0.36958 0.29253 1.59616 0.685188 1 648 648 2 1 0.0981781 1 494 ADD 0.672383 0.313677 4.59481 1.49392 1 649 649 2 1 0.126518 1 494 ADD -0.17034 0.271135 0.394695 0.275854 1 650 650 2 1 0.1083 1 494 ADD -0.147151 0.288967 0.259317 0.214251 1 651 651 2 1 0.124494 1 494 ADD 0.169238 0.306522 0.304839 0.235925 1 652 652 2 1 0.100202 1 494 ADD 0.236572 0.329367 0.515904 0.325512 1 653 653 2 1 0.102227 1 494 ADD -0.254036 0.32999 0.592637 0.355166 1 654 654 2 1 0.0921053 1 494 ADD -0.240042 0.318119 0.56937 0.346296 1 655 655 2 1 0.0921053 1 494 ADD 0.322536 0.340868 0.89533 0.463395 1 656 656 2 1 0.0809717 1 494 ADD 0.603658 0.342091 3.11386 1.10998 1 657 657 2 1 0.104251 1 494 ADD -0.0829316 0.310929 0.0711403 0.102547 1 658 658 2 1 0.097166 1 494 ADD -0.342029 0.316176 1.17022 0.553843 1 659 659 2 1 0.105263 1 494 ADD -0.0946202 0.319957 0.0874547 0.114957 1 660 660 2 1 0.101215 1 494 ADD -0.373496 0.344597 1.17476 0.55529 1 661 661 2 1 0.115385 1 494 ADD 0.0664295 0.287107 0.0535344 0.0877654 1 662 662 2 1 0.0951417 1 494 ADD -0.6004 0.313048 3.67842 1.25868 1 663 663 2 1 0.104251 1 494 ADD -0.01625 0.301644 0.00290213 0.019071 1 664 664 2 1 0.118421 1 494 ADD 0.126744 0.278869 0.206565 0.187439 1 665 665 2 1 0.107287 1 494 ADD -0.744817 0.315733 5.56494 1.73699 1 666 666 2 1 0.0961538 1 494 ADD 0.593632 0.313519 3.58514 1.23434 1 667 667 2 1 0.090081 1 494 ADD 0.180964 0.334361 0.292922 0.230361 1 668 668 2 1 0.0799595 1 494 ADD 0.312292 0.331877 0.885455 0.460031 1 669 669 2 1 0.0951417 1 494 ADD 0.104018 0.30973 0.112784 0.132534 1 670 670 2 1 0.0921053 1 494 ADD 0.0447955 0.332924 0.0181042 0.049165 1 671 671 2 1 0.1083 1 494 ADD 0.00190864 0.297955 4.10343e-05 0.0022254 1 672 672 2 1 0.097166 1 494 ADD -0.48063 0.329908 2.12244 0.838169 1 673 673 2 1 0.097166 1 494 ADD 0.246399 0.360598 0.46691 0.305911 1 674 674 2 1 0.103239 1 494 ADD -0.289069 0.304386 0.901892 0.465625 1 675 675 2 1 0.111336 1 494 ADD -0.0402951 0.292478 0.0189809 0.0504045 1 676 676 2 1 0.106275 1 494 ADD 0.0284315 0.323399 0.00772896 0.0315429 1 677 677 2 1 0.090081 1 494 ADD 0.289791 0.35093 0.681915 0.388353 1 678 678 2 1 0.0951417 1 494 ADD -0.0614315 0.305285 0.0404922 0.0754513 1 679 679 2 1 0.11336 1 494 ADD -0.374606 0.301244 1.54637 0.670252 1 680 680 2 1 0.102227 1 494 ADD 0.290837 0.301849 0.928369 0.474583 1 681 681 2 1 0.12247 1 494 ADD -0.18676 0.290505 0.413296 0.283745 1 682 682 2 1 0.097166 1 494 ADD -0.156277 0.354132 0.194741 0.181115 1 683 683 2 1 0.101215 1 494 ADD 0.272695 0.309501 0.7763 0.422192 1 684 684 2 1 0.0860324 1 494 ADD 0.29743 0.331155 0.806692 0.432856 1 685 685 2 1 0.0931174 1 494 ADD 0.504035 0.32166 2.45543 0.931373 1 686 686 2 1 0.082996 1 494 ADD 0.278421 0.345914 0.64784 0.375836 1 687 687 2 1 0.0840081 1 494 ADD 0.0152457 0.321919 0.00224286 0.0167224 1 688 688 2 1 0.100202 1 494 ADD -0.0440424 0.314047 0.0196677 0.0513576 1 689 689 2 1 0.0890688 1 494 ADD -0.428954 0.324062 1.75213 0.731399 1 690 690 2 1 0.101215 1 494 ADD 0.495217 0.306018 2.61877 0.976309 1 691 691 2 1 0.0921053 1 494 ADD 0.0600308 0.366272 0.0268622 0.0605745 1 692 692 2 1 0.0991903 1 494 ADD -0.0622685 0.336887 0.034164 0.0688685 1 693 693 2 1 0.12247 1 494 ADD 0.20889 0.286301 0.532342 0.331965 1 694 694 2 1 0.0850202 1 494 ADD 0.138027 0.354657 0.151465 0.15668 1 695 695 2 1 0.0991903 1 494 ADD 0.0421837 0.32922 0.0164178 0.0467021 1 696 696 2 1 0.107287 1 494 ADD 0.408166 0.30228 1.82328 0.752215 1 697 697 2 1 0.103239 1 494 ADD 0.0195487 0.305664 0.00409022 0.022731 1 698 698 2 1 0.102227 1 494 ADD 0.62237 0.307755 4.08964 1.36505 1 699 699 2 1 0.100202 1 494 ADD 0.106159 0.330715 0.103039 0.125975 1 700 700 2 1 0.097166 1 494 ADD -0.35219 0.323003 1.18889 0.559794 1 701 701 2 1 0.0931174 1 494 ADD -0.0913276 0.309074 0.0873131 0.114853 1 702 702 2 1 0.102227 1 494 ADD -0.0411284 0.31314 0.0172507 0.0479321 1 703 703 2 1 0.124494 1 494 ADD 0.368346 0.292056 1.59068 0.683548 1 704 704 2 1 0.101215 1 494 ADD 0.104827 0.323346 0.105102 0.127383 1 705 705 2 1 0.0991903 1 494 ADD -0.0834127 0.323988 0.0662837 0.0986361 1 706 706 2 1 0.104251 1 494 ADD 0.371069 0.320284 1.34226 0.607945 1 707 707 2 1 0.0931174 1 494 ADD 0.431687 0.306936 1.97806 0.796982 1 708 708 2 1 0.0910931 1 494 ADD 0.0369178 0.308988 0.0142754 0.0434016 1 709 709 2 1 0.101215 1 494 ADD -0.368832 0.326152 1.27884 0.588187 1 710 710 2 1 0.0991903 1 494 ADD -0.0679006 0.341843 0.0394542 0.0744035 1 711 711 2 1 0.12753 1 494 ADD -0.0981107 0.285537 0.118062 0.135996 1 712 712 2 1 0.0769231 1 494 ADD -0.441524 0.345384 1.6342 0.696537 1 713 713 2 1 0.104251 1 494 ADD 0.219182 0.328427 0.44538 0.297107 1 714 714 2 1 0.103239 1 494 ADD -0.223007 0.28944 0.593634 0.355544 1 715 715 2 1 0.0870445 1 494 ADD -0.252563 0.326983 0.596608 0.356671 1 716 716 2 1 0.0951417 1 494 ADD -0.075434 0.332345 0.0515177 0.0859515 1 717 717 2 1 0.111336 1 494 ADD -0.194333 0.276109 0.495369 0.317366 1 718 718 2 1 0.101215 1 494 ADD -0.349951 0.289619 1.46003 0.644118 1 719 719 2 1 0.0961538 1 494 ADD 0.185264 0.326076 0.322809 0.244183 1 720 720 2 1 0.103239 1 494 ADD 0.262951 0.30762 0.730667 0.405975 1 721 721 2 1 0.0981781 1 494 ADD 0.611909 0.313935 3.79921 1.29008 1 722 722 2 1 0.0850202 1 494 ADD -0.496555 0.317464 2.44651 0.928904 1 723 723 2 1 0.115385 1 494 ADD 0.422743 0.303129 1.94489 0.787444 1 724 724 2 1 0.120445 1 494 ADD 0.259153 0.280662 0.852601 0.448773 1 725 725 2 1 0.0941296 1 494 ADD 0.601641 0.340177 3.12799 1.11374 1 726 726 2 1 0.103239 1 494 ADD 0.122195 0.320673 0.145206 0.152946 1 727 727 2 1 0.0991903 1 494 ADD -0.539699 0.322548 2.79972 1.02558 1 728 728 2 1 0.1083 1 494 ADD 0.470551 0.31614 2.21541 0.864427 1 729 729 2 1 0.0890688 1 494 ADD -0.197758 0.345709 0.327225 0.246189 1 730 730 2 1 0.0951417 1 494 ADD 0.0226142 0.344256 0.00431518 0.0233637 1 731 731 2 1 0.0991903 1 494 ADD -0.679177 0.3328 4.16487 1.38436 1 732 732 2 1 0.0981781 1 494 ADD -0.472029 0.328014 2.07087 0.823516 1 733 733 2 1 0.0840081 1 494 ADD 0.483733 0.328544 2.16782 0.851009 1 734 734 2 1 0.109312 1 494 ADD 0.20891 0.297766 0.492228 0.316111 1 735 735 2 1 0.0870445 1 494 ADD -0.212645 0.318953 0.444485 0.296738 1 736 736 2 1 0.1083 1 494 ADD 0.26843 0.309415 0.752624 0.413811 1 737 737 2 1 0.0890688 1 494 ADD 0.376959 0.312176 1.45811 0.643531 1 738 738 2 1 0.121457 1 494 ADD 0.145689 0.26711 0.297489 0.232502 1 739 739 2 1 0.0981781 1 494 ADD -0.0528801 0.309473 0.0291971 0.0633231 1 740 740 2 1 0.121457 1 494 ADD 0.251144 0.2854 0.774354 0.421506 1 741 741 2 1 0.0941296 1 494 ADD 0.728732 0.310343 5.51382 1.7243 1 742 742 2 1 0.0981781 1 494 ADD -0.16799 0.292482 0.329888 0.247395 1 743 743 2 1 0.0880567 1 494 ADD -0.207039 0.347466 0.355042 0.258633 1 744 744 2 1 0.106275 1 494 ADD 0.265025 0.305393 0.7531 0.41398 1 745 745 2 1 0.0890688 1 494 ADD -0.243662 0.349314 0.486568 0.313845 1 746 746 2 1 0.1083 1 494 ADD -0.103813 0.325153 0.101937 0.125218 1 747 747 2 1 0.100202 1 494 ADD 0.482516 0.349913 1.90153 0.774932 1 748 748 2 1 0.0981781 1 494 ADD -0.0639759 0.322693 0.0393055 0.0742525 1 749 749 2 1 0.0981781 1 494 ADD 0.624201 0.331865 3.53774 1.22194 1 750 750 2 1 0.111336 1 494 ADD 0.0580158 0.302329 0.0368243 0.0716947 1 751 751 2 1 0.0870445 1 494 ADD -0.156513 0.351523 0.198239 0.183 1 752 752 2 1 0.111336 1 494 ADD -0.215062 0.287642 0.559013 0.342315 1 753 753 2 1 0.0931174 1 494 ADD -0.0399905 0.31757 0.0158575 0.0458588 1 754 754 2 1 0.0910931 1 494 ADD 0.255346 0.329684 0.599878 0.357907 1 755 755 2 1 0.107287 1 494 ADD 0.513648 0.310949 2.72868 1.0063 1 756 756 2 1 0.0981781 1 494 ADD -0.196656 0.313598 0.393251 0.275237 1 757 757 2 1 0.103239 1 494 ADD 0.279992 0.325451 0.740154 0.409368 1 758 758 2 1 0.0951417 1 494 ADD 0.819266 0.310904 6.77517 2.03416 1 759 759 2 1 0.0961538 1 494 ADD 0.245266 0.31554 0.604179 0.35953 1 760 760 2 1 0.106275 1 494 ADD -0.309298 0.296397 1.08895 0.527676 1 761 761 2 1 0.1083 1 494 ADD -0.171865 0.313403 0.300727 0.234013 1 762 762 2 1 0.0890688 1 494 ADD 0.122688 0.337279 0.132321 0.145064 1 763 763 2 1 0.0921053 1 494 ADD 0.363825 0.33193 1.20141 0.563774 1 764 764 2 1 0.106275 1 494 ADD 0.0739797 0.313886 0.0555498 0.08955 1 765 765 2 1 0.0890688 1 494 ADD 0.224676 0.326546 0.473396 0.308539 1 766 766 2 1 0.115385 1 494 ADD 0.128133 0.293003 0.191239 0.179216 1 767 767 2 1 0.112348 1 494 ADD 0.45929 0.279713 2.69617 0.997447 1 768 768 2 1 0.103239 1 494 ADD -0.0463494 0.335352 0.0191023 0.050574 1 769 769 2 1 0.112348 1 494 ADD -0.207646 0.281981 0.542261 0.335831 1 770 770 2 1 0.100202 1 494 ADD 0.166074 0.317172 0.274167 0.221451 1 771 771 2 1 0.107287 1 494 ADD -0.136726 0.31038 0.19405 0.180741 1 772 772 2 1 0.0981781 1 494 ADD -0.026698 0.329301 0.00657311 0.0290107 1 773 773 2 1 0.104251 1 494 ADD 0.293707 0.316027 0.863734 0.4526 1 774 774 2 1 0.105263 1 494 ADD -0.0551695 0.304395 0.032849 0.0674365 1 775 775 2 1 0.0819838 1 494 ADD -0.00974098 0.348476 0.000781373 0.00979457 1 776 776 2 1 0.0991903 1 494 ADD -0.0514859 0.328703 0.0245341 0.0577272 1 777 777 2 1 0.100202 1 494 ADD -0.244458 0.297845 0.67364 0.385329 1 778 778 2 1 0.107287 1 494 ADD -0.296762 0.29798 0.991842 0.495811 1 779 779 2 1 0.119433 1 494 ADD 0.0642437 0.288952 0.0494322 0.0840442 1 780 780 2 1 0.0941296 1 494 ADD 0.338729 0.311938 1.17915 0.55669 1 781 781 2 1 0.111336 1 494 ADD -0.0481514 0.303728 0.0251332 0.0584709 1 782 782 2 1 0.101215 1 494 ADD -0.158085 0.344591 0.210462 0.189495 1 783 783 2 1 0.104251 1 494 ADD -0.0236376 0.303662 0.00605935 0.0278185 1 784 784 2 1 0.090081 1 494 ADD -0.290561 0.32478 0.80038 0.43065 1 785 785 2 1 0.0991903 1 494 ADD -0.0354098 0.309865 0.0130587 0.0414266 1 786 786 2 1 0.106275 1 494 ADD -0.93239 0.339799 8.48722 2.44654 1 787 787 2 1 0.105263 1 494 ADD 0.196986 0.296909 0.440173 0.294958 1 788 788 2 1 0.0961538 1 494 ADD -0.0669659 0.325543 0.0423146 0.0772635 1 789 789 2 1 0.100202 1 494 ADD 0.575469 0.303442 3.5966 1.23734 1 790 790 2 1 0.082996 1 494 ADD 0.34616 0.345046 1.00647 0.500656 1 791 791 2 1 0.117409 1 494 ADD 0.228108 0.287404 0.629939 0.369188 1 792 792 2 1 0.082996 1 494 ADD 0.251363 0.343154 0.536567 0.333614 1 793 793 2 1 0.106275 1 494 ADD 0.229253 0.304041 0.568549 0.345981 1 794 794 2 1 0.0819838 1 494 ADD -0.961496 0.379548 7.01324 2.092 1 795 795 2 1 0.0931174 1 494 ADD -0.040321 0.322413 0.0156401 0.045528 1 796 796 2 1 0.109312 1 494 ADD 0.199684 0.305186 0.428113 0.289953 1 797 797 2 1 0.097166 1 494 ADD 0.459865 0.320896 2.05367 0.818614 1 798 798 2 1 0.0910931 1 494 ADD 0.199157 0.336986 0.349275 0.25608 1 799 799 2 1 0.0870445 1 494 ADD -0.173328 0.337347 0.263988 0.21653 1 800 800 2 1 0.0850202 1 494 ADD 0.183535 0.326348 0.316284 0.241202 1 801 801 2 1 0.0840081 1 494 ADD 0.120376 0.33571 0.128572 0.142718 1 802 802 2 1 0.102227 1 494 ADD -0.20224 0.324815 0.387667 0.272843 1 803 803 2 1 0.107287 1 494 ADD 0.422694 0.312827 1.82577 0.752939 1 804 804 2 1 0.0910931 1 494 ADD -0.333904 0.303474 1.21061 0.566691 1 805 805 2 1 0.0890688 1 494 ADD 0.0262905 0.321202 0.00669948 0.0292972 1 806 806 2 1 0.104251 1 494 ADD -0.133027 0.289116 0.211707 0.190149 1 807 807 2 1 0.101215 1 494 ADD 0.518187 0.309018 2.81194 1.02889 1 808 808 2 1 0.0961538 1 494 ADD -0.427605 0.321053 1.77391 0.737788 1 809 809 2 1 0.103239 1 494 ADD -0.212694 0.316732 0.450946 0.299395 1 810 810 2 1 0.0910931 1 494 ADD -0.14822 0.321204 0.212937 0.190794 1 811 811 2 1 0.121457 1 494 ADD 0.154717 0.30904 0.250638 0.209978 1 812 812 2 1 0.0870445 1 494 ADD 0.461988 0.345062 1.79253 0.743238 1 813 813 2 1 0.118421 1 494 ADD -0.302529 0.293549 1.06212 0.518941 1 814 814 2 1 0.117409 1 494 ADD -0.251453 0.298158 0.71125 0.398995 1 815 815 2 1 0.104251 1 494 ADD -0.134737 0.315843 0.181983 0.174136 1 816 816 2 1 0.107287 1 494 ADD 0.41279 0.307901 1.79737 0.744652 1 817 817 2 1 0.118421 1 494 ADD 0.573616 0.318533 3.24289 1.14428 1 818 818 2 1 0.0981781 1 494 ADD -0.224518 0.345962 0.421159 0.287048 1 819 819 2 1 0.0890688 1 494 ADD -0.391462 0.311626 1.57802 0.679757 1 820 820 2 1 0.114372 1 494 ADD 0.150255 0.296806 0.25628 0.212761 1 821 821 2 1 0.0840081 1 494 ADD 0.227747 0.360649 0.398783 0.277598 1 822 822 2 1 0.109312 1 494 ADD 0.217202 0.317121 0.469113 0.306805 1 823 823 2 1 0.101215 1 494 ADD -0.0117819 0.312598 0.00142054 0.0132575 1 824 824 2 1 0.0941296 1 494 ADD 0.016859 0.315112 0.00286242 0.0189373 1 825 825 2 1 0.0840081 1 494 ADD -0.136272 0.34522 0.15582 0.159245 1 826 826 2 1 0.111336 1 494 ADD -0.201846 0.294602 0.469428 0.306933 1 827 827 2 1 0.097166 1 494 ADD 0.0557876 0.336352 0.0275097 0.0613468 1 828 828 2 1 0.0981781 1 494 ADD 0.104453 0.326458 0.102374 0.125519 1 829 829 2 1 0.100202 1 494 ADD -0.419195 0.327063 1.64275 0.699081 1 830 830 2 1 0.0840081 1 494 ADD 0.0775549 0.315612 0.0603824 0.0937229 1 831 831 2 1 0.0961538 1 494 ADD -0.497017 0.321706 2.38685 0.912362 1 832 832 2 1 0.0941296 1 494 ADD 0.153953 0.301588 0.260585 0.214871 1 833 833 2 1 0.107287 1 494 ADD -0.288205 0.282754 1.03892 0.511348 1 834 834 2 1 0.0961538 1 494 ADD -0.248457 0.337375 0.542348 0.335865 1 835 835 2 1 0.107287 1 494 ADD -0.487755 0.314821 2.40036 0.916114 1 836 836 2 1 0.101215 1 494 ADD -0.389641 0.324417 1.44252 0.638779 1 837 837 2 1 0.102227 1 494 ADD 0.135945 0.313153 0.188456 0.177698 1 838 838 2 1 0.0961538 1 494 ADD -0.149826 0.328549 0.207955 0.188174 1 839 839 2 1 0.103239 1 494 ADD -0.668923 0.318222 4.41866 1.44919 1 840 840 2 1 0.0951417 1 494 ADD -0.208724 0.318111 0.430515 0.290954 1 841 841 2 1 0.106275 1 494 ADD -0.169803 0.297396 0.326002 0.245634 1 842 842 2 1 0.101215 1 494 ADD -0.585282 0.335572 3.042 1.09079 1 843 843 2 1 0.0931174 1 494 ADD -0.156612 0.333036 0.221142 0.195063 1 844 844 2 1 0.0779352 1 494 ADD -0.0769737 0.336234 0.0524085 0.0867563 1 845 845 2 1 0.0931174 1 494 ADD -0.219567 0.321335 0.466894 0.305904 1 846 846 2 1 0.115385 1 494 ADD 0.114671 0.288942 0.157502 0.160229 1 847 847 2 1 0.114372 1 494 ADD 0.0768471 0.293261 0.0686668 0.100569 1 848 848 2 1 0.1083 1 494 ADD 0.207336 0.302916 0.468493 0.306554 1 849 849 2 1 0.101215 1 494 ADD 0.324333 0.277197 1.369 0.616214 1 850 850 2 1 0.0941296 1 494 ADD 0.578325 0.336333 2.95669 1.06792 1 851 851 2 1 0.0951417 1 494 ADD -0.0446944 0.323085 0.0191369 0.0506224 1 852 852 2 1 0.0840081 1 494 ADD 0.68666 0.342331 4.02339 1.34801 1 853 853 2 1 0.119433 1 494 ADD 0.165057 0.28222 0.342052 0.252862 1 854 854 2 1 0.109312 1 494 ADD 0.107793 0.313249 0.118414 0.136224 1 855 855 2 1 0.116397 1 494 ADD -0.150818 0.288197 0.273859 0.221303 1 856 856 2 1 0.0981781 1 494 ADD 0.154224 0.307088 0.25222 0.210761 1 857 857 2 1 0.0981781 1 494 ADD -0.71047 0.359464 3.90643 1.31784 1 858 858 2 1 0.106275 1 494 ADD -0.256215 0.312279 0.673171 0.385157 1 859 859 2 1 0.0850202 1 494 ADD -0.184266 0.342895 0.28878 0.22841 1 860 860 2 1 0.104251 1 494 ADD 0.211303 0.317969 0.441615 0.295554 1 861 861 2 1 0.0961538 1 494 ADD 0.631858 0.331203 3.63958 1.24856 1 862 862 2 1 0.0931174 1 494 ADD 0.323357 0.332627 0.945037 0.48019 1 863 863 2 1 0.0991903 1 494 ADD -0.294522 0.32613 0.815558 0.435947 1 864 864 2 1 0.103239 1 494 ADD -0.747542 0.3021 6.71721 2.02006 1 865 865 2 1 0.0799595 1 494 ADD -0.159455 0.369365 0.186366 0.176553 1 866 866 2 1 0.0991903 1 494 ADD -0.0610923 0.314236 0.0377974 0.0727063 1 867 867 2 1 0.118421 1 494 ADD -0.356341 0.306278 1.35363 0.611464 1 868 868 2 1 0.110324 1 494 ADD 0.219799 0.306095 0.515633 0.325405 1 869 869 2 1 0.090081 1 494 ADD -0.18782 0.310294 0.366383 0.263617 1 870 870 2 1 0.102227 1 494 ADD -0.0804586 0.30742 0.0684982 0.100433 1 871 871 2 1 0.0809717 1 494 ADD -0.304277 0.358927 0.718665 0.401667 1 872 872 2 1 0.103239 1 494 ADD -0.282635 0.331933 0.725018 0.40395 1 873 873 2 1 0.0890688 1 494 ADD -0.136656 0.352269 0.15049 0.156103 1 874 874 2 1 0.110324 1 494 ADD 0.117748 0.29896 0.155125 0.158838 1 875 875 2 1 0.0991903 1 494 ADD -0.383708 0.327424 1.37335 0.617555 1 876 876 2 1 0.100202 1 494 ADD 0.0709819 0.323359 0.0481864 0.0828887 1 877 877 2 1 0.0981781 1 494 ADD -0.464502 0.327646 2.00986 0.806097 1 878 878 2 1 0.106275 1 494 ADD -0.370287 0.307215 1.45276 0.641901 1 879 879 2 1 0.109312 1 494 ADD 0.0968104 0.286451 0.11422 0.133483 1 880 880 2 1 0.0910931 1 494 ADD 0.351748 0.367194 0.917639 0.47096 1 881 881 2 1 0.0910931 1 494 ADD 0.109134 0.325974 0.112087 0.132073 1 882 882 2 1 0.112348 1 494 ADD -0.337832 0.308913 1.19599 0.562053 1 883 883 2 1 0.104251 1 494 ADD -0.132837 0.315457 0.17732 0.171542 1 884 884 2 1 0.097166 1 494 ADD -0.0464263 0.318415 0.0212589 0.0535105 1 885 885 2 1 0.0981781 1 494 ADD 0.0589363 0.289117 0.0415544 0.0765117 1 886 886 2 1 0.0991903 1 494 ADD 0.0338843 0.321601 0.011101 0.0380624 1 887 887 2 1 0.101215 1 494 ADD -0.0421687 0.328555 0.0164727 0.046784 1 888 888 2 1 0.090081 1 494 ADD 0.0738572 0.31961 0.0534006 0.087646 1 889 889 2 1 0.090081 1 494 ADD -0.326606 0.308121 1.12358 0.53888 1 890 890 2 1 0.107287 1 494 ADD -0.471041 0.294646 2.55574 0.959026 1 891 891 2 1 0.1083 1 494 ADD -0.484897 0.302352 2.57201 0.963494 1 892 892 2 1 0.116397 1 494 ADD -0.350952 0.303563 1.33659 0.606186 1 893 893 2 1 0.097166 1 494 ADD 0.0477092 0.308491 0.0239177 0.0569535 1 894 894 2 1 0.0961538 1 494 ADD 0.210241 0.315981 0.442703 0.296004 1 895 895 2 1 0.115385 1 494 ADD 0.323838 0.299935 1.16574 0.552411 1 896 896 2 1 0.118421 1 494 ADD -0.292681 0.294497 0.987711 0.49444 1 897 897 2 1 0.0991903 1 494 ADD -0.0343325 0.345831 0.00985558 0.0357782 1 898 898 2 1 0.11336 1 494 ADD 0.611811 0.291699 4.3991 1.44421 1 899 899 2 1 0.1083 1 494 ADD -0.734433 0.320907 5.23776 1.65557 1 900 900 2 1 0.0981781 1 494 ADD 1.07961 0.293139 13.5434 3.63245 1 901 901 2 1 0.0890688 1 494 ADD 0.370849 0.31866 1.35438 0.611696 1 902 902 2 1 0.0890688 1 494 ADD 0.883087 0.35294 6.26045 1.90846 1 903 903 2 1 0.1083 1 494 ADD 0.483535 0.311467 2.41008 0.91881 1 904 904 2 1 0.0688259 1 494 ADD -0.221007 0.352297 0.393543 0.275361 1 905 905 2 1 0.097166 1 494 ADD 0.0626792 0.303494 0.0426527 0.077596 1 906 906 2 1 0.0779352 1 494 ADD -0.0354856 0.374167 0.0089944 0.0341199 1 907 907 2 1 0.110324 1 494 ADD 0.267862 0.30351 0.77889 0.423105 1 908 908 2 1 0.0951417 1 494 ADD 0.56125 0.34306 2.67653 0.992091 1 909 909 2 1 0.0961538 1 494 ADD -0.45069 0.317235 2.01833 0.808521 1 910 910 2 1 0.117409 1 494 ADD 0.448923 0.302799 2.19804 0.859534 1 911 911 2 1 0.0981781 1 494 ADD 0.36326 0.32211 1.27183 0.585989 1 912 912 2 1 0.111336 1 494 ADD 0.0966092 0.313377 0.0950393 0.120408 1 913 913 2 1 0.0890688 1 494 ADD 0.320095 0.357086 0.80355 0.431758 1 914 914 2 1 0.107287 1 494 ADD 0.227016 0.308203 0.542549 0.335943 1 915 915 2 1 0.0991903 1 494 ADD 0.385802 0.310098 1.54786 0.6707 1 916 916 2 1 0.102227 1 494 ADD 0.647971 0.324107 3.99699 1.34121 1 917 917 2 1 0.101215 1 494 ADD 0.289154 0.318868 0.822312 0.438297 1 918 918 2 1 0.0961538 1 494 ADD 0.374032 0.321656 1.35218 0.611015 1 919 919 2 1 0.11336 1 494 ADD 0.048277 0.312373 0.0238855 0.0569129 1 920 920 2 1 0.0941296 1 494 ADD -0.551839 0.348059 2.51374 0.947468 1 921 921 2 1 0.106275 1 494 ADD 0.532446 0.311713 2.9177 1.05743 1 922 922 2 1 0.103239 1 494 ADD 0.1285 0.313078 0.168461 0.166545 1 923 923 2 1 0.101215 1 494 ADD 0.0951912 0.311093 0.0936299 0.119408 1 924 924 2 1 0.118421 1 494 ADD -0.581543 0.297158 3.82992 1.29804 1 925 925 2 1 0.097166 1 494 ADD 0.131467 0.33338 0.155508 0.159062 1 926 926 2 1 0.090081 1 494 ADD 0.103624 0.331895 0.0974814 0.122126 1 927 927 2 1 0.0860324 1 494 ADD -0.539985 0.337693 2.55693 0.959352 1 928 928 2 1 0.0951417 1 494 ADD -0.678216 0.33671 4.05718 1.35671 1 929 929 2 1 0.0931174 1 494 ADD -0.062903 0.327696 0.036847 0.0717184 1 930 930 2 1 0.117409 1 494 ADD 0.0311768 0.278267 0.0125528 0.0405807 1 931 931 2 1 0.0951417 1 494 ADD -0.0207888 0.303694 0.00468581 0.0243729 1 932 932 2 1 0.101215 1 494 ADD -0.0281666 0.311968 0.00815172 0.0324243 1 933 933 2 1 0.111336 1 494 ADD -0.125818 0.328397 0.146787 0.153895 1 934 934 2 1 0.0809717 1 494 ADD -0.00540114 0.339265 0.000253451 0.0055517 1 935 935 2 1 0.0961538 1 494 ADD 0.0854552 0.315683 0.0732781 0.104234 1 936 936 2 1 0.0991903 1 494 ADD 0.308974 0.295162 1.09578 0.529892 1 937 937 2 1 0.0961538 1 494 ADD 0.00478781 0.315185 0.000230751 0.00529571 1 938 938 2 1 0.0991903 1 494 ADD 0.804481 0.314108 6.55957 1.98163 1 939 939 2 1 0.0910931 1 494 ADD -0.269829 0.319819 0.711818 0.3992 1 940 940 2 1 0.0981781 1 494 ADD 0.291839 0.320734 0.827937 0.440249 1 941 941 2 1 0.0910931 1 494 ADD -0.406809 0.325383 1.56312 0.675287 1 942 942 2 1 0.1083 1 494 ADD -0.111771 0.315272 0.125686 0.140893 1 943 943 2 1 0.0819838 1 494 ADD -0.409007 0.331388 1.52331 0.663302 1 944 944 2 1 0.104251 1 494 ADD -0.251167 0.306807 0.670181 0.384062 1 945 945 2 1 0.0870445 1 494 ADD 0.374096 0.322313 1.34713 0.609453 1 946 946 2 1 0.110324 1 494 ADD -0.0119146 0.292117 0.00166359 0.0143645 1 947 947 2 1 0.112348 1 494 ADD 0.0987406 0.291545 0.114705 0.133801 1 948 948 2 1 0.112348 1 494 ADD -0.190394 0.311259 0.374166 0.26701 1 949 949 2 1 0.112348 1 494 ADD -0.142297 0.314719 0.204431 0.186307 1 950 950 2 1 0.104251 1 494 ADD -0.210362 0.32476 0.419574 0.286384 1 951 951 2 1 0.102227 1 494 ADD -0.239762 0.334902 0.512537 0.324182 1 952 952 2 1 0.0981781 1 494 ADD -0.411637 0.333471 1.52374 0.663432 1 953 953 2 1 0.102227 1 494 ADD -0.112478 0.303571 0.137283 0.148132 1 954 954 2 1 0.0941296 1 494 ADD -0.585852 0.311158 3.54499 1.22384 1 955 955 2 1 0.0890688 1 494 ADD 0.265764 0.342405 0.602435 0.358873 1 956 956 2 1 0.100202 1 494 ADD 0.0406184 0.316105 0.0165114 0.0468418 1 957 957 2 1 0.097166 1 494 ADD -0.284559 0.32428 0.770027 0.419978 1 958 958 2 1 0.104251 1 494 ADD 0.366401 0.295748 1.53487 0.666788 1 959 959 2 1 0.0921053 1 494 ADD 0.0649031 0.332198 0.0381713 0.0730921 1 960 960 2 1 0.110324 1 494 ADD 0.629564 0.331301 3.61105 1.24111 1 961 961 2 1 0.102227 1 494 ADD -0.0588028 0.335168 0.0307801 0.0651321 1 962 962 2 1 0.090081 1 494 ADD -0.229848 0.329947 0.485284 0.313329 1 963 963 2 1 0.0941296 1 494 ADD 0.35503 0.34828 1.03914 0.511418 1 964 964 2 1 0.090081 1 494 ADD 0.605797 0.342471 3.129 1.11401 1 965 965 2 1 0.109312 1 494 ADD 0.180911 0.299726 0.364318 0.262714 1 966 966 2 1 0.0850202 1 494 ADD 0.532672 0.347196 2.35381 0.903169 1 967 967 2 1 0.097166 1 494 ADD -0.436032 0.321018 1.84492 0.758515 1 968 968 2 1 0.103239 1 494 ADD -0.00634591 0.333525 0.000362018 0.00664326 1 969 969 2 1 0.0961538 1 494 ADD -0.232087 0.317154 0.535502 0.333198 1 970 970 2 1 0.0951417 1 494 ADD 0.373221 0.310884 1.44124 0.638387 1 971 971 2 1 0.097166 1 494 ADD -0.239757 0.315575 0.577213 0.349298 1 972 972 2 1 0.100202 1 494 ADD -0.689433 0.316092 4.75727 1.53499 1 973 973 2 1 0.0910931 1 494 ADD 0.796849 0.325646 5.98772 1.84146 1 974 974 2 1 0.1083 1 494 ADD 0.342355 0.308272 1.23335 0.573884 1 975 975 2 1 0.104251 1 494 ADD 0.045303 0.304268 0.0221688 0.0547092 1 976 976 2 1 0.103239 1 494 ADD 0.253727 0.287726 0.777636 0.422663 1 977 977 2 1 0.0991903 1 494 ADD 0.295869 0.32383 0.834765 0.442615 1 978 978 2 1 0.0951417 1 494 ADD -0.217941 0.319437 0.465488 0.305333 1 979 979 2 1 0.103239 1 494 ADD -0.0681002 0.300092 0.0514975 0.0859333 1 980 980 2 1 0.100202 1 494 ADD 0.396365 0.31035 1.63112 0.695622 1 981 981 2 1 0.0840081 1 494 ADD -0.48036 0.33505 2.05548 0.81913 1 982 982 2 1 0.0870445 1 494 ADD -0.281532 0.352418 0.638173 0.372252 1 983 983 2 1 0.102227 1 494 ADD -0.564838 0.336733 2.81369 1.02936 1 984 984 2 1 0.102227 1 494 ADD 0.263928 0.293691 0.807583 0.433167 1 985 985 2 1 0.0961538 1 494 ADD -0.0939484 0.300055 0.0980339 0.122512 1 986 986 2 1 0.103239 1 494 ADD -0.271388 0.297233 0.833656 0.442231 1 987 987 2 1 0.103239 1 494 ADD 0.24434 0.302888 0.650763 0.376916 1 988 988 2 1 0.100202 1 494 ADD 0.167054 0.301468 0.307064 0.236956 1 989 989 2 1 0.0941296 1 494 ADD 0.00091681 0.333017 7.57927e-06 0.000955025 1 990 990 2 1 0.100202 1 494 ADD -0.0686065 0.346434 0.0392184 0.0741639 1 991 991 2 1 0.107287 1 494 ADD 0.00766918 0.280053 0.000749924 0.00959327 1 992 992 2 1 0.102227 1 494 ADD -0.231287 0.291735 0.628526 0.368661 1 993 993 2 1 0.118421 1 494 ADD 0.0661996 0.269154 0.0604934 0.093817 1 994 994 2 1 0.103239 1 494 ADD 0.367353 0.292254 1.57996 0.68034 1 995 995 2 1 0.0921053 1 494 ADD 0.0355499 0.356648 0.00993565 0.0359289 1 996 996 2 1 0.0941296 1 494 ADD -0.367872 0.341627 1.15955 0.55043 1 997 997 2 1 0.117409 1 494 ADD 0.133392 0.268002 0.247731 0.208536 1 998 998 2 1 0.0789474 1 494 ADD 0.407348 0.345873 1.38707 0.621782 1 999 999 2 1 0.102227 1 494 ADD 0.112324 0.327073 0.11794 0.135916 1 1000 1000 2 1 0.117409 1 494 ADD -0.0405477 0.280429 0.0209068 0.0530405 ================================================ FILE: example/example_3chr.annotations ================================================ mog_0 SET1 missense mog_1 SET1 missense mog_2 SET1 pLof mog_3 SET1 pLof mog_4 SET1 missense mog_5 SET1 pLof mog_6 SET1 pLof mog_7 SET1 missense mog_8 SET1 missense mog_9 SET1 pLof mog_10 SET1 missense mog_11 SET1 pLof mog_12 SET1 pLof mog_13 SET1 missense mog_14 SET1 missense mog_15 SET1 missense mog_16 SET1 pLof mog_17 SET1 missense mog_18 SET1 pLof mog_19 SET1 pLof mog_20 SET1 pLof mog_21 SET1 pLof mog_22 SET1 pLof mog_23 SET1 pLof mog_24 SET1 pLof mog_25 SET1 pLof mog_26 SET1 pLof mog_27 SET1 missense mog_28 SET1 pLof mog_29 SET1 pLof mog_30 SET1 pLof mog_31 SET1 pLof mog_32 SET1 missense mog_33 SET1 missense mog_34 SET1 pLof mog_35 SET1 pLof mog_36 SET1 missense mog_37 SET1 pLof mog_38 SET1 pLof mog_39 SET1 pLof mog_40 SET1 pLof mog_41 SET1 pLof mog_42 SET1 missense mog_43 SET1 missense mog_44 SET1 pLof mog_45 SET1 missense mog_46 SET1 missense mog_47 SET1 pLof mog_48 SET1 missense mog_49 SET1 pLof inf_0 SET1 pLof inf_1 SET1 pLof inf_2 SET1 pLof inf_3 SET1 pLof inf_4 SET1 pLof inf_5 SET1 missense inf_6 SET1 pLof inf_7 SET1 pLof inf_8 SET1 pLof inf_9 SET1 missense inf_10 SET1 missense inf_11 SET1 pLof inf_12 SET1 pLof inf_13 SET1 pLof inf_14 SET1 missense inf_15 SET1 pLof inf_16 SET1 pLof inf_17 SET1 missense inf_18 SET1 pLof inf_19 SET1 pLof inf_20 SET1 missense inf_21 SET1 missense inf_22 SET1 missense inf_23 SET1 pLof inf_24 SET1 pLof inf_25 SET1 pLof inf_26 SET1 pLof inf_27 SET1 pLof inf_28 SET1 pLof inf_29 SET1 pLof inf_30 SET1 pLof inf_31 SET1 missense inf_32 SET1 pLof inf_33 SET1 pLof inf_34 SET1 pLof inf_35 SET1 missense inf_36 SET1 pLof inf_37 SET1 missense inf_38 SET1 missense inf_39 SET1 pLof inf_40 SET1 pLof inf_41 SET1 missense inf_42 SET1 pLof inf_43 SET1 pLof inf_44 SET1 pLof inf_45 SET1 missense inf_46 SET1 missense inf_47 SET1 pLof inf_48 SET1 pLof inf_49 SET1 pLof inf_50 SET1 pLof inf_51 SET1 pLof inf_52 SET1 pLof inf_53 SET1 pLof inf_54 SET1 pLof inf_55 SET1 pLof inf_56 SET1 pLof inf_57 SET1 pLof inf_58 SET1 missense inf_59 SET1 pLof inf_60 SET1 pLof inf_61 SET1 pLof inf_62 SET1 pLof inf_63 SET1 pLof inf_64 SET1 pLof inf_65 SET1 pLof inf_66 SET1 pLof inf_67 SET1 pLof inf_68 SET1 pLof inf_69 SET1 missense inf_70 SET1 pLof inf_71 SET1 missense inf_72 SET1 pLof inf_73 SET1 pLof inf_74 SET1 pLof inf_75 SET1 pLof inf_76 SET1 pLof inf_77 SET1 pLof inf_78 SET1 pLof inf_79 SET1 pLof inf_80 SET1 pLof inf_81 SET1 missense inf_82 SET1 missense inf_83 SET1 pLof inf_84 SET1 pLof inf_85 SET1 pLof inf_86 SET1 missense inf_87 SET1 missense inf_88 SET1 pLof inf_89 SET1 pLof inf_90 SET1 pLof inf_91 SET1 pLof inf_92 SET1 pLof inf_93 SET1 pLof inf_94 SET1 missense inf_95 SET1 missense inf_96 SET1 missense inf_97 SET1 missense inf_98 SET1 pLof inf_99 SET1 pLof inf_100 SET1 pLof inf_101 SET1 pLof inf_102 SET1 pLof inf_103 SET1 pLof inf_104 SET1 missense inf_105 SET1 pLof inf_106 SET1 pLof inf_107 SET1 pLof inf_108 SET1 missense inf_109 SET1 pLof inf_110 SET1 pLof inf_111 SET1 missense inf_112 SET1 missense inf_113 SET1 missense inf_114 SET1 pLof inf_115 SET1 missense inf_116 SET1 pLof inf_117 SET1 pLof inf_118 SET1 missense inf_119 SET1 missense inf_120 SET1 missense inf_121 SET1 pLof inf_122 SET1 pLof inf_123 SET1 pLof inf_124 SET1 pLof inf_125 SET1 pLof inf_126 SET1 missense inf_127 SET1 pLof inf_128 SET1 pLof inf_129 SET1 pLof inf_130 SET1 pLof inf_131 SET1 missense inf_132 SET1 missense inf_133 SET1 pLof inf_134 SET1 pLof inf_135 SET1 missense inf_136 SET1 pLof inf_137 SET1 pLof inf_138 SET1 pLof inf_139 SET1 pLof inf_140 SET1 missense inf_141 SET1 pLof inf_142 SET1 missense inf_143 SET1 pLof inf_144 SET1 pLof inf_145 SET1 pLof inf_146 SET1 pLof inf_147 SET1 pLof inf_148 SET1 missense inf_149 SET1 pLof inf_150 SET1 pLof inf_151 SET1 pLof inf_152 SET1 missense inf_153 SET1 missense inf_154 SET1 pLof inf_155 SET1 missense inf_156 SET1 pLof inf_157 SET1 pLof inf_158 SET1 pLof inf_159 SET1 missense inf_160 SET1 pLof inf_161 SET1 pLof inf_162 SET1 pLof inf_163 SET1 pLof inf_164 SET1 pLof inf_165 SET1 pLof inf_166 SET1 pLof inf_167 SET1 pLof inf_168 SET1 missense inf_169 SET1 pLof inf_170 SET1 pLof inf_171 SET1 pLof inf_172 SET1 pLof inf_173 SET1 pLof inf_174 SET1 pLof inf_175 SET1 missense inf_176 SET1 missense inf_177 SET1 pLof inf_178 SET1 missense inf_179 SET1 pLof inf_180 SET1 pLof inf_181 SET1 pLof inf_182 SET1 pLof inf_183 SET1 missense inf_184 SET1 missense inf_185 SET1 pLof inf_186 SET1 pLof inf_187 SET1 pLof inf_188 SET1 missense inf_189 SET1 pLof inf_190 SET1 missense inf_191 SET1 pLof inf_192 SET1 pLof inf_193 SET1 pLof inf_194 SET1 pLof inf_195 SET1 pLof inf_196 SET1 pLof inf_197 SET1 pLof inf_198 SET1 pLof inf_199 SET1 missense inf_200 SET2 pLof inf_201 SET2 pLof inf_202 SET2 pLof inf_203 SET2 missense inf_204 SET2 pLof inf_205 SET2 missense inf_206 SET2 pLof inf_207 SET2 missense inf_208 SET2 pLof inf_209 SET2 pLof inf_210 SET2 pLof inf_211 SET2 missense inf_212 SET2 pLof inf_213 SET2 missense inf_214 SET2 missense inf_215 SET2 missense inf_216 SET2 pLof inf_217 SET2 pLof inf_218 SET2 pLof inf_219 SET2 pLof inf_220 SET2 pLof inf_221 SET2 pLof inf_222 SET2 pLof inf_223 SET2 pLof inf_224 SET2 pLof inf_225 SET2 missense inf_226 SET2 pLof inf_227 SET2 pLof inf_228 SET2 pLof inf_229 SET2 pLof inf_230 SET2 pLof inf_231 SET2 missense inf_232 SET2 pLof inf_233 SET2 pLof inf_234 SET2 pLof inf_235 SET2 missense inf_236 SET2 pLof inf_237 SET2 missense inf_238 SET2 missense inf_239 SET2 missense inf_240 SET2 pLof inf_241 SET2 pLof inf_242 SET2 pLof inf_243 SET2 missense inf_244 SET2 pLof inf_245 SET2 missense inf_246 SET2 pLof inf_247 SET2 pLof inf_248 SET2 pLof inf_249 SET2 pLof inf_250 SET2 missense inf_251 SET2 pLof inf_252 SET2 pLof inf_253 SET2 pLof inf_254 SET2 missense inf_255 SET2 pLof inf_256 SET2 pLof inf_257 SET2 missense inf_258 SET2 missense inf_259 SET2 pLof inf_260 SET2 missense inf_261 SET2 pLof inf_262 SET2 missense inf_263 SET2 pLof inf_264 SET2 pLof inf_265 SET2 missense inf_266 SET2 pLof inf_267 SET2 pLof inf_268 SET2 pLof inf_269 SET2 missense inf_270 SET2 pLof inf_271 SET2 pLof inf_272 SET2 pLof inf_273 SET2 pLof inf_274 SET2 pLof inf_275 SET2 pLof inf_276 SET2 pLof inf_277 SET2 pLof inf_278 SET2 missense inf_279 SET2 pLof inf_280 SET2 pLof inf_281 SET2 pLof inf_282 SET2 pLof inf_283 SET2 pLof inf_284 SET2 pLof inf_285 SET2 missense inf_286 SET2 pLof inf_287 SET2 pLof inf_288 SET2 pLof inf_289 SET2 pLof inf_290 SET2 pLof inf_291 SET2 pLof inf_292 SET2 missense inf_293 SET2 missense inf_294 SET2 missense inf_295 SET2 pLof inf_296 SET2 pLof inf_297 SET2 missense inf_298 SET2 pLof inf_299 SET2 pLof inf_300 SET2 missense inf_301 SET2 pLof inf_302 SET2 pLof inf_303 SET2 pLof inf_304 SET2 pLof inf_305 SET2 missense inf_306 SET2 missense inf_307 SET2 pLof inf_308 SET2 pLof inf_309 SET2 missense inf_310 SET2 missense inf_311 SET2 pLof inf_312 SET2 pLof inf_313 SET2 pLof inf_314 SET2 pLof inf_315 SET2 pLof inf_316 SET2 pLof inf_317 SET2 pLof inf_318 SET2 pLof inf_319 SET2 pLof inf_320 SET2 missense inf_321 SET2 missense inf_322 SET2 pLof inf_323 SET2 missense inf_324 SET2 missense inf_325 SET2 pLof inf_326 SET2 pLof inf_327 SET2 missense inf_328 SET2 pLof inf_329 SET2 missense inf_330 SET2 pLof inf_331 SET2 pLof inf_332 SET2 missense inf_333 SET2 pLof inf_334 SET2 pLof inf_335 SET2 pLof inf_336 SET2 pLof inf_337 SET2 pLof inf_338 SET2 missense inf_339 SET2 pLof inf_340 SET2 pLof inf_341 SET2 missense inf_342 SET2 pLof inf_343 SET2 missense inf_344 SET2 pLof inf_345 SET2 pLof inf_346 SET2 pLof inf_347 SET2 pLof inf_348 SET2 pLof inf_349 SET2 pLof inf_350 SET2 pLof inf_351 SET2 pLof inf_352 SET2 pLof inf_353 SET2 pLof inf_354 SET2 missense inf_355 SET2 pLof inf_356 SET2 pLof inf_357 SET2 pLof inf_358 SET2 pLof inf_359 SET2 pLof inf_360 SET2 missense inf_361 SET2 pLof inf_362 SET2 pLof inf_363 SET2 pLof inf_364 SET2 pLof inf_365 SET2 pLof inf_366 SET2 pLof inf_367 SET2 pLof inf_368 SET2 missense inf_369 SET2 missense inf_370 SET2 missense inf_371 SET2 pLof inf_372 SET2 pLof inf_373 SET2 missense inf_374 SET2 pLof inf_375 SET2 missense inf_376 SET2 missense inf_377 SET2 pLof inf_378 SET2 pLof inf_379 SET2 pLof inf_380 SET2 pLof inf_381 SET2 pLof inf_382 SET2 pLof inf_383 SET2 pLof inf_384 SET2 pLof inf_385 SET2 pLof inf_386 SET2 missense inf_387 SET2 pLof inf_388 SET2 pLof inf_389 SET2 pLof inf_390 SET2 pLof inf_391 SET2 missense inf_392 SET2 pLof inf_393 SET2 pLof inf_394 SET2 pLof inf_395 SET2 pLof inf_396 SET2 pLof inf_397 SET2 pLof inf_398 SET2 missense inf_399 SET2 pLof null_0 SET2 pLof null_1 SET2 pLof null_2 SET2 missense null_3 SET2 pLof null_4 SET2 missense null_5 SET2 pLof null_6 SET2 pLof null_7 SET2 pLof null_8 SET2 pLof null_9 SET2 pLof null_10 SET2 pLof null_11 SET2 pLof null_12 SET2 missense null_13 SET2 pLof null_14 SET2 pLof null_15 SET2 pLof null_16 SET2 pLof null_17 SET2 pLof null_18 SET2 pLof null_19 SET2 missense null_20 SET2 pLof null_21 SET2 pLof null_22 SET2 pLof null_23 SET2 missense null_24 SET2 pLof null_25 SET2 pLof null_26 SET2 missense null_27 SET2 pLof null_28 SET2 missense null_29 SET2 pLof null_30 SET2 pLof null_31 SET2 pLof null_32 SET2 pLof null_33 SET2 missense null_34 SET2 pLof null_35 SET2 missense null_36 SET2 pLof null_37 SET2 missense null_38 SET2 pLof null_39 SET2 pLof null_40 SET2 pLof null_41 SET2 pLof null_42 SET2 missense null_43 SET2 missense null_44 SET2 pLof null_45 SET2 pLof null_46 SET2 pLof null_47 SET2 pLof null_48 SET2 missense null_49 SET2 pLof ================================================ FILE: example/example_3chr.annotationsV2 ================================================ mog_0 SET1 B-sheet missense mog_1 SET1 Catalytic missense mog_2 SET1 B-sheet pLof mog_3 SET1 Catalytic pLof mog_4 SET1 Catalytic missense mog_5 SET1 Catalytic pLof mog_6 SET1 Catalytic pLof mog_7 SET1 C‐terminal missense mog_8 SET1 B-sheet missense mog_9 SET1 Catalytic pLof mog_10 SET1 B-sheet missense mog_11 SET1 B-sheet pLof mog_12 SET1 Catalytic pLof mog_13 SET1 C‐terminal missense mog_14 SET1 C‐terminal missense mog_15 SET1 B-sheet missense mog_16 SET1 C‐terminal pLof mog_17 SET1 Catalytic missense mog_18 SET1 Catalytic pLof mog_19 SET1 B-sheet pLof mog_20 SET1 C‐terminal pLof mog_21 SET1 C‐terminal pLof mog_22 SET1 C‐terminal pLof mog_23 SET1 Catalytic pLof mog_24 SET1 Catalytic pLof mog_25 SET1 B-sheet pLof mog_26 SET1 Catalytic pLof mog_27 SET1 C‐terminal missense mog_28 SET1 Catalytic pLof mog_29 SET1 C‐terminal pLof mog_30 SET1 B-sheet pLof mog_31 SET1 Catalytic pLof mog_32 SET1 C‐terminal missense mog_33 SET1 B-sheet missense mog_34 SET1 B-sheet pLof mog_35 SET1 C‐terminal pLof mog_36 SET1 Catalytic missense mog_37 SET1 B-sheet pLof mog_38 SET1 B-sheet pLof mog_39 SET1 Catalytic pLof mog_40 SET1 B-sheet pLof mog_41 SET1 B-sheet pLof mog_42 SET1 Catalytic missense mog_43 SET1 C‐terminal missense mog_44 SET1 B-sheet pLof mog_45 SET1 C‐terminal missense mog_46 SET1 B-sheet missense mog_47 SET1 Catalytic pLof mog_48 SET1 C‐terminal missense mog_49 SET1 B-sheet pLof inf_0 SET1 B-sheet pLof inf_1 SET1 C‐terminal pLof inf_2 SET1 C‐terminal pLof inf_3 SET1 B-sheet pLof inf_4 SET1 C‐terminal pLof inf_5 SET1 Catalytic missense inf_6 SET1 B-sheet pLof inf_7 SET1 C‐terminal pLof inf_8 SET1 Catalytic pLof inf_9 SET1 B-sheet missense inf_10 SET1 B-sheet missense inf_11 SET1 Catalytic pLof inf_12 SET1 C‐terminal pLof inf_13 SET1 C‐terminal pLof inf_14 SET1 Catalytic missense inf_15 SET1 B-sheet pLof inf_16 SET1 Catalytic pLof inf_17 SET1 Catalytic missense inf_18 SET1 C‐terminal pLof inf_19 SET1 Catalytic pLof inf_20 SET1 Catalytic missense inf_21 SET1 B-sheet missense inf_22 SET1 Catalytic missense inf_23 SET1 Catalytic pLof inf_24 SET1 Catalytic pLof inf_25 SET1 B-sheet pLof inf_26 SET1 C‐terminal pLof inf_27 SET1 C‐terminal pLof inf_28 SET1 C‐terminal pLof inf_29 SET1 Catalytic pLof inf_30 SET1 B-sheet pLof inf_31 SET1 C‐terminal missense inf_32 SET1 Catalytic pLof inf_33 SET1 C‐terminal pLof inf_34 SET1 C‐terminal pLof inf_35 SET1 B-sheet missense inf_36 SET1 Catalytic pLof inf_37 SET1 C‐terminal missense inf_38 SET1 B-sheet missense inf_39 SET1 C‐terminal pLof inf_40 SET1 Catalytic pLof inf_41 SET1 B-sheet missense inf_42 SET1 B-sheet pLof inf_43 SET1 B-sheet pLof inf_44 SET1 C‐terminal pLof inf_45 SET1 C‐terminal missense inf_46 SET1 B-sheet missense inf_47 SET1 C‐terminal pLof inf_48 SET1 Catalytic pLof inf_49 SET1 B-sheet pLof inf_50 SET1 C‐terminal pLof inf_51 SET1 Catalytic pLof inf_52 SET1 C‐terminal pLof inf_53 SET1 C‐terminal pLof inf_54 SET1 B-sheet pLof inf_55 SET1 C‐terminal pLof inf_56 SET1 B-sheet pLof inf_57 SET1 Catalytic pLof inf_58 SET1 B-sheet missense inf_59 SET1 C‐terminal pLof inf_60 SET1 Catalytic pLof inf_61 SET1 Catalytic pLof inf_62 SET1 Catalytic pLof inf_63 SET1 B-sheet pLof inf_64 SET1 C‐terminal pLof inf_65 SET1 C‐terminal pLof inf_66 SET1 B-sheet pLof inf_67 SET1 C‐terminal pLof inf_68 SET1 B-sheet pLof inf_69 SET1 Catalytic missense inf_70 SET1 C‐terminal pLof inf_71 SET1 B-sheet missense inf_72 SET1 C‐terminal pLof inf_73 SET1 Catalytic pLof inf_74 SET1 Catalytic pLof inf_75 SET1 B-sheet pLof inf_76 SET1 C‐terminal pLof inf_77 SET1 B-sheet pLof inf_78 SET1 C‐terminal pLof inf_79 SET1 C‐terminal pLof inf_80 SET1 B-sheet pLof inf_81 SET1 B-sheet missense inf_82 SET1 B-sheet missense inf_83 SET1 Catalytic pLof inf_84 SET1 C‐terminal pLof inf_85 SET1 C‐terminal pLof inf_86 SET1 B-sheet missense inf_87 SET1 Catalytic missense inf_88 SET1 B-sheet pLof inf_89 SET1 Catalytic pLof inf_90 SET1 C‐terminal pLof inf_91 SET1 C‐terminal pLof inf_92 SET1 B-sheet pLof inf_93 SET1 Catalytic pLof inf_94 SET1 C‐terminal missense inf_95 SET1 C‐terminal missense inf_96 SET1 B-sheet missense inf_97 SET1 B-sheet missense inf_98 SET1 B-sheet pLof inf_99 SET1 C‐terminal pLof inf_100 SET1 Catalytic pLof inf_101 SET1 C‐terminal pLof inf_102 SET1 C‐terminal pLof inf_103 SET1 Catalytic pLof inf_104 SET1 C‐terminal missense inf_105 SET1 B-sheet pLof inf_106 SET1 Catalytic pLof inf_107 SET1 Catalytic pLof inf_108 SET1 C‐terminal missense inf_109 SET1 C‐terminal pLof inf_110 SET1 Catalytic pLof inf_111 SET1 Catalytic missense inf_112 SET1 Catalytic missense inf_113 SET1 Catalytic missense inf_114 SET1 B-sheet pLof inf_115 SET1 B-sheet missense inf_116 SET1 C‐terminal pLof inf_117 SET1 B-sheet pLof inf_118 SET1 C‐terminal missense inf_119 SET1 C‐terminal missense inf_120 SET1 C‐terminal missense inf_121 SET1 Catalytic pLof inf_122 SET1 Catalytic pLof inf_123 SET1 B-sheet pLof inf_124 SET1 C‐terminal pLof inf_125 SET1 Catalytic pLof inf_126 SET1 C‐terminal missense inf_127 SET1 C‐terminal pLof inf_128 SET1 Catalytic pLof inf_129 SET1 B-sheet pLof inf_130 SET1 C‐terminal pLof inf_131 SET1 C‐terminal missense inf_132 SET1 B-sheet missense inf_133 SET1 B-sheet pLof inf_134 SET1 C‐terminal pLof inf_135 SET1 Catalytic missense inf_136 SET1 B-sheet pLof inf_137 SET1 Catalytic pLof inf_138 SET1 C‐terminal pLof inf_139 SET1 B-sheet pLof inf_140 SET1 C‐terminal missense inf_141 SET1 C‐terminal pLof inf_142 SET1 C‐terminal missense inf_143 SET1 Catalytic pLof inf_144 SET1 C‐terminal pLof inf_145 SET1 Catalytic pLof inf_146 SET1 C‐terminal pLof inf_147 SET1 B-sheet pLof inf_148 SET1 C‐terminal missense inf_149 SET1 Catalytic pLof inf_150 SET1 B-sheet pLof inf_151 SET1 B-sheet pLof inf_152 SET1 C‐terminal missense inf_153 SET1 Catalytic missense inf_154 SET1 C‐terminal pLof inf_155 SET1 B-sheet missense inf_156 SET1 B-sheet pLof inf_157 SET1 B-sheet pLof inf_158 SET1 Catalytic pLof inf_159 SET1 Catalytic missense inf_160 SET1 Catalytic pLof inf_161 SET1 Catalytic pLof inf_162 SET1 C‐terminal pLof inf_163 SET1 Catalytic pLof inf_164 SET1 B-sheet pLof inf_165 SET1 Catalytic pLof inf_166 SET1 B-sheet pLof inf_167 SET1 B-sheet pLof inf_168 SET1 B-sheet missense inf_169 SET1 Catalytic pLof inf_170 SET1 C‐terminal pLof inf_171 SET1 B-sheet pLof inf_172 SET1 Catalytic pLof inf_173 SET1 C‐terminal pLof inf_174 SET1 C‐terminal pLof inf_175 SET1 Catalytic missense inf_176 SET1 C‐terminal missense inf_177 SET1 B-sheet pLof inf_178 SET1 C‐terminal missense inf_179 SET1 C‐terminal pLof inf_180 SET1 C‐terminal pLof inf_181 SET1 C‐terminal pLof inf_182 SET1 C‐terminal pLof inf_183 SET1 Catalytic missense inf_184 SET1 B-sheet missense inf_185 SET1 C‐terminal pLof inf_186 SET1 Catalytic pLof inf_187 SET1 B-sheet pLof inf_188 SET1 B-sheet missense inf_189 SET1 Catalytic pLof inf_190 SET1 B-sheet missense inf_191 SET1 Catalytic pLof inf_192 SET1 B-sheet pLof inf_193 SET1 Catalytic pLof inf_194 SET1 B-sheet pLof inf_195 SET1 B-sheet pLof inf_196 SET1 C‐terminal pLof inf_197 SET1 C‐terminal pLof inf_198 SET1 B-sheet pLof inf_199 SET1 C‐terminal missense inf_200 SET2 Trans-membrane pLof inf_201 SET2 N-terminal pLof inf_202 SET2 N-terminal pLof inf_203 SET2 EGF missense inf_204 SET2 EGF pLof inf_205 SET2 Trans-membrane missense inf_206 SET2 Trans-membrane pLof inf_207 SET2 EGF missense inf_208 SET2 Trans-membrane pLof inf_209 SET2 Trans-membrane pLof inf_210 SET2 EGF pLof inf_211 SET2 EGF missense inf_212 SET2 Trans-membrane pLof inf_213 SET2 Trans-membrane missense inf_214 SET2 Trans-membrane missense inf_215 SET2 Trans-membrane missense inf_216 SET2 EGF pLof inf_217 SET2 Trans-membrane pLof inf_218 SET2 Trans-membrane pLof inf_219 SET2 EGF pLof inf_220 SET2 N-terminal pLof inf_221 SET2 N-terminal pLof inf_222 SET2 N-terminal pLof inf_223 SET2 Trans-membrane pLof inf_224 SET2 EGF pLof inf_225 SET2 Trans-membrane missense inf_226 SET2 Trans-membrane pLof inf_227 SET2 Trans-membrane pLof inf_228 SET2 N-terminal pLof inf_229 SET2 Trans-membrane pLof inf_230 SET2 Trans-membrane pLof inf_231 SET2 Trans-membrane missense inf_232 SET2 EGF pLof inf_233 SET2 N-terminal pLof inf_234 SET2 N-terminal pLof inf_235 SET2 Trans-membrane missense inf_236 SET2 N-terminal pLof inf_237 SET2 N-terminal missense inf_238 SET2 N-terminal missense inf_239 SET2 Trans-membrane missense inf_240 SET2 Trans-membrane pLof inf_241 SET2 Trans-membrane pLof inf_242 SET2 N-terminal pLof inf_243 SET2 N-terminal missense inf_244 SET2 EGF pLof inf_245 SET2 EGF missense inf_246 SET2 N-terminal pLof inf_247 SET2 EGF pLof inf_248 SET2 EGF pLof inf_249 SET2 Trans-membrane pLof inf_250 SET2 EGF missense inf_251 SET2 Trans-membrane pLof inf_252 SET2 EGF pLof inf_253 SET2 Trans-membrane pLof inf_254 SET2 N-terminal missense inf_255 SET2 EGF pLof inf_256 SET2 Trans-membrane pLof inf_257 SET2 Trans-membrane missense inf_258 SET2 EGF missense inf_259 SET2 N-terminal pLof inf_260 SET2 Trans-membrane missense inf_261 SET2 N-terminal pLof inf_262 SET2 Trans-membrane missense inf_263 SET2 EGF pLof inf_264 SET2 EGF pLof inf_265 SET2 N-terminal missense inf_266 SET2 N-terminal pLof inf_267 SET2 Trans-membrane pLof inf_268 SET2 EGF pLof inf_269 SET2 Trans-membrane missense inf_270 SET2 EGF pLof inf_271 SET2 EGF pLof inf_272 SET2 N-terminal pLof inf_273 SET2 Trans-membrane pLof inf_274 SET2 Trans-membrane pLof inf_275 SET2 Trans-membrane pLof inf_276 SET2 Trans-membrane pLof inf_277 SET2 Trans-membrane pLof inf_278 SET2 EGF missense inf_279 SET2 EGF pLof inf_280 SET2 EGF pLof inf_281 SET2 N-terminal pLof inf_282 SET2 Trans-membrane pLof inf_283 SET2 N-terminal pLof inf_284 SET2 Trans-membrane pLof inf_285 SET2 Trans-membrane missense inf_286 SET2 EGF pLof inf_287 SET2 Trans-membrane pLof inf_288 SET2 EGF pLof inf_289 SET2 EGF pLof inf_290 SET2 EGF pLof inf_291 SET2 EGF pLof inf_292 SET2 Trans-membrane missense inf_293 SET2 EGF missense inf_294 SET2 Trans-membrane missense inf_295 SET2 EGF pLof inf_296 SET2 N-terminal pLof inf_297 SET2 Trans-membrane missense inf_298 SET2 Trans-membrane pLof inf_299 SET2 EGF pLof inf_300 SET2 EGF missense inf_301 SET2 EGF pLof inf_302 SET2 EGF pLof inf_303 SET2 Trans-membrane pLof inf_304 SET2 EGF pLof inf_305 SET2 EGF missense inf_306 SET2 N-terminal missense inf_307 SET2 EGF pLof inf_308 SET2 EGF pLof inf_309 SET2 Trans-membrane missense inf_310 SET2 N-terminal missense inf_311 SET2 N-terminal pLof inf_312 SET2 EGF pLof inf_313 SET2 Trans-membrane pLof inf_314 SET2 Trans-membrane pLof inf_315 SET2 N-terminal pLof inf_316 SET2 Trans-membrane pLof inf_317 SET2 Trans-membrane pLof inf_318 SET2 N-terminal pLof inf_319 SET2 Trans-membrane pLof inf_320 SET2 EGF missense inf_321 SET2 Trans-membrane missense inf_322 SET2 EGF pLof inf_323 SET2 EGF missense inf_324 SET2 EGF missense inf_325 SET2 EGF pLof inf_326 SET2 N-terminal pLof inf_327 SET2 N-terminal missense inf_328 SET2 N-terminal pLof inf_329 SET2 EGF missense inf_330 SET2 Trans-membrane pLof inf_331 SET2 N-terminal pLof inf_332 SET2 N-terminal missense inf_333 SET2 Trans-membrane pLof inf_334 SET2 Trans-membrane pLof inf_335 SET2 N-terminal pLof inf_336 SET2 EGF pLof inf_337 SET2 Trans-membrane pLof inf_338 SET2 Trans-membrane missense inf_339 SET2 Trans-membrane pLof inf_340 SET2 EGF pLof inf_341 SET2 Trans-membrane missense inf_342 SET2 Trans-membrane pLof inf_343 SET2 Trans-membrane missense inf_344 SET2 Trans-membrane pLof inf_345 SET2 N-terminal pLof inf_346 SET2 EGF pLof inf_347 SET2 N-terminal pLof inf_348 SET2 N-terminal pLof inf_349 SET2 EGF pLof inf_350 SET2 Trans-membrane pLof inf_351 SET2 EGF pLof inf_352 SET2 Trans-membrane pLof inf_353 SET2 EGF pLof inf_354 SET2 EGF missense inf_355 SET2 EGF pLof inf_356 SET2 N-terminal pLof inf_357 SET2 N-terminal pLof inf_358 SET2 EGF pLof inf_359 SET2 Trans-membrane pLof inf_360 SET2 N-terminal missense inf_361 SET2 N-terminal pLof inf_362 SET2 N-terminal pLof inf_363 SET2 EGF pLof inf_364 SET2 EGF pLof inf_365 SET2 EGF pLof inf_366 SET2 Trans-membrane pLof inf_367 SET2 Trans-membrane pLof inf_368 SET2 EGF missense inf_369 SET2 EGF missense inf_370 SET2 EGF missense inf_371 SET2 Trans-membrane pLof inf_372 SET2 N-terminal pLof inf_373 SET2 Trans-membrane missense inf_374 SET2 N-terminal pLof inf_375 SET2 N-terminal missense inf_376 SET2 EGF missense inf_377 SET2 EGF pLof inf_378 SET2 EGF pLof inf_379 SET2 Trans-membrane pLof inf_380 SET2 EGF pLof inf_381 SET2 N-terminal pLof inf_382 SET2 N-terminal pLof inf_383 SET2 Trans-membrane pLof inf_384 SET2 N-terminal pLof inf_385 SET2 EGF pLof inf_386 SET2 Trans-membrane missense inf_387 SET2 Trans-membrane pLof inf_388 SET2 EGF pLof inf_389 SET2 N-terminal pLof inf_390 SET2 N-terminal pLof inf_391 SET2 Trans-membrane missense inf_392 SET2 Trans-membrane pLof inf_393 SET2 Trans-membrane pLof inf_394 SET2 N-terminal pLof inf_395 SET2 N-terminal pLof inf_396 SET2 EGF pLof inf_397 SET2 Trans-membrane pLof inf_398 SET2 EGF missense inf_399 SET2 Trans-membrane pLof null_0 SET2 EGF pLof null_1 SET2 N-terminal pLof null_2 SET2 EGF missense null_3 SET2 EGF pLof null_4 SET2 Trans-membrane missense null_5 SET2 EGF pLof null_6 SET2 N-terminal pLof null_7 SET2 N-terminal pLof null_8 SET2 Trans-membrane pLof null_9 SET2 N-terminal pLof null_10 SET2 Trans-membrane pLof null_11 SET2 EGF pLof null_12 SET2 N-terminal missense null_13 SET2 Trans-membrane pLof null_14 SET2 N-terminal pLof null_15 SET2 EGF pLof null_16 SET2 Trans-membrane pLof null_17 SET2 Trans-membrane pLof null_18 SET2 N-terminal pLof null_19 SET2 EGF missense null_20 SET2 N-terminal pLof null_21 SET2 EGF pLof null_22 SET2 Trans-membrane pLof null_23 SET2 N-terminal missense null_24 SET2 EGF pLof null_25 SET2 N-terminal pLof null_26 SET2 N-terminal missense null_27 SET2 N-terminal pLof null_28 SET2 EGF missense null_29 SET2 EGF pLof null_30 SET2 Trans-membrane pLof null_31 SET2 N-terminal pLof null_32 SET2 N-terminal pLof null_33 SET2 N-terminal missense null_34 SET2 N-terminal pLof null_35 SET2 EGF missense null_36 SET2 N-terminal pLof null_37 SET2 N-terminal missense null_38 SET2 Trans-membrane pLof null_39 SET2 Trans-membrane pLof null_40 SET2 Trans-membrane pLof null_41 SET2 Trans-membrane pLof null_42 SET2 Trans-membrane missense null_43 SET2 Trans-membrane missense null_44 SET2 Trans-membrane pLof null_45 SET2 Trans-membrane pLof null_46 SET2 N-terminal pLof null_47 SET2 Trans-membrane pLof null_48 SET2 N-terminal missense null_49 SET2 EGF pLof ================================================ FILE: example/example_3chr.bim ================================================ 1 mog_0 0 1 D d 1 mog_1 0 2 D d 1 mog_2 0 3 D d 1 mog_3 0 4 D d 1 mog_4 0 5 D d 1 mog_5 0 6 D d 1 mog_6 0 7 D d 1 mog_7 0 8 D d 1 mog_8 0 9 D d 1 mog_9 0 10 D d 1 mog_10 0 11 D d 1 mog_11 0 12 D d 1 mog_12 0 13 D d 1 mog_13 0 14 D d 1 mog_14 0 15 D d 1 mog_15 0 16 D d 1 mog_16 0 17 D d 1 mog_17 0 18 D d 1 mog_18 0 19 D d 1 mog_19 0 20 D d 1 mog_20 0 21 D d 1 mog_21 0 22 D d 1 mog_22 0 23 D d 1 mog_23 0 24 D d 1 mog_24 0 25 D d 1 mog_25 0 26 D d 1 mog_26 0 27 D d 1 mog_27 0 28 D d 1 mog_28 0 29 D d 1 mog_29 0 30 D d 1 mog_30 0 31 D d 1 mog_31 0 32 D d 1 mog_32 0 33 D d 1 mog_33 0 34 D d 1 mog_34 0 35 D d 1 mog_35 0 36 D d 1 mog_36 0 37 D d 1 mog_37 0 38 D d 1 mog_38 0 39 D d 1 mog_39 0 40 D d 1 mog_40 0 41 D d 1 mog_41 0 42 D d 1 mog_42 0 43 D d 1 mog_43 0 44 D d 1 mog_44 0 45 D d 1 mog_45 0 46 D d 1 mog_46 0 47 D d 1 mog_47 0 48 D d 1 mog_48 0 49 D d 1 mog_49 0 50 D d 2 inf_0 0 51 D d 2 inf_1 0 52 D d 2 inf_2 0 53 D d 2 inf_3 0 54 D d 2 inf_4 0 55 D d 2 inf_5 0 56 D d 2 inf_6 0 57 D d 2 inf_7 0 58 D d 2 inf_8 0 59 D d 2 inf_9 0 60 D d 2 inf_10 0 61 D d 2 inf_11 0 62 D d 2 inf_12 0 63 D d 2 inf_13 0 64 D d 2 inf_14 0 65 D d 2 inf_15 0 66 D d 2 inf_16 0 67 D d 2 inf_17 0 68 D d 2 inf_18 0 69 D d 2 inf_19 0 70 D d 2 inf_20 0 71 D d 2 inf_21 0 72 D d 2 inf_22 0 73 D d 2 inf_23 0 74 D d 2 inf_24 0 75 D d 2 inf_25 0 76 D d 2 inf_26 0 77 D d 2 inf_27 0 78 D d 2 inf_28 0 79 D d 2 inf_29 0 80 D d 2 inf_30 0 81 D d 2 inf_31 0 82 D d 2 inf_32 0 83 D d 2 inf_33 0 84 D d 2 inf_34 0 85 D d 2 inf_35 0 86 D d 2 inf_36 0 87 D d 2 inf_37 0 88 D d 2 inf_38 0 89 D d 2 inf_39 0 90 D d 2 inf_40 0 91 D d 2 inf_41 0 92 D d 2 inf_42 0 93 D d 2 inf_43 0 94 D d 2 inf_44 0 95 D d 2 inf_45 0 96 D d 2 inf_46 0 97 D d 2 inf_47 0 98 D d 2 inf_48 0 99 D d 2 inf_49 0 100 D d 2 inf_50 0 101 D d 2 inf_51 0 102 D d 2 inf_52 0 103 D d 2 inf_53 0 104 D d 2 inf_54 0 105 D d 2 inf_55 0 106 D d 2 inf_56 0 107 D d 2 inf_57 0 108 D d 2 inf_58 0 109 D d 2 inf_59 0 110 D d 2 inf_60 0 111 D d 2 inf_61 0 112 D d 2 inf_62 0 113 D d 2 inf_63 0 114 D d 2 inf_64 0 115 D d 2 inf_65 0 116 D d 2 inf_66 0 117 D d 2 inf_67 0 118 D d 2 inf_68 0 119 D d 2 inf_69 0 120 D d 2 inf_70 0 121 D d 2 inf_71 0 122 D d 2 inf_72 0 123 D d 2 inf_73 0 124 D d 2 inf_74 0 125 D d 2 inf_75 0 126 D d 2 inf_76 0 127 D d 2 inf_77 0 128 D d 2 inf_78 0 129 D d 2 inf_79 0 130 D d 2 inf_80 0 131 D d 2 inf_81 0 132 D d 2 inf_82 0 133 D d 2 inf_83 0 134 D d 2 inf_84 0 135 D d 2 inf_85 0 136 D d 2 inf_86 0 137 D d 2 inf_87 0 138 D d 2 inf_88 0 139 D d 2 inf_89 0 140 D d 2 inf_90 0 141 D d 2 inf_91 0 142 D d 2 inf_92 0 143 D d 2 inf_93 0 144 D d 2 inf_94 0 145 D d 2 inf_95 0 146 D d 2 inf_96 0 147 D d 2 inf_97 0 148 D d 2 inf_98 0 149 D d 2 inf_99 0 150 D d 2 inf_100 0 151 D d 2 inf_101 0 152 D d 2 inf_102 0 153 D d 2 inf_103 0 154 D d 2 inf_104 0 155 D d 2 inf_105 0 156 D d 2 inf_106 0 157 D d 2 inf_107 0 158 D d 2 inf_108 0 159 D d 2 inf_109 0 160 D d 2 inf_110 0 161 D d 2 inf_111 0 162 D d 2 inf_112 0 163 D d 2 inf_113 0 164 D d 2 inf_114 0 165 D d 2 inf_115 0 166 D d 2 inf_116 0 167 D d 2 inf_117 0 168 D d 2 inf_118 0 169 D d 2 inf_119 0 170 D d 2 inf_120 0 171 D d 2 inf_121 0 172 D d 2 inf_122 0 173 D d 2 inf_123 0 174 D d 2 inf_124 0 175 D d 2 inf_125 0 176 D d 2 inf_126 0 177 D d 2 inf_127 0 178 D d 2 inf_128 0 179 D d 2 inf_129 0 180 D d 2 inf_130 0 181 D d 2 inf_131 0 182 D d 2 inf_132 0 183 D d 2 inf_133 0 184 D d 2 inf_134 0 185 D d 2 inf_135 0 186 D d 2 inf_136 0 187 D d 2 inf_137 0 188 D d 2 inf_138 0 189 D d 2 inf_139 0 190 D d 2 inf_140 0 191 D d 2 inf_141 0 192 D d 2 inf_142 0 193 D d 2 inf_143 0 194 D d 2 inf_144 0 195 D d 2 inf_145 0 196 D d 2 inf_146 0 197 D d 2 inf_147 0 198 D d 2 inf_148 0 199 D d 2 inf_149 0 200 D d 2 inf_150 0 201 D d 2 inf_151 0 202 D d 2 inf_152 0 203 D d 2 inf_153 0 204 D d 2 inf_154 0 205 D d 2 inf_155 0 206 D d 2 inf_156 0 207 D d 2 inf_157 0 208 D d 2 inf_158 0 209 D d 2 inf_159 0 210 D d 2 inf_160 0 211 D d 2 inf_161 0 212 D d 2 inf_162 0 213 D d 2 inf_163 0 214 D d 2 inf_164 0 215 D d 2 inf_165 0 216 D d 2 inf_166 0 217 D d 2 inf_167 0 218 D d 2 inf_168 0 219 D d 2 inf_169 0 220 D d 2 inf_170 0 221 D d 2 inf_171 0 222 D d 2 inf_172 0 223 D d 2 inf_173 0 224 D d 2 inf_174 0 225 D d 2 inf_175 0 226 D d 2 inf_176 0 227 D d 2 inf_177 0 228 D d 2 inf_178 0 229 D d 2 inf_179 0 230 D d 2 inf_180 0 231 D d 2 inf_181 0 232 D d 2 inf_182 0 233 D d 2 inf_183 0 234 D d 2 inf_184 0 235 D d 2 inf_185 0 236 D d 2 inf_186 0 237 D d 2 inf_187 0 238 D d 2 inf_188 0 239 D d 2 inf_189 0 240 D d 2 inf_190 0 241 D d 2 inf_191 0 242 D d 2 inf_192 0 243 D d 2 inf_193 0 244 D d 2 inf_194 0 245 D d 2 inf_195 0 246 D d 2 inf_196 0 247 D d 2 inf_197 0 248 D d 2 inf_198 0 249 D d 2 inf_199 0 250 D d 2 inf_200 0 251 D d 2 inf_201 0 252 D d 2 inf_202 0 253 D d 2 inf_203 0 254 D d 2 inf_204 0 255 D d 2 inf_205 0 256 D d 2 inf_206 0 257 D d 2 inf_207 0 258 D d 2 inf_208 0 259 D d 2 inf_209 0 260 D d 2 inf_210 0 261 D d 2 inf_211 0 262 D d 2 inf_212 0 263 D d 2 inf_213 0 264 D d 2 inf_214 0 265 D d 2 inf_215 0 266 D d 2 inf_216 0 267 D d 2 inf_217 0 268 D d 2 inf_218 0 269 D d 2 inf_219 0 270 D d 2 inf_220 0 271 D d 2 inf_221 0 272 D d 2 inf_222 0 273 D d 2 inf_223 0 274 D d 2 inf_224 0 275 D d 2 inf_225 0 276 D d 2 inf_226 0 277 D d 2 inf_227 0 278 D d 2 inf_228 0 279 D d 2 inf_229 0 280 D d 2 inf_230 0 281 D d 2 inf_231 0 282 D d 2 inf_232 0 283 D d 2 inf_233 0 284 D d 2 inf_234 0 285 D d 2 inf_235 0 286 D d 2 inf_236 0 287 D d 2 inf_237 0 288 D d 2 inf_238 0 289 D d 2 inf_239 0 290 D d 2 inf_240 0 291 D d 2 inf_241 0 292 D d 2 inf_242 0 293 D d 2 inf_243 0 294 D d 2 inf_244 0 295 D d 2 inf_245 0 296 D d 2 inf_246 0 297 D d 2 inf_247 0 298 D d 2 inf_248 0 299 D d 2 inf_249 0 300 D d 2 inf_250 0 301 D d 2 inf_251 0 302 D d 2 inf_252 0 303 D d 2 inf_253 0 304 D d 2 inf_254 0 305 D d 2 inf_255 0 306 D d 2 inf_256 0 307 D d 2 inf_257 0 308 D d 2 inf_258 0 309 D d 2 inf_259 0 310 D d 2 inf_260 0 311 D d 2 inf_261 0 312 D d 2 inf_262 0 313 D d 2 inf_263 0 314 D d 2 inf_264 0 315 D d 2 inf_265 0 316 D d 2 inf_266 0 317 D d 2 inf_267 0 318 D d 2 inf_268 0 319 D d 2 inf_269 0 320 D d 2 inf_270 0 321 D d 2 inf_271 0 322 D d 2 inf_272 0 323 D d 2 inf_273 0 324 D d 2 inf_274 0 325 D d 2 inf_275 0 326 D d 2 inf_276 0 327 D d 2 inf_277 0 328 D d 2 inf_278 0 329 D d 2 inf_279 0 330 D d 2 inf_280 0 331 D d 2 inf_281 0 332 D d 2 inf_282 0 333 D d 2 inf_283 0 334 D d 2 inf_284 0 335 D d 2 inf_285 0 336 D d 2 inf_286 0 337 D d 2 inf_287 0 338 D d 2 inf_288 0 339 D d 2 inf_289 0 340 D d 2 inf_290 0 341 D d 2 inf_291 0 342 D d 2 inf_292 0 343 D d 2 inf_293 0 344 D d 2 inf_294 0 345 D d 2 inf_295 0 346 D d 2 inf_296 0 347 D d 2 inf_297 0 348 D d 2 inf_298 0 349 D d 2 inf_299 0 350 D d 2 inf_300 0 351 D d 2 inf_301 0 352 D d 2 inf_302 0 353 D d 2 inf_303 0 354 D d 2 inf_304 0 355 D d 2 inf_305 0 356 D d 2 inf_306 0 357 D d 2 inf_307 0 358 D d 2 inf_308 0 359 D d 2 inf_309 0 360 D d 2 inf_310 0 361 D d 2 inf_311 0 362 D d 2 inf_312 0 363 D d 2 inf_313 0 364 D d 2 inf_314 0 365 D d 2 inf_315 0 366 D d 2 inf_316 0 367 D d 2 inf_317 0 368 D d 2 inf_318 0 369 D d 2 inf_319 0 370 D d 2 inf_320 0 371 D d 2 inf_321 0 372 D d 2 inf_322 0 373 D d 2 inf_323 0 374 D d 2 inf_324 0 375 D d 2 inf_325 0 376 D d 2 inf_326 0 377 D d 2 inf_327 0 378 D d 2 inf_328 0 379 D d 2 inf_329 0 380 D d 2 inf_330 0 381 D d 2 inf_331 0 382 D d 2 inf_332 0 383 D d 2 inf_333 0 384 D d 2 inf_334 0 385 D d 2 inf_335 0 386 D d 2 inf_336 0 387 D d 2 inf_337 0 388 D d 2 inf_338 0 389 D d 2 inf_339 0 390 D d 2 inf_340 0 391 D d 2 inf_341 0 392 D d 2 inf_342 0 393 D d 2 inf_343 0 394 D d 2 inf_344 0 395 D d 2 inf_345 0 396 D d 2 inf_346 0 397 D d 2 inf_347 0 398 D d 2 inf_348 0 399 D d 2 inf_349 0 400 D d 2 inf_350 0 401 D d 2 inf_351 0 402 D d 2 inf_352 0 403 D d 2 inf_353 0 404 D d 2 inf_354 0 405 D d 2 inf_355 0 406 D d 2 inf_356 0 407 D d 2 inf_357 0 408 D d 2 inf_358 0 409 D d 2 inf_359 0 410 D d 2 inf_360 0 411 D d 2 inf_361 0 412 D d 2 inf_362 0 413 D d 2 inf_363 0 414 D d 2 inf_364 0 415 D d 2 inf_365 0 416 D d 2 inf_366 0 417 D d 2 inf_367 0 418 D d 2 inf_368 0 419 D d 2 inf_369 0 420 D d 2 inf_370 0 421 D d 2 inf_371 0 422 D d 2 inf_372 0 423 D d 2 inf_373 0 424 D d 2 inf_374 0 425 D d 2 inf_375 0 426 D d 2 inf_376 0 427 D d 2 inf_377 0 428 D d 2 inf_378 0 429 D d 2 inf_379 0 430 D d 2 inf_380 0 431 D d 2 inf_381 0 432 D d 2 inf_382 0 433 D d 2 inf_383 0 434 D d 2 inf_384 0 435 D d 2 inf_385 0 436 D d 2 inf_386 0 437 D d 2 inf_387 0 438 D d 2 inf_388 0 439 D d 2 inf_389 0 440 D d 2 inf_390 0 441 D d 2 inf_391 0 442 D d 2 inf_392 0 443 D d 2 inf_393 0 444 D d 2 inf_394 0 445 D d 2 inf_395 0 446 D d 2 inf_396 0 447 D d 2 inf_397 0 448 D d 2 inf_398 0 449 D d 2 inf_399 0 450 D d 3 null_0 0 451 D d 3 null_1 0 452 D d 3 null_2 0 453 D d 3 null_3 0 454 D d 3 null_4 0 455 D d 3 null_5 0 456 D d 3 null_6 0 457 D d 3 null_7 0 458 D d 3 null_8 0 459 D d 3 null_9 0 460 D d 3 null_10 0 461 D d 3 null_11 0 462 D d 3 null_12 0 463 D d 3 null_13 0 464 D d 3 null_14 0 465 D d 3 null_15 0 466 D d 3 null_16 0 467 D d 3 null_17 0 468 D d 3 null_18 0 469 D d 3 null_19 0 470 D d 3 null_20 0 471 D d 3 null_21 0 472 D d 3 null_22 0 473 D d 3 null_23 0 474 D d 3 null_24 0 475 D d 3 null_25 0 476 D d 3 null_26 0 477 D d 3 null_27 0 478 D d 3 null_28 0 479 D d 3 null_29 0 480 D d 3 null_30 0 481 D d 3 null_31 0 482 D d 3 null_32 0 483 D d 3 null_33 0 484 D d 3 null_34 0 485 D d 3 null_35 0 486 D d 3 null_36 0 487 D d 3 null_37 0 488 D d 3 null_38 0 489 D d 3 null_39 0 490 D d 3 null_40 0 491 D d 3 null_41 0 492 D d 3 null_42 0 493 D d 3 null_43 0 494 D d 3 null_44 0 495 D d 3 null_45 0 496 D d 3 null_46 0 497 D d 3 null_47 0 498 D d 3 null_48 0 499 D d 3 null_49 0 500 D d ================================================ FILE: example/example_3chr.fam ================================================ 1 1 0 0 0 -0.4267761781290719 2 2 0 0 0 0.553949147355921 3 3 0 0 0 -0.6501615855731889 4 4 0 0 0 0.6658237998926421 5 5 0 0 0 2.153525389108508 6 6 0 0 0 1.603607081080267 7 7 0 0 0 0.9245092282950891 8 8 0 0 0 0.16695520568640973 9 9 0 0 0 -0.44678076953973184 10 10 0 0 0 0.9130182655669581 11 11 0 0 0 -0.12365315280028831 12 12 0 0 0 0.45120658048742923 13 13 0 0 0 -1.813422352445905 14 14 0 0 0 0.10916042619322039 15 15 0 0 0 1.2606692333542373 16 16 0 0 0 0.5532311359350739 17 17 0 0 0 0.20945215196889685 18 18 0 0 0 -0.5132181734188253 19 19 0 0 0 0.6119067760087953 20 20 0 0 0 1.5394566797469251 21 21 0 0 0 -0.3865037693784083 22 22 0 0 0 -2.5143419880300866 23 23 0 0 0 0.405703045213449 24 24 0 0 0 0.5185603274229008 25 25 0 0 0 1.0611484493881813 26 26 0 0 0 0.19594051011058977 27 27 0 0 0 -0.24979581720203475 28 28 0 0 0 -0.2676477096598135 29 29 0 0 0 0.7177935231258309 30 30 0 0 0 1.1861246517682622 31 31 0 0 0 0.08629622130288517 32 32 0 0 0 -0.35304293360949707 33 33 0 0 0 0.2354296885149071 34 34 0 0 0 1.530452595962293 35 35 0 0 0 0.4579547646635299 36 36 0 0 0 0.4118304659618171 37 37 0 0 0 1.0173491056828072 38 38 0 0 0 -1.3848053256406825 39 39 0 0 0 1.7510265942816932 40 40 0 0 0 0.274954268508773 41 41 0 0 0 -1.9897038536605167 42 42 0 0 0 -0.2744230179428616 43 43 0 0 0 1.426414899954135 44 44 0 0 0 1.6794358446939521 45 45 0 0 0 -1.9762223272212731 46 46 0 0 0 1.31328879515592 47 47 0 0 0 -1.2379452021381565 48 48 0 0 0 -1.2230942245689198 49 49 0 0 0 -0.2086823379220931 50 50 0 0 0 0.046591344965807927 51 51 0 0 0 0.6454664759221705 52 52 0 0 0 -0.3366711458816414 53 53 0 0 0 -1.4251415011354847 54 54 0 0 0 -1.7404106776289252 55 55 0 0 0 -0.9899916360986122 56 56 0 0 0 -0.6813055796709735 57 57 0 0 0 1.4523360524496092 58 58 0 0 0 -0.14395595141327489 59 59 0 0 0 -0.4378362565094535 60 60 0 0 0 -0.1519268773269188 61 61 0 0 0 -1.0918707470545093 62 62 0 0 0 0.11886585929161704 63 63 0 0 0 -0.7446821129490644 64 64 0 0 0 -0.3515988379695028 65 65 0 0 0 -0.2505242457789806 66 66 0 0 0 -1.1445325100301038 67 67 0 0 0 0.4021008709651108 68 68 0 0 0 -0.26967294800034874 69 69 0 0 0 -1.071043452154829 70 70 0 0 0 0.5466104498110623 71 71 0 0 0 0.9059888912622454 72 72 0 0 0 -0.9302463996121689 73 73 0 0 0 -0.1649348560132909 74 74 0 0 0 -0.2592977286319428 75 75 0 0 0 -2.114476477667718 76 76 0 0 0 -0.6076341029698831 77 77 0 0 0 0.7748006221315341 78 78 0 0 0 -2.0962224712289843 79 79 0 0 0 -1.9116579659512944 80 80 0 0 0 1.0353397078763547 81 81 0 0 0 0.7294502561042351 82 82 0 0 0 -0.09793421592240978 83 83 0 0 0 0.24566617144478756 84 84 0 0 0 0.9386731103091898 85 85 0 0 0 1.7337564931524567 86 86 0 0 0 3.5965463607888486 87 87 0 0 0 0.10417950242086334 88 88 0 0 0 0.8181457381771525 89 89 0 0 0 -0.4717474685706561 90 90 0 0 0 1.3263850865010316 91 91 0 0 0 -0.616465031940274 92 92 0 0 0 -1.1963740018230864 93 93 0 0 0 -2.523429651265045 94 94 0 0 0 -1.6775958547520566 95 95 0 0 0 -1.325183339632047 96 96 0 0 0 0.5882935940652537 97 97 0 0 0 1.2377386081497168 98 98 0 0 0 -0.2927710750283572 99 99 0 0 0 2.2130683684766117 100 100 0 0 0 1.3907852235803377 101 101 0 0 0 0.3489648675330413 102 102 0 0 0 -0.17965231137324936 103 103 0 0 0 -1.714950186712027 104 104 0 0 0 -0.3606425914729865 105 105 0 0 0 0.2558071082994665 106 106 0 0 0 0.7848503716979157 107 107 0 0 0 2.505180527543909 108 108 0 0 0 -1.8168385585899676 109 109 0 0 0 -0.01565688433622611 110 110 0 0 0 0.7040291497308593 111 111 0 0 0 -0.011386617718583729 112 112 0 0 0 -0.6404979013481404 113 113 0 0 0 2.0784381335821682 114 114 0 0 0 -0.2254928329575596 115 115 0 0 0 0.0021879911560499826 116 116 0 0 0 0.4530758437690287 117 117 0 0 0 0.7111556836519528 118 118 0 0 0 -7.926457716849677e-5 119 119 0 0 0 1.2716437121248285 120 120 0 0 0 0.13091641539525625 121 121 0 0 0 0.9601642531802883 122 122 0 0 0 -0.6946269492816117 123 123 0 0 0 1.2083545960448898 124 124 0 0 0 -0.5558287669378148 125 125 0 0 0 0.40869932288799415 126 126 0 0 0 0.8632834147663099 127 127 0 0 0 0.8642022294643745 128 128 0 0 0 -0.45151257769571096 129 129 0 0 0 -0.1914051114382599 130 130 0 0 0 -0.037649137239090524 131 131 0 0 0 1.069953907594907 132 132 0 0 0 0.7332632139169448 133 133 0 0 0 -1.3859563214470878 134 134 0 0 0 -0.16882598316337785 135 135 0 0 0 1.2341578254519214 136 136 0 0 0 -0.13018118909812346 137 137 0 0 0 -0.849622061183973 138 138 0 0 0 1.65558791310931 139 139 0 0 0 -0.8557488969973114 140 140 0 0 0 -0.591996102804245 141 141 0 0 0 1.4766090213622798 142 142 0 0 0 -1.7606788880705646 143 143 0 0 0 0.3331349454598871 144 144 0 0 0 -1.316796818445614 145 145 0 0 0 2.2658417254598926 146 146 0 0 0 -0.5855466346375702 147 147 0 0 0 1.004242318973581 148 148 0 0 0 0.5950634513012234 149 149 0 0 0 -2.3589818092376342 150 150 0 0 0 1.020059747279963 151 151 0 0 0 -1.2578575928423548 152 152 0 0 0 -0.09700531448496873 153 153 0 0 0 0.33638529718875043 154 154 0 0 0 1.7972793724047749 155 155 0 0 0 0.27013487552553606 156 156 0 0 0 -0.3808633841949227 157 157 0 0 0 0.04018926790384476 158 158 0 0 0 -0.3965127185254764 159 159 0 0 0 1.4936455086379186 160 160 0 0 0 -1.2993293254003835 161 161 0 0 0 0.2519277543876505 162 162 0 0 0 0.691774608729148 163 163 0 0 0 0.7407513064839535 164 164 0 0 0 -0.31056687191510746 165 165 0 0 0 -0.5552597332076762 166 166 0 0 0 -1.0057835319597124 167 167 0 0 0 0.05450686156271301 168 168 0 0 0 -0.6349282429298715 169 169 0 0 0 -0.6695465895569117 170 170 0 0 0 -0.23226063332510133 171 171 0 0 0 0.7035825230515401 172 172 0 0 0 -0.31327835211735766 173 173 0 0 0 -0.24917314601702809 174 174 0 0 0 -0.6592080848536208 175 175 0 0 0 -0.9477879953319399 176 176 0 0 0 0.48009125370245204 177 177 0 0 0 0.4706100983663504 178 178 0 0 0 -0.06505632309350708 179 179 0 0 0 -1.4959269095746512 180 180 0 0 0 0.5405485678497597 181 181 0 0 0 1.1232696382170495 182 182 0 0 0 0.0074418075185122565 183 183 0 0 0 0.6639986494873168 184 184 0 0 0 -0.5678566487451827 185 185 0 0 0 0.2299383937915558 186 186 0 0 0 -0.17076218909155186 187 187 0 0 0 0.3420901284971981 188 188 0 0 0 -0.10950363726652125 189 189 0 0 0 -0.06808902942736765 190 190 0 0 0 -2.3144897119335965 191 191 0 0 0 -1.0777725703353438 192 192 0 0 0 -0.3394034459756072 193 193 0 0 0 -1.5321020124626434 194 194 0 0 0 1.277838035763474 195 195 0 0 0 -0.6186969481783715 196 196 0 0 0 0.24483826998859312 197 197 0 0 0 -0.08972472068807524 198 198 0 0 0 0.28563820059484707 199 199 0 0 0 0.02665228610242174 200 200 0 0 0 -0.8558456209545621 201 201 0 0 0 0.10326780109110945 202 202 0 0 0 -0.4683803455991253 203 203 0 0 0 -0.039629458692737506 204 204 0 0 0 0.5010288555718972 205 205 0 0 0 -1.614633788145904 206 206 0 0 0 -0.8221081713776588 207 207 0 0 0 -0.4154327362321607 208 208 0 0 0 0.19255584244438567 209 209 0 0 0 -0.013616312773019643 210 210 0 0 0 -0.475529391106999 211 211 0 0 0 0.10232966150402548 212 212 0 0 0 0.7488940724700807 213 213 0 0 0 0.44197886128432695 214 214 0 0 0 1.018806470717939 215 215 0 0 0 1.187231623861802 216 216 0 0 0 0.8022976145656721 217 217 0 0 0 -0.4774086494408861 218 218 0 0 0 -0.14197769264202192 219 219 0 0 0 -0.1747777783307673 220 220 0 0 0 1.0313282851738685 221 221 0 0 0 0.09414395331571555 222 222 0 0 0 0.07864110999174483 223 223 0 0 0 -0.5611965282485419 224 224 0 0 0 -0.6176835872308691 225 225 0 0 0 -0.624780748917754 226 226 0 0 0 0.7262504583960367 227 227 0 0 0 0.6736681336462624 228 228 0 0 0 1.2074649724277058 229 229 0 0 0 -0.7000910464946777 230 230 0 0 0 1.0132498153713987 231 231 0 0 0 0.1086125064282297 232 232 0 0 0 1.5378432998509857 233 233 0 0 0 -0.38864483884544576 234 234 0 0 0 0.5853901243650999 235 235 0 0 0 0.6361493273442497 236 236 0 0 0 -2.3727188226249276 237 237 0 0 0 -0.1546518851418047 238 238 0 0 0 -0.4535321516545124 239 239 0 0 0 0.20059745542046717 240 240 0 0 0 1.6700071185481635 241 241 0 0 0 1.0303745125812633 242 242 0 0 0 -0.2080769141106961 243 243 0 0 0 0.1640491851783853 244 244 0 0 0 -0.28813258919928886 245 245 0 0 0 0.5230500717020431 246 246 0 0 0 0.3072979372247395 247 247 0 0 0 0.11651870056658613 248 248 0 0 0 -0.0020664157587947755 249 249 0 0 0 0.6554963064376974 250 250 0 0 0 -1.2541501943392634 251 251 0 0 0 0.0072657109833799294 252 252 0 0 0 2.6072042439689764 253 253 0 0 0 0.7873316028203755 254 254 0 0 0 -0.5739394940501295 255 255 0 0 0 0.4301393873631534 256 256 0 0 0 0.4980033880636772 257 257 0 0 0 -0.472708427483925 258 258 0 0 0 -2.115773568613388 259 259 0 0 0 -0.3027911974132581 260 260 0 0 0 0.1357209008468077 261 261 0 0 0 0.7462827401513036 262 262 0 0 0 1.0510433172779923 263 263 0 0 0 -0.9143361188838738 264 264 0 0 0 -1.980776740834876 265 265 0 0 0 0.5590372219564149 266 266 0 0 0 -1.4215222131613703 267 267 0 0 0 0.9366889840084335 268 268 0 0 0 0.38076689746763476 269 269 0 0 0 0.9453281558278972 270 270 0 0 0 0.057035845832356935 271 271 0 0 0 1.4745050564310078 272 272 0 0 0 -0.5174737513107168 273 273 0 0 0 -1.5571441883774875 274 274 0 0 0 -1.0887963283029611 275 275 0 0 0 1.2310204712452886 276 276 0 0 0 -0.4769402620727404 277 277 0 0 0 -0.22419481188150195 278 278 0 0 0 -0.5375714580159776 279 279 0 0 0 0.019698038241142538 280 280 0 0 0 1.1825833509904307 281 281 0 0 0 -0.7811541586520457 282 282 0 0 0 -0.4601117935870594 283 283 0 0 0 0.7033250873409186 284 284 0 0 0 -0.8409243958041983 285 285 0 0 0 0.5573349116266615 286 286 0 0 0 -1.6278769464058696 287 287 0 0 0 1.6583911801881541 288 288 0 0 0 -1.212032621830397 289 289 0 0 0 -0.9721467722081951 290 290 0 0 0 -0.5965740298455487 291 291 0 0 0 -1.2351363670664182 292 292 0 0 0 1.641895301641597 293 293 0 0 0 -0.42141703006240455 294 294 0 0 0 0.38753100560495457 295 295 0 0 0 -1.070382200424481 296 296 0 0 0 -0.517780452691308 297 297 0 0 0 1.1565871160947803 298 298 0 0 0 -0.6679020556063455 299 299 0 0 0 -0.970542580114166 300 300 0 0 0 -0.8655455001063305 301 301 0 0 0 -1.0789380083099478 302 302 0 0 0 -1.2440796197575608 303 303 0 0 0 -1.0446790730803917 304 304 0 0 0 -0.5695802535356469 305 305 0 0 0 -0.8473514861984687 306 306 0 0 0 -1.190100919435714 307 307 0 0 0 1.022380976723825 308 308 0 0 0 -1.9790492535631858 309 309 0 0 0 -1.5253493737129327 310 310 0 0 0 1.0894028037803278 311 311 0 0 0 0.6962558464296542 312 312 0 0 0 0.9874048999158505 313 313 0 0 0 0.11245625794433396 314 314 0 0 0 -0.050027987070537086 315 315 0 0 0 -0.8717433837106624 316 316 0 0 0 0.8146794446207906 317 317 0 0 0 -0.5526641897761696 318 318 0 0 0 1.2573937760035447 319 319 0 0 0 -1.2648304446149456 320 320 0 0 0 1.6530274769204985 321 321 0 0 0 1.30110161745003 322 322 0 0 0 -0.02018948002691863 323 323 0 0 0 -1.8836740231429716 324 324 0 0 0 1.4205846188601483 325 325 0 0 0 -0.689172153743396 326 326 0 0 0 -0.3044880253487302 327 327 0 0 0 -0.08520417701732463 328 328 0 0 0 2.851634453916995 329 329 0 0 0 -1.156810978360592 330 330 0 0 0 0.2825803847207173 331 331 0 0 0 -1.9500708808705018 332 332 0 0 0 -1.1752612835403988 333 333 0 0 0 -1.3324335054916632 334 334 0 0 0 0.706410116238176 335 335 0 0 0 -0.4389661673885548 336 336 0 0 0 -0.47198568412366393 337 337 0 0 0 -0.196005627932633 338 338 0 0 0 -0.3926918515697784 339 339 0 0 0 -1.2586337442612614 340 340 0 0 0 -0.28572183266312384 341 341 0 0 0 -0.821333467643559 342 342 0 0 0 1.0406689409301526 343 343 0 0 0 -0.38669408702632374 344 344 0 0 0 -1.7090986597057412 345 345 0 0 0 0.567446046270448 346 346 0 0 0 0.01714990950414205 347 347 0 0 0 0.0977745741751222 348 348 0 0 0 0.822230557498965 349 349 0 0 0 0.3963812215631262 350 350 0 0 0 -1.4985341158085754 351 351 0 0 0 -0.029960047096039638 352 352 0 0 0 -0.6528662364260229 353 353 0 0 0 -0.12170910991193998 354 354 0 0 0 1.0300254802129547 355 355 0 0 0 -0.16690139482289537 356 356 0 0 0 0.8377731253742943 357 357 0 0 0 -0.3887229530927819 358 358 0 0 0 0.14451356330621065 359 359 0 0 0 1.6073233297076983 360 360 0 0 0 0.07950441212552996 361 361 0 0 0 2.1497157962418174 362 362 0 0 0 -0.30427052777531594 363 363 0 0 0 -0.3025923417388714 364 364 0 0 0 -0.4397850120995375 365 365 0 0 0 0.45039620392874236 366 366 0 0 0 -0.8475714740581328 367 367 0 0 0 0.49438582682424076 368 368 0 0 0 1.7877305550184646 369 369 0 0 0 1.4928728753892113 370 370 0 0 0 1.0028215376206 371 371 0 0 0 -1.579481582437942 372 372 0 0 0 -1.4112071973049491 373 373 0 0 0 -0.3287910850620258 374 374 0 0 0 0.6335258906599922 375 375 0 0 0 1.5884402065569267 376 376 0 0 0 0.239439976093505 377 377 0 0 0 0.3730542303129533 378 378 0 0 0 -0.23125572369556183 379 379 0 0 0 0.04114817676435756 380 380 0 0 0 1.3148209110260505 381 381 0 0 0 0.4153394063226016 382 382 0 0 0 -2.119037113120731 383 383 0 0 0 -0.7357404438785312 384 384 0 0 0 -0.5458519940698457 385 385 0 0 0 -1.2600086040654477 386 386 0 0 0 0.5429663518299074 387 387 0 0 0 -0.24886613651789177 388 388 0 0 0 1.393586775779869 389 389 0 0 0 0.7655351504255072 390 390 0 0 0 1.574341948844662 391 391 0 0 0 0.28337819436221234 392 392 0 0 0 -0.28215538210870866 393 393 0 0 0 0.32677930042765563 394 394 0 0 0 -0.8933433333160953 395 395 0 0 0 -0.30611223649551184 396 396 0 0 0 -1.6327825926249717 397 397 0 0 0 0.983996289771191 398 398 0 0 0 -2.1094276028051713 399 399 0 0 0 -0.03004231237784647 400 400 0 0 0 0.2677517204111873 401 401 0 0 0 0.024441125372044015 402 402 0 0 0 -0.5518207938279379 403 403 0 0 0 -0.012559704828846413 404 404 0 0 0 0.7819900863897892 405 405 0 0 0 0.1331898731839282 406 406 0 0 0 0.48489696095614787 407 407 0 0 0 0.6642443953751778 408 408 0 0 0 -0.8030871260696271 409 409 0 0 0 -0.1895839551659786 410 410 0 0 0 -0.8034926266352286 411 411 0 0 0 0.09187570772040049 412 412 0 0 0 0.029248814008252747 413 413 0 0 0 -0.01533630905590288 414 414 0 0 0 1.1280827301911354 415 415 0 0 0 -0.2065160921398899 416 416 0 0 0 -0.05126145885052354 417 417 0 0 0 -1.3434267805209248 418 418 0 0 0 -0.18518422658884665 419 419 0 0 0 -0.24844114482463325 420 420 0 0 0 -0.06967600698783584 421 421 0 0 0 0.37664675241912393 422 422 0 0 0 -0.2569614554903415 423 423 0 0 0 0.7233028036905063 424 424 0 0 0 1.1103498482848735 425 425 0 0 0 -0.11945647973589903 426 426 0 0 0 -0.6396046050764921 427 427 0 0 0 0.5643452560242491 428 428 0 0 0 -0.3440947789770541 429 429 0 0 0 -2.22653169151592 430 430 0 0 0 -0.956032968271431 431 431 0 0 0 -0.8191888326171307 432 432 0 0 0 -2.4494492803640022 433 433 0 0 0 -0.0670051947640402 434 434 0 0 0 -1.0212450480574558 435 435 0 0 0 1.5642134356006847 436 436 0 0 0 -0.7686850358271917 437 437 0 0 0 0.9013174516851364 438 438 0 0 0 0.32615832192874417 439 439 0 0 0 -0.1396620902625725 440 440 0 0 0 0.7175824082953346 441 441 0 0 0 -1.298832108780333 442 442 0 0 0 -0.6380248204283618 443 443 0 0 0 1.3777981524996168 444 444 0 0 0 1.650381986618911 445 445 0 0 0 0.5867431709972836 446 446 0 0 0 -0.005896067871319781 447 447 0 0 0 0.13319016302360676 448 448 0 0 0 -1.2696437250217552 449 449 0 0 0 -0.12518065096985312 450 450 0 0 0 -1.244542673659207 451 451 0 0 0 -0.06610093209244285 452 452 0 0 0 2.5740374683027536 453 453 0 0 0 0.9289638283088296 454 454 0 0 0 0.5106401356154838 455 455 0 0 0 -1.3219451447015316 456 456 0 0 0 1.3056699098740336 457 457 0 0 0 -0.7429788972407904 458 458 0 0 0 -0.5935982739213578 459 459 0 0 0 -1.2444771294790702 460 460 0 0 0 -0.11027752291961805 461 461 0 0 0 0.15968337228108687 462 462 0 0 0 0.10015721622156738 463 463 0 0 0 -1.6712997326777923 464 464 0 0 0 1.1224222088370677 465 465 0 0 0 -0.8848696262558821 466 466 0 0 0 -0.43388376934423967 467 467 0 0 0 0.2330906457766794 468 468 0 0 0 -0.06850210820133934 469 469 0 0 0 -0.43079920208533806 470 470 0 0 0 0.6801247297121218 471 471 0 0 0 0.7062942755405903 472 472 0 0 0 -1.0125163790266498 473 473 0 0 0 1.1402191818385525 474 474 0 0 0 -0.09512756382895157 475 475 0 0 0 1.2043113720050476 476 476 0 0 0 -1.3101439365860013 477 477 0 0 0 -1.010236868117858 478 478 0 0 0 0.8681701631563481 479 479 0 0 0 -1.1399558386575048 480 480 0 0 0 0.2205328932586634 481 481 0 0 0 -0.5859626268400073 482 482 0 0 0 0.9365883769687702 483 483 0 0 0 -1.589591178874074 484 484 0 0 0 0.1145164389832793 485 485 0 0 0 0.275658677194189 486 486 0 0 0 1.8238148121727578 487 487 0 0 0 0.9195632859199347 488 488 0 0 0 1.1992281082636649 489 489 0 0 0 -0.28717216124743894 490 490 0 0 0 -0.1255644094578015 491 491 0 0 0 0.7660599548056037 492 492 0 0 0 0.0485016949386254 493 493 0 0 0 0.9191104275425048 494 494 0 0 0 -0.07849111590769194 495 495 0 0 0 -1.602274500274993 496 496 0 0 0 -2.016184028763443 497 497 0 0 0 1.3436149731702158 498 498 0 0 0 -1.8171186074532928 499 499 0 0 0 -0.46317733040012826 500 500 0 0 0 -0.9433895891176977 ================================================ FILE: example/example_3chr.joint_setlist ================================================ SET1 1 0 mog_19,mog_20,mog_21,mog_22,mog_23,mog_24,mog_25,mog_26,mog_27,mog_28,mog_29,mog_30,mog_31,mog_32,mog_33,mog_34 SET2 3 400 null_0 null_1 null_2 null_3 null_4 ================================================ FILE: example/example_3chr.masks ================================================ M1 pLof M2 pLof,missense,unknown1 M3 unknown1,unknown2 ================================================ FILE: example/example_3chr.sample ================================================ ID_1 ID_2 missing sex PHENO1 0 0 0 D P 1 1 0 NA -0.426776 2 2 0 NA 0.553949 3 3 0 NA -0.650162 4 4 0 NA 0.665824 5 5 0 NA 2.15353 6 6 0 NA 1.60361 7 7 0 NA 0.924509 8 8 0 NA 0.166955 9 9 0 NA -0.446781 10 10 0 NA 0.913018 11 11 0 NA -0.123653 12 12 0 NA 0.451207 13 13 0 NA -1.81342 14 14 0 NA 0.10916 15 15 0 NA 1.26067 16 16 0 NA 0.553231 17 17 0 NA 0.209452 18 18 0 NA -0.513218 19 19 0 NA 0.611907 20 20 0 NA 1.53946 21 21 0 NA -0.386504 22 22 0 NA -2.51434 23 23 0 NA 0.405703 24 24 0 NA 0.51856 25 25 0 NA 1.06115 26 26 0 NA 0.195941 27 27 0 NA -0.249796 28 28 0 NA -0.267648 29 29 0 NA 0.717794 30 30 0 NA 1.18612 31 31 0 NA 0.0862962 32 32 0 NA -0.353043 33 33 0 NA 0.23543 34 34 0 NA 1.53045 35 35 0 NA 0.457955 36 36 0 NA 0.41183 37 37 0 NA 1.01735 38 38 0 NA -1.38481 39 39 0 NA 1.75103 40 40 0 NA 0.274954 41 41 0 NA -1.9897 42 42 0 NA -0.274423 43 43 0 NA 1.42641 44 44 0 NA 1.67944 45 45 0 NA -1.97622 46 46 0 NA 1.31329 47 47 0 NA -1.23795 48 48 0 NA -1.22309 49 49 0 NA -0.208682 50 50 0 NA 0.0465913 51 51 0 NA 0.645466 52 52 0 NA -0.336671 53 53 0 NA -1.42514 54 54 0 NA -1.74041 55 55 0 NA -0.989992 56 56 0 NA -0.681306 57 57 0 NA 1.45234 58 58 0 NA -0.143956 59 59 0 NA -0.437836 60 60 0 NA -0.151927 61 61 0 NA -1.09187 62 62 0 NA 0.118866 63 63 0 NA -0.744682 64 64 0 NA -0.351599 65 65 0 NA -0.250524 66 66 0 NA -1.14453 67 67 0 NA 0.402101 68 68 0 NA -0.269673 69 69 0 NA -1.07104 70 70 0 NA 0.54661 71 71 0 NA 0.905989 72 72 0 NA -0.930246 73 73 0 NA -0.164935 74 74 0 NA -0.259298 75 75 0 NA -2.11448 76 76 0 NA -0.607634 77 77 0 NA 0.774801 78 78 0 NA -2.09622 79 79 0 NA -1.91166 80 80 0 NA 1.03534 81 81 0 NA 0.72945 82 82 0 NA -0.0979342 83 83 0 NA 0.245666 84 84 0 NA 0.938673 85 85 0 NA 1.73376 86 86 0 NA 3.59655 87 87 0 NA 0.10418 88 88 0 NA 0.818146 89 89 0 NA -0.471747 90 90 0 NA 1.32639 91 91 0 NA -0.616465 92 92 0 NA -1.19637 93 93 0 NA -2.52343 94 94 0 NA -1.6776 95 95 0 NA -1.32518 96 96 0 NA 0.588294 97 97 0 NA 1.23774 98 98 0 NA -0.292771 99 99 0 NA 2.21307 100 100 0 NA 1.39079 101 101 0 NA 0.348965 102 102 0 NA -0.179652 103 103 0 NA -1.71495 104 104 0 NA -0.360643 105 105 0 NA 0.255807 106 106 0 NA 0.78485 107 107 0 NA 2.50518 108 108 0 NA -1.81684 109 109 0 NA -0.0156569 110 110 0 NA 0.704029 111 111 0 NA -0.0113866 112 112 0 NA -0.640498 113 113 0 NA 2.07844 114 114 0 NA -0.225493 115 115 0 NA 0.00218799 116 116 0 NA 0.453076 117 117 0 NA 0.711156 118 118 0 NA -7.92646e-05 119 119 0 NA 1.27164 120 120 0 NA 0.130916 121 121 0 NA 0.960164 122 122 0 NA -0.694627 123 123 0 NA 1.20835 124 124 0 NA -0.555829 125 125 0 NA 0.408699 126 126 0 NA 0.863283 127 127 0 NA 0.864202 128 128 0 NA -0.451513 129 129 0 NA -0.191405 130 130 0 NA -0.0376491 131 131 0 NA 1.06995 132 132 0 NA 0.733263 133 133 0 NA -1.38596 134 134 0 NA -0.168826 135 135 0 NA 1.23416 136 136 0 NA -0.130181 137 137 0 NA -0.849622 138 138 0 NA 1.65559 139 139 0 NA -0.855749 140 140 0 NA -0.591996 141 141 0 NA 1.47661 142 142 0 NA -1.76068 143 143 0 NA 0.333135 144 144 0 NA -1.3168 145 145 0 NA 2.26584 146 146 0 NA -0.585547 147 147 0 NA 1.00424 148 148 0 NA 0.595063 149 149 0 NA -2.35898 150 150 0 NA 1.02006 151 151 0 NA -1.25786 152 152 0 NA -0.0970053 153 153 0 NA 0.336385 154 154 0 NA 1.79728 155 155 0 NA 0.270135 156 156 0 NA -0.380863 157 157 0 NA 0.0401893 158 158 0 NA -0.396513 159 159 0 NA 1.49365 160 160 0 NA -1.29933 161 161 0 NA 0.251928 162 162 0 NA 0.691775 163 163 0 NA 0.740751 164 164 0 NA -0.310567 165 165 0 NA -0.55526 166 166 0 NA -1.00578 167 167 0 NA 0.0545069 168 168 0 NA -0.634928 169 169 0 NA -0.669547 170 170 0 NA -0.232261 171 171 0 NA 0.703583 172 172 0 NA -0.313278 173 173 0 NA -0.249173 174 174 0 NA -0.659208 175 175 0 NA -0.947788 176 176 0 NA 0.480091 177 177 0 NA 0.47061 178 178 0 NA -0.0650563 179 179 0 NA -1.49593 180 180 0 NA 0.540549 181 181 0 NA 1.12327 182 182 0 NA 0.00744181 183 183 0 NA 0.663999 184 184 0 NA -0.567857 185 185 0 NA 0.229938 186 186 0 NA -0.170762 187 187 0 NA 0.34209 188 188 0 NA -0.109504 189 189 0 NA -0.068089 190 190 0 NA -2.31449 191 191 0 NA -1.07777 192 192 0 NA -0.339403 193 193 0 NA -1.5321 194 194 0 NA 1.27784 195 195 0 NA -0.618697 196 196 0 NA 0.244838 197 197 0 NA -0.0897247 198 198 0 NA 0.285638 199 199 0 NA 0.0266523 200 200 0 NA -0.855846 201 201 0 NA 0.103268 202 202 0 NA -0.46838 203 203 0 NA -0.0396295 204 204 0 NA 0.501029 205 205 0 NA -1.61463 206 206 0 NA -0.822108 207 207 0 NA -0.415433 208 208 0 NA 0.192556 209 209 0 NA -0.0136163 210 210 0 NA -0.475529 211 211 0 NA 0.10233 212 212 0 NA 0.748894 213 213 0 NA 0.441979 214 214 0 NA 1.01881 215 215 0 NA 1.18723 216 216 0 NA 0.802298 217 217 0 NA -0.477409 218 218 0 NA -0.141978 219 219 0 NA -0.174778 220 220 0 NA 1.03133 221 221 0 NA 0.094144 222 222 0 NA 0.0786411 223 223 0 NA -0.561197 224 224 0 NA -0.617684 225 225 0 NA -0.624781 226 226 0 NA 0.72625 227 227 0 NA 0.673668 228 228 0 NA 1.20746 229 229 0 NA -0.700091 230 230 0 NA 1.01325 231 231 0 NA 0.108613 232 232 0 NA 1.53784 233 233 0 NA -0.388645 234 234 0 NA 0.58539 235 235 0 NA 0.636149 236 236 0 NA -2.37272 237 237 0 NA -0.154652 238 238 0 NA -0.453532 239 239 0 NA 0.200597 240 240 0 NA 1.67001 241 241 0 NA 1.03037 242 242 0 NA -0.208077 243 243 0 NA 0.164049 244 244 0 NA -0.288133 245 245 0 NA 0.52305 246 246 0 NA 0.307298 247 247 0 NA 0.116519 248 248 0 NA -0.00206642 249 249 0 NA 0.655496 250 250 0 NA -1.25415 251 251 0 NA 0.00726571 252 252 0 NA 2.6072 253 253 0 NA 0.787332 254 254 0 NA -0.573939 255 255 0 NA 0.430139 256 256 0 NA 0.498003 257 257 0 NA -0.472708 258 258 0 NA -2.11577 259 259 0 NA -0.302791 260 260 0 NA 0.135721 261 261 0 NA 0.746283 262 262 0 NA 1.05104 263 263 0 NA -0.914336 264 264 0 NA -1.98078 265 265 0 NA 0.559037 266 266 0 NA -1.42152 267 267 0 NA 0.936689 268 268 0 NA 0.380767 269 269 0 NA 0.945328 270 270 0 NA 0.0570358 271 271 0 NA 1.47451 272 272 0 NA -0.517474 273 273 0 NA -1.55714 274 274 0 NA -1.0888 275 275 0 NA 1.23102 276 276 0 NA -0.47694 277 277 0 NA -0.224195 278 278 0 NA -0.537571 279 279 0 NA 0.019698 280 280 0 NA 1.18258 281 281 0 NA -0.781154 282 282 0 NA -0.460112 283 283 0 NA 0.703325 284 284 0 NA -0.840924 285 285 0 NA 0.557335 286 286 0 NA -1.62788 287 287 0 NA 1.65839 288 288 0 NA -1.21203 289 289 0 NA -0.972147 290 290 0 NA -0.596574 291 291 0 NA -1.23514 292 292 0 NA 1.6419 293 293 0 NA -0.421417 294 294 0 NA 0.387531 295 295 0 NA -1.07038 296 296 0 NA -0.51778 297 297 0 NA 1.15659 298 298 0 NA -0.667902 299 299 0 NA -0.970543 300 300 0 NA -0.865546 301 301 0 NA -1.07894 302 302 0 NA -1.24408 303 303 0 NA -1.04468 304 304 0 NA -0.56958 305 305 0 NA -0.847351 306 306 0 NA -1.1901 307 307 0 NA 1.02238 308 308 0 NA -1.97905 309 309 0 NA -1.52535 310 310 0 NA 1.0894 311 311 0 NA 0.696256 312 312 0 NA 0.987405 313 313 0 NA 0.112456 314 314 0 NA -0.050028 315 315 0 NA -0.871743 316 316 0 NA 0.814679 317 317 0 NA -0.552664 318 318 0 NA 1.25739 319 319 0 NA -1.26483 320 320 0 NA 1.65303 321 321 0 NA 1.3011 322 322 0 NA -0.0201895 323 323 0 NA -1.88367 324 324 0 NA 1.42058 325 325 0 NA -0.689172 326 326 0 NA -0.304488 327 327 0 NA -0.0852042 328 328 0 NA 2.85163 329 329 0 NA -1.15681 330 330 0 NA 0.28258 331 331 0 NA -1.95007 332 332 0 NA -1.17526 333 333 0 NA -1.33243 334 334 0 NA 0.70641 335 335 0 NA -0.438966 336 336 0 NA -0.471986 337 337 0 NA -0.196006 338 338 0 NA -0.392692 339 339 0 NA -1.25863 340 340 0 NA -0.285722 341 341 0 NA -0.821333 342 342 0 NA 1.04067 343 343 0 NA -0.386694 344 344 0 NA -1.7091 345 345 0 NA 0.567446 346 346 0 NA 0.0171499 347 347 0 NA 0.0977746 348 348 0 NA 0.822231 349 349 0 NA 0.396381 350 350 0 NA -1.49853 351 351 0 NA -0.02996 352 352 0 NA -0.652866 353 353 0 NA -0.121709 354 354 0 NA 1.03003 355 355 0 NA -0.166901 356 356 0 NA 0.837773 357 357 0 NA -0.388723 358 358 0 NA 0.144514 359 359 0 NA 1.60732 360 360 0 NA 0.0795044 361 361 0 NA 2.14972 362 362 0 NA -0.304271 363 363 0 NA -0.302592 364 364 0 NA -0.439785 365 365 0 NA 0.450396 366 366 0 NA -0.847571 367 367 0 NA 0.494386 368 368 0 NA 1.78773 369 369 0 NA 1.49287 370 370 0 NA 1.00282 371 371 0 NA -1.57948 372 372 0 NA -1.41121 373 373 0 NA -0.328791 374 374 0 NA 0.633526 375 375 0 NA 1.58844 376 376 0 NA 0.23944 377 377 0 NA 0.373054 378 378 0 NA -0.231256 379 379 0 NA 0.0411482 380 380 0 NA 1.31482 381 381 0 NA 0.415339 382 382 0 NA -2.11904 383 383 0 NA -0.73574 384 384 0 NA -0.545852 385 385 0 NA -1.26001 386 386 0 NA 0.542966 387 387 0 NA -0.248866 388 388 0 NA 1.39359 389 389 0 NA 0.765535 390 390 0 NA 1.57434 391 391 0 NA 0.283378 392 392 0 NA -0.282155 393 393 0 NA 0.326779 394 394 0 NA -0.893343 395 395 0 NA -0.306112 396 396 0 NA -1.63278 397 397 0 NA 0.983996 398 398 0 NA -2.10943 399 399 0 NA -0.0300423 400 400 0 NA 0.267752 401 401 0 NA 0.0244411 402 402 0 NA -0.551821 403 403 0 NA -0.0125597 404 404 0 NA 0.78199 405 405 0 NA 0.13319 406 406 0 NA 0.484897 407 407 0 NA 0.664244 408 408 0 NA -0.803087 409 409 0 NA -0.189584 410 410 0 NA -0.803493 411 411 0 NA 0.0918757 412 412 0 NA 0.0292488 413 413 0 NA -0.0153363 414 414 0 NA 1.12808 415 415 0 NA -0.206516 416 416 0 NA -0.0512615 417 417 0 NA -1.34343 418 418 0 NA -0.185184 419 419 0 NA -0.248441 420 420 0 NA -0.069676 421 421 0 NA 0.376647 422 422 0 NA -0.256961 423 423 0 NA 0.723303 424 424 0 NA 1.11035 425 425 0 NA -0.119456 426 426 0 NA -0.639605 427 427 0 NA 0.564345 428 428 0 NA -0.344095 429 429 0 NA -2.22653 430 430 0 NA -0.956033 431 431 0 NA -0.819189 432 432 0 NA -2.44945 433 433 0 NA -0.0670052 434 434 0 NA -1.02125 435 435 0 NA 1.56421 436 436 0 NA -0.768685 437 437 0 NA 0.901317 438 438 0 NA 0.326158 439 439 0 NA -0.139662 440 440 0 NA 0.717582 441 441 0 NA -1.29883 442 442 0 NA -0.638025 443 443 0 NA 1.3778 444 444 0 NA 1.65038 445 445 0 NA 0.586743 446 446 0 NA -0.00589607 447 447 0 NA 0.13319 448 448 0 NA -1.26964 449 449 0 NA -0.125181 450 450 0 NA -1.24454 451 451 0 NA -0.0661009 452 452 0 NA 2.57404 453 453 0 NA 0.928964 454 454 0 NA 0.51064 455 455 0 NA -1.32195 456 456 0 NA 1.30567 457 457 0 NA -0.742979 458 458 0 NA -0.593598 459 459 0 NA -1.24448 460 460 0 NA -0.110278 461 461 0 NA 0.159683 462 462 0 NA 0.100157 463 463 0 NA -1.6713 464 464 0 NA 1.12242 465 465 0 NA -0.88487 466 466 0 NA -0.433884 467 467 0 NA 0.233091 468 468 0 NA -0.0685021 469 469 0 NA -0.430799 470 470 0 NA 0.680125 471 471 0 NA 0.706294 472 472 0 NA -1.01252 473 473 0 NA 1.14022 474 474 0 NA -0.0951276 475 475 0 NA 1.20431 476 476 0 NA -1.31014 477 477 0 NA -1.01024 478 478 0 NA 0.86817 479 479 0 NA -1.13996 480 480 0 NA 0.220533 481 481 0 NA -0.585963 482 482 0 NA 0.936588 483 483 0 NA -1.58959 484 484 0 NA 0.114516 485 485 0 NA 0.275659 486 486 0 NA 1.82381 487 487 0 NA 0.919563 488 488 0 NA 1.19923 489 489 0 NA -0.287172 490 490 0 NA -0.125564 491 491 0 NA 0.76606 492 492 0 NA 0.0485017 493 493 0 NA 0.91911 494 494 0 NA -0.0784911 495 495 0 NA -1.60227 496 496 0 NA -2.01618 497 497 0 NA 1.34361 498 498 0 NA -1.81712 499 499 0 NA -0.463177 500 500 0 NA -0.94339 ================================================ FILE: example/example_3chr.setlist ================================================ SET1 1 1 mog_0,mog_1,mog_2,mog_3,mog_4,mog_5,mog_6,mog_7,mog_8,mog_9,mog_10,mog_11,mog_12,mog_13,mog_14,mog_15,mog_16,mog_17,mog_18,mog_19,mog_20,mog_21,mog_22,mog_23,mog_24,mog_25,mog_26,mog_27,mog_28,mog_29,mog_30,mog_31,mog_32,mog_33,mog_34,mog_35,mog_36,mog_37,mog_38,mog_39 SET2 3 500 null_20,null_21,null_22,null_23,null_24,null_25,null_26,null_27,null_28,null_29,null_30,null_31,null_32,null_33,null_34,null_35,null_36,null_37,null_38,null_39,null_40,null_41,null_42,null_43,null_44,null_45,null_46,null_47,null_48,null_49,rsidNull1 SET4 3 23 rsidNull2,rsidNull3 ================================================ FILE: example/example_3chr.write_sets ================================================ tmp1 M1 tmp2 M1,M2 ================================================ FILE: example/example_3chr_masks.bim ================================================ 1 SET1.M1.0.2 0 1 D d 3 SET2.M2.0.2 0 500 D d ================================================ FILE: example/example_3chr_masks.fam ================================================ 1 1 0 0 0 -0.4267761781290719 2 2 0 0 0 0.553949147355921 3 3 0 0 0 -0.6501615855731889 4 4 0 0 0 0.6658237998926421 5 5 0 0 0 2.153525389108508 6 6 0 0 0 1.603607081080267 7 7 0 0 0 0.9245092282950891 8 8 0 0 0 0.16695520568640973 9 9 0 0 0 -0.44678076953973184 10 10 0 0 0 0.9130182655669581 11 11 0 0 0 -0.12365315280028831 12 12 0 0 0 0.45120658048742923 13 13 0 0 0 -1.813422352445905 14 14 0 0 0 0.10916042619322039 15 15 0 0 0 1.2606692333542373 16 16 0 0 0 0.5532311359350739 17 17 0 0 0 0.20945215196889685 18 18 0 0 0 -0.5132181734188253 19 19 0 0 0 0.6119067760087953 20 20 0 0 0 1.5394566797469251 21 21 0 0 0 -0.3865037693784083 22 22 0 0 0 -2.5143419880300866 23 23 0 0 0 0.405703045213449 24 24 0 0 0 0.5185603274229008 25 25 0 0 0 1.0611484493881813 26 26 0 0 0 0.19594051011058977 27 27 0 0 0 -0.24979581720203475 28 28 0 0 0 -0.2676477096598135 29 29 0 0 0 0.7177935231258309 30 30 0 0 0 1.1861246517682622 31 31 0 0 0 0.08629622130288517 32 32 0 0 0 -0.35304293360949707 33 33 0 0 0 0.2354296885149071 34 34 0 0 0 1.530452595962293 35 35 0 0 0 0.4579547646635299 36 36 0 0 0 0.4118304659618171 37 37 0 0 0 1.0173491056828072 38 38 0 0 0 -1.3848053256406825 39 39 0 0 0 1.7510265942816932 40 40 0 0 0 0.274954268508773 41 41 0 0 0 -1.9897038536605167 42 42 0 0 0 -0.2744230179428616 43 43 0 0 0 1.426414899954135 44 44 0 0 0 1.6794358446939521 45 45 0 0 0 -1.9762223272212731 46 46 0 0 0 1.31328879515592 47 47 0 0 0 -1.2379452021381565 48 48 0 0 0 -1.2230942245689198 49 49 0 0 0 -0.2086823379220931 50 50 0 0 0 0.046591344965807927 51 51 0 0 0 0.6454664759221705 52 52 0 0 0 -0.3366711458816414 53 53 0 0 0 -1.4251415011354847 54 54 0 0 0 -1.7404106776289252 55 55 0 0 0 -0.9899916360986122 56 56 0 0 0 -0.6813055796709735 57 57 0 0 0 1.4523360524496092 58 58 0 0 0 -0.14395595141327489 59 59 0 0 0 -0.4378362565094535 60 60 0 0 0 -0.1519268773269188 61 61 0 0 0 -1.0918707470545093 62 62 0 0 0 0.11886585929161704 63 63 0 0 0 -0.7446821129490644 64 64 0 0 0 -0.3515988379695028 65 65 0 0 0 -0.2505242457789806 66 66 0 0 0 -1.1445325100301038 67 67 0 0 0 0.4021008709651108 68 68 0 0 0 -0.26967294800034874 69 69 0 0 0 -1.071043452154829 70 70 0 0 0 0.5466104498110623 71 71 0 0 0 0.9059888912622454 72 72 0 0 0 -0.9302463996121689 73 73 0 0 0 -0.1649348560132909 74 74 0 0 0 -0.2592977286319428 75 75 0 0 0 -2.114476477667718 76 76 0 0 0 -0.6076341029698831 77 77 0 0 0 0.7748006221315341 78 78 0 0 0 -2.0962224712289843 79 79 0 0 0 -1.9116579659512944 80 80 0 0 0 1.0353397078763547 81 81 0 0 0 0.7294502561042351 82 82 0 0 0 -0.09793421592240978 83 83 0 0 0 0.24566617144478756 84 84 0 0 0 0.9386731103091898 85 85 0 0 0 1.7337564931524567 86 86 0 0 0 3.5965463607888486 87 87 0 0 0 0.10417950242086334 88 88 0 0 0 0.8181457381771525 89 89 0 0 0 -0.4717474685706561 90 90 0 0 0 1.3263850865010316 91 91 0 0 0 -0.616465031940274 92 92 0 0 0 -1.1963740018230864 93 93 0 0 0 -2.523429651265045 94 94 0 0 0 -1.6775958547520566 95 95 0 0 0 -1.325183339632047 96 96 0 0 0 0.5882935940652537 97 97 0 0 0 1.2377386081497168 98 98 0 0 0 -0.2927710750283572 99 99 0 0 0 2.2130683684766117 100 100 0 0 0 1.3907852235803377 101 101 0 0 0 0.3489648675330413 102 102 0 0 0 -0.17965231137324936 103 103 0 0 0 -1.714950186712027 104 104 0 0 0 -0.3606425914729865 105 105 0 0 0 0.2558071082994665 106 106 0 0 0 0.7848503716979157 107 107 0 0 0 2.505180527543909 108 108 0 0 0 -1.8168385585899676 109 109 0 0 0 -0.01565688433622611 110 110 0 0 0 0.7040291497308593 111 111 0 0 0 -0.011386617718583729 112 112 0 0 0 -0.6404979013481404 113 113 0 0 0 2.0784381335821682 114 114 0 0 0 -0.2254928329575596 115 115 0 0 0 0.0021879911560499826 116 116 0 0 0 0.4530758437690287 117 117 0 0 0 0.7111556836519528 118 118 0 0 0 -7.926457716849677e-5 119 119 0 0 0 1.2716437121248285 120 120 0 0 0 0.13091641539525625 121 121 0 0 0 0.9601642531802883 122 122 0 0 0 -0.6946269492816117 123 123 0 0 0 1.2083545960448898 124 124 0 0 0 -0.5558287669378148 125 125 0 0 0 0.40869932288799415 126 126 0 0 0 0.8632834147663099 127 127 0 0 0 0.8642022294643745 128 128 0 0 0 -0.45151257769571096 129 129 0 0 0 -0.1914051114382599 130 130 0 0 0 -0.037649137239090524 131 131 0 0 0 1.069953907594907 132 132 0 0 0 0.7332632139169448 133 133 0 0 0 -1.3859563214470878 134 134 0 0 0 -0.16882598316337785 135 135 0 0 0 1.2341578254519214 136 136 0 0 0 -0.13018118909812346 137 137 0 0 0 -0.849622061183973 138 138 0 0 0 1.65558791310931 139 139 0 0 0 -0.8557488969973114 140 140 0 0 0 -0.591996102804245 141 141 0 0 0 1.4766090213622798 142 142 0 0 0 -1.7606788880705646 143 143 0 0 0 0.3331349454598871 144 144 0 0 0 -1.316796818445614 145 145 0 0 0 2.2658417254598926 146 146 0 0 0 -0.5855466346375702 147 147 0 0 0 1.004242318973581 148 148 0 0 0 0.5950634513012234 149 149 0 0 0 -2.3589818092376342 150 150 0 0 0 1.020059747279963 151 151 0 0 0 -1.2578575928423548 152 152 0 0 0 -0.09700531448496873 153 153 0 0 0 0.33638529718875043 154 154 0 0 0 1.7972793724047749 155 155 0 0 0 0.27013487552553606 156 156 0 0 0 -0.3808633841949227 157 157 0 0 0 0.04018926790384476 158 158 0 0 0 -0.3965127185254764 159 159 0 0 0 1.4936455086379186 160 160 0 0 0 -1.2993293254003835 161 161 0 0 0 0.2519277543876505 162 162 0 0 0 0.691774608729148 163 163 0 0 0 0.7407513064839535 164 164 0 0 0 -0.31056687191510746 165 165 0 0 0 -0.5552597332076762 166 166 0 0 0 -1.0057835319597124 167 167 0 0 0 0.05450686156271301 168 168 0 0 0 -0.6349282429298715 169 169 0 0 0 -0.6695465895569117 170 170 0 0 0 -0.23226063332510133 171 171 0 0 0 0.7035825230515401 172 172 0 0 0 -0.31327835211735766 173 173 0 0 0 -0.24917314601702809 174 174 0 0 0 -0.6592080848536208 175 175 0 0 0 -0.9477879953319399 176 176 0 0 0 0.48009125370245204 177 177 0 0 0 0.4706100983663504 178 178 0 0 0 -0.06505632309350708 179 179 0 0 0 -1.4959269095746512 180 180 0 0 0 0.5405485678497597 181 181 0 0 0 1.1232696382170495 182 182 0 0 0 0.0074418075185122565 183 183 0 0 0 0.6639986494873168 184 184 0 0 0 -0.5678566487451827 185 185 0 0 0 0.2299383937915558 186 186 0 0 0 -0.17076218909155186 187 187 0 0 0 0.3420901284971981 188 188 0 0 0 -0.10950363726652125 189 189 0 0 0 -0.06808902942736765 190 190 0 0 0 -2.3144897119335965 191 191 0 0 0 -1.0777725703353438 192 192 0 0 0 -0.3394034459756072 193 193 0 0 0 -1.5321020124626434 194 194 0 0 0 1.277838035763474 195 195 0 0 0 -0.6186969481783715 196 196 0 0 0 0.24483826998859312 197 197 0 0 0 -0.08972472068807524 198 198 0 0 0 0.28563820059484707 199 199 0 0 0 0.02665228610242174 200 200 0 0 0 -0.8558456209545621 201 201 0 0 0 0.10326780109110945 202 202 0 0 0 -0.4683803455991253 203 203 0 0 0 -0.039629458692737506 204 204 0 0 0 0.5010288555718972 205 205 0 0 0 -1.614633788145904 206 206 0 0 0 -0.8221081713776588 207 207 0 0 0 -0.4154327362321607 208 208 0 0 0 0.19255584244438567 209 209 0 0 0 -0.013616312773019643 210 210 0 0 0 -0.475529391106999 211 211 0 0 0 0.10232966150402548 212 212 0 0 0 0.7488940724700807 213 213 0 0 0 0.44197886128432695 214 214 0 0 0 1.018806470717939 215 215 0 0 0 1.187231623861802 216 216 0 0 0 0.8022976145656721 217 217 0 0 0 -0.4774086494408861 218 218 0 0 0 -0.14197769264202192 219 219 0 0 0 -0.1747777783307673 220 220 0 0 0 1.0313282851738685 221 221 0 0 0 0.09414395331571555 222 222 0 0 0 0.07864110999174483 223 223 0 0 0 -0.5611965282485419 224 224 0 0 0 -0.6176835872308691 225 225 0 0 0 -0.624780748917754 226 226 0 0 0 0.7262504583960367 227 227 0 0 0 0.6736681336462624 228 228 0 0 0 1.2074649724277058 229 229 0 0 0 -0.7000910464946777 230 230 0 0 0 1.0132498153713987 231 231 0 0 0 0.1086125064282297 232 232 0 0 0 1.5378432998509857 233 233 0 0 0 -0.38864483884544576 234 234 0 0 0 0.5853901243650999 235 235 0 0 0 0.6361493273442497 236 236 0 0 0 -2.3727188226249276 237 237 0 0 0 -0.1546518851418047 238 238 0 0 0 -0.4535321516545124 239 239 0 0 0 0.20059745542046717 240 240 0 0 0 1.6700071185481635 241 241 0 0 0 1.0303745125812633 242 242 0 0 0 -0.2080769141106961 243 243 0 0 0 0.1640491851783853 244 244 0 0 0 -0.28813258919928886 245 245 0 0 0 0.5230500717020431 246 246 0 0 0 0.3072979372247395 247 247 0 0 0 0.11651870056658613 248 248 0 0 0 -0.0020664157587947755 249 249 0 0 0 0.6554963064376974 250 250 0 0 0 -1.2541501943392634 251 251 0 0 0 0.0072657109833799294 252 252 0 0 0 2.6072042439689764 253 253 0 0 0 0.7873316028203755 254 254 0 0 0 -0.5739394940501295 255 255 0 0 0 0.4301393873631534 256 256 0 0 0 0.4980033880636772 257 257 0 0 0 -0.472708427483925 258 258 0 0 0 -2.115773568613388 259 259 0 0 0 -0.3027911974132581 260 260 0 0 0 0.1357209008468077 261 261 0 0 0 0.7462827401513036 262 262 0 0 0 1.0510433172779923 263 263 0 0 0 -0.9143361188838738 264 264 0 0 0 -1.980776740834876 265 265 0 0 0 0.5590372219564149 266 266 0 0 0 -1.4215222131613703 267 267 0 0 0 0.9366889840084335 268 268 0 0 0 0.38076689746763476 269 269 0 0 0 0.9453281558278972 270 270 0 0 0 0.057035845832356935 271 271 0 0 0 1.4745050564310078 272 272 0 0 0 -0.5174737513107168 273 273 0 0 0 -1.5571441883774875 274 274 0 0 0 -1.0887963283029611 275 275 0 0 0 1.2310204712452886 276 276 0 0 0 -0.4769402620727404 277 277 0 0 0 -0.22419481188150195 278 278 0 0 0 -0.5375714580159776 279 279 0 0 0 0.019698038241142538 280 280 0 0 0 1.1825833509904307 281 281 0 0 0 -0.7811541586520457 282 282 0 0 0 -0.4601117935870594 283 283 0 0 0 0.7033250873409186 284 284 0 0 0 -0.8409243958041983 285 285 0 0 0 0.5573349116266615 286 286 0 0 0 -1.6278769464058696 287 287 0 0 0 1.6583911801881541 288 288 0 0 0 -1.212032621830397 289 289 0 0 0 -0.9721467722081951 290 290 0 0 0 -0.5965740298455487 291 291 0 0 0 -1.2351363670664182 292 292 0 0 0 1.641895301641597 293 293 0 0 0 -0.42141703006240455 294 294 0 0 0 0.38753100560495457 295 295 0 0 0 -1.070382200424481 296 296 0 0 0 -0.517780452691308 297 297 0 0 0 1.1565871160947803 298 298 0 0 0 -0.6679020556063455 299 299 0 0 0 -0.970542580114166 300 300 0 0 0 -0.8655455001063305 301 301 0 0 0 -1.0789380083099478 302 302 0 0 0 -1.2440796197575608 303 303 0 0 0 -1.0446790730803917 304 304 0 0 0 -0.5695802535356469 305 305 0 0 0 -0.8473514861984687 306 306 0 0 0 -1.190100919435714 307 307 0 0 0 1.022380976723825 308 308 0 0 0 -1.9790492535631858 309 309 0 0 0 -1.5253493737129327 310 310 0 0 0 1.0894028037803278 311 311 0 0 0 0.6962558464296542 312 312 0 0 0 0.9874048999158505 313 313 0 0 0 0.11245625794433396 314 314 0 0 0 -0.050027987070537086 315 315 0 0 0 -0.8717433837106624 316 316 0 0 0 0.8146794446207906 317 317 0 0 0 -0.5526641897761696 318 318 0 0 0 1.2573937760035447 319 319 0 0 0 -1.2648304446149456 320 320 0 0 0 1.6530274769204985 321 321 0 0 0 1.30110161745003 322 322 0 0 0 -0.02018948002691863 323 323 0 0 0 -1.8836740231429716 324 324 0 0 0 1.4205846188601483 325 325 0 0 0 -0.689172153743396 326 326 0 0 0 -0.3044880253487302 327 327 0 0 0 -0.08520417701732463 328 328 0 0 0 2.851634453916995 329 329 0 0 0 -1.156810978360592 330 330 0 0 0 0.2825803847207173 331 331 0 0 0 -1.9500708808705018 332 332 0 0 0 -1.1752612835403988 333 333 0 0 0 -1.3324335054916632 334 334 0 0 0 0.706410116238176 335 335 0 0 0 -0.4389661673885548 336 336 0 0 0 -0.47198568412366393 337 337 0 0 0 -0.196005627932633 338 338 0 0 0 -0.3926918515697784 339 339 0 0 0 -1.2586337442612614 340 340 0 0 0 -0.28572183266312384 341 341 0 0 0 -0.821333467643559 342 342 0 0 0 1.0406689409301526 343 343 0 0 0 -0.38669408702632374 344 344 0 0 0 -1.7090986597057412 345 345 0 0 0 0.567446046270448 346 346 0 0 0 0.01714990950414205 347 347 0 0 0 0.0977745741751222 348 348 0 0 0 0.822230557498965 349 349 0 0 0 0.3963812215631262 350 350 0 0 0 -1.4985341158085754 351 351 0 0 0 -0.029960047096039638 352 352 0 0 0 -0.6528662364260229 353 353 0 0 0 -0.12170910991193998 354 354 0 0 0 1.0300254802129547 355 355 0 0 0 -0.16690139482289537 356 356 0 0 0 0.8377731253742943 357 357 0 0 0 -0.3887229530927819 358 358 0 0 0 0.14451356330621065 359 359 0 0 0 1.6073233297076983 360 360 0 0 0 0.07950441212552996 361 361 0 0 0 2.1497157962418174 362 362 0 0 0 -0.30427052777531594 363 363 0 0 0 -0.3025923417388714 364 364 0 0 0 -0.4397850120995375 365 365 0 0 0 0.45039620392874236 366 366 0 0 0 -0.8475714740581328 367 367 0 0 0 0.49438582682424076 368 368 0 0 0 1.7877305550184646 369 369 0 0 0 1.4928728753892113 370 370 0 0 0 1.0028215376206 371 371 0 0 0 -1.579481582437942 372 372 0 0 0 -1.4112071973049491 373 373 0 0 0 -0.3287910850620258 374 374 0 0 0 0.6335258906599922 375 375 0 0 0 1.5884402065569267 376 376 0 0 0 0.239439976093505 377 377 0 0 0 0.3730542303129533 378 378 0 0 0 -0.23125572369556183 379 379 0 0 0 0.04114817676435756 380 380 0 0 0 1.3148209110260505 381 381 0 0 0 0.4153394063226016 382 382 0 0 0 -2.119037113120731 383 383 0 0 0 -0.7357404438785312 384 384 0 0 0 -0.5458519940698457 385 385 0 0 0 -1.2600086040654477 386 386 0 0 0 0.5429663518299074 387 387 0 0 0 -0.24886613651789177 388 388 0 0 0 1.393586775779869 389 389 0 0 0 0.7655351504255072 390 390 0 0 0 1.574341948844662 391 391 0 0 0 0.28337819436221234 392 392 0 0 0 -0.28215538210870866 393 393 0 0 0 0.32677930042765563 394 394 0 0 0 -0.8933433333160953 395 395 0 0 0 -0.30611223649551184 396 396 0 0 0 -1.6327825926249717 397 397 0 0 0 0.983996289771191 398 398 0 0 0 -2.1094276028051713 399 399 0 0 0 -0.03004231237784647 400 400 0 0 0 0.2677517204111873 401 401 0 0 0 0.024441125372044015 402 402 0 0 0 -0.5518207938279379 403 403 0 0 0 -0.012559704828846413 404 404 0 0 0 0.7819900863897892 405 405 0 0 0 0.1331898731839282 406 406 0 0 0 0.48489696095614787 407 407 0 0 0 0.6642443953751778 408 408 0 0 0 -0.8030871260696271 409 409 0 0 0 -0.1895839551659786 410 410 0 0 0 -0.8034926266352286 411 411 0 0 0 0.09187570772040049 412 412 0 0 0 0.029248814008252747 413 413 0 0 0 -0.01533630905590288 414 414 0 0 0 1.1280827301911354 415 415 0 0 0 -0.2065160921398899 416 416 0 0 0 -0.05126145885052354 417 417 0 0 0 -1.3434267805209248 418 418 0 0 0 -0.18518422658884665 419 419 0 0 0 -0.24844114482463325 420 420 0 0 0 -0.06967600698783584 421 421 0 0 0 0.37664675241912393 422 422 0 0 0 -0.2569614554903415 423 423 0 0 0 0.7233028036905063 424 424 0 0 0 1.1103498482848735 425 425 0 0 0 -0.11945647973589903 426 426 0 0 0 -0.6396046050764921 427 427 0 0 0 0.5643452560242491 428 428 0 0 0 -0.3440947789770541 429 429 0 0 0 -2.22653169151592 430 430 0 0 0 -0.956032968271431 431 431 0 0 0 -0.8191888326171307 432 432 0 0 0 -2.4494492803640022 433 433 0 0 0 -0.0670051947640402 434 434 0 0 0 -1.0212450480574558 435 435 0 0 0 1.5642134356006847 436 436 0 0 0 -0.7686850358271917 437 437 0 0 0 0.9013174516851364 438 438 0 0 0 0.32615832192874417 439 439 0 0 0 -0.1396620902625725 440 440 0 0 0 0.7175824082953346 441 441 0 0 0 -1.298832108780333 442 442 0 0 0 -0.6380248204283618 443 443 0 0 0 1.3777981524996168 444 444 0 0 0 1.650381986618911 445 445 0 0 0 0.5867431709972836 446 446 0 0 0 -0.005896067871319781 447 447 0 0 0 0.13319016302360676 448 448 0 0 0 -1.2696437250217552 449 449 0 0 0 -0.12518065096985312 450 450 0 0 0 -1.244542673659207 451 451 0 0 0 -0.06610093209244285 452 452 0 0 0 2.5740374683027536 453 453 0 0 0 0.9289638283088296 454 454 0 0 0 0.5106401356154838 455 455 0 0 0 -1.3219451447015316 456 456 0 0 0 1.3056699098740336 457 457 0 0 0 -0.7429788972407904 458 458 0 0 0 -0.5935982739213578 459 459 0 0 0 -1.2444771294790702 460 460 0 0 0 -0.11027752291961805 461 461 0 0 0 0.15968337228108687 462 462 0 0 0 0.10015721622156738 463 463 0 0 0 -1.6712997326777923 464 464 0 0 0 1.1224222088370677 465 465 0 0 0 -0.8848696262558821 466 466 0 0 0 -0.43388376934423967 467 467 0 0 0 0.2330906457766794 468 468 0 0 0 -0.06850210820133934 469 469 0 0 0 -0.43079920208533806 470 470 0 0 0 0.6801247297121218 471 471 0 0 0 0.7062942755405903 472 472 0 0 0 -1.0125163790266498 473 473 0 0 0 1.1402191818385525 474 474 0 0 0 -0.09512756382895157 475 475 0 0 0 1.2043113720050476 476 476 0 0 0 -1.3101439365860013 477 477 0 0 0 -1.010236868117858 478 478 0 0 0 0.8681701631563481 479 479 0 0 0 -1.1399558386575048 480 480 0 0 0 0.2205328932586634 481 481 0 0 0 -0.5859626268400073 482 482 0 0 0 0.9365883769687702 483 483 0 0 0 -1.589591178874074 484 484 0 0 0 0.1145164389832793 485 485 0 0 0 0.275658677194189 486 486 0 0 0 1.8238148121727578 487 487 0 0 0 0.9195632859199347 488 488 0 0 0 1.1992281082636649 489 489 0 0 0 -0.28717216124743894 490 490 0 0 0 -0.1255644094578015 491 491 0 0 0 0.7660599548056037 492 492 0 0 0 0.0485016949386254 493 493 0 0 0 0.9191104275425048 494 494 0 0 0 -0.07849111590769194 495 495 0 0 0 -1.602274500274993 496 496 0 0 0 -2.016184028763443 497 497 0 0 0 1.3436149731702158 498 498 0 0 0 -1.8171186074532928 499 499 0 0 0 -0.46317733040012826 500 500 0 0 0 -0.9433895891176977 ================================================ FILE: example/fid_iid_to_remove.txt ================================================ 35 35 136 136 77 77 100 100 204 204 474 474 ================================================ FILE: example/phenotype.txt ================================================ FID IID Y1 Y2 1 1 1.64818554321186 2.2765234736685 2 2 -2.67352013711554 -1.53680421614647 3 3 0.217542851471485 0.437289912695016 4 4 -1.0682692958554 -0.172344146164226 5 5 -0.132812553179586 -0.156011181306344 6 6 0.540099244934828 0.58172506850607 7 7 0.200655325192179 -0.0628377394374 8 8 -0.0459854613468314 0.265509522791825 9 9 1.3307615630166 1.71743500320666 10 10 0.912180962372195 0.187551558913078 11 11 -0.534547354840137 0.127496169914245 12 12 0.27896641757041 -1.42731255991967 13 13 -1.53970463226097 -0.532864539532899 14 14 -0.90082624741872 -1.56632086145511 15 15 -0.820750086136125 -1.90758965913578 16 16 -0.505187618648548 -0.18312079881002 17 17 -0.89722597069202 -0.217412756332358 18 18 -0.530246039837079 -0.514277172286367 19 19 -1.11005552246422 -0.362149833733552 20 20 0.135219961957339 1.10246617780573 21 21 0.674908877044016 0.657896901326819 22 22 -0.871416975041294 -0.114765123686352 23 23 -1.15266855203515 -2.56052285573202 24 24 -1.33078180898898 0.901847508702005 25 25 -0.33689786864605 0.564196915751343 26 26 1.28793604289375 -0.460800742311677 27 27 -1.89614375166477 -2.16796161162642 28 28 0.932225717344624 -0.993295429461682 29 29 -1.43304637355045 -1.17580626345375 30 30 -0.79692352468168 -0.0936092127952809 31 31 -0.818843785975256 -0.53253698628974 32 32 1.2087128520519 1.03501254726163 33 33 0.633931435132684 0.44615886486519 34 34 0.576237437022807 1.0904346633205 35 35 2.42290456969191 1.43948290383436 36 36 0.23103458500135 -0.0587673810762215 37 37 -0.0251633689616453 -1.57102910327571 38 38 -1.49850486580673 -2.05632349978027 39 39 0.316565138599832 0.325314072043067 40 40 -1.52502765452174 -0.213827394178769 41 41 0.740940592283646 1.09893022241462 42 42 1.78712212335387 1.19127592854588 43 43 1.58192040703461 1.20206719830346 44 44 -0.509715644341248 -1.14873512768313 45 45 -0.830082090282309 0.228605478322461 46 46 -0.0491164852343067 -0.137775954204466 47 47 1.94157887063373 0.847918312742163 48 48 1.20359097976829 -0.399549607806882 49 49 -1.23913127708202 0.0150388307226249 50 50 -0.966968307164566 -0.737477146954062 51 51 -0.820430264709707 -1.6636201222228 52 52 -2.40812671796387 -1.20651243686562 53 53 -1.57969403761047 -0.0257757200489035 54 54 -1.13320388228761 -0.751544439673961 55 55 0.893631925732109 1.13746868718638 56 56 1.20360529801521 2.79242866277356 57 57 -0.0843877814729617 -1.28592741018806 58 58 0.339837217622896 -0.541310610515075 59 59 -0.385458384395854 -0.934702284494623 60 60 0.468594330006473 -0.73016882826337 61 61 -1.02043354926932 -1.60187469930237 62 62 0.243972076651283 -0.563633473100453 63 63 1.49199775918827 1.52568787191561 64 64 1.13206847302443 1.3101469387406 65 65 -0.716368601292129 -0.135512918841699 66 66 -0.169108730249288 1.09575193085288 67 67 1.15790001716763 1.1640397855604 68 68 -0.688576811210818 -1.76869188869093 69 69 0.14456018958467 -0.15378734253803 70 70 1.64206973022781 1.18242742349138 71 71 -1.08724554035947 -0.561082534301814 72 72 -1.41116766250683 -0.255074407110056 73 73 0.182430548153859 0.653581598797204 74 74 -1.25394949287272 -0.508093610110444 75 75 -1.53359611068566 -1.12886141633028 76 76 -1.53800060087613 -1.27444991752437 77 77 0.825952408418855 -0.279010226303386 78 78 0.142438147648119 1.51511335052744 79 79 -0.924303826504151 -0.729459474153155 80 80 -1.40601321953547 0.593044606426811 81 81 -0.801830843986271 0.338893590157569 82 82 1.10825917004715 0.439870409850444 83 83 0.24592028029576 -0.164772212550257 84 84 1.79606838091344 1.3039822304618 85 85 -1.22260977344593 -0.790503121154428 86 86 -0.700220780811092 0.0328995754123342 87 87 -0.578998772557048 0.392475781422545 88 88 -1.69720729321778 -1.5698428789583 89 89 1.16340862426281 0.792014175554376 90 90 0.206954556715569 0.415456904166939 91 91 1.70489999393387 2.09775597676056 92 92 -1.33104685763959 -1.05475280759534 93 93 0.645203760475826 0.926294471929944 94 94 0.1423053293667 -0.216502503763709 95 95 1.10221712348662 -0.32080884129509 96 96 0.543348907607857 0.269892488144619 97 97 1.04941909388814 0.982666978739268 98 98 -0.258309955845433 0.183650733005576 99 99 -0.492073649275113 0.0761496561256492 100 100 0.338403199323624 -0.374239866716357 101 101 -0.895668365919068 0.11336451596702 102 102 0.437699897857805 -0.91352569239983 103 103 0.456605590549223 -0.313164454606283 104 104 1.40282753554395 0.610811431835396 105 105 0.0495822014705532 -0.507000617846699 106 106 1.2587777556985 1.66055013290369 107 107 -1.40353930047844 -1.32895934946041 108 108 -1.34550374507602 -1.57417300223271 109 109 1.22996245176712 0.814167653438195 110 110 0.311564106800903 -0.111390972866106 111 111 -0.0587559633492112 -0.0121323250182511 112 112 -0.436492819499775 0.162428164511859 113 113 0.0791694982161289 -0.401198944858844 114 114 1.10356302409986 0.969569111102586 115 115 1.31474898137036 2.0940945724578 116 116 -0.843413208640851 -0.0848682739314613 117 117 0.202497366256568 0.0187349827693815 118 118 -0.599625493377744 0.906427507141332 119 119 1.8179555041733 1.3369461892012 120 120 -0.854885536015852 -0.785095990071871 121 121 -0.415877865867224 -0.166438439147711 122 122 0.742162696858347 -1.28954626748198 123 123 -0.972779674771823 -1.03927262494365 124 124 1.46293183400694 -0.114484977863908 125 125 1.00822090954253 0.681871812073643 126 126 -1.34645832044921 -0.730195246217766 127 127 -0.591561999406591 -2.12951882663727 128 128 -0.934510817986235 -1.75494841647204 129 129 -0.28369951969648 0.17692265891176 130 130 -1.17614531868063 -0.12403839659914 131 131 1.65461590969623 2.70192093415576 132 132 -0.745615276587652 -0.417865474273032 133 133 0.0738259684462418 1.21278114494829 134 134 -0.96815375987633 -0.753301992358909 135 135 -0.939813096800652 -0.0216214318733658 136 136 -0.879803232355895 -0.0744910663374311 137 137 0.743172411526409 0.21433313608583 138 138 2.08195119549803 1.93621885516642 139 139 0.927100100117178 1.5554541907711 140 140 0.214045612674062 0.346353741568354 141 141 -0.949431236638889 -0.305817193168958 142 142 1.2666979721919 0.787777955161434 143 143 1.01376904051764 1.12648365697115 144 144 0.142555917554621 0.707233765426958 145 145 1.62179916747734 0.885638229075908 146 146 -1.00645219747244 -0.995434127819415 147 147 -0.394602826813623 0.473657962928038 148 148 -0.73982150411597 0.273299958780123 149 149 -0.365184995360586 -0.452611626430038 150 150 0.691097586326135 0.766691213629834 151 151 -0.301611701858653 -1.33319111438154 152 152 0.531222597236094 -1.60038997213879 153 153 1.63012914542121 -0.100063647106269 154 154 -1.34924073424189 -1.53664514984632 155 155 0.177577385290678 1.78028934270584 156 156 1.8760154081232 2.52387197823727 157 157 -0.16113138252359 0.554611083217085 158 158 0.622139846203371 -0.291011158963719 159 159 0.188666359888691 0.257710421689275 160 160 -0.836071049877044 -0.509251680504923 161 161 -0.9363957038285 -0.786864007114868 162 162 0.576850550394612 1.16180237778149 163 163 1.53563335135132 2.39295406664206 164 164 0.480251240792056 0.593367377417818 165 165 0.816802232052774 1.22809833905884 166 166 0.128093838306365 -0.696009541973336 167 167 0.692166473072011 0.47598401037244 168 168 -0.15467430169029 0.887623422309889 169 169 1.85530898859882 1.34874265859183 170 170 1.09585407339195 0.853399050828037 171 171 1.08620951547742 0.222309525046723 172 172 0.651399299000373 0.204610710960643 173 173 -0.77205986349291 -1.38438918818234 174 174 -0.44510199324887 -0.390092864365805 175 175 0.924297817311385 0.15026757119897 176 176 -0.185300859903109 -1.47662328084495 177 177 -0.206992886353605 0.859401094995375 178 178 -0.547073733586552 -2.31806176595107 179 179 -1.04319780488037 -0.839081179843443 180 180 -1.11295843904746 0.687100547210174 181 181 1.57596863039491 0.655163984249925 182 182 0.72747085312975 2.74321505256345 183 183 -0.640180564559575 1.26100797049328 184 184 0.942240481238108 0.688383995282273 185 185 0.181892828507572 0.373068219547715 186 186 0.358693183830045 -0.190608438843274 187 187 -0.000910571279300776 -0.680961607498789 188 188 0.919849570661649 1.00572232849211 189 189 1.01006236214779 -0.190675450107784 190 190 0.316481287087008 0.281269720213603 191 191 -0.918286729336156 -0.477703257990269 192 192 0.183452280040454 -0.0344651227327666 193 193 2.12717634373411 0.997577554465131 194 194 1.47020736764189 1.12795785888551 195 195 -0.971309615501744 -1.18014880718682 196 196 -0.157281269372447 -0.481653661616169 197 197 0.646807492342463 0.979218813509775 198 198 -0.578656676271822 -0.139221375128339 199 199 0.229313404231838 -0.692324141138655 200 200 1.20229702102537 1.10892733679558 201 201 0.133632622403511 0.583256246184469 202 202 -1.03246454473759 -1.451471999586 203 203 -0.330370224331379 -0.425464803042189 204 204 -1.75790734014916 -0.586614309361142 205 205 -0.0371919747840802 -1.50684309284697 206 206 1.26551340744515 1.47525772630116 207 207 -0.0115076783573195 0.993713242482709 208 208 -0.209351023351956 -0.0948866052629332 209 209 0.948254398587786 0.148035769503489 210 210 -0.645842405513505 -0.571836365758735 211 211 -0.341295789839788 0.713244941767623 212 212 0.662118020652933 -1.22995421423467 213 213 -1.05857786323882 0.0897524096764291 214 214 -0.778042671629221 -0.278468921484683 215 215 1.22107687285223 1.21869820953845 216 216 -1.21476298713056 -0.758578615621622 217 217 1.30022895329161 1.36168696120916 218 218 1.29409391113734 0.705917131098944 219 219 -1.00259273604201 -1.07113678345588 220 220 0.82759989331864 0.536929026455464 221 221 -0.997619692500241 -1.73114849603647 222 222 0.932630130413901 0.78082733464099 223 223 -0.0568079370743356 0.306833710833381 224 224 1.07078853863247 0.235644832856485 225 225 -0.878845195403184 -0.262793896775195 226 226 0.173927378306735 -0.388407346972015 227 227 0.152001500987953 1.91286468229403 228 228 -0.118029235005445 -1.10432942001368 229 229 0.668677093920131 0.0682515661339391 230 230 -0.986068075843878 -1.7924446101623 231 231 -0.638189951124171 -0.52191017460648 232 232 0.197008131055164 0.616574004663493 233 233 0.0641541307571732 -0.633902784236753 234 234 1.44314263446451 1.15961150166424 235 235 -2.14144160123174 -2.2518725440883 236 236 0.164937563582549 0.789070903671559 237 237 -0.211441573032738 -1.37962886952607 238 238 0.122209498375711 1.06401605887066 239 239 0.404152731207434 0.360589609073474 240 240 -0.661421846239432 0.172077306941891 241 241 0.350246959829443 -1.60470497742995 242 242 -0.102366085106328 -0.0709881642276646 243 243 0.241955743295996 0.576852382824044 244 244 -0.40473713391172 -1.07997472892628 245 245 -0.572093717322186 0.100529726362697 246 246 -1.0107055115864 -0.547988289844201 247 247 1.45918006019184 0.660871721892713 248 248 0.0290306485101474 -0.814784839126176 249 249 -0.311786315045172 0.167922092543147 250 250 0.159157749619645 -0.0782928496695848 251 251 0.298597154717647 0.436117416649192 252 252 0.727937895616386 0.00668361955307917 253 253 0.255383276328498 0.503481625578282 254 254 -1.14073218073273 -0.368151547937105 255 255 0.62186689571353 0.6197590990651 256 256 1.60754780729681 -0.230602646961016 257 257 1.36612892184012 0.509177236220553 258 258 -0.17835978703554 -1.22084401906767 259 259 0.734318792628253 0.94835378968232 260 260 -0.554150763377311 -2.83632688909111 261 261 -1.34807262732901 -2.13520534222759 262 262 -1.30602233938388 -1.36331046931889 263 263 0.157552245303531 -0.945871858236152 264 264 -0.378485119558589 -0.24846719242668 265 265 -1.29759462322226 -1.28542417440431 266 266 -0.112162859740148 -1.42400346960075 267 267 0.0319028692133309 -0.143128209114543 268 268 0.0329971668044517 -0.788254983707128 269 269 -2.15328238033762 -0.602605195669155 270 270 -0.268561460565615 0.255528693190225 271 271 -0.37700865407203 0.123795636414963 272 272 -0.647681343010691 -0.0873696471965655 273 273 0.48085051264185 1.27886089783222 274 274 -0.0863718720740099 -0.189965371237141 275 275 -0.577723909217335 -0.459218791691393 276 276 -0.0642922550342538 0.261575763198014 277 277 0.283276349600993 -0.449390933664188 278 278 -0.719999871944151 -1.21245981759747 279 279 0.398917842857218 -0.687190068446156 280 280 -0.585983681331922 -0.955004739381687 281 281 0.632640074811404 1.1319661207624 282 282 -0.332296300590307 -0.481474852783556 283 283 1.24105669045869 1.39772599908205 284 284 0.60411314341004 1.45030139833737 285 285 -0.262533617238517 -1.29592042189868 286 286 1.0782966724744 0.224757351161194 287 287 0.375642795853784 0.865080603311589 288 288 -0.635451819284519 -0.584950334594471 289 289 -0.0794197303450192 -0.544824440342012 290 290 -0.391647046085526 1.05466407410057 291 291 0.746920858892639 0.141390319582209 292 292 0.174757162932909 0.0431735424655879 293 293 -1.88125948300107 -1.74328408616805 294 294 -0.792933999764447 -0.859898846612656 295 295 -1.97522103278445 -2.14003373808461 296 296 0.947755627232544 -0.863782160598166 297 297 1.43280466086758 0.971878727763115 298 298 0.864435589061877 -0.0944046128667593 299 299 -0.00918736103969609 -0.42457248714019 300 300 -0.291134070040785 0.156895831614518 301 301 -1.01793787032963 -1.13451805794859 302 302 -2.41767296199479 -2.51027080485175 303 303 0.90975365148871 -0.295416703422529 304 304 0.00472194091889469 0.684227815501152 305 305 0.757484536788318 -0.252724822707596 306 306 2.68342594840941 3.22129555834226 307 307 -1.47397795674507 0.0655794205012332 308 308 -0.615122248015615 -0.747272395276123 309 309 -0.763134711595199 0.479560083833197 310 310 -0.282135287850453 -0.0734428079165186 311 311 -0.523049782720623 -0.540763850960254 312 312 0.310621119271665 -0.728862242403757 313 313 0.133048454536538 1.50713613471873 314 314 -0.653706464545025 -0.798806385558514 315 315 -0.114236294075412 0.0546801088322116 316 316 0.292020057364464 -0.631135873978695 317 317 1.18938474823704 -0.39028550769223 318 318 -0.0312650731831535 0.584947591213862 319 319 0.00887339861556713 0.314512559170236 320 320 -0.380929811867056 -1.70738447701585 321 321 -0.52058291401555 -0.260867706649619 322 322 -2.16053908474117 -1.28838966290168 323 323 0.726713067234621 2.24691954684607 324 324 -0.606561923596174 -0.0914334086129591 325 325 0.544013014174095 -0.865107331509786 326 326 0.955045058453847 0.203630981513071 327 327 0.560592666217991 0.484825432668592 328 328 -0.327752444014553 -0.842104917773965 329 329 -1.59123845281852 -1.12021839176868 330 330 -2.07483814869395 -1.79470709475569 331 331 1.05244467218929 0.182000352523624 332 332 -0.664191903404875 -0.186883124790877 333 333 1.21008686273248 0.219592839108128 334 334 0.413022019819573 -0.268098837611482 335 335 0.0422280336978795 -0.179623002537761 336 336 0.477120730310813 -0.446762180563648 337 337 -0.568223885079031 -1.51167377356618 338 338 0.519928383814578 -0.0391126750678009 339 339 -2.00309717324039 -1.08186232237306 340 340 -0.433534755849648 1.17327729178832 341 341 -0.00378810769496557 1.23024602577198 342 342 2.31053344424751 1.59313832899737 343 343 1.80889515476201 0.0998280113430569 344 344 -0.271006937008757 1.26456200258843 345 345 -1.13765326547872 -1.9266689414778 346 346 0.966578134757589 1.89681338904382 347 347 0.0266319999198697 0.12947094522922 348 348 -0.64417803887998 -1.21725478837165 349 349 -0.848704931186809 -1.0790489589685 350 350 -0.789348470705069 -0.56855290765307 351 351 0.0568787682696287 0.778941309946098 352 352 -0.404167121170396 0.261426782843497 353 353 0.599169489486594 -0.251353186284818 354 354 -1.64392413329453 -1.41435768483274 355 355 -1.61030044520426 -1.9082486009141 356 356 -1.41648068460129 -1.20293527150969 357 357 -1.98524086037857 -1.36431496381439 358 358 -1.16234995642306 -1.50505401496676 359 359 0.906014336241588 0.883254683920683 360 360 -0.120663318433096 -1.06230400849685 361 361 -0.404735456099786 -0.0827256299965876 362 362 2.28415232253025 2.43185831726563 363 363 -0.277750113149245 -1.09564243491786 364 364 -1.43759960759041 -1.91927954999413 365 365 0.517492255903491 0.163452435167785 366 366 0.0409231818719817 0.82466451440847 367 367 0.607080685056537 -0.0116689613015914 368 368 0.346303068348099 0.963784166003815 369 369 0.799888006661189 1.15922046221216 370 370 -0.200658067955632 -0.777948063573182 371 371 -0.838552588394187 0.436409291416985 372 372 1.23010938197522 0.633037531507123 373 373 0.451186523228701 1.30706174499908 374 374 -0.270558948178047 1.07548009305743 375 375 -1.11030125107289 -0.613917996247648 376 376 0.99867624624863 0.43248481571298 377 377 -0.944635733669833 -2.57000960039567 378 378 -0.345150360564216 -0.262612324483112 379 379 0.231225309396651 -0.148069994302184 380 380 1.19488394763505 0.407445818725747 381 381 0.421237213096837 1.29168791564525 382 382 -1.17224093491159 -1.65030352659117 383 383 -0.150362722343577 0.664688399394185 384 384 -0.911942086647952 -1.29935956493263 385 385 -0.550435701050605 0.00996277569490833 386 386 -0.503452926922047 -0.977572202467078 387 387 -0.840437479519366 -1.24690421568669 388 388 2.72565962844896 2.16469111759104 389 389 -0.342084855015524 -0.891313460113479 390 390 -0.0981646867577042 1.66825888406037 391 391 -0.300238776909948 -0.0323886291964357 392 392 -0.445814191574771 -0.451543558138376 393 393 -2.35159528945653 -2.09382102637383 394 394 0.771347458438544 0.632248517764153 395 395 1.51073283708396 -0.332959071293271 396 396 0.0966520620608959 0.435762577755818 397 397 -0.318708566172272 0.0792983338274879 398 398 -0.205588999330254 -0.899203470644444 399 399 1.02270253018406 2.52010320454192 400 400 0.176860283634206 0.99581811996131 401 401 1.41839609903773 0.471544708439966 402 402 1.55159790192982 -0.173816204502474 403 403 1.93445877775084 1.56420930381227 404 404 1.36456851123372 -0.286294743401895 405 405 -0.6945847993009 0.147099044069608 406 406 1.56216890070534 0.251227211152395 407 407 1.36800089619423 1.81218092067337 408 408 -0.263676614327316 -0.111685103193269 409 409 0.0179108059498879 -0.919265891275284 410 410 -0.307261985899011 -2.23149808636095 411 411 -0.163969947581505 -0.236523608175905 412 412 -0.120449337781418 0.896576482064549 413 413 0.0739026611409629 1.06472909089829 414 414 1.10867285753491 0.785042317541263 415 415 1.46298257470589 1.41564218144868 416 416 1.16431140493005 0.670593830253462 417 417 1.17529765650528 0.817968052859188 418 418 -0.814854327992495 -0.418607403904381 419 419 2.47723943340456 2.49031917643836 420 420 -0.0244212103557031 0.312995467662414 421 421 0.806638213205707 0.356370937482444 422 422 -1.62405579119699 -0.537954266398098 423 423 0.957904112604383 0.291943665966988 424 424 -0.812805871869217 -1.1582721319521 425 425 -0.996674982917241 -0.655419374338246 426 426 0.113649695666726 -0.366980808329557 427 427 0.894610854068111 1.1136191426835 428 428 1.20288685709081 0.638884320637003 429 429 -1.13683741901365 -0.36027044117294 430 430 -0.129060905564338 -0.180888444348373 431 431 0.425381045801254 -0.295400589763373 432 432 1.89515871261082 1.49062217238053 433 433 0.233818384451627 -0.972204780435252 434 434 -0.28595441088866 -1.35168392568458 435 435 0.2703210749173 -0.444959487771617 436 436 -1.56414434282183 -0.0863816258062674 437 437 2.04419819063683 1.91366743170003 438 438 0.84728785689777 1.34007526149256 439 439 -0.476344798814009 -0.415780404846241 440 440 0.00590700828159529 0.0815516311831695 441 441 0.083078642301709 1.23675983324076 442 442 -1.6028594029328 -1.60925772902573 443 443 0.681131471138643 2.20895277775767 444 444 -0.234861802575625 0.0901511911648287 445 445 0.424684341700282 0.434940188281203 446 446 -0.835902000254762 0.0397065459202534 447 447 1.11036363363419 0.216098787738172 448 448 -1.12099310415726 -1.07651593723548 449 449 1.6340049762297 2.04681289330294 450 450 0.998408676587167 1.00481750170249 451 451 0.413689828973942 -0.514524722457101 452 452 -1.44558897330313 0.129757035586368 453 453 1.20796668073352 0.567121006271089 454 454 -1.29743961756537 -0.375012816916177 455 455 -0.565344622118762 -0.731344444270503 456 456 -0.0856730764892192 -0.366819526081972 457 457 0.428172094069993 0.0273966031800197 458 458 0.186470987165479 0.760848872452122 459 459 0.259371700050186 -0.501625551500019 460 460 -1.64360010971628 -1.5828290417955 461 461 0.734163267878191 0.642535470348961 462 462 1.03827780061464 1.72965834140257 463 463 -0.548596685640441 -0.318234975328041 464 464 0.593701471751184 0.493491384986627 465 465 -0.845456340462967 0.0420851950366854 466 466 0.218498725360759 0.246976588078252 467 467 -1.42799921095182 -1.377473806456 468 468 -0.690670805163897 1.14500512746399 469 469 -1.37016414798422 0.471825842492376 470 470 -2.16041725986498 -1.59664099346357 471 471 1.33905008715574 0.432270114438061 472 472 0.163608946537458 -0.690435257310719 473 473 0.935034634622461 1.52887578295159 474 474 -0.395808329051314 -0.115243233858534 475 475 2.04696381576314 2.05384325934844 476 476 -0.907980731362225 -1.18512743230553 477 477 0.503297960174636 0.0187769439792987 478 478 -1.48550762425544 -1.47956369843223 479 479 0.0666068333457948 1.35033923857239 480 480 0.920664330425592 0.888008561134299 481 481 -1.69266858919314 -0.204902976272 482 482 0.427795287676371 -0.396576743545858 483 483 -1.64292333261635 -1.13354208818298 484 484 -0.701072352663313 -0.597049529192512 485 485 0.112547088195915 1.06099877308249 486 486 -0.74472232004593 -0.377658612540862 487 487 1.12383483725755 0.560401527099076 488 488 -1.42854840668183 -0.243672850363049 489 489 0.607078625074716 1.18692220136358 490 490 -0.274271192221796 0.848095718841269 491 491 1.32274201252664 0.38412405018288 492 492 -0.0233621288703684 0.272238343116884 493 493 1.89704044055135 1.07767259562204 494 494 -0.541441306194392 0.0771998886816035 495 495 0.833091178133436 -0.708760130304379 496 496 0.44386192196959 -1.12413404785683 497 497 0.926963710431585 0.875564184000742 498 498 -0.671209470055134 0.0950948055928938 499 499 0.236038898960188 -0.865160384289287 500 500 -1.30064654680219 0.0686997377448884 ================================================ FILE: example/phenotype_bin.txt ================================================ FID IID Y1 Y2 1 1 1 1 2 2 0 0 3 3 0 0 4 4 0 0 5 5 0 1 6 6 0 1 7 7 0 0 8 8 1 0 9 9 1 1 10 10 0 1 11 11 1 0 12 12 0 0 13 13 0 0 14 14 0 0 15 15 0 0 16 16 0 0 17 17 0 0 18 18 0 0 19 19 1 0 20 20 0 0 21 21 0 0 22 22 0 0 23 23 0 0 24 24 0 0 25 25 1 0 26 26 0 0 27 27 0 0 28 28 0 0 29 29 0 0 30 30 0 0 31 31 0 0 32 32 1 0 33 33 0 1 34 34 0 1 35 35 1 1 36 36 0 0 37 37 0 0 38 38 0 0 39 39 0 1 40 40 0 0 41 41 1 0 42 42 1 1 43 43 1 1 44 44 0 0 45 45 0 0 46 46 1 1 47 47 1 0 48 48 0 0 49 49 0 0 50 50 0 0 51 51 0 0 52 52 0 0 53 53 0 0 54 54 0 0 55 55 1 0 56 56 1 1 57 57 0 0 58 58 0 0 59 59 0 0 60 60 0 0 61 61 0 1 62 62 0 0 63 63 1 1 64 64 1 1 65 65 0 0 66 66 0 0 67 67 0 1 68 68 0 0 69 69 0 0 70 70 0 1 71 71 0 0 72 72 0 0 73 73 0 0 74 74 0 0 75 75 0 0 76 76 0 0 77 77 0 0 78 78 0 0 79 79 0 0 80 80 0 0 81 81 0 0 82 82 0 1 83 83 0 1 84 84 0 0 85 85 0 0 86 86 0 0 87 87 1 1 88 88 0 0 89 89 1 1 90 90 0 1 91 91 1 1 92 92 0 0 93 93 0 0 94 94 0 0 95 95 0 0 96 96 1 0 97 97 0 1 98 98 0 0 99 99 0 0 100 100 0 0 101 101 0 0 102 102 0 1 103 103 0 0 104 104 0 0 105 105 0 0 106 106 0 1 107 107 0 0 108 108 0 0 109 109 1 0 110 110 0 1 111 111 0 0 112 112 0 0 113 113 1 0 114 114 0 0 115 115 0 0 116 116 0 0 117 117 0 0 118 118 0 0 119 119 1 1 120 120 0 0 121 121 0 0 122 122 0 0 123 123 0 0 124 124 1 1 125 125 0 1 126 126 0 0 127 127 0 0 128 128 0 0 129 129 1 0 130 130 0 0 131 131 1 1 132 132 0 0 133 133 1 1 134 134 0 0 135 135 0 0 136 136 0 0 137 137 0 1 138 138 0 1 139 139 1 0 140 140 0 0 141 141 0 0 142 142 1 0 143 143 1 1 144 144 0 0 145 145 1 1 146 146 0 0 147 147 0 0 148 148 1 0 149 149 0 0 150 150 0 1 151 151 0 0 152 152 0 0 153 153 1 0 154 154 0 0 155 155 1 1 156 156 1 1 157 157 0 0 158 158 1 0 159 159 0 0 160 160 0 0 161 161 0 0 162 162 1 1 163 163 1 1 164 164 0 1 165 165 1 1 166 166 0 0 167 167 1 0 168 168 0 1 169 169 1 1 170 170 1 1 171 171 0 0 172 172 0 0 173 173 0 0 174 174 0 0 175 175 0 0 176 176 0 0 177 177 0 1 178 178 0 0 179 179 0 0 180 180 0 0 181 181 1 1 182 182 0 1 183 183 1 0 184 184 0 0 185 185 1 1 186 186 1 0 187 187 0 0 188 188 0 0 189 189 0 0 190 190 0 0 191 191 0 0 192 192 0 0 193 193 1 1 194 194 0 0 195 195 0 0 196 196 0 0 197 197 1 1 198 198 0 0 199 199 0 1 200 200 0 0 201 201 0 0 202 202 0 0 203 203 0 0 204 204 0 0 205 205 1 0 206 206 1 1 207 207 1 1 208 208 0 0 209 209 0 1 210 210 0 0 211 211 0 1 212 212 0 0 213 213 0 0 214 214 0 0 215 215 0 0 216 216 0 0 217 217 1 0 218 218 0 1 219 219 0 0 220 220 1 0 221 221 0 0 222 222 1 0 223 223 0 0 224 224 1 0 225 225 0 0 226 226 0 0 227 227 0 1 228 228 0 0 229 229 0 0 230 230 0 0 231 231 0 0 232 232 1 1 233 233 0 0 234 234 1 0 235 235 0 0 236 236 1 1 237 237 0 0 238 238 1 1 239 239 0 0 240 240 0 0 241 241 0 0 242 242 0 0 243 243 1 1 244 244 1 0 245 245 0 0 246 246 0 0 247 247 1 0 248 248 0 0 249 249 0 0 250 250 1 0 251 251 0 0 252 252 0 1 253 253 1 1 254 254 0 0 255 255 0 0 256 256 0 0 257 257 0 1 258 258 0 0 259 259 0 0 260 260 0 0 261 261 0 0 262 262 0 0 263 263 0 0 264 264 0 0 265 265 0 0 266 266 0 0 267 267 1 1 268 268 0 1 269 269 0 0 270 270 0 0 271 271 1 0 272 272 0 0 273 273 1 0 274 274 0 0 275 275 0 0 276 276 0 0 277 277 0 0 278 278 0 0 279 279 0 0 280 280 0 0 281 281 0 1 282 282 0 0 283 283 0 1 284 284 1 1 285 285 0 0 286 286 0 0 287 287 0 0 288 288 0 0 289 289 0 0 290 290 1 0 291 291 0 0 292 292 0 0 293 293 0 0 294 294 0 0 295 295 0 0 296 296 1 1 297 297 1 1 298 298 0 0 299 299 0 0 300 300 0 0 301 301 0 0 302 302 0 0 303 303 1 1 304 304 0 0 305 305 0 0 306 306 1 1 307 307 0 0 308 308 0 0 309 309 1 1 310 310 0 0 311 311 0 0 312 312 0 0 313 313 1 0 314 314 0 0 315 315 0 0 316 316 0 0 317 317 1 1 318 318 0 0 319 319 0 0 320 320 0 0 321 321 0 1 322 322 0 0 323 323 1 1 324 324 0 0 325 325 0 0 326 326 0 1 327 327 0 1 328 328 0 0 329 329 0 0 330 330 0 0 331 331 0 0 332 332 0 0 333 333 0 0 334 334 1 0 335 335 0 0 336 336 1 0 337 337 0 0 338 338 1 1 339 339 0 0 340 340 0 0 341 341 0 0 342 342 1 1 343 343 0 1 344 344 0 0 345 345 0 0 346 346 1 1 347 347 0 0 348 348 0 0 349 349 0 0 350 350 1 0 351 351 0 0 352 352 0 0 353 353 1 0 354 354 0 0 355 355 0 0 356 356 0 0 357 357 0 0 358 358 0 0 359 359 0 1 360 360 0 0 361 361 0 0 362 362 1 1 363 363 0 0 364 364 0 0 365 365 0 0 366 366 0 0 367 367 0 0 368 368 0 1 369 369 0 0 370 370 0 0 371 371 0 0 372 372 0 1 373 373 1 1 374 374 0 1 375 375 0 0 376 376 0 0 377 377 0 0 378 378 0 0 379 379 1 0 380 380 0 0 381 381 0 0 382 382 0 0 383 383 0 0 384 384 0 0 385 385 0 0 386 386 0 0 387 387 0 0 388 388 0 0 389 389 0 0 390 390 0 0 391 391 0 0 392 392 0 0 393 393 0 0 394 394 0 0 395 395 1 1 396 396 0 0 397 397 1 0 398 398 0 0 399 399 0 0 400 400 0 0 401 401 0 0 402 402 1 0 403 403 1 1 404 404 0 0 405 405 1 0 406 406 1 0 407 407 0 1 408 408 0 0 409 409 1 0 410 410 0 0 411 411 0 0 412 412 0 1 413 413 0 0 414 414 1 0 415 415 1 1 416 416 1 1 417 417 1 1 418 418 0 0 419 419 1 1 420 420 0 0 421 421 1 0 422 422 0 0 423 423 0 0 424 424 0 0 425 425 0 1 426 426 0 0 427 427 0 0 428 428 1 0 429 429 0 0 430 430 0 0 431 431 0 0 432 432 0 0 433 433 0 0 434 434 0 0 435 435 0 0 436 436 0 0 437 437 1 1 438 438 1 1 439 439 0 0 440 440 0 0 441 441 0 1 442 442 0 0 443 443 1 0 444 444 0 0 445 445 0 0 446 446 0 0 447 447 1 0 448 448 0 0 449 449 1 0 450 450 1 1 451 451 0 0 452 452 0 0 453 453 1 1 454 454 0 0 455 455 0 0 456 456 1 0 457 457 0 0 458 458 1 0 459 459 1 0 460 460 0 0 461 461 0 0 462 462 1 1 463 463 0 0 464 464 0 1 465 465 0 0 466 466 0 0 467 467 0 0 468 468 0 0 469 469 0 0 470 470 0 0 471 471 0 0 472 472 0 1 473 473 1 1 474 474 0 0 475 475 1 1 476 476 0 0 477 477 0 0 478 478 0 0 479 479 0 0 480 480 1 1 481 481 0 0 482 482 0 0 483 483 0 0 484 484 0 0 485 485 1 0 486 486 1 0 487 487 0 0 488 488 0 0 489 489 1 1 490 490 0 0 491 491 0 0 492 492 0 0 493 493 1 1 494 494 0 1 495 495 0 0 496 496 0 0 497 497 0 0 498 498 0 0 499 499 0 0 500 500 1 0 ================================================ FILE: example/phenotype_bin_wNA.txt ================================================ FID IID Y1 Y2 1 1 1 1 2 2 0 0 3 3 0 0 4 4 0 0 5 5 0 1 6 6 NA 1 7 7 0 0 8 8 1 0 9 9 1 1 10 10 0 1 11 11 1 0 12 12 0 0 13 13 0 0 14 14 0 0 15 15 0 0 16 16 NA 0 17 17 0 0 18 18 0 0 19 19 1 0 20 20 0 0 21 21 0 0 22 22 0 0 23 23 0 0 24 24 0 0 25 25 1 0 26 26 0 0 27 27 0 0 28 28 0 0 29 29 NA 0 30 30 NA 0 31 31 0 0 32 32 1 0 33 33 0 1 34 34 0 1 35 35 1 1 36 36 0 0 37 37 0 0 38 38 0 0 39 39 0 1 40 40 0 0 41 41 1 0 42 42 NA 1 43 43 1 1 44 44 0 0 45 45 0 0 46 46 1 1 47 47 1 0 48 48 0 0 49 49 0 0 50 50 0 0 51 51 0 0 52 52 0 0 53 53 0 0 54 54 0 0 55 55 1 0 56 56 1 1 57 57 0 0 58 58 0 0 59 59 0 0 60 60 0 0 61 61 0 1 62 62 0 0 63 63 1 1 64 64 1 1 65 65 NA 0 66 66 0 0 67 67 0 1 68 68 0 0 69 69 0 0 70 70 0 1 71 71 NA 0 72 72 0 0 73 73 NA 0 74 74 0 0 75 75 0 0 76 76 0 0 77 77 0 0 78 78 0 0 79 79 0 0 80 80 0 0 81 81 0 0 82 82 0 1 83 83 0 1 84 84 0 0 85 85 0 0 86 86 0 0 87 87 1 1 88 88 0 0 89 89 1 1 90 90 0 1 91 91 1 1 92 92 0 0 93 93 0 0 94 94 0 0 95 95 0 0 96 96 1 0 97 97 0 1 98 98 0 0 99 99 0 0 100 100 0 0 101 101 0 0 102 102 NA 1 103 103 0 0 104 104 0 0 105 105 0 0 106 106 0 1 107 107 0 0 108 108 0 0 109 109 NA 0 110 110 0 1 111 111 0 0 112 112 0 0 113 113 1 0 114 114 0 0 115 115 0 0 116 116 0 0 117 117 0 0 118 118 0 0 119 119 1 1 120 120 0 0 121 121 0 0 122 122 0 0 123 123 0 0 124 124 1 1 125 125 0 1 126 126 0 0 127 127 0 0 128 128 0 0 129 129 1 0 130 130 0 0 131 131 1 1 132 132 0 0 133 133 1 1 134 134 0 0 135 135 0 0 136 136 0 0 137 137 0 1 138 138 0 1 139 139 1 0 140 140 0 0 141 141 0 0 142 142 1 0 143 143 NA 1 144 144 0 0 145 145 1 1 146 146 0 0 147 147 0 0 148 148 1 0 149 149 0 0 150 150 0 1 151 151 0 0 152 152 0 0 153 153 NA 0 154 154 0 0 155 155 1 1 156 156 1 1 157 157 0 0 158 158 1 0 159 159 NA 0 160 160 0 0 161 161 0 0 162 162 1 1 163 163 1 1 164 164 NA 1 165 165 1 1 166 166 0 0 167 167 1 0 168 168 0 1 169 169 1 1 170 170 1 1 171 171 0 0 172 172 0 0 173 173 NA 0 174 174 NA 0 175 175 0 0 176 176 0 0 177 177 0 1 178 178 0 0 179 179 0 0 180 180 NA 0 181 181 1 1 182 182 NA 1 183 183 1 0 184 184 0 0 185 185 1 1 186 186 1 0 187 187 0 0 188 188 0 0 189 189 0 0 190 190 0 0 191 191 0 0 192 192 0 0 193 193 NA 1 194 194 0 0 195 195 0 0 196 196 0 0 197 197 1 1 198 198 0 0 199 199 0 1 200 200 0 0 201 201 0 0 202 202 0 0 203 203 NA 0 204 204 0 0 205 205 1 0 206 206 1 1 207 207 1 1 208 208 0 0 209 209 0 1 210 210 0 0 211 211 0 1 212 212 0 0 213 213 0 0 214 214 0 0 215 215 0 0 216 216 0 0 217 217 1 0 218 218 NA 1 219 219 0 0 220 220 1 0 221 221 0 0 222 222 1 0 223 223 0 0 224 224 1 0 225 225 0 0 226 226 0 0 227 227 0 1 228 228 0 0 229 229 0 0 230 230 0 0 231 231 0 0 232 232 NA 1 233 233 0 0 234 234 1 0 235 235 0 0 236 236 1 1 237 237 0 0 238 238 NA 1 239 239 0 0 240 240 0 0 241 241 0 0 242 242 NA 0 243 243 1 1 244 244 1 0 245 245 0 0 246 246 0 0 247 247 1 0 248 248 NA 0 249 249 0 0 250 250 1 0 251 251 0 0 252 252 0 1 253 253 1 1 254 254 0 0 255 255 0 0 256 256 0 0 257 257 0 1 258 258 0 0 259 259 0 0 260 260 0 0 261 261 0 0 262 262 0 0 263 263 0 0 264 264 0 0 265 265 0 0 266 266 0 0 267 267 1 1 268 268 0 1 269 269 0 0 270 270 0 0 271 271 1 0 272 272 0 0 273 273 1 0 274 274 0 0 275 275 0 0 276 276 0 0 277 277 0 0 278 278 0 0 279 279 NA 0 280 280 0 0 281 281 0 1 282 282 0 0 283 283 0 1 284 284 1 1 285 285 0 0 286 286 0 0 287 287 0 0 288 288 0 0 289 289 0 0 290 290 1 0 291 291 NA 0 292 292 0 0 293 293 0 0 294 294 0 0 295 295 0 0 296 296 1 1 297 297 1 1 298 298 0 0 299 299 0 0 300 300 NA 0 301 301 0 0 302 302 NA 0 303 303 1 1 304 304 0 0 305 305 0 0 306 306 1 1 307 307 NA 0 308 308 0 0 309 309 NA 1 310 310 NA 0 311 311 0 0 312 312 0 0 313 313 1 0 314 314 0 0 315 315 0 0 316 316 0 0 317 317 1 1 318 318 0 0 319 319 0 0 320 320 NA 0 321 321 0 1 322 322 0 0 323 323 1 1 324 324 0 0 325 325 0 0 326 326 0 1 327 327 0 1 328 328 0 0 329 329 0 0 330 330 0 0 331 331 NA 0 332 332 0 0 333 333 0 0 334 334 1 0 335 335 0 0 336 336 1 0 337 337 0 0 338 338 1 1 339 339 0 0 340 340 0 0 341 341 0 0 342 342 1 1 343 343 0 1 344 344 0 0 345 345 0 0 346 346 1 1 347 347 0 0 348 348 0 0 349 349 0 0 350 350 1 0 351 351 NA 0 352 352 0 0 353 353 1 0 354 354 0 0 355 355 0 0 356 356 0 0 357 357 0 0 358 358 NA 0 359 359 0 1 360 360 0 0 361 361 0 0 362 362 1 1 363 363 0 0 364 364 0 0 365 365 0 0 366 366 0 0 367 367 0 0 368 368 0 1 369 369 0 0 370 370 0 0 371 371 0 0 372 372 NA 1 373 373 1 1 374 374 NA 1 375 375 0 0 376 376 0 0 377 377 0 0 378 378 0 0 379 379 1 0 380 380 0 0 381 381 0 0 382 382 0 0 383 383 0 0 384 384 0 0 385 385 0 0 386 386 0 0 387 387 0 0 388 388 0 0 389 389 0 0 390 390 0 0 391 391 0 0 392 392 0 0 393 393 0 0 394 394 0 0 395 395 1 1 396 396 NA 0 397 397 NA 0 398 398 0 0 399 399 0 0 400 400 0 0 401 401 0 0 402 402 1 0 403 403 1 1 404 404 0 0 405 405 NA 0 406 406 1 0 407 407 NA 1 408 408 0 0 409 409 1 0 410 410 NA 0 411 411 0 0 412 412 0 1 413 413 0 0 414 414 1 0 415 415 1 1 416 416 1 1 417 417 1 1 418 418 0 0 419 419 1 1 420 420 0 0 421 421 1 0 422 422 0 0 423 423 NA 0 424 424 0 0 425 425 0 1 426 426 0 0 427 427 NA 0 428 428 1 0 429 429 0 0 430 430 0 0 431 431 0 0 432 432 0 0 433 433 0 0 434 434 0 0 435 435 0 0 436 436 0 0 437 437 1 1 438 438 1 1 439 439 0 0 440 440 0 0 441 441 0 1 442 442 0 0 443 443 1 0 444 444 0 0 445 445 0 0 446 446 NA 0 447 447 1 0 448 448 0 0 449 449 1 0 450 450 1 1 451 451 0 0 452 452 0 0 453 453 1 1 454 454 0 0 455 455 0 0 456 456 1 0 457 457 0 0 458 458 1 0 459 459 1 0 460 460 0 0 461 461 0 0 462 462 1 1 463 463 0 0 464 464 NA 1 465 465 0 0 466 466 0 0 467 467 0 0 468 468 0 0 469 469 0 0 470 470 0 0 471 471 0 0 472 472 0 1 473 473 1 1 474 474 0 0 475 475 1 1 476 476 0 0 477 477 NA 0 478 478 0 0 479 479 0 0 480 480 1 1 481 481 0 0 482 482 0 0 483 483 0 0 484 484 NA 0 485 485 1 0 486 486 1 0 487 487 0 0 488 488 0 0 489 489 1 1 490 490 0 0 491 491 0 0 492 492 0 0 493 493 1 1 494 494 0 1 495 495 0 0 496 496 0 0 497 497 0 0 498 498 0 0 499 499 NA 0 500 500 1 0 ================================================ FILE: example/snplist_rm.txt ================================================ 114 191 307 310 499 500 ================================================ FILE: example/test_bin_out_firth_Y1.regenie ================================================ CHROM GENPOS ID ALLELE0 ALLELE1 A1FREQ INFO N TEST BETA SE CHISQ LOG10P EXTRA 1 1 1 2 1 0.214575 1 494 ADD 0.0775674 0.230001 0.113736 0.133163 NA 1 2 2 2 1 0.218623 1 494 ADD 0.131068 0.239808 0.29872 0.233077 NA 1 3 3 2 1 0.211538 1 494 ADD -0.256723 0.244611 1.10148 0.531739 NA 1 4 4 2 1 0.191296 1 494 ADD -0.131175 0.250523 0.274164 0.221449 NA 1 5 5 2 1 0.195344 1 494 ADD -0.187228 0.235372 0.632751 0.370236 NA 1 6 6 2 1 0.190283 1 494 ADD -0.234935 0.245557 0.91536 0.47019 NA 1 7 7 2 1 0.206478 1 494 ADD 0.11647 0.227747 0.26153 0.215332 NA 1 8 8 2 1 0.188259 1 494 ADD -0.353772 0.251712 1.97533 0.796197 NA 1 9 9 2 1 0.194332 1 494 ADD 0.283254 0.241072 1.38057 0.619781 NA 1 10 10 2 1 0.210526 1 494 ADD 0.0244317 0.236825 0.0106427 0.0372363 NA 1 11 11 2 1 0.183198 1 494 ADD -0.750767 0.263409 8.68164 2.49291 NA 1 12 12 2 1 0.20749 1 494 ADD 0.150619 0.229383 0.431159 0.291222 NA 1 13 13 2 1 0.198381 1 494 ADD 0.176768 0.249666 0.501286 0.319723 NA 1 14 14 2 1 0.191296 1 494 ADD -0.0898607 0.250264 0.128927 0.142941 NA 1 15 15 2 1 0.196356 1 494 ADD 0.0706531 0.24931 0.0803127 0.109649 NA 1 16 16 2 1 0.213563 1 494 ADD 0.127126 0.224028 0.322005 0.243817 NA 1 17 17 2 1 0.173077 1 494 ADD -0.0815387 0.258668 0.0993673 0.123441 NA 1 18 18 2 1 0.181174 1 494 ADD -0.245885 0.247926 0.983608 0.493076 NA 1 19 19 2 1 0.197368 1 494 ADD -0.229608 0.245176 0.87704 0.457157 NA 1 20 20 2 1 0.210526 1 494 ADD 0.0317603 0.23126 0.0188612 0.0502367 NA 1 21 21 2 1 0.197368 1 494 ADD -0.0978523 0.248042 0.15563 0.159134 NA 1 22 22 2 1 0.190283 1 494 ADD 0.0389733 0.24774 0.024748 0.0579936 NA 1 23 23 2 1 0.200405 1 494 ADD -0.0571134 0.229344 0.0620155 0.0951015 NA 1 24 24 2 1 0.197368 1 494 ADD -0.0144344 0.234569 0.00378665 0.0218503 NA 1 25 25 2 1 0.226721 1 494 ADD 0.482245 0.232228 4.31227 1.42207 NA 1 26 26 2 1 0.203441 1 494 ADD -0.237063 0.224814 1.11194 0.535123 NA 1 27 27 2 1 0.208502 1 494 ADD -0.0111253 0.23845 0.00217683 0.0164698 NA 1 28 28 2 1 0.17004 1 494 ADD 0.200861 0.25324 0.629112 0.36888 NA 1 29 29 2 1 0.210526 1 494 ADD -0.0404564 0.25006 0.026175 0.0597457 NA 1 30 30 2 1 0.169028 1 494 ADD -0.292083 0.244579 1.42618 0.633785 NA 1 31 31 2 1 0.224696 1 494 ADD -0.114124 0.24243 0.221604 0.195302 NA 1 32 32 2 1 0.209514 1 494 ADD 0.375668 0.224165 2.80849 1.02795 NA 1 33 33 2 1 0.211538 1 494 ADD -0.0482982 0.2361 0.0418475 0.0768022 NA 1 34 34 2 1 0.178138 1 494 ADD -0.078399 0.24941 0.0988087 0.123053 NA 1 35 35 2 1 0.187247 1 494 ADD -0.24506 0.233506 1.10141 0.531716 NA 1 36 36 2 1 0.188259 1 494 ADD 0.311055 0.249723 1.55151 0.671799 NA 1 37 37 2 1 0.190283 1 494 ADD -0.269829 0.260116 1.07608 0.523491 NA 1 38 38 2 1 0.188259 1 494 ADD 0.512363 0.237949 4.63648 1.50447 NA 1 39 39 2 1 0.211538 1 494 ADD 0.095859 0.218075 0.19322 0.180292 NA 1 40 40 2 1 0.174089 1 494 ADD 0.0137348 0.251811 0.00297503 0.0193142 NA 1 41 41 2 1 0.188259 1 494 ADD 0.0336069 0.245772 0.0186979 0.0500072 NA 1 42 42 2 1 0.223684 1 494 ADD -0.526916 0.226359 5.41861 1.70064 NA 1 43 43 2 1 0.197368 1 494 ADD 0.191427 0.248981 0.591118 0.35459 NA 1 44 44 2 1 0.194332 1 494 ADD -0.0685846 0.224834 0.0930525 0.118997 NA 1 45 45 2 1 0.20749 1 494 ADD 0.329215 0.231375 2.02453 0.810295 NA 1 46 46 2 1 0.214575 1 494 ADD 0.318271 0.233289 1.86126 0.763262 NA 1 47 47 2 1 0.178138 1 494 ADD 0.0441797 0.262924 0.0282347 0.0622022 NA 1 48 48 2 1 0.210526 1 494 ADD 0.0576357 0.231684 0.0618859 0.0949927 NA 1 49 49 2 1 0.196356 1 494 ADD -0.080932 0.262523 0.0950402 0.120408 NA 1 50 50 2 1 0.198381 1 494 ADD -0.0320333 0.236181 0.0183956 0.0495799 NA 1 51 51 2 1 0.200405 1 494 ADD -0.162379 0.258126 0.395724 0.276293 NA 1 52 52 2 1 0.183198 1 494 ADD -0.295989 0.238547 1.53959 0.668211 NA 1 53 53 2 1 0.206478 1 494 ADD 0.196395 0.227096 0.7479 0.41213 NA 1 54 54 2 1 0.201417 1 494 ADD 0.539329 0.236908 5.18259 1.64179 NA 1 55 55 2 1 0.197368 1 494 ADD 0.0152131 0.229608 0.00439001 0.0235706 NA 1 56 56 2 1 0.172065 1 494 ADD 0.185535 0.252526 0.539807 0.334877 NA 1 57 57 2 1 0.17915 1 494 ADD 0.429497 0.259998 2.72884 1.00634 NA 1 58 58 2 1 0.196356 1 494 ADD -0.229797 0.242554 0.897575 0.464158 NA 1 59 59 2 1 0.208502 1 494 ADD 0.187161 0.218477 0.733865 0.407121 NA 1 60 60 2 1 0.210526 1 494 ADD 0.0522758 0.231395 0.0510379 0.0855156 NA 1 61 61 2 1 0.208502 1 494 ADD 0.260822 0.240551 1.17564 0.555573 NA 1 62 62 2 1 0.216599 1 494 ADD -0.0669554 0.219653 0.0929169 0.1189 NA 1 63 63 2 1 0.201417 1 494 ADD 0.336326 0.245913 1.87051 0.765947 NA 1 64 64 2 1 0.17915 1 494 ADD -0.086792 0.252983 0.1177 0.13576 NA 1 65 65 2 1 0.209514 1 494 ADD -0.396664 0.226994 3.05362 1.09389 NA 1 66 66 2 1 0.215587 1 494 ADD -0.142472 0.234949 0.367717 0.264201 NA 1 67 67 2 1 0.188259 1 494 ADD 0.140352 0.23105 0.369001 0.264761 NA 1 68 68 2 1 0.197368 1 494 ADD -0.164904 0.232686 0.50225 0.320106 NA 1 69 69 2 1 0.211538 1 494 ADD -0.205059 0.227167 0.814833 0.435695 NA 1 70 70 2 1 0.182186 1 494 ADD 0.217693 0.246619 0.779177 0.423206 NA 1 71 71 2 1 0.20749 1 494 ADD -0.00511998 0.253841 0.000406829 0.00704562 NA 1 72 72 2 1 0.204453 1 494 ADD -0.157021 0.234262 0.449275 0.298709 NA 1 73 73 2 1 0.205466 1 494 ADD 0.287335 0.24273 1.40129 0.626155 NA 1 74 74 2 1 0.194332 1 494 ADD 0.456076 0.246102 3.43436 1.19482 NA 1 75 75 2 1 0.172065 1 494 ADD 0.158581 0.264409 0.359709 0.26069 NA 1 76 76 2 1 0.240891 1 494 ADD 0.391273 0.221665 3.11577 1.11049 NA 1 77 77 2 1 0.201417 1 494 ADD -0.118872 0.235721 0.254308 0.21179 NA 1 78 78 2 1 0.211538 1 494 ADD -0.274321 0.236845 1.3415 0.60771 NA 1 79 79 2 1 0.199393 1 494 ADD -0.239712 0.230005 1.08619 0.52678 NA 1 80 80 2 1 0.185223 1 494 ADD -0.0376364 0.260651 0.0208496 0.0529637 NA 1 81 81 2 1 0.201417 1 494 ADD -0.325847 0.235856 1.90869 0.777 NA 1 82 82 2 1 0.213563 1 494 ADD 0.130661 0.22521 0.336603 0.250421 NA 1 83 83 2 1 0.201417 1 494 ADD 0.279562 0.239 1.36824 0.615979 NA 1 84 84 2 1 0.216599 1 494 ADD -0.0182119 0.229628 0.00629015 0.0283598 NA 1 85 85 2 1 0.219636 1 494 ADD -0.0530995 0.235816 0.050703 0.0852104 NA 1 86 86 2 1 0.202429 1 494 ADD -0.0830595 0.230345 0.130023 0.143629 NA 1 87 87 2 1 0.195344 1 494 ADD -0.1256 0.233704 0.288832 0.228435 NA 1 88 88 2 1 0.203441 1 494 ADD 0.294784 0.244878 1.44913 0.640795 NA 1 89 89 2 1 0.210526 1 494 ADD -0.244525 0.234147 1.09061 0.528216 NA 1 90 90 2 1 0.183198 1 494 ADD 0.4162 0.252007 2.7276 1.006 NA 1 91 91 2 1 0.203441 1 494 ADD 0.0327289 0.231936 0.0199126 0.0516939 NA 1 92 92 2 1 0.204453 1 494 ADD 0.288721 0.249324 1.341 0.607553 NA 1 93 93 2 1 0.196356 1 494 ADD -0.739102 0.255729 8.89386 2.54344 NA 1 94 94 2 1 0.204453 1 494 ADD -0.257101 0.236491 1.1819 0.557566 NA 1 95 95 2 1 0.195344 1 494 ADD 0.161937 0.259032 0.390827 0.274199 NA 1 96 96 2 1 0.19332 1 494 ADD -0.337784 0.243267 1.92802 0.782582 NA 1 97 97 2 1 0.187247 1 494 ADD 0.218805 0.2386 0.840957 0.444756 NA 1 98 98 2 1 0.204453 1 494 ADD 0.0927028 0.233065 0.15821 0.160641 NA 1 99 99 2 1 0.194332 1 494 ADD 0.272401 0.23222 1.37599 0.618371 NA 1 100 100 2 1 0.197368 1 494 ADD -0.0079439 0.258667 0.000943158 0.0107727 NA 1 101 101 2 1 0.208502 1 494 ADD -0.00976784 0.22342 0.00191141 0.0154151 NA 1 102 102 2 1 0.189271 1 494 ADD -0.0719744 0.227469 0.100118 0.123962 NA 1 103 103 2 1 0.195344 1 494 ADD 0.267385 0.23489 1.29583 0.593499 NA 1 104 104 2 1 0.186235 1 494 ADD 0.0171918 0.236113 0.00530154 0.0259694 NA 1 105 105 2 1 0.224696 1 494 ADD 0.0463889 0.229778 0.0407578 0.0757175 NA 1 106 106 2 1 0.204453 1 494 ADD 0.209573 0.227116 0.851479 0.448386 NA 1 107 107 2 1 0.189271 1 494 ADD 0.199423 0.224984 0.785686 0.425497 NA 1 108 108 2 1 0.216599 1 494 ADD 0.337977 0.237924 2.0179 0.808398 NA 1 109 109 2 1 0.210526 1 494 ADD -0.0987036 0.237601 0.172572 0.168875 NA 1 110 110 2 1 0.215587 1 494 ADD -0.0390161 0.229524 0.0288956 0.0629737 NA 1 111 111 2 1 0.197368 1 494 ADD 0.286579 0.246533 1.35125 0.610729 NA 1 112 112 2 1 0.180162 1 494 ADD 0.360755 0.266713 1.82952 0.754032 NA 1 113 113 2 1 0.214575 1 494 ADD -0.416251 0.226915 3.36498 1.17655 NA 1 114 114 2 1 0.215587 1 494 ADD -0.0622402 0.232877 0.0714314 0.102778 NA 1 115 115 2 1 0.196356 1 494 ADD 0.542127 0.245454 4.8782 1.56546 NA 1 116 116 2 1 0.210526 1 494 ADD -0.0249269 0.227466 0.0120089 0.0396537 NA 1 117 117 2 1 0.20749 1 494 ADD 0.362257 0.229285 2.49621 0.942635 NA 1 118 118 2 1 0.189271 1 494 ADD 0.153986 0.239736 0.412567 0.283438 NA 1 119 119 2 1 0.194332 1 494 ADD -0.0445348 0.257544 0.0299017 0.0641334 NA 1 120 120 2 1 0.208502 1 494 ADD -0.13184 0.225575 0.341597 0.252659 NA 1 121 121 2 1 0.183198 1 494 ADD -0.103698 0.245506 0.178411 0.172151 NA 1 122 122 2 1 0.187247 1 494 ADD -0.168238 0.260791 0.416162 0.284951 NA 1 123 123 2 1 0.187247 1 494 ADD 0.56839 0.259103 4.81224 1.54885 NA 1 124 124 2 1 0.194332 1 494 ADD 0.0990443 0.238431 0.172557 0.168867 NA 1 125 125 2 1 0.199393 1 494 ADD 0.0242139 0.233819 0.0107244 0.0373846 NA 1 126 126 2 1 0.192308 1 494 ADD -0.0635237 0.247483 0.0658841 0.0983093 NA 1 127 127 2 1 0.211538 1 494 ADD -0.310185 0.216771 2.04758 0.816876 NA 1 128 128 2 1 0.189271 1 494 ADD 0.130459 0.245538 0.282299 0.225338 NA 1 129 129 2 1 0.199393 1 494 ADD 0.011662 0.245723 0.00225244 0.0167587 NA 1 130 130 2 1 0.208502 1 494 ADD -0.481741 0.231767 4.3204 1.42414 NA 1 131 131 2 1 0.186235 1 494 ADD -0.0707131 0.251207 0.0792386 0.108835 NA 1 132 132 2 1 0.19332 1 494 ADD 0.0197285 0.251053 0.00617529 0.0280916 NA 1 133 133 2 1 0.19332 1 494 ADD -0.113898 0.226748 0.252316 0.210808 NA 1 134 134 2 1 0.181174 1 494 ADD 0.0272865 0.257303 0.0112462 0.0383207 NA 1 135 135 2 1 0.212551 1 494 ADD 0.551368 0.23462 5.52274 1.72652 NA 1 136 136 2 1 0.198381 1 494 ADD -0.0377658 0.237599 0.0252644 0.0586327 NA 1 137 137 2 1 0.210526 1 494 ADD 0.172952 0.22854 0.5727 0.347572 NA 1 138 138 2 1 0.206478 1 494 ADD 0.660426 0.228858 8.12051 2.35885 NA 1 139 139 2 1 0.188259 1 494 ADD 0.127514 0.255762 0.248566 0.208951 NA 1 140 140 2 1 0.195344 1 494 ADD 0.137092 0.229052 0.358224 0.260037 NA 1 141 141 2 1 0.197368 1 494 ADD 0.221022 0.239153 0.854121 0.449296 NA 1 142 142 2 1 0.190283 1 494 ADD -0.107879 0.243711 0.19594 0.181762 NA 1 143 143 2 1 0.220648 1 494 ADD -0.171045 0.236941 0.521126 0.327568 NA 1 144 144 2 1 0.188259 1 494 ADD -0.445567 0.244672 3.31632 1.16371 NA 1 145 145 2 1 0.200405 1 494 ADD 0.336883 0.247684 1.84995 0.759977 NA 1 146 146 2 1 0.20749 1 494 ADD -0.0354943 0.233717 0.0230641 0.0558676 NA 1 147 147 2 1 0.223684 1 494 ADD -0.0783441 0.219802 0.127043 0.141753 NA 1 148 148 2 1 0.192308 1 494 ADD 0.462904 0.238452 3.76859 1.28213 NA 1 149 149 2 1 0.197368 1 494 ADD 0.00482043 0.236012 0.000417162 0.00713525 NA 1 150 150 2 1 0.209514 1 494 ADD 0.0733423 0.242037 0.0918215 0.118117 NA 1 151 151 2 1 0.19332 1 494 ADD 0.137108 0.260469 0.277085 0.22285 NA 1 152 152 2 1 0.189271 1 494 ADD 0.269233 0.254198 1.12179 0.538302 NA 1 153 153 2 1 0.181174 1 494 ADD 0.0524316 0.246177 0.0453619 0.0802214 NA 1 154 154 2 1 0.204453 1 494 ADD -0.0532762 0.237997 0.0501098 0.0846675 NA 1 155 155 2 1 0.209514 1 494 ADD 0.0024961 0.235479 0.000112363 0.00368867 NA 1 156 156 2 1 0.186235 1 494 ADD -0.249799 0.236163 1.11881 0.537341 NA 1 157 157 2 1 0.208502 1 494 ADD -0.421515 0.249013 2.86538 1.04333 NA 1 158 158 2 1 0.189271 1 494 ADD -0.0767536 0.240251 0.102063 0.125305 NA 1 159 159 2 1 0.202429 1 494 ADD 0.364345 0.236085 2.38171 0.910932 NA 1 160 160 2 1 0.187247 1 494 ADD -0.130187 0.24101 0.291786 0.229827 NA 1 161 161 2 1 0.205466 1 494 ADD -0.324356 0.23566 1.8944 0.772869 NA 1 162 162 2 1 0.199393 1 494 ADD -0.251815 0.236096 1.13759 0.543388 NA 1 163 163 2 1 0.17915 1 494 ADD 0.549634 0.262562 4.38211 1.43988 NA 1 164 164 2 1 0.197368 1 494 ADD 0.0498387 0.249499 0.0399021 0.0748571 NA 1 165 165 2 1 0.188259 1 494 ADD -0.0048665 0.243378 0.000399827 0.00698424 NA 1 166 166 2 1 0.196356 1 494 ADD 0.189153 0.25008 0.572093 0.34734 NA 1 167 167 2 1 0.187247 1 494 ADD 0.114594 0.228898 0.250635 0.209976 NA 1 168 168 2 1 0.205466 1 494 ADD 0.20514 0.235785 0.756952 0.415348 NA 1 169 169 2 1 0.201417 1 494 ADD 0.371147 0.235378 2.48634 0.939912 NA 1 170 170 2 1 0.188259 1 494 ADD -0.0325784 0.243087 0.0179612 0.0489602 NA 1 171 171 2 1 0.205466 1 494 ADD 0.0806316 0.232338 0.12044 0.137536 NA 1 172 172 2 1 0.215587 1 494 ADD -0.0291194 0.246949 0.0139043 0.0428077 NA 1 173 173 2 1 0.210526 1 494 ADD -0.525094 0.246333 4.54389 1.48101 NA 1 174 174 2 1 0.20749 1 494 ADD -0.477343 0.241393 3.91031 1.31884 NA 1 175 175 2 1 0.22166 1 494 ADD 0.159839 0.239087 0.446944 0.297751 NA 1 176 176 2 1 0.182186 1 494 ADD -0.273088 0.248103 1.21156 0.566992 NA 1 177 177 2 1 0.212551 1 494 ADD 0.100509 0.240498 0.174657 0.17005 NA 1 178 178 2 1 0.219636 1 494 ADD 0.219401 0.239146 0.841688 0.445009 NA 1 179 179 2 1 0.194332 1 494 ADD -0.44054 0.248412 3.14505 1.11829 NA 1 180 180 2 1 0.198381 1 494 ADD -0.0222736 0.231566 0.0092519 0.0346232 NA 1 181 181 2 1 0.212551 1 494 ADD 0.0446498 0.225942 0.0390522 0.0739946 NA 1 182 182 2 1 0.189271 1 494 ADD -0.529348 0.232001 5.20601 1.64765 NA 1 183 183 2 1 0.200405 1 494 ADD -0.173841 0.232296 0.56004 0.342711 NA 1 184 184 2 1 0.197368 1 494 ADD -0.0869827 0.23773 0.133875 0.146029 NA 1 185 185 2 1 0.198381 1 494 ADD -0.31736 0.246738 1.65436 0.702532 NA 1 186 186 2 1 0.219636 1 494 ADD 0.415424 0.217999 3.63141 1.24643 NA 1 187 187 2 1 0.204453 1 494 ADD -0.127341 0.230953 0.30401 0.23554 NA 1 188 188 2 1 0.197368 1 494 ADD -0.131344 0.237589 0.30561 0.236283 NA 1 189 189 2 1 0.195344 1 494 ADD 0.282696 0.235248 1.44406 0.639249 NA 1 190 190 2 1 0.187247 1 494 ADD -0.190845 0.25003 0.582608 0.351355 NA 1 191 191 2 1 0.209514 1 494 ADD 0.581521 0.216742 7.09912 2.11282 NA 1 192 192 2 1 0.171053 1 494 ADD 0.125639 0.24471 0.263599 0.21634 NA 1 193 193 2 1 0.192308 1 494 ADD -0.102295 0.254299 0.161814 0.162733 NA 1 194 194 2 1 0.208502 1 494 ADD -0.0561295 0.236682 0.0562408 0.0901556 NA 1 195 195 2 1 0.217611 1 494 ADD 0.00759132 0.234183 0.00105081 0.0113785 NA 1 196 196 2 1 0.203441 1 494 ADD 0.336144 0.244164 1.89533 0.773138 NA 1 197 197 2 1 0.202429 1 494 ADD 0.326072 0.237557 1.88405 0.769871 NA 1 198 198 2 1 0.198381 1 494 ADD -0.124779 0.228909 0.297134 0.232336 NA 1 199 199 2 1 0.185223 1 494 ADD -0.526894 0.242737 4.71165 1.52348 NA 1 200 200 2 1 0.188259 1 494 ADD 0.104052 0.243099 0.183203 0.174811 NA 1 201 201 2 1 0.216599 1 494 ADD -0.233208 0.235642 0.979449 0.491693 NA 1 202 202 2 1 0.175101 1 494 ADD -0.0460542 0.241999 0.0362167 0.0710572 NA 1 203 203 2 1 0.222672 1 494 ADD -0.353509 0.24956 2.00655 0.80515 NA 1 204 204 2 1 0.183198 1 494 ADD -0.0277105 0.236089 0.0137764 0.0426013 NA 1 205 205 2 1 0.190283 1 494 ADD -0.225238 0.234208 0.924866 0.473402 NA 1 206 206 2 1 0.181174 1 494 ADD -0.118214 0.250118 0.223381 0.196218 NA 1 207 207 2 1 0.19332 1 494 ADD 0.194133 0.248703 0.609304 0.361461 NA 1 208 208 2 1 0.208502 1 494 ADD 0.0870885 0.248417 0.122902 0.139118 NA 1 209 209 2 1 0.176113 1 494 ADD -0.316245 0.235764 1.79925 0.745203 NA 1 210 210 2 1 0.210526 1 494 ADD -0.452566 0.2169 4.35358 1.43261 NA 1 211 211 2 1 0.191296 1 494 ADD 0.347337 0.250765 1.91853 0.779843 NA 1 212 212 2 1 0.209514 1 494 ADD -0.0637143 0.2245 0.0805453 0.109825 NA 1 213 213 2 1 0.180162 1 494 ADD 0.125401 0.257536 0.237096 0.203209 NA 1 214 214 2 1 0.192308 1 494 ADD -0.280003 0.254352 1.21187 0.56709 NA 1 215 215 2 1 0.202429 1 494 ADD 0.273454 0.240409 1.2938 0.592866 NA 1 216 216 2 1 0.211538 1 494 ADD 0.0877622 0.244877 0.128445 0.142638 NA 1 217 217 2 1 0.215587 1 494 ADD 0.147027 0.219577 0.44835 0.298329 NA 1 218 218 2 1 0.195344 1 494 ADD 0.11561 0.247524 0.218148 0.193512 NA 1 219 219 2 1 0.201417 1 494 ADD -0.165098 0.22573 0.534945 0.332981 NA 1 220 220 2 1 0.185223 1 494 ADD -0.227127 0.241249 0.886352 0.460337 NA 1 221 221 2 1 0.19332 1 494 ADD -0.245511 0.241253 1.03561 0.51026 NA 1 222 222 2 1 0.17915 1 494 ADD 0.126374 0.238576 0.280581 0.22452 NA 1 223 223 2 1 0.20749 1 494 ADD 0.0432905 0.235591 0.033765 0.0684366 NA 1 224 224 2 1 0.203441 1 494 ADD -0.239607 0.250357 0.915968 0.470395 NA 1 225 225 2 1 0.182186 1 494 ADD 0.208018 0.235924 0.777421 0.422588 NA 1 226 226 2 1 0.211538 1 494 ADD 0.00814029 0.217043 0.00140666 0.0131916 NA 1 227 227 2 1 0.203441 1 494 ADD 0.0233924 0.247722 0.00891698 0.0339673 NA 1 228 228 2 1 0.178138 1 494 ADD 0.00411336 0.243644 0.000285025 0.00588961 NA 1 229 229 2 1 0.208502 1 494 ADD 0.205819 0.237378 0.751776 0.413509 NA 1 230 230 2 1 0.171053 1 494 ADD -0.28898 0.249136 1.34543 0.608927 NA 1 231 231 2 1 0.188259 1 494 ADD 0.388264 0.241396 2.58699 0.967602 NA 1 232 232 2 1 0.181174 1 494 ADD 0.171533 0.247554 0.480128 0.311256 NA 1 233 233 2 1 0.201417 1 494 ADD 0.0469302 0.237934 0.0389036 0.073843 NA 1 234 234 2 1 0.197368 1 494 ADD 0.186589 0.241115 0.598854 0.35752 NA 1 235 235 2 1 0.186235 1 494 ADD 0.164584 0.243268 0.457722 0.302169 NA 1 236 236 2 1 0.196356 1 494 ADD 0.685354 0.244762 7.54733 2.22113 NA 1 237 237 2 1 0.216599 1 494 ADD -0.232181 0.237769 0.953545 0.483044 NA 1 238 238 2 1 0.190283 1 494 ADD 0.507344 0.241471 4.41444 1.44811 NA 1 239 239 2 1 0.17915 1 494 ADD -0.141981 0.252332 0.316603 0.241348 NA 1 240 240 2 1 0.217611 1 494 ADD 0.0184468 0.227884 0.00655256 0.0289639 NA 1 241 241 2 1 0.185223 1 494 ADD -0.440588 0.24769 3.1641 1.12335 NA 1 242 242 2 1 0.198381 1 494 ADD 0.256868 0.240376 1.14192 0.544779 NA 1 243 243 2 1 0.219636 1 494 ADD -0.0875526 0.243105 0.129703 0.143428 NA 1 244 244 2 1 0.196356 1 494 ADD 0.241806 0.23834 1.02929 0.508183 NA 1 245 245 2 1 0.187247 1 494 ADD -0.440328 0.23728 3.44375 1.19729 NA 1 246 246 2 1 0.196356 1 494 ADD -0.310991 0.233608 1.77224 0.737298 NA 1 247 247 2 1 0.189271 1 494 ADD 0.107724 0.255013 0.178445 0.17217 NA 1 248 248 2 1 0.183198 1 494 ADD 0.0316461 0.238284 0.0176381 0.0484949 NA 1 249 249 2 1 0.175101 1 494 ADD 0.27444 0.257176 1.13876 0.543765 NA 1 250 250 2 1 0.17915 1 494 ADD 0.0614279 0.252795 0.0590466 0.0925837 NA 1 251 251 2 1 0.226721 1 494 ADD -0.228603 0.237876 0.923556 0.472959 NA 1 252 252 2 1 0.197368 1 494 ADD 0.121706 0.230814 0.278035 0.223305 NA 1 253 253 2 1 0.209514 1 494 ADD 0.488668 0.224401 4.74218 1.53118 NA 1 254 254 2 1 0.209514 1 494 ADD 0.177626 0.229557 0.598737 0.357476 NA 1 255 255 2 1 0.212551 1 494 ADD 0.313204 0.240614 1.69439 0.71439 NA 1 256 256 2 1 0.195344 1 494 ADD -0.191068 0.237769 0.645748 0.375061 NA 1 257 257 2 1 0.186235 1 494 ADD 0.472663 0.24021 3.87186 1.3089 NA 1 258 258 2 1 0.212551 1 494 ADD 0.454249 0.230918 3.86965 1.30833 NA 1 259 259 2 1 0.218623 1 494 ADD -0.00686996 0.233375 0.000866564 0.0103208 NA 1 260 260 2 1 0.201417 1 494 ADD -0.641684 0.249596 6.92329 2.07017 NA 1 261 261 2 1 0.186235 1 494 ADD 0.0238221 0.239516 0.00989219 0.0358472 NA 1 262 262 2 1 0.225709 1 494 ADD -0.360946 0.250435 2.07727 0.825338 NA 1 263 263 2 1 0.187247 1 494 ADD -0.169709 0.240098 0.499613 0.319057 NA 1 264 264 2 1 0.183198 1 494 ADD -0.256245 0.242189 1.11944 0.537544 NA 1 265 265 2 1 0.20749 1 494 ADD 0.0243429 0.222907 0.0119261 0.0395108 NA 1 266 266 2 1 0.194332 1 494 ADD -0.664331 0.251561 7.33325 2.16947 NA 1 267 267 2 1 0.203441 1 494 ADD -0.239132 0.241563 0.979975 0.491868 NA 1 268 268 2 1 0.219636 1 494 ADD 0.0951827 0.225713 0.17783 0.171827 NA 1 269 269 2 1 0.184211 1 494 ADD 0.282981 0.231405 1.49544 0.654873 NA 1 270 270 2 1 0.191296 1 494 ADD 0.453645 0.255768 3.14586 1.1185 NA 1 271 271 2 1 0.200405 1 494 ADD -0.0808228 0.240269 0.113154 0.132779 NA 1 272 272 2 1 0.186235 1 494 ADD -0.042941 0.242151 0.0314466 0.0658816 NA 1 273 273 2 1 0.191296 1 494 ADD 0.0133505 0.243043 0.00301736 0.0194541 NA 1 274 274 2 1 0.177126 1 494 ADD 0.0551893 0.250015 0.0487279 0.0833925 NA 1 275 275 2 1 0.216599 1 494 ADD -0.210649 0.219884 0.917769 0.471004 NA 1 276 276 2 1 0.195344 1 494 ADD -0.155271 0.231073 0.451528 0.299634 NA 1 277 277 2 1 0.180162 1 494 ADD 0.159026 0.236068 0.453795 0.300563 NA 1 278 278 2 1 0.200405 1 494 ADD 0.0996347 0.235063 0.179661 0.172847 NA 1 279 279 2 1 0.210526 1 494 ADD 0.317616 0.23165 1.87992 0.768675 NA 1 280 280 2 1 0.202429 1 494 ADD 0.0963706 0.22526 0.18303 0.174715 NA 1 281 281 2 1 0.210526 1 494 ADD -0.315037 0.228802 1.89585 0.773289 NA 1 282 282 2 1 0.219636 1 494 ADD -0.076133 0.236931 0.103252 0.126121 NA 1 283 283 2 1 0.213563 1 494 ADD 0.0220752 0.223137 0.0097874 0.0356494 NA 1 284 284 2 1 0.185223 1 494 ADD 0.351599 0.252479 1.93929 0.785831 NA 1 285 285 2 1 0.202429 1 494 ADD -0.321853 0.245204 1.72291 0.722805 NA 1 286 286 2 1 0.219636 1 494 ADD -0.147106 0.223449 0.433414 0.292159 NA 1 287 287 2 1 0.192308 1 494 ADD 0.151032 0.246317 0.375968 0.267792 NA 1 288 288 2 1 0.200405 1 494 ADD -0.187541 0.240239 0.609402 0.361498 NA 1 289 289 2 1 0.189271 1 494 ADD -0.0840863 0.227902 0.136131 0.147423 NA 1 290 290 2 1 0.214575 1 494 ADD 0.292289 0.23618 1.53158 0.665798 NA 1 291 291 2 1 0.216599 1 494 ADD 0.268234 0.219577 1.4923 0.653921 NA 1 292 292 2 1 0.19332 1 494 ADD -0.344072 0.235297 2.13829 0.842658 NA 1 293 293 2 1 0.205466 1 494 ADD -0.0864626 0.230699 0.140464 0.150077 NA 1 294 294 2 1 0.184211 1 494 ADD 0.489442 0.262504 3.47641 1.20586 NA 1 295 295 2 1 0.203441 1 494 ADD 0.331204 0.231665 2.04395 0.815841 NA 1 296 296 2 1 0.209514 1 494 ADD -0.0805619 0.239349 0.113291 0.13287 NA 1 297 297 2 1 0.215587 1 494 ADD 0.165862 0.22921 0.523633 0.328553 NA 1 298 298 2 1 0.20749 1 494 ADD -0.188592 0.237428 0.630932 0.369558 NA 1 299 299 2 1 0.216599 1 494 ADD 0.176591 0.233697 0.570993 0.346918 NA 1 300 300 2 1 0.202429 1 494 ADD -0.144656 0.248427 0.339061 0.251524 NA 1 301 301 2 1 0.209514 1 494 ADD -0.0933582 0.244644 0.145625 0.153198 NA 1 302 302 2 1 0.209514 1 494 ADD -0.154235 0.239447 0.414902 0.284421 NA 1 303 303 2 1 0.187247 1 494 ADD 0.112938 0.226548 0.248519 0.208927 NA 1 304 304 2 1 0.19332 1 494 ADD -0.0369757 0.234443 0.0248747 0.058151 NA 1 305 305 2 1 0.185223 1 494 ADD -0.160382 0.230493 0.484166 0.31288 NA 1 306 306 2 1 0.195344 1 494 ADD 0.148343 0.227192 0.426332 0.289211 NA 1 307 307 2 1 0.202429 1 494 ADD -0.364964 0.246993 2.18339 0.855404 NA 1 308 308 2 1 0.189271 1 494 ADD 0.0113414 0.230555 0.00241983 0.0173822 NA 1 309 309 2 1 0.200405 1 494 ADD -0.550167 0.232754 5.58719 1.74251 NA 1 310 310 2 1 0.208502 1 494 ADD -0.313848 0.246007 1.62758 0.694567 NA 1 311 311 2 1 0.201417 1 494 ADD -0.0230018 0.231591 0.00986463 0.0357953 NA 1 312 312 2 1 0.204453 1 494 ADD -0.247301 0.217641 1.29114 0.592034 NA 1 313 313 2 1 0.208502 1 494 ADD 0.0489485 0.230112 0.0452481 0.0801124 NA 1 314 314 2 1 0.197368 1 494 ADD -0.236284 0.243026 0.94528 0.480272 NA 1 315 315 2 1 0.186235 1 494 ADD -0.0544366 0.238678 0.0520186 0.0864048 NA 1 316 316 2 1 0.191296 1 494 ADD -0.156108 0.233868 0.445563 0.297182 NA 1 317 317 2 1 0.200405 1 494 ADD -0.170493 0.230598 0.546638 0.337531 NA 1 318 318 2 1 0.201417 1 494 ADD -0.0836236 0.240343 0.121059 0.137935 NA 1 319 319 2 1 0.218623 1 494 ADD -0.264531 0.224167 1.39255 0.623468 NA 1 320 320 2 1 0.183198 1 494 ADD -0.207568 0.226662 0.838617 0.443948 NA 1 321 321 2 1 0.178138 1 494 ADD -0.0122218 0.240989 0.00257204 0.0179313 NA 1 322 322 2 1 0.194332 1 494 ADD -0.000149906 0.246105 3.71023e-07 0.00021112 NA 1 323 323 2 1 0.201417 1 494 ADD 0.32419 0.254198 1.62651 0.694247 NA 1 324 324 2 1 0.210526 1 494 ADD 0.0770296 0.248347 0.0962048 0.12123 NA 1 325 325 2 1 0.19332 1 494 ADD 0.313602 0.236354 1.76048 0.733851 NA 1 326 326 2 1 0.185223 1 494 ADD -0.0525833 0.240257 0.047901 0.0826222 NA 1 327 327 2 1 0.200405 1 494 ADD -0.0591845 0.238504 0.0615781 0.0947337 NA 1 328 328 2 1 0.210526 1 494 ADD 0.354506 0.233132 2.3123 0.891591 NA 1 329 329 2 1 0.208502 1 494 ADD 0.111997 0.229837 0.237451 0.203389 NA 1 330 330 2 1 0.17915 1 494 ADD -0.12819 0.236699 0.2933 0.230539 NA 1 331 331 2 1 0.19332 1 494 ADD 0.408404 0.23602 2.99421 1.07799 NA 1 332 332 2 1 0.188259 1 494 ADD 0.195833 0.246878 0.629226 0.368922 NA 1 333 333 2 1 0.209514 1 494 ADD -0.151887 0.226026 0.451569 0.29965 NA 1 334 334 2 1 0.19332 1 494 ADD 0.0416929 0.230151 0.032817 0.0674014 NA 1 335 335 2 1 0.212551 1 494 ADD 0.0613165 0.225989 0.0736173 0.1045 NA 1 336 336 2 1 0.186235 1 494 ADD 0.129016 0.238361 0.292966 0.230382 NA 1 337 337 2 1 0.218623 1 494 ADD 0.152594 0.23628 0.417082 0.285338 NA 1 338 338 2 1 0.190283 1 494 ADD -0.239065 0.254347 0.883446 0.459346 NA 1 339 339 2 1 0.19332 1 494 ADD -0.135831 0.242476 0.313803 0.240064 NA 1 340 340 2 1 0.192308 1 494 ADD -0.263052 0.233923 1.26455 0.583707 NA 1 341 341 2 1 0.191296 1 494 ADD -0.184736 0.232458 0.631558 0.369791 NA 1 342 342 2 1 0.197368 1 494 ADD -0.280695 0.252277 1.23798 0.575345 NA 1 343 343 2 1 0.216599 1 494 ADD 0.119036 0.229639 0.268699 0.218815 NA 1 344 344 2 1 0.17915 1 494 ADD 0.64969 0.229737 7.82274 2.28741 NA 1 345 345 2 1 0.178138 1 494 ADD -0.249486 0.256349 0.947174 0.480908 NA 1 346 346 2 1 0.226721 1 494 ADD -0.119133 0.22382 0.283311 0.225819 NA 1 347 347 2 1 0.183198 1 494 ADD -0.271723 0.256981 1.11802 0.537086 NA 1 348 348 2 1 0.190283 1 494 ADD -0.132357 0.24202 0.299083 0.233247 NA 1 349 349 2 1 0.185223 1 494 ADD -0.406789 0.238202 2.9164 1.05708 NA 1 350 350 2 1 0.197368 1 494 ADD -0.309055 0.244167 1.60213 0.686973 NA 1 351 351 2 1 0.211538 1 494 ADD -0.0346362 0.242827 0.0203455 0.0522838 NA 1 352 352 2 1 0.197368 1 494 ADD 0.222792 0.243363 0.83809 0.443766 NA 1 353 353 2 1 0.195344 1 494 ADD 0.220816 0.259398 0.724649 0.403818 NA 1 354 354 2 1 0.214575 1 494 ADD 0.423568 0.232507 3.31876 1.16435 NA 1 355 355 2 1 0.218623 1 494 ADD 0.15006 0.229652 0.426959 0.289472 NA 1 356 356 2 1 0.201417 1 494 ADD 0.137602 0.227091 0.367158 0.263956 NA 1 357 357 2 1 0.189271 1 494 ADD -0.357142 0.233423 2.34096 0.89959 NA 1 358 358 2 1 0.213563 1 494 ADD -0.415095 0.244066 2.89255 1.05066 NA 1 359 359 2 1 0.180162 1 494 ADD 0.18873 0.242497 0.605714 0.360109 NA 1 360 360 2 1 0.20749 1 494 ADD 0.194504 0.239236 0.661007 0.380693 NA 1 361 361 2 1 0.19332 1 494 ADD -0.231122 0.239437 0.931756 0.475724 NA 1 362 362 2 1 0.196356 1 494 ADD -0.000245258 0.23587 1.08119e-06 0.000360459 NA 1 363 363 2 1 0.214575 1 494 ADD -0.168907 0.234424 0.519147 0.326789 NA 1 364 364 2 1 0.201417 1 494 ADD 0.340148 0.254778 1.78242 0.740282 NA 1 365 365 2 1 0.17915 1 494 ADD 0.259736 0.243495 1.13786 0.543473 NA 1 366 366 2 1 0.205466 1 494 ADD -0.326632 0.231234 1.99532 0.801932 NA 1 367 367 2 1 0.162955 1 494 ADD -0.568275 0.268885 4.46667 1.4614 NA 1 368 368 2 1 0.187247 1 494 ADD 0.0128547 0.244311 0.00276847 0.0186174 NA 1 369 369 2 1 0.198381 1 494 ADD 0.0975411 0.228457 0.182291 0.174307 NA 1 370 370 2 1 0.212551 1 494 ADD -0.084123 0.226825 0.137546 0.148294 NA 1 371 371 2 1 0.202429 1 494 ADD 0.0480171 0.223419 0.0461905 0.0810109 NA 1 372 372 2 1 0.20749 1 494 ADD 0.568191 0.219481 6.5877 1.98849 NA 1 373 373 2 1 0.191296 1 494 ADD -0.0834276 0.243188 0.117688 0.135753 NA 1 374 374 2 1 0.182186 1 494 ADD -0.363118 0.23859 2.31629 0.892704 NA 1 375 375 2 1 0.196356 1 494 ADD 0.0651676 0.237644 0.0751985 0.105732 NA 1 376 376 2 1 0.19332 1 494 ADD -0.241227 0.235149 1.05236 0.515752 NA 1 377 377 2 1 0.205466 1 494 ADD 0.341688 0.249721 1.87218 0.766432 NA 1 378 378 2 1 0.204453 1 494 ADD 0.158864 0.248605 0.408348 0.281657 NA 1 379 379 2 1 0.199393 1 494 ADD -0.0481929 0.244 0.0390108 0.0739524 NA 1 380 380 2 1 0.195344 1 494 ADD -0.0734079 0.248604 0.0871903 0.114763 NA 1 381 381 2 1 0.210526 1 494 ADD -0.0105475 0.228929 0.00212273 0.0162601 NA 1 382 382 2 1 0.194332 1 494 ADD 0.0416356 0.239626 0.0301899 0.0644624 NA 1 383 383 2 1 0.197368 1 494 ADD -0.0417624 0.234217 0.0317932 0.0662686 NA 1 384 384 2 1 0.197368 1 494 ADD -0.0227064 0.258763 0.00770003 0.0314818 NA 1 385 385 2 1 0.19332 1 494 ADD -0.17419 0.2265 0.591438 0.354712 NA 1 386 386 2 1 0.209514 1 494 ADD 0.204922 0.236581 0.750272 0.412974 NA 1 387 387 2 1 0.216599 1 494 ADD -0.433229 0.242266 3.19781 1.13231 NA 1 388 388 2 1 0.182186 1 494 ADD -0.0664087 0.261258 0.0646118 0.0972631 NA 1 389 389 2 1 0.201417 1 494 ADD -0.0964735 0.24814 0.151155 0.156497 NA 1 390 390 2 1 0.211538 1 494 ADD -0.21901 0.235598 0.864138 0.452738 NA 1 391 391 2 1 0.192308 1 494 ADD -0.336766 0.239517 1.9769 0.796649 NA 1 392 392 2 1 0.218623 1 494 ADD -0.191544 0.228947 0.699952 0.394911 NA 1 393 393 2 1 0.190283 1 494 ADD 0.0611308 0.245398 0.0620552 0.0951349 NA 1 394 394 2 1 0.194332 1 494 ADD 0.0518504 0.246149 0.0443718 0.0792698 NA 1 395 395 2 1 0.172065 1 494 ADD -0.224502 0.261258 0.738422 0.40875 NA 1 396 396 2 1 0.210526 1 494 ADD 0.0912253 0.234707 0.15107 0.156447 NA 1 397 397 2 1 0.178138 1 494 ADD -0.162788 0.252472 0.415737 0.284773 NA 1 398 398 2 1 0.231781 1 494 ADD 0.01235 0.235618 0.00274739 0.0185449 NA 1 399 399 2 1 0.175101 1 494 ADD -0.0479172 0.267481 0.0320921 0.066601 NA 1 400 400 2 1 0.209514 1 494 ADD 0.0439179 0.233626 0.0353379 0.0701269 NA 1 401 401 2 1 0.200405 1 494 ADD -0.329615 0.247943 1.76729 0.735849 NA 1 402 402 2 1 0.203441 1 494 ADD 0.272774 0.22381 1.48541 0.651832 NA 1 403 403 2 1 0.195344 1 494 ADD -0.0152635 0.246255 0.00384184 0.0220128 NA 1 404 404 2 1 0.17915 1 494 ADD -0.140991 0.243505 0.33525 0.249812 NA 1 405 405 2 1 0.22166 1 494 ADD -0.256102 0.22605 1.28357 0.589667 NA 1 406 406 2 1 0.191296 1 494 ADD -0.719464 0.260554 8.01813 2.33431 NA 1 407 407 2 1 0.204453 1 494 ADD 0.00669707 0.228699 0.000857517 0.0102661 NA 1 408 408 2 1 0.195344 1 494 ADD 0.00669866 0.229694 0.000850504 0.0102236 NA 1 409 409 2 1 0.225709 1 494 ADD 0.100527 0.224966 0.199679 0.183772 NA 1 410 410 2 1 0.204453 1 494 ADD -0.0269847 0.230987 0.0136477 0.0423928 NA 1 411 411 2 1 0.205466 1 494 ADD -0.469791 0.240515 3.81526 1.29424 NA 1 412 412 2 1 0.19332 1 494 ADD 0.0515073 0.229386 0.05042 0.0849517 NA 1 413 413 2 1 0.20749 1 494 ADD 0.182291 0.248882 0.53647 0.333576 NA 1 414 414 2 1 0.190283 1 494 ADD 0.289216 0.2395 1.45825 0.643574 NA 1 415 415 2 1 0.199393 1 494 ADD 0.113183 0.232928 0.236113 0.202713 NA 1 416 416 2 1 0.203441 1 494 ADD 0.252299 0.243939 1.06972 0.52142 NA 1 417 417 2 1 0.197368 1 494 ADD 0.684579 0.232363 8.56402 2.46487 NA 1 418 418 2 1 0.19332 1 494 ADD -0.223279 0.240453 0.862256 0.452092 NA 1 419 419 2 1 0.184211 1 494 ADD 0.0289128 0.254994 0.0128565 0.0410902 NA 1 420 420 2 1 0.208502 1 494 ADD 0.258976 0.231243 1.25423 0.580465 NA 1 421 421 2 1 0.190283 1 494 ADD 0.261297 0.236457 1.22113 0.570024 NA 1 422 422 2 1 0.211538 1 494 ADD 0.363307 0.228262 2.53327 0.952846 NA 1 423 423 2 1 0.188259 1 494 ADD 0.0530746 0.237276 0.0500343 0.0845983 NA 1 424 424 2 1 0.211538 1 494 ADD -0.139296 0.219001 0.404565 0.280055 NA 1 425 425 2 1 0.202429 1 494 ADD -0.0346592 0.247346 0.0196348 0.0513124 NA 1 426 426 2 1 0.209514 1 494 ADD 0.0378373 0.226134 0.0279968 0.0619226 NA 1 427 427 2 1 0.19332 1 494 ADD 0.09836 0.262449 0.140459 0.150074 NA 1 428 428 2 1 0.192308 1 494 ADD 0.25426 0.241674 1.10687 0.533483 NA 1 429 429 2 1 0.22166 1 494 ADD 0.14721 0.237802 0.383212 0.270925 NA 1 430 430 2 1 0.225709 1 494 ADD 0.278268 0.223631 1.54832 0.670839 NA 1 431 431 2 1 0.200405 1 494 ADD -0.26871 0.219408 1.4999 0.656223 NA 1 432 432 2 1 0.194332 1 494 ADD -0.226225 0.237684 0.905906 0.466987 NA 1 433 433 2 1 0.187247 1 494 ADD -0.117095 0.24086 0.236346 0.202831 NA 1 434 434 2 1 0.229757 1 494 ADD 0.0478362 0.221533 0.0466272 0.0814246 NA 1 435 435 2 1 0.215587 1 494 ADD -0.11193 0.230876 0.235038 0.202169 NA 1 436 436 2 1 0.198381 1 494 ADD -0.102686 0.235687 0.189825 0.178446 NA 1 437 437 2 1 0.187247 1 494 ADD 0.737775 0.246765 8.93134 2.55235 NA 1 438 438 2 1 0.19332 1 494 ADD 0.0639365 0.257064 0.061861 0.0949717 NA 1 439 439 2 1 0.211538 1 494 ADD 0.0643578 0.227473 0.0800465 0.109448 NA 1 440 440 2 1 0.208502 1 494 ADD -0.178705 0.230782 0.599609 0.357805 NA 1 441 441 2 1 0.17915 1 494 ADD -0.149983 0.246238 0.371001 0.265633 NA 1 442 442 2 1 0.192308 1 494 ADD -0.121635 0.23594 0.265772 0.217397 NA 1 443 443 2 1 0.210526 1 494 ADD 0.316958 0.234743 1.82314 0.752174 NA 1 444 444 2 1 0.212551 1 494 ADD -0.0059142 0.2386 0.000614398 0.00867431 NA 1 445 445 2 1 0.183198 1 494 ADD 0.382624 0.260668 2.1546 0.847274 NA 1 446 446 2 1 0.211538 1 494 ADD -0.210875 0.227938 0.855887 0.449903 NA 1 447 447 2 1 0.228745 1 494 ADD -0.284376 0.231705 1.50632 0.658167 NA 1 448 448 2 1 0.212551 1 494 ADD -0.0950486 0.23883 0.158385 0.160743 NA 1 449 449 2 1 0.190283 1 494 ADD 0.461651 0.231861 3.96434 1.33279 NA 1 450 450 2 1 0.199393 1 494 ADD 0.45498 0.234569 3.76221 1.28047 NA 1 451 451 2 1 0.219636 1 494 ADD 0.334421 0.221311 2.28338 0.883504 NA 1 452 452 2 1 0.205466 1 494 ADD -0.0479219 0.231013 0.0430323 0.077968 NA 1 453 453 2 1 0.203441 1 494 ADD 0.234922 0.240263 0.956035 0.483877 NA 1 454 454 2 1 0.196356 1 494 ADD -0.155836 0.234057 0.443291 0.296246 NA 1 455 455 2 1 0.209514 1 494 ADD -0.330102 0.237573 1.93065 0.783339 NA 1 456 456 2 1 0.173077 1 494 ADD 0.144614 0.26702 0.293312 0.230545 NA 1 457 457 2 1 0.210526 1 494 ADD 0.145348 0.234285 0.384882 0.271644 NA 1 458 458 2 1 0.196356 1 494 ADD 0.140847 0.234703 0.360127 0.260874 NA 1 459 459 2 1 0.208502 1 494 ADD 0.193186 0.233238 0.686043 0.389858 NA 1 460 460 2 1 0.203441 1 494 ADD 0.21919 0.23817 0.846969 0.446832 NA 1 461 461 2 1 0.215587 1 494 ADD 0.0552649 0.217075 0.0648158 0.0974314 NA 1 462 462 2 1 0.219636 1 494 ADD 0.502447 0.232709 4.66178 1.51087 NA 1 463 463 2 1 0.181174 1 494 ADD 0.304298 0.254609 1.42841 0.634466 NA 1 464 464 2 1 0.189271 1 494 ADD 0.116401 0.240485 0.234283 0.201787 NA 1 465 465 2 1 0.20749 1 494 ADD 0.492254 0.244773 4.04438 1.35341 NA 1 466 466 2 1 0.187247 1 494 ADD -0.286202 0.233459 1.50287 0.657124 NA 1 467 467 2 1 0.222672 1 494 ADD -0.327509 0.237497 1.90165 0.774965 NA 1 468 468 2 1 0.201417 1 494 ADD 0.314591 0.245737 1.6389 0.697936 NA 1 469 469 2 1 0.209514 1 494 ADD -0.0718081 0.240121 0.0894309 0.116394 NA 1 470 470 2 1 0.20749 1 494 ADD -0.146232 0.238125 0.377114 0.268289 NA 1 471 471 2 1 0.201417 1 494 ADD -0.233836 0.230135 1.03242 0.509212 NA 1 472 472 2 1 0.205466 1 494 ADD -0.17052 0.23098 0.545008 0.336898 NA 1 473 473 2 1 0.206478 1 494 ADD 0.26603 0.240309 1.22553 0.571414 NA 1 474 474 2 1 0.206478 1 494 ADD -0.321393 0.238402 1.81741 0.750504 NA 1 475 475 2 1 0.197368 1 494 ADD 0.16096 0.234656 0.470515 0.307373 NA 1 476 476 2 1 0.177126 1 494 ADD 0.318222 0.264096 1.4519 0.641639 NA 1 477 477 2 1 0.204453 1 494 ADD -0.246297 0.23133 1.13359 0.542103 NA 1 478 478 2 1 0.190283 1 494 ADD -0.319282 0.244343 1.70746 0.718251 NA 1 479 479 2 1 0.200405 1 494 ADD 0.088342 0.23918 0.136422 0.147603 NA 1 480 480 2 1 0.202429 1 494 ADD -0.367588 0.241076 2.32495 0.895122 NA 1 481 481 2 1 0.214575 1 494 ADD -0.0688842 0.215156 0.102502 0.125607 NA 1 482 482 2 1 0.224696 1 494 ADD -0.247391 0.229359 1.16341 0.551666 NA 1 483 483 2 1 0.209514 1 494 ADD -0.0761799 0.245489 0.0962979 0.121295 NA 1 484 484 2 1 0.192308 1 494 ADD 0.239937 0.245257 0.957087 0.48423 NA 1 485 485 2 1 0.200405 1 494 ADD -0.176733 0.243536 0.526638 0.329732 NA 1 486 486 2 1 0.20749 1 494 ADD -0.0285663 0.23836 0.0143628 0.0435405 NA 1 487 487 2 1 0.189271 1 494 ADD 0.241237 0.239242 1.01675 0.504051 NA 1 488 488 2 1 0.175101 1 494 ADD 0.199374 0.24945 0.638806 0.372487 NA 1 489 489 2 1 0.184211 1 494 ADD -0.0551669 0.240631 0.0525597 0.0868924 NA 1 490 490 2 1 0.206478 1 494 ADD 0.0445959 0.242774 0.0337432 0.0684129 NA 1 491 491 2 1 0.194332 1 494 ADD -0.172776 0.241915 0.510081 0.323212 NA 1 492 492 2 1 0.208502 1 494 ADD -0.412855 0.235595 3.07089 1.09851 NA 1 493 493 2 1 0.186235 1 494 ADD -0.391253 0.247675 2.49547 0.942432 NA 1 494 494 2 1 0.197368 1 494 ADD -0.650522 0.248596 7.21293 2.14038 NA 1 495 495 2 1 0.189271 1 494 ADD -0.249574 0.25173 0.982941 0.492854 NA 1 496 496 2 1 0.199393 1 494 ADD 0.306995 0.239526 1.64269 0.699064 NA 1 497 497 2 1 0.217611 1 494 ADD -0.130407 0.225958 0.33308 0.248836 NA 1 498 498 2 1 0.201417 1 494 ADD -0.225674 0.236261 0.912386 0.469183 NA 1 499 499 2 1 0.197368 1 494 ADD -0.102442 0.22702 0.203622 0.185877 NA 1 500 500 2 1 0.192308 1 494 ADD 0.119692 0.231191 0.268035 0.218494 NA 1 501 501 2 1 0.0941296 1 494 ADD -0.436143 0.326923 1.77978 0.739508 NA 1 502 502 2 1 0.090081 1 494 ADD 0.310088 0.331368 0.875688 0.456695 NA 1 503 503 2 1 0.110324 1 494 ADD 0.00955919 0.295072 0.00104951 0.0113714 NA 1 504 504 2 1 0.105263 1 494 ADD -0.198829 0.29301 0.460463 0.303288 NA 1 505 505 2 1 0.090081 1 494 ADD 0.102455 0.337407 0.0922059 0.118392 NA 1 506 506 2 1 0.0921053 1 494 ADD -0.440926 0.344414 1.63897 0.697958 NA 1 507 507 2 1 0.0991903 1 494 ADD -0.276535 0.311384 0.788693 0.426553 NA 1 508 508 2 1 0.11336 1 494 ADD -0.381384 0.29551 1.66564 0.70588 NA 1 509 509 2 1 0.118421 1 494 ADD 0.0492791 0.295938 0.0277283 0.0616058 NA 1 510 510 2 1 0.0850202 1 494 ADD 0.175166 0.356854 0.240946 0.205147 NA 1 511 511 2 1 0.102227 1 494 ADD 0.442525 0.309508 2.04424 0.815924 NA 1 512 512 2 1 0.0840081 1 494 ADD 0.404764 0.340089 1.4165 0.630821 NA 1 513 513 2 1 0.0941296 1 494 ADD -0.187753 0.353107 0.282722 0.22554 NA 1 514 514 2 1 0.0961538 1 494 ADD -0.290289 0.335819 0.747222 0.411889 NA 1 515 515 2 1 0.120445 1 494 ADD -0.273577 0.293766 0.867278 0.453815 NA 1 516 516 2 1 0.118421 1 494 ADD -0.0311153 0.272691 0.0130198 0.0413621 NA 1 517 517 2 1 0.107287 1 494 ADD 0.0467026 0.302144 0.0238922 0.0569214 NA 1 518 518 2 1 0.090081 1 494 ADD -0.274852 0.328647 0.699418 0.394717 NA 1 519 519 2 1 0.097166 1 494 ADD 0.0331264 0.314412 0.0111007 0.0380618 NA 1 520 520 2 1 0.0961538 1 494 ADD 0.67885 0.32347 4.40432 1.44553 NA 1 521 521 2 1 0.0981781 1 494 ADD -0.22432 0.321376 0.487203 0.314099 NA 1 522 522 2 1 0.101215 1 494 ADD -0.336213 0.330141 1.03713 0.510757 NA 1 523 523 2 1 0.118421 1 494 ADD -0.194195 0.288911 0.451804 0.299747 NA 1 524 524 2 1 0.097166 1 494 ADD 0.0436768 0.318337 0.0188247 0.0501856 NA 1 525 525 2 1 0.0981781 1 494 ADD 0.0439357 0.304233 0.0208556 0.0529718 NA 1 526 526 2 1 0.107287 1 494 ADD -0.154487 0.304537 0.257339 0.213281 NA 1 527 527 2 1 0.102227 1 494 ADD -0.497902 0.309017 2.59611 0.970103 NA 1 528 528 2 1 0.112348 1 494 ADD 0.419456 0.301802 1.93164 0.783626 NA 1 529 529 2 1 0.107287 1 494 ADD 0.202182 0.315614 0.41037 0.282511 NA 1 530 530 2 1 0.103239 1 494 ADD -0.284723 0.314279 0.820758 0.437756 NA 1 531 531 2 1 0.097166 1 494 ADD 0.45056 0.306155 2.16583 0.850446 NA 1 532 532 2 1 0.111336 1 494 ADD -0.12298 0.302944 0.164796 0.16445 NA 1 533 533 2 1 0.103239 1 494 ADD -0.00615803 0.331467 0.000345145 0.00648543 NA 1 534 534 2 1 0.0910931 1 494 ADD 0.0614936 0.35137 0.0306289 0.064961 NA 1 535 535 2 1 0.105263 1 494 ADD -0.56162 0.308947 3.30458 1.1606 NA 1 536 536 2 1 0.123482 1 494 ADD 0.0686062 0.280172 0.0599623 0.0933657 NA 1 537 537 2 1 0.0931174 1 494 ADD -0.261754 0.334214 0.613392 0.362997 NA 1 538 538 2 1 0.097166 1 494 ADD -0.591172 0.340475 3.01479 1.0835 NA 1 539 539 2 1 0.0809717 1 494 ADD 0.288105 0.339798 0.718885 0.401746 NA 1 540 540 2 1 0.102227 1 494 ADD -0.415544 0.317059 1.71772 0.721276 NA 1 541 541 2 1 0.0910931 1 494 ADD -0.208688 0.314065 0.441523 0.295516 NA 1 542 542 2 1 0.110324 1 494 ADD -0.275261 0.33381 0.679969 0.387643 NA 1 543 543 2 1 0.109312 1 494 ADD 0.260132 0.306144 0.721994 0.402864 NA 1 544 544 2 1 0.0961538 1 494 ADD -0.220378 0.310263 0.504515 0.321006 NA 1 545 545 2 1 0.0951417 1 494 ADD 0.358749 0.329067 1.18854 0.559682 NA 1 546 546 2 1 0.0991903 1 494 ADD -0.180057 0.334088 0.29047 0.229207 NA 1 547 547 2 1 0.097166 1 494 ADD 0.377218 0.297313 1.60975 0.689249 NA 1 548 548 2 1 0.0941296 1 494 ADD 0.0172713 0.33197 0.00270679 0.0184045 NA 1 549 549 2 1 0.0951417 1 494 ADD -0.353715 0.305211 1.34309 0.608202 NA 1 550 550 2 1 0.0961538 1 494 ADD 0.488113 0.28927 2.8473 1.03845 NA 1 551 551 2 1 0.103239 1 494 ADD -0.327791 0.311237 1.10921 0.534239 NA 1 552 552 2 1 0.0931174 1 494 ADD 0.528817 0.333953 2.50749 0.945747 NA 1 553 553 2 1 0.0981781 1 494 ADD -0.197011 0.317247 0.385644 0.271973 NA 1 554 554 2 1 0.100202 1 494 ADD 0.820126 0.294232 7.48063 2.20505 NA 1 555 555 2 1 0.105263 1 494 ADD 0.0664456 0.315261 0.0444214 0.0793177 NA 1 556 556 2 1 0.0961538 1 494 ADD -0.59352 0.313385 3.58686 1.23479 NA 1 557 557 2 1 0.082996 1 494 ADD -0.820179 0.360396 5.17913 1.64093 NA 1 558 558 2 1 0.0991903 1 494 ADD -0.0604722 0.279883 0.0466831 0.0814775 NA 1 559 559 2 1 0.0981781 1 494 ADD -0.22426 0.318886 0.494576 0.317049 NA 1 560 560 2 1 0.107287 1 494 ADD 0.0816086 0.322466 0.0640477 0.0967965 NA 1 561 561 2 1 0.0789474 1 494 ADD -0.324927 0.308107 1.11217 0.535196 NA 1 562 562 2 1 0.101215 1 494 ADD 0.726097 0.328889 4.87406 1.56442 NA 1 563 563 2 1 0.0991903 1 494 ADD -0.282247 0.318377 0.785917 0.425578 NA 1 564 564 2 1 0.107287 1 494 ADD -0.314569 0.301737 1.08686 0.526999 NA 1 565 565 2 1 0.103239 1 494 ADD -0.0507034 0.310511 0.0266636 0.060336 NA 1 566 566 2 1 0.0981781 1 494 ADD 0.180708 0.317846 0.323236 0.244377 NA 1 567 567 2 1 0.101215 1 494 ADD 0.0743624 0.29151 0.065073 0.0976433 NA 1 568 568 2 1 0.0981781 1 494 ADD 0.511137 0.338147 2.28488 0.883922 NA 1 569 569 2 1 0.0951417 1 494 ADD 0.0731738 0.331255 0.0487962 0.0834559 NA 1 570 570 2 1 0.100202 1 494 ADD -0.460413 0.31248 2.17096 0.851895 NA 1 571 571 2 1 0.0890688 1 494 ADD 0.180927 0.3386 0.285517 0.226867 NA 1 572 572 2 1 0.119433 1 494 ADD -0.228535 0.294676 0.601473 0.358509 NA 1 573 573 2 1 0.0921053 1 494 ADD 0.375456 0.342802 1.19959 0.563195 NA 1 574 574 2 1 0.090081 1 494 ADD 0.00581415 0.338572 0.000294897 0.00599143 NA 1 575 575 2 1 0.0931174 1 494 ADD -0.0765169 0.310069 0.0608972 0.0941591 NA 1 576 576 2 1 0.116397 1 494 ADD -0.146635 0.287723 0.259734 0.214455 NA 1 577 577 2 1 0.0921053 1 494 ADD -0.381399 0.345533 1.21838 0.569152 NA 1 578 578 2 1 0.0850202 1 494 ADD -0.351122 0.363064 0.935301 0.476918 NA 1 579 579 2 1 0.107287 1 494 ADD 0.424554 0.302515 1.96956 0.794541 NA 1 580 580 2 1 0.109312 1 494 ADD -0.587852 0.291894 4.05589 1.35638 NA 1 581 581 2 1 0.102227 1 494 ADD 0.0873115 0.29797 0.0858615 0.113788 NA 1 582 582 2 1 0.100202 1 494 ADD -0.198621 0.337732 0.345866 0.254564 NA 1 583 583 2 1 0.105263 1 494 ADD 0.408208 0.33393 1.49435 0.654542 NA 1 584 584 2 1 0.102227 1 494 ADD -0.40841 0.305103 1.79185 0.74304 NA 1 585 585 2 1 0.102227 1 494 ADD 0.196912 0.304119 0.419234 0.286241 NA 1 586 586 2 1 0.0910931 1 494 ADD -0.349025 0.348287 1.00424 0.499921 NA 1 587 587 2 1 0.118421 1 494 ADD 0.0416863 0.294488 0.0200379 0.0518653 NA 1 588 588 2 1 0.100202 1 494 ADD 0.340765 0.322271 1.11806 0.5371 NA 1 589 589 2 1 0.105263 1 494 ADD 0.177953 0.303563 0.343646 0.253574 NA 1 590 590 2 1 0.0910931 1 494 ADD 0.296492 0.310501 0.911801 0.468985 NA 1 591 591 2 1 0.0961538 1 494 ADD 0.013249 0.34901 0.00144109 0.0133544 NA 1 592 592 2 1 0.102227 1 494 ADD 0.465436 0.347409 1.79489 0.743928 NA 1 593 593 2 1 0.0991903 1 494 ADD 0.0934979 0.335674 0.077583 0.107571 NA 1 594 594 2 1 0.0931174 1 494 ADD -0.169601 0.319473 0.28183 0.225115 NA 1 595 595 2 1 0.0880567 1 494 ADD -0.201814 0.345762 0.340683 0.25225 NA 1 596 596 2 1 0.097166 1 494 ADD -0.167482 0.331951 0.254558 0.211914 NA 1 597 597 2 1 0.124494 1 494 ADD 0.190094 0.278027 0.467482 0.306143 NA 1 598 598 2 1 0.0921053 1 494 ADD -0.37021 0.32461 1.30069 0.595016 NA 1 599 599 2 1 0.0840081 1 494 ADD 0.573399 0.345478 2.75469 1.01336 NA 1 600 600 2 1 0.0951417 1 494 ADD 0.453057 0.322865 1.96908 0.794401 NA 1 601 601 2 1 0.0880567 1 494 ADD -0.308767 0.347657 0.788789 0.426587 NA 1 602 602 2 1 0.104251 1 494 ADD -0.0118625 0.308863 0.00147508 0.0135134 NA 1 603 603 2 1 0.0981781 1 494 ADD 0.00980135 0.317011 0.000955924 0.0108462 NA 1 604 604 2 1 0.102227 1 494 ADD 0.6312 0.314387 4.03093 1.34995 NA 1 605 605 2 1 0.100202 1 494 ADD 0.354484 0.317973 1.24283 0.576874 NA 1 606 606 2 1 0.0890688 1 494 ADD 0.226357 0.362994 0.388858 0.273354 NA 1 607 607 2 1 0.0991903 1 494 ADD 0.391518 0.308032 1.61552 0.690971 NA 1 608 608 2 1 0.0860324 1 494 ADD -0.203021 0.343307 0.349716 0.256275 NA 1 609 609 2 1 0.105263 1 494 ADD 0.254146 0.33115 0.589003 0.353788 NA 1 610 610 2 1 0.0870445 1 494 ADD -0.199706 0.317443 0.395779 0.276317 NA 1 611 611 2 1 0.0931174 1 494 ADD -0.747393 0.354263 4.45087 1.45738 NA 1 612 612 2 1 0.0991903 1 494 ADD -0.063561 0.298737 0.0452692 0.0801326 NA 1 613 613 2 1 0.0931174 1 494 ADD 0.455252 0.338464 1.80917 0.748098 NA 1 614 614 2 1 0.101215 1 494 ADD -0.190535 0.328875 0.33565 0.249992 NA 1 615 615 2 1 0.102227 1 494 ADD 0.287376 0.300412 0.915093 0.470099 NA 1 616 616 2 1 0.090081 1 494 ADD -0.177886 0.315293 0.318315 0.242132 NA 1 617 617 2 1 0.0921053 1 494 ADD -0.158722 0.37289 0.18118 0.173691 NA 1 618 618 2 1 0.116397 1 494 ADD 0.144019 0.303738 0.224824 0.196961 NA 1 619 619 2 1 0.082996 1 494 ADD -1.50861 0.434451 14.3671 3.82272 NA 1 620 620 2 1 0.110324 1 494 ADD 0.319165 0.278322 1.31503 0.599485 NA 1 621 621 2 1 0.0910931 1 494 ADD -0.434971 0.327481 1.7642 0.734943 NA 1 622 622 2 1 0.110324 1 494 ADD 0.00335707 0.289329 0.000134628 0.00403925 NA 1 623 623 2 1 0.0981781 1 494 ADD 0.11689 0.340496 0.11785 0.135858 NA 1 624 624 2 1 0.110324 1 494 ADD 0.236098 0.336082 0.49351 0.316624 NA 1 625 625 2 1 0.100202 1 494 ADD 0.429245 0.285215 2.26498 0.878347 NA 1 626 626 2 1 0.106275 1 494 ADD 0.433645 0.309938 1.95758 0.791095 NA 1 627 627 2 1 0.109312 1 494 ADD -0.320424 0.289873 1.2219 0.570267 NA 1 628 628 2 1 0.0840081 1 494 ADD -0.616213 0.343009 3.22739 1.14016 NA 1 629 629 2 1 0.0961538 1 494 ADD 0.167743 0.301854 0.308811 0.237764 NA 1 630 630 2 1 0.0961538 1 494 ADD 0.0365878 0.303249 0.0145571 0.0438479 NA 1 631 631 2 1 0.0860324 1 494 ADD 0.103795 0.328547 0.0998064 0.123746 NA 1 632 632 2 1 0.104251 1 494 ADD 0.310586 0.313347 0.982457 0.492694 NA 1 633 633 2 1 0.119433 1 494 ADD 0.00278218 0.274045 0.000103068 0.00353219 NA 1 634 634 2 1 0.0941296 1 494 ADD -0.0578071 0.316995 0.0332551 0.0678814 NA 1 635 635 2 1 0.102227 1 494 ADD 0.496969 0.289865 2.93945 1.06329 NA 1 636 636 2 1 0.0991903 1 494 ADD 0.0180658 0.304152 0.00352804 0.0210732 NA 1 637 637 2 1 0.102227 1 494 ADD 0.126479 0.332471 0.144721 0.152654 NA 1 638 638 2 1 0.111336 1 494 ADD 0.0436574 0.294947 0.0219093 0.0543696 NA 1 639 639 2 1 0.111336 1 494 ADD -0.581278 0.305376 3.62325 1.2443 NA 1 640 640 2 1 0.0991903 1 494 ADD 0.417522 0.322791 1.67307 0.708083 NA 1 641 641 2 1 0.0991903 1 494 ADD 0.108077 0.318881 0.114871 0.13391 NA 1 642 642 2 1 0.109312 1 494 ADD 0.0848109 0.302968 0.0783629 0.108168 NA 1 643 643 2 1 0.104251 1 494 ADD -0.198427 0.325269 0.372148 0.266133 NA 1 644 644 2 1 0.097166 1 494 ADD -0.0469447 0.332968 0.0198777 0.0516462 NA 1 645 645 2 1 0.1083 1 494 ADD -0.0480022 0.30452 0.0248479 0.0581177 NA 1 646 646 2 1 0.0880567 1 494 ADD 0.123623 0.335671 0.135635 0.147118 NA 1 647 647 2 1 0.111336 1 494 ADD 0.36958 0.29253 1.59616 0.685188 NA 1 648 648 2 1 0.0981781 1 494 ADD 0.672383 0.313677 4.59481 1.49392 NA 1 649 649 2 1 0.126518 1 494 ADD -0.17034 0.271135 0.394695 0.275854 NA 1 650 650 2 1 0.1083 1 494 ADD -0.147151 0.288967 0.259317 0.214251 NA 1 651 651 2 1 0.124494 1 494 ADD 0.169238 0.306522 0.304839 0.235925 NA 1 652 652 2 1 0.100202 1 494 ADD 0.236572 0.329367 0.515904 0.325512 NA 1 653 653 2 1 0.102227 1 494 ADD -0.254036 0.32999 0.592637 0.355166 NA 1 654 654 2 1 0.0921053 1 494 ADD -0.240042 0.318119 0.56937 0.346296 NA 1 655 655 2 1 0.0921053 1 494 ADD 0.322536 0.340868 0.89533 0.463395 NA 1 656 656 2 1 0.0809717 1 494 ADD 0.603658 0.342091 3.11386 1.10998 NA 1 657 657 2 1 0.104251 1 494 ADD -0.0829316 0.310929 0.0711403 0.102547 NA 1 658 658 2 1 0.097166 1 494 ADD -0.342029 0.316176 1.17022 0.553843 NA 1 659 659 2 1 0.105263 1 494 ADD -0.0946202 0.319957 0.0874547 0.114957 NA 1 660 660 2 1 0.101215 1 494 ADD -0.373496 0.344597 1.17476 0.55529 NA 1 661 661 2 1 0.115385 1 494 ADD 0.0664295 0.287107 0.0535344 0.0877654 NA 1 662 662 2 1 0.0951417 1 494 ADD -0.6004 0.313048 3.67842 1.25868 NA 1 663 663 2 1 0.104251 1 494 ADD -0.01625 0.301644 0.00290213 0.019071 NA 1 664 664 2 1 0.118421 1 494 ADD 0.126744 0.278869 0.206565 0.187439 NA 1 665 665 2 1 0.107287 1 494 ADD -0.744817 0.315733 5.56494 1.73699 NA 1 666 666 2 1 0.0961538 1 494 ADD 0.593632 0.313519 3.58514 1.23434 NA 1 667 667 2 1 0.090081 1 494 ADD 0.180964 0.334361 0.292922 0.230361 NA 1 668 668 2 1 0.0799595 1 494 ADD 0.312292 0.331877 0.885455 0.460031 NA 1 669 669 2 1 0.0951417 1 494 ADD 0.104018 0.30973 0.112784 0.132534 NA 1 670 670 2 1 0.0921053 1 494 ADD 0.0447955 0.332924 0.0181042 0.049165 NA 1 671 671 2 1 0.1083 1 494 ADD 0.00190864 0.297955 4.10343e-05 0.0022254 NA 1 672 672 2 1 0.097166 1 494 ADD -0.48063 0.329908 2.12244 0.838169 NA 1 673 673 2 1 0.097166 1 494 ADD 0.246399 0.360598 0.46691 0.305911 NA 1 674 674 2 1 0.103239 1 494 ADD -0.289069 0.304386 0.901892 0.465625 NA 1 675 675 2 1 0.111336 1 494 ADD -0.0402951 0.292478 0.0189809 0.0504045 NA 1 676 676 2 1 0.106275 1 494 ADD 0.0284315 0.323399 0.00772896 0.0315429 NA 1 677 677 2 1 0.090081 1 494 ADD 0.289791 0.35093 0.681915 0.388353 NA 1 678 678 2 1 0.0951417 1 494 ADD -0.0614315 0.305285 0.0404922 0.0754513 NA 1 679 679 2 1 0.11336 1 494 ADD -0.374606 0.301244 1.54637 0.670252 NA 1 680 680 2 1 0.102227 1 494 ADD 0.290837 0.301849 0.928369 0.474583 NA 1 681 681 2 1 0.12247 1 494 ADD -0.18676 0.290505 0.413296 0.283745 NA 1 682 682 2 1 0.097166 1 494 ADD -0.156277 0.354132 0.194741 0.181115 NA 1 683 683 2 1 0.101215 1 494 ADD 0.272695 0.309501 0.7763 0.422192 NA 1 684 684 2 1 0.0860324 1 494 ADD 0.29743 0.331155 0.806692 0.432856 NA 1 685 685 2 1 0.0931174 1 494 ADD 0.504035 0.32166 2.45543 0.931373 NA 1 686 686 2 1 0.082996 1 494 ADD 0.278421 0.345914 0.64784 0.375836 NA 1 687 687 2 1 0.0840081 1 494 ADD 0.0152457 0.321919 0.00224286 0.0167224 NA 1 688 688 2 1 0.100202 1 494 ADD -0.0440424 0.314047 0.0196677 0.0513576 NA 1 689 689 2 1 0.0890688 1 494 ADD -0.428954 0.324062 1.75213 0.731399 NA 1 690 690 2 1 0.101215 1 494 ADD 0.495217 0.306018 2.61877 0.976309 NA 1 691 691 2 1 0.0921053 1 494 ADD 0.0600308 0.366272 0.0268622 0.0605745 NA 1 692 692 2 1 0.0991903 1 494 ADD -0.0622685 0.336887 0.034164 0.0688685 NA 1 693 693 2 1 0.12247 1 494 ADD 0.20889 0.286301 0.532342 0.331965 NA 1 694 694 2 1 0.0850202 1 494 ADD 0.138027 0.354657 0.151465 0.15668 NA 1 695 695 2 1 0.0991903 1 494 ADD 0.0421837 0.32922 0.0164178 0.0467021 NA 1 696 696 2 1 0.107287 1 494 ADD 0.408166 0.30228 1.82328 0.752215 NA 1 697 697 2 1 0.103239 1 494 ADD 0.0195487 0.305664 0.00409022 0.022731 NA 1 698 698 2 1 0.102227 1 494 ADD 0.62237 0.307755 4.08964 1.36505 NA 1 699 699 2 1 0.100202 1 494 ADD 0.106159 0.330715 0.103039 0.125975 NA 1 700 700 2 1 0.097166 1 494 ADD -0.35219 0.323003 1.18889 0.559794 NA 1 701 701 2 1 0.0931174 1 494 ADD -0.0913276 0.309074 0.0873131 0.114853 NA 1 702 702 2 1 0.102227 1 494 ADD -0.0411284 0.31314 0.0172507 0.0479321 NA 1 703 703 2 1 0.124494 1 494 ADD 0.368346 0.292056 1.59068 0.683548 NA 1 704 704 2 1 0.101215 1 494 ADD 0.104827 0.323346 0.105102 0.127383 NA 1 705 705 2 1 0.0991903 1 494 ADD -0.0834127 0.323988 0.0662837 0.0986361 NA 1 706 706 2 1 0.104251 1 494 ADD 0.371069 0.320284 1.34226 0.607945 NA 1 707 707 2 1 0.0931174 1 494 ADD 0.431687 0.306936 1.97806 0.796982 NA 1 708 708 2 1 0.0910931 1 494 ADD 0.0369178 0.308988 0.0142754 0.0434016 NA 1 709 709 2 1 0.101215 1 494 ADD -0.368832 0.326152 1.27884 0.588187 NA 1 710 710 2 1 0.0991903 1 494 ADD -0.0679006 0.341843 0.0394542 0.0744035 NA 1 711 711 2 1 0.12753 1 494 ADD -0.0981107 0.285537 0.118062 0.135996 NA 1 712 712 2 1 0.0769231 1 494 ADD -0.441524 0.345384 1.6342 0.696537 NA 1 713 713 2 1 0.104251 1 494 ADD 0.219182 0.328427 0.44538 0.297107 NA 1 714 714 2 1 0.103239 1 494 ADD -0.223007 0.28944 0.593634 0.355544 NA 1 715 715 2 1 0.0870445 1 494 ADD -0.252563 0.326983 0.596608 0.356671 NA 1 716 716 2 1 0.0951417 1 494 ADD -0.075434 0.332345 0.0515177 0.0859515 NA 1 717 717 2 1 0.111336 1 494 ADD -0.194333 0.276109 0.495369 0.317366 NA 1 718 718 2 1 0.101215 1 494 ADD -0.349951 0.289619 1.46003 0.644118 NA 1 719 719 2 1 0.0961538 1 494 ADD 0.185264 0.326076 0.322809 0.244183 NA 1 720 720 2 1 0.103239 1 494 ADD 0.262951 0.30762 0.730667 0.405975 NA 1 721 721 2 1 0.0981781 1 494 ADD 0.611909 0.313935 3.79921 1.29008 NA 1 722 722 2 1 0.0850202 1 494 ADD -0.496555 0.317464 2.44651 0.928904 NA 1 723 723 2 1 0.115385 1 494 ADD 0.422743 0.303129 1.94489 0.787444 NA 1 724 724 2 1 0.120445 1 494 ADD 0.259153 0.280662 0.852601 0.448773 NA 1 725 725 2 1 0.0941296 1 494 ADD 0.601641 0.340177 3.12799 1.11374 NA 1 726 726 2 1 0.103239 1 494 ADD 0.122195 0.320673 0.145206 0.152946 NA 1 727 727 2 1 0.0991903 1 494 ADD -0.539699 0.322548 2.79972 1.02558 NA 1 728 728 2 1 0.1083 1 494 ADD 0.470551 0.31614 2.21541 0.864427 NA 1 729 729 2 1 0.0890688 1 494 ADD -0.197758 0.345709 0.327225 0.246189 NA 1 730 730 2 1 0.0951417 1 494 ADD 0.0226142 0.344256 0.00431518 0.0233637 NA 1 731 731 2 1 0.0991903 1 494 ADD -0.679177 0.3328 4.16487 1.38436 NA 1 732 732 2 1 0.0981781 1 494 ADD -0.472029 0.328014 2.07087 0.823516 NA 1 733 733 2 1 0.0840081 1 494 ADD 0.483733 0.328544 2.16782 0.851009 NA 1 734 734 2 1 0.109312 1 494 ADD 0.20891 0.297766 0.492228 0.316111 NA 1 735 735 2 1 0.0870445 1 494 ADD -0.212645 0.318953 0.444485 0.296738 NA 1 736 736 2 1 0.1083 1 494 ADD 0.26843 0.309415 0.752624 0.413811 NA 1 737 737 2 1 0.0890688 1 494 ADD 0.376959 0.312176 1.45811 0.643531 NA 1 738 738 2 1 0.121457 1 494 ADD 0.145689 0.26711 0.297489 0.232502 NA 1 739 739 2 1 0.0981781 1 494 ADD -0.0528801 0.309473 0.0291971 0.0633231 NA 1 740 740 2 1 0.121457 1 494 ADD 0.251144 0.2854 0.774354 0.421506 NA 1 741 741 2 1 0.0941296 1 494 ADD 0.728732 0.310343 5.51382 1.7243 NA 1 742 742 2 1 0.0981781 1 494 ADD -0.16799 0.292482 0.329888 0.247395 NA 1 743 743 2 1 0.0880567 1 494 ADD -0.207039 0.347466 0.355042 0.258633 NA 1 744 744 2 1 0.106275 1 494 ADD 0.265025 0.305393 0.7531 0.41398 NA 1 745 745 2 1 0.0890688 1 494 ADD -0.243662 0.349314 0.486568 0.313845 NA 1 746 746 2 1 0.1083 1 494 ADD -0.103813 0.325153 0.101937 0.125218 NA 1 747 747 2 1 0.100202 1 494 ADD 0.482516 0.349913 1.90153 0.774932 NA 1 748 748 2 1 0.0981781 1 494 ADD -0.0639759 0.322693 0.0393055 0.0742525 NA 1 749 749 2 1 0.0981781 1 494 ADD 0.624201 0.331865 3.53774 1.22194 NA 1 750 750 2 1 0.111336 1 494 ADD 0.0580158 0.302329 0.0368243 0.0716947 NA 1 751 751 2 1 0.0870445 1 494 ADD -0.156513 0.351523 0.198239 0.183 NA 1 752 752 2 1 0.111336 1 494 ADD -0.215062 0.287642 0.559013 0.342315 NA 1 753 753 2 1 0.0931174 1 494 ADD -0.0399905 0.31757 0.0158575 0.0458588 NA 1 754 754 2 1 0.0910931 1 494 ADD 0.255346 0.329684 0.599878 0.357907 NA 1 755 755 2 1 0.107287 1 494 ADD 0.513648 0.310949 2.72868 1.0063 NA 1 756 756 2 1 0.0981781 1 494 ADD -0.196656 0.313598 0.393251 0.275237 NA 1 757 757 2 1 0.103239 1 494 ADD 0.279992 0.325451 0.740154 0.409368 NA 1 758 758 2 1 0.0951417 1 494 ADD 0.814533 0.308479 6.75339 2.02887 NA 1 759 759 2 1 0.0961538 1 494 ADD 0.245266 0.31554 0.604179 0.35953 NA 1 760 760 2 1 0.106275 1 494 ADD -0.309298 0.296397 1.08895 0.527676 NA 1 761 761 2 1 0.1083 1 494 ADD -0.171865 0.313403 0.300727 0.234013 NA 1 762 762 2 1 0.0890688 1 494 ADD 0.122688 0.337279 0.132321 0.145064 NA 1 763 763 2 1 0.0921053 1 494 ADD 0.363825 0.33193 1.20141 0.563774 NA 1 764 764 2 1 0.106275 1 494 ADD 0.0739797 0.313886 0.0555498 0.08955 NA 1 765 765 2 1 0.0890688 1 494 ADD 0.224676 0.326546 0.473396 0.308539 NA 1 766 766 2 1 0.115385 1 494 ADD 0.128133 0.293003 0.191239 0.179216 NA 1 767 767 2 1 0.112348 1 494 ADD 0.45929 0.279713 2.69617 0.997447 NA 1 768 768 2 1 0.103239 1 494 ADD -0.0463494 0.335352 0.0191023 0.050574 NA 1 769 769 2 1 0.112348 1 494 ADD -0.207646 0.281981 0.542261 0.335831 NA 1 770 770 2 1 0.100202 1 494 ADD 0.166074 0.317172 0.274167 0.221451 NA 1 771 771 2 1 0.107287 1 494 ADD -0.136726 0.31038 0.19405 0.180741 NA 1 772 772 2 1 0.0981781 1 494 ADD -0.026698 0.329301 0.00657311 0.0290107 NA 1 773 773 2 1 0.104251 1 494 ADD 0.293707 0.316027 0.863734 0.4526 NA 1 774 774 2 1 0.105263 1 494 ADD -0.0551695 0.304395 0.032849 0.0674365 NA 1 775 775 2 1 0.0819838 1 494 ADD -0.00974098 0.348476 0.000781373 0.00979457 NA 1 776 776 2 1 0.0991903 1 494 ADD -0.0514859 0.328703 0.0245341 0.0577272 NA 1 777 777 2 1 0.100202 1 494 ADD -0.244458 0.297845 0.67364 0.385329 NA 1 778 778 2 1 0.107287 1 494 ADD -0.296762 0.29798 0.991842 0.495811 NA 1 779 779 2 1 0.119433 1 494 ADD 0.0642437 0.288952 0.0494322 0.0840442 NA 1 780 780 2 1 0.0941296 1 494 ADD 0.338729 0.311938 1.17915 0.55669 NA 1 781 781 2 1 0.111336 1 494 ADD -0.0481514 0.303728 0.0251332 0.0584709 NA 1 782 782 2 1 0.101215 1 494 ADD -0.158085 0.344591 0.210462 0.189495 NA 1 783 783 2 1 0.104251 1 494 ADD -0.0236376 0.303662 0.00605935 0.0278185 NA 1 784 784 2 1 0.090081 1 494 ADD -0.290561 0.32478 0.80038 0.43065 NA 1 785 785 2 1 0.0991903 1 494 ADD -0.0354098 0.309865 0.0130587 0.0414266 NA 1 786 786 2 1 0.106275 1 494 ADD -0.933803 0.339365 8.51153 2.45234 NA 1 787 787 2 1 0.105263 1 494 ADD 0.196986 0.296909 0.440173 0.294958 NA 1 788 788 2 1 0.0961538 1 494 ADD -0.0669659 0.325543 0.0423146 0.0772635 NA 1 789 789 2 1 0.100202 1 494 ADD 0.575469 0.303442 3.5966 1.23734 NA 1 790 790 2 1 0.082996 1 494 ADD 0.34616 0.345046 1.00647 0.500656 NA 1 791 791 2 1 0.117409 1 494 ADD 0.228108 0.287404 0.629939 0.369188 NA 1 792 792 2 1 0.082996 1 494 ADD 0.251363 0.343154 0.536567 0.333614 NA 1 793 793 2 1 0.106275 1 494 ADD 0.229253 0.304041 0.568549 0.345981 NA 1 794 794 2 1 0.0819838 1 494 ADD -0.968887 0.38122 7.06565 2.10471 NA 1 795 795 2 1 0.0931174 1 494 ADD -0.040321 0.322413 0.0156401 0.045528 NA 1 796 796 2 1 0.109312 1 494 ADD 0.199684 0.305186 0.428113 0.289953 NA 1 797 797 2 1 0.097166 1 494 ADD 0.459865 0.320896 2.05367 0.818614 NA 1 798 798 2 1 0.0910931 1 494 ADD 0.199157 0.336986 0.349275 0.25608 NA 1 799 799 2 1 0.0870445 1 494 ADD -0.173328 0.337347 0.263988 0.21653 NA 1 800 800 2 1 0.0850202 1 494 ADD 0.183535 0.326348 0.316284 0.241202 NA 1 801 801 2 1 0.0840081 1 494 ADD 0.120376 0.33571 0.128572 0.142718 NA 1 802 802 2 1 0.102227 1 494 ADD -0.20224 0.324815 0.387667 0.272843 NA 1 803 803 2 1 0.107287 1 494 ADD 0.422694 0.312827 1.82577 0.752939 NA 1 804 804 2 1 0.0910931 1 494 ADD -0.333904 0.303474 1.21061 0.566691 NA 1 805 805 2 1 0.0890688 1 494 ADD 0.0262905 0.321202 0.00669948 0.0292972 NA 1 806 806 2 1 0.104251 1 494 ADD -0.133027 0.289116 0.211707 0.190149 NA 1 807 807 2 1 0.101215 1 494 ADD 0.518187 0.309018 2.81194 1.02889 NA 1 808 808 2 1 0.0961538 1 494 ADD -0.427605 0.321053 1.77391 0.737788 NA 1 809 809 2 1 0.103239 1 494 ADD -0.212694 0.316732 0.450946 0.299395 NA 1 810 810 2 1 0.0910931 1 494 ADD -0.14822 0.321204 0.212937 0.190794 NA 1 811 811 2 1 0.121457 1 494 ADD 0.154717 0.30904 0.250638 0.209978 NA 1 812 812 2 1 0.0870445 1 494 ADD 0.461988 0.345062 1.79253 0.743238 NA 1 813 813 2 1 0.118421 1 494 ADD -0.302529 0.293549 1.06212 0.518941 NA 1 814 814 2 1 0.117409 1 494 ADD -0.251453 0.298158 0.71125 0.398995 NA 1 815 815 2 1 0.104251 1 494 ADD -0.134737 0.315843 0.181983 0.174136 NA 1 816 816 2 1 0.107287 1 494 ADD 0.41279 0.307901 1.79737 0.744652 NA 1 817 817 2 1 0.118421 1 494 ADD 0.573616 0.318533 3.24289 1.14428 NA 1 818 818 2 1 0.0981781 1 494 ADD -0.224518 0.345962 0.421159 0.287048 NA 1 819 819 2 1 0.0890688 1 494 ADD -0.391462 0.311626 1.57802 0.679757 NA 1 820 820 2 1 0.114372 1 494 ADD 0.150255 0.296806 0.25628 0.212761 NA 1 821 821 2 1 0.0840081 1 494 ADD 0.227747 0.360649 0.398783 0.277598 NA 1 822 822 2 1 0.109312 1 494 ADD 0.217202 0.317121 0.469113 0.306805 NA 1 823 823 2 1 0.101215 1 494 ADD -0.0117819 0.312598 0.00142054 0.0132575 NA 1 824 824 2 1 0.0941296 1 494 ADD 0.016859 0.315112 0.00286242 0.0189373 NA 1 825 825 2 1 0.0840081 1 494 ADD -0.136272 0.34522 0.15582 0.159245 NA 1 826 826 2 1 0.111336 1 494 ADD -0.201846 0.294602 0.469428 0.306933 NA 1 827 827 2 1 0.097166 1 494 ADD 0.0557876 0.336352 0.0275097 0.0613468 NA 1 828 828 2 1 0.0981781 1 494 ADD 0.104453 0.326458 0.102374 0.125519 NA 1 829 829 2 1 0.100202 1 494 ADD -0.419195 0.327063 1.64275 0.699081 NA 1 830 830 2 1 0.0840081 1 494 ADD 0.0775549 0.315612 0.0603824 0.0937229 NA 1 831 831 2 1 0.0961538 1 494 ADD -0.497017 0.321706 2.38685 0.912362 NA 1 832 832 2 1 0.0941296 1 494 ADD 0.153953 0.301588 0.260585 0.214871 NA 1 833 833 2 1 0.107287 1 494 ADD -0.288205 0.282754 1.03892 0.511348 NA 1 834 834 2 1 0.0961538 1 494 ADD -0.248457 0.337375 0.542348 0.335865 NA 1 835 835 2 1 0.107287 1 494 ADD -0.487755 0.314821 2.40036 0.916114 NA 1 836 836 2 1 0.101215 1 494 ADD -0.389641 0.324417 1.44252 0.638779 NA 1 837 837 2 1 0.102227 1 494 ADD 0.135945 0.313153 0.188456 0.177698 NA 1 838 838 2 1 0.0961538 1 494 ADD -0.149826 0.328549 0.207955 0.188174 NA 1 839 839 2 1 0.103239 1 494 ADD -0.668923 0.318222 4.41866 1.44919 NA 1 840 840 2 1 0.0951417 1 494 ADD -0.208724 0.318111 0.430515 0.290954 NA 1 841 841 2 1 0.106275 1 494 ADD -0.169803 0.297396 0.326002 0.245634 NA 1 842 842 2 1 0.101215 1 494 ADD -0.585282 0.335572 3.042 1.09079 NA 1 843 843 2 1 0.0931174 1 494 ADD -0.156612 0.333036 0.221142 0.195063 NA 1 844 844 2 1 0.0779352 1 494 ADD -0.0769737 0.336234 0.0524085 0.0867563 NA 1 845 845 2 1 0.0931174 1 494 ADD -0.219567 0.321335 0.466894 0.305904 NA 1 846 846 2 1 0.115385 1 494 ADD 0.114671 0.288942 0.157502 0.160229 NA 1 847 847 2 1 0.114372 1 494 ADD 0.0768471 0.293261 0.0686668 0.100569 NA 1 848 848 2 1 0.1083 1 494 ADD 0.207336 0.302916 0.468493 0.306554 NA 1 849 849 2 1 0.101215 1 494 ADD 0.324333 0.277197 1.369 0.616214 NA 1 850 850 2 1 0.0941296 1 494 ADD 0.578325 0.336333 2.95669 1.06792 NA 1 851 851 2 1 0.0951417 1 494 ADD -0.0446944 0.323085 0.0191369 0.0506224 NA 1 852 852 2 1 0.0840081 1 494 ADD 0.68666 0.342331 4.02339 1.34801 NA 1 853 853 2 1 0.119433 1 494 ADD 0.165057 0.28222 0.342052 0.252862 NA 1 854 854 2 1 0.109312 1 494 ADD 0.107793 0.313249 0.118414 0.136224 NA 1 855 855 2 1 0.116397 1 494 ADD -0.150818 0.288197 0.273859 0.221303 NA 1 856 856 2 1 0.0981781 1 494 ADD 0.154224 0.307088 0.25222 0.210761 NA 1 857 857 2 1 0.0981781 1 494 ADD -0.71047 0.359464 3.90643 1.31784 NA 1 858 858 2 1 0.106275 1 494 ADD -0.256215 0.312279 0.673171 0.385157 NA 1 859 859 2 1 0.0850202 1 494 ADD -0.184266 0.342895 0.28878 0.22841 NA 1 860 860 2 1 0.104251 1 494 ADD 0.211303 0.317969 0.441615 0.295554 NA 1 861 861 2 1 0.0961538 1 494 ADD 0.631858 0.331203 3.63958 1.24856 NA 1 862 862 2 1 0.0931174 1 494 ADD 0.323357 0.332627 0.945037 0.48019 NA 1 863 863 2 1 0.0991903 1 494 ADD -0.294522 0.32613 0.815558 0.435947 NA 1 864 864 2 1 0.103239 1 494 ADD -0.752217 0.303083 6.75915 2.03027 NA 1 865 865 2 1 0.0799595 1 494 ADD -0.159455 0.369365 0.186366 0.176553 NA 1 866 866 2 1 0.0991903 1 494 ADD -0.0610923 0.314236 0.0377974 0.0727063 NA 1 867 867 2 1 0.118421 1 494 ADD -0.356341 0.306278 1.35363 0.611464 NA 1 868 868 2 1 0.110324 1 494 ADD 0.219799 0.306095 0.515633 0.325405 NA 1 869 869 2 1 0.090081 1 494 ADD -0.18782 0.310294 0.366383 0.263617 NA 1 870 870 2 1 0.102227 1 494 ADD -0.0804586 0.30742 0.0684982 0.100433 NA 1 871 871 2 1 0.0809717 1 494 ADD -0.304277 0.358927 0.718665 0.401667 NA 1 872 872 2 1 0.103239 1 494 ADD -0.282635 0.331933 0.725018 0.40395 NA 1 873 873 2 1 0.0890688 1 494 ADD -0.136656 0.352269 0.15049 0.156103 NA 1 874 874 2 1 0.110324 1 494 ADD 0.117748 0.29896 0.155125 0.158838 NA 1 875 875 2 1 0.0991903 1 494 ADD -0.383708 0.327424 1.37335 0.617555 NA 1 876 876 2 1 0.100202 1 494 ADD 0.0709819 0.323359 0.0481864 0.0828887 NA 1 877 877 2 1 0.0981781 1 494 ADD -0.464502 0.327646 2.00986 0.806097 NA 1 878 878 2 1 0.106275 1 494 ADD -0.370287 0.307215 1.45276 0.641901 NA 1 879 879 2 1 0.109312 1 494 ADD 0.0968104 0.286451 0.11422 0.133483 NA 1 880 880 2 1 0.0910931 1 494 ADD 0.351748 0.367194 0.917639 0.47096 NA 1 881 881 2 1 0.0910931 1 494 ADD 0.109134 0.325974 0.112087 0.132073 NA 1 882 882 2 1 0.112348 1 494 ADD -0.337832 0.308913 1.19599 0.562053 NA 1 883 883 2 1 0.104251 1 494 ADD -0.132837 0.315457 0.17732 0.171542 NA 1 884 884 2 1 0.097166 1 494 ADD -0.0464263 0.318415 0.0212589 0.0535105 NA 1 885 885 2 1 0.0981781 1 494 ADD 0.0589363 0.289117 0.0415544 0.0765117 NA 1 886 886 2 1 0.0991903 1 494 ADD 0.0338843 0.321601 0.011101 0.0380624 NA 1 887 887 2 1 0.101215 1 494 ADD -0.0421687 0.328555 0.0164727 0.046784 NA 1 888 888 2 1 0.090081 1 494 ADD 0.0738572 0.31961 0.0534006 0.087646 NA 1 889 889 2 1 0.090081 1 494 ADD -0.326606 0.308121 1.12358 0.53888 NA 1 890 890 2 1 0.107287 1 494 ADD -0.471041 0.294646 2.55574 0.959026 NA 1 891 891 2 1 0.1083 1 494 ADD -0.484897 0.302352 2.57201 0.963494 NA 1 892 892 2 1 0.116397 1 494 ADD -0.350952 0.303563 1.33659 0.606186 NA 1 893 893 2 1 0.097166 1 494 ADD 0.0477092 0.308491 0.0239177 0.0569535 NA 1 894 894 2 1 0.0961538 1 494 ADD 0.210241 0.315981 0.442703 0.296004 NA 1 895 895 2 1 0.115385 1 494 ADD 0.323838 0.299935 1.16574 0.552411 NA 1 896 896 2 1 0.118421 1 494 ADD -0.292681 0.294497 0.987711 0.49444 NA 1 897 897 2 1 0.0991903 1 494 ADD -0.0343325 0.345831 0.00985558 0.0357782 NA 1 898 898 2 1 0.11336 1 494 ADD 0.611811 0.291699 4.3991 1.44421 NA 1 899 899 2 1 0.1083 1 494 ADD -0.734433 0.320907 5.23776 1.65557 NA 1 900 900 2 1 0.0981781 1 494 ADD 1.09775 0.296301 13.7472 3.67957 NA 1 901 901 2 1 0.0890688 1 494 ADD 0.370849 0.31866 1.35438 0.611696 NA 1 902 902 2 1 0.0890688 1 494 ADD 0.883087 0.35294 6.26045 1.90846 NA 1 903 903 2 1 0.1083 1 494 ADD 0.483535 0.311467 2.41008 0.91881 NA 1 904 904 2 1 0.0688259 1 494 ADD -0.221007 0.352297 0.393543 0.275361 NA 1 905 905 2 1 0.097166 1 494 ADD 0.0626792 0.303494 0.0426527 0.077596 NA 1 906 906 2 1 0.0779352 1 494 ADD -0.0354856 0.374167 0.0089944 0.0341199 NA 1 907 907 2 1 0.110324 1 494 ADD 0.267862 0.30351 0.77889 0.423105 NA 1 908 908 2 1 0.0951417 1 494 ADD 0.56125 0.34306 2.67653 0.992091 NA 1 909 909 2 1 0.0961538 1 494 ADD -0.45069 0.317235 2.01833 0.808521 NA 1 910 910 2 1 0.117409 1 494 ADD 0.448923 0.302799 2.19804 0.859534 NA 1 911 911 2 1 0.0981781 1 494 ADD 0.36326 0.32211 1.27183 0.585989 NA 1 912 912 2 1 0.111336 1 494 ADD 0.0966092 0.313377 0.0950393 0.120408 NA 1 913 913 2 1 0.0890688 1 494 ADD 0.320095 0.357086 0.80355 0.431758 NA 1 914 914 2 1 0.107287 1 494 ADD 0.227016 0.308203 0.542549 0.335943 NA 1 915 915 2 1 0.0991903 1 494 ADD 0.385802 0.310098 1.54786 0.6707 NA 1 916 916 2 1 0.102227 1 494 ADD 0.647971 0.324107 3.99699 1.34121 NA 1 917 917 2 1 0.101215 1 494 ADD 0.289154 0.318868 0.822312 0.438297 NA 1 918 918 2 1 0.0961538 1 494 ADD 0.374032 0.321656 1.35218 0.611015 NA 1 919 919 2 1 0.11336 1 494 ADD 0.048277 0.312373 0.0238855 0.0569129 NA 1 920 920 2 1 0.0941296 1 494 ADD -0.551839 0.348059 2.51374 0.947468 NA 1 921 921 2 1 0.106275 1 494 ADD 0.532446 0.311713 2.9177 1.05743 NA 1 922 922 2 1 0.103239 1 494 ADD 0.1285 0.313078 0.168461 0.166545 NA 1 923 923 2 1 0.101215 1 494 ADD 0.0951912 0.311093 0.0936299 0.119408 NA 1 924 924 2 1 0.118421 1 494 ADD -0.581543 0.297158 3.82992 1.29804 NA 1 925 925 2 1 0.097166 1 494 ADD 0.131467 0.33338 0.155508 0.159062 NA 1 926 926 2 1 0.090081 1 494 ADD 0.103624 0.331895 0.0974814 0.122126 NA 1 927 927 2 1 0.0860324 1 494 ADD -0.539985 0.337693 2.55693 0.959352 NA 1 928 928 2 1 0.0951417 1 494 ADD -0.678216 0.33671 4.05718 1.35671 NA 1 929 929 2 1 0.0931174 1 494 ADD -0.062903 0.327696 0.036847 0.0717184 NA 1 930 930 2 1 0.117409 1 494 ADD 0.0311768 0.278267 0.0125528 0.0405807 NA 1 931 931 2 1 0.0951417 1 494 ADD -0.0207888 0.303694 0.00468581 0.0243729 NA 1 932 932 2 1 0.101215 1 494 ADD -0.0281666 0.311968 0.00815172 0.0324243 NA 1 933 933 2 1 0.111336 1 494 ADD -0.125818 0.328397 0.146787 0.153895 NA 1 934 934 2 1 0.0809717 1 494 ADD -0.00540114 0.339265 0.000253451 0.0055517 NA 1 935 935 2 1 0.0961538 1 494 ADD 0.0854552 0.315683 0.0732781 0.104234 NA 1 936 936 2 1 0.0991903 1 494 ADD 0.308974 0.295162 1.09578 0.529892 NA 1 937 937 2 1 0.0961538 1 494 ADD 0.00478781 0.315185 0.000230751 0.00529571 NA 1 938 938 2 1 0.0991903 1 494 ADD 0.804481 0.314108 6.55957 1.98163 NA 1 939 939 2 1 0.0910931 1 494 ADD -0.269829 0.319819 0.711818 0.3992 NA 1 940 940 2 1 0.0981781 1 494 ADD 0.291839 0.320734 0.827937 0.440249 NA 1 941 941 2 1 0.0910931 1 494 ADD -0.406809 0.325383 1.56312 0.675287 NA 1 942 942 2 1 0.1083 1 494 ADD -0.111771 0.315272 0.125686 0.140893 NA 1 943 943 2 1 0.0819838 1 494 ADD -0.409007 0.331388 1.52331 0.663302 NA 1 944 944 2 1 0.104251 1 494 ADD -0.251167 0.306807 0.670181 0.384062 NA 1 945 945 2 1 0.0870445 1 494 ADD 0.374096 0.322313 1.34713 0.609453 NA 1 946 946 2 1 0.110324 1 494 ADD -0.0119146 0.292117 0.00166359 0.0143645 NA 1 947 947 2 1 0.112348 1 494 ADD 0.0987406 0.291545 0.114705 0.133801 NA 1 948 948 2 1 0.112348 1 494 ADD -0.190394 0.311259 0.374166 0.26701 NA 1 949 949 2 1 0.112348 1 494 ADD -0.142297 0.314719 0.204431 0.186307 NA 1 950 950 2 1 0.104251 1 494 ADD -0.210362 0.32476 0.419574 0.286384 NA 1 951 951 2 1 0.102227 1 494 ADD -0.239762 0.334902 0.512537 0.324182 NA 1 952 952 2 1 0.0981781 1 494 ADD -0.411637 0.333471 1.52374 0.663432 NA 1 953 953 2 1 0.102227 1 494 ADD -0.112478 0.303571 0.137283 0.148132 NA 1 954 954 2 1 0.0941296 1 494 ADD -0.585852 0.311158 3.54499 1.22384 NA 1 955 955 2 1 0.0890688 1 494 ADD 0.265764 0.342405 0.602435 0.358873 NA 1 956 956 2 1 0.100202 1 494 ADD 0.0406184 0.316105 0.0165114 0.0468418 NA 1 957 957 2 1 0.097166 1 494 ADD -0.284559 0.32428 0.770027 0.419978 NA 1 958 958 2 1 0.104251 1 494 ADD 0.366401 0.295748 1.53487 0.666788 NA 1 959 959 2 1 0.0921053 1 494 ADD 0.0649031 0.332198 0.0381713 0.0730921 NA 1 960 960 2 1 0.110324 1 494 ADD 0.629564 0.331301 3.61105 1.24111 NA 1 961 961 2 1 0.102227 1 494 ADD -0.0588028 0.335168 0.0307801 0.0651321 NA 1 962 962 2 1 0.090081 1 494 ADD -0.229848 0.329947 0.485284 0.313329 NA 1 963 963 2 1 0.0941296 1 494 ADD 0.35503 0.34828 1.03914 0.511418 NA 1 964 964 2 1 0.090081 1 494 ADD 0.605797 0.342471 3.129 1.11401 NA 1 965 965 2 1 0.109312 1 494 ADD 0.180911 0.299726 0.364318 0.262714 NA 1 966 966 2 1 0.0850202 1 494 ADD 0.532672 0.347196 2.35381 0.903169 NA 1 967 967 2 1 0.097166 1 494 ADD -0.436032 0.321018 1.84492 0.758515 NA 1 968 968 2 1 0.103239 1 494 ADD -0.00634591 0.333525 0.000362018 0.00664326 NA 1 969 969 2 1 0.0961538 1 494 ADD -0.232087 0.317154 0.535502 0.333198 NA 1 970 970 2 1 0.0951417 1 494 ADD 0.373221 0.310884 1.44124 0.638387 NA 1 971 971 2 1 0.097166 1 494 ADD -0.239757 0.315575 0.577213 0.349298 NA 1 972 972 2 1 0.100202 1 494 ADD -0.689433 0.316092 4.75727 1.53499 NA 1 973 973 2 1 0.0910931 1 494 ADD 0.796849 0.325646 5.98772 1.84146 NA 1 974 974 2 1 0.1083 1 494 ADD 0.342355 0.308272 1.23335 0.573884 NA 1 975 975 2 1 0.104251 1 494 ADD 0.045303 0.304268 0.0221688 0.0547092 NA 1 976 976 2 1 0.103239 1 494 ADD 0.253727 0.287726 0.777636 0.422663 NA 1 977 977 2 1 0.0991903 1 494 ADD 0.295869 0.32383 0.834765 0.442615 NA 1 978 978 2 1 0.0951417 1 494 ADD -0.217941 0.319437 0.465488 0.305333 NA 1 979 979 2 1 0.103239 1 494 ADD -0.0681002 0.300092 0.0514975 0.0859333 NA 1 980 980 2 1 0.100202 1 494 ADD 0.396365 0.31035 1.63112 0.695622 NA 1 981 981 2 1 0.0840081 1 494 ADD -0.48036 0.33505 2.05548 0.81913 NA 1 982 982 2 1 0.0870445 1 494 ADD -0.281532 0.352418 0.638173 0.372252 NA 1 983 983 2 1 0.102227 1 494 ADD -0.564838 0.336733 2.81369 1.02936 NA 1 984 984 2 1 0.102227 1 494 ADD 0.263928 0.293691 0.807583 0.433167 NA 1 985 985 2 1 0.0961538 1 494 ADD -0.0939484 0.300055 0.0980339 0.122512 NA 1 986 986 2 1 0.103239 1 494 ADD -0.271388 0.297233 0.833656 0.442231 NA 1 987 987 2 1 0.103239 1 494 ADD 0.24434 0.302888 0.650763 0.376916 NA 1 988 988 2 1 0.100202 1 494 ADD 0.167054 0.301468 0.307064 0.236956 NA 1 989 989 2 1 0.0941296 1 494 ADD 0.00091681 0.333017 7.57927e-06 0.000955025 NA 1 990 990 2 1 0.100202 1 494 ADD -0.0686065 0.346434 0.0392184 0.0741639 NA 1 991 991 2 1 0.107287 1 494 ADD 0.00766918 0.280053 0.000749924 0.00959327 NA 1 992 992 2 1 0.102227 1 494 ADD -0.231287 0.291735 0.628526 0.368661 NA 1 993 993 2 1 0.118421 1 494 ADD 0.0661996 0.269154 0.0604934 0.093817 NA 1 994 994 2 1 0.103239 1 494 ADD 0.367353 0.292254 1.57996 0.68034 NA 1 995 995 2 1 0.0921053 1 494 ADD 0.0355499 0.356648 0.00993565 0.0359289 NA 1 996 996 2 1 0.0941296 1 494 ADD -0.367872 0.341627 1.15955 0.55043 NA 1 997 997 2 1 0.117409 1 494 ADD 0.133392 0.268002 0.247731 0.208536 NA 1 998 998 2 1 0.0789474 1 494 ADD 0.407348 0.345873 1.38707 0.621782 NA 1 999 999 2 1 0.102227 1 494 ADD 0.112324 0.327073 0.11794 0.135916 NA 1 1000 1000 2 1 0.117409 1 494 ADD -0.0405477 0.280429 0.0209068 0.0530405 NA ================================================ FILE: external_libs/LBFGSpp/AUTHORS.md ================================================ The LBFGS++ library was adapted from the libLBFGS library (https://github.com/chokkan/liblbfgs), written by Naoaki Okazaki <>. The files - `include/LBFGS/LineSearchBracketing.h` - `include/LBFGS/LineSearchNocedalWright.h` were contributed by Dirk Toewe <>. Other part of LBFGS++ was written by Yixuan Qiu <>. ================================================ FILE: external_libs/LBFGSpp/LICENSE.md ================================================ ## The MIT License Copyright (c) 1990 Jorge Nocedal Copyright (c) 2007-2010 Naoaki Okazaki Copyright (c) 2016-2019 Yixuan Qiu Copyright (c) 2018-2019 Dirk Toewe Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: external_libs/LBFGSpp/README.md ================================================ # LBFGS++ LBFGS++ > **UPDATE on 2020-03-06**: **LBFGS++** now includes a new L-BFGS-B solver for > box-constrained optimization problems. Check the example below for its usage. **LBFGS++** is a header-only C++ library that implements the Limited-memory BFGS algorithm (L-BFGS) for unconstrained minimization problems, and a modified version of the L-BFGS-B algorithm for box-constrained ones. The code for the L-BFGS solver is derived and modified from the [libLBFGS](https://github.com/chokkan/liblbfgs) library developed by [Naoaki Okazaki](http://www.chokkan.org/). **LBFGS++** is implemented as a header-only C++ library, whose only dependency, [Eigen](http://eigen.tuxfamily.org/), is also header-only. ## A Quick Example To use **LBFGS++**, one needs to first define a functor to represent the multivariate function to be minimized. It should return the objective function value on a vector `x` and overwrite the vector `grad` with the gradient evaluated on `x`. For example we could define the [Rosenbrock function](https://en.wikipedia.org/wiki/Rosenbrock_function) in the following way: ```cpp #include #include #include using Eigen::VectorXd; using namespace LBFGSpp; class Rosenbrock { private: int n; public: Rosenbrock(int n_) : n(n_) {} double operator()(const VectorXd& x, VectorXd& grad) { double fx = 0.0; for(int i = 0; i < n; i += 2) { double t1 = 1.0 - x[i]; double t2 = 10 * (x[i + 1] - x[i] * x[i]); grad[i + 1] = 20 * t2; grad[i] = -2.0 * (x[i] * grad[i + 1] + t1); fx += t1 * t1 + t2 * t2; } return fx; } }; ``` Then we just need to set up parameters, create solver object, provide initial guess, and then run the minimization function. ```cpp int main() { const int n = 10; // Set up parameters LBFGSParam param; param.epsilon = 1e-6; param.max_iterations = 100; // Create solver and function object LBFGSSolver solver(param); Rosenbrock fun(n); // Initial guess VectorXd x = VectorXd::Zero(n); // x will be overwritten to be the best point found double fx; int niter = solver.minimize(fun, x, fx); std::cout << niter << " iterations" << std::endl; std::cout << "x = \n" << x.transpose() << std::endl; std::cout << "f(x) = " << fx << std::endl; return 0; } ``` The example can then be compiled and run. ```bash $ g++ -I/path/to/eigen -I/path/to/lbfgspp/include -O2 example.cpp $ ./a.out 23 iterations x = 1 1 1 1 1 1 1 1 1 1 f(x) = 1.87948e-19 ``` You can also use a different line search algorithm by providing a second template parameter to `LBFGSSolver`. For example, the code below illustrates the bracketing line search algorithm (contributed by [@DirkToewe](https://github.com/DirkToewe)). ```cpp int main() { const int n = 10; // Set up parameters LBFGSParam param; param.epsilon = 1e-6; param.max_iterations = 100; // Create solver and function object LBFGSSolver solver(param); Rosenbrock fun(n); // Initial guess VectorXd x = VectorXd::Zero(n); // x will be overwritten to be the best point found double fx; int niter = solver.minimize(fun, x, fx); std::cout << niter << " iterations" << std::endl; std::cout << "x = \n" << x.transpose() << std::endl; std::cout << "f(x) = " << fx << std::endl; return 0; } ``` ## Box-constrained Problem If the parameters to be optimized have simple bounds, then the L-BFGS-**B** solver class `LBFGSBSolver` can be used. The code is very similar to that of `LBFGSSolver`. Below is the same Rosenbrock example, but we require that all variables should be between 2 and 4. ```cpp #include #include #include // Note the different header file using Eigen::VectorXd; using namespace LBFGSpp; class Rosenbrock { private: int n; public: Rosenbrock(int n_) : n(n_) {} double operator()(const VectorXd& x, VectorXd& grad) { double fx = 0.0; for(int i = 0; i < n; i += 2) { double t1 = 1.0 - x[i]; double t2 = 10 * (x[i + 1] - x[i] * x[i]); grad[i + 1] = 20 * t2; grad[i] = -2.0 * (x[i] * grad[i + 1] + t1); fx += t1 * t1 + t2 * t2; } return fx; } }; int main() { const int n = 10; // Set up parameters LBFGSBParam param; // New parameter class param.epsilon = 1e-6; param.max_iterations = 100; // Create solver and function object LBFGSBSolver solver(param); // New solver class Rosenbrock fun(n); // Bounds VectorXd lb = VectorXd::Constant(n, 2.0); VectorXd ub = VectorXd::Constant(n, 4.0); // Initial guess VectorXd x = VectorXd::Constant(n, 3.0); // x will be overwritten to be the best point found double fx; int niter = solver.minimize(fun, x, fx, lb, ub); std::cout << niter << " iterations" << std::endl; std::cout << "x = \n" << x.transpose() << std::endl; std::cout << "f(x) = " << fx << std::endl; return 0; } ``` Note that we also allow infinite values for the lower and upper bounds. In such cases one can define `ub[i] = std::numeric_limits::infinity()`, for example. ## Documentation The [API reference](https://lbfgspp.statr.me/doc/) page contains the documentation of **LBFGS++** generated by [Doxygen](http://www.doxygen.org/). ## License **LBFGS++** is an open source project under the MIT license. ================================================ FILE: external_libs/LBFGSpp/include/LBFGS.h ================================================ // Copyright (C) 2016-2020 Yixuan Qiu // Under MIT license #ifndef LBFGS_H #define LBFGS_H #include #include "LBFGSpp/Param.h" #include "LBFGSpp/BFGSMat.h" #include "LBFGSpp/LineSearchBacktracking.h" #include "LBFGSpp/LineSearchBracketing.h" #include "LBFGSpp/LineSearchNocedalWright.h" namespace LBFGSpp { /// /// L-BFGS solver for unconstrained numerical optimization /// template < typename Scalar, template class LineSearch = LineSearchBacktracking > class LBFGSSolver { private: typedef Eigen::Matrix Vector; typedef Eigen::Matrix Matrix; typedef Eigen::Map MapVec; const LBFGSParam& m_param; // Parameters to control the LBFGS algorithm BFGSMat m_bfgs; // Approximation to the Hessian matrix Vector m_fx; // History of the objective function values Vector m_xp; // Old x Vector m_grad; // New gradient Vector m_gradp; // Old gradient Vector m_drt; // Moving direction // Reset internal variables // n: dimension of the vector to be optimized inline void reset(int n) { const int m = m_param.m; m_bfgs.reset(n, m); m_xp.resize(n); m_grad.resize(n); m_gradp.resize(n); m_drt.resize(n); if(m_param.past > 0) m_fx.resize(m_param.past); } public: /// /// Constructor for the L-BFGS solver. /// /// \param param An object of \ref LBFGSParam to store parameters for the /// algorithm /// LBFGSSolver(const LBFGSParam& param) : m_param(param) { m_param.check_param(); } /// /// Minimizing a multivariate function using the L-BFGS algorithm. /// Exceptions will be thrown if error occurs. /// /// \param f A function object such that `f(x, grad)` returns the /// objective function value at `x`, and overwrites `grad` with /// the gradient. /// \param x In: An initial guess of the optimal point. Out: The best point /// found. /// \param fx Out: The objective function value at `x`. /// /// \return Number of iterations used. /// template inline int minimize(Foo& f, Vector& x, Scalar& fx) { using std::abs; // Dimension of the vector const int n = x.size(); reset(n); // The length of lag for objective function value to test convergence const int fpast = m_param.past; // Evaluate function and compute gradient fx = f(x, m_grad); Scalar gnorm = m_grad.norm(); if(fpast > 0) m_fx[0] = fx; // Early exit if the initial x is already a minimizer if(gnorm <= m_param.epsilon || gnorm <= m_param.epsilon_rel * x.norm()) { return 1; } // Initial direction m_drt.noalias() = -m_grad; // Initial step size Scalar step = Scalar(1) / m_drt.norm(); // Number of iterations used int k = 1; for( ; ; ) { // Save the curent x and gradient m_xp.noalias() = x; m_gradp.noalias() = m_grad; // Line search to update x, fx and gradient LineSearch::LineSearch(f, fx, x, m_grad, step, m_drt, m_xp, m_param); // New gradient norm gnorm = m_grad.norm(); // Convergence test -- gradient if(gnorm <= m_param.epsilon || gnorm <= m_param.epsilon_rel * x.norm()) { return k; } // Convergence test -- objective function value if(fpast > 0) { const Scalar fxd = m_fx[k % fpast]; if(k >= fpast && abs(fxd - fx) <= m_param.delta * std::max(std::max(abs(fx), abs(fxd)), Scalar(1))) return k; m_fx[k % fpast] = fx; } // Maximum number of iterations if(m_param.max_iterations != 0 && k >= m_param.max_iterations) { return k; } // Update s and y // s_{k+1} = x_{k+1} - x_k // y_{k+1} = g_{k+1} - g_k m_bfgs.add_correction(x - m_xp, m_grad - m_gradp); // Recursive formula to compute d = -H * g m_bfgs.apply_Hv(m_grad, -Scalar(1), m_drt); // Reset step = 1.0 as initial guess for the next line search step = Scalar(1); k++; } return k; } }; } // namespace LBFGSpp #endif // LBFGS_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSB.h ================================================ // Copyright (C) 2020 Yixuan Qiu // Under MIT license #ifndef LBFGSB_H #define LBFGSB_H #include // std::invalid_argument #include #include #include "LBFGSpp/Param.h" #include "LBFGSpp/BFGSMat.h" #include "LBFGSpp/Cauchy.h" #include "LBFGSpp/SubspaceMin.h" #include "LBFGSpp/LineSearchMoreThuente.h" namespace LBFGSpp { /// /// L-BFGS-B solver for box-constrained numerical optimization /// template < typename Scalar, template class LineSearch = LineSearchMoreThuente > class LBFGSBSolver { private: typedef Eigen::Matrix Vector; typedef Eigen::Matrix Matrix; typedef Eigen::Map MapVec; typedef std::vector IndexSet; const LBFGSBParam& m_param; // Parameters to control the LBFGS algorithm BFGSMat m_bfgs; // Approximation to the Hessian matrix Vector m_fx; // History of the objective function values Vector m_xp; // Old x Vector m_grad; // New gradient Vector m_gradp; // Old gradient Vector m_drt; // Moving direction // Reset internal variables // n: dimension of the vector to be optimized inline void reset(int n) { const int m = m_param.m; m_bfgs.reset(n, m); m_xp.resize(n); m_grad.resize(n); m_gradp.resize(n); m_drt.resize(n); if(m_param.past > 0) m_fx.resize(m_param.past); } // Project the vector x to the bound constraint set static void force_bounds(Vector& x, const Vector& lb, const Vector& ub) { x.noalias() = x.cwiseMax(lb).cwiseMin(ub); } // Norm of the projected gradient // ||P(x-g, l, u) - x||_inf static Scalar proj_grad_norm(const Vector& x, const Vector& g, const Vector& lb, const Vector& ub) { return ((x - g).cwiseMax(lb).cwiseMin(ub) - x).cwiseAbs().maxCoeff(); } // The maximum step size alpha such that x0 + alpha * d stays within the bounds static Scalar max_step_size(const Vector& x0, const Vector& drt, const Vector& lb, const Vector& ub) { const int n = x0.size(); Scalar step = std::numeric_limits::infinity(); for(int i = 0; i < n; i++) { if(drt[i] > Scalar(0)) { step = std::min(step, (ub[i] - x0[i]) / drt[i]); } else if(drt[i] < Scalar(0)) { step = std::min(step, (lb[i] - x0[i]) / drt[i]); } } return step; } public: /// /// Constructor for the L-BFGS-B solver. /// /// \param param An object of \ref LBFGSParam to store parameters for the /// algorithm /// LBFGSBSolver(const LBFGSBParam& param) : m_param(param) { m_param.check_param(); } /// /// Minimizing a multivariate function subject to box constraints, using the L-BFGS-B algorithm. /// Exceptions will be thrown if error occurs. /// /// \param f A function object such that `f(x, grad)` returns the /// objective function value at `x`, and overwrites `grad` with /// the gradient. /// \param x In: An initial guess of the optimal point. Out: The best point /// found. /// \param fx Out: The objective function value at `x`. /// \param lb Lower bounds for `x`. /// \param ub Upper bounds for `x`. /// /// \return Number of iterations used. /// template inline int minimize(Foo& f, Vector& x, Scalar& fx, const Vector& lb, const Vector& ub) { using std::abs; // Dimension of the vector const int n = x.size(); if(lb.size() != n || ub.size() != n) throw std::invalid_argument("'lb' and 'ub' must have the same size as 'x'"); // Check whether the initial vector is within the bounds // If not, project to the feasible set force_bounds(x, lb, ub); // Initialization reset(n); // The length of lag for objective function value to test convergence const int fpast = m_param.past; // Evaluate function and compute gradient fx = f(x, m_grad); Scalar projgnorm = proj_grad_norm(x, m_grad, lb, ub); if(fpast > 0) m_fx[0] = fx; // std::cout << "x0 = " << x.transpose() << std::endl; // std::cout << "f(x0) = " << fx << ", ||proj_grad|| = " << projgnorm << std::endl << std::endl; // Early exit if the initial x is already a minimizer if(projgnorm <= m_param.epsilon || projgnorm <= m_param.epsilon_rel * x.norm()) { return 1; } // Compute generalized Cauchy point Vector xcp(n), vecc; IndexSet newact_set, fv_set; Cauchy::get_cauchy_point(m_bfgs, x, m_grad, lb, ub, xcp, vecc, newact_set, fv_set); /* Vector gcp(n); Scalar fcp = f(xcp, gcp); Scalar projgcpnorm = proj_grad_norm(xcp, gcp, lb, ub); std::cout << "xcp = " << xcp.transpose() << std::endl; std::cout << "f(xcp) = " << fcp << ", ||proj_grad|| = " << projgcpnorm << std::endl << std::endl; */ // Initial direction m_drt.noalias() = xcp - x; m_drt.normalize(); // Tolerance for s'y >= eps * (y'y) const Scalar eps = std::numeric_limits::epsilon(); // s and y vectors Vector vecs(n), vecy(n); // Number of iterations used int k = 1; for( ; ; ) { // Save the curent x and gradient m_xp.noalias() = x; m_gradp.noalias() = m_grad; // Line search to update x, fx and gradient Scalar step_max = max_step_size(x, m_drt, lb, ub); step_max = std::min(m_param.max_step, step_max); Scalar step = Scalar(1); step = std::min(step, step_max); LineSearch::LineSearch(f, fx, x, m_grad, step, step_max, m_drt, m_xp, m_param); // New projected gradient norm projgnorm = proj_grad_norm(x, m_grad, lb, ub); /* std::cout << "** Iteration " << k << std::endl; std::cout << " x = " << x.transpose() << std::endl; std::cout << " f(x) = " << fx << ", ||proj_grad|| = " << projgnorm << std::endl << std::endl; */ // Convergence test -- gradient if(projgnorm <= m_param.epsilon || projgnorm <= m_param.epsilon_rel * x.norm()) { return k; } // Convergence test -- objective function value if(fpast > 0) { const Scalar fxd = m_fx[k % fpast]; if(k >= fpast && abs(fxd - fx) <= m_param.delta * std::max(std::max(abs(fx), abs(fxd)), Scalar(1))) return k; m_fx[k % fpast] = fx; } // Maximum number of iterations if(m_param.max_iterations != 0 && k >= m_param.max_iterations) { return k; } // Update s and y // s_{k+1} = x_{k+1} - x_k // y_{k+1} = g_{k+1} - g_k vecs.noalias() = x - m_xp; vecy.noalias() = m_grad - m_gradp; if(vecs.dot(vecy) > eps * vecy.squaredNorm()) m_bfgs.add_correction(vecs, vecy); force_bounds(x, lb, ub); Cauchy::get_cauchy_point(m_bfgs, x, m_grad, lb, ub, xcp, vecc, newact_set, fv_set); /*Vector gcp(n); Scalar fcp = f(xcp, gcp); Scalar projgcpnorm = proj_grad_norm(xcp, gcp, lb, ub); std::cout << "xcp = " << xcp.transpose() << std::endl; std::cout << "f(xcp) = " << fcp << ", ||proj_grad|| = " << projgcpnorm << std::endl << std::endl;*/ SubspaceMin::subspace_minimize(m_bfgs, x, xcp, m_grad, lb, ub, vecc, newact_set, fv_set, m_param.max_submin, m_drt); /*Vector gsm(n); Scalar fsm = f(x + m_drt, gsm); Scalar projgsmnorm = proj_grad_norm(x + m_drt, gsm, lb, ub); std::cout << "xsm = " << (x + m_drt).transpose() << std::endl; std::cout << "f(xsm) = " << fsm << ", ||proj_grad|| = " << projgsmnorm << std::endl << std::endl;*/ k++; } return k; } }; } // namespace LBFGSpp #endif // LBFGSB_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/BFGSMat.h ================================================ // Copyright (C) 2020 Yixuan Qiu // Under MIT license #ifndef BFGS_MAT_H #define BFGS_MAT_H #include #include #include "BKLDLT.h" /// \cond namespace LBFGSpp { // // An *implicit* representation of the BFGS approximation to the Hessian matrix B // // B = theta * I - W * M * W' // H = inv(B) // // Reference: // [1] D. C. Liu and J. Nocedal (1989). On the limited memory BFGS method for large scale optimization. // [2] R. H. Byrd, P. Lu, and J. Nocedal (1995). A limited memory algorithm for bound constrained optimization. // template class BFGSMat { private: typedef Eigen::Matrix Vector; typedef Eigen::Matrix Matrix; typedef Eigen::Ref RefConstVec; typedef std::vector IndexSet; int m_m; // Maximum number of correction vectors Scalar m_theta; // theta * I is the initial approximation to the Hessian matrix Matrix m_s; // History of the s vectors Matrix m_y; // History of the y vectors Vector m_ys; // History of the s'y values Vector m_alpha; // Temporary values used in computing H * v int m_ncorr; // Number of correction vectors in the history, m_ncorr <= m int m_ptr; // A Pointer to locate the most recent history, 1 <= m_ptr <= m // Details: s and y vectors are stored in cyclic order. // For example, if the current s-vector is stored in m_s[, m-1], // then in the next iteration m_s[, 0] will be overwritten. // m_s[, m_ptr-1] points to the most recent history, // and m_s[, m_ptr % m] points to the most distant one. //========== The following members are only used in L-BFGS-B algorithm ==========// Matrix m_permMinv; // Permutated M inverse BKLDLT m_permMsolver; // Represents the permutated M matrix public: // Constructor BFGSMat() {} // Reset internal variables // n: dimension of the vector to be optimized // m: maximum number of corrections to approximate the Hessian matrix inline void reset(int n, int m) { m_m = m; m_theta = Scalar(1); m_s.resize(n, m); m_y.resize(n, m); m_ys.resize(m); m_alpha.resize(m); m_ncorr = 0; m_ptr = m; // This makes sure that m_ptr % m == 0 in the first step if(LBFGSB) { m_permMinv.resize(2 * m, 2 * m); m_permMinv.setZero(); m_permMinv.diagonal().setOnes(); } } // Add correction vectors to the BFGS matrix inline void add_correction(const RefConstVec& s, const RefConstVec& y) { const int loc = m_ptr % m_m; m_s.col(loc).noalias() = s; m_y.col(loc).noalias() = y; // ys = y's = 1/rho const Scalar ys = m_s.col(loc).dot(m_y.col(loc)); m_ys[loc] = ys; m_theta = m_y.col(loc).squaredNorm() / ys; if(m_ncorr < m_m) m_ncorr++; m_ptr = loc + 1; if(LBFGSB) { // Minv = [-D L'] // [ L theta*S'S] // Copy -D // Let S=[s[0], ..., s[m-1]], Y=[y[0], ..., y[m-1]] // D = [s[0]'y[0], ..., s[m-1]'y[m-1]] m_permMinv(loc, loc) = -ys; // Update S'S // We only store S'S in Minv, and multiply theta when LU decomposition is performed Vector Ss = m_s.leftCols(m_ncorr).transpose() * m_s.col(loc); m_permMinv.block(m_m + loc, m_m, 1, m_ncorr).noalias() = Ss.transpose(); m_permMinv.block(m_m, m_m + loc, m_ncorr, 1).noalias() = Ss; // Compute L // L = [ 0 ] // [ s[1]'y[0] 0 ] // [ s[2]'y[0] s[2]'y[1] ] // ... // [s[m-1]'y[0] ... ... ... ... ... s[m-1]'y[m-2] 0] // // L_next = [ 0 ] // [s[2]'y[1] 0 ] // [s[3]'y[1] s[3]'y[2] ] // ... // [s[m]'y[1] ... ... ... ... ... s[m]'y[m-1] 0] const int len = m_ncorr - 1; // First zero out the column of oldest y if(m_ncorr >= m_m) m_permMinv.block(m_m, loc, m_m, 1).setZero(); // Compute the row associated with new s // The current row is loc // End with column (loc + m - 1) % m // Length is len int yloc = (loc + m_m - 1) % m_m; for(int i = 0; i < len; i++) { m_permMinv(m_m + loc, yloc) = m_s.col(loc).dot(m_y.col(yloc)); yloc = (yloc + m_m - 1) % m_m; } // Matrix LDLT factorization m_permMinv.block(m_m, m_m, m_m, m_m) *= m_theta; m_permMsolver.compute(m_permMinv); m_permMinv.block(m_m, m_m, m_m, m_m) /= m_theta; } } // Recursive formula to compute a * H * v, where a is a scalar, and v is [n x 1] // H0 = (1/theta) * I is the initial approximation to H // Algorithm 7.4 of Nocedal, J., & Wright, S. (2006). Numerical optimization. inline void apply_Hv(const Vector& v, const Scalar& a, Vector& res) { res.resize(v.size()); // L-BFGS two-loop recursion // Loop 1 res.noalias() = a * v; int j = m_ptr % m_m; for(int i = 0; i < m_ncorr; i++) { j = (j + m_m - 1) % m_m; m_alpha[j] = m_s.col(j).dot(res) / m_ys[j]; res.noalias() -= m_alpha[j] * m_y.col(j); } // Apply initial H0 res /= m_theta; // Loop 2 for(int i = 0; i < m_ncorr; i++) { const Scalar beta = m_y.col(j).dot(res) / m_ys[j]; res.noalias() += (m_alpha[j] - beta) * m_s.col(j); j = (j + 1) % m_m; } } //========== The following functions are only used in L-BFGS-B algorithm ==========// // Return the value of theta inline Scalar theta() const { return m_theta; } // Return current number of correction vectors inline int num_corrections() const { return m_ncorr; } // W = [Y, theta * S] // W [n x (2*ncorr)], v [n x 1], res [(2*ncorr) x 1] // res preserves the ordering of Y and S columns inline void apply_Wtv(const Vector& v, Vector& res) const { res.resize(2 * m_ncorr); res.head(m_ncorr).noalias() = m_y.leftCols(m_ncorr).transpose() * v; res.tail(m_ncorr).noalias() = m_theta * m_s.leftCols(m_ncorr).transpose() * v; } // The b-th row of the W matrix // Preserves the ordering of Y and S columns // Return as a column vector inline Vector Wb(int b) const { Vector res(2 * m_ncorr); for(int j = 0; j < m_ncorr; j++) { res[j] = m_y(b, j); res[m_ncorr + j] = m_s(b, j); } res.tail(m_ncorr) *= m_theta; return res; } // Extract rows of W inline Matrix Wb(const IndexSet& b) const { const int nb = b.size(); const int* bptr = b.data(); Matrix res(nb, 2 * m_ncorr); for(int j = 0; j < m_ncorr; j++) { const Scalar* Yptr = &m_y(0, j); const Scalar* Sptr = &m_s(0, j); Scalar* resYptr = res.data() + j * nb; Scalar* resSptr = resYptr + m_ncorr * nb; for(int i = 0; i < nb; i++) { const int row = bptr[i]; resYptr[i] = Yptr[row]; resSptr[i] = Sptr[row]; } } return res; } // M is [(2*ncorr) x (2*ncorr)], v is [(2*ncorr) x 1] inline void apply_Mv(const Vector& v, Vector& res) const { res.resize(2 * m_ncorr); if(m_ncorr < 1) return; Vector vpadding = Vector::Zero(2 * m_m); vpadding.head(m_ncorr).noalias() = v.head(m_ncorr); vpadding.segment(m_m, m_ncorr).noalias() = v.tail(m_ncorr); // Solve linear equation m_permMsolver.solve_inplace(vpadding); res.head(m_ncorr).noalias() = vpadding.head(m_ncorr); res.tail(m_ncorr).noalias() = vpadding.segment(m_m, m_ncorr); } // Compute W'Pv // W [n x (2*ncorr)], v [nP x 1], res [(2*ncorr) x 1] // res preserves the ordering of Y and S columns // Returns false if the result is known to be zero inline bool apply_WtPv(const IndexSet& P_set, const Vector& v, Vector& res, bool test_zero = false) const { const int* Pptr = P_set.data(); const Scalar* vptr = v.data(); int nP = P_set.size(); // Remove zeros in v to save computation IndexSet P_reduced; std::vector v_reduced; if(test_zero) { P_reduced.reserve(nP); for(int i = 0; i < nP; i++) { if(vptr[i] != Scalar(0)) { P_reduced.push_back(Pptr[i]); v_reduced.push_back(vptr[i]); } } Pptr = P_reduced.data(); vptr = v_reduced.data(); nP = P_reduced.size(); } res.resize(2 * m_ncorr); if(m_ncorr < 1 || nP < 1) { res.setZero(); return false; } for(int j = 0; j < m_ncorr; j++) { Scalar resy = Scalar(0), ress = Scalar(0); const Scalar* yptr = &m_y(0, j); const Scalar* sptr = &m_s(0, j); for(int i = 0; i < nP; i++) { const int row = Pptr[i]; resy += yptr[row] * vptr[i]; ress += sptr[row] * vptr[i]; } res[j] = resy; res[m_ncorr + j] = ress; } res.tail(m_ncorr) *= m_theta; return true; } // Compute s * P'WMv // Assume that v[2*ncorr x 1] has the same ordering (permutation) as W and M // Returns false if the result is known to be zero inline bool apply_PtWMv(const IndexSet& P_set, const Vector& v, Vector& res, const Scalar& scale) const { const int nP = P_set.size(); res.resize(nP); res.setZero(); if(m_ncorr < 1 || nP < 1) return false; Vector Mv; apply_Mv(v, Mv); // WP * Mv Mv.tail(m_ncorr) *= m_theta; for(int j = 0; j < m_ncorr; j++) { const Scalar* yptr = &m_y(0, j); const Scalar* sptr = &m_s(0, j); const Scalar Mvy = Mv[j], Mvs = Mv[m_ncorr + j]; for(int i = 0; i < nP; i++) { const int row = P_set[i]; res[i] += Mvy * yptr[row] + Mvs * sptr[row]; } } res *= scale; return true; } // If the P'W matrix has been explicitly formed, do a direct matrix multiplication inline bool apply_PtWMv(const Matrix& WP, const Vector& v, Vector& res, const Scalar& scale) const { const int nP = WP.rows(); res.resize(nP); if(m_ncorr < 1 || nP < 1) { res.setZero(); return false; } Vector Mv; apply_Mv(v, Mv); // WP * Mv Mv.tail(m_ncorr) *= m_theta; res.noalias() = scale * (WP * Mv); return true; } // Compute F'BAb = -(F'W)M(W'AA'd) // W'd is known, and AA'+FF'=I, so W'AA'd = W'd - W'FF'd // Usually d contains many zeros, so we fist compute number of nonzero elements in A set and F set, // denoted as nnz_act and nnz_fv, respectively // If nnz_act is smaller, compute W'AA'd = WA' (A'd) directly // If nnz_fv is smaller, compute W'AA'd = W'd - WF' * (F'd) inline void compute_FtBAb( const Matrix& WF, const IndexSet& fv_set, const IndexSet& newact_set, const Vector& Wd, const Vector& drt, Vector& res ) const { const int nact = newact_set.size(); const int nfree = WF.rows(); res.resize(nfree); if(m_ncorr < 1 || nact < 1 || nfree < 1) { res.setZero(); return; } // W'AA'd Vector rhs(2 * m_ncorr); if(nact <= nfree) { // Construct A'd Vector Ad(nfree); for(int i = 0; i < nact; i++) Ad[i] = drt[newact_set[i]]; apply_WtPv(newact_set, Ad, rhs); } else { // Construct F'd Vector Fd(nfree); for(int i = 0; i < nfree; i++) Fd[i] = drt[fv_set[i]]; // Compute W'AA'd = W'd - WF' * (F'd) rhs.noalias() = WF.transpose() * Fd; rhs.tail(m_ncorr) *= m_theta; rhs.noalias() = Wd - rhs; } apply_PtWMv(WF, rhs, res, Scalar(-1)); } // Compute inv(P'BP) * v // P represents an index set // inv(P'BP) * v = v / theta + WP * inv(inv(M) - WP' * WP / theta) * WP' * v / theta^2 // // v is [nP x 1] inline void solve_PtBP(const Matrix& WP, const Vector& v, Vector& res) const { const int nP = WP.rows(); res.resize(nP); if(m_ncorr < 1 || nP < 1) { res.noalias() = v / m_theta; return; } // Compute the matrix in the middle (only the lower triangular part is needed) // Remember that W = [Y, theta * S], but we do not store theta in WP Matrix mid(2 * m_ncorr, 2 * m_ncorr); // [0:(ncorr - 1), 0:(ncorr - 1)] for(int j = 0; j < m_ncorr; j++) { mid.col(j).segment(j, m_ncorr - j).noalias() = m_permMinv.col(j).segment(j, m_ncorr - j) - WP.block(0, j, nP, m_ncorr - j).transpose() * WP.col(j) / m_theta; } // [ncorr:(2 * ncorr - 1), 0:(ncorr - 1)] mid.block(m_ncorr, 0, m_ncorr, m_ncorr).noalias() = m_permMinv.block(m_m, 0, m_ncorr, m_ncorr) - WP.rightCols(m_ncorr).transpose() * WP.leftCols(m_ncorr); // [ncorr:(2 * ncorr - 1), ncorr:(2 * ncorr - 1)] for(int j = 0; j < m_ncorr; j++) { mid.col(m_ncorr + j).segment(m_ncorr + j, m_ncorr - j).noalias() = m_theta * (m_permMinv.col(m_m + j).segment(m_m + j, m_ncorr - j) - WP.rightCols(m_ncorr - j).transpose() * WP.col(m_ncorr + j)); } // Factorization BKLDLT midsolver(mid); // Compute the final result Vector WPv = WP.transpose() * v; WPv.tail(m_ncorr) *= m_theta; midsolver.solve_inplace(WPv); WPv.tail(m_ncorr) *= m_theta; res.noalias() = v / m_theta + (WP * WPv) / (m_theta * m_theta); } // Compute P'BQv, where P and Q are two mutually exclusive index selection operators // P'BQv = -WP * M * WQ' * v // Returns false if the result is known to be zero inline bool apply_PtBQv(const Matrix& WP, const IndexSet& Q_set, const Vector& v, Vector& res, bool test_zero = false) const { const int nP = WP.rows(); const int nQ = Q_set.size(); res.resize(nP); if(m_ncorr < 1 || nP < 1 || nQ < 1) { res.setZero(); return false; } Vector WQtv; bool nonzero = apply_WtPv(Q_set, v, WQtv, test_zero); if(!nonzero) { res.setZero(); return false; } Vector MWQtv; apply_Mv(WQtv, MWQtv); MWQtv.tail(m_ncorr) *= m_theta; res.noalias() = -WP * MWQtv; return true; } // If the Q'W matrix has been explicitly formed, do a direct matrix multiplication inline bool apply_PtBQv(const Matrix& WP, const Matrix& WQ, const Vector& v, Vector& res) const { const int nP = WP.rows(); const int nQ = WQ.rows(); res.resize(nP); if(m_ncorr < 1 || nP < 1 || nQ < 1) { res.setZero(); return false; } // Remember that W = [Y, theta * S], so we need to multiply theta to the second half Vector WQtv = WQ.transpose() * v; WQtv.tail(m_ncorr) *= m_theta; Vector MWQtv; apply_Mv(WQtv, MWQtv); MWQtv.tail(m_ncorr) *= m_theta; res.noalias() = -WP * MWQtv; return true; } }; } // namespace LBFGSpp /// \endcond #endif // BFGS_MAT_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/BKLDLT.h ================================================ // Copyright (C) 2020 Yixuan Qiu // Under MIT license #ifndef BK_LDLT_H #define BK_LDLT_H #include #include #include /// \cond namespace LBFGSpp { enum COMPUTATION_INFO { SUCCESSFUL = 0, NOT_COMPUTED, NUMERICAL_ISSUE }; // Bunch-Kaufman LDLT decomposition // References: // 1. Bunch, J. R., & Kaufman, L. (1977). Some stable methods for calculating inertia and solving symmetric linear systems. // Mathematics of computation, 31(137), 163-179. // 2. Golub, G. H., & Van Loan, C. F. (2012). Matrix computations (Vol. 3). JHU press. Section 4.4. // 3. Bunch-Parlett diagonal pivoting // 4. Ashcraft, C., Grimes, R. G., & Lewis, J. G. (1998). Accurate symmetric indefinite linear equation solvers. // SIAM Journal on Matrix Analysis and Applications, 20(2), 513-561. template class BKLDLT { private: typedef Eigen::Index Index; typedef Eigen::Matrix Matrix; typedef Eigen::Matrix Vector; typedef Eigen::Map MapVec; typedef Eigen::Map MapConstVec; typedef Eigen::Matrix IntVector; typedef Eigen::Ref GenericVector; typedef Eigen::Ref GenericMatrix; typedef const Eigen::Ref ConstGenericMatrix; typedef const Eigen::Ref ConstGenericVector; Index m_n; Vector m_data; // storage for a lower-triangular matrix std::vector m_colptr; // pointers to columns IntVector m_perm; // [-2, -1, 3, 1, 4, 5]: 0 <-> 2, 1 <-> 1, 2 <-> 3, 3 <-> 1, 4 <-> 4, 5 <-> 5 std::vector< std::pair > m_permc; // compressed version of m_perm: [(0, 2), (2, 3), (3, 1)] bool m_computed; int m_info; // Access to elements // Pointer to the k-th column Scalar* col_pointer(Index k) { return m_colptr[k]; } // A[i, j] -> m_colptr[j][i - j], i >= j Scalar& coeff(Index i, Index j) { return m_colptr[j][i - j]; } const Scalar& coeff(Index i, Index j) const { return m_colptr[j][i - j]; } // A[i, i] -> m_colptr[i][0] Scalar& diag_coeff(Index i) { return m_colptr[i][0]; } const Scalar& diag_coeff(Index i) const { return m_colptr[i][0]; } // Compute column pointers void compute_pointer() { m_colptr.clear(); m_colptr.reserve(m_n); Scalar* head = m_data.data(); for(Index i = 0; i < m_n; i++) { m_colptr.push_back(head); head += (m_n - i); } } // Copy mat - shift * I to m_data void copy_data(ConstGenericMatrix& mat, int uplo, const Scalar& shift) { if(uplo == Eigen::Lower) { for(Index j = 0; j < m_n; j++) { const Scalar* begin = &mat.coeffRef(j, j); const Index len = m_n - j; std::copy(begin, begin + len, col_pointer(j)); diag_coeff(j) -= shift; } } else { Scalar* dest = m_data.data(); for(Index i = 0; i < m_n; i++) { for(Index j = i; j < m_n; j++, dest++) { *dest = mat.coeff(i, j); } diag_coeff(i) -= shift; } } } // Compute compressed permutations void compress_permutation() { for(Index i = 0; i < m_n; i++) { // Recover the permutation action const Index perm = (m_perm[i] >= 0) ? (m_perm[i]) : (-m_perm[i] - 1); if(perm != i) m_permc.push_back(std::make_pair(i, perm)); } } // Working on the A[k:end, k:end] submatrix // Exchange k <-> r // Assume r >= k void pivoting_1x1(Index k, Index r) { // No permutation if(k == r) { m_perm[k] = r; return; } // A[k, k] <-> A[r, r] std::swap(diag_coeff(k), diag_coeff(r)); // A[(r+1):end, k] <-> A[(r+1):end, r] std::swap_ranges(&coeff(r + 1, k), col_pointer(k + 1), &coeff(r + 1, r)); // A[(k+1):(r-1), k] <-> A[r, (k+1):(r-1)] Scalar* src = &coeff(k + 1, k); for(Index j = k + 1; j < r; j++, src++) { std::swap(*src, coeff(r, j)); } m_perm[k] = r; } // Working on the A[k:end, k:end] submatrix // Exchange [k+1, k] <-> [r, p] // Assume p >= k, r >= k+1 void pivoting_2x2(Index k, Index r, Index p) { pivoting_1x1(k, p); pivoting_1x1(k + 1, r); // A[k+1, k] <-> A[r, k] std::swap(coeff(k + 1, k), coeff(r, k)); // Use negative signs to indicate a 2x2 block // Also minus one to distinguish a negative zero from a positive zero m_perm[k] = -m_perm[k] - 1; m_perm[k + 1] = -m_perm[k + 1] - 1; } // A[r1, c1:c2] <-> A[r2, c1:c2] // Assume r2 >= r1 > c2 >= c1 void interchange_rows(Index r1, Index r2, Index c1, Index c2) { if(r1 == r2) return; for(Index j = c1; j <= c2; j++) { std::swap(coeff(r1, j), coeff(r2, j)); } } // lambda = |A[r, k]| = max{|A[k+1, k]|, ..., |A[end, k]|} // Largest (in magnitude) off-diagonal element in the first column of the current reduced matrix // r is the row index // Assume k < end Scalar find_lambda(Index k, Index& r) { using std::abs; const Scalar* head = col_pointer(k); // => A[k, k] const Scalar* end = col_pointer(k + 1); // Start with r=k+1, lambda=A[k+1, k] r = k + 1; Scalar lambda = abs(head[1]); // Scan remaining elements for(const Scalar* ptr = head + 2; ptr < end; ptr++) { const Scalar abs_elem = abs(*ptr); if(lambda < abs_elem) { lambda = abs_elem; r = k + (ptr - head); } } return lambda; } // sigma = |A[p, r]| = max {|A[k, r]|, ..., |A[end, r]|} \ {A[r, r]} // Largest (in magnitude) off-diagonal element in the r-th column of the current reduced matrix // p is the row index // Assume k < r < end Scalar find_sigma(Index k, Index r, Index& p) { using std::abs; // First search A[r+1, r], ..., A[end, r], which has the same task as find_lambda() // If r == end, we skip this search Scalar sigma = Scalar(-1); if(r < m_n - 1) sigma = find_lambda(r, p); // Then search A[k, r], ..., A[r-1, r], which maps to A[r, k], ..., A[r, r-1] for(Index j = k; j < r; j++) { const Scalar abs_elem = abs(coeff(r, j)); if(sigma < abs_elem) { sigma = abs_elem; p = j; } } return sigma; } // Generate permutations and apply to A // Return true if the resulting pivoting is 1x1, and false if 2x2 bool permutate_mat(Index k, const Scalar& alpha) { using std::abs; Index r = k, p = k; const Scalar lambda = find_lambda(k, r); // If lambda=0, no need to interchange if(lambda > Scalar(0)) { const Scalar abs_akk = abs(diag_coeff(k)); // If |A[k, k]| >= alpha * lambda, no need to interchange if(abs_akk < alpha * lambda) { const Scalar sigma = find_sigma(k, r, p); // If sigma * |A[k, k]| >= alpha * lambda^2, no need to interchange if(sigma * abs_akk < alpha * lambda * lambda) { if(abs_akk >= alpha * sigma) { // Permutation on A pivoting_1x1(k, r); // Permutation on L interchange_rows(k, r, 0, k - 1); return true; } else { // There are two versions of permutation here // 1. A[k+1, k] <-> A[r, k] // 2. A[k+1, k] <-> A[r, p], where p >= k and r >= k+1 // // Version 1 and 2 are used by Ref[1] and Ref[2], respectively // Version 1 implementation p = k; // Version 2 implementation // [r, p] and [p, r] are symmetric, but we need to make sure // p >= k and r >= k+1, so it is safe to always make r > p // One exception is when min{r,p} == k+1, in which case we make // r = k+1, so that only one permutation needs to be performed /* const Index rp_min = std::min(r, p); const Index rp_max = std::max(r, p); if(rp_min == k + 1) { r = rp_min; p = rp_max; } else { r = rp_max; p = rp_min; } */ // Right now we use Version 1 since it reduces the overhead of interchange // Permutation on A pivoting_2x2(k, r, p); // Permutation on L interchange_rows(k, p, 0, k - 1); interchange_rows(k + 1, r, 0, k - 1); return false; } } } } return true; } // E = [e11, e12] // [e21, e22] // Overwrite E with inv(E) void inverse_inplace_2x2(Scalar& e11, Scalar& e21, Scalar& e22) const { // inv(E) = [d11, d12], d11 = e22/delta, d21 = -e21/delta, d22 = e11/delta // [d21, d22] const Scalar delta = e11 * e22 - e21 * e21; std::swap(e11, e22); e11 /= delta; e22 /= delta; e21 = -e21 / delta; } // Return value is the status, SUCCESSFUL/NUMERICAL_ISSUE int gaussian_elimination_1x1(Index k) { // D = 1 / A[k, k] const Scalar akk = diag_coeff(k); // Return NUMERICAL_ISSUE if not invertible if(akk == Scalar(0)) return NUMERICAL_ISSUE; diag_coeff(k) = Scalar(1) / akk; // B -= l * l' / A[k, k], B := A[(k+1):end, (k+1):end], l := L[(k+1):end, k] Scalar* lptr = col_pointer(k) + 1; const Index ldim = m_n - k - 1; MapVec l(lptr, ldim); for(Index j = 0; j < ldim; j++) { MapVec(col_pointer(j + k + 1), ldim - j).noalias() -= (lptr[j] / akk) * l.tail(ldim - j); } // l /= A[k, k] l /= akk; return SUCCESSFUL; } // Return value is the status, SUCCESSFUL/NUMERICAL_ISSUE int gaussian_elimination_2x2(Index k) { // D = inv(E) Scalar& e11 = diag_coeff(k); Scalar& e21 = coeff(k + 1, k); Scalar& e22 = diag_coeff(k + 1); // Return NUMERICAL_ISSUE if not invertible if(e11 * e22 - e21 * e21 == Scalar(0)) return NUMERICAL_ISSUE; inverse_inplace_2x2(e11, e21, e22); // X = l * inv(E), l := L[(k+2):end, k:(k+1)] Scalar* l1ptr = &coeff(k + 2, k); Scalar* l2ptr = &coeff(k + 2, k + 1); const Index ldim = m_n - k - 2; MapVec l1(l1ptr, ldim), l2(l2ptr, ldim); Eigen::Matrix X(ldim, 2); X.col(0).noalias() = l1 * e11 + l2 * e21; X.col(1).noalias() = l1 * e21 + l2 * e22; // B -= l * inv(E) * l' = X * l', B = A[(k+2):end, (k+2):end] for(Index j = 0; j < ldim; j++) { MapVec(col_pointer(j + k + 2), ldim - j).noalias() -= (X.col(0).tail(ldim - j) * l1ptr[j] + X.col(1).tail(ldim - j) * l2ptr[j]); } // l = X l1.noalias() = X.col(0); l2.noalias() = X.col(1); return SUCCESSFUL; } public: BKLDLT() : m_n(0), m_computed(false), m_info(NOT_COMPUTED) {} // Factorize mat - shift * I BKLDLT(ConstGenericMatrix& mat, int uplo = Eigen::Lower, const Scalar& shift = Scalar(0)) : m_n(mat.rows()), m_computed(false), m_info(NOT_COMPUTED) { compute(mat, uplo, shift); } void compute(ConstGenericMatrix& mat, int uplo = Eigen::Lower, const Scalar& shift = Scalar(0)) { using std::abs; m_n = mat.rows(); if(m_n != mat.cols()) throw std::invalid_argument("BKLDLT: matrix must be square"); m_perm.setLinSpaced(m_n, 0, m_n - 1); m_permc.clear(); // Copy data m_data.resize((m_n * (m_n + 1)) / 2); compute_pointer(); copy_data(mat, uplo, shift); const Scalar alpha = (1.0 + std::sqrt(17.0)) / 8.0; Index k = 0; for(k = 0; k < m_n - 1; k++) { // 1. Interchange rows and columns of A, and save the result to m_perm bool is_1x1 = permutate_mat(k, alpha); // 2. Gaussian elimination if(is_1x1) { m_info = gaussian_elimination_1x1(k); } else { m_info = gaussian_elimination_2x2(k); k++; } // 3. Check status if(m_info != SUCCESSFUL) break; } // Invert the last 1x1 block if it exists if(k == m_n - 1) { const Scalar akk = diag_coeff(k); if(akk == Scalar(0)) m_info = NUMERICAL_ISSUE; diag_coeff(k) = Scalar(1) / diag_coeff(k); } compress_permutation(); m_computed = true; } // Solve Ax=b void solve_inplace(GenericVector b) const { if(!m_computed) throw std::logic_error("BKLDLT: need to call compute() first"); // PAP' = LDL' // 1. b -> Pb Scalar* x = b.data(); MapVec res(x, m_n); Index npermc = m_permc.size(); for(Index i = 0; i < npermc; i++) { std::swap(x[m_permc[i].first], x[m_permc[i].second]); } // 2. Lz = Pb // If m_perm[end] < 0, then end with m_n - 3, otherwise end with m_n - 2 const Index end = (m_perm[m_n - 1] < 0) ? (m_n - 3) : (m_n - 2); for(Index i = 0; i <= end; i++) { const Index b1size = m_n - i - 1; const Index b2size = b1size - 1; if(m_perm[i] >= 0) { MapConstVec l(&coeff(i + 1, i), b1size); res.segment(i + 1, b1size).noalias() -= l * x[i]; } else { MapConstVec l1(&coeff(i + 2, i), b2size); MapConstVec l2(&coeff(i + 2, i + 1), b2size); res.segment(i + 2, b2size).noalias() -= (l1 * x[i] + l2 * x[i + 1]); i++; } } // 3. Dw = z for(Index i = 0; i < m_n; i++) { const Scalar e11 = diag_coeff(i); if(m_perm[i] >= 0) { x[i] *= e11; } else { const Scalar e21 = coeff(i + 1, i), e22 = diag_coeff(i + 1); const Scalar wi = x[i] * e11 + x[i + 1] * e21; x[i + 1] = x[i] * e21 + x[i + 1] * e22; x[i] = wi; i++; } } // 4. L'y = w // If m_perm[end] < 0, then start with m_n - 3, otherwise start with m_n - 2 Index i = (m_perm[m_n - 1] < 0) ? (m_n - 3) : (m_n - 2); for(; i >= 0; i--) { const Index ldim = m_n - i - 1; MapConstVec l(&coeff(i + 1, i), ldim); x[i] -= res.segment(i + 1, ldim).dot(l); if(m_perm[i] < 0) { MapConstVec l2(&coeff(i + 1, i - 1), ldim); x[i - 1] -= res.segment(i + 1, ldim).dot(l2); i--; } } // 5. x = P'y for(Index i = npermc - 1; i >= 0; i--) { std::swap(x[m_permc[i].first], x[m_permc[i].second]); } } Vector solve(ConstGenericVector& b) const { Vector res = b; solve_inplace(res); return res; } int info() const { return m_info; } }; } // namespace LBFGSpp /// \endcond #endif // BK_LDLT_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/Cauchy.h ================================================ // Copyright (C) 2020 Yixuan Qiu // Under MIT license #ifndef CAUCHY_H #define CAUCHY_H #include #include #include "BFGSMat.h" /// \cond namespace LBFGSpp { // // Class to compute the generalized Cauchy point (GCP) for the L-BFGS-B algorithm, // mainly for internal use. // // The target of the GCP procedure is to find a step size t such that // x(t) = x0 - t * g is a local minimum of the quadratic function m(x), // where m(x) is a local approximation to the objective function. // // First determine a sequence of break points t0=0, t1, t2, ..., tn. // On each interval [t[i-1], t[i]], x is changing linearly. // After passing a break point, one or more coordinates of x will be fixed at the bounds. // We search the first local minimum of m(x) by examining the intervals [t[i-1], t[i]] sequentially. // // Reference: // [1] R. H. Byrd, P. Lu, and J. Nocedal (1995). A limited memory algorithm for bound constrained optimization. // template class ArgSort { private: typedef Eigen::Matrix Vector; typedef std::vector IndexSet; const Scalar* values; public: ArgSort(const Vector& value_vec) : values(value_vec.data()) {} inline bool operator()(int key1, int key2) { return values[key1] < values[key2]; } inline void sort_key(IndexSet& key_vec) const { std::sort(key_vec.begin(), key_vec.end(), *this); } }; template class Cauchy { private: typedef Eigen::Matrix Vector; typedef Eigen::Matrix IntVector; typedef Eigen::Matrix Matrix; typedef std::vector IndexSet; // Find the smallest index i such that brk[ord[i]] > t, assuming brk[ord] is already sorted. // If the return value equals n, then all values are <= t. static int search_greater(const Vector& brk, const IndexSet& ord, const Scalar& t, int start = 0) { const int nord = ord.size(); int i; for(i = start; i < nord; i++) { if(brk[ord[i]] > t) break; } return i; } public: // bfgs: An object that represents the BFGS approximation matrix. // x0: Current parameter vector. // g: Gradient at x0. // lb: Lower bounds for x. // ub: Upper bounds for x. // xcp: The output generalized Cauchy point. // vecc: c = W'(xcp - x0), used in the subspace minimization routine. // newact_set: Coordinates that newly become active during the GCP procedure. // fv_set: Free variable set. static void get_cauchy_point( const BFGSMat& bfgs, const Vector& x0, const Vector& g, const Vector& lb, const Vector& ub, Vector& xcp, Vector& vecc, IndexSet& newact_set, IndexSet& fv_set ) { // std::cout << "========================= Entering GCP search =========================\n\n"; // Initialization const int n = x0.size(); xcp.resize(n); xcp.noalias() = x0; vecc.resize(2 * bfgs.num_corrections()); vecc.setZero(); newact_set.clear(); newact_set.reserve(n); fv_set.clear(); fv_set.reserve(n); // Construct break points Vector brk(n), vecd(n); // If brk[i] == 0, i belongs to active set // If brk[i] == Inf, i belongs to free variable set // Others are currently undecided IndexSet ord; ord.reserve(n); const Scalar inf = std::numeric_limits::infinity(); for(int i = 0; i < n; i++) { if(lb[i] == ub[i]) brk[i] = Scalar(0); else if(g[i] < Scalar(0)) brk[i] = (x0[i] - ub[i]) / g[i]; else if(g[i] > Scalar(0)) brk[i] = (x0[i] - lb[i]) / g[i]; else brk[i] = inf; const bool iszero = (brk[i] == Scalar(0)); vecd[i] = iszero ? Scalar(0) : -g[i]; if(brk[i] == inf) fv_set.push_back(i); else if(!iszero) ord.push_back(i); } // Sort indices of break points ArgSort sorting(brk); sorting.sort_key(ord); // Break points `brko := brk[ord]` are in increasing order // `ord` contains the coordinates that define the corresponding break points // brk[i] == 0 <=> The i-th coordinate is on the boundary const int nord = ord.size(); const int nfree = fv_set.size(); if( (nfree < 1) && (nord < 1) ) { /* std::cout << "** All coordinates at boundary **\n"; std::cout << "\n========================= Leaving GCP search =========================\n\n"; */ return; } // First interval: [il=0, iu=brk[ord[0]]] // In case ord is empty, we take iu=Inf // p = W'd, c = 0 Vector vecp; bfgs.apply_Wtv(vecd, vecp); // f' = -d'd Scalar fp = -vecd.squaredNorm(); // f'' = -theta * f' - p'Mp Vector cache; bfgs.apply_Mv(vecp, cache); // cache = Mp Scalar fpp = -bfgs.theta() * fp - vecp.dot(cache); // Theoretical step size to move Scalar deltatmin = -fp / fpp; // Limit on the current interval Scalar il = Scalar(0); // We have excluded the case that max(brk) <= 0 int b = 0; Scalar iu = (nord < 1) ? inf : brk[ord[b]]; Scalar deltat = iu - il; /* int iter = 0; std::cout << "** Iter " << iter << " **\n"; std::cout << " fp = " << fp << ", fpp = " << fpp << ", deltatmin = " << deltatmin << std::endl; std::cout << " il = " << il << ", iu = " << iu << ", deltat = " << deltat << std::endl; */ // If deltatmin >= deltat, we need to do the following things: // 1. Update vecc // 2. Since we are going to cross iu, the coordinates that define iu become active // 3. Update some quantities on these new active coordinates (xcp, vecd, vecp) // 4. Move to the next interval and compute the new deltatmin bool crossed_all = false; const int ncorr = bfgs.num_corrections(); Vector wact(2 * ncorr); while(deltatmin >= deltat) { // Step 1 vecc.noalias() += deltat * vecp; // Step 2 // First check how many coordinates will be active when we cross the previous iu // b is the smallest number such that brko[b] == iu // Let bp be the largest number such that brko[bp] == iu // Then coordinates ord[b] to ord[bp] will be active const int act_begin = b; const int act_end = search_greater(brk, ord, iu, b) - 1; // If nfree == 0 and act_end == nord-1, then we have crossed all coordinates // We only need to update xcp from ord[b] to ord[bp], and then exit if( (nfree == 0) && (act_end == nord - 1) ) { // std::cout << "** [ "; for(int i = act_begin; i <= act_end; i++) { const int act = ord[i]; xcp[act] = (vecd[act] > Scalar(0)) ? ub[act] : lb[act]; newact_set.push_back(act); // std::cout << act + 1 << " "; } // std::cout << "] become active **\n\n"; // std::cout << "** All break points visited **\n\n"; crossed_all = true; break; } // Step 3 // Update xcp and d on active coordinates // std::cout << "** [ "; fp += deltat * fpp; for(int i = act_begin; i <= act_end; i++) { const int act = ord[i]; xcp[act] = (vecd[act] > Scalar(0)) ? ub[act] : lb[act]; // z = xcp - x0 const Scalar zact = xcp[act] - x0[act]; const Scalar gact = g[act]; const Scalar ggact = gact * gact; wact.noalias() = bfgs.Wb(act); bfgs.apply_Mv(wact, cache); // cache = Mw fp += ggact + bfgs.theta() * gact * zact - gact * cache.dot(vecc); fpp -= (bfgs.theta() * ggact + 2 * gact * cache.dot(vecp) + ggact * cache.dot(wact)); vecp.noalias() += gact * wact; vecd[act] = Scalar(0); newact_set.push_back(act); // std::cout << act + 1 << " "; } // std::cout << "] become active **\n\n"; // Step 4 // Theoretical step size to move deltatmin = -fp / fpp; // Update interval bound il = iu; b = act_end + 1; // If we have visited all finite-valued break points, and have not exited earlier, // then the next iu will be infinity. Simply exit the loop now if(b >= nord) break; iu = brk[ord[b]]; // Width of the current interval deltat = iu - il; /* iter++; std::cout << "** Iter " << iter << " **\n"; std::cout << " fp = " << fp << ", fpp = " << fpp << ", deltatmin = " << deltatmin << std::endl; std::cout << " il = " << il << ", iu = " << iu << ", deltat = " << deltat << std::endl; */ } // Last step if(!crossed_all) { deltatmin = std::max(deltatmin, Scalar(0)); vecc.noalias() += deltatmin * vecp; const Scalar tfinal = il + deltatmin; // Update xcp on free variable coordinates for(int i = 0; i < nfree; i++) { const int coord = fv_set[i]; xcp[coord] = x0[coord] + tfinal * vecd[coord]; } for(int i = b; i < nord; i++) { const int coord = ord[i]; xcp[coord] = x0[coord] + tfinal * vecd[coord]; fv_set.push_back(coord); } } // std::cout << "\n========================= Leaving GCP search =========================\n\n"; } }; } // namespace LBFGSpp /// \endcond #endif // CAUCHY_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/LineSearchBacktracking.h ================================================ // Copyright (C) 2016-2020 Yixuan Qiu // Under MIT license #ifndef LINE_SEARCH_BACKTRACKING_H #define LINE_SEARCH_BACKTRACKING_H #include #include // std::runtime_error namespace LBFGSpp { /// /// The backtracking line search algorithm for L-BFGS. Mainly for internal use. /// template class LineSearchBacktracking { private: typedef Eigen::Matrix Vector; public: /// /// Line search by backtracking. /// /// \param f A function object such that `f(x, grad)` returns the /// objective function value at `x`, and overwrites `grad` with /// the gradient. /// \param fx In: The objective function value at the current point. /// Out: The function value at the new point. /// \param x Out: The new point moved to. /// \param grad In: The current gradient vector. Out: The gradient at the /// new point. /// \param step In: The initial step length. Out: The calculated step length. /// \param drt The current moving direction. /// \param xp The current point. /// \param param Parameters for the LBFGS algorithm /// template static void LineSearch(Foo& f, Scalar& fx, Vector& x, Vector& grad, Scalar& step, const Vector& drt, const Vector& xp, const LBFGSParam& param) { // Decreasing and increasing factors const Scalar dec = 0.5; const Scalar inc = 2.1; // Check the value of step if(step <= Scalar(0)) throw std::invalid_argument("'step' must be positive"); // Save the function value at the current x const Scalar fx_init = fx; // Projection of gradient on the search direction const Scalar dg_init = grad.dot(drt); // Make sure d points to a descent direction if(dg_init > 0) throw std::logic_error("the moving direction increases the objective function value"); const Scalar test_decr = param.ftol * dg_init; Scalar width; int iter; for(iter = 0; iter < param.max_linesearch; iter++) { // x_{k+1} = x_k + step * d_k x.noalias() = xp + step * drt; // Evaluate this candidate fx = f(x, grad); if(fx > fx_init + step * test_decr || (fx != fx)) { width = dec; } else { // Armijo condition is met if(param.linesearch == LBFGS_LINESEARCH_BACKTRACKING_ARMIJO) break; const Scalar dg = grad.dot(drt); if(dg < param.wolfe * dg_init) { width = inc; } else { // Regular Wolfe condition is met if(param.linesearch == LBFGS_LINESEARCH_BACKTRACKING_WOLFE) break; if(dg > -param.wolfe * dg_init) { width = dec; } else { // Strong Wolfe condition is met break; } } } if(step < param.min_step) throw std::runtime_error("the line search step became smaller than the minimum value allowed"); if(step > param.max_step) throw std::runtime_error("the line search step became larger than the maximum value allowed"); step *= width; } if(iter >= param.max_linesearch) throw std::runtime_error("the line search routine reached the maximum number of iterations"); } }; } // namespace LBFGSpp #endif // LINE_SEARCH_BACKTRACKING_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/LineSearchBracketing.h ================================================ // Copyright (C) 2016-2020 Yixuan Qiu // Copyright (C) 2016-2020 Dirk Toewe // Under MIT license #ifndef LINE_SEARCH_BRACKETING_H #define LINE_SEARCH_BRACKETING_H #include #include // std::runtime_error namespace LBFGSpp { /// /// The bracketing line search algorithm for L-BFGS. Mainly for internal use. /// template class LineSearchBracketing { private: typedef Eigen::Matrix Vector; public: /// /// Line search by bracketing. Similar to the backtracking line search /// except that it actively maintains an upper and lower bound of the /// current search range. /// /// \param f A function object such that `f(x, grad)` returns the /// objective function value at `x`, and overwrites `grad` with /// the gradient. /// \param fx In: The objective function value at the current point. /// Out: The function value at the new point. /// \param x Out: The new point moved to. /// \param grad In: The current gradient vector. Out: The gradient at the /// new point. /// \param step In: The initial step length. Out: The calculated step length. /// \param drt The current moving direction. /// \param xp The current point. /// \param param Parameters for the LBFGS algorithm /// template static void LineSearch(Foo& f, Scalar& fx, Vector& x, Vector& grad, Scalar& step, const Vector& drt, const Vector& xp, const LBFGSParam& param) { // Check the value of step if(step <= Scalar(0)) throw std::invalid_argument("'step' must be positive"); // Save the function value at the current x const Scalar fx_init = fx; // Projection of gradient on the search direction const Scalar dg_init = grad.dot(drt); // Make sure d points to a descent direction if(dg_init > 0) throw std::logic_error("the moving direction increases the objective function value"); const Scalar test_decr = param.ftol * dg_init; // Upper and lower end of the current line search range Scalar step_lo = 0, step_hi = std::numeric_limits::infinity(); int iter; for(iter = 0; iter < param.max_linesearch; iter++) { // x_{k+1} = x_k + step * d_k x.noalias() = xp + step * drt; // Evaluate this candidate fx = f(x, grad); if(fx > fx_init + step * test_decr || (fx != fx)) { step_hi = step; } else { // Armijo condition is met if(param.linesearch == LBFGS_LINESEARCH_BACKTRACKING_ARMIJO) break; const Scalar dg = grad.dot(drt); if(dg < param.wolfe * dg_init) { step_lo = step; } else { // Regular Wolfe condition is met if(param.linesearch == LBFGS_LINESEARCH_BACKTRACKING_WOLFE) break; if(dg > -param.wolfe * dg_init) { step_hi = step; } else { // Strong Wolfe condition is met break; } } } assert( step_lo < step_hi ); if(step < param.min_step) throw std::runtime_error("the line search step became smaller than the minimum value allowed"); if(step > param.max_step) throw std::runtime_error("the line search step became larger than the maximum value allowed"); // continue search in mid of current search range step = std::isinf(step_hi) ? 2*step : step_lo/2 + step_hi/2; } if(iter >= param.max_linesearch) throw std::runtime_error("the line search routine reached the maximum number of iterations"); } }; } // namespace LBFGSpp #endif // LINE_SEARCH_BRACKETING_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/LineSearchMoreThuente.h ================================================ // Copyright (C) 2020 Yixuan Qiu // Under MIT license #ifndef LINE_SEARCH_MORE_THUENTE_H #define LINE_SEARCH_MORE_THUENTE_H #include // std::invalid_argument, std::runtime_error #include #include "LBFGSpp/Param.h" namespace LBFGSpp { /// /// The line search algorithm by Moré and Thuente (1994), currently used for the L-BFGS-B algorithm. /// /// The target of this line search algorithm is to find a step size \f$\alpha\f$ that satisfies the strong Wolfe condition /// \f$f(x+\alpha d) \le f(x) + \alpha\mu g(x)^T d\f$ and \f$|g(x+\alpha d)^T d| \le \eta|g(x)^T d|\f$. /// Our implementation is a simplified version of the algorithm in [1]. We assume that \f$0<\mu<\eta<1\f$, while in [1] /// they do not assume \f$\eta>\mu\f$. As a result, the algorithm in [1] has two stages, but in our implementation we /// only need the first stage to guarantee the convergence. /// /// Reference: /// [1] Moré, J. J., & Thuente, D. J. (1994). Line search algorithms with guaranteed sufficient decrease. /// template class LineSearchMoreThuente { private: typedef Eigen::Matrix Vector; // Mininum of a quadratic function that interpolates fa, ga, and fb static Scalar quadratic_interp(const Scalar& a, const Scalar& b, const Scalar& fa, const Scalar& ga, const Scalar& fb) { const Scalar ba = b - a; return a + Scalar(0.5) * ba * ba * ga / (fa - fb + ba * ga); } // Mininum of a quadratic function that interpolates ga and gb // Assume that ga != gb static Scalar quadratic_interp(const Scalar& a, const Scalar& b, const Scalar& ga, const Scalar& gb) { return b + (b - a) * gb / (ga - gb); } // Mininum of a cubic function that interpolates fa, ga, fb and gb // Assume that a != b static Scalar cubic_interp(const Scalar& a, const Scalar& b, const Scalar& fa, const Scalar& fb, const Scalar& ga, const Scalar& gb) { using std::abs; using std::sqrt; if(a == b) return a; const Scalar ba = b - a; const Scalar ba2 = ba * ba; const Scalar ba3 = ba2 * ba; const Scalar fba = fb - fa; const Scalar z = (ga + gb) * ba - Scalar(2) * fba; const Scalar w = fba * ba - ga * ba2; // If c3 = z/(b-a)^3 == 0, reduce to quadratic problem const Scalar endmin = (fa < fb) ? a : b; if(abs(z) < std::numeric_limits::epsilon()) { const Scalar c2 = fba / ba2 - ga / ba; const Scalar c1 = fba / ba - (a + b) * c2; // Global minimum, can be infinity const Scalar globmin = -c1 / (Scalar(2) * c2); // If c2 <= 0, or globmin is outside [a, b], then the minimum is achieved at one end point return (c2 > Scalar(0) && globmin >= a && globmin <= b) ? globmin : endmin; } // v = c1 / c2 const Scalar v = (-Scalar(2) * a * w + ga * ba3 + a * (a + Scalar(2) * b) * z) / (w - (Scalar(2) * a + b) * z); // u = c2 / (3 * c3), may be very large if c3 ~= 0 const Scalar u = (w / z - (Scalar(2) * a + b)) / Scalar(3); // q'(x) = c1 + 2 * c2 * x + 3 * c3 * x^2 = 0 // x1 = -u * (1 + sqrt(1 - v/u)) // x2 = -u * (1 - sqrt(1 - v/u)) = -v / (1 + sqrt(1 - v/u)) // If q'(x) = 0 has no solution in [a, b], q(x) is monotone in [a, b] // Case I: no solution globally, 1 - v/u <= 0 if(v / u >= Scalar(1)) return endmin; // Case II: no solution in [a, b] const Scalar vu = Scalar(1) + sqrt(Scalar(1) - v / u); const Scalar sol1 = -u * vu; const Scalar sol2 = -v / vu; if( (sol1 - a) * (sol1 - b) >= Scalar(0) && (sol2 - a) * (sol2 - b) >= Scalar(0) ) return endmin; // Now at least one solution is in (a, b) // Check the second derivative // q''(x) = 2 * c2 + 6 * c3 * x; const Scalar c3 = z / ba3; const Scalar c2 = Scalar(3) * c3 * u; const Scalar qpp1 = Scalar(2) * c2 + Scalar(6) * c3 * sol1; const Scalar sol = (qpp1 > Scalar(0)) ? sol1 : sol2; // If the local minimum is not in [a, b], return one of the end points if((sol - a) * (sol - b) >= Scalar(0)) return endmin; // Compare the local minimum with the end points const Scalar c1 = v * c2; const Scalar fsol = fa + c1 * (sol- a) + c2 * (sol * sol - a * a) + c3 * (sol * sol * sol - a * a * a); return (fsol < std::min(fa, fb)) ? sol : endmin; } static Scalar step_selection( const Scalar& al, const Scalar& au, const Scalar& at, const Scalar& fl, const Scalar& fu, const Scalar& ft, const Scalar& gl, const Scalar& gu, const Scalar& gt ) { if(al == au) return al; // ac: cubic interpolation of fl, ft, gl, gt // aq: quadratic interpolation of fl, gl, ft const Scalar ac = cubic_interp(al, at, fl, ft, gl, gt); const Scalar aq = quadratic_interp(al, at, fl, gl, ft); // Case 1: ft > fl if(ft > fl) return (std::abs(ac - al) < std::abs(aq - al)) ? ac : ((aq + ac) / Scalar(2)); // as: quadratic interpolation of gl and gt const Scalar as = quadratic_interp(al, at, gl, gt); // Case 2: ft <= fl, gt * gl < 0 if(gt * gl < Scalar(0)) return (std::abs(ac - at) >= std::abs(as - at)) ? ac : as; // Case 3: ft <= fl, gt * gl >= 0, |gt| < |gl| const Scalar delta = Scalar(0.66); if(std::abs(gt) < std::abs(gl)) { const Scalar res = (std::abs(ac - at) < std::abs(as - at)) ? ac : as; return (at > al) ? std::min(at + delta * (au - at), res) : std::max(at + delta * (au - at), res); } // ae: cubic interpolation of ft, fu, gt, gu const Scalar ae = cubic_interp(at, au, ft, fu, gt, gu); // Case 4: ft <= fl, gt * gl >= 0, |gt| >= |gl| return (at > al) ? std::min(at + delta * (au - at), ae) : std::max(at + delta * (au - at), ae); } public: /// /// Line search by Moré and Thuente (1994). /// /// \param f A function object such that `f(x, grad)` returns the /// objective function value at `x`, and overwrites `grad` with /// the gradient. /// \param fx In: The objective function value at the current point. /// Out: The function value at the new point. /// \param x Out: The new point moved to. /// \param grad In: The current gradient vector. Out: The gradient at the /// new point. /// \param step In: The initial step length. Out: The calculated step length. /// \param step_max The upper bound for the step size. /// \param drt The current moving direction. /// \param xp The current point. /// \param param Parameters for the LBFGS algorithm /// template static void LineSearch(Foo& f, Scalar& fx, Vector& x, Vector& grad, Scalar& step, const Scalar& step_max, const Vector& drt, const Vector& xp, const LBFGSBParam& param) { // std::cout << "========================= Entering line search =========================\n\n"; // Check the value of step if(step <= Scalar(0)) throw std::invalid_argument("'step' must be positive"); if(step > step_max) throw std::invalid_argument("'step' exceeds 'step_max'"); // Save the function value at the current x const Scalar fx_init = fx; // Projection of gradient on the search direction const Scalar dg_init = grad.dot(drt); // std::cout << "fx_init = " << fx_init << ", dg_init = " << dg_init << std::endl << std::endl; // Make sure d points to a descent direction if(dg_init >= 0) throw std::logic_error("the moving direction does not decrease the objective function value"); // Tolerance for convergence test // Sufficient decrease const Scalar test_decr = param.ftol * dg_init; // Curvature const Scalar test_curv = -param.wolfe * dg_init; // The bracketing interval Scalar I_lo = Scalar(0), I_hi = std::numeric_limits::infinity(); Scalar fI_lo = Scalar(0), fI_hi = std::numeric_limits::infinity(); Scalar gI_lo = (Scalar(1) - param.ftol) * dg_init, gI_hi = std::numeric_limits::infinity(); // Function value and gradient at the current step size x.noalias() = xp + step * drt; fx = f(x, grad); Scalar dg = grad.dot(drt); // std::cout << "max_step = " << step_max << ", step = " << step << ", fx = " << fx << ", dg = " << dg << std::endl; // Convergence test if(fx <= fx_init + step * test_decr && std::abs(dg) <= test_curv) { // std::cout << "** Criteria met\n\n"; // std::cout << "========================= Leaving line search =========================\n\n"; return; } // Extrapolation factor const Scalar delta = Scalar(1.1); int iter; for(iter = 0; iter < param.max_linesearch; iter++) { // ft = psi(step) = f(xp + step * drt) - f(xp) - step * test_decr // gt = psi'(step) = dg - mu * dg_init // mu = param.ftol const Scalar ft = fx - fx_init - step * test_decr; const Scalar gt = dg - param.ftol * dg_init; // Update bracketing interval and step size Scalar new_step; if(ft > fI_lo) { // Case 1: ft > fl new_step = step_selection( I_lo, I_hi, step, fI_lo, fI_hi, ft, gI_lo, gI_hi, gt); I_hi = step; fI_hi = ft; gI_hi = gt; // std::cout << "Case 1: new step = " << new_step; } else if(gt * (fI_lo - step) > Scalar(0)) { // Case 2: ft <= fl, gt * (al - at) > 0 new_step = std::min(step_max, step + delta * (step - I_lo)); I_lo = step; fI_lo = ft; gI_lo = gt; // std::cout << "Case 2: new step = " << new_step; } else { // Case 3: ft <= fl, gt * (al - at) <= 0 new_step = step_selection( I_lo, I_hi, step, fI_lo, fI_hi, ft, gI_lo, gI_hi, gt); I_hi = I_lo; fI_hi = fI_lo; gI_hi = gI_lo; I_lo = step; fI_lo = ft; gI_lo = gt; // std::cout << "Case 3: new step = " << new_step; } // In case step, new_step, and step_max are equal, directly return the computed x and fx if(step == step_max && new_step >= step_max) { // std::cout << "** Maximum step size reached\n\n"; // std::cout << "========================= Leaving line search =========================\n\n"; return; } // Otherwise, recompute x and fx based on new_step step = new_step; if(step < param.min_step) throw std::runtime_error("the line search step became smaller than the minimum value allowed"); if(step > param.max_step) throw std::runtime_error("the line search step became larger than the maximum value allowed"); // Update parameter, function value, and gradient x.noalias() = xp + step * drt; fx = f(x, grad); dg = grad.dot(drt); // std::cout << ", fx = " << fx << std::endl; // Convergence test if(fx <= fx_init + step * test_decr && std::abs(dg) <= test_curv) { // std::cout << "** Criteria met\n\n"; // std::cout << "========================= Leaving line search =========================\n\n"; return; } if(step >= step_max) { // std::cout << "** Maximum step size reached\n\n"; // std::cout << "========================= Leaving line search =========================\n\n"; return; } } if(iter >= param.max_linesearch) throw std::runtime_error("the line search routine reached the maximum number of iterations"); } }; } // namespace LBFGSpp #endif // LINE_SEARCH_MORE_THUENTE_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/LineSearchNocedalWright.h ================================================ // Copyright (C) 2016-2020 Yixuan Qiu // Copyright (C) 2016-2020 Dirk Toewe // Under MIT license #ifndef LINE_SEARCH_NOCEDAL_WRIGHT_H #define LINE_SEARCH_NOCEDAL_WRIGHT_H #include #include namespace LBFGSpp { /// /// A line search algorithm for the strong Wolfe condition. Implementation based on: /// /// "Numerical Optimization" 2nd Edition, /// Jorge Nocedal Stephen J. Wright, /// Chapter 3. Line Search Methods, page 60f. /// template class LineSearchNocedalWright { private: typedef Eigen::Matrix Vector; public: /// /// Line search by Nocedal and Wright (2006). /// /// \param f A function object such that `f(x, grad)` returns the /// objective function value at `x`, and overwrites `grad` with /// the gradient. /// \param fx In: The objective function value at the current point. /// Out: The function value at the new point. /// \param x Out: The new point moved to. /// \param grad In: The current gradient vector. Out: The gradient at the /// new point. /// \param step In: The initial step length. Out: The calculated step length. /// \param drt The current moving direction. /// \param xp The current point. /// \param param Parameters for the LBFGS algorithm /// template static void LineSearch(Foo& f, Scalar& fx, Vector& x, Vector& grad, Scalar& step, const Vector& drt, const Vector& xp, const LBFGSParam& param) { // Check the value of step if(step <= Scalar(0)) throw std::invalid_argument("'step' must be positive"); if(param.linesearch != LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE) throw std::invalid_argument("'param.linesearch' must be 'LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE' for LineSearchNocedalWright"); // To make this implementation more similar to the other line search // methods in LBFGSpp, the symbol names from the literature // ("Numerical Optimizations") have been changed. // // Literature | LBFGSpp // -----------|-------- // alpha | step // phi | fx // phi' | dg // the rate, by which the const Scalar expansion = Scalar(2); // Save the function value at the current x const Scalar fx_init = fx; // Projection of gradient on the search direction const Scalar dg_init = grad.dot(drt); // Make sure d points to a descent direction if(dg_init > 0) throw std::logic_error("the moving direction increases the objective function value"); const Scalar test_decr = param.ftol * dg_init, // Sufficient decrease test_curv = -param.wolfe * dg_init; // Curvature // Ends of the line search range (step_lo > step_hi is allowed) Scalar step_hi, step_lo = 0, fx_hi, fx_lo = fx_init, dg_hi, dg_lo = dg_init; // STEP 1: Bracketing Phase // Find a range guaranteed to contain a step satisfying strong Wolfe. // // See also: // "Numerical Optimization", "Algorithm 3.5 (Line Search Algorithm)". int iter = 0; for(;;) { x.noalias() = xp + step * drt; fx = f(x, grad); if(iter++ >= param.max_linesearch) return; const Scalar dg = grad.dot(drt); if( fx - fx_init > step * test_decr || (0 < step_lo && fx >= fx_lo) ) { step_hi = step; fx_hi = fx; dg_hi = dg; break; } if( std::abs(dg) <= test_curv ) return; step_hi = step_lo; fx_hi = fx_lo; dg_hi = dg_lo; step_lo = step; fx_lo = fx; dg_lo = dg; if( dg >= 0 ) break; step *= expansion; } // STEP 2: Zoom Phase // Given a range (step_lo,step_hi) that is guaranteed to // contain a valid strong Wolfe step value, this method // finds such a value. // // See also: // "Numerical Optimization", "Algorithm 3.6 (Zoom)". for(;;) { // use {fx_lo, fx_hi, dg_lo} to make a quadric interpolation of // the function said interpolation is used to estimate the minimum // // polynomial: p (x) = c0*(x - step)² + c1 // conditions: p (step_hi) = fx_hi // p (step_lo) = fx_lo // p'(step_lo) = dg_lo step = (fx_hi-fx_lo)*step_lo - (step_hi*step_hi - step_lo*step_lo)*dg_lo/2; step /= (fx_hi-fx_lo) - (step_hi - step_lo )*dg_lo; // if interpolation fails, bisection is used if( step <= std::min(step_lo,step_hi) || step >= std::max(step_lo,step_hi) ) step = step_lo/2 + step_hi/2; x.noalias() = xp + step * drt; fx = f(x, grad); if(iter++ >= param.max_linesearch) return; const Scalar dg = grad.dot(drt); if( fx - fx_init > step * test_decr || fx >= fx_lo ) { if( step == step_hi ) throw std::runtime_error("the line search routine failed, possibly due to insufficient numeric precision"); step_hi = step; fx_hi = fx; dg_hi = dg; } else { if( std::abs(dg) <= test_curv ) return; if( dg * (step_hi - step_lo) >= 0 ) { step_hi = step_lo; fx_hi = fx_lo; dg_hi = dg_lo; } if( step == step_lo ) throw std::runtime_error("the line search routine failed, possibly due to insufficient numeric precision"); step_lo = step; fx_lo = fx; dg_lo = dg; } } } }; } // namespace LBFGSpp #endif // LINE_SEARCH_NOCEDAL_WRIGHT_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/Param.h ================================================ // Copyright (C) 2016-2020 Yixuan Qiu // Under MIT license #ifndef PARAM_H #define PARAM_H #include #include // std::invalid_argument namespace LBFGSpp { /// /// \defgroup Enumerations /// /// Enumeration types for line search. /// /// /// \ingroup Enumerations /// /// The enumeration of line search termination conditions. /// enum LINE_SEARCH_TERMINATION_CONDITION { /// /// Backtracking method with the Armijo condition. /// The backtracking method finds the step length such that it satisfies /// the sufficient decrease (Armijo) condition, /// \f$f(x + a \cdot d) \le f(x) + \beta' \cdot a \cdot g(x)^T d\f$, /// where \f$x\f$ is the current point, \f$d\f$ is the current search direction, /// \f$a\f$ is the step length, and \f$\beta'\f$ is the value specified by /// \ref LBFGSParam::ftol. \f$f\f$ and \f$g\f$ are the function /// and gradient values respectively. /// LBFGS_LINESEARCH_BACKTRACKING_ARMIJO = 1, /// /// The backtracking method with the defualt (regular Wolfe) condition. /// An alias of `LBFGS_LINESEARCH_BACKTRACKING_WOLFE`. /// LBFGS_LINESEARCH_BACKTRACKING = 2, /// /// Backtracking method with regular Wolfe condition. /// The backtracking method finds the step length such that it satisfies /// both the Armijo condition (`LBFGS_LINESEARCH_BACKTRACKING_ARMIJO`) /// and the curvature condition, /// \f$g(x + a \cdot d)^T d \ge \beta \cdot g(x)^T d\f$, where \f$\beta\f$ /// is the value specified by \ref LBFGSParam::wolfe. /// LBFGS_LINESEARCH_BACKTRACKING_WOLFE = 2, /// /// Backtracking method with strong Wolfe condition. /// The backtracking method finds the step length such that it satisfies /// both the Armijo condition (`LBFGS_LINESEARCH_BACKTRACKING_ARMIJO`) /// and the following condition, /// \f$\vert g(x + a \cdot d)^T d\vert \le \beta \cdot \vert g(x)^T d\vert\f$, /// where \f$\beta\f$ is the value specified by \ref LBFGSParam::wolfe. /// LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE = 3 }; /// /// Parameters to control the L-BFGS algorithm. /// template class LBFGSParam { public: /// /// The number of corrections to approximate the inverse Hessian matrix. /// The L-BFGS routine stores the computation results of previous \ref m /// iterations to approximate the inverse Hessian matrix of the current /// iteration. This parameter controls the size of the limited memories /// (corrections). The default value is \c 6. Values less than \c 3 are /// not recommended. Large values will result in excessive computing time. /// int m; /// /// Absolute tolerance for convergence test. /// This parameter determines the absolute accuracy \f$\epsilon_{abs}\f$ /// with which the solution is to be found. A minimization terminates when /// \f$||g|| < \max\{\epsilon_{abs}, \epsilon_{rel}||x||\}\f$, /// where \f$||\cdot||\f$ denotes the Euclidean (L2) norm. The default value is /// \c 1e-5. /// Scalar epsilon; /// /// Relative tolerance for convergence test. /// This parameter determines the relative accuracy \f$\epsilon_{rel}\f$ /// with which the solution is to be found. A minimization terminates when /// \f$||g|| < \max\{\epsilon_{abs}, \epsilon_{rel}||x||\}\f$, /// where \f$||\cdot||\f$ denotes the Euclidean (L2) norm. The default value is /// \c 1e-5. /// Scalar epsilon_rel; /// /// Distance for delta-based convergence test. /// This parameter determines the distance \f$d\f$ to compute the /// rate of decrease of the objective function, /// \f$f_{k-d}(x)-f_k(x)\f$, where \f$k\f$ is the current iteration /// step. If the value of this parameter is zero, the delta-based convergence /// test will not be performed. The default value is \c 0. /// int past; /// /// Delta for convergence test. /// The algorithm stops when the following condition is met, /// \f$|f_{k-d}(x)-f_k(x)|<\delta\cdot\max(1, |f_k(x)|, |f_{k-d}(x)|)\f$, where \f$f_k(x)\f$ is /// the current function value, and \f$f_{k-d}(x)\f$ is the function value /// \f$d\f$ iterations ago (specified by the \ref past parameter). /// The default value is \c 0. /// Scalar delta; /// /// The maximum number of iterations. /// The optimization process is terminated when the iteration count /// exceeds this parameter. Setting this parameter to zero continues an /// optimization process until a convergence or error. The default value /// is \c 0. /// int max_iterations; /// /// The line search termination condition. /// This parameter specifies the line search termination condition that will be used /// by the LBFGS routine. The default value is `LBFGS_LINESEARCH_BACKTRACKING_ARMIJO`. /// int linesearch; /// /// The maximum number of trials for the line search. /// This parameter controls the number of function and gradients evaluations /// per iteration for the line search routine. The default value is \c 20. /// int max_linesearch; /// /// The minimum step length allowed in the line search. /// The default value is \c 1e-20. Usually this value does not need to be /// modified. /// Scalar min_step; /// /// The maximum step length allowed in the line search. /// The default value is \c 1e+20. Usually this value does not need to be /// modified. /// Scalar max_step; /// /// A parameter to control the accuracy of the line search routine. /// The default value is \c 1e-4. This parameter should be greater /// than zero and smaller than \c 0.5. /// Scalar ftol; /// /// The coefficient for the Wolfe condition. /// This parameter is valid only when the line-search /// algorithm is used with the Wolfe condition. /// The default value is \c 0.9. This parameter should be greater /// the \ref ftol parameter and smaller than \c 1.0. /// Scalar wolfe; public: /// /// Constructor for L-BFGS parameters. /// Default values for parameters will be set when the object is created. /// LBFGSParam() { m = 6; epsilon = Scalar(1e-5); epsilon_rel = Scalar(1e-5); past = 0; delta = Scalar(0); max_iterations = 0; linesearch = LBFGS_LINESEARCH_BACKTRACKING_ARMIJO; max_linesearch = 20; min_step = Scalar(1e-20); max_step = Scalar(1e+20); ftol = Scalar(1e-4); wolfe = Scalar(0.9); } /// /// Checking the validity of L-BFGS parameters. /// An `std::invalid_argument` exception will be thrown if some parameter /// is invalid. /// inline void check_param() const { if(m <= 0) throw std::invalid_argument("'m' must be positive"); if(epsilon < 0) throw std::invalid_argument("'epsilon' must be non-negative"); if(epsilon_rel < 0) throw std::invalid_argument("'epsilon_rel' must be non-negative"); if(past < 0) throw std::invalid_argument("'past' must be non-negative"); if(delta < 0) throw std::invalid_argument("'delta' must be non-negative"); if(max_iterations < 0) throw std::invalid_argument("'max_iterations' must be non-negative"); if(linesearch < LBFGS_LINESEARCH_BACKTRACKING_ARMIJO || linesearch > LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE) throw std::invalid_argument("unsupported line search termination condition"); if(max_linesearch <= 0) throw std::invalid_argument("'max_linesearch' must be positive"); if(min_step < 0) throw std::invalid_argument("'min_step' must be positive"); if(max_step < min_step ) throw std::invalid_argument("'max_step' must be greater than 'min_step'"); if(ftol <= 0 || ftol >= 0.5) throw std::invalid_argument("'ftol' must satisfy 0 < ftol < 0.5"); if(wolfe <= ftol || wolfe >= 1) throw std::invalid_argument("'wolfe' must satisfy ftol < wolfe < 1"); } }; /// /// Parameters to control the L-BFGS-B algorithm. /// template class LBFGSBParam { public: /// /// The number of corrections to approximate the inverse Hessian matrix. /// The L-BFGS-B routine stores the computation results of previous \ref m /// iterations to approximate the inverse Hessian matrix of the current /// iteration. This parameter controls the size of the limited memories /// (corrections). The default value is \c 6. Values less than \c 3 are /// not recommended. Large values will result in excessive computing time. /// int m; /// /// Absolute tolerance for convergence test. /// This parameter determines the absolute accuracy \f$\epsilon_{abs}\f$ /// with which the solution is to be found. A minimization terminates when /// \f$||Pg||_{\infty} < \max\{\epsilon_{abs}, \epsilon_{rel}||x||\}\f$, /// where \f$||x||\f$ denotes the Euclidean (L2) norm of \f$x\f$, and /// \f$Pg=P(x-g,l,u)-x\f$ is the projected gradient. The default value is /// \c 1e-5. /// Scalar epsilon; /// /// Relative tolerance for convergence test. /// This parameter determines the relative accuracy \f$\epsilon_{rel}\f$ /// with which the solution is to be found. A minimization terminates when /// \f$||Pg||_{\infty} < \max\{\epsilon_{abs}, \epsilon_{rel}||x||\}\f$, /// where \f$||x||\f$ denotes the Euclidean (L2) norm of \f$x\f$, and /// \f$Pg=P(x-g,l,u)-x\f$ is the projected gradient. The default value is /// \c 1e-5. /// Scalar epsilon_rel; /// /// Distance for delta-based convergence test. /// This parameter determines the distance \f$d\f$ to compute the /// rate of decrease of the objective function, /// \f$f_{k-d}(x)-f_k(x)\f$, where \f$k\f$ is the current iteration /// step. If the value of this parameter is zero, the delta-based convergence /// test will not be performed. The default value is \c 1. /// int past; /// /// Delta for convergence test. /// The algorithm stops when the following condition is met, /// \f$|f_{k-d}(x)-f_k(x)|<\delta\cdot\max(1, |f_k(x)|, |f_{k-d}(x)|)\f$, where \f$f_k(x)\f$ is /// the current function value, and \f$f_{k-d}(x)\f$ is the function value /// \f$d\f$ iterations ago (specified by the \ref past parameter). /// The default value is \c 1e-10. /// Scalar delta; /// /// The maximum number of iterations. /// The optimization process is terminated when the iteration count /// exceeds this parameter. Setting this parameter to zero continues an /// optimization process until a convergence or error. The default value /// is \c 0. /// int max_iterations; /// /// The maximum number of iterations in the subspace minimization. /// This parameter controls the number of iterations in the subspace /// minimization routine. The default value is \c 10. /// int max_submin; /// /// The maximum number of trials for the line search. /// This parameter controls the number of function and gradients evaluations /// per iteration for the line search routine. The default value is \c 20. /// int max_linesearch; /// /// The minimum step length allowed in the line search. /// The default value is \c 1e-20. Usually this value does not need to be /// modified. /// Scalar min_step; /// /// The maximum step length allowed in the line search. /// The default value is \c 1e+20. Usually this value does not need to be /// modified. /// Scalar max_step; /// /// A parameter to control the accuracy of the line search routine. /// The default value is \c 1e-4. This parameter should be greater /// than zero and smaller than \c 0.5. /// Scalar ftol; /// /// The coefficient for the Wolfe condition. /// This parameter is valid only when the line-search /// algorithm is used with the Wolfe condition. /// The default value is \c 0.9. This parameter should be greater /// the \ref ftol parameter and smaller than \c 1.0. /// Scalar wolfe; public: /// /// Constructor for L-BFGS-B parameters. /// Default values for parameters will be set when the object is created. /// LBFGSBParam() { m = 6; epsilon = Scalar(1e-5); epsilon_rel = Scalar(1e-5); past = 1; delta = Scalar(1e-10); max_iterations = 0; max_submin = 10; max_linesearch = 20; min_step = Scalar(1e-20); max_step = Scalar(1e+20); ftol = Scalar(1e-4); wolfe = Scalar(0.9); } /// /// Checking the validity of L-BFGS-B parameters. /// An `std::invalid_argument` exception will be thrown if some parameter /// is invalid. /// inline void check_param() const { if(m <= 0) throw std::invalid_argument("'m' must be positive"); if(epsilon < 0) throw std::invalid_argument("'epsilon' must be non-negative"); if(epsilon_rel < 0) throw std::invalid_argument("'epsilon_rel' must be non-negative"); if(past < 0) throw std::invalid_argument("'past' must be non-negative"); if(delta < 0) throw std::invalid_argument("'delta' must be non-negative"); if(max_iterations < 0) throw std::invalid_argument("'max_iterations' must be non-negative"); if(max_submin < 0) throw std::invalid_argument("'max_submin' must be non-negative"); if(max_linesearch <= 0) throw std::invalid_argument("'max_linesearch' must be positive"); if(min_step < 0) throw std::invalid_argument("'min_step' must be positive"); if(max_step < min_step ) throw std::invalid_argument("'max_step' must be greater than 'min_step'"); if(ftol <= 0 || ftol >= 0.5) throw std::invalid_argument("'ftol' must satisfy 0 < ftol < 0.5"); if(wolfe <= ftol || wolfe >= 1) throw std::invalid_argument("'wolfe' must satisfy ftol < wolfe < 1"); } }; } // namespace LBFGSpp #endif // PARAM_H ================================================ FILE: external_libs/LBFGSpp/include/LBFGSpp/SubspaceMin.h ================================================ // Copyright (C) 2020 Yixuan Qiu // Under MIT license #ifndef SUBSPACE_MIN_H #define SUBSPACE_MIN_H #include #include #include #include "BFGSMat.h" /// \cond namespace LBFGSpp { // // Subspace minimization procedure of the L-BFGS-B algorithm, // mainly for internal use. // // The target of subspace minimization is to minimize the quadratic function m(x) // over the free variables, subject to the bound condition. // Free variables stand for coordinates that are not at the boundary in xcp, // the generalized Cauchy point. // // In the classical implementation of L-BFGS-B [1], the minimization is done by first // ignoring the box constraints, followed by a line search. Our implementation is // an exact minimization subject to the bounds, based on the BOXCQP algorithm [2]. // // Reference: // [1] R. H. Byrd, P. Lu, and J. Nocedal (1995). A limited memory algorithm for bound constrained optimization. // [2] C. Voglis and I. E. Lagaris (2004). BOXCQP: An algorithm for bound constrained convex quadratic problems. // template class SubspaceMin { private: typedef Eigen::Matrix Vector; typedef Eigen::Matrix Matrix; typedef std::vector IndexSet; // v[ind] static Vector subvec(const Vector& v, const IndexSet& ind) { const int nsub = ind.size(); Vector res(nsub); for(int i = 0; i < nsub; i++) res[i] = v[ind[i]]; return res; } // v[ind] = rhs static void subvec_assign(Vector& v, const IndexSet& ind, const Vector& rhs) { const int nsub = ind.size(); for(int i = 0; i < nsub; i++) v[ind[i]] = rhs[i]; } // Check whether the vector is within the bounds static bool in_bounds(const Vector& x, const Vector& lb, const Vector& ub) { const int n = x.size(); for(int i = 0; i < n; i++) { if(x[i] < lb[i] || x[i] > ub[i]) return false; } return true; } // Test convergence of P set static bool P_converged(const IndexSet& yP_set, const Vector& vecy, const Vector& vecl, const Vector& vecu) { const int nP = yP_set.size(); for(int i = 0; i < nP; i++) { const int coord = yP_set[i]; if(vecy[coord] < vecl[coord] || vecy[coord] > vecu[coord]) return false; } return true; } // Test convergence of L set static bool L_converged(const IndexSet& yL_set, const Vector& lambda) { const int nL = yL_set.size(); for(int i = 0; i < nL; i++) { const int coord = yL_set[i]; if(lambda[coord] < Scalar(0)) return false; } return true; } // Test convergence of L set static bool U_converged(const IndexSet& yU_set, const Vector& mu) { const int nU = yU_set.size(); for(int i = 0; i < nU; i++) { const int coord = yU_set[i]; if(mu[coord] < Scalar(0)) return false; } return true; } public: // bfgs: An object that represents the BFGS approximation matrix. // x0: Current parameter vector. // xcp: Computed generalized Cauchy point. // g: Gradient at x0. // lb: Lower bounds for x. // ub: Upper bounds for x. // Wd: W'(xcp - x0) // newact_set: Coordinates that newly become active during the GCP procedure. // fv_set: Free variable set. // maxit: Maximum number of iterations. // drt: The output direction vector, drt = xsm - x0. static void subspace_minimize( const BFGSMat& bfgs, const Vector& x0, const Vector& xcp, const Vector& g, const Vector& lb, const Vector& ub, const Vector& Wd, const IndexSet& newact_set, const IndexSet& fv_set, int maxit, Vector& drt ) { // std::cout << "========================= Entering subspace minimization =========================\n\n"; // d = xcp - x0 drt.noalias() = xcp - x0; // Size of free variables const int nfree = fv_set.size(); // If there is no free variable, simply return drt if(nfree < 1) { // std::cout << "========================= (Early) leaving subspace minimization =========================\n\n"; return; } // std::cout << "New active set = [ "; for(std::size_t i = 0; i < newact_set.size(); i++) std::cout << newact_set[i] << " "; std::cout << "]\n"; // std::cout << "Free variable set = [ "; for(std::size_t i = 0; i < fv_set.size(); i++) std::cout << fv_set[i] << " "; std::cout << "]\n\n"; // Extract the rows of W in the free variable set Matrix WF = bfgs.Wb(fv_set); // Compute F'BAb = -F'WMW'AA'd Vector vecc(nfree); bfgs.compute_FtBAb(WF, fv_set, newact_set, Wd, drt, vecc); // Set the vector c=F'BAb+F'g for linear term, and vectors l and u for the new bounds Vector vecl(nfree), vecu(nfree); for(int i = 0; i < nfree; i++) { const int coord = fv_set[i]; vecl[i] = lb[coord] - x0[coord]; vecu[i] = ub[coord] - x0[coord]; vecc[i] += g[coord]; } // Solve y = -inv(B[F, F]) * c Vector vecy(nfree); bfgs.solve_PtBP(WF, -vecc, vecy); // Test feasibility // If yes, then the solution has been found if(in_bounds(vecy, vecl, vecu)) { subvec_assign(drt, fv_set, vecy); return; } // Otherwise, enter the iterations // Make a copy of y as a fallback solution Vector yfallback = vecy; // Dual variables Vector lambda = Vector::Zero(nfree), mu = Vector::Zero(nfree); // Iterations IndexSet L_set, U_set, P_set, yL_set, yU_set, yP_set; L_set.reserve(nfree / 3); yL_set.reserve(nfree / 3); U_set.reserve(nfree / 3); yU_set.reserve(nfree / 3); P_set.reserve(nfree); yP_set.reserve(nfree); int k; for(k = 0; k < maxit; k++) { // Construct the L, U, and P sets, and then update values // Indices in original drt vector L_set.clear(); U_set.clear(); P_set.clear(); // Indices in y yL_set.clear(); yU_set.clear(); yP_set.clear(); for(int i = 0; i < nfree; i++) { const int coord = fv_set[i]; const Scalar li = vecl[i], ui = vecu[i]; if( (vecy[i] < li) || (vecy[i] == li && lambda[i] >= Scalar(0)) ) { L_set.push_back(coord); yL_set.push_back(i); vecy[i] = li; mu[i] = Scalar(0); } else if( (vecy[i] > ui) || (vecy[i] == ui && mu[i] >= Scalar(0)) ) { U_set.push_back(coord); yU_set.push_back(i); vecy[i] = ui; lambda[i] = Scalar(0); } else { P_set.push_back(coord); yP_set.push_back(i); lambda[i] = Scalar(0); mu[i] = Scalar(0); } } /* std::cout << "** Iter " << k << " **\n"; std::cout << " L = [ "; for(std::size_t i = 0; i < L_set.size(); i++) std::cout << L_set[i] << " "; std::cout << "]\n"; std::cout << " U = [ "; for(std::size_t i = 0; i < U_set.size(); i++) std::cout << U_set[i] << " "; std::cout << "]\n"; std::cout << " P = [ "; for(std::size_t i = 0; i < P_set.size(); i++) std::cout << P_set[i] << " "; std::cout << "]\n\n"; */ // Extract the rows of W in the P set Matrix WP = bfgs.Wb(P_set); // Solve y[P] = -inv(B[P, P]) * (B[P, L] * l[L] + B[P, U] * u[U] + c[P]) const int nP = P_set.size(); if(nP > 0) { Vector rhs = subvec(vecc, yP_set); Vector lL = subvec(vecl, yL_set); Vector uU = subvec(vecu, yU_set); Vector tmp(nP); bool nonzero = bfgs.apply_PtBQv(WP, L_set, lL, tmp, true); if(nonzero) rhs.noalias() += tmp; nonzero = bfgs.apply_PtBQv(WP, U_set, uU, tmp, true); if(nonzero) rhs.noalias() += tmp; bfgs.solve_PtBP(WP, -rhs, tmp); subvec_assign(vecy, yP_set, tmp); } // Solve lambda[L] = B[L, F] * y + c[L] const int nL = L_set.size(); const int nU = U_set.size(); Vector Fy; if(nL > 0 || nU > 0) bfgs.apply_WtPv(fv_set, vecy, Fy); if(nL > 0) { Vector res; bfgs.apply_PtWMv(L_set, Fy, res, Scalar(-1)); res.noalias() += subvec(vecc, yL_set); subvec_assign(lambda, yL_set, res); } // Solve mu[U] = -B[U, F] * y - c[U] if(nU > 0) { Vector res; bfgs.apply_PtWMv(U_set, Fy, res, Scalar(-1)); res.noalias() = -res - subvec(vecc, yU_set); subvec_assign(mu, yU_set, res); } // Test convergence if( L_converged(yL_set, lambda) && U_converged(yU_set, mu) && P_converged(yP_set, vecy, vecl, vecu) ) break; } // If the iterations do not converge, try the projection if(k >= maxit) { vecy.noalias() = vecy.cwiseMax(vecl).cwiseMin(vecu); subvec_assign(drt, fv_set, vecy); // Test whether drt is a descent direction Scalar dg = drt.dot(g); // If yes, return the result if(dg <= -std::numeric_limits::epsilon()) return; // If not, fall back to the projected unconstrained solution vecy.noalias() = yfallback.cwiseMax(vecl).cwiseMin(vecu); subvec_assign(drt, fv_set, vecy); dg = drt.dot(g); if(dg <= -std::numeric_limits::epsilon()) return; // If still not, fall back to the unconstrained solution subvec_assign(drt, fv_set, yfallback); return; } // std::cout << "** Minimization finished in " << k + 1 << " iteration(s) **\n\n"; // std::cout << "========================= Leaving subspace minimization =========================\n\n"; subvec_assign(drt, fv_set, vecy); } }; } // namespace LBFGSpp /// \endcond #endif // SUBSPACE_MIN_H ================================================ FILE: external_libs/cxxopts/LICENSE ================================================ Copyright (c) 2014 Jarryd Beck Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: external_libs/cxxopts/include/cxxopts.hpp ================================================ /* Copyright (c) 2014, 2015, 2016, 2017 Jarryd Beck Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef CXXOPTS_HPP_INCLUDED #define CXXOPTS_HPP_INCLUDED #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(__GNUC__) && !defined(__clang__) # if (__GNUC__ * 10 + __GNUC_MINOR__) < 49 # define CXXOPTS_NO_REGEX true # endif #endif #ifndef CXXOPTS_NO_REGEX # include #endif // CXXOPTS_NO_REGEX // Nonstandard before C++17, which is coincidentally what we also need for #ifdef __has_include # if __has_include() # include # ifdef __cpp_lib_optional # define CXXOPTS_HAS_OPTIONAL # endif # endif #endif #if __cplusplus >= 201603L #define CXXOPTS_NODISCARD [[nodiscard]] #else #define CXXOPTS_NODISCARD #endif #ifndef CXXOPTS_VECTOR_DELIMITER #define CXXOPTS_VECTOR_DELIMITER ',' #endif #define CXXOPTS__VERSION_MAJOR 3 #define CXXOPTS__VERSION_MINOR 0 #define CXXOPTS__VERSION_PATCH 0 #if (__GNUC__ < 10 || (__GNUC__ == 10 && __GNUC_MINOR__ < 1)) && __GNUC__ >= 6 #define CXXOPTS_NULL_DEREF_IGNORE #endif namespace cxxopts { static constexpr struct { uint8_t major, minor, patch; } version = { CXXOPTS__VERSION_MAJOR, CXXOPTS__VERSION_MINOR, CXXOPTS__VERSION_PATCH }; } // namespace cxxopts //when we ask cxxopts to use Unicode, help strings are processed using ICU, //which results in the correct lengths being computed for strings when they //are formatted for the help output //it is necessary to make sure that can be found by the //compiler, and that icu-uc is linked in to the binary. #ifdef CXXOPTS_USE_UNICODE #include namespace cxxopts { using String = icu::UnicodeString; inline String toLocalString(std::string s) { return icu::UnicodeString::fromUTF8(std::move(s)); } #if defined(__GNUC__) // GNU GCC with -Weffc++ will issue a warning regarding the upcoming class, we want to silence it: // warning: base class 'class std::enable_shared_from_this' has accessible non-virtual destructor #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wnon-virtual-dtor" #pragma GCC diagnostic ignored "-Weffc++" // This will be ignored under other compilers like LLVM clang. #endif class UnicodeStringIterator : public std::iterator { public: UnicodeStringIterator(const icu::UnicodeString* string, int32_t pos) : s(string) , i(pos) { } value_type operator*() const { return s->char32At(i); } bool operator==(const UnicodeStringIterator& rhs) const { return s == rhs.s && i == rhs.i; } bool operator!=(const UnicodeStringIterator& rhs) const { return !(*this == rhs); } UnicodeStringIterator& operator++() { ++i; return *this; } UnicodeStringIterator operator+(int32_t v) { return UnicodeStringIterator(s, i + v); } private: const icu::UnicodeString* s; int32_t i; }; #if defined(__GNUC__) #pragma GCC diagnostic pop #endif inline String& stringAppend(String&s, String a) { return s.append(std::move(a)); } inline String& stringAppend(String& s, size_t n, UChar32 c) { for (size_t i = 0; i != n; ++i) { s.append(c); } return s; } template String& stringAppend(String& s, Iterator begin, Iterator end) { while (begin != end) { s.append(*begin); ++begin; } return s; } inline size_t stringLength(const String& s) { return s.length(); } inline std::string toUTF8String(const String& s) { std::string result; s.toUTF8String(result); return result; } inline bool empty(const String& s) { return s.isEmpty(); } } namespace std { inline cxxopts::UnicodeStringIterator begin(const icu::UnicodeString& s) { return cxxopts::UnicodeStringIterator(&s, 0); } inline cxxopts::UnicodeStringIterator end(const icu::UnicodeString& s) { return cxxopts::UnicodeStringIterator(&s, s.length()); } } //ifdef CXXOPTS_USE_UNICODE #else namespace cxxopts { using String = std::string; template T toLocalString(T&& t) { return std::forward(t); } inline size_t stringLength(const String& s) { return s.length(); } inline String& stringAppend(String&s, const String& a) { return s.append(a); } inline String& stringAppend(String& s, size_t n, char c) { return s.append(n, c); } template String& stringAppend(String& s, Iterator begin, Iterator end) { return s.append(begin, end); } template std::string toUTF8String(T&& t) { return std::forward(t); } inline bool empty(const std::string& s) { return s.empty(); } } // namespace cxxopts //ifdef CXXOPTS_USE_UNICODE #endif namespace cxxopts { namespace { #ifdef _WIN32 const std::string LQUOTE("\'"); const std::string RQUOTE("\'"); #else const std::string LQUOTE("‘"); const std::string RQUOTE("’"); #endif } // namespace #if defined(__GNUC__) // GNU GCC with -Weffc++ will issue a warning regarding the upcoming class, we want to silence it: // warning: base class 'class std::enable_shared_from_this' has accessible non-virtual destructor #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wnon-virtual-dtor" #pragma GCC diagnostic ignored "-Weffc++" // This will be ignored under other compilers like LLVM clang. #endif class Value : public std::enable_shared_from_this { public: virtual ~Value() = default; virtual std::shared_ptr clone() const = 0; virtual void parse(const std::string& text) const = 0; virtual void parse() const = 0; virtual bool has_default() const = 0; virtual bool is_container() const = 0; virtual bool has_implicit() const = 0; virtual std::string get_default_value() const = 0; virtual std::string get_implicit_value() const = 0; virtual std::shared_ptr default_value(const std::string& value) = 0; virtual std::shared_ptr implicit_value(const std::string& value) = 0; virtual std::shared_ptr no_implicit_value() = 0; virtual bool is_boolean() const = 0; }; #if defined(__GNUC__) #pragma GCC diagnostic pop #endif class OptionException : public std::exception { public: explicit OptionException(std::string message) : m_message(std::move(message)) { } CXXOPTS_NODISCARD const char* what() const noexcept override { return m_message.c_str(); } private: std::string m_message; }; class OptionSpecException : public OptionException { public: explicit OptionSpecException(const std::string& message) : OptionException(message) { } }; class OptionParseException : public OptionException { public: explicit OptionParseException(const std::string& message) : OptionException(message) { } }; class option_exists_error : public OptionSpecException { public: explicit option_exists_error(const std::string& option) : OptionSpecException("Option " + LQUOTE + option + RQUOTE + " already exists") { } }; class invalid_option_format_error : public OptionSpecException { public: explicit invalid_option_format_error(const std::string& format) : OptionSpecException("Invalid option format " + LQUOTE + format + RQUOTE) { } }; class option_syntax_exception : public OptionParseException { public: explicit option_syntax_exception(const std::string& text) : OptionParseException("Argument " + LQUOTE + text + RQUOTE + " starts with a - but has incorrect syntax") { } }; class option_not_exists_exception : public OptionParseException { public: explicit option_not_exists_exception(const std::string& option) : OptionParseException("Option " + LQUOTE + option + RQUOTE + " does not exist") { } }; class missing_argument_exception : public OptionParseException { public: explicit missing_argument_exception(const std::string& option) : OptionParseException( "Option " + LQUOTE + option + RQUOTE + " is missing an argument" ) { } }; class option_requires_argument_exception : public OptionParseException { public: explicit option_requires_argument_exception(const std::string& option) : OptionParseException( "Option " + LQUOTE + option + RQUOTE + " requires an argument" ) { } }; class option_not_has_argument_exception : public OptionParseException { public: option_not_has_argument_exception ( const std::string& option, const std::string& arg ) : OptionParseException( "Option " + LQUOTE + option + RQUOTE + " does not take an argument, but argument " + LQUOTE + arg + RQUOTE + " given" ) { } }; class option_not_present_exception : public OptionParseException { public: explicit option_not_present_exception(const std::string& option) : OptionParseException("Option " + LQUOTE + option + RQUOTE + " not present") { } }; class option_has_no_value_exception : public OptionException { public: explicit option_has_no_value_exception(const std::string& option) : OptionException( !option.empty() ? ("Option " + LQUOTE + option + RQUOTE + " has no value") : "Option has no value") { } }; class argument_incorrect_type : public OptionParseException { public: explicit argument_incorrect_type ( const std::string& arg ) : OptionParseException( "Argument " + LQUOTE + arg + RQUOTE + " failed to parse" ) { } }; class option_required_exception : public OptionParseException { public: explicit option_required_exception(const std::string& option) : OptionParseException( "Option " + LQUOTE + option + RQUOTE + " is required but not present" ) { } }; template void throw_or_mimic(const std::string& text) { static_assert(std::is_base_of::value, "throw_or_mimic only works on std::exception and " "deriving classes"); #ifndef CXXOPTS_NO_EXCEPTIONS // If CXXOPTS_NO_EXCEPTIONS is not defined, just throw throw T{text}; #else // Otherwise manually instantiate the exception, print what() to stderr, // and exit T exception{text}; std::cerr << exception.what() << std::endl; std::exit(EXIT_FAILURE); #endif } namespace values { namespace parser_tool { struct IntegerDesc { std::string negative = ""; std::string base = ""; std::string value = ""; }; struct ArguDesc { std::string arg_name = ""; bool grouping = false; bool set_value = false; std::string value = ""; }; #ifdef CXXOPTS_NO_REGEX inline IntegerDesc SplitInteger(const std::string &text) { if (text.empty()) { throw_or_mimic(text); } IntegerDesc desc; const char *pdata = text.c_str(); if (*pdata == '-') { pdata += 1; desc.negative = "-"; } if (strncmp(pdata, "0x", 2) == 0) { pdata += 2; desc.base = "0x"; } if (*pdata != '\0') { desc.value = std::string(pdata); } else { throw_or_mimic(text); } return desc; } inline bool IsTrueText(const std::string &text) { const char *pdata = text.c_str(); if (*pdata == 't' || *pdata == 'T') { pdata += 1; if (strncmp(pdata, "rue\0", 4) == 0) { return true; } } else if (strncmp(pdata, "1\0", 2) == 0) { return true; } return false; } inline bool IsFalseText(const std::string &text) { const char *pdata = text.c_str(); if (*pdata == 'f' || *pdata == 'F') { pdata += 1; if (strncmp(pdata, "alse\0", 5) == 0) { return true; } } else if (strncmp(pdata, "0\0", 2) == 0) { return true; } return false; } inline std::pair SplitSwitchDef(const std::string &text) { std::string short_sw, long_sw; const char *pdata = text.c_str(); if (isalnum(*pdata) && *(pdata + 1) == ',') { short_sw = std::string(1, *pdata); pdata += 2; } while (*pdata == ' ') { pdata += 1; } if (isalnum(*pdata)) { const char *store = pdata; pdata += 1; while (isalnum(*pdata) || *pdata == '-' || *pdata == '_') { pdata += 1; } if (*pdata == '\0') { long_sw = std::string(store, pdata - store); } else { throw_or_mimic(text); } } return std::pair(short_sw, long_sw); } inline ArguDesc ParseArgument(const char *arg, bool &matched) { ArguDesc argu_desc; const char *pdata = arg; matched = false; if (strncmp(pdata, "--", 2) == 0) { pdata += 2; if (isalnum(*pdata)) { argu_desc.arg_name.push_back(*pdata); pdata += 1; while (isalnum(*pdata) || *pdata == '-' || *pdata == '_') { argu_desc.arg_name.push_back(*pdata); pdata += 1; } if (argu_desc.arg_name.length() > 1) { if (*pdata == '=') { argu_desc.set_value = true; pdata += 1; if (*pdata != '\0') { argu_desc.value = std::string(pdata); } matched = true; } else if (*pdata == '\0') { matched = true; } } } } else if (strncmp(pdata, "-", 1) == 0) { pdata += 1; argu_desc.grouping = true; while (isalnum(*pdata)) { argu_desc.arg_name.push_back(*pdata); pdata += 1; } matched = !argu_desc.arg_name.empty() && *pdata == '\0'; } return argu_desc; } #else // CXXOPTS_NO_REGEX namespace { std::basic_regex integer_pattern ("(-)?(0x)?([0-9a-zA-Z]+)|((0x)?0)"); std::basic_regex truthy_pattern ("(t|T)(rue)?|1"); std::basic_regex falsy_pattern ("(f|F)(alse)?|0"); std::basic_regex option_matcher ("--([[:alnum:]][-_[:alnum:]]+)(=(.*))?|-([[:alnum:]]+)"); std::basic_regex option_specifier ("(([[:alnum:]]),)?[ ]*([[:alnum:]][-_[:alnum:]]*)?"); } // namespace inline IntegerDesc SplitInteger(const std::string &text) { std::smatch match; std::regex_match(text, match, integer_pattern); if (match.length() == 0) { throw_or_mimic(text); } IntegerDesc desc; desc.negative = match[1]; desc.base = match[2]; desc.value = match[3]; if (match.length(4) > 0) { desc.base = match[5]; desc.value = "0"; return desc; } return desc; } inline bool IsTrueText(const std::string &text) { std::smatch result; std::regex_match(text, result, truthy_pattern); return !result.empty(); } inline bool IsFalseText(const std::string &text) { std::smatch result; std::regex_match(text, result, falsy_pattern); return !result.empty(); } inline std::pair SplitSwitchDef(const std::string &text) { std::match_results result; std::regex_match(text.c_str(), result, option_specifier); if (result.empty()) { throw_or_mimic(text); } const std::string& short_sw = result[2]; const std::string& long_sw = result[3]; return std::pair(short_sw, long_sw); } inline ArguDesc ParseArgument(const char *arg, bool &matched) { std::match_results result; std::regex_match(arg, result, option_matcher); matched = !result.empty(); ArguDesc argu_desc; if (matched) { argu_desc.arg_name = result[1].str(); argu_desc.set_value = result[2].length() > 0; argu_desc.value = result[3].str(); if (result[4].length() > 0) { argu_desc.grouping = true; argu_desc.arg_name = result[4].str(); } } return argu_desc; } #endif // CXXOPTS_NO_REGEX #undef CXXOPTS_NO_REGEX } namespace detail { template struct SignedCheck; template struct SignedCheck { template void operator()(bool negative, U u, const std::string& text) { if (negative) { if (u > static_cast((std::numeric_limits::min)())) { throw_or_mimic(text); } } else { if (u > static_cast((std::numeric_limits::max)())) { throw_or_mimic(text); } } } }; template struct SignedCheck { template void operator()(bool, U, const std::string&) const {} }; template void check_signed_range(bool negative, U value, const std::string& text) { SignedCheck::is_signed>()(negative, value, text); } } // namespace detail template void checked_negate(R& r, T&& t, const std::string&, std::true_type) { // if we got to here, then `t` is a positive number that fits into // `R`. So to avoid MSVC C4146, we first cast it to `R`. // See https://github.com/jarro2783/cxxopts/issues/62 for more details. r = static_cast(-static_cast(t-1)-1); } template void checked_negate(R&, T&&, const std::string& text, std::false_type) { throw_or_mimic(text); } template void integer_parser(const std::string& text, T& value) { parser_tool::IntegerDesc int_desc = parser_tool::SplitInteger(text); using US = typename std::make_unsigned::type; constexpr bool is_signed = std::numeric_limits::is_signed; const bool negative = int_desc.negative.length() > 0; const uint8_t base = int_desc.base.length() > 0 ? 16 : 10; const std::string & value_match = int_desc.value; US result = 0; for (char ch : value_match) { US digit = 0; if (ch >= '0' && ch <= '9') { digit = static_cast(ch - '0'); } else if (base == 16 && ch >= 'a' && ch <= 'f') { digit = static_cast(ch - 'a' + 10); } else if (base == 16 && ch >= 'A' && ch <= 'F') { digit = static_cast(ch - 'A' + 10); } else { throw_or_mimic(text); } const US next = static_cast(result * base + digit); if (result > next) { throw_or_mimic(text); } result = next; } detail::check_signed_range(negative, result, text); if (negative) { checked_negate(value, result, text, std::integral_constant()); } else { value = static_cast(result); } } template void stringstream_parser(const std::string& text, T& value) { std::stringstream in(text); in >> value; if (!in) { throw_or_mimic(text); } } template ::value>::type* = nullptr > void parse_value(const std::string& text, T& value) { integer_parser(text, value); } inline void parse_value(const std::string& text, bool& value) { if (parser_tool::IsTrueText(text)) { value = true; return; } if (parser_tool::IsFalseText(text)) { value = false; return; } throw_or_mimic(text); } inline void parse_value(const std::string& text, std::string& value) { value = text; } // The fallback parser. It uses the stringstream parser to parse all types // that have not been overloaded explicitly. It has to be placed in the // source code before all other more specialized templates. template ::value>::type* = nullptr > void parse_value(const std::string& text, T& value) { stringstream_parser(text, value); } template void parse_value(const std::string& text, std::vector& value) { if (text.empty()) { T v; parse_value(text, v); value.emplace_back(std::move(v)); return; } std::stringstream in(text); std::string token; while(!in.eof() && std::getline(in, token, CXXOPTS_VECTOR_DELIMITER)) { T v; parse_value(token, v); value.emplace_back(std::move(v)); } } #ifdef CXXOPTS_HAS_OPTIONAL template void parse_value(const std::string& text, std::optional& value) { T result; parse_value(text, result); value = std::move(result); } #endif inline void parse_value(const std::string& text, char& c) { if (text.length() != 1) { throw_or_mimic(text); } c = text[0]; } template struct type_is_container { static constexpr bool value = false; }; template struct type_is_container> { static constexpr bool value = true; }; template class abstract_value : public Value { using Self = abstract_value; public: abstract_value() : m_result(std::make_shared()) , m_store(m_result.get()) { } explicit abstract_value(T* t) : m_store(t) { } ~abstract_value() override = default; abstract_value& operator=(const abstract_value&) = default; abstract_value(const abstract_value& rhs) { if (rhs.m_result) { m_result = std::make_shared(); m_store = m_result.get(); } else { m_store = rhs.m_store; } m_default = rhs.m_default; m_implicit = rhs.m_implicit; m_default_value = rhs.m_default_value; m_implicit_value = rhs.m_implicit_value; } void parse(const std::string& text) const override { parse_value(text, *m_store); } bool is_container() const override { return type_is_container::value; } void parse() const override { parse_value(m_default_value, *m_store); } bool has_default() const override { return m_default; } bool has_implicit() const override { return m_implicit; } std::shared_ptr default_value(const std::string& value) override { m_default = true; m_default_value = value; return shared_from_this(); } std::shared_ptr implicit_value(const std::string& value) override { m_implicit = true; m_implicit_value = value; return shared_from_this(); } std::shared_ptr no_implicit_value() override { m_implicit = false; return shared_from_this(); } std::string get_default_value() const override { return m_default_value; } std::string get_implicit_value() const override { return m_implicit_value; } bool is_boolean() const override { return std::is_same::value; } const T& get() const { if (m_store == nullptr) { return *m_result; } return *m_store; } protected: std::shared_ptr m_result{}; T* m_store{}; bool m_default = false; bool m_implicit = false; std::string m_default_value{}; std::string m_implicit_value{}; }; template class standard_value : public abstract_value { public: using abstract_value::abstract_value; CXXOPTS_NODISCARD std::shared_ptr clone() const override { return std::make_shared>(*this); } }; template <> class standard_value : public abstract_value { public: ~standard_value() override = default; standard_value() { set_default_and_implicit(); } explicit standard_value(bool* b) : abstract_value(b) { set_default_and_implicit(); } std::shared_ptr clone() const override { return std::make_shared>(*this); } private: void set_default_and_implicit() { m_default = true; m_default_value = "false"; m_implicit = true; m_implicit_value = "true"; } }; } // namespace values template std::shared_ptr value() { return std::make_shared>(); } template std::shared_ptr value(T& t) { return std::make_shared>(&t); } class OptionAdder; class OptionDetails { public: OptionDetails ( std::string short_, std::string long_, String desc, std::shared_ptr val ) : m_short(std::move(short_)) , m_long(std::move(long_)) , m_desc(std::move(desc)) , m_value(std::move(val)) , m_count(0) { m_hash = std::hash{}(m_long + m_short); } OptionDetails(const OptionDetails& rhs) : m_desc(rhs.m_desc) , m_value(rhs.m_value->clone()) , m_count(rhs.m_count) { } OptionDetails(OptionDetails&& rhs) = default; CXXOPTS_NODISCARD const String& description() const { return m_desc; } CXXOPTS_NODISCARD const Value& value() const { return *m_value; } CXXOPTS_NODISCARD std::shared_ptr make_storage() const { return m_value->clone(); } CXXOPTS_NODISCARD const std::string& short_name() const { return m_short; } CXXOPTS_NODISCARD const std::string& long_name() const { return m_long; } CXXOPTS_NODISCARD const std::string& essential_name() const { return m_long.empty() ? m_short : m_long; } size_t hash() const { return m_hash; } private: std::string m_short{}; std::string m_long{}; String m_desc{}; std::shared_ptr m_value{}; int m_count; size_t m_hash{}; }; struct HelpOptionDetails { std::string s; std::string l; String desc; bool has_default; std::string default_value; bool has_implicit; std::string implicit_value; std::string arg_help; bool is_container; bool is_boolean; }; struct HelpGroupDetails { std::string name{}; std::string description{}; std::vector options{}; }; class OptionValue { public: void parse ( const std::shared_ptr& details, const std::string& text ) { ensure_value(details); ++m_count; m_value->parse(text); m_long_name = &details->long_name(); } void parse_default(const std::shared_ptr& details) { ensure_value(details); m_default = true; m_long_name = &details->long_name(); m_value->parse(); } void parse_no_value(const std::shared_ptr& details) { m_long_name = &details->long_name(); } #if defined(CXXOPTS_NULL_DEREF_IGNORE) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wnull-dereference" #endif CXXOPTS_NODISCARD size_t count() const noexcept { return m_count; } #if defined(CXXOPTS_NULL_DEREF_IGNORE) #pragma GCC diagnostic pop #endif // TODO: maybe default options should count towards the number of arguments CXXOPTS_NODISCARD bool has_default() const noexcept { return m_default; } template const T& as() const { if (m_value == nullptr) { throw_or_mimic( m_long_name == nullptr ? "" : *m_long_name); } #ifdef CXXOPTS_NO_RTTI return static_cast&>(*m_value).get(); #else return dynamic_cast&>(*m_value).get(); #endif } private: void ensure_value(const std::shared_ptr& details) { if (m_value == nullptr) { m_value = details->make_storage(); } } const std::string* m_long_name = nullptr; // Holding this pointer is safe, since OptionValue's only exist in key-value pairs, // where the key has the string we point to. std::shared_ptr m_value{}; size_t m_count = 0; bool m_default = false; }; class KeyValue { public: KeyValue(std::string key_, std::string value_) : m_key(std::move(key_)) , m_value(std::move(value_)) { } CXXOPTS_NODISCARD const std::string& key() const { return m_key; } CXXOPTS_NODISCARD const std::string& value() const { return m_value; } template T as() const { T result; values::parse_value(m_value, result); return result; } private: std::string m_key; std::string m_value; }; using ParsedHashMap = std::unordered_map; using NameHashMap = std::unordered_map; class ParseResult { public: class Iterator { public: using iterator_category = std::forward_iterator_tag; using value_type = KeyValue; using difference_type = void; using pointer = const KeyValue*; using reference = const KeyValue&; Iterator() = default; Iterator(const Iterator&) = default; Iterator(const ParseResult *pr, bool end=false) : m_pr(pr) , m_iter(end? pr->m_defaults.end(): pr->m_sequential.begin()) { } Iterator& operator++() { ++m_iter; if(m_iter == m_pr->m_sequential.end()) { m_iter = m_pr->m_defaults.begin(); return *this; } return *this; } Iterator operator++(int) { Iterator retval = *this; ++(*this); return retval; } bool operator==(const Iterator& other) const { return m_iter == other.m_iter; } bool operator!=(const Iterator& other) const { return !(*this == other); } const KeyValue& operator*() { return *m_iter; } const KeyValue* operator->() { return m_iter.operator->(); } private: const ParseResult* m_pr; std::vector::const_iterator m_iter; }; ParseResult() = default; ParseResult(const ParseResult&) = default; ParseResult(NameHashMap&& keys, ParsedHashMap&& values, std::vector sequential, std::vector default_opts, std::vector&& unmatched_args) : m_keys(std::move(keys)) , m_values(std::move(values)) , m_sequential(std::move(sequential)) , m_defaults(std::move(default_opts)) , m_unmatched(std::move(unmatched_args)) { } ParseResult& operator=(ParseResult&&) = default; ParseResult& operator=(const ParseResult&) = default; Iterator begin() const { return Iterator(this); } Iterator end() const { return Iterator(this, true); } size_t count(const std::string& o) const { auto iter = m_keys.find(o); if (iter == m_keys.end()) { return 0; } auto viter = m_values.find(iter->second); if (viter == m_values.end()) { return 0; } return viter->second.count(); } const OptionValue& operator[](const std::string& option) const { auto iter = m_keys.find(option); if (iter == m_keys.end()) { throw_or_mimic(option); } auto viter = m_values.find(iter->second); if (viter == m_values.end()) { throw_or_mimic(option); } return viter->second; } const std::vector& arguments() const { return m_sequential; } const std::vector& unmatched() const { return m_unmatched; } const std::vector& defaults() const { return m_defaults; } const std::string arguments_string() const { std::string result; for(const auto& kv: m_sequential) { result += kv.key() + " = " + kv.value() + "\n"; } for(const auto& kv: m_defaults) { result += kv.key() + " = " + kv.value() + " " + "(default)" + "\n"; } return result; } private: NameHashMap m_keys{}; ParsedHashMap m_values{}; std::vector m_sequential{}; std::vector m_defaults{}; std::vector m_unmatched{}; }; struct Option { Option ( std::string opts, std::string desc, std::shared_ptr value = ::cxxopts::value(), std::string arg_help = "" ) : opts_(std::move(opts)) , desc_(std::move(desc)) , value_(std::move(value)) , arg_help_(std::move(arg_help)) { } std::string opts_; std::string desc_; std::shared_ptr value_; std::string arg_help_; }; using OptionMap = std::unordered_map>; using PositionalList = std::vector; using PositionalListIterator = PositionalList::const_iterator; class OptionParser { public: OptionParser(const OptionMap& options, const PositionalList& positional, bool allow_unrecognised) : m_options(options) , m_positional(positional) , m_allow_unrecognised(allow_unrecognised) { } ParseResult parse(int argc, const char* const* argv); bool consume_positional(const std::string& a, PositionalListIterator& next); void checked_parse_arg ( int argc, const char* const* argv, int& current, const std::shared_ptr& value, const std::string& name ); void add_to_option(OptionMap::const_iterator iter, const std::string& option, const std::string& arg); void parse_option ( const std::shared_ptr& value, const std::string& name, const std::string& arg = "" ); void parse_default(const std::shared_ptr& details); void parse_no_value(const std::shared_ptr& details); private: void finalise_aliases(); const OptionMap& m_options; const PositionalList& m_positional; std::vector m_sequential{}; std::vector m_defaults{}; bool m_allow_unrecognised; ParsedHashMap m_parsed{}; NameHashMap m_keys{}; }; class Options { public: explicit Options(std::string program, std::string help_string = "") : m_program(std::move(program)) , m_help_string(toLocalString(std::move(help_string))) , m_custom_help("[OPTION...]") , m_positional_help("positional parameters") , m_show_positional(false) , m_allow_unrecognised(false) , m_width(76) , m_tab_expansion(false) , m_options(std::make_shared()) { } Options& positional_help(std::string help_text) { m_positional_help = std::move(help_text); return *this; } Options& custom_help(std::string help_text) { m_custom_help = std::move(help_text); return *this; } Options& show_positional_help() { m_show_positional = true; return *this; } Options& allow_unrecognised_options() { m_allow_unrecognised = true; return *this; } Options& set_width(size_t width) { m_width = width; return *this; } Options& set_tab_expansion(bool expansion=true) { m_tab_expansion = expansion; return *this; } ParseResult parse(int argc, const char* const* argv); OptionAdder add_options(std::string group = ""); void add_options ( const std::string& group, std::initializer_list