MAKEINFO(1) User Commands MAKEINFO(1) NAME makeinfo - translate Texinfo documents SYNOPSIS makeinfo [OPTION]... TEXINFO-FILE... DESCRIPTION Translate Texinfo source documentation to various other formats, by default Info files suitable for reading online with Emacs or standalone GNU Info. General options: --error-limit=NUM quit after NUM errors (default 100). --document-language=STR locale to use in translating Texinfo keywords for the output document (default C). --force preserve output even if errors. --help display this help and exit. --no-validate suppress node cross-reference validation. --no-warn suppress warnings (but not errors). -v, --verbose explain what is being done. --version display version information and exit. Output format selection (default is to produce Info): --docbook output Docbook XML rather than Info. --html output HTML rather than Info. --xml output Texinfo XML rather than Info. --plaintext output plain text rather than Info. General output options: -E, --macro-expand=FILE output macro-expanded source to FILE, ignoring any @setfilename. --no-headers suppress node separators, Node: lines, and menus from Info output (thus producing plain text) or from HTML (thus producing shorter output); also, write to standard output by default. --no-split suppress the splitting of Info or HTML output, generate only one output file. --number-sections output chapter and sectioning numbers. -o, --output=FILE output to FILE (or directory if split HTML). Options for Info and plain text: --disable-encoding do not output accented and special characters in Info output based on @documentencoding. --enable-encoding override --disable-encoding (default). --fill-column=NUM break Info lines at NUM characters (default 72). --footnote-style=STYLE output footnotes in Info according to STYLE: `separate' to put them in their own node; `end' to put them at the end of the node, in which they are defined (this is the default). --paragraph-indent=VAL indent Info paragraphs by VAL spaces (default 3). If VAL is `none', do not indent; if VAL is `asis', preserve existing inden‐ tation. --split-size=NUM split Info files at size NUM (default 300000). Options for HTML: --css-include=FILE include FILE in HTML <style> output; read stdin if FILE is -. --css-ref=URL generate reference to a CSS file. --internal-links=FILE produce list of internal links in FILE. --transliterate-file-names produce file names in ASCII transliteration. Options for XML and Docbook: --output-indent=VAL indent XML elements by VAL spaces (default 2). If VAL is 0, ignorable whitespace is dropped. Input file options: --commands-in-node-names allow @ commands in node names. -D VAR define the variable VAR, as with @set. -I DIR append DIR to the @include search path. -P DIR prepend DIR to the @include search path. -U VAR undefine the variable VAR, as with @clear. Conditional processing in input: --ifdocbook process @ifdocbook and @docbook even if not generating Docbook. --ifhtml process @ifhtml and @html even if not generating HTML. --ifinfo process @ifinfo even if not generating Info. --ifplaintext process @ifplaintext even if not generating plain text. --iftex process @iftex and @tex; implies --no-split. --ifxml process @ifxml and @xml. --no-ifdocbook do not process @ifdocbook and @docbook text. --no-ifhtml do not process @ifhtml and @html text. --no-ifinfo do not process @ifinfo text. --no-ifplaintext do not process @ifplaintext text. --no-iftex do not process @iftex and @tex text. --no-ifxml do not process @ifxml and @xml text. Also, for the --no-ifFORMAT options, do process @ifnotFORMAT text. The defaults for the @if... conditionals depend on the output format: if generating HTML, --ifhtml is on and the others are off; if generating Info, --ifinfo is on and the others are off; if generating plain text, --ifplaintext is on and the others are off; if generating XML, --ifxml is on and the others are off. EXAMPLES makeinfo foo.texi write Info to foo's @setfilename makeinfo --html foo.texi write HTML to @setfilename makeinfo --xml foo.texi write Texinfo XML to @setfilename makeinfo --docbook foo.texi write DocBook XML to @setfilename makeinfo --no-headers foo.texi write plain text to standard output makeinfo --html --no-headers foo.texi write html without node lines, menus makeinfo --number-sections foo.texi write Info with numbered sections makeinfo --no-split foo.texi write one Info file however big REPORTING BUGS Email bug reports to<EMAIL_ADDRESS>general questions and discus‐ sion to<EMAIL_ADDRESS>Texinfo home page: http://www.gnu.org/software/texinfo/ COPYRIGHT Copyright © 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO The full documentation for makeinfo is maintained as a Texinfo manual. If the info and makeinfo programs are properly installed at your site, the command info makeinfo should give you access to the complete manual. makeinfo 4.13 September 2008 MAKEINFO(1)


A programming language is a formal language comprising a set of strings that produce various kinds of machine code output. Programming languages are one kind of computer language, and are used in computer programming to implement algorithms. Most programming languages consist of instructions for computers. There are programmable machines that use a set of specific instructions, rather than general programming languages. Since the early 1800s, programs have been used to direct the behavior of machines such as Jacquard looms, music boxes and player pianos.[1] The programs for these machines (such as a player piano's scrolls) did not produce different behavior in response to different inputs or conditions.
Thousands of different programming languages have been created, and more are being created every year. Many programming languages are written in an imperative form (i.e., as a sequence of operations to perform) while other languages use the declarative form (i.e. the desired result is specified, not how to achieve it).


|
|
Please review and submit your order Your company's default Shipping and Payment information is being used to process this order. To change any of this information simply use the links and/or buttons to do so. Keep in mind: Shipping information is controlled by $Cookies{'CoNo'}'s administrative user, your company's master user.
|
|
| | | |


|
Events
|
Sydney .NET User Group
|
|
In this week's User Group, Adam Cogan will continue his presentation from last month and talk
further about data-binding in
WinForm applications. Well present some tricks for adding null records,
take a detour and create some extended providers.
Kyall will be
explaining the mysterious Google PageRank Algorithm and run
through some search engine optimisation techniques to maximise your
website's "Google
Friendliness".
Thursday 22nd May 2003, 5:45 pm at Microsoft, 1 Epping Road.
|
SSW BIG Tech Breakfast Building Advanced Data-Centric WinForm Clients with
Data Binding
Friday 23rd May -
Special Price ONLY $49+GST
|
Advanced topics will be covered for creating WinForm data-centric applications, how to do them
well, and how to
do them quick. Well look at dynamically downloading and creating a form from the web, data-binding
in WinForm
applications, how to provide
input validation with the .NET Error Provider, custom
Validation Extended Providers
and how they can be used to speed up your GUI development.
More
Book NOW - Only
$49+GST
|
MSDN Updates
Australian Tour June 2003
|
|
A whole day dedicated to power programming in
.NET using ADO.NET, ASP.NET and Microsoft's Prescriptive Architecture
Group. Featuring two prominent coders in the industry - Jeff Prosise and Australia's very own
Dot Net Dan join us for
a very special MSDN update with one whole day dedicated to power programming in .NET!
More
|
|
|
|
News |
|
The Cutting Edge
|
| Microsoft tools are
the most important tools I have. I spend most of my time using
Outlook, Visual Studio.NET, SQL Server Enterprise Manager and
Access. However Microsoft tools don't do everything I want them to do.
Here's a review of some of my favourite third party tools for Web,
Windows, .NET and SQL Server development.
More
Cheers until next time,
Adam
SSW Chief Architect and Microsoft Regional Director,
Australia
Got a comment for Adam?
Email Adam
|
|
|
SSW makes the Deloitte Technology Fast 50 Awards
|
|
Ian Thatcher,
Leader Deloitte Technology Fast 50 program says, "To rank on the
Deloitte Technology Fast 50, companies must have an impressive level
of sustained revenue growth over a three-year period. SSW has proven
to be one of the fast-growth success stories in Australia, and we
applaud their success and vision."
More
|
|
| Sydney
.NET User Group Matrix
Reloaded Movie Night |
| Take the red pill once
again and join The Sydney .NET User Group for a night at the movies!
Sit back relax and enjoy the ride as you watch the next instalment
in the Matrix Trilogy,
The Matrix: Reloaded
.
The session is being shown at Fox Studios and starts at 6pm on
Wednesday the 21st of May.
Important! for those that have already registered with SSW you'll
also need to register on the Microsoft events website.
More |
|
| SSW develops a website for The
Clarence. |
| SSW has finished developing a
zippy new website for The Clarence. Done in ASP.NET its smart and crisp design
is just what they needed.
More
|
|
|
SSW Upgrades its .NET hosting
|
|
Our upgrade of the .NET Framework 1.0 and 1.1 now
means that SSW has much more to offer
to its hosting customers.
More
|
|
|
We're looking for Testimonials
|
|
SSW is
constantly redefining its products. We get tonnes of downloads a
month. We'd love to get your opinion on the things you like, and
things you don't like. Please
696e666f72407373772e636f6d2e6175 and let
us know.
|
|
|
New Version - SSW SQL Deploy
|
|
Automatically
Update SQL Server or MSDE Applications with SSW SQL Deploy
Bundle SQL Deploy when you distribute a new version of your
application to clients and all your database changes will happen
automatically. Simply save database changes from Enterprise Manager,
SQL Analyser or Visual Studio .NET as scripts (as most developers
already do) and this utility enables automatic data version
upgrades. Designed for Winforms, Webforms, VB, ASP and Access
applications (and more), SSW SQL Deploy means you never have to
worry about your Clients data when deploying applications again!
More
Download the free trial version
NOW
|
| SSW Software Audit |
| A crisis will pinpoint
the short falls of your current technologies. But why wait for
down-time or poor sales to discover where your application could be
improved?
More |
|
|
Tips |
What does the keyword shared
mean in VB.NET?
- John Liu
In VB 6, I could set a breakpoint when the
value of a variable
changed, or reached a certain value. Where is this in VB.NET? - David Klein
|
|
|
If you
like this newsletter, why not try |
Free Access Website
by Tony D'Ambra
http://www.freeaccess.cjb.net
|
Access Unlimited
by Garry Robinson
http://www.vb123.com
|
|


The All of Us Research Program (the “All of Us Research Program”) is part of an effort to advance individualized healthcare by enrolling one million or more participants to contribute their health data and developing custom tools and software to help researchers analyze that data. The goal of the All of Us Research Program is to speed up health research discoveries, enabling new kinds of individualized health care. Among the resources developed in connection with the All of Us Research Program is the Researcher Workbench, which is a platform and collection of tools through which researchers can access registered tiered data, workspaces, and tools such as a cohort builder, and an interactive notebook (the “Workbench”).
These Terms of Use (“Terms”) describe the terms and conditions that govern how Vanderbilt University Medical Center (“VUMC,” “We,” or “Us”) makes the Workbench available to users that meet the All of Us Research Program Workbench requirements, complete the registration process and are approved to access the Workbench (“Users”). These Terms, the All of Us Research Program Privacy Statement (“Privacy Statement”) and any applicable Third Party Terms referenced below govern use of the Workbench by each User, including you (“You”). Additionally, the All of Us Research Program Data User Code of Conduct (“Data User Code of Conduct”) describes how You can and cannot use the All of Us Research Program data, which includes any data that is made available through the Workbench.
PLEASE READ THESE TERMS CAREFULLY.   Registration. To access the Workbench (including any data, content, tools, software or other resources available through the Workbench), You must complete the registration process that is required for the appropriate tier of data You are seeking to access. Any data or information that You provide to Us in connection with application for registration must be true, current and complete. If any of Your data or information changes, You are responsible for promptly updating it on your personal profile page for the Workbench.
1.2. Account Login ID and Password. As part of the registration process, You will set Your account access login ID and password. Do not share Your login ID, password or other account information with anyone. It is Your responsibility to maintain the confidentiality of Your account information.  No Shared or Group Accounts Permitted. Your access to the Workbench, including any resources offered on or through Your account, is only for Your individual use and no other person’s use. You may not allow any other person to pose as You in connection with the Workbench or use Your account information. You may not use any other User’s account information. Shared or group accounts are prohibited.
1.4. Privacy Statement. As part of Your registration, account creation and use of the Workbench, We and/or Our providers may collect some data from You or about You and Your use of the Workbench. Our collection of that data, and how it is used, stored and shared is outlined in Our Privacy Statement.
1.5. Unauthorized Access. You agree to notify us immediately if You suspect or learn of any unauthorized access to Your account or compromise of Your account access information, or any other unauthorized use or security incidents related to the Workbench or the All of Us Research Program, (including any other User’s use of the Workbench or content for an unauthorized purpose). If you experience any login issues or security concerns, please contact our technical support staff at<EMAIL_ADDRESS>2.1. Conduct. You are solely responsible for Your conduct related to the Workbench and the All of Us Research Program, and for any content (such as external data or software) that You upload, post or otherwise send to the Workbench (“Your Content”). You must ensure that you have the rights and permissions to upload and use Your Content on the Workbench as contemplated by these Terms. You are solely responsible for maintaining backups of Your Content. Neither We nor our licensors or providers will be responsible for or have any liability for any loss or corruption, or unauthorized access to Your Content, or for the security of Your Content. You must use Workbench and any content, data, tools or other resources provided by Us or available through the Workbench in compliance with all laws, and solely for internal, non-commercial research conducted by You for the non-commercial purpose that You disclose to Us when You register for the Workbench or create a workspace for a project. Neither We, nor any third party licensor, provider or contractor, have any obligation or responsibility with respect to Your Content, or Your use of the Workbench or resources available through the Workbench.
2.2. Restrictions. You may not circumvent or attempt to circumvent (or allow any person to circumvent) the security and access control measures of the Workbench or any of Our sites or services. Use of the Workbench or any of the public forums or other aspects of the All of Us Research Program for the marketing of goods or services is prohibited. We do not endorse or express any opinion with respect to Your Content or Your activities, and You may not suggest or imply that We do or that You or Your products or services are in any way affiliated with Us or the All of Us Research Program. You may not use or upload any content that infringes upon any third-party rights, including copyright, trademark, patent, trade secret, moral rights, privacy rights, right of publicity or any other intellectual property or proprietary rights. You may not use the Workbench in any manner that is unlawful, harassing, abusive, threatening, harmful of another’s privacy, vulgar, defamatory, false, misleading, libelous, pornographic, obscene, offensive, promotes racism, bigotry, xenophobia, hatred, or physical harm of any kind against any group or individual, or is otherwise objectionable.
2.3. Monitoring. We may monitor, review and audit Your account activity to ensure compliance with these Terms and Your other agreements and applicable policies related to the All of Us Research Program. If there are findings of violation, or suspected violation, of these Terms, All of Us Data User Code of Conduct or other applicable agreement or policy, We reserve the right, in our sole discretion, to suspend or terminate Your account and/or implement other sanctions or corrective measures. Violations or perceived violations of our All of Us user agreements may be reported to law enforcement or appropriate individuals.
2.4. Confidentiality. You acknowledge that the Workbench (including any data, content, tools, software or other resources available through the Workbench) may include confidential or proprietary information. Except as expressly authorized in an applicable Data User Code of Conduct, You agree to keep the Workbench confidential and to not disclose it (or any part of it) to any third party, except for portion that: (i) is publicly available through no fault of You; (ii) You receive from somebody else without a confidentiality obligation; (iii) You independently develop without use of any portion of the Workbench.
3.1. Generally. Except for the limited permission to use the Workbench described in these Terms, We and, where applicable, Our licensors and providers, own and retain all right, title and interest in and to the Workbench (including any resources available through the Workbench) and all derivative works thereof (regardless of by whom prepared), and all related intellectual property and proprietary rights. Nothing in these Terms shall be construed to confer any rights by implication, estoppel, or otherwise as to any data, technology, patent rights, copyrights or other rights of Ours, Our licensors, or any other entity, whether existing now or in the future, and whether or not related to the Workbench (except for the limited permission described in these Terms). Under no circumstances may You: (i) reverse engineer, decompile or disassemble the Workbench or any software or other technology provided through, or used to deliver or display the Workbench, or any portion of it, or attempt to engage in any of such activities; (ii) transmit the Workbench (including any resources available through the Workbench) or otherwise permit it to be publicly accessible over a network, by any means, including but not limited to through the Internet or in the operation of a service bureau; (iii) remove, obscure or alter any disclaimers, or notices, including without limitation, copyright notice, trademark or other proprietary rights notices displayed or contained within the Workbench (including any resources available through the Workbench); or (iv) modify or create any derivative work of any Workbench or any part thereof. However, should you create any derivative works based on the Workbench despite the foregoing, You hereby agree that such derivative works are owned exclusively by Us. You hereby assign all right, title, and interest in such derivative works to Us.
3.2. Trademarks. The All of Us Research Program trademarks, logos, copyrighted works, text, graphics, logos, button icons, images, audio/video clips that are displayed on, or available through, the Workbench are the property of Us or Our licensors and may not be used in any manner without the prior written consent of Us or the licensor(s). Additionally, You may not use the name, mark, logo or other indicia of VUMC, Vanderbilt University or any of their affiliates in any public manner, or in any promotional or marketing materials (including, without limitation, on any website), or for any purposes whatsoever without Our prior written consent. Misuse of any of the trademarks is strictly prohibited.
3.3. Third Party Materials. The Workbench and any of Our services and resources may reference, contain, link, refer, or otherwise consist of content, software, services or other resources that are provided by third parties, including, but not limited to, the National Institutes of Health and the Centers for Disease Control and Prevention, The Broad Institute, Inc. and Verily Life Sciences LLC. Your use of such third party resources is subject to the terms of the third party provider of those services (which may be updated from time to time), including, but not limited to, the terms located at https://app.terra.bio/#terms-of-service (“Third Party Terms”). The content represented from various third-party sources does not necessarily belong to Us or the All of Us Research Program, and We have no responsibility for that content. Links that are provided to third party resources are provided to You only as a convenience. If you have questions or issues relating to third-party content, you should direct those to the sources of that content, not to Us or the All of Us Research Program.
These Terms shall be effective until expiration of the projects for which You successfully registered. Either You or We may terminate Your use of the Workbench at any time for any reason with no obligation or liability of any kind for such termination. Additionally, Your permission to access the Workbench will automatically terminate in its entirety if you breach these Terms. Upon termination of Your permission to access the Workbench, you must immediately cease use of the Workbench and Your Content is subject to deletion. Sections 2-8 shall survive expiration or termination of these Terms.
5.1. Availability; Changes. We reserve the right to modify or discontinue, temporarily or permanently, functions and features of the Workbench. You understand that You use, download or access, or otherwise are obtaining, tools, content or data through the Workbench at Your own discretion and risk, and there is no assurance of continued availability. We will make reasonable efforts to notify you of any planned downtime but reserve the right to suspend access without notice for updates, maintenance, or to address potential security or other issues.
5.2. Disclaimer.   Limitation. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL WE, OR OUR AFFILIATES, LICENSORS OR PROVIDERS, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, WITHOUT LIMITATION PERSONAL INJURY, WRONGFUL DEATH, INTERRUPTION OF SERVICE OR LOSS OF DATA, LOSS OF USE, LOSS OF BUSINESS, PROFITS OR REVENUE) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN WARRANTY, CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM OR RELATED TO THESE TERMS, THE WORKBENCH OR THE ALL OF US RESEARCH PROGRAM, EVEN IF ADVISED OF THE POSSIBILITY OR LIKELIHOOD OF SUCH DAMAGE. TO THE EXTENT CERTAIN JURISDICTIONS RESTRICT ANY OF THE ABOVE LIMITATIONS OF LIABILITY, SUCH LIMITATIONS SHALL NOT APPLY IN SUCH JURISDICTIONS TO THE EXTENT OF SUCH RESTRICTIONS. You are solely responsible for determining the appropriateness of using the Workbench, and you assume all risks and responsibilities associated with use of the Workbench and the resources available through the Workbench.
These Terms constitute the entire agreement between You and Us with respect to the Workbench (except as otherwise expressly provided herein) superseding all other prior agreements that might exist. We may revise the Terms at any time by posting the revised Terms through the Workbench or otherwise notifying You. All revised Terms are automatically effective as soon as they are posted or provided. Your continued use of the Workbench constitutes Your agreement to be bound by the revised Terms.
You may not assign or transfer Your rights or obligations under these Terms without Our prior written consent. Any other assignment or transfer by You is void. If any provision of these Terms is held invalid or unenforceable, such provision shall, to that extent, be deemed omitted, and the balance of these Terms will be enforceable in accordance with its own terms. These Terms are governed by the laws of Tennessee without regard to principles of conflicts of laws, and the state and federal courts sitting in Nashville, Tennessee shall have proper and exclusive jurisdiction and venue over any disputes arising from or relating to these Terms or any Program. If You do not comply with these Terms, and We do not take immediate action, We do not relinquish or waive any rights to take action in the future.
The All of Us Research Program respects the privacy of our users. This Privacy Statement describes the types of information we may collect from you or that you may provide, and how we are storing, using and protecting that information. The researcher data is collected and stored by the All of Us Research Program's Data and Research Center housed at Vanderbilt University Medical Center (VUMC). VUMC is the data controller and processor of your data, and you can contact the data protection officer at any time using the contact information provided in this Privacy Statement. In this Privacy Statement, “we” refers to VUMC as the data processor, and “you” refers to the entity that is the “researcher”.
Changes to the Privacy Statement may be made at any time to be consistent with updates in our resources and services, or to laws and regulations that the All of Us Research Program and VUMC must abide by. If there are significant changes to the Privacy Statement, we will alert you to the changes, either through an All of Us Research Program resources email, posting to the All of Us Research Hub website, and/or through other means. If you use the services after any changes to the Privacy Statement has been posted, that means you agree to all of the changes. Use of information we collect now is subject to the Privacy Statement in effect at the time such information is collected.
We collect several types of information from you either directly when you register for an All of Us Researcher Workbench account, or automatically when you use the All of Us Researcher Workbench. Data may be used in a variety of ways, including for your account creation and personalization, to ensure appropriate use of the All of Us Research Program data and platform, and to gather information about usage trends in order to improve our data and resources. The specific information we collect about you is outlined below.
2.1. Information collected directly from you.
We may collect information directly from you for the purposes of identity verification, account registration, and for billing purposes. Your data is stored in encrypted Google cloud-based databases that are protected by the All of Us Research Program’s security infrastructure, in compliance with applicable laws and regulations including the General Data Protection Regulation (GDPR). Only you, authorized staff and consortium members of the All of Us Research Program have access to your data; all access is tightly regulated.
The details of the information we collect and use, as well as length of storage is as follows:
2.1.1. Identity Verification Information.
As part of the registration process for requesting access to All of Us Research Program data, we may collect your name, date of birth, and identification associated with state or country-issued official identification documents such as a Passport or Driver’s License and Selfie. This information is collected by Idology, a third-party electronic identity verification service. Idology stores this information for a period of 14 days for the sole purpose of verification of your identity, and then deletes it. We do not store this information ourselves. Alternatively, if you have an eRA Commons Account, we may also collect your eRA Commons Account ID as part of identity verification.
2.1.2. Personal information for registration and description of Research Purpose.
As part of registration for access to All of Us Research Program data, we collect contact information, information regarding your employment and institutional affiliation, your professional role, your full address, your email and demographic information, including but not limited to, race/ethnicity, age, gender, education and disability status. This information is stored as part of your profile, and you can update this information at any time by logging into your All of Us account.
Your contact information may be used by the program for communication purposes, including sending you our newsletter or program updates by email. This information will not be distributed or sold for advertising or solicitation for goods and services. The description of the research purpose that you provide may be used by the Resource Access Board of the All of Us Research Program for review and oversight. Demographic data that you may provide, as well as information regarding your state and country of residence, education and institutional affiliation, may be used at the aggregate level for program assessment of researcher diversity and other researcher-related metrics. None of this information is used to make decisions regarding your access to the All of Us Research Program data.
For every project that you access through the All of Us Research Program, you will be asked to create a project-specific Research Workspace within the All of Us Researcher Workbench. You will be required to provide the research purpose for which you are accessing the All of Us data within that workspace. In order to comply with the 21st Century Cures Act [Section 2011: Precision Medicine Initiative; subsection d(6)], and for transparency with the Research participants regarding the use of their data, your name, institutional affiliation and/or employment information and the research purpose description you have provided will be displayed publicly on the All of Us Research Hub website. If you have any publications resulting from the use of All of Us Research Program data or resources, you will be required to disclose those to the program. Your publications will also be displayed publicly on the Research Hub Website to inform the All of Us Research Program participants. This information will be accessible in the Research Hub website indefinitely even after you delete your profile and stop accessing the All of Us data as an authorized researcher of the All of Us Research Program.
2.1.3. Billing information.
The use of the compute resource in the All of Us Researcher Workbench may incur costs, and we may collect your billing information to charge you for your use of the compute resource. This information is collected by Google Cloud Platform (GCP), and handled separately by GCP. We do not store or access this information. Your billing information is retained until you update or delete the information. None of your historical billing information is retained.
2.2. Information collected as part of your use of the All of Us Researcher Workbench.
We may collect information automatically as part of using the All of Us Researcher Workbench. The details of the information we collect, use, and length of storage is as follows:
2.2.1. Logs of database queries and data use.
As you use our resources, we may collect information about the database queries you run, and files you upload into or download from the Researcher Workbench. Logs of your queries and upload/download activity will be used for audit purposes and may be retained indefinitely. This information may be shared with members or groups within the All of Us Research Program as part of audit and oversight of data use, or to resolve or address privacy or security policy violations.
2.2.2. Account activity browsing patterns and cookies.
We may also collect data about your browsing and resource-use patterns and other information collected through cookies, Google Analytics or other technology. Your browsing patterns may be used to improve security, enhance your user experience, or as aggregate data to update and improve the resource. Data that is used for improving resource functionalities are limited to anonymized use patterns. These data are stored for up to 30 days.
Cookies are non-personally identifying information that are placed on your device that allows us to recognize and remember you (keep you signed in), and to improve your experience using our services (by understanding your browsing patterns). We do not use cookies for advertising purposes. Cookies do not harm your computer and do not contain any viruses. Disabling cookies may limit the functionality of this website.
When you use the program’s Researcher HelpDesk to report issues, ask questions or communicate through a researcher forum, your name and email address, along with the issues that you report may be collected and shared with the appropriate bodies in the program for resolving the issues you report and communicating back with you. / The data collected from your use of the resource is often accompanied by metadata such as your Workspace ID or User ID and the date or timestamp associated with your activity.
2.3. How third party services use your information.
As stated previously, some of your data may be collected or accessed by third party services (ie. Google Cloud Platform for billing and Idology for identity verification). The third party access is strictly regulated under program contracts that align with this Privacy Statement. Any use of your information for purposes other than providing the services specified in the contracts between the program and the third party services, and as outlined in this Privacy Statement, are strictly prohibited.
2.4. User rights and limitations.
By registering for access to All of Us data, you are agreeing to the All of Us Research Program Privacy Statement outlined in this document, including your rights and limitations thereof, as a data user. You may change or update your personal profile information at any time by logging into your All of Us account. You may prevent further data collection by deciding to leave the All of Us Research Program and deleting your user account. However, any data already collected will be retained for programmatic audits of data use. Your name, institutional affiliation and purpose for data access provided for any project workspaces you may have created will continue to be accessible in the All of Us Research Hub website. This is based on the legitimate interest of enabling programmatic audit against potential data privacy or security incidents, and for the purpose of transparency to the All of Us Research Participants regarding the use of their data.
If you are located in the European Economic Area (EEA) or other nation, please note that the regulations that apply to our processing of your data may be different from the laws in your jurisdiction. The following provisions regarding the General Data Protection Regulation (GDPR) apply to you if you are an EEA citizen or resident. GDPR provisions apply to ‘personal data’, meaning any information of yours that can directly or indirectly identify you.
3.1. Your rights under GDPR.
The GDPR provides you the following rights in order to maintain key transparency regarding what the All of Us Research Program does with your data. Rights of GDPR are not absolute. Under certain circumstances, rights may not be granted.
Right to be informed:
You have the right to be informed how your personal data is used, which is outlined in this Privacy Statement.
Right to access and Right to rectification:
You have the continued ability to access, change and modify information about yourself that you provide to the program, which you are able to do directly by logging into your Researcher Workbench account and accessing your profile.
Right to erasure, Right to restrict or object to processing:
As outlined above, on the basis of the legitimate interest of maintaining transparency with the program’s research participants, once you register to become an authorized user, your information cannot be removed from the All of Us Research Hub website. In the interest of protecting the data contributed to the program by our participants, we may retain your personal data, logs of your activity and database queries in the Researcher Workbench for the purpose of audit in the event of a privacy or security breach incident. Your data cannot be deleted, restricted, or stopped from being processed.
3.2. Contact information.
Your personal information is processed and stored by VUMC for the All of Us Research Program. To communicate with the data protection officer regarding the control and/or processing of your data, please contact the VUMC Data Privacy Office at<EMAIL_ADDRESS>or +1<PHONE_NUMBER>.


| Package | Description |
|---|---|
| botLot | |
| botLot.lotGraph | |
| botLot.pathFinding | |
| botLot.pathFinding.Algorithms |
| Modifier and Type | Field and Description |
|---|---|
private LotNode |
BotLot.curNode
the node we are currently at in the graph.
|
private LotNode |
BotLot.destNode
The node we are currently trying to get to.
|
| Modifier and Type | Method and Description |
|---|---|
LotNode |
BotLot.getClosestNotCompleteNode()
Returns the closest node that is not complete.
|
LotNode |
BotLot.getCurNode()
Gets the node we are currently at,
BotLot.curNode . |
LotNode |
BotLot.getDestNode()
Gets
BotLot.destNode . |
| Modifier and Type | Method and Description |
|---|---|
java.util.ArrayList<LotNode> |
BotLot.getConnectedNodes()
Gets a list of nodes that are connected to the curNode.
|
java.util.ArrayList<LotNode> |
BotLot.getConnectedNodes(java.util.Collection<LotEdge> edgesToAvoid)
Gets a list of nodes that are connected to the curNode.
|
| Modifier and Type | Method and Description |
|---|---|
BotLot |
BotLot.calcNewPath(LotNode destNode)
Calculates a new path to the given node using the functions in the BotLotWorkers class.
|
LotEdge |
BotLot.createEdgeTo(LotNode toNode)
Creates an edge to the given node.
|
java.lang.String |
BotLot.createEdgeToGiveId(LotNode toNode)
Creates an edge to the given node and returns it's ID.
|
BotLot |
BotLot.remEdge(LotNode toNode)
Removes an edge from
BotLot.curNode . |
BotLot |
BotLot.setCurNode(LotNode nodeIn)
Sets
BotLot.curNode to the node given. |
BotLot |
BotLot.setDestNode(LotNode nodeIn)
Sets
BotLot.destNode . |
| Constructor and Description |
|---|
BotLot(LotGraph graphIn,
LotNode nodeIn)
Constructor that takes in a graph and a node.
|
| Modifier and Type | Field and Description |
|---|---|
private LotNode |
LotEdge.endNode
The node this edge goes to.
|
| Modifier and Type | Field and Description |
|---|---|
private java.util.ArrayList<LotNode> |
LotGraph.nodes
The nodes we currently have.
|
| Modifier and Type | Method and Description |
|---|---|
LotNode |
LotNode.addEdge(LotEdge edgeIn)
Adds an edge to the node.
|
LotNode |
LotNode.addEdges(java.util.ArrayList<LotEdge> edgesIn)
Ads the set of edges to
edges . |
LotNode |
LotNode.clearEdges()
Clears the edge list.
|
LotNode |
LotGraph.createNode()
Creates a new node, adds it to
LotGraph.nodes . |
LotNode |
LotPath.getEndNode()
Gets the node at the end of the path.
|
LotNode |
LotEdge.getEndNode()
Returns
LotEdge.endNode . |
LotNode |
LotGraph.getNode(int nodeIndexIn)
Gets the node at the specified index in
LotGraph.nodes . |
LotNode |
LotGraph.getNode(LotEdge edgeIn)
Gets the node that is at the beginning of the given edge.
|
LotNode |
LotGraph.getNode(LotNode nodeIn)
Gets the specified node in
LotGraph.nodes . |
LotNode |
LotGraph.getNode(java.lang.String nodeIdIn)
Gets the specified node in
LotGraph.nodes . |
LotNode |
LotGraph.getNode(java.lang.String key,
java.lang.String value)
Gets the node with a particular key/value pair.
|
LotNode |
LotGraph.getNodeWithAtt(java.lang.String attKeyIn)
Gets the first occurrence of a node with the given attribute key.
|
LotNode |
LotGraph.getNodeWithAtt(java.lang.String attKeyIn,
java.lang.String attValIn)
Gets the first occurrence of a node with the given attribute key/value pair.
|
LotNode |
LotGraph.getOtherNode(int nodeFromIndex,
int edgeIndex)
Gets the node at the other side of an edge.
|
LotNode |
LotGraph.getOtherNode(LotNode nodeFromIn,
LotEdge edgeIn)
Gets the node at the other side of an edge.
|
LotNode |
LotGraph.getOtherNode(java.lang.String nodeFromId,
java.lang.String edgeInId)
Gets the node at the other side of an edge.
|
LotNode |
LotNode.remAtt(java.lang.String attKeyIn)
Removes an attribute from
attributes . |
LotNode |
LotNode.remEdge(int edgeIndexToRemove)
Removes an edge based on the index given.
|
LotNode |
LotNode.remEdge(LotEdge edgeToRemove)
Removes a specific edge from
edges . |
LotNode |
LotNode.remEdge(java.lang.String edgeIdToRemove)
Removes a specific edge from
edges . |
LotNode |
LotNode.remEdgeTo(LotNode nodeIn)
Removes an edge that goes to the given node.
|
LotNode |
LotNode.remEdgeTo(java.lang.String nodeIdIn)
Removes an edge that goes to the node with the given ID.
|
LotNode |
LotNode.setActNumEdges(int numEdgesIn)
Sets
actNumEdges . |
LotNode |
LotNode.setAtt(java.lang.String attKeyIn,
java.lang.String attValIn)
Sets a new value of the
attributes . |
LotNode |
LotNode.setAtts(java.util.HashMap<java.lang.String,java.lang.String> attsIn)
Sets
attributes to a new set of attributes. |
LotNode |
LotNode.setEdges(java.util.ArrayList<LotEdge> edgesIn)
Adds a list of edges.
|
LotNode |
LotNode.setId(java.lang.String idIn)
Sets
id . |
| Modifier and Type | Method and Description |
|---|---|
java.util.ArrayList<LotNode> |
LotNode.getConnectedNodes()
Gets a list of the nodes this node is connected to.
|
java.util.ArrayList<LotNode> |
LotGraph.getConnectedNodes(LotNode curNode)
Gets a list of nodes that are connected to the curNode.
|
java.util.ArrayList<LotNode> |
LotGraph.getConnectedNodes(LotNode curNode,
java.util.Collection<LotEdge> edgesToAvoid)
Gets a list of nodes that are connected to the curNode.
|
java.util.ArrayList<LotNode> |
LotGraph.getIncompleteNodes()
Returns a list of nodes that are incomplete.
|
java.util.ArrayList<LotNode> |
LotGraph.getNodes()
Gets
LotGraph.nodes . |
java.util.ArrayList<LotNode> |
LotGraph.getNodesWithAtt(java.lang.String attKeyIn)
Gets a list of nodes with a particular attribute, no matter the value.
|
java.util.ArrayList<LotNode> |
LotGraph.getNodesWithAtt(java.lang.String attKeyIn,
java.lang.String attValIn)
Gets a list of nodes with a particular attribute key-value pair.
|
java.util.ArrayList<LotNode> |
LotGraph.getNodesWithOutAtt(java.lang.String attKeyIn)
Gets a list of nodes without the given attribute key.
|
java.util.ArrayList<LotNode> |
LotGraph.getNodesWithOutAtt(java.lang.String attKeyIn,
java.lang.String attValIn)
Gets a list of nodes without the given attribute key/value pair.
|
| Modifier and Type | Method and Description |
|---|---|
LotGraph |
LotGraph.addNode(LotNode newNode)
Adds a new node to
LotGraph.nodes . |
LotPath |
LotPath.append(LotNode nodeIn)
Appends an edge from the last node pointed to in the set to the given node
|
boolean |
LotGraph.checkNodeEdges(LotNode nodeIn)
Checks if the edges held by the node are valid.
|
LotEdge |
LotGraph.createEdge(LotNode fromNode)
Creates an edge going out from a given node.
|
LotEdge |
LotGraph.createEdge(LotNode fromNode,
LotNode toNode)
Creates a new edge, adds it between two nodes, and
returns the new edge.
|
java.lang.String |
LotGraph.createEdgeGiveId(LotNode fromNode)
Creates an edge going out from a given node, and returns the id.
|
java.lang.String |
LotGraph.createEdgeGiveId(LotNode fromNode,
LotNode toNode)
Creates a new edge between two nodes, and
returns the new edge's Id.
|
int |
LotGraph.createEdgeGiveIndex(LotNode fromNode)
Creates an edge going out from a given node, and returns the index of it.
|
int |
LotGraph.createEdgeGiveIndex(LotNode fromNode,
LotNode toNode)
Creates an edge going out from a given node, and returns the index of it.
|
java.util.ArrayList<LotEdge> |
LotGraph.getConnectedEdges(LotNode curNode)
Gets a list of connected edges.
|
java.util.ArrayList<LotEdge> |
LotGraph.getConnectedEdges(LotNode curNode,
java.util.Collection<LotEdge> edgesToAvoid)
Gets a list of connected edges, not considering the ones in the given collection.
|
double |
LotGraph.getConnectedNodeEdgeRatio(LotNode curNode)
Gets the ratio of connected nodes to edges (connected to curNode).
|
double |
LotGraph.getConnectedNodeEdgeRatio(LotNode curNode,
java.util.Collection<LotEdge> edgesToAvoid)
Gets the ratio of connected nodes to edges (connected to curNode), excluding the edges given.
|
java.util.ArrayList<LotNode> |
LotGraph.getConnectedNodes(LotNode curNode)
Gets a list of nodes that are connected to the curNode.
|
java.util.ArrayList<LotNode> |
LotGraph.getConnectedNodes(LotNode curNode,
java.util.Collection<LotEdge> edgesToAvoid)
Gets a list of nodes that are connected to the curNode.
|
LotEdge |
LotGraph.getEdgeFromTo(LotNode fromNode,
LotNode toNode)
Gets the edge that goes from one node to another.
|
java.util.ArrayList<LotEdge> |
LotGraph.getEdgesFromTo(LotNode fromNode,
LotNode toNode)
Gets a list of edges going from one node to another.
|
java.util.ArrayList<LotEdge> |
LotNode.getEdgesTo(LotNode toNode)
Gets a list of edges going to a specified node.
|
java.util.ArrayList<LotEdge> |
LotGraph.getEdgesToNode(LotNode nodeIn)
Gets all the edges pointing to a particular node.
|
java.util.ArrayList<LotEdge> |
LotGraph.getEdgesToNode(LotNode nodeIn,
java.util.Collection<LotEdge> edgesToAvoid)
Gets all the edges pointing to a particular node, excluding ones contained in the given list.
|
LotEdge |
LotNode.getEdgeTo(LotNode nodeIn)
Gets the edge to a given node.
|
LotNode |
LotGraph.getNode(LotNode nodeIn)
Gets the specified node in
LotGraph.nodes . |
int |
LotGraph.getNodeIndex(LotNode nodeIn)
Gets the index of the specified node in the list in
LotGraph.nodes . |
int |
LotNode.getNumEdgesTo(LotNode toNode)
Gets the number of edges that go to a specified node from this node.
|
int |
LotGraph.getNumEdgesToNode(LotNode nodeIn)
Gets the number of edges the node has going to it.
|
int |
LotGraph.getNumEdgesToNode(LotNode nodeIn,
java.util.Collection<LotEdge> edgesToAvoid)
Gets the number of edges the node has going to it, excluding the ones in the given list.
|
LotNode |
LotGraph.getOtherNode(LotNode nodeFromIn,
LotEdge edgeIn)
Gets the node at the other side of an edge.
|
LotEdge |
LotNode.getShortestEdgeTo(LotNode toNode)
Gets the edge with the shortest metric to a specified node.
|
LotEdge |
LotNode.getShortestEdgeTo(LotNode toNode,
java.util.Collection<LotEdge> edgesToAvoid)
Gets the edge with the shortest metric to a specified node, excluding edges in the given set.
|
boolean |
LotGraph.hasEdgeBothWays(LotNode nodeOne,
LotNode nodeTwo)
Checks if the two nodes have edges both ways.
|
boolean |
LotGraph.hasEdgeFromTo(LotNode fromNode,
LotNode toNode)
Determines if there is an edge from the first node to the second node.
|
boolean |
LotNode.hasEdgeTo(LotNode nodeIn)
Determined if there is an edge to the given node.
|
boolean |
LotGraph.hasEdgeToNode(LotNode nodeIn)
Determines if there are edges pointing to the given node.
|
boolean |
LotGraph.hasEdgeToNode(LotNode nodeIn,
java.util.Collection<LotEdge> edgesToAvoid)
Determines if there are any edges pointing to a specified node, not counting edges in the given list.
|
boolean |
LotGraph.hasNode(LotNode nodeIn)
Determines if the node given is present in
LotGraph.nodes . |
boolean |
LotGraph.hasOtherNode(LotNode nodeFromIn,
LotEdge edgeIn)
Sees if there is a node at the other side of an edge.
|
boolean |
LotPath.hasWaypoint(LotNode nodeIn)
Determines if the path hits the node given during its travel.
|
boolean |
LotPath.hasWaypoint(LotNode nodeIn,
boolean countLast)
Determines if the path hits the node given during its travel.
|
boolean |
LotGraph.nodeIsFull(LotNode nodeIn)
Determines if the node with the given ID is full.
|
LotNode |
LotNode.remEdgeTo(LotNode nodeIn)
Removes an edge that goes to the given node.
|
LotGraph |
LotGraph.removeEdgeFromTo(LotNode fromNode,
LotNode toNode)
Removes an edge between two nodes.
|
LotGraph |
LotGraph.removeNode(LotNode nodeToRemove)
Removes the given node from
LotGraph.nodes . |
LotGraph |
LotGraph.setEdge(LotEdge edgeIn,
LotNode fromNode)
Sets a node's edge based on the given variables.
|
LotEdge |
LotEdge.setEndNode(LotNode nodeIn)
Sets the Edges' end node (
LotEdge.endNode ). |
| Modifier and Type | Method and Description |
|---|---|
boolean |
LotGraph.checkNodeEdges(java.util.Collection<LotNode> nodesIn)
Checks if all the nodes in the collection have valid edges.
|
LotGraph |
LotGraph.setNodes(java.util.Collection<LotNode> nodesIn)
Sets the
LotGraph.nodes to the list given. |
LotPath |
LotPath.setPathWithNodes(java.util.Collection<LotNode> nodeListIn)
Sets the current path to one given via a collection of nodes.
|
LotPath |
LotPath.setPathWithNodes(java.util.Collection<LotNode> nodeListIn,
java.util.Collection<LotEdge> edgesToAvoidIn)
Sets the current path to one given via a collection of nodes.
|
| Constructor and Description |
|---|
LotEdge(java.lang.String idIn,
LotNode nodeIn,
double metricIn,
java.util.HashMap<java.lang.String,java.lang.String> attsIn)
Constructor to initialize all the variables.
|
LotNode(LotNode nodeIn)
Constructor for taking in a LotNode.
|
| Constructor and Description |
|---|
LotGraph(java.util.Collection<LotNode> nodesIn)
Sets the initial node list
LotGraph.nodes . |
LotGraph(java.util.Collection<LotNode> nodesIn,
java.util.Random randIn,
long seedIn)
Sets the nodes and random number generator for the graph.
|
LotPath(java.util.Collection<LotNode> nodeListIn,
java.util.Collection<LotEdge> edgesToAvoid)
Creates a lot path out of a list of nodes.
|
| Modifier and Type | Method and Description |
|---|---|
static LotNode |
BotLotPF.getClosestIncompleteNode(BotLot lotIn)
Figures out which not complete node is closest to the curNode in the BotLot object.
|
static LotNode |
BotLotPF.getClosestIncompleteNode(BotLot lotIn,
java.util.Collection<LotEdge> edgesToAvoid)
Gets the closest not complete node to the current node given.
|
static LotNode |
BotLotPF.getClosestIncompleteNode(LotGraph graphIn,
LotNode curNode,
java.util.Collection<LotEdge> edgesToAvoid)
Gets the closest not complete node to the current node given.
|
| Modifier and Type | Method and Description |
|---|---|
static LotNode |
BotLotPF.getClosestIncompleteNode(LotGraph graphIn,
LotNode curNode,
java.util.Collection<LotEdge> edgesToAvoid)
Gets the closest not complete node to the current node given.
|
static LotPath |
BotLotPF.getPathToClosestNode(LotGraph graphIn,
LotNode curNode,
java.util.Collection<LotNode> destNodesIn,
java.util.Collection<LotEdge> edgesToAvoid)
Gets a path leading to the closest node in the set given.
|
static LotPath |
BotLotPF.getShortestPath(LotGraph graphIn,
LotNode curNode,
LotNode destNode)
Determines which path taking algorithm is probably best to use, and does it.
|
static LotPath |
BotLotPF.getShortestPath(LotGraph graphIn,
LotNode curNode,
LotNode destNode,
java.util.Collection<LotEdge> edgesToAvoid)
Determines which path taking algorithm is probably best to use, and does it.
|
static java.util.ArrayList<LotEdge> |
BotLotPFWorkers.getTrapEdges(LotGraph graphIn,
LotNode curNode,
LotNode destNode)
Gets a list of edges that would put a searching algorithm into a trapped or dead end state.
|
static boolean |
BotLotPFWorkers.hasPath(LotGraph graphIn,
LotNode curNode,
LotNode destNode)
Determines if there is a path from the curNode to the destNode.
|
static boolean |
BotLotPFWorkers.hasPath(LotGraph graphIn,
LotNode curNode,
LotNode destNode,
java.util.ArrayList<LotEdge> edgesToAvoid)
Determines if there is a path from the curNode to the destNode.
|
static boolean |
BotLotPFWorkers.pathIsValid(LotPath pathIn,
LotGraph graphIn,
LotNode curNode,
LotNode destNode,
java.util.ArrayList<LotEdge> edgesToAvoid)
Checks if the given path is valid, and actually describes a path through the graph.
|
static boolean |
BotLotPFWorkers.readyCheck(LotGraph graphIn,
LotNode curNode,
LotNode destNode,
boolean checkPath)
Checks if the data given is ready to have actions performed on them.
|
| Modifier and Type | Method and Description |
|---|---|
static LotPath |
BotLotPF.getPathToClosestNode(LotGraph graphIn,
LotNode curNode,
java.util.Collection<LotNode> destNodesIn,
java.util.Collection<LotEdge> edgesToAvoid)
Gets a path leading to the closest node in the set given.
|
| Modifier and Type | Field and Description |
|---|---|
private LotNode |
BotLotPFAlgorithm.curNode
The node we are starting at.
|
private LotNode |
BotLotPFAlgorithm.destNode
The node we are going to.
|
| Modifier and Type | Field and Description |
|---|---|
private java.util.Map<LotNode,java.lang.Double> |
BotLotPFDijkstra.distance |
private java.util.Map<LotNode,LotNode> |
BotLotPFDijkstra.predecessors |
private java.util.Map<LotNode,LotNode> |
BotLotPFDijkstra.predecessors |
private java.util.Set<LotNode> |
BotLotPFDijkstra.settledNodes |
private java.util.Set<LotNode> |
BotLotPFDijkstra.unSettledNodes |
| Modifier and Type | Method and Description |
|---|---|
LotNode |
BotLotPFAlgorithm.getCurNode()
Gets the current node held by this object.
|
LotNode |
BotLotPFAlgorithm.getDestNode()
Gets the destination node held by this object.
|
private LotNode |
BotLotPFDijkstra.getMinimum(java.util.Set<LotNode> vertexes)
Gets the minimum vertex from the set given.
|
| Modifier and Type | Method and Description |
|---|---|
private java.util.List<LotNode> |
BotLotPFDijkstra.getNeighbors(LotNode node)
Function for Dijkstra's algorithm.
|
| Modifier and Type | Method and Description |
|---|---|
private void |
BotLotPFDijkstra.findMinimalDistances(LotNode node)
Function for Dijkstra's Algorithm.
|
LotPath |
BotLotPFAlgorithm.findPath(LotGraph graphIn,
LotNode curNodeIn,
LotNode destNodeIn)
Sets the data, and runs the path finding code.
|
private double |
BotLotPFDijkstra.getDistance(LotNode node,
LotNode target)
Function for Dijktra's algorithm.
|
private java.util.List<LotNode> |
BotLotPFDijkstra.getNeighbors(LotNode node)
Function for Dijkstra's algorithm.
|
private LotPath |
BotLotPFDijkstra.getPath(LotNode target)
This method returns the path from the source to the selected target and NULL if no path exists (should never do this, as there is already a path existence check)
|
private double |
BotLotPFDijkstra.getShortestDistance(LotNode destination)
Function for Dijkstra's algorithm.
|
private boolean |
BotLotPFDijkstra.isSettled(LotNode vertex)
Determines if the node given is setled, i.e., in the settledNodes
|
BotLotPFAlgorithm |
BotLotPFAlgorithm.setAll(LotGraph graphIn,
LotNode curNodeIn,
LotNode destNodeIn)
Sets
BotLotPFAlgorithm.mainGraph , BotLotPFAlgorithm.curNode , and BotLotPFAlgorithm.destNode using separate variables. |
BotLotPFAlgorithm |
BotLotPFAlgorithm.setCurNode(LotNode nodeIn)
Sets the current node.
|
BotLotPFAlgorithm |
BotLotPFAlgorithm.setDestNode(LotNode nodeIn)
Sets the destination node.
|
| Modifier and Type | Method and Description |
|---|---|
private LotNode |
BotLotPFDijkstra.getMinimum(java.util.Set<LotNode> vertexes)
Gets the minimum vertex from the set given.
|
| Constructor and Description |
|---|
BotLotPFAlgorithm(LotGraph graphIn,
LotNode curNodeIn,
LotNode destNodeIn)
Constructor that initializes all the variables separately.
|
BotLotPFAlgorithm(LotGraph graphIn,
LotNode curNodeIn,
LotNode destNodeIn,
java.util.Collection<LotEdge> edgesToAvoidIn)
Constructor that initializes everything, actually everything.
|
BotLotPFDijkstra(LotGraph graphIn,
LotNode curNodeIn,
LotNode destNodeIn,
java.util.Collection<LotEdge> edgesToAvoidIn)
Constructor taking in all the things needed for the thing to work.
|
BotLotPFRandom(LotGraph graphIn,
LotNode curNodeIn,
LotNode destNodeIn)
Constructor that initializes all the variables separately.
|
BotLotPFRandom(LotGraph graphIn,
LotNode curNodeIn,
LotNode destNodeIn,
java.util.Collection<LotEdge> edgesToAvoidIn)
Constructor that initializes everything, actually everything.
|


Hypoxia is described as a state of oxygen deficiency in the blood, tissues, and cells sufficient to cause an impairment of body functions. Any condition that interferes with oxygen's normal path to the cells will bring on hypoxia.


FORGOT PASSWORD
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Mauris mattis,tortor sit amet tempor vehicula.
Email
This feild is required
This Email is not registered with us
CONTINUE


--- layout: post title: visiting old ghosts date: '2011-12-04T00:09:06-08:00' tags: [] tumblr_url: http://blog.dishbreak.com/post/13720166611/visiting-old-ghosts ---
Visiting old ghosts.


Please see below for my contact information and professional materials.
Professinal Information:Please visit my LinkedIn page for an overview of my professional experience.If you would like to see more about my professional experience, you can also view my resume.
<EMAIL_ADDRESS>GitHub:
If you enjoy what you have seen so far, don't forget to check out my GitHub for many projects I have completed,
and for projects I am currently working on!


Today tech industry has one of the lowest employee tenure average registered in the last few years. Most companies don’t take this too seriously yet. Tech is growing, and a lot of new job positions are opening. Maybe industry has a “complex”, thinking that employee tenure is too small of a price to pay for world dominance?
The fact is our mentalities have changed over the last decade. From 10 years tenure outlook to an average of 5 years now, everything changes, especially the rules of HR. Jobvite CEO Dan Finnigan says:
“It used to be that when you were looking at someone’s resume and they changed jobs more frequently than every five to seven years, they’d be labeled as a job hopper, unstable, greedy or selfish, unable to hold a job. Whatever it was, it usually flagged them and pulled them out of the stack. Now, in some regards, I think it has flipped. Now when recruiters look at someone who has stayed in a role for more than three years, the question is why? What have they been doing? … The world is changing really fast. There’s this intuition that if you’re doing the same job for more than three years and your job didn’t change, that means either your company’s not that dynamic or you are not that dynamic. I’m not saying that’s always the case, I’m just saying there’s this increasing perception.”
The tech industry has the lowest average employee tenureEmployee tenure between 2012-2013, has average of 5 years registered. Employees in this industry don’t stay in one company for a long period of time and seem to have little connection to or investment in their jobs. For tech companies, personnel retention is even more changeable because the average employee tenure being estimated at around 3 years.
Employee turnover is a costly issue for every company. When employee is leaving, a company loses both its financial investment in recruitment and training costs for new employee, as well as its non-financial investment (that can sometimes weigh harder) in knowledge, workplace collaboration and competitiveness.
Let’s take a look at the tech giants in USA:The overall average was 3.68 years back in January of 2012, the average dropped with 1 year, from 4.6 years in January 2010.
I haven't’ even thought that companies like Google and Amazon, where everybody wants to work, have so law employee tenure rate.
Economists are speculating that the main reason for this low tenure rate is the recent hiring spree, that brought on new, younger talent, placing the company average age at 29.
I think that this problem comes because talented people are more interested in creating their startups, and to not work for other people anymore. Some people are tired from large companies, where they can’t realize all ideas in life, because of the company culture and managerial staff. We can all see how Silicon Valley is growing day by day.
Google is represented in popular online articles as the Nirvana of technology workplaces: free five-star food, five months of paid maternity leave, great insurance, free yoga, kindergartens and gyms at the workplace, the freedom to work on one’s own projects 20 percent of the time and even death benefits. But benefits is not the only thing that employees are looking for.
My personal experience:
I have not so big experience behind, but as a young person I can say that I’ve worked in one place not more than 2 years, and every time when I felt that there is no growth within the company, I was looking for something different. That is what statistics says, people work approximately 3-5 years for one employer now.
How can we solve this problem?
I think it all depends from company’s culture and HR strategy. Here are few things that can help keep employees in your company for long term:
- freedom in realization ideas
- possibility to take leadership in some projects(it will help employee to feel his value in the company)
- give opportunity for personal and professional growth
- get feedback from employees serially, so you can understand what do they worry about, and what would be good to change.
Thank you,
Best
Iulia


“Human use, population, and technology have reached that certain stage where mother Earth no longer accepts our presence with silence.”
- Dalai Lama
The App for Homestead Procurement and E-Payment (A-HOPE) is an integrated mobile platform connecting the farmers/ growers, farmer producer organization, farm service providers, procurement agents, processing centers and the markets.


--- layout: post title: C# Compiler Emits call IL Instruction for Instance Methods Called on the Reference Returned by a Constructor date: 2010-09-15 14:34:01.000000000 +02:00 categories: [] tags: - C# - IL status: publish type: post published: true meta: {} author: login: admin email<EMAIL_ADDRESS>display_name: Philippe first_name: Philippe last_name: Vlérick excerpt: !ruby/object:Hpricot::Doc options: {} ---
Some time ago, I wrote how the call instruction could actually call an instance method on a null reference, and that inside this instance method, the this keyword would reference to null.
I find that very interesting, so I kept on disassembling some sample code to see what’s the generated IL and try to grasp some of the compiler’s logic.
Here is some simple code used to see what’s the IL generated by the C# compiler:
class Hello1 { internal String GetHello() { return "Hello1"; } } sealed class Hello2 { internal String GetHello() { return "Hello2"; } } static void Main(string[] args) { var h1 = new Hello1(); Console.WriteLine(h1.GetHello()); var h2 = new Hello2(); Console.WriteLine(h2.GetHello()); Console.WriteLine(new Hello1().GetHello()); Console.WriteLine(new Hello2().GetHello()); Console.ReadLine(); }
In the first two calls, we use a local variable that we call the GetHello method on, and in the two last calls we instantiate the object and call the GetHello method on the reference returned by the constructor, reference that we don’t keep.
Here’s the IL generated for the Main method:
We can see that in the first two call, the callvirt instruction is emitted by the compiler. As the call happens on a variable, the runtime type of the object could be different from the compile type, meaning that using the callvirt instruction makes sense (the compiler is not “smart” enough to detect that the compile time and the runtime types are the same).
In the two subsequent calls, however, as the method call is done on the reference returned by the constructor, the instruction emitted is call, which is slightly more performant than callvirt.
For more information on call and callvirt instructions, see ECMA 335 <IP_ADDRESS>.


|
Qt Raspicam
1.0
A demonstration of how to show live video from the Raspberry Pi camera using Qt.
|
This is a simple project that came from code I wrote while working at Spin Analytical on their Cell Alignment Tool (2016-2017). It uses the Qt framework to display live video from the Raspberry Pi camera with the raspicam library.
qmake
to generate the project's makefile, then make
to build.picam_live_preview.pro
: the Qt project file; make sure to add the two LIBS lines so that the raspicam library can work properly.main.cpp
: runs the application (nothing changed from the Qt starter template).mainwindow.h
/mainwindow.cpp
: the application's main window, responsible for starting the camera which runs in its own thread.mainwindow.ui
: the Qt designer file for the application's main window.cameraworker.h
/cameraworker.cpp
: the worker that grabs images from the camera and converts them to QImages which are displayed in the main window.See here for Doxygen documentation.


Learn how to set up your own virtual cloud.
Before setting up our ownCloud service, we need to have a server that allows us to upload our files to. With this server, it gives us the accessibilty to access our files anywhere with an internet connection.
LAMP stack stands for Linux, Apache, MySQL and PHP. Linux is to provide the operating system for the server, Apache is acting as a web server, MySQL acting as the database and PHP for web interface. In order for ownCloud to function completely, we need to have a LAMP stack.
ownCloud is an open-source file sharing server with collaboration feature that allows you to store your personal files on the cloud. This gives you the accessbility over the files online at anywhere in the world.
As ownCloud is an open-source, this gives you the control over your content and security and to avoid using third-party cloud storage services such as Dropbox or GoogleDrive.
Justin Ellingwood. (2018). Initial Server Setup with Ubuntu 18.04. Retrieved from: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04
Mark Drake. (2018). How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 18.04. Retrieved from: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04 Idan Cohen. (2018). How to Install Own Cloud On an an Ubuntu 18.04 Dedicated Server or VPS. Retrieved from: https://hostadvice.com/how-to/how-to-install-own-cloud-on-ubuntu-18-04-serve/


Last updated: 2021-07-03
Checks: 7 0
Knit directory: wildlife-haemoprotozoa/
This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20210212)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version 63bd5ef. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .DS_Store
Ignored: .Rhistory
Ignored: .Rproj.user/
Ignored: analysis/.DS_Store
Ignored: analysis/.Rhistory
Ignored: analysis/_footer.html
Ignored: data/.DS_Store
Ignored: output/.DS_Store
Untracked files:
Untracked: ENA_submission/
Untracked: NCBI_submission/
Untracked: Rplot02.pdf
Untracked: data/NGS_18S_kinet/
Untracked: data/Sanger-piroplasm/
Untracked: data/haemoprotozoa.csv
Untracked: data/haemoprotozoa.xlsx
Untracked: data/tryp-phyloseq/count_data_QC.xlsx
Untracked: data/tryp-phyloseq/count_data_raw.csv
Untracked: data/tryp-phyloseq/sampledata.xlsx
Untracked: melt.csv
Untracked: melt.xlsx
Untracked: microscopy/
Untracked: output/plots/
Unstaged changes:
Modified: README.md
Modified: code/usearchv11_18S_Kineto.sh
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were made to the R Markdown (analysis/tryp-01-NGS-bioinfo.Rmd
) and HTML (docs/tryp-01-NGS-bioinfo.html
) files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view the files as they were in that past version.
| File | Version | Author | Date | Message |
|---|---|---|---|---|
| Rmd | 63bd5ef | siobhon-egan | 2021-07-03 | Formatting and setup updates |
| html | 4608186 | siobhon-egan | 2021-07-02 | footer |
| html | a36fbcb | siobhon-egan | 2021-07-02 | Build site. |
| Rmd | 8e3850e | siobhon-egan | 2021-07-02 | Major update |
Analysis of Illumina MiSeq pair-end reads using USEARCH pipeline.
This script was run on Pawsey nimbus virtual machine but can be fun on any macOS or linux operating systems.
The following script was run using USEARCH version 11
A free 32-bit version is available for download here.
To install it, all you do is download or copy the binary to a directory that is accessible from the computer where you want to run the code. For convenience, you may want to rename the binary file to USEARCH to avoid typing long names like usearchXX.X.XX_iXXOS32. You can also update your $PATH
to save you referring to the path.
Execute permissions if required
chmod +x usearch11
To update profile add the following to the .bash_profile
#Adding USEARCH
export PATH="~/Programs/USEARCH:$PATH"
Check path is updated with
echo $PATH
Full script available at in the GitHub repository under the code/ directory here.
To execute run $ ./usearchv11_18S_Kineto.sh
from your terminal with raw data saved in directory called raw_data
.
#!/bin/bash
# author: Siobhon L. Egan
# License: MIT
# Date: Jan 2021
##########################################################################################
##########################################################################################
############################# USEARCH v11 complete pipeline ##############################
##########################################################################################
##########################################################################################
# Requirements: usearch11 must be installed on the PATH as "usearch11".
# Remeber if you have a large dataset you will need the 64 bit version.
# This script will work in unix and linux environments.
#
# This script taked raw MiSeq demultiplexed .fastq files for input and performs the following tasks:
#
# 1) Merge paired reads
# 2) Retrieve sequences matching primers
# 3) Quality filtering of `.fastq` sequence data and removal of short dimer seqs to generate `.fasta` sequence files
# 4) Removal low abundant sequences & singletons
# 5) Perform clustering sequences with
# 5a) UPARSE - to produce otus (using 97% similarity threshold)
# 5b) UNOISE3 - to produce zotus (i.e. zero-radius operational taxonomic units)
##########################################################################################
# Input raw unmerged filenames must be named "sample_id_SXXX_L001_R1.fastq" (read 1)
# and "sample_id_SXXX_L001_R2.fastq" (read 2) and all deposited in a directory specified
# by the "$raw_data" variable. "SXXX" is the sample number given by the MiSeq
# in the order you entered them in the Sample Sheet.
#
# Before use: $chmod 775 this_script.sh
# To run: $./this_script.sh
# This script will read any input directory specified by the "raw_data" variable, but will deposit all
# output into the current working diretory.
##########################################################################################
# Enter raw data directorry
raw_data="raw_data"
# Enter directory for merged output
merged_data="1.merged_data"
# Enter max diff for merging - default 5 but should increase for paired end
maxdiffs="15"
# Enter minimum merge overlap - default is 16 bp
overlap="20"
# Enter directory for sequences that are matched to primers
primer_matched="2a.primer_matches"
# Enter directory for sequences that do not match primers
primer_not_matched="2b.primer_not_matched"
# Enter forward sequences (5'-3'). Wildcard letters indicating degenerate positions in the primer are supported. See IUPAC(https://drive5.com/usearch/manual/IUPAC_codes.html) codes for details.
fwd_primer="ACCGTTTCGGCTTTTGTTGG" #18S kinetoplastid 825F Maslov et al. Biochem Parasitol (1996) 75(2): 197-205
rev_primer="GACTACAATGGTCTCTAATC" #18S kinetoplastid 662R Maslov et al. Biochem Parasitol (1996) 75(2): 197-205
# Enter directory for quality filtered output
QF="3.quality_filtered"
# Enter max error rate. Natural choice is 1, however may want to decrease to 0.5 or 0.25 for more stringent filtering.
max_ee="1"
# Enter min length of sequence for trimming in bp (eg. to keep all seqs above 200 bp enter "200")
minlen="150"
# Enter directory for labeled data
labeled_data="4.labeled_data"
# Enter directory for dereplicated sequences
derep_dir="5.derep_data"
# Enter directory for singlteton filter data
SF="6.singleton_filtered"
# Enter directory for singlteton sequences
low_abund_seqs="7.singleton_sequences"
# Enter max size to discard i.e. to discard singletons = 1, duplicates = 2
maxsize="1"
# Enter directory for sequence clustering
cluster="8.cluster"
# Enter sub-directory for uparse_otu clustering
uparse_otus="8a.otus"
# Enter sub-directory for unoise_zotu clustering
unoise_zotus="8b.zotus"
##########################################################################################
# DO NOT EDIT BELOW THIS LINE
##########################################################################################
# unzip raw_data
gunzip ${raw_data}/*.fastq.gz
##########################################################################################
##########################################################################################
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo Merging paried illumina fastq sequences
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Merge paired-end reads using `-fastq_mergepairs` command, and rename sequences. This would be done before primers are trimmed.
mkdir ${merged_data}
mkdir working1
#*****************************************************************************************
# Part 1: merge reads
for file1 in ${raw_data}/*R1.fastq
do
echo ""
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Merging paired reads
echo forward reads are:
echo $(basename ${file1})
echo reverse reads are:
echo $(basename ${file1} R1.fastq)R2.fastq
usearch11.0.667_i86osx64 -fastq_mergepairs ${file1} -reverse "${raw_data}/$(basename -s R1.fastq ${file1})R2.fastq" -fastqout "working1/$(basename "$file1")" -fastq_maxdiffs ${maxdiffs} -fastq_minovlen ${overlap} -report ${merged_data}/2a_merging_seqs_report.txt -tabbedout ${merged_data}/2b_tabbedout.txt
done
#*****************************************************************************************
# Part 2: Remove "_L001_R1" from filenames
for file2 in working1/*.fastq
do
rename="$(basename ${file2} _L001_R1.fastq).fastq"
mv ${file2} ${merged_data}/${rename}
done
#*****************************************************************************************
# Removing working directory
rm -r working1
##########################################################################################
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo Triming primers and distal bases
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# The `-search_pcr2` command searches for matches to a primer pair and outputs the sequence in between (i.e. amplicon with primers removed) into `primer_matched` file
mkdir ${primer_matched}
mkdir ${primer_not_matched}
for file3 in ${merged_data}/*.fastq
do
usearch11.0.667_i86osx64 -search_pcr2 ${file3} -fwdprimer ${fwd_primer} \
-revprimer ${rev_primer} \
-strand both -fastqout "${primer_matched}/$(basename ${file3})" -notmatchedfq "${primer_not_matched}/$(basename ${file3})" -tabbedout ${primer_matched}pcr2_output.txt
done
##########################################################################################
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo Quality control and removing dimer seqs
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Quality filtering of fastq files using the `-fastq_filter` command, output gives fasta files.
mkdir ${QF}
for file4 in ${primer_matched}/*.fastq
do
echo ""
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Quality control and removing dimer seqs
echo input is:
echo ${file4}
usearch11.0.667_i86osx64 -fastq_filter ${file4} -fastaout "${QF}/$(basename "$file4" .fastq).fasta" -fastq_maxee ${max_ee} -fastq_minlen ${minlen}
done
##########################################################################################
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo Renameing sequences with ">barcodelabel=sample_id;sequence_id"
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# For this script to run correctly input fasta label must be formatted >sequence_id and filename must be sample_id.fasta.
# Result will be ">barcodelabel=sample_id;sequenceid"
mkdir ${labeled_data}
mkdir working2
#*****************************************************************************************
# Part 1: Remove ">" from start of sequence_ID
for file5 in ${QF}/*.fasta
do
sed -e 's/>/>barcodelabel=;/g' ${file5} > working2/$(basename "$file5" .fasta).txt
done
#*****************************************************************************************
# Part 2: Add sample_ID (should be filename) to produce ">barcodelabel=sample_ID;sequence_ID"
for file6 in working2/*.txt
do
sample_id=$(basename ${file6} .txt)
echo ${sample_id}
sed -e "s/;/${sample_id};/g" ${file6} > "${labeled_data}/$(basename "$file6" .txt).fasta"
done
#*****************************************************************************************
# Remove working directories
rm -r working2
################################################################################################
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo Removing low abundant seqs singletons per sample
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Remove low abundant sequences (e.g. singletons) in samples using the `-fastx_uniques` command
mkdir ${derep_dir}
mkdir ${SF}
mkdir ${low_abund_seqs}
#*****************************************************************************************
# Part 1: Dereplicating
for file7 in ${labeled_data}/*.fasta
do
echo ""
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Removing singletons step 1: derep_fulllength
echo input is:
echo ${file7}
usearch11.0.667_i86osx64 -fastx_uniques ${file7} -fastaout "${derep_dir}/$(basename "$file7" .fasta).fasta" -sizeout
done
#*****************************************************************************************
# Part 2: Filtering low abundant seqs {maxsize}
for file8 in ${derep_dir}/*.fasta
do
echo ""
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Removing singletons step 2: sorting uniques
echo input is:
echo ${file8}
usearch11.0.667_i86osx64 -sortbysize ${file8} -fastaout "${low_abund_seqs}/$(basename "$file8" .fasta).fasta" -maxsize ${maxsize}
done
#*****************************************************************************************
# Step 3: Mapping reads
for file9 in ${labeled_data}/*.fasta
do
echo ""
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Removing singletons step 3: mapping reads to low abundant uniques
echo input is:
echo ${file9}
usearch11.0.667_i86osx64 -search_exact ${file9} -db "${low_abund_seqs}/$(basename "$file9" .fasta).fasta" -strand plus -notmatched "${SF}/$(basename "$file9" .fasta).fasta"
done
################################################################################################
################################################################################################
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo CLUSTERING
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Concatenate all singleton filter sequences into a single fasta file
# Find the set of unique sequences in an input file, also called dereplication using `-fastx_uniques` command
mkdir ${cluster}
cat ${SF}/*.fasta > ${cluster}/all_SF.fasta
cd ${cluster}
usearch11.0.667_i86osx64 -fastx_uniques all_SF.fasta -fastaout all_SF_DR.fasta -sizeout
#*****************************************************************************************
echo ----------------------------------------------------------------------------
echo Part a - Generating UPARSE OTUs
echo ----------------------------------------------------------------------------
# Cluster sequences in 97% operational taxonomic units (OTUs) using UPARSE algorithm `-cluster_otus` command and generate an OTU table
mkdir ${uparse_otus}
cd ${uparse_otus}
usearch11.0.667_i86osx64 -cluster_otus ../all_SF_DR.fasta -otus uparse_otus.fasta -relabel OTU
usearch11.0.667_i86osx64 -usearch_global ../all_SF.fasta -db uparse_otus.fasta -strand both -id 0.97 -otutabout uparse_otu_tab.txt -biomout uparse_otu_biom.biom
# The next two lines are options - they produce a distance matrix file and then a tree (newick format)
# Current parameters are a guide only and you will need to optimse them for your data
# Large datasets can take a long time, so you can skip this part for now to speed up analysis
# usearch11.0.667_i86osx64 -calc_distmx uparse_otus.fasta -tabbedout uparse_otus_distmx.txt -maxdist 0.2 -termdist 0.3
# usearch11.0.667_i86osx64 -cluster_aggd uparse_otus_distmx.txt -treeout uparse_otus_clusters.tree -clusterout uparse_otus_clusters.txt \
# -id 0.80 -linkage min
cd ..
#*****************************************************************************************
echo ----------------------------------------------------------------------------
echo Part b - Generating UNOISE ZOTUs
echo ----------------------------------------------------------------------------
# Cluster sequences in zero-radius operational taxonomic units (ZOTUs) using `-unoise3` command and generate a ZOTU table
mkdir ${unoise_zotus}
cd ${unoise_zotus}
usearch11.0.667_i86osx64 -unoise3 ../all_SF_DR.fasta -zotus unoise_zotus.fasta -tabbedout unoise_tab.txt
usearch11.0.667_i86osx64 -fastx_relabel unoise_zotus.fasta -prefix Otu -fastaout unoise_zotus_relabeled.fasta -keep_annots
usearch11.0.667_i86osx64 -otutab ../all_SF.fasta -zotus unoise_zotus_relabeled.fasta -otutabout unoise_otu_tab.txt -biomout unoise_otu_biom.biom -mapout unoise_map.txt -notmatched unoise_notmatched.fasta -dbmatched dbmatches.fasta -sizeout
# The next two lines are options - they produce a distance matrix file and then a tree (newick format)
# Current parameters are a guide only and you will need to optimse them for your data
# Large datasets can take a long time, so you can skip this part for now to speed up analysis
# usearch11.0.667_i86osx64 -calc_distmx unoise_zotus.fasta -tabbedout unoise_zotus_distmx.txt -maxdist 0.2 -termdist 0.3
# usearch11.0.667_i86osx64 -cluster_aggd unoise_zotus_distmx.txt -treeout unoise_zotus_clusters.tree -clusterout unoise_zotus_clusters.txt \
# -id 0.80 -linkage min
cd ..
cd ..
################################################################################################
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo ANALYSIS COMPLETE
echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
################################################################################################
Resulting zOTUs were then subject to BLAST analysis (BLASTN 2.11.0+) against NCBI nucleotide collection (nt) database. The top 100 BLAST hits were then downloaded for downstream taxonomy analysis.
Nucleotide sequences were subject to BLAST analysis (BLASTN 2.11.0+1 using MegaBLAST2 against NCBI nucleotide collection (nt) database.
Filtered tops hit by evalue, percentage identity and query coverage to retrieve the top hit.
Using the top hit nucleotide accession number I then retrieved the taxonid using the following:
for ACC in A00002 X53307 BB145968 CAA42669 V00181 AH002406 HQ844023
do
echo -n -e "$ACC\t"
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&id=${ACC}&rettype=fasta&retmode=xml" |\
grep TSeq_taxid |\
cut -d '>' -f 2 |\
cut -d '<' -f 1 |\
tr -d "\n"
echo
done
To get sequence description information use the following:
for ACC in A00002 X53307 BB145968 CAA42669 V00181 AH002406 HQ844023
do
echo -n -e "$ACC\t"
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&id=${ACC}&rettype=fasta&retmode=xml" |\
grep TSeq_defline |\
cut -d '>' -f 2 |\
cut -d '<' -f 1 |\
tr -d "\n"
echo
done
Use TaxonKit to get lineage information. Documentation here, GitHub repo here
Install - for linux, other platforms available here
wget https://github.com/shenwei356/taxonkit/releases/download/v0.7.1/taxonkit_linux_amd64.tar.gz
wget https://github.com/shenwei356/csvtk/releases/download/v0.22.0/csvtk_linux_amd64.tar.gz
#unzip
tar -zxvf *.tar.gz
Download and decompress taxdump
wget -c ftp://ftp.ncbi.nih.gov/pub/taxonomy/taxdump.tar.gz
tar -zxvf taxdump.tar.gz
mkdir -p $HOME/.taxonkit
cp names.dmp nodes.dmp delnodes.dmp merged.dmp $HOME/.taxonkit
Show lineage consisting of taxids:
taxonkit lineage -t taxids.txt \
| csvtk pretty -t
Write lineage information to text file
taxonkit lineage taxids.txt | awk '$2!=""' > lineage.txt
Reformat lineage file to the following output: {k};{p};{c};{o};{f};{g};{s}
taxonkit reformat lineage.txt | tee lineage.txt.reformat
cut -f 1,3 lineage.txt.reformat
Align output to show taxonomic classification clearly
\lineage.txt \
| taxonkit reformat \
| csvtk -H -t cut -f 1,3 \
| csvtk -H -t sep -f 2 -s ';' -R \
| csvtk add-header -t -n taxid,kindom,phylum,class,order,family,genus,species \
| csvtk pretty -t
Note this was run using R version 4.0.3 and RStudo version 1.4. See R info for full details of R session.
Install libraries if required
Only need to run this code once.
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
# phyloseq
source('http://bioconductor.org/biocLite.R')
biocLite('phyloseq')
#tidyverse
install. packages("tidyverse")
#ampvis2
install.packages("remotes")
remotes::install_github("MadsAlbertsen/ampvis2")
#ampvis2extras
install.packages("BiocManager")
BiocManager::install("kasperskytte/ampvis2extras")
#ggpubr
install.packages("ggpubr")
#agricolae
install.packages("agricolae")
install.packages("remotes")
remotes::install_github("DanielSprockett/reltools")
devtools::install_github('jsilve24/philr')
#decontam
BiocManager::install("decontam")
library(decontam)
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("Biostrings")
Load libraries
pkgs <- c( "qiime2R", "phyloseq", "tidyverse", "ampvis2",
"ampvis2extras", "ggpubr", "agricolae", "plotly",
"viridis", "cowplot", "MicrobeR", "microbiome",
"reshape", "decontam", "data.table", "ape", "DESeq2",
"vegan","microbiomeutilities", "knitr", "tibble", "dplyr",
"patchwork","Biostrings")
lapply(pkgs, require, character.only = TRUE)
# set theme
theme_set(theme_bw())
Generate phyloseq object from spreadsheets.
Import ASV/OTU count data
count_data <- read_csv("data/tryp-phyloseq/count_data_raw.csv")
# use first column as label for rows
count_data_lab = column_to_rownames(count_data, var = "#Zotu ID")
# Make matrix
otumat <- as.matrix(count_data_lab)
Import taxonomy data
taxonomy <- read_csv("data/tryp-phyloseq/taxonomy.csv",
col_types = cols(Accession_description = col_skip(),
`Accession no.` = col_skip(), evalue = col_skip(),
`per. Ident` = col_skip(), taxid = col_skip()))
# use first column as label for rows
taxonomy_lab = column_to_rownames(taxonomy, var = "#Zotu ID")
taxmat <- as.matrix(taxonomy_lab)
Check the class of the otumat and taxmat objects, they MUST be in matrix format. Then we can great a phyloseq object called physeq from the otu and taxonomy tables and check the sample names.
class(otumat)
class(taxmat)
OTU = otu_table(otumat, taxa_are_rows = TRUE)
TAX = tax_table(taxmat)
physeq = phyloseq(OTU, TAX)
physeq
sample_names(physeq)
Add metadata and sequence data
Add sequences to phyloseq object
# read sequence file
rep.seqs <- Biostrings::readDNAStringSet("data/tryp-phyloseq/unoise_zotus.fasta", format = "fasta")
Add metadata, importing gDNAID as factor to be able to merge later on
metadata <- read_csv("data/tryp-phyloseq/sampledata.csv")
metadata_lab = column_to_rownames(metadata, var = "SampleID")
sampledata = sample_data(data.frame(metadata_lab))
sampledata
Create final phyloseq object
Now you can merge your data to create a final phyloseq object
ps_raw_tryp = merge_phyloseq(physeq, sampledata, rep.seqs)
Filter out negative controls and after identifying threshold from positive reads transform zOTU count data
ps_raw_tryp@otu_table [, 1:580][ps_raw_tryp@otu_table [, 1:580] < 150] <- 0
QC_otu = ps_raw_tryp@otu_table
write.csv(QC_otu, "data/tryp_phyloseq/count_data_QC.csv")
sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Mojave 10.14.6
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
locale:
[1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8
attached base packages:
[1] parallel stats4 stats graphics grDevices utils datasets
[8] methods base
other attached packages:
[1] Biostrings_2.58.0 XVector_0.30.0
[3] patchwork_1.1.1 knitr_1.31
[5] microbiomeutilities_1.00.12 vegan_2.5-7
[7] lattice_0.20-41 permute_0.9-5
[9] DESeq2_1.30.1 SummarizedExperiment_1.20.0
[11] Biobase_2.50.0 MatrixGenerics_1.2.1
[13] matrixStats_0.58.0 GenomicRanges_1.42.0
[15] GenomeInfoDb_1.26.2 IRanges_2.24.1
[17] S4Vectors_0.28.1 BiocGenerics_0.36.0
[19] ape_5.4-1 data.table_1.14.0
[21] decontam_1.10.0 reshape_0.8.8
[23] microbiome_1.13.9 MicrobeR_0.3.2
[25] cowplot_1.1.1 viridis_0.5.1
[27] viridisLite_0.3.0 plotly_4.9.3
[29] agricolae_1.3-3 ggpubr_0.4.0
[31] ampvis2extras_0.1.5 ampvis2_2.6.7
[33] forcats_0.5.1 stringr_1.4.0
[35] dplyr_1.0.5 purrr_0.3.4
[37] readr_1.4.0 tidyr_1.1.2
[39] tibble_3.1.0 ggplot2_3.3.3
[41] tidyverse_1.3.0 phyloseq_1.34.0
[43] qiime2R_0.99.4 workflowr_1.6.2
loaded via a namespace (and not attached):
[1] bit64_4.0.5 DelayedArray_0.16.2 rpart_4.1-15
[4] RCurl_1.98-1.2 doParallel_1.0.16 generics_0.1.0
[7] RSQLite_2.2.3 combinat_0.0-8 bit_4.0.4
[10] xml2_1.3.2 lubridate_1.7.10 httpuv_1.5.5
[13] assertthat_0.2.1 xfun_0.21 hms_1.0.0
[16] jquerylib_0.1.3 evaluate_0.14 promises_<IP_ADDRESS>
[19] fansi_0.4.2 progress_1.2.2 dbplyr_2.1.0
[22] readxl_1.3.1 igraph_1.2.6 DBI_1.1.1
[25] geneplotter_1.68.0 htmlwidgets_1.5.3 ellipsis_0.3.1
[28] backports_1.2.1 picante_1.8.2 annotate_1.68.0
[31] vctrs_0.3.7 abind_1.4-5 cachem_1.0.4
[34] withr_2.4.1 checkmate_2.0.0 treeio_1.14.3
[37] prettyunits_1.1.1 cluster_2.1.1 lazyeval_0.2.2
[40] crayon_1.4.1 genefilter_1.72.1 pkgconfig_2.0.3
[43] zCompositions_1.3.4 nlme_3.1-152 nnet_7.3-15
[46] rlang_0.4.10 questionr_0.7.4 lifecycle_1.0.0
[49] miniUI_<IP_ADDRESS> modelr_0.1.8 cellranger_1.1.0
[52] rprojroot_2.0.2 Matrix_1.3-2 aplot_0.0.6
[55] phangorn_2.5.5 carData_3.0-4 Rhdf5lib_1.12.1
[58] reprex_1.0.0 base64enc_0.1-3 pheatmap_1.0.12
[61] whisker_0.4 png_0.1-7 bitops_1.0-6
[64] rhdf5filters_1.2.0 blob_1.2.1 jpeg_0.1-8.1
[67] rstatix_0.7.0 DECIPHER_2.18.1 ggsignif_0.6.1
[70] rtk_<IP_ADDRESS> klaR_0.6-15 scales_1.1.1
[73] memoise_2.0.0 magrittr_2.0.1 plyr_1.8.6
[76] gghalves_0.1.1 zlibbioc_1.36.0 compiler_4.0.3
[79] philr_1.16.0 RColorBrewer_1.1-2 cli_2.3.1
[82] ade4_1.7-16 htmlTable_2.1.0 Formula_1.2-4
[85] MASS_7.3-53.1 mgcv_1.8-34 tidyselect_1.1.0
[88] stringi_1.5.3 highr_0.8 yaml_2.2.1
[91] locfit_1.5-9.4 latticeExtra_0.6-29 ggrepel_0.9.1
[94] grid_4.0.3 sass_0.3.1 fastmatch_1.1-0
[97] tools_4.0.3 rio_0.5.26 rstudioapi_0.13
[100] foreach_1.5.1 foreign_0.8-81 git2r_0.28.0
[103] gridExtra_2.3 Rtsne_0.15 digest_0.6.27
[106] rvcheck_0.1.8 BiocManager_1.30.10 shiny_1.6.0
[109] quadprog_1.5-8 Rcpp_1.0.6 car_3.0-10
[112] broom_0.7.5 later_<IP_ADDRESS> httr_1.4.2
[115] AnnotationDbi_1.52.0 colorspace_2.0-0 rvest_0.3.6
[118] XML_3.99-0.5 fs_1.5.0 truncnorm_1.0-8
[121] splines_4.0.3 tidytree_0.3.3 multtest_2.46.0
[124] xtable_1.8-4 jsonlite_1.7.2 ggtree_2.4.1
[127] AlgDesign_1.2.0 R6_2.5.0 Hmisc_4.5-0
[130] NADA_1.6-1.1 pillar_1.5.1 htmltools_<IP_ADDRESS>
[133] mime_0.10 glue_1.4.2 fastmap_1.1.0
[136] DT_0.17 BiocParallel_1.24.1 ggnet_0.1.0
[139] codetools_0.2-18 utf8_1.2.1 bslib_<IP_ADDRESS>01
[142] network_1.16.1 curl_4.3 zip_2.1.1
[145] openxlsx_4.2.3 survival_3.2-7 rmarkdown_2.7.2
[148] biomformat_1.18.0 munsell_0.5.0 rhdf5_2.34.0
[151] GenomeInfoDbData_1.2.4 iterators_1.0.13 labelled_2.7.0
[154] haven_2.3.1 reshape2_1.4.4 gtable_0.3.0
Zhang Z, Schwartz S, Wagner L, Miller W. A greedy algorithm for aligning DNA sequences. J Comput Biol. 2000, 7(1-2):203-14. doi: 10.1089/10665270050081478.↩
Morgulis A, Coulouris G, Raytselis Y, Madden TL, Agarwala R, Schäffer AA. Database indexing for production MegaBLAST searches. Bioinformatics. 2008, 24(16):1757-64. doi: 10.1093/bioinformatics/btn322.↩
Project website by Siobhon L. Egan, 2021. This site was created in R Markdown with workflowr