diff --git a/.github/workflows/dev-ci-cd.yaml b/.github/workflows/dev-ci-cd.yaml index e1407015..0bde2784 100644 --- a/.github/workflows/dev-ci-cd.yaml +++ b/.github/workflows/dev-ci-cd.yaml @@ -75,6 +75,9 @@ jobs: touch ${{ github.workspace }}/deploy/dev/secrets/hf_token.txt echo "${{ secrets.HF_TOKEN }}" >> ${{ github.workspace }}/deploy/dev/secrets/hf_token.txt chmod 400 ${{ github.workspace }}/deploy/dev/secrets/hf_token.txt + touch ${{ github.workspace }}/deploy/dev/secrets/pg_password.txt + echo "${{ secrets.DEV_PG_PASSWORD }}" >> ${{ github.workspace }}/deploy/dev/secrets/pg_password.txt + chmod 400 ${{ github.workspace }}/deploy/dev/secrets/pg_password.txt # create env file to set tag(s) for docker-compose - name: Create Env File @@ -87,12 +90,12 @@ jobs: # stop any existing docker compose that's running - name: Stop Docker Compose run: | - ssh submit-t3desk 'bash -s' < ${{ github.workspace }}/deploy/dev/dev-stop.sh + ssh submit06 'bash -s' < ${{ github.workspace }}/deploy/dev/dev-stop.sh # copy repository to machine - name: Copy Repository run: | - rsync -e ssh -r ${{ github.workspace}}/* --exclude .git/ --delete submit-t3desk:~/A2rchi-dev/ + rsync -e ssh -r ${{ github.workspace}}/* --exclude .git/ --delete submit06:~/A2rchi-dev/ # run deploy script - name: Run Deploy Script @@ -100,18 +103,12 @@ jobs: export tag="${GITHUB_REF#refs/heads/}" export tag="${tag//\//-}.${GITHUB_SHA}" sed -i "s/BASE_TAG/${tag}/" ${{ github.workspace }}/deploy/dev/dev-install.sh - ssh submit-t3desk 'bash -s' < ${{ github.workspace }}/deploy/dev/dev-install.sh + ssh submit06 'bash -s' < ${{ github.workspace }}/deploy/dev/dev-install.sh # clean up secret files - name: Remove Secrets from Runner run: | - rm ${{ github.workspace }}/deploy/dev/secrets/cleo_*.txt - rm ${{ github.workspace }}/deploy/dev/secrets/imap_*.txt - rm ${{ github.workspace }}/deploy/dev/secrets/sender_*.txt - rm ${{ github.workspace }}/deploy/dev/secrets/flask_uploader_app_secret_key.txt - rm ${{ github.workspace }}/deploy/dev/secrets/uploader_salt.txt - rm ${{ github.workspace }}/deploy/dev/secrets/openai_api_key.txt - rm ${{ github.workspace }}/deploy/dev/secrets/hf_token.txt + rm ${{ github.workspace }}/deploy/dev/secrets/*.txt # print job status - run: echo "🍏 This job's status is ${{ job.status }}." diff --git a/.github/workflows/prod-801-ci-cd.yaml b/.github/workflows/prod-801-ci-cd.yaml index 49b6affa..9d9429b6 100644 --- a/.github/workflows/prod-801-ci-cd.yaml +++ b/.github/workflows/prod-801-ci-cd.yaml @@ -42,6 +42,9 @@ jobs: touch ${{ github.workspace }}/deploy/prod-801/secrets/hf_token.txt echo "${{ secrets.HF_TOKEN }}" >> ${{ github.workspace }}/deploy/prod-801/secrets/hf_token.txt chmod 400 ${{ github.workspace }}/deploy/prod-801/secrets/hf_token.txt + touch ${{ github.workspace }}/deploy/prod-801/secrets/pg_password.txt + echo "${{ secrets.PROD_801_PG_PASSWORD }}" >> ${{ github.workspace }}/deploy/prod-801/secrets/pg_password.txt + chmod 400 ${{ github.workspace }}/deploy/prod-801/secrets/pg_password.txt # create env file to set tag(s) for docker-compose - name: Create Env File @@ -72,10 +75,7 @@ jobs: # clean up secret files - name: Remove Secrets from Runner run: | - rm ${{ github.workspace }}/deploy/prod-801/secrets/flask_uploader_app_secret_key.txt - rm ${{ github.workspace }}/deploy/prod-801/secrets/uploader_salt.txt - rm ${{ github.workspace }}/deploy/prod-801/secrets/openai_api_key.txt - rm ${{ github.workspace }}/deploy/prod-801/secrets/hf_token.txt + rm ${{ github.workspace }}/deploy/prod-801/secrets/*.txt # print job status - run: echo "🍏 This job's status is ${{ job.status }}." \ No newline at end of file diff --git a/.github/workflows/prod-ci-cd.yaml b/.github/workflows/prod-ci-cd.yaml index eafcadff..ad035343 100644 --- a/.github/workflows/prod-ci-cd.yaml +++ b/.github/workflows/prod-ci-cd.yaml @@ -75,6 +75,9 @@ jobs: touch ${{ github.workspace }}/deploy/prod/secrets/hf_token.txt echo "${{ secrets.HF_TOKEN }}" >> ${{ github.workspace }}/deploy/prod/secrets/hf_token.txt chmod 400 ${{ github.workspace }}/deploy/prod/secrets/hf_token.txt + touch ${{ github.workspace }}/deploy/prod/secrets/pg_password.txt + echo "${{ secrets.PROD_PG_PASSWORD }}" >> ${{ github.workspace }}/deploy/prod/secrets/pg_password.txt + chmod 400 ${{ github.workspace }}/deploy/prod/secrets/pg_password.txt # create env file to set tag(s) for docker-compose - name: Create Env File @@ -105,13 +108,7 @@ jobs: # clean up secret files - name: Remove Secrets from Runner run: | - rm ${{ github.workspace }}/deploy/prod/secrets/cleo_*.txt - rm ${{ github.workspace }}/deploy/prod/secrets/imap_*.txt - rm ${{ github.workspace }}/deploy/prod/secrets/sender_*.txt - rm ${{ github.workspace }}/deploy/prod/secrets/flask_uploader_app_secret_key.txt - rm ${{ github.workspace }}/deploy/prod/secrets/uploader_salt.txt - rm ${{ github.workspace }}/deploy/prod/secrets/openai_api_key.txt - rm ${{ github.workspace }}/deploy/prod/secrets/hf_token.txt + rm ${{ github.workspace }}/deploy/prod/secrets/*.txt # print job status - run: echo "🍏 This job's status is ${{ job.status }}." diff --git a/.github/workflows/prod-root-ci-cd.yaml b/.github/workflows/prod-root-ci-cd.yaml index 154ca05a..ba4d87e6 100644 --- a/.github/workflows/prod-root-ci-cd.yaml +++ b/.github/workflows/prod-root-ci-cd.yaml @@ -42,6 +42,9 @@ jobs: touch ${{ github.workspace }}/deploy/prod-root/secrets/hf_token.txt echo "${{ secrets.HF_TOKEN }}" >> ${{ github.workspace }}/deploy/prod-root/secrets/hf_token.txt chmod 400 ${{ github.workspace }}/deploy/prod-root/secrets/hf_token.txt + touch ${{ github.workspace }}/deploy/prod-root/secrets/pg_password.txt + echo "${{ secrets.PROD_ROOT_PG_PASSWORD }}" >> ${{ github.workspace }}/deploy/prod-root/secrets/pg_password.txt + chmod 400 ${{ github.workspace }}/deploy/prod-root/secrets/pg_password.txt # create env file to set tag(s) for docker-compose - name: Create Env File @@ -72,10 +75,7 @@ jobs: # clean up secret files - name: Remove Secrets from Runner run: | - rm ${{ github.workspace }}/deploy/prod-root/secrets/flask_uploader_app_secret_key.txt - rm ${{ github.workspace }}/deploy/prod-root/secrets/uploader_salt.txt - rm ${{ github.workspace }}/deploy/prod-root/secrets/openai_api_key.txt - rm ${{ github.workspace }}/deploy/prod-root/secrets/hf_token.txt + rm ${{ github.workspace }}/deploy/prod-root/secrets/*.txt # print job status - run: echo "🍏 This job's status is ${{ job.status }}." \ No newline at end of file diff --git a/.gitignore b/.gitignore index bdd9ff66..2eaa0d0e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ venv *sqlite_db .vscode 801-content/ +logos/ diff --git a/A2rchi/chains/chain.py b/A2rchi/chains/chain.py index dbc8b6a0..c2ea02a6 100644 --- a/A2rchi/chains/chain.py +++ b/A2rchi/chains/chain.py @@ -2,7 +2,6 @@ from chromadb.config import Settings from langchain.vectorstores import Chroma -from threading import Lock, Thread import chromadb import time @@ -16,7 +15,6 @@ def __init__(self): into a format that the chain can use. Then, it creates the chain using those documents. """ - self.lock = Lock() self.kill = False from A2rchi.utils.config_loader import Config_Loader @@ -55,8 +53,7 @@ def update_vectorstore_and_create_chain(self): settings=Settings(allow_reset=True, anonymized_telemetry=False), # NOTE: anonymized_telemetry doesn't actually do anything; need to build Chroma on our own without it ) - # acquire lock and construct chain - self.lock.acquire() + # construct chain vectorstore = Chroma( client=client, collection_name=self.collection_name, @@ -65,7 +62,6 @@ def update_vectorstore_and_create_chain(self): chain = BaseChain.from_llm(self.llm, vectorstore.as_retriever(), return_source_documents=True) print(f"N entries: {client.get_collection(self.collection_name).count()}") print("Updated chain with new vectorstore") - self.lock.release() return chain @@ -135,10 +131,8 @@ def __call__(self, history): chat_history = history[:-1] if history is not None else None # make the request to the chain - self.lock.acquire() answer = chain({"question": question, "chat_history": chat_history}) print(f" INFO - answer: {answer}") - self.lock.release() # delete chain object to release chain, vectorstore, and client for garbage collection del chain diff --git a/A2rchi/interfaces/chat_app/app.py b/A2rchi/interfaces/chat_app/app.py index e051904d..04be7bc4 100644 --- a/A2rchi/interfaces/chat_app/app.py +++ b/A2rchi/interfaces/chat_app/app.py @@ -1,28 +1,93 @@ from A2rchi.chains.chain import Chain from A2rchi.utils.config_loader import Config_Loader from A2rchi.utils.data_manager import DataManager +from A2rchi.utils.env import read_secret +from A2rchi.utils.sql import SQL_INSERT_CONVO, SQL_INSERT_FEEDBACK, SQL_QUERY_CONVO +from datetime import datetime from pygments import highlight -from pygments.lexers import BashLexer,PythonLexer,JavaLexer,JavascriptLexer,BashLexer,CppLexer,CLexer,TypeScriptLexer,HtmlLexer,FortranLexer,JuliaLexer,MathematicaLexer,MatlabLexer +from pygments.lexers import ( + BashLexer, + PythonLexer, + JavaLexer, + JavascriptLexer, + CppLexer, + CLexer, + TypeScriptLexer, + HtmlLexer, + FortranLexer, + JuliaLexer, + MathematicaLexer, + MatlabLexer +) from pygments.formatters import HtmlFormatter from flask import request, jsonify, render_template from flask_cors import CORS from threading import Lock -from typing import Optional, List, Tuple +from typing import List -import numpy as np - -import json -import re import mistune as mt +import numpy as np import os +import psycopg2 +import psycopg2.extras import yaml -import time # DEFINITIONS -QUERY_LIMIT = 1000 # max number of queries +QUERY_LIMIT = 10000 # max number of queries per conversation + + +class AnswerRenderer(mt.HTMLRenderer): + """ + Class for custom rendering of A2rchi output. Child of mistune's HTMLRenderer, with custom overrides. + Code blocks are structured and colored according to pygment lexers + """ + RENDERING_LEXER_MAPPING = { + "python": PythonLexer, + "java": JavaLexer, + "javascript": JavascriptLexer, + "bash": BashLexer, + "c++": CppLexer, + "cpp": CppLexer, + "c": CLexer, + "typescript": TypeScriptLexer, + "html": HtmlLexer, + "fortran" : FortranLexer, + "julia" : JuliaLexer, + "mathematica" : MathematicaLexer, + "matlab": MatlabLexer + } + + def __init__(self): + self.config = Config_Loader().config + super().__init__() + + def block_text(self,text): + #Handle blocks of text (the negatives of blocks of code) and sets them in paragraphs + return f"""

{text}

""" + + def block_code(self, code, info=None): + # Handle code blocks (triple backticks) + if info not in self.RENDERING_LEXER_MAPPING.keys(): info = 'bash' #defaults in bash + code_block_highlighted = highlight(code.strip(), self.RENDERING_LEXER_MAPPING[info](stripall=True), HtmlFormatter()) + + if self.config["interfaces"]["chat_app"]["include_copy_button"]: + button = """""" + else: button = "" + + return f"""
+
+ {info}{button} +
+
{code_block_highlighted} +
+
""" + + def codespan(self, text): + # Handle inline code snippets (single backticks) + return f"""{text}""" class ChatWrapper: @@ -33,12 +98,22 @@ def __init__(self): # load configs self.config = Config_Loader().config self.global_config = self.config["global"] + self.utils_config = self.config["utils"] self.data_path = self.global_config["DATA_PATH"] # initialize data manager self.data_manager = DataManager() self.data_manager.update_vectorstore() + # store postgres connection info + self.pg_config = { + "password": read_secret("POSTGRES_PASSWORD"), + **self.utils_config["postgres"], + } + self.conn = None + self.cursor = None + + # initialize lock and chain self.lock = Lock() self.chain = Chain() self.number_of_queries = 0 @@ -56,58 +131,6 @@ def convert_to_app_history(history): return [list(entry) for entry in history] - @staticmethod - def convert_to_chain_history(history): - """ - Input: the history in the form of a list of lists, where the first entry of each tuple is - the author of the text and the second entry is the text itself - - Output: the history in the form of a list of tuples, where the first entry of each tuple is - the author of the text and the second entry is the text itself (native A2rchi history format) - """ - return [tuple(entry) for entry in history] - - - @staticmethod - def update_or_add_discussion(data_path, json_file, discussion_id, discussion_contents = None, discussion_feedback = None): - print(" INFO - entered update_or_add_discussion.") - - # read the existing JSON data from the file - data = {} - try: - with open(os.path.join(data_path, json_file), 'r') as f: - data = json.load(f) - print(" INFO - json_file found.") - - except FileNotFoundError: - print(" ERROR - json_file not found. Creating a new one") - - # update or add discussion - discussion_dict = data.get(str(discussion_id), {}) - - discussion_dict["meta"] = discussion_dict.get("meta", {}) - if str(discussion_id) not in data.keys(): #first time in discusssion - discussion_dict["meta"]["time_first_used"] = time.time() - discussion_dict["meta"]["time_last_used"] = time.time() - - if discussion_contents is not None: - print(" INFO - found contents.") - discussion_dict["contents"] = discussion_contents - discussion_dict["meta"]["times_chain_was_called"] = discussion_dict["meta"]["times_chain_was_called"] + [time.time()] if ("times_chain_was_called" in discussion_dict["meta"].keys()) else [time.time()] - if discussion_feedback is not None: - print(" INFO - found feedback.") - discussion_dict["feedback"] = discussion_dict["feedback"] + [discussion_feedback] if ("feedback" in discussion_dict.keys() and isinstance(discussion_dict["feedback"], List)) else [discussion_feedback] - - data[str(discussion_id)] = discussion_dict - - # create data path if it doesn't exist - os.makedirs(data_path, exist_ok=True) - - # write the updated JSON data back to the file - with open(os.path.join(data_path, json_file), 'w') as f: - json.dump(data, f) - - @staticmethod def format_code_in_text(text): """ @@ -123,37 +146,142 @@ def format_code_in_text(text): return text - def __call__(self, history: Optional[List[Tuple[str, str]]], discussion_id: Optional[int]): + def insert_feedback(self, feedback): + """ + """ + # construct insert_tup (mid, feedback_ts, feedback, feedback_msg, incorrect, unhelpful, inappropriate) + insert_tup = ( + feedback['message_id'], + feedback['feedback_ts'], + feedback['feedback'], + feedback['feedback_msg'], + feedback['incorrect'], + feedback['unhelpful'], + feedback['inappropriate'], + ) + + # create connection to database + self.conn = psycopg2.connect(**self.pg_config) + self.cursor = self.conn.cursor() + self.cursor.execute(SQL_INSERT_FEEDBACK, insert_tup) + self.conn.commit() + + # clean up database connection state + self.cursor.close() + self.conn.close() + self.cursor, self.conn = None, None + + + def query_conversation_history(self, conversation_id): + """ + Return the conversation history as an ordered list of tuples. The order + is determined by ascending message_id. Each tuple contains the sender and + the message content + """ + # create connection to database + self.conn = psycopg2.connect(**self.pg_config) + self.cursor = self.conn.cursor() + + # query conversation history + self.cursor.execute(SQL_QUERY_CONVO, (conversation_id,)) + history = self.cursor.fetchall() + + # clean up database connection state + self.cursor.close() + self.conn.close() + self.cursor, self.conn = None, None + + return history + + + def insert_conversation(self, conversation_id, user_message, a2rchi_message, is_refresh=False) -> List[int]: + """ + """ + print(" INFO - entered insert_conversation.") + + # parse user message / a2rchi message if not None + user_sender, user_content, user_msg_ts = user_message + a2rchi_sender, a2rchi_content, a2rchi_msg_ts = a2rchi_message + + # construct insert_tups + insert_tups = ( + [ + # (conversation_id, sender, content, ts) + (conversation_id, user_sender, user_content, user_msg_ts), + (conversation_id, a2rchi_sender, a2rchi_content, a2rchi_msg_ts), + ] + if not is_refresh + else [ + (conversation_id, a2rchi_sender, a2rchi_content, a2rchi_msg_ts), + ] + ) + + # create connection to database + self.conn = psycopg2.connect(**self.pg_config) + self.cursor = self.conn.cursor() + psycopg2.extras.execute_values(self.cursor, SQL_INSERT_CONVO, insert_tups) + self.conn.commit() + message_ids = list(map(lambda tup: tup[0], self.cursor.fetchall())) + + # clean up database connection state + self.cursor.close() + self.conn.close() + self.cursor, self.conn = None, None + + return message_ids + + + def __call__(self, message: List[str], conversation_id: int, is_refresh: bool, msg_ts: datetime): """ Execute the chat functionality. """ self.lock.acquire() - print("INFO - acquired lock file") try: # update vector store through data manager; will only do something if new files have been added + print("INFO - acquired lock file update vectorstore") + self.data_manager.update_vectorstore() - # convert the history to native A2rchi form (because javascript does not have tuples) - history = self.convert_to_chain_history(history) + except Exception as e: + print(f"ERROR - {str(e)}") + finally: + self.lock.release() + print("INFO - released lock file update vectorstore") + + try: + # convert the message to native A2rchi form (because javascript does not have tuples) + sender, content = tuple(message[0]) + + # TODO: incr. from 0? # get discussion ID so that the conversation can be saved (It seems that random is no good... TODO) - discussion_id = discussion_id or np.random.randint(100000, 999999) + conversation_id = conversation_id or np.random.randint(100000, 999999) - # run chain to get result - if self.number_of_queries < QUERY_LIMIT: - result = self.chain(history) - else: + # fetch history given conversation_id + history = self.query_conversation_history(conversation_id) + + # if this is a chat refresh / message regeneration; remove previous contiguous non-A2rchi message(s) + if is_refresh: + while history[-1][0] == "A2rchi": + _ = history.pop(-1) + + # run chain to get result; limit users to 1000 queries per conversation; refreshing browser starts new conversation + if len(history) < QUERY_LIMIT: + full_history = history + [(sender, content)] if not is_refresh else history + result = self.chain(full_history) + else: # the case where we have exceeded the QUERY LIMIT (built so that we do not overuse the chain) output = "Sorry, our service is currently down due to exceptional demand. Please come again later." - return output, discussion_id + return output, conversation_id + + # keep track of total number of queries and log this amount self.number_of_queries += 1 print(f"number of queries is: {self.number_of_queries}") # get similarity score to see how close the input is to the source # - low score means very close (it's a distance between embedding vectors approximated # by an approximate k-nearest neighbors algorithm called HNSW) - inp = history[-1][1] - score = self.chain.similarity_search(inp) + score = self.chain.similarity_search(content) # load the present list of sources try: @@ -177,14 +305,22 @@ def __call__(self, history: Optional[List[Tuple[str, str]]], discussion_id: Opti else: output = "

" + self.format_code_in_text(result["answer"]) + "

" - ChatWrapper.update_or_add_discussion(self.data_path, "conversations_test.json", discussion_id, discussion_contents = history + [("A2rchi", output)]) + # write user message and A2rchi response to database + user_message = (sender, content, msg_ts) + a2rchi_message = ("A2rchi", output, datetime.now()) + + message_ids = self.insert_conversation(conversation_id, user_message, a2rchi_message, is_refresh) except Exception as e: - raise e + print(f"ERROR - {str(e)}") + finally: - self.lock.release() - print("INFO - released lock file") - return output, discussion_id + if self.cursor is not None: + self.cursor.close() + if self.conn is not None: + self.conn.close() + + return output, conversation_id, message_ids class FlaskAppWrapper(object): @@ -225,31 +361,34 @@ def get_chat_response(self): functionality is carried through by javascript and html. Input is a requestion with - Discussion_id: Either None or an integer - Conversation: List of length 2 lists, where the length 2 - lists have first element either "User" or - "A2rchi" and have second element of a message - content. + conversation_id: Either None or an integer + last_message: list of length 2, where the first element is "User" + and the second element contains their message. Returns: A json with a response (html formatted plain text string) and a discussion ID (either None or an integer) """ - history = request.json.get('conversation') # get user input from the request - discussion_id = request.json.get('discussion_id') # get discussion_id from the request + # compute timestamp at which message was received by server + msg_ts = datetime.now() - # query the chat and return the results. + # get user input and conversation_id from the request + message = request.json.get('last_message') + conversation_id = request.json.get('conversation_id') + is_refresh = request.json.get('is_refresh') + + # query the chat and return the results. print(" INFO - Calling the ChatWrapper()") - response, discussion_id = self.chat(history, discussion_id) + response, conversation_id, message_ids = self.chat(message, conversation_id, is_refresh, msg_ts) - return jsonify({'response': response, 'discussion_id': discussion_id}) + return jsonify({'response': response, 'conversation_id': conversation_id, 'a2rchi_msg_id': message_ids[-1]}) def index(self): return render_template('index.html') - + def terms(self): return render_template('terms.html') - + def like(self): self.chat.lock.acquire() print("INFO - acquired lock file") @@ -258,21 +397,24 @@ def like(self): data = request.json # Extract the HTML content and any other data you need - chat_content = data.get('content') - discussion_id = data.get('discussion_id') message_id = data.get('message_id') feedback = { - "chat_content" : chat_content, - "message_id" : message_id, - "feedback" : "like", + "message_id" : message_id, + "feedback" : "like", + "feedback_ts" : datetime.now(), + "feedback_msg" : None, + "incorrect" : None, + "unhelpful" : None, + "inappropriate": None, } - ChatWrapper.update_or_add_discussion(self.data_path, "conversations_test.json", discussion_id, discussion_feedback = feedback) + self.chat.insert_feedback(feedback) - response = {'message': 'Liked', 'content': chat_content} + response = {'message': 'Liked'} return jsonify(response), 200 except Exception as e: + print(f"ERROR: {str(e)}") return jsonify({'error': str(e)}), 500 # According to the Python documentation: https://docs.python.org/3/tutorial/errors.html#defining-clean-up-actions @@ -281,6 +423,11 @@ def like(self): self.chat.lock.release() print("INFO - released lock file") + if self.chat.cursor is not None: + self.chat.cursor.close() + if self.chat.conn is not None: + self.chat.conn.close() + def dislike(self): self.chat.lock.acquire() print("INFO - acquired lock file") @@ -289,29 +436,28 @@ def dislike(self): data = request.json # Extract the HTML content and any other data you need - chat_content = data.get('content') - discussion_id = data.get('discussion_id') message_id = data.get('message_id') - message = data.get('message') + feedback_msg = data.get('feedback_msg') incorrect = data.get('incorrect') unhelpful = data.get('unhelpful') inappropriate = data.get('inappropriate') feedback = { - "chat_content" : chat_content, - "message_id" : message_id, - "feedback" : "dislike", - "message" : message, - "incorrect" : incorrect, - "unhelpful" : unhelpful, - "inappropriate": inappropriate, + "message_id" : message_id, + "feedback" : "dislike", + "feedback_ts" : datetime.now(), + "feedback_msg" : feedback_msg, + "incorrect" : incorrect, + "unhelpful" : unhelpful, + "inappropriate": inappropriate, } - ChatWrapper.update_or_add_discussion(self.data_path, "conversations_test.json", discussion_id, discussion_feedback = feedback) + self.chat.insert_feedback(feedback) - response = {'message': 'Disliked', 'content': chat_content} + response = {'message': 'Disliked'} return jsonify(response), 200 except Exception as e: + print(f"ERROR: {str(e)}") return jsonify({'error': str(e)}), 500 # According to the Python documentation: https://docs.python.org/3/tutorial/errors.html#defining-clean-up-actions @@ -320,48 +466,7 @@ def dislike(self): self.chat.lock.release() print("INFO - released lock file") - -class AnswerRenderer(mt.HTMLRenderer): - """ - Class for custom rendering of A2rchi output. Child of mistune's HTMLRenderer, with custom overrides. - Code blocks are structured and colored according to pygment lexers - """ - RENDERING_LEXER_MAPPING = { - "python": PythonLexer, - "java": JavaLexer, - "javascript": JavascriptLexer, - "bash": BashLexer, - "c++": CppLexer, - "cpp": CppLexer, - "c": CLexer, - "typescript": TypeScriptLexer, - "html": HtmlLexer, - "Fortran" : FortranLexer, - "Julia" : JuliaLexer, - "Mathematica" : MathematicaLexer, - "MATLAB": MatlabLexer - } - - def __init__(self): - super().__init__() - - def block_text(self,text): - #Handle blocks of text (the negatives of blocks of code) and sets them in paragraphs - return f"""

{text}

""" - - def block_code(self, code, info=None): - # Handle code blocks (triple backticks) - if info not in self.RENDERING_LEXER_MAPPING.keys(): info = 'bash' #defaults in bash - code_block_highlighted = highlight(code.strip(), self.RENDERING_LEXER_MAPPING[info](stripall=True), HtmlFormatter()) - return f"""
-
- {info} -
-
{code_block_highlighted} -
-
""" - - def codespan(self, text): - # Handle inline code snippets (single backticks) - return f"""{text}""" - + if self.chat.cursor is not None: + self.chat.cursor.close() + if self.chat.conn is not None: + self.chat.conn.close() diff --git a/A2rchi/interfaces/chat_app/static/images/a2rchi-initial.png b/A2rchi/interfaces/chat_app/static/images/a2rchi-initial.png new file mode 100644 index 00000000..f2a562df Binary files /dev/null and b/A2rchi/interfaces/chat_app/static/images/a2rchi-initial.png differ diff --git a/A2rchi/interfaces/chat_app/static/images/a2rchi.png b/A2rchi/interfaces/chat_app/static/images/a2rchi.png index f2a562df..24402e62 100644 Binary files a/A2rchi/interfaces/chat_app/static/images/a2rchi.png and b/A2rchi/interfaces/chat_app/static/images/a2rchi.png differ diff --git a/A2rchi/interfaces/chat_app/static/script.js b/A2rchi/interfaces/chat_app/static/script.js deleted file mode 100644 index 7f1228e9..00000000 --- a/A2rchi/interfaces/chat_app/static/script.js +++ /dev/null @@ -1,306 +0,0 @@ -const chatInput = document.querySelector("#chat-input"); -const sendButton = document.querySelector("#send-btn"); -const chatContainer = document.querySelector(".chat-container"); -const themeButton = document.querySelector("#theme-btn"); -const deleteButton = document.querySelector("#delete-btn"); -const refreshButton = document.querySelector("#refresh-btn"); -const popupForm = document.getElementById("popup-form"); -const additionalThoughtsInput = document.getElementById("dislike-additional-thoughts"); -const submitButton = document.getElementById("dislike-submit-button"); -const closeButton = document.getElementById("dislike-close-button"); -const correct_checkbox= document.getElementById("correct_checkbox"); -const helpful_checkbox = document.getElementById("helpful_checkbox"); -const appropriate_checkbox = document.getElementById("appropriate_checkbox"); -popupForm.style.display = "none"; - -let userText = null; -let discussion_id = null; -let next_message_id = 0; -let conversation = [] -let num_responses_since_last_rating = 0; - -const loadDataFromLocalstorage = () => { - // Load saved chats and theme from local storage and apply/add on the page - const themeColor = localStorage.getItem("themeColor"); - - document.body.classList.toggle("light-mode", themeColor === "light_mode"); - themeButton.innerText = document.body.classList.contains("light-mode") ? "dark_mode" : "light_mode"; - - const defaultText = `
-

A2rchi

-

Start a conversation and explore the power of A2rchi, specially trained on subMIT.
- Your chat history will be displayed here.

- By using this website, you agree to the terms and conditions.

-
` - - chatContainer.innerHTML = localStorage.getItem("all-chats") || defaultText; - chatContainer.scrollTo(0, chatContainer.scrollHeight); // Scroll to bottom of the chat container -} - -const createChatElement = (content, className) => { - // Create new div and apply chat, specified class and set html content of div - const chatDiv = document.createElement("div"); - chatDiv.classList.add("chat", className); - chatDiv.innerHTML = content; - return chatDiv; // Return the created chat div -} - -const refreshChat = async () => { - conversation.pop(); - if (next_message_id > 0) { - next_message_id = next_message_id -1; - } - chatContainer.removeChild(chatContainer.lastChild); - showTypingAnimation(); -} - -const getChatResponse = async (incomingChatDiv) => { - const API_URL = "http://t3desk019.mit.edu:7861/api/get_chat_response"; - const pElement = document.createElement("div"); - - // Give the p element of the response an id which is equal to the message id - pElement.setAttribute('id',next_message_id.toString()); - next_message_id = next_message_id + 1 - - // Define the properties and data for the API request - const requestOptions = { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - conversation: conversation, - discussion_id: discussion_id, - }) - } - - // Send POST request to Flask API, get response and set the response as paragraph element text - try { - const response = await (await fetch(API_URL, requestOptions)).json(); - pElement.innerHTML = response.response; - pElement.classList.add(".default-text"); - conversation.push(["A2rchi", response.response]); - discussion_id = response.discussion_id ; - } catch (error) { - pElement.classList.add("error"); - pElement.textContent = "Oops! Something went wrong while retrieving the response. Please try again."; - } - - // Remove the typing animation, append the paragraph element and save the chats to local storage - incomingChatDiv.querySelector(".typing-animation").remove(); - incomingChatDiv.querySelector(".chat-details").appendChild(pElement); - localStorage.setItem("all-chats", chatContainer.innerHTML); - chatContainer.scrollTo(0, chatContainer.scrollHeight); -} - -const copyCode = (copyCodeBtn) => { - // Copy the text content of the response to the clipboard - const reponseTextElement = copyCodeBtn.parentElement.parentElement.querySelector(".code-box-body"); - navigator.clipboard.writeText(reponseTextElement.innerText); -} - -const copyResponse = (copyBtn) => { - // Copy the text content of the response to the clipboard - const reponseTextElement = copyBtn.parentElement.previousElementSibling.querySelector("p"); - navigator.clipboard.writeText(reponseTextElement.textContent); -} - -const likeResponse = (likeBtn) => { - num_responses_since_last_rating = 0; - - const chatContent = likeBtn.parentElement.previousElementSibling.querySelector("p").textContent; - - // fill the image - const image = likeBtn.querySelector("img"); - image.src = "/static/images/thumbs_up_filled.png" - - // make sure other image is not filled - const other_image = likeBtn.nextElementSibling.querySelector("img"); - other_image.src = "/static/images/thumbs_down.png"; - - const API_URL = "http://t3desk019.mit.edu:7861/api/like"; - - // Send an API request with the chat content and discussion ID - fetch(API_URL, { - method: "POST", // You may need to adjust the HTTP method - headers: { - "Content-Type": "application/json", - "Access-Control-Allow-Origin": "*", - }, - body: JSON.stringify({ - content: chatContent, - discussion_id: discussion_id, - message_id: likeBtn.parentElement.previousElementSibling.querySelector("p").parentElement.id, - }), - }) -} - -const dislikeResponse = (dislikeBtn) => { - num_responses_since_last_rating = 0; - - const chatContent = dislikeBtn.parentElement.previousElementSibling.querySelector("p").textContent; - - // fill the image - const image = dislikeBtn.querySelector("img"); - image.src = "/static/images/thumbs_down_filled.png"; - - // make sure other image is not filled - const other_image = dislikeBtn.previousElementSibling.querySelector("img"); - other_image.src = "/static/images/thumbs_up.png"; - - const API_URL = "http://t3desk019.mit.edu:7861/api/dislike"; - - // Show pop-up form - popupForm.style.display = "block"; - - // Function which handles sending the information in the pop up form to the backend API - function handleSubmitToAPI() { - const additionalThoughts = additionalThoughtsInput.value; - - fetch(API_URL, { - method: "POST", // You may need to adjust the HTTP method - headers: { - "Content-Type": "application/json", - "Access-Control-Allow-Origin": "*", - }, - body: JSON.stringify({ - content: chatContent, - discussion_id: discussion_id, - message_id: dislikeBtn.parentElement.previousElementSibling.querySelector("p").parentElement.id, - message: additionalThoughts, - incorrect: correct_checkbox.checked, - unhelpful: helpful_checkbox.checked, - inappropriate: appropriate_checkbox.checked, - }), - }); - - //hide pop up formi - popupForm.style.display = "none"; - } - - //wait for user to submit response or close the additional feedback window - submitButton.addEventListener("click", handleSubmitToAPI); - closeButton.addEventListener("click", handleSubmitToAPI); -} - -const closeFeedback = (closeBtn) => { - //hide pop up formi - popupForm.style.display = "none"; -} - -const showTypingAnimation = () => { - // Display the typing animation and call the getChatResponse function - const html = `
-
- chatbot-img -
-
-
-
-
-
-
- - -
-
`; - // Create an incoming chat div with typing animation and append it to chat container - const incomingChatDiv = createChatElement(html, "incoming"); - chatContainer.appendChild(incomingChatDiv); - chatContainer.scrollTo(0, chatContainer.scrollHeight); - getChatResponse(incomingChatDiv); - showFeedbackRequest(); -} - -const showFeedbackRequest = () => { - // Display a message from A2rchi to ask the user to give feedback - - num_responses_since_last_rating = num_responses_since_last_rating + 1; - - const html = `
-
- chatbot-img -
-

I've noticed you haven't rated any of my responses in awhile. Rating responses is crucial because it not only helps me improve, but it also ensures that this project remains open source and freely accessible for everyone. Your input is highly valuable in supporting the A2rchi mission!

-
-
-
`; - - // Create an incoming chat div with feedback request and append it to chat container - if (num_responses_since_last_rating > 2) { - const incomingChatDiv = createChatElement(html, "incoming"); - chatContainer.appendChild(incomingChatDiv); - chatContainer.scrollTo(0, chatContainer.scrollHeight); - num_responses_since_last_rating = 0; - } -} - -const handleOutgoingChat = () => { - userText = chatInput.value.trim(); // Get chatInput value and remove extra spaces - if(!userText) return; // If chatInput is empty return from here - conversation.push(["User", userText]) - - // Clear the input field and reset its height - chatInput.value = ""; - chatInput.style.height = `${initialInputHeight}px`; - - const html = `
-
- user-img -

${userText}

-
-
`; - - // Create an outgoing chat div with user's message and append it to chat container - const outgoingChatDiv = createChatElement(html, "outgoing"); - chatContainer.querySelector(".default-text")?.remove(); - chatContainer.appendChild(outgoingChatDiv); - chatContainer.scrollTo(0, chatContainer.scrollHeight); - setTimeout(showTypingAnimation, 500); -} - -deleteButton.addEventListener("click", () => { - // Remove the chats from local storage and call loadDataFromLocalstorage function - if(confirm("Are you sure you want to delete all the chats?")) { - conversation = [] - discussion_id = null - next_message_id = 0; - localStorage.removeItem("all-chats"); - loadDataFromLocalstorage(); - } -}); - -refreshButton.addEventListener("click", () => { - refreshChat(); -}); - -themeButton.addEventListener("click", () => { - // Toggle body's class for the theme mode and save the updated theme to the local storage - document.body.classList.toggle("light-mode"); - localStorage.setItem("themeColor", themeButton.innerText); - themeButton.innerText = document.body.classList.contains("light-mode") ? "dark_mode" : "light_mode"; -}); - -const initialInputHeight = chatInput.scrollHeight; - -chatInput.addEventListener("input", () => { - // Adjust the height of the input field dynamically based on its content - chatInput.style.height = `${initialInputHeight}px`; - chatInput.style.height = `${chatInput.scrollHeight}px`; -}); - -chatInput.addEventListener("keydown", (e) => { - // If the Enter key is pressed without Shift and the window width is larger - // than 800 pixels, handle the outgoing chat - if (e.key === "Enter" && !e.shiftKey && window.innerWidth > 800) { - e.preventDefault(); - handleOutgoingChat(); - } -}); - -loadDataFromLocalstorage(); -sendButton.addEventListener("click", handleOutgoingChat); diff --git a/A2rchi/interfaces/chat_app/static/script.js-template b/A2rchi/interfaces/chat_app/static/script.js-template index 83f5101e..86743b69 100644 --- a/A2rchi/interfaces/chat_app/static/script.js-template +++ b/A2rchi/interfaces/chat_app/static/script.js-template @@ -14,10 +14,10 @@ const appropriate_checkbox = document.getElementById("appropriate_checkbox"); popupForm.style.display = "none"; let userText = null; -let discussion_id = null; -let next_message_id = 0; +let conversation_id = null; let conversation = [] let num_responses_since_last_rating = 0; +let last_response_is_feedback_request = false; const loadDataFromLocalstorage = () => { // Load saved chats and theme from local storage and apply/add on the page @@ -46,22 +46,30 @@ const createChatElement = (content, className) => { } const refreshChat = async () => { - conversation.pop(); - if (next_message_id > 0) { - next_message_id = next_message_id -1; + // if the conversation is empty; this is a no-op + if (conversation.length == 0) { + return; } + + // remove message to be regenerated from conversation + conversation.pop(); chatContainer.removeChild(chatContainer.lastChild); - showTypingAnimation(); + + // if the last response generated a feedback request, make sure to remove it here as well + console.log(last_response_is_feedback_request) + if (last_response_is_feedback_request) { + console.log("remove again") + chatContainer.removeChild(chatContainer.lastChild); + } + + // generate new response + showTypingAnimation(isRefresh=true); } -const getChatResponse = async (incomingChatDiv) => { +const getChatResponse = async (incomingChatDiv, isRefresh=false) => { const API_URL = "http://XX-HOSTNAME-XX:XX-HTTP_PORT-XX/api/get_chat_response"; const pElement = document.createElement("div"); - // Give the p element of the response an id which is equal to the message id - pElement.setAttribute('id',next_message_id.toString()); - next_message_id = next_message_id + 1 - // Define the properties and data for the API request const requestOptions = { method: "POST", @@ -69,18 +77,21 @@ const getChatResponse = async (incomingChatDiv) => { "Content-Type": "application/json", }, body: JSON.stringify({ - conversation: conversation, - discussion_id: discussion_id, + last_message: conversation.slice(-1), + conversation_id: conversation_id, + is_refresh: isRefresh, }) } - // Send POST request to Flask API, get response and set the response as paragraph element text - try { + // Send POST request to Flask API, get response and set the response as paragraph element text + try { const response = await (await fetch(API_URL, requestOptions)).json(); pElement.innerHTML = response.response; + pElement.setAttribute('id', response.a2rchi_msg_id.toString()); pElement.classList.add(".default-text"); conversation.push(["A2rchi", response.response]); - discussion_id = response.discussion_id ; + conversation_id = response.conversation_id; + last_response_is_feedback_request = false; } catch (error) { pElement.classList.add("error"); pElement.textContent = "Oops! Something went wrong while retrieving the response. Please try again."; @@ -91,6 +102,9 @@ const getChatResponse = async (incomingChatDiv) => { incomingChatDiv.querySelector(".chat-details").appendChild(pElement); localStorage.setItem("all-chats", chatContainer.innerHTML); chatContainer.scrollTo(0, chatContainer.scrollHeight); + + // ask user for feedback if it's been too many messages w/out any feedback + setTimeout(showFeedbackRequest, 500); } const copyCode = (copyCodeBtn) => { @@ -108,8 +122,6 @@ const copyResponse = (copyBtn) => { const likeResponse = (likeBtn) => { num_responses_since_last_rating = 0; - const chatContent = likeBtn.parentElement.previousElementSibling.querySelector("p").textContent; - // fill the image const image = likeBtn.querySelector("img"); image.src = "/static/images/thumbs_up_filled.png" @@ -127,9 +139,7 @@ const likeResponse = (likeBtn) => { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*", }, - body: JSON.stringify({ - content: chatContent, - discussion_id: discussion_id, + body: JSON.stringify({ message_id: likeBtn.parentElement.previousElementSibling.querySelector("p").parentElement.id, }), }) @@ -138,8 +148,6 @@ const likeResponse = (likeBtn) => { const dislikeResponse = (dislikeBtn) => { num_responses_since_last_rating = 0; - const chatContent = dislikeBtn.parentElement.previousElementSibling.querySelector("p").textContent; - // fill the image const image = dislikeBtn.querySelector("img"); image.src = "/static/images/thumbs_down_filled.png"; @@ -164,10 +172,8 @@ const dislikeResponse = (dislikeBtn) => { "Access-Control-Allow-Origin": "*", }, body: JSON.stringify({ - content: chatContent, - discussion_id: discussion_id, message_id: dislikeBtn.parentElement.previousElementSibling.querySelector("p").parentElement.id, - message: additionalThoughts, + feedback_msg: additionalThoughts, incorrect: correct_checkbox.checked, unhelpful: helpful_checkbox.checked, inappropriate: appropriate_checkbox.checked, @@ -179,16 +185,16 @@ const dislikeResponse = (dislikeBtn) => { } //wait for user to submit response or close the additional feedback window - submitButton.addEventListener("click", handleSubmitToAPI); - closeButton.addEventListener("click", handleSubmitToAPI); + submitButton.addEventListener("click", handleSubmitToAPI, {once: true}); + closeButton.addEventListener("click", handleSubmitToAPI, {once: true}); } const closeFeedback = (closeBtn) => { - //hide pop up formi + //hide pop up form popupForm.style.display = "none"; } -const showTypingAnimation = () => { +const showTypingAnimation = (isRefresh=false) => { // Display the typing animation and call the getChatResponse function const html = `
@@ -212,8 +218,7 @@ const showTypingAnimation = () => { const incomingChatDiv = createChatElement(html, "incoming"); chatContainer.appendChild(incomingChatDiv); chatContainer.scrollTo(0, chatContainer.scrollHeight); - getChatResponse(incomingChatDiv); - showFeedbackRequest(); + getChatResponse(incomingChatDiv, isRefresh); } const showFeedbackRequest = () => { @@ -225,7 +230,7 @@ const showFeedbackRequest = () => {
chatbot-img
-

I've noticed you haven't rated any of my responses in awhile. Rating responses is crucial because it not only helps me improve, but it also ensures that this project remains open source and freely accessible for everyone. Your input is highly valuable in supporting the A2rchi mission!

+

I've noticed you haven't rated any of my responses in a while. Rating responses is crucial because it not only helps me improve, but it also ensures that this project remains open source and freely accessible for everyone. Your input is highly valuable in supporting the A2rchi mission!

`; @@ -236,6 +241,7 @@ const showFeedbackRequest = () => { chatContainer.appendChild(incomingChatDiv); chatContainer.scrollTo(0, chatContainer.scrollHeight); num_responses_since_last_rating = 0; + last_response_is_feedback_request = true; } } @@ -267,8 +273,7 @@ deleteButton.addEventListener("click", () => { // Remove the chats from local storage and call loadDataFromLocalstorage function if(confirm("Are you sure you want to delete all the chats?")) { conversation = [] - discussion_id = null - next_message_id = 0; + conversation_id = null localStorage.removeItem("all-chats"); loadDataFromLocalstorage(); } diff --git a/A2rchi/interfaces/cleo.py b/A2rchi/interfaces/cleo.py index 557b9ef6..41a18960 100644 --- a/A2rchi/interfaces/cleo.py +++ b/A2rchi/interfaces/cleo.py @@ -20,7 +20,6 @@ class CleoAIWrapper: def __init__(self): self.chain = Chain() - self.number_of_queries = 0 #TODO: finish installing this safegaurd. # initialize data manager self.data_manager = DataManager() diff --git a/A2rchi/utils/data_manager.py b/A2rchi/utils/data_manager.py index 4ca581eb..de2b3978 100644 --- a/A2rchi/utils/data_manager.py +++ b/A2rchi/utils/data_manager.py @@ -96,10 +96,8 @@ def fetch_collection(self): path=self.global_config["LOCAL_VSTORE_PATH"], settings=Settings(allow_reset=True, anonymized_telemetry=False), # NOTE: anonymized_telemetry doesn't actually do anything; need to build Chroma on our own without it ) - collection = client.get_or_create_collection(self.collection_name) print(f" n in collection: {collection.count()}") - return collection @@ -113,6 +111,7 @@ def update_vectorstore(self): # get current status of persistent vstore files_in_vstore = [metadata["filename"] for metadata in collection.get(include=["metadatas"])["metadatas"]] + # scan data folder and obtain list of files in data. Assumes max depth = 1 dirs = [ os.path.join(self.data_path, dir) @@ -239,6 +238,7 @@ def _add_to_vectorstore(self, collection, files_to_add, sources={}): print("Ids: ",ids) collection.add(embeddings=embeddings, ids=ids, documents=chunks, metadatas=metadatas) + print("succesfully added file ", filename) return collection diff --git a/A2rchi/utils/sql.py b/A2rchi/utils/sql.py new file mode 100644 index 00000000..c2b780db --- /dev/null +++ b/A2rchi/utils/sql.py @@ -0,0 +1,6 @@ +"""SQL queries used by A2rchi""" +SQL_INSERT_CONVO = "INSERT INTO conversations (conversation_id, sender, content, ts) VALUES %s RETURNING message_id;" + +SQL_INSERT_FEEDBACK = "INSERT INTO feedback (mid, feedback_ts, feedback, feedback_msg, incorrect, unhelpful, inappropriate) VALUES (%s, %s, %s, %s, %s, %s, %s);" + +SQL_QUERY_CONVO = "SELECT sender, content FROM conversations WHERE conversation_id = %s ORDER BY message_id ASC;" diff --git a/config/dev-config.yaml b/config/dev-config.yaml index 404403e2..99d47a3c 100644 --- a/config/dev-config.yaml +++ b/config/dev-config.yaml @@ -13,10 +13,11 @@ interfaces: PORT: 7861 EXTERNAL_PORT: 7682 HOST: "0.0.0.0" # either "0.0.0.0" (for public) or "127.0.0.1" (for internal) - HOSTNAME: "t3desk019.mit.edu" # careful, this is used for the chat service + HOSTNAME: "submit06.mit.edu" # careful, this is used for the chat service template_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/templates" static_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/static" num_responses_until_feedback: 3 #the number of responses given by A2rchi until she asks for feedback. + include_copy_button: False uploader_app: PORT: 5001 HOST: "0.0.0.0" # either "0.0.0.0" (for public) or "127.0.0.1" (for internal) @@ -44,7 +45,7 @@ chains: MAIN_PROMPT: config/prompts/submit.prompt chain: # pick one of the models listed in the model class map below - MODEL_NAME: DumbLLM # LlamaLLM + MODEL_NAME: OpenAILLM # LlamaLLM # map of all the class models and their keyword arguments MODEL_CLASS_MAP: OpenAILLM: @@ -83,6 +84,11 @@ utils: mailbox: IMAP4_PORT: 143 mailbox_update_time: 10 + postgres: + port: 5432 + user: a2rchi + database: a2rchi-db + host: dev-postgres-dev-1 data_manager: CHUNK_SIZE: 1000 CHUNK_OVERLAP: 0 @@ -94,7 +100,7 @@ utils: reset_collection: True # reset the entire collection each time it is accessed by a new data manager instance embeddings: # choose one embedding from list below - EMBEDDING_NAME: OpenAIEmbeddings + EMBEDDING_NAME: HuggingFaceEmbeddings # list of possible embeddings to use in vectorstore EMBEDDING_CLASS_MAP: OpenAIEmbeddings: @@ -105,7 +111,7 @@ utils: HuggingFaceEmbeddings: class: HuggingFaceEmbeddings kwargs: - model_name: "sentence-transformers/all-mpnet-base-v2" + model_name: sentence-transformers/all-MiniLM-L6-v2 #sentence-transformers/multi-qa-mpnet-base-dot-v1 #sentence-transformers/all-mpnet-base-v2 are better but currently not working model_kwargs: device: 'cpu' encode_kwargs: diff --git a/config/prod-801-config.yaml b/config/prod-801-config.yaml index 15c0f772..66e251b9 100644 --- a/config/prod-801-config.yaml +++ b/config/prod-801-config.yaml @@ -17,6 +17,7 @@ interfaces: template_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/templates" static_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/static" num_responses_until_feedback: 3 #the number of responses given by A2rchi until she asks for feedback. + include_copy_button: False uploader_app: PORT: 5001 HOST: "0.0.0.0" # either "0.0.0.0" (for public) or "127.0.0.1" (for internal) @@ -81,6 +82,11 @@ utils: mailbox: IMAP4_PORT: 143 mailbox_update_time: 10 + postgres: + port: 5432 + user: a2rchi + database: a2rchi-db + host: prod-801-postgres-prod-801-1 data_manager: CHUNK_SIZE: 1000 CHUNK_OVERLAP: 0 @@ -103,7 +109,7 @@ utils: HuggingFaceEmbeddings: class: HuggingFaceEmbeddings kwargs: - model_name: "sentence-transformers/all-mpnet-base-v2" + model_name: sentence-transformers/all-MiniLM-L6-v2 #"sentence-transformers/all-mpnet-base-v2" model_kwargs: device: 'cpu' encode_kwargs: diff --git a/config/prod-config.yaml b/config/prod-config.yaml index f373016c..0a954305 100644 --- a/config/prod-config.yaml +++ b/config/prod-config.yaml @@ -17,6 +17,7 @@ interfaces: template_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/templates" static_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/static" num_responses_until_feedback: 3 #the number of responses given by A2rchi until she asks for feedback. + include_copy_button: False uploader_app: PORT: 5001 HOST: "0.0.0.0" # either "0.0.0.0" (for public) or "127.0.0.1" (for internal) @@ -81,6 +82,11 @@ utils: mailbox: IMAP4_PORT: 143 mailbox_update_time: 10 + postgres: + port: 5432 + user: a2rchi + database: a2rchi-db + host: prod-postgres-prod-1 data_manager: CHUNK_SIZE: 1000 CHUNK_OVERLAP: 0 @@ -103,7 +109,7 @@ utils: HuggingFaceEmbeddings: class: HuggingFaceEmbeddings kwargs: - model_name: "sentence-transformers/all-mpnet-base-v2" + model_name: sentence-transformers/all-MiniLM-L6-v2 #"sentence-transformers/all-mpnet-base-v2" model_kwargs: device: 'cpu' encode_kwargs: diff --git a/config/prod-meta-config.yaml b/config/prod-meta-config.yaml index af369f4c..248ae96a 100644 --- a/config/prod-meta-config.yaml +++ b/config/prod-meta-config.yaml @@ -17,6 +17,7 @@ interfaces: template_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/templates" static_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/static" num_responses_until_feedback: 3 #the number of responses given by A2rchi until she asks for feedback. + include_copy_button: False uploader_app: PORT: 5001 HOST: "0.0.0.0" # either "0.0.0.0" (for public) or "127.0.0.1" (for internal) @@ -102,7 +103,7 @@ utils: HuggingFaceEmbeddings: class: HuggingFaceEmbeddings kwargs: - model_name: "sentence-transformers/all-mpnet-base-v2" + model_name: sentence-transformers/all-MiniLM-L6-v2 #"sentence-transformers/all-mpnet-base-v2" model_kwargs: device: 'cpu' encode_kwargs: diff --git a/config/prod-root-config.yaml b/config/prod-root-config.yaml index 782a1820..c46545e4 100644 --- a/config/prod-root-config.yaml +++ b/config/prod-root-config.yaml @@ -17,6 +17,7 @@ interfaces: template_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/templates" static_folder: "/root/A2rchi/A2rchi/interfaces/chat_app/static" num_responses_until_feedback: 3 #the number of responses given by A2rchi until she asks for feedback. + include_copy_button: False uploader_app: PORT: 5001 HOST: "0.0.0.0" # either "0.0.0.0" (for public) or "127.0.0.1" (for internal) @@ -27,6 +28,7 @@ chains: - empty.list - miscellanea.list - root-docs.list + - root-tutorial.list # - root-forum.list base: # roles that A2rchi knows about @@ -82,6 +84,11 @@ utils: mailbox: IMAP4_PORT: 143 mailbox_update_time: 10 + postgres: + port: 5432 + user: a2rchi + database: a2rchi-db + host: prod-root-postgres-prod-root-1 data_manager: CHUNK_SIZE: 1000 CHUNK_OVERLAP: 0 @@ -93,7 +100,7 @@ utils: reset_collection: True # reset the entire collection each time it is accessed by a new data manager instance embeddings: # choose one embedding from list below - EMBEDDING_NAME: OpenAIEmbeddings + EMBEDDING_NAME: HuggingFaceEmbeddings # list of possible embeddings to use in vectorstore EMBEDDING_CLASS_MAP: OpenAIEmbeddings: @@ -104,7 +111,7 @@ utils: HuggingFaceEmbeddings: class: HuggingFaceEmbeddings kwargs: - model_name: "sentence-transformers/all-mpnet-base-v2" + model_name: sentence-transformers/all-MiniLM-L6-v2 #"sentence-transformers/all-mpnet-base-v2" is best but currently not working model_kwargs: device: 'cpu' encode_kwargs: diff --git a/config/root-docs.list b/config/root-docs.list index ddc0797c..bfdc8394 100644 --- a/config/root-docs.list +++ b/config/root-docs.list @@ -43,4 +43,4 @@ https://root.cern/manual/geometry https://root.cern/topical/ https://root.cern/manual/root_macros_and_shared_libraries https://root.cern/manual/graphics -https://root.cern/manual/tmva +https://root.cern/manual/tmva \ No newline at end of file diff --git a/config/root_tutorial.list b/config/root_tutorial.list new file mode 100644 index 00000000..8bd95a01 --- /dev/null +++ b/config/root_tutorial.list @@ -0,0 +1,2495 @@ +https://root.cern/doc/v628/SQLiteVersionsOfRoot_8C.html +https://root.cern/doc/v628/SQLiteIPLocation_8C.html +https://root.cern/doc/v628/SQLiteTimeVersionOfRoot_8C.html +https://root.cern/doc/v628/sqlselect_8py.html +https://root.cern/doc/v628/ntuple1_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/sqlselect_8C.html +https://root.cern/doc/v628/sqlcanvas_8C.html +https://root.cern/doc/v628/sqlcreatedb_8py.html +https://root.cern/doc/v628/sqltables_8C.html +https://root.cern/doc/v628/sqlfilldb_8py.html +https://root.cern/doc/v628/sqlcreatedb_8C.html +https://root.cern/doc/v628/sqlfilldb_8C.html +https://root.cern/doc/v628/SQLitePlatformDistribution_8C.html +https://root.cern/doc/v628/cnt001__basictseq_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/authserv_8C.html +https://root.cern/doc/v628/hserv_8C.html +https://root.cern/doc/v628/hserv2_8C.html +https://root.cern/doc/v628/hcons_8C.html +https://root.cern/doc/v628/TestAuth_8C.html +https://root.cern/doc/v628/pclient_8C.html +https://root.cern/doc/v628/parallelMergeClient_8C.html +https://root.cern/doc/v628/TUriTest_8C.html +https://root.cern/doc/v628/hclient_8C.html +https://root.cern/doc/v628/spyserv_8C.html +https://root.cern/doc/v628/pserv_8C.html +https://root.cern/doc/v628/udpserver_8c.html +https://root.cern/doc/v628/treeClient_8C.html +https://root.cern/doc/v628/authclient_8C.html +https://root.cern/doc/v628/spy_8C.html +https://root.cern/doc/v628/hprod_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/parallelMergeServer_8C.html +https://root.cern/doc/v628/testTUDPSocket_8C.html +https://root.cern/doc/v628/parallelMergeTest_8C.html +https://root.cern/doc/v628/fastMergeServer_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/labels1_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/cocoa_2gradients_8C.html +https://root.cern/doc/v628/cocoa_2transp_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/cocoa_2radialgradients_8C.html +https://root.cern/doc/v628/cocoa_2transp__text_8C.html +https://root.cern/doc/v628/flower_8C.html +https://root.cern/doc/v628/cocoa_2grad_8C.html +https://root.cern/doc/v628/cocoa_2parallelcoordtrans_8C.html +https://root.cern/doc/v628/cocoa_2grad2_8C.html +https://root.cern/doc/v628/cocoa_2transparentpad_8C.html +https://root.cern/doc/v628/TMVA__SOFIE__RSofieReader_8C.html +https://root.cern/doc/v628/tmva100__DataPreparation_8py.html +https://root.cern/doc/v628/TMVACrossValidation_8C.html +https://root.cern/doc/v628/TMVAMulticlass_8C.html +https://root.cern/doc/v628/TMVA__SOFIE__Keras__HiggsModel_8C.html +https://root.cern/doc/v628/TMVAGAexample2_8C.html +https://root.cern/doc/v628/TMVAClassificationCategoryApplication_8C.html +https://root.cern/doc/v628/TMVAMultipleBackgroundExample_8C.html +https://root.cern/doc/v628/group__tutorial__tmva__envelope.html +https://root.cern/doc/v628/TMVA__SOFIE__RDataFrame__JIT_8C.html +https://root.cern/doc/v628/tmva004__RStandardScaler_8C.html +https://root.cern/doc/v628/TMVARegressionApplication_8C.html +https://root.cern/doc/v628/tmva102__Testing_8py.html +https://root.cern/doc/v628/tmva103__Application_8C.html +https://root.cern/doc/v628/TMVA__CNN__Classification_8py.html +https://root.cern/doc/v628/TMVA__RNN__Classification_8C.html +https://root.cern/doc/v628/TMVA__SOFIE__Keras_8C.html +https://root.cern/doc/v628/tmva003__RReader_8C.html +https://root.cern/doc/v628/TMVARegression_8C.html +https://root.cern/doc/v628/TMVA__RNN__Classification_8py.html +https://root.cern/doc/v628/group__tutorial__tmva__keras.html +https://root.cern/doc/v628/TMVAClassificationCategory_8C.html +https://root.cern/doc/v628/TMVAMinimalClassification_8C.html +https://root.cern/doc/v628/TMVA__SOFIE__RDataFrame_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/TMVA__Higgs__Classification_8py.html +https://root.cern/doc/v628/TMVA__SOFIE__ONNX_8C.html +https://root.cern/doc/v628/TMVAGAexample_8C.html +https://root.cern/doc/v628/TMVA__CNN__Classification_8C.html +https://root.cern/doc/v628/tmva002__RDataFrameAsTensor_8C.html +https://root.cern/doc/v628/TMVAClassificationApplication_8C.html +https://root.cern/doc/v628/tmva001__RTensor_8C.html +https://root.cern/doc/v628/createData_8C.html +https://root.cern/doc/v628/TMVACrossValidationRegression_8C.html +https://root.cern/doc/v628/TMVAMulticlassApplication_8C.html +https://root.cern/doc/v628/TMVA__SOFIE__PyTorch_8C.html +https://root.cern/doc/v628/TMVAClassification_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/group__tutorial__tmva__pytorch.html +https://root.cern/doc/v628/TMVA__Higgs__Classification_8C.html +https://root.cern/doc/v628/TMVA__SOFIE__RDataFrame_8py.html +https://root.cern/doc/v628/TMVACrossValidationApplication_8C.html +https://root.cern/doc/v628/TMVA__SOFIE__Inference_8py.html +https://root.cern/doc/v628/tmva101__Training_8py.html +https://root.cern/doc/v628/df012__DefinesAndFiltersAsStrings_8C.html +https://root.cern/doc/v628/df019__Cache_8py.html +https://root.cern/doc/v628/df023__aggregate_8C.html +https://root.cern/doc/v628/df012__DefinesAndFiltersAsStrings_8py.html +https://root.cern/doc/v628/df003__profiles_8py.html +https://root.cern/doc/v628/df022__useKahan_8C.html +https://root.cern/doc/v628/df017__vecOpsHEP_8py.html +https://root.cern/doc/v628/df018__customActions_8C.html +https://root.cern/doc/v628/df004__cutFlowReport_8C.html +https://root.cern/doc/v628/df031__Stats_8py.html +https://root.cern/doc/v628/df007__snapshot_8py.html +https://root.cern/doc/v628/df024__Display_8py.html +https://root.cern/doc/v628/df030__SQliteVersionsOfROOT_8C.html +https://root.cern/doc/v628/df020__helpers_8C.html +https://root.cern/doc/v628/df004__cutFlowReport_8py.html +https://root.cern/doc/v628/df000__simple_8py.html +https://root.cern/doc/v628/df006__ranges_8C.html +https://root.cern/doc/v628/df033__Describe_8py.html +https://root.cern/doc/v628/df103__NanoAODHiggsAnalysis__python_8h.html +https://root.cern/doc/v628/df021__createTGraph_8py.html +https://root.cern/doc/v628/distrdf001__spark__connection_8py.html +https://root.cern/doc/v628/df005__fillAnyObject_8C.html +https://root.cern/doc/v628/df009__FromScratchVSTTree_8C.html +https://root.cern/doc/v628/df008__createDataSetFromScratch_8C.html +https://root.cern/doc/v628/df101__h1Analysis_8C.html +https://root.cern/doc/v628/df102__NanoAODDimuonAnalysis_8py.html +https://root.cern/doc/v628/df103__NanoAODHiggsAnalysis_8C.html +https://root.cern/doc/v628/distrdf002__dask__connection_8py.html +https://root.cern/doc/v628/df019__Cache_8C.html +https://root.cern/doc/v628/df001__introduction_8py.html +https://root.cern/doc/v628/df013__InspectAnalysis_8C.html +https://root.cern/doc/v628/df017__vecOpsHEP_8C.html +https://root.cern/doc/v628/df010__trivialDataSource_8py.html +https://root.cern/doc/v628/df003__profiles_8C.html +https://root.cern/doc/v628/df007__snapshot_8C.html +https://root.cern/doc/v628/df006__ranges_8py.html +https://root.cern/doc/v628/df028__SQliteIPLocation_8C.html +https://root.cern/doc/v628/df029__SQlitePlatformDistribution_8C.html +https://root.cern/doc/v628/df034__SaveGraph_8C.html +https://root.cern/doc/v628/df008__createDataSetFromScratch_8py.html +https://root.cern/doc/v628/RDFHelpers_8hxx.html +https://root.cern/doc/v628/df024__Display_8C.html +https://root.cern/doc/v628/df025__RNode_8C.html +https://root.cern/doc/v628/df106__HiggsToFourLeptons_8py.html +https://root.cern/doc/v628/df015__LazyDataSource_8C.html +https://root.cern/doc/v628/df021__createTGraph_8C.html +https://root.cern/doc/v628/df010__trivialDataSource_8C.html +https://root.cern/doc/v628/df032__RDFFromNumpy_8py.html +https://root.cern/doc/v628/df034__SaveGraph_8py.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/df105__WBosonAnalysis_8py.html +https://root.cern/doc/v628/df026__AsNumpyArrays_8py.html +https://root.cern/doc/v628/df031__Stats_8C.html +https://root.cern/doc/v628/df000__simple_8C.html +https://root.cern/doc/v628/df001__introduction_8C.html +https://root.cern/doc/v628/df016__vecOps_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/df014__CSVDataSource_8C.html +https://root.cern/doc/v628/df102__NanoAODDimuonAnalysis_8C.html +https://root.cern/doc/v628/df002__dataModel_8C.html +https://root.cern/doc/v628/df014__CSVDataSource_8py.html +https://root.cern/doc/v628/df103__NanoAODHiggsAnalysis_8py.html +https://root.cern/doc/v628/df027__SQliteDependencyOverVersion_8C.html +https://root.cern/doc/v628/df107__SingleTopAnalysis_8py.html +https://root.cern/doc/v628/df016__vecOps_8py.html +https://root.cern/doc/v628/df002__dataModel_8py.html +https://root.cern/doc/v628/df104__HiggsToTwoPhotons_8py.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/CompareMasses_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/BDT__Reg_8h_source.html +https://root.cern/doc/v628/tmva_2tmva_2inc_2TMVA_2Types_8h_source.html#l00049 +https://root.cern/doc/v628/BDT__Reg_8h_source.html#l00101 +https://root.cern/doc/v628/PDEFoam_8h_source.html#l00058 +https://root.cern/doc/v628/RtypesCore_8h.html#aa65ddc5b79a777f9c9cfb5945492e2ac +https://root.cern/doc/v628/tmva_2tmva_2inc_2TMVA_2Types_8h_source.html#l00069 +https://root.cern/doc/v628/PDEFoamMultiTarget_8h_source.html +https://root.cern/doc/v628/GeneticAlgorithm_8cxx_source.html +https://root.cern/doc/v628/MethodCFMlpANN__def_8h_source.html#l00038 +https://root.cern/doc/v628/CrossValidation_8h_source.html#l00048 +https://root.cern/doc/v628/tmva_2tmva_2inc_2TMVA_2Types_8h_source.html +https://root.cern/doc/v628/Configurable_8cxx_source.html +https://root.cern/doc/v628/PDEFoam_8h_source.html +https://root.cern/doc/v628/RtypesCore_8h.html#a214b8b7fe0ace4cd2df6d36749310112 +https://root.cern/doc/v628/tmva_2tmva_2inc_2TMVA_2Types_8h_source.html#l00066 +https://root.cern/doc/v628/BDT_8cxx_source.html +https://root.cern/doc/v628/RtypesCore_8h.html#a7e568baf910535e8ffd438acb843434d +https://root.cern/doc/v628/BDT_8h_source.html +https://root.cern/doc/v628/tmva_2tmva_2inc_2TMVA_2Types_8h_source.html#l00055 +https://root.cern/doc/v628/MethodCFMlpANN__def_8h_source.html#l00040 +https://root.cern/doc/v628/efficienciesMulticlass_8h_source.html#l00014 +https://root.cern/doc/v628/MethodCFMlpANN__def_8h_source.html +https://root.cern/doc/v628/PDEFoamMultiTarget_8h_source.html#l00044 +https://root.cern/doc/v628/MethodCFMlpANN__def_8h_source.html#l00041 +https://root.cern/doc/v628/CrossValidation_8h_source.html#l00051 +https://root.cern/doc/v628/MethodPDERS_8cxx_source.html#l00089 +https://root.cern/doc/v628/MethodPDERS_8cxx_source.html +https://root.cern/doc/v628/BDT__Reg_8cxx_source.html +https://root.cern/doc/v628/PDEFoam_8h_source.html#l00069 +https://root.cern/doc/v628/group__TMVA.html +https://root.cern/doc/v628/MethodCFMlpANN__def_8h_source.html#l00039 +https://root.cern/doc/v628/CrossValidation_8h_source.html +https://root.cern/doc/v628/CrossValidation_8h_source.html#l00049 +https://root.cern/doc/v628/RtypesCore_8h.html#a956adc3a5a5961ed58826fd2c156a56c +https://root.cern/doc/v628/BDT_8h_source.html#l00112 +https://root.cern/doc/v628/efficienciesMulticlass_8h_source.html +https://root.cern/doc/v628/CrossValidation_8h_source.html#l00050 +https://root.cern/doc/v628/GeneticAlgorithm_8cxx_source.html#l00050 +https://root.cern/doc/v628/PDEFoam_8h_source.html#l00054 +https://root.cern/doc/v628/namespaceRooStats.html#a34fcacc877431506b5b9b583a3457a6b +https://root.cern/doc/v628/namespaceRooStats.html#a8e3058a215a2b0bf20c606942f0e6358 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00124 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00155 +https://root.cern/doc/v628/namespaceRooStats.html#a900ecc786db85571bd96d53eade0fe95abf6499b8ffb78552e0b8f911d788886c +https://root.cern/doc/v628/namespaceRooStats.html +https://root.cern/doc/v628/namespaceRooStats.html#af7e54464c5391b4a6795a96e1f03fcbb +https://root.cern/doc/v628/RooStatsUtils_8h_source.html +https://root.cern/doc/v628/group__HistFactory.html +https://root.cern/doc/v628/namespaceRooStats.html#a1fea0cba99e6de337c8093b4f99e62df +https://root.cern/doc/v628/namespaceRooStats.html#a484e00f03ff457c7d8e620c8c12d1ab5 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00292 +https://root.cern/doc/v628/namespaceRooStats_1_1ROOTDict.html +https://root.cern/doc/v628/namespaceRooStats.html#af93dc9c6ee86dc47f4a4f915af487f87 +https://root.cern/doc/v628/ToyMCImportanceSampler_8h_source.html +https://root.cern/doc/v628/RooStatsUtils_8h_source.html#l00085 +https://root.cern/doc/v628/namespaceRooStats.html#a3ff90674e9077028eabafd1f82e72f6a +https://root.cern/doc/v628/namespaceRooStats_1_1NumberCountingUtils.html +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00215 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00059 +https://root.cern/doc/v628/RooStatsUtils_8h_source.html#l00063 +https://root.cern/doc/v628/TGX11_8cxx.html#a3777dbae63a15da001b2baa317a25149 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00091 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00146 +https://root.cern/doc/v628/group__Roofitmain.html +https://root.cern/doc/v628/namespaceRooStats.html#a827f04b74fab219d613f178fa24d0bc9 +https://root.cern/doc/v628/RooStatsUtils_8h_source.html#l00098 +https://root.cern/doc/v628/namespaceRooStats_1_1HistFactory.html +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00087 +https://root.cern/doc/v628/RooStatsUtils_8h_source.html#l00075 +https://root.cern/doc/v628/structRooStats_1_1LikelihoodFunction.html +https://root.cern/doc/v628/namespaceRooStats.html#aa3e8e1957a68d767ae126bc21202fe43 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a708eea989a1e99ae1e03f7ad31d9f473 +https://root.cern/doc/v628/structRooStats_1_1RooStatsConfig.html +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a06acd892b4a370b191bf66814941150c +https://root.cern/doc/v628/namespaceRooStats.html#aa9ea739b1bb2cd413d8e476b12ea3eb8 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00226 +https://root.cern/doc/v628/namespaceRooStats.html#a5022171c52d21d0aeb07204be02d90a2 +https://root.cern/doc/v628/ToyMCImportanceSampler_8h_source.html#l00020 +https://root.cern/doc/v628/group__Roostats.html +https://root.cern/doc/v628/namespaceRooStats.html#a900ecc786db85571bd96d53eade0fe95a18dd31989660cf5c3427c6a534c18c8d +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00272 +https://root.cern/doc/v628/namespaceRooStats.html#a86accd549b45700ec4bdd1af197ff888 +https://root.cern/doc/v628/RSha256_8hxx.html#a337ad8a7e52da2d584c2018f2ec2c81e +https://root.cern/doc/v628/RooStatsUtils_8h_source.html#l00054 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00316 +https://root.cern/doc/v628/namespaceRooStats.html#a900ecc786db85571bd96d53eade0fe95 +https://root.cern/doc/v628/namespaceRooStats.html#adc93d76384e724f0cdbc9ec9fc85ea62 +https://root.cern/doc/v628/BayesianCalculator_8cxx_source.html +https://root.cern/doc/v628/RooStatsUtils_8h_source.html#l00067 +https://root.cern/doc/v628/namespaceRooStats.html#abc3b1ac0175189f1e00204c6bdfa87af +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00324 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00082 +https://root.cern/doc/v628/BayesianCalculator_8cxx_source.html#l00101 +https://root.cern/doc/v628/namespaceRooStats.html#a26c7b63c360fd8c208423b292a4cdae1 +https://root.cern/doc/v628/namespaceRooStats.html#a4b89011fc0e036841cb0a83022c4adf0 +https://root.cern/doc/v628/namespaceRooStats.html#a182cb34e51a998218bc623211cf09d3b +https://root.cern/doc/v628/namespaceRooStats.html#a7474b5541f0452384501675c499bcace +https://root.cern/doc/v628/namespaceRooStats.html#a14d2a56679ea82a01577e16b27796dc5 +https://root.cern/doc/v628/namespaceRooStats.html#a1cd54e390faed4aff21fe5f7363c0d09 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00342 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00135 +https://root.cern/doc/v628/namespaceRooStats.html#aa10b9d7d1e2012ccb08f5733d740bba9 +https://root.cern/doc/v628/textangle_8C.html#a1988b64f5ec67c2d076d85aa86404351 +https://root.cern/doc/v628/namespaceRooStats.html#a5cc983b96e3880c161c4ebe806d1b3a0 +https://root.cern/doc/v628/namespaceRooStats.html#ae80ac0625848a7c45b2767bb6e554604 +https://root.cern/doc/v628/namespaceRooStats.html#a4b62f6320176e78b868f43c4b582be23 +https://root.cern/doc/v628/RooStatsUtils_8cxx_source.html#l00054 +https://root.cern/doc/v628/RooStatsUtils_8h_source.html#l00049 +https://root.cern/doc/v628/group__Hist.html +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00028 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a27821176d4fc304f1a8c78658119abf4 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00032 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l02129 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00057 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l01892 +https://root.cern/doc/v628/structevent.html +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l02580 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l01198 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00033 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00354 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l01462 +https://root.cern/doc/v628/RtypesCore_8h.html#af4b8b0ed8481dce26755d68fe8f39c5d +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l01668 +https://root.cern/doc/v628/h1analysisProxy_8h.html#a351c2b9335dfcbe83de6eb9629c2a0e3 +https://root.cern/doc/v628/TGX11_8cxx.html#a3777dbae63a15da001b2baa317a25149 +https://root.cern/doc/v628/RConfig_8hxx.html#a1a5b10885d81b7312605031163435e1e +https://root.cern/doc/v628/RtypesCore_8h.html#a5684fca17bcfb165d5c72366d391e360 +https://root.cern/doc/v628/RtypesCore_8h.html#ab9b5334647b78ec4256db251e3ae1fc6 +https://root.cern/doc/v628/RSha256_8hxx.html#a357394e0f6f88c8a57bd893ab28dc8f8 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00030 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00029 +https://root.cern/doc/v628/RtypesCore_8h.html#a214b8b7fe0ace4cd2df6d36749310112 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00027 +https://root.cern/doc/v628/TSpectrum_8h_source.html +https://root.cern/doc/v628/RSha256_8hxx.html#acf9942d15f0dd0ac4fc5ca66096a3f6d +https://root.cern/doc/v628/legend1_8C.html#a747f799d89a43a33a1ad6488a9fe2b8b +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00515 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l02590 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00036 +https://root.cern/doc/v628/RSha256_8hxx.html#a337ad8a7e52da2d584c2018f2ec2c81e +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00059 +https://root.cern/doc/v628/RtypesCore_8h.html#afc405399e08793afdff5b4692827b2a1 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00031 +https://root.cern/doc/v628/RtypesCore_8h.html#a2f6a60bd1cf0af65f2bcef4098d623b8 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00053 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00111 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00222 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00018 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00090 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00155 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00078 +https://root.cern/doc/v628/RtypesCore_8h.html#a956adc3a5a5961ed58826fd2c156a56c +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a0589dad2fc39f739b87dd0139fcc0617 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00056 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00102 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00073 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00026 +https://root.cern/doc/v628/TGWin32VirtualGLProxy_8cxx.html#a2cc915af4a7e94ccc89354008647637c +https://root.cern/doc/v628/group__Spectrum.html +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l02566 +https://root.cern/doc/v628/RtypesCore_8h.html#a5d4ba170dce452c8ab6038b9fff28a6d +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00025 +https://root.cern/doc/v628/TSpectrum_8h_source.html#l00058 +https://root.cern/doc/v628/TSpectrum_8cxx_source.html +https://root.cern/doc/v628/TSpectrum_8cxx_source.html#l00269 +https://root.cern/doc/v628/testTMPIFile_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/double32_8C.html +https://root.cern/doc/v628/dirs_8C.html +https://root.cern/doc/v628/fildir_8C.html +https://root.cern/doc/v628/hadd_8C.html +https://root.cern/doc/v628/readCode_8C.html +https://root.cern/doc/v628/testMergeCont_8C.html +https://root.cern/doc/v628/file_8C.html +https://root.cern/doc/v628/importCode_8C.html +https://root.cern/doc/v628/copyFiles_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/float16_8C.html +https://root.cern/doc/v628/loopdir11_8C.html +https://root.cern/doc/v628/mergeSelective_8C.html +https://root.cern/doc/v628/loopdir_8C.html +https://root.cern/doc/v628/textviewostream_8C.html +https://root.cern/doc/v628/games_8C.html +https://root.cern/doc/v628/iconAsXPMData_8C.html +https://root.cern/doc/v628/customTH1Fmenu_8C.html +https://root.cern/doc/v628/simpleTableTest_8C.html +https://root.cern/doc/v628/Slider3Demo_8C.html +https://root.cern/doc/v628/buttongroupState_8C.html +https://root.cern/doc/v628/statusBar_8C.html +https://root.cern/doc/v628/ntupleTableTest_8C.html +https://root.cern/doc/v628/numberEntry_8C.html +https://root.cern/doc/v628/drag__and__drop_8C.html +https://root.cern/doc/v628/guiWithCINT_8C.html +https://root.cern/doc/v628/splitterHorizontal_8C.html +https://root.cern/doc/v628/WorldMap_8C.html +https://root.cern/doc/v628/buttonTest_8C.html +https://root.cern/doc/v628/gtreeTableTest_8C.html +https://root.cern/doc/v628/staffTableTest_8C.html +https://root.cern/doc/v628/guitest__playback_8C.html +https://root.cern/doc/v628/buttonChangelabel_8C.html +https://root.cern/doc/v628/splitbuttonTest_8C.html +https://root.cern/doc/v628/customContextMenu_8C.html +https://root.cern/doc/v628/textEntries_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/mditest_8C.html +https://root.cern/doc/v628/CPUMeter_8C.html +https://root.cern/doc/v628/splitterVertical_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/guitest_8C.html +https://root.cern/doc/v628/buttonsLayout_8C.html +https://root.cern/doc/v628/listBox_8C.html +https://root.cern/doc/v628/calendar_8C.html +https://root.cern/doc/v628/exec3_8C.html +https://root.cern/doc/v628/guilabels_8C.html +https://root.cern/doc/v628/exec__macro_8C.html +https://root.cern/doc/v628/Src4_8C.html +https://root.cern/doc/v628/Src2_8C.html +https://root.cern/doc/v628/Background__gamma64_8C.html +https://root.cern/doc/v628/Background__gamma256_8C.html +https://root.cern/doc/v628/peaks_8C.html +https://root.cern/doc/v628/Background__compton_8C.html +https://root.cern/doc/v628/Background__synt256_8C.html +https://root.cern/doc/v628/Deconvolution2__HR_8C.html +https://root.cern/doc/v628/Background__decr_8C.html +https://root.cern/doc/v628/DeconvolutionRL__wide_8C.html +https://root.cern/doc/v628/Background__width_8C.html +https://root.cern/doc/v628/Background__order_8C.html +https://root.cern/doc/v628/SearchHR1_8C.html +https://root.cern/doc/v628/Deconvolution2__1_8C.html +https://root.cern/doc/v628/Deconvolution__wide_8C.html +https://root.cern/doc/v628/Smooth_8C.html +https://root.cern/doc/v628/Background__width2_8C.html +https://root.cern/doc/v628/peaks2_8C.html +https://root.cern/doc/v628/SearchHR3_8C.html +https://root.cern/doc/v628/Src_8C.html +https://root.cern/doc/v628/Src5_8C.html +https://root.cern/doc/v628/Smoothing_8C.html +https://root.cern/doc/v628/DeconvolutionRL__wide__boost_8C.html +https://root.cern/doc/v628/Deconvolution2__2_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/spectrumpainter_8C.html +https://root.cern/doc/v628/Deconvolution_8C.html +https://root.cern/doc/v628/Src3_8C.html +https://root.cern/doc/v628/Background__smooth_8C.html +https://root.cern/doc/v628/FitAwmi_8C.html +https://root.cern/doc/v628/Background__incr_8C.html +https://root.cern/doc/v628/Deconvolution__wide__boost_8C.html +https://root.cern/doc/v628/dir_a829051beca983f0d7c2feecd60624fc.html +https://root.cern/doc/v628/rootlogoff_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/rootlogoff_8C_source.html +https://root.cern/doc/v628/example_8py.html +https://root.cern/doc/v628/hf001__example_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/TestSPlot_8C.html +https://root.cern/doc/v628/nucleus_8C.html +https://root.cern/doc/v628/gl_2gradients_8C.html +https://root.cern/doc/v628/gviz3d_8C.html +https://root.cern/doc/v628/gl_2grad_8C.html +https://root.cern/doc/v628/gl_2grad2_8C.html +https://root.cern/doc/v628/gl_2radialgradients_8C.html +https://root.cern/doc/v628/gl_2transp__text_8C.html +https://root.cern/doc/v628/glrose_8C.html +https://root.cern/doc/v628/gltf3_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/glparametrics2_8C.html +https://root.cern/doc/v628/glvox2_8C.html +https://root.cern/doc/v628/gl_2transp_8C.html +https://root.cern/doc/v628/labels1_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/gl_2transparentpad_8C.html +https://root.cern/doc/v628/glparametric_8C.html +https://root.cern/doc/v628/gl_2parallelcoordtrans_8C.html +https://root.cern/doc/v628/gldemos_8C.html +https://root.cern/doc/v628/glsurfaces_8C.html +https://root.cern/doc/v628/viewer3DMaster_8C.html +https://root.cern/doc/v628/viewer3DLocal_8C.html +https://root.cern/doc/v628/glViewerLOD_8C.html +https://root.cern/doc/v628/glbox_8C.html +https://root.cern/doc/v628/glvox1_8C.html +https://root.cern/doc/v628/glViewerExercise_8C.html +https://root.cern/doc/v628/glh3c_8C.html +https://root.cern/doc/v628/TImage_8h_source.html#l00151 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#aefd35b519b1034ac31a23883b1271941 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a27821176d4fc304f1a8c78658119abf4 +https://root.cern/doc/v628/TImage_8h_source.html#l00184 +https://root.cern/doc/v628/TImage_8h_source.html#l00222 +https://root.cern/doc/v628/TImage_8h_source.html#l00099 +https://root.cern/doc/v628/group__Graphics.html +https://root.cern/doc/v628/TImage_8h_source.html#l00122 +https://root.cern/doc/v628/TImage_8h_source.html#l00134 +https://root.cern/doc/v628/TImage_8h_source.html#l00196 +https://root.cern/doc/v628/TImage_8h_source.html#l00194 +https://root.cern/doc/v628/RtypesCore_8h.html#a21a25f08168f2ad417bd3f65599bc08b +https://root.cern/doc/v628/TGX11_8cxx.html#a3777dbae63a15da001b2baa317a25149 +https://root.cern/doc/v628/TImage_8h_source.html#l00100 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#ae10ea76d0f4e121f23ebe29f7431d524 +https://root.cern/doc/v628/RtypesCore_8h.html#ab9b5334647b78ec4256db251e3ae1fc6 +https://root.cern/doc/v628/TImage_8h_source.html#l00230 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#ad2dbff84738eb48a607389465e1e83ae +https://root.cern/doc/v628/TImage_8h_source.html#l00135 +https://root.cern/doc/v628/RtypesCore_8h.html#a7e568baf910535e8ffd438acb843434d +https://root.cern/doc/v628/TImage_8h_source.html +https://root.cern/doc/v628/RSha256_8hxx.html#a337ad8a7e52da2d584c2018f2ec2c81e +https://root.cern/doc/v628/TImage_8h_source.html#l00128 +https://root.cern/doc/v628/RtypesCore_8h.html#a2f6a60bd1cf0af65f2bcef4098d623b8 +https://root.cern/doc/v628/group__Graphics2D.html +https://root.cern/doc/v628/TImage_8h_source.html#l00207 +https://root.cern/doc/v628/TImage_8h_source.html#l00233 +https://root.cern/doc/v628/TImage_8h_source.html#l00225 +https://root.cern/doc/v628/TImage_8h_source.html#l00221 +https://root.cern/doc/v628/RtypesCore_8h.html#a956adc3a5a5961ed58826fd2c156a56c +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a0589dad2fc39f739b87dd0139fcc0617 +https://root.cern/doc/v628/TImage_8h_source.html#l00226 +https://root.cern/doc/v628/TImage_8cxx_source.html#l00109 +https://root.cern/doc/v628/TImage_8h_source.html#l00243 +https://root.cern/doc/v628/TImage_8h_source.html#l00114 +https://root.cern/doc/v628/TImage_8h_source.html#l00115 +https://root.cern/doc/v628/TImage_8h_source.html#l00197 +https://root.cern/doc/v628/TImage_8h_source.html#l00200 +https://root.cern/doc/v628/TImage_8h_source.html#l00118 +https://root.cern/doc/v628/TImage_8cxx_source.html#l00059 +https://root.cern/doc/v628/TImage_8h_source.html#l00111 +https://root.cern/doc/v628/TImage_8h_source.html#l00217 +https://root.cern/doc/v628/TImage_8h_source.html#l00144 +https://root.cern/doc/v628/structevent.html +https://root.cern/doc/v628/TImage_8h_source.html#l00215 +https://root.cern/doc/v628/TImage_8h_source.html#l00214 +https://root.cern/doc/v628/TImage_8h_source.html#l00148 +https://root.cern/doc/v628/TImage_8h_source.html#l00203 +https://root.cern/doc/v628/TImage_8h_source.html#l00141 +https://root.cern/doc/v628/TImage_8h_source.html#l00219 +https://root.cern/doc/v628/TImage_8cxx_source.html#l00118 +https://root.cern/doc/v628/RConfig_8hxx.html#a1a5b10885d81b7312605031163435e1e +https://root.cern/doc/v628/RtypesCore_8h.html#a5684fca17bcfb165d5c72366d391e360 +https://root.cern/doc/v628/TImage_8h_source.html#l00164 +https://root.cern/doc/v628/TImage_8h_source.html#l00228 +https://root.cern/doc/v628/RSha256_8hxx.html#a357394e0f6f88c8a57bd893ab28dc8f8 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a708eea989a1e99ae1e03f7ad31d9f473 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a06acd892b4a370b191bf66814941150c +https://root.cern/doc/v628/TImage_8cxx_source.html#l00179 +https://root.cern/doc/v628/TImage_8h_source.html#l00220 +https://root.cern/doc/v628/TImage_8h_source.html#l00199 +https://root.cern/doc/v628/GuiTypes_8h.html#a19108f0b4ebd91c180d0cda3f8bdcd72 +https://root.cern/doc/v628/TImage_8h_source.html#l00117 +https://root.cern/doc/v628/TImage_8h_source.html#l00138 +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/TImage_8h_source.html#l00168 +https://root.cern/doc/v628/TImage_8h_source.html#l00256 +https://root.cern/doc/v628/TImage_8h_source.html#l00192 +https://root.cern/doc/v628/TImage_8h_source.html#l00186 +https://root.cern/doc/v628/TImage_8h_source.html#l00172 +https://root.cern/doc/v628/TVectorDfwd_8h.html#a901d7ac901e3fd3b94ba0aef558b4a0e +https://root.cern/doc/v628/TImage_8cxx_source.html#l00191 +https://root.cern/doc/v628/TImage_8h_source.html#l00255 +https://root.cern/doc/v628/TImage_8h_source.html#l00211 +https://root.cern/doc/v628/TImage_8cxx_source.html#l00192 +https://root.cern/doc/v628/TImage_8h_source.html#l00175 +https://root.cern/doc/v628/TImage_8cxx_source.html +https://root.cern/doc/v628/TImage_8h_source.html#l00116 +https://root.cern/doc/v628/TImage_8h_source.html#l00234 +https://root.cern/doc/v628/TImage_8h_source.html#l00204 +https://root.cern/doc/v628/TImage_8h_source.html#l00131 +https://root.cern/doc/v628/TImage_8h_source.html#l00223 +https://root.cern/doc/v628/TImage_8h_source.html#l00104 +https://root.cern/doc/v628/TImage_8h_source.html#l00154 +https://root.cern/doc/v628/TImage_8h_source.html#l00106 +https://root.cern/doc/v628/RtypesCore_8h.html#af4b8b0ed8481dce26755d68fe8f39c5d +https://root.cern/doc/v628/TImage_8h_source.html#l00103 +https://root.cern/doc/v628/TImage_8h_source.html#l00190 +https://root.cern/doc/v628/TImage_8h_source.html#l00218 +https://root.cern/doc/v628/RtypesCore_8h.html#a214b8b7fe0ace4cd2df6d36749310112 +https://root.cern/doc/v628/TImage_8h_source.html#l00125 +https://root.cern/doc/v628/TImage_8h_source.html#l00108 +https://root.cern/doc/v628/TImage_8h_source.html#l00161 +https://root.cern/doc/v628/TImage_8h_source.html#l00058 +https://root.cern/doc/v628/TImage_8h_source.html#l00029 +https://root.cern/doc/v628/TImage_8h_source.html#l00210 +https://root.cern/doc/v628/TImage_8h_source.html#l00236 +https://root.cern/doc/v628/TImage_8h_source.html#l00213 +https://root.cern/doc/v628/TImage_8h_source.html#l00072 +https://root.cern/doc/v628/TImage_8h_source.html#l00158 +https://root.cern/doc/v628/TImage_8h_source.html#l00208 +https://root.cern/doc/v628/TImage_8h_source.html#l00245 +https://root.cern/doc/v628/TImage_8cxx_source.html#l00035 +https://root.cern/doc/v628/TImage_8h_source.html#l00188 +https://root.cern/doc/v628/TImage_8h_source.html#l00241 +https://root.cern/doc/v628/TImage_8h_source.html#l00229 +https://root.cern/doc/v628/TImage_8h_source.html#l00206 +https://root.cern/doc/v628/TImage_8h_source.html#l00235 +https://root.cern/doc/v628/RtypesCore_8h.html#af2f51d30ccd86e85be3e3e69793a86ef +https://root.cern/doc/v628/TImage_8h_source.html#l00244 +https://root.cern/doc/v628/TImage_8h_source.html#l00231 +https://root.cern/doc/v628/RtypesCore_8h.html#aa65ddc5b79a777f9c9cfb5945492e2ac +https://root.cern/doc/v628/TImage_8h_source.html#l00239 +https://root.cern/doc/v628/TImage_8cxx_source.html#l00164 +https://root.cern/doc/v628/TImage_8h_source.html#l00090 +https://root.cern/doc/v628/TImage_8h_source.html#l00178 +https://root.cern/doc/v628/TImage_8h_source.html#l00085 +https://root.cern/doc/v628/TImage_8cxx_source.html#l00149 +https://root.cern/doc/v628/TImage_8h_source.html#l00183 +https://root.cern/doc/v628/GuiTypes_8h.html#a85ae13c20c1dcd0348bea8eb83f95ae1 +https://root.cern/doc/v628/structSegment__t.html +https://root.cern/doc/v628/TImage_8h_source.html#l00036 +https://root.cern/doc/v628/TAttImage_8h.html#ac009ed69ab4661dd76f7b81fad782e7b +https://root.cern/doc/v628/TImage_8cxx_source.html#l00134 +https://root.cern/doc/v628/group__BasicGraphics.html +https://root.cern/doc/v628/TImage_8h_source.html#l00078 +https://root.cern/doc/v628/TImage_8h_source.html#l00119 +https://root.cern/doc/v628/TImage_8h_source.html#l00240 +https://root.cern/doc/v628/RtypesCore_8h.html#a64926e032e221b6f9a7a97ceac657223 +https://root.cern/doc/v628/RtypesCore_8h.html#afc405399e08793afdff5b4692827b2a1 +https://root.cern/doc/v628/TImage_8h_source.html#l00182 +https://root.cern/doc/v628/TImage_8h_source.html#l00238 +https://root.cern/doc/v628/TImage_8h_source.html#l00237 +https://root.cern/doc/v628/TImage_8h_source.html#l00260 +https://root.cern/doc/v628/RtypesCore_8h.html#a5d4ba170dce452c8ab6038b9fff28a6d +https://root.cern/doc/v628/TImage_8h_source.html#l00242 +https://root.cern/doc/v628/imt001__parBranchProcessing_8C.html +https://root.cern/doc/v628/mp201__parallelHistoFill_8C.html +https://root.cern/doc/v628/mt304__fillHistos_8C.html +https://root.cern/doc/v628/imt101__parTreeProcessing_8C.html +https://root.cern/doc/v628/mt001__fillHistos_8C.html +https://root.cern/doc/v628/mp101__fillNtuples_8C.html +https://root.cern/doc/v628/mtbb001__fillHistos_8C.html +https://root.cern/doc/v628/mp102__readNtuplesFillHistosAndFit_8C.html +https://root.cern/doc/v628/mp105__processEntryList_8C.html +https://root.cern/doc/v628/mt101__fillNtuples_8C.html +https://root.cern/doc/v628/mp104__processH1_8C.html +https://root.cern/doc/v628/mp103__processSelector_8C.html +https://root.cern/doc/v628/mtbb101__fillNtuples_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/mt102__readNtuplesFillHistosAndFit_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/mt103__fillNtupleFromMultipleThreads_8C.html +https://root.cern/doc/v628/mp__H1__lambdas_8C.html +https://root.cern/doc/v628/mp001__fillHistos_8C.html +https://root.cern/doc/v628/mt201__parallelHistoFill_8C.html +https://root.cern/doc/v628/mt301__TTaskGroupSimple_8C.html +https://root.cern/doc/v628/mtbb201__parallelHistoFill_8C.html +https://root.cern/doc/v628/httpserver_8C.html +https://root.cern/doc/v628/ws_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/custom_8C.html +https://root.cern/doc/v628/httpcontrol_8C.html +https://root.cern/doc/v628/histfitserver_8C.html +https://root.cern/doc/v628/httpaccess_8C.html +https://root.cern/doc/v628/httptextlog_8C.html +https://root.cern/doc/v628/httpgeom_8C.html +https://root.cern/doc/v628/group__tutorial__rcanvas.html +https://root.cern/doc/v628/perfcomp_8cxx.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/concurrentfill_8cxx.html +https://root.cern/doc/v628/fitpanel_8cxx.html +https://root.cern/doc/v628/perf_8cxx.html +https://root.cern/doc/v628/fitpanel6_8cxx.html +https://root.cern/doc/v628/browser_8cxx.html +https://root.cern/doc/v628/histops_8cxx.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/simple_8cxx.html +https://root.cern/doc/v628/global__temperatures_8cxx.html +https://root.cern/doc/v628/group__tutorial__ntuple.html +https://root.cern/doc/v628/filedialog_8cxx.html +https://root.cern/doc/v628/roofit_2xroofit_2inc_2RooFit_2xRooFit_2Config_8h_source.html +https://root.cern/doc/v628/group__CmdArgs.html#ga4feb4c24ec330df072a02293199d713f +https://root.cern/doc/v628/group__CmdArgs.html#ga071995b844929c61cc8ea6506f94c38f +https://root.cern/doc/v628/group__CmdArgs.html#gaa1753586c2f0c26fc0997e9300c56a68 +https://root.cern/doc/v628/RooCFunction4Binding_8cxx_source.html#l00047 +https://root.cern/doc/v628/namespaceRooFit.html#aca3b50fdf3530d4735e0fdbbb31f1a72 +https://root.cern/doc/v628/group__CmdArgs.html#ga33c7ab9434457a0c38cda71335d8174f +https://root.cern/doc/v628/group__Plotting.html#ga4633071ca121b27585c1c409d6eda034 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#ae10ea76d0f4e121f23ebe29f7431d524 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a0d853b938bb80d9d95561b66585e927d +https://root.cern/doc/v628/group__Fitting.html#ga30b2f29c6489a3b32c17b8587d568530 +https://root.cern/doc/v628/namespaceRooFit.html#a1c027c62189b1c7e0745850091b575b1 +https://root.cern/doc/v628/group__ConstructorArgs.html#ga1d94f84c947c9f78c9579ed91a6287da +https://root.cern/doc/v628/RooPrintable_8cxx_source.html#l00050 +https://root.cern/doc/v628/group__Generating.html#ga4499e9b7031e9cedc0da2498e08710d6 +https://root.cern/doc/v628/RooCFunction1Binding_8cxx_source.html#l00071 +https://root.cern/doc/v628/namespaceRooFit.html#a36e12ae9ea9c0d3ab48f71c4ffcdace3a8a9f56c82936977a90e0231d2546b803 +https://root.cern/doc/v628/namespaceRooFit.html#a400d4b9411c2007ff3ee8f5f503191c9 +https://root.cern/doc/v628/RooCFunction4Binding_8h_source.html#l00031 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00071 +https://root.cern/doc/v628/legend1_8C.html#a1cf21b68373bbb5839af0adcd2aba7fa +https://root.cern/doc/v628/RtypesCore_8h.html#a956adc3a5a5961ed58826fd2c156a56c +https://root.cern/doc/v628/group__Plotting.html#ga7cfa68c798a0732d3aee850376051a87 +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00063 +https://root.cern/doc/v628/group__Plotting.html#ga9cc220d5e19aca59abacc4a979070e27 +https://root.cern/doc/v628/group__Fitting.html#gaa6e06ee17eadfb64722d6c1793c7a580 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00067 +https://root.cern/doc/v628/namespaceRooFit.html#a6a63422f0171c3cbbd8de1aa7268b2ef +https://root.cern/doc/v628/group__Plotting.html#gab61c26266a7722f761a64bcb99371957 +https://root.cern/doc/v628/group__Fitting.html#gadae3963342b780593d7d23279398bca0 +https://root.cern/doc/v628/group__Generating.html#ga7311b9cd2987cba60e6d4366ee4cf498 +https://root.cern/doc/v628/group__CmdArgs.html#gae54d341ba26c262b48c78d6eae0678e9 +https://root.cern/doc/v628/group__CmdArgs.html#ga074930f3b86ab2ce0693b1516fa21507 +https://root.cern/doc/v628/RooPrintable_8cxx_source.html +https://root.cern/doc/v628/namespaceRooFit.html#a5cf659ce1d64334611ecf9123991ea5da34cc9439d7012bb72b0e5d121d19d04f +https://root.cern/doc/v628/namespaceRooFit.html#ad03c32d365e4e7587d7ec19e194a295e +https://root.cern/doc/v628/group__Fitting.html#gaf10ac84be56d7aed5148ba560249b60d +https://root.cern/doc/v628/RooCFunction4Binding_8cxx_source.html#l00055 +https://root.cern/doc/v628/group__Plotting.html#ga6ab9e7627f36ae7a50b5d22d8dd76b3d +https://root.cern/doc/v628/group__Plotting.html#ga49cad0fe52cee8cf5b4ea13b1cbba0ba +https://root.cern/doc/v628/namespaceRooFit.html#a60059edbadf216ca595517c210cd4cc9 +https://root.cern/doc/v628/group__ConstructorArgs.html#gab24cf4660bc8cf1952fe22396beb5e44 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148afe252bca1f9640572f1b03e4eb50d95c +https://root.cern/doc/v628/group__ConstructorArgs.html#gadd5b13a2b4a74f9ab539b360abf2f546 +https://root.cern/doc/v628/group__Plotting.html#gad050d82e3c76f6540ce978470e0996c8 +https://root.cern/doc/v628/RooCFunction3Binding_8h_source.html#l00035 +https://root.cern/doc/v628/namespaceRooFit.html#a2c79db075ca8c08b98ad7402d39dea91 +https://root.cern/doc/v628/group__Fitting.html#ga76ad4eceb116f5c97b4ebdcd05c4fadd +https://root.cern/doc/v628/group__Plotting.html#gab1b1417ba8d4a3f4529f0a57dde67ea9 +https://root.cern/doc/v628/group__CmdArgs.html#ga7ecdf2faebcf3a81a1e6341d5b12f7fd +https://root.cern/doc/v628/group__Plotting.html#ga5c9ac2461f9886d8f7dc43124ff647d3 +https://root.cern/doc/v628/RooGlobalFunc_8cxx_source.html#l00379 +https://root.cern/doc/v628/group__Fitting.html#ga993e12849b1bcc96c438dad6e1228c1c +https://root.cern/doc/v628/group__Plotting.html#gaac417b328b4cd846a11adb4fa858f1d6 +https://root.cern/doc/v628/group__CmdArgs.html#ga7b3e9780379bda26bacaef6e3c342dfc +https://root.cern/doc/v628/group__ConstructorArgs.html#ga4c4d61d23d0307e6a2bd8991e1fc0296 +https://root.cern/doc/v628/group__CmdArgs.html#gab2146178cc021ba470650a8d567a835e +https://root.cern/doc/v628/namespaceRooFit.html#a40281fe2922fe3bab2c99972da47fde6 +https://root.cern/doc/v628/group__Plotting.html#gaa56228d117778d8cd5f5bcaab9361a55 +https://root.cern/doc/v628/RtypesCore_8h.html#a9dbde6f27ac8ad0d5468c0b9e90de5db +https://root.cern/doc/v628/group__ConstructorArgs.html#ga1deef44fda8a65b216f88266c4d2f2c7 +https://root.cern/doc/v628/namespaceRooFit.html#a8e23b2a8af7ec6f3bd0c56cd0aece7a8a807dbe7d1c25a633894d4a231b1c76d3 +https://root.cern/doc/v628/namespaceRooFit.html#a22a2f415af2dc2c456d580e6b39ccfc6 +https://root.cern/doc/v628/RooCFunction2Binding_8h_source.html#l00031 +https://root.cern/doc/v628/namespaceRooFit.html#a130d1e280f896d5e4f5b82084968820f +https://root.cern/doc/v628/group__CmdArgs.html#ga20b60a20f27ad9d1323b2baae1b7dd78 +https://root.cern/doc/v628/roofitcore_2inc_2RooFit_2ModelConfig_8h_source.html +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00063 +https://root.cern/doc/v628/group__Fitting.html#ga5b2d3914323f59ef33829008150d2d0c +https://root.cern/doc/v628/group__Fitting.html#ga2200deca614d1772e19fb27eaf6a4506 +https://root.cern/doc/v628/group__Plotting.html#ga51bff53571b4f4deb8c4f6b86812b3b9 +https://root.cern/doc/v628/namespaceRooFit.html#a24ab9a280c56cd04c77f6b2b57478b05 +https://root.cern/doc/v628/RooCFunction2Binding_8h_source.html#l00032 +https://root.cern/doc/v628/RooGlobalFunc_8cxx_source.html#l00378 +https://root.cern/doc/v628/Common_8cxx_source.html +https://root.cern/doc/v628/group__Fitting.html#ga02998efb0736bdc0f70c11e2d1bd209b +https://root.cern/doc/v628/RooCFunction4Binding_8h_source.html#l00030 +https://root.cern/doc/v628/RooGlobalFunc_8h_source.html +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#aae1824037bc1fd25459b66aedcfa9088 +https://root.cern/doc/v628/RooCFunction4Binding_8cxx_source.html#l00051 +https://root.cern/doc/v628/group__CmdArgs.html#gaeb6b07c4c3a5625e320bb994de1c3c58 +https://root.cern/doc/v628/namespaceRooFit.html#a86b068ca78221d2a5e84915c8b865d5f +https://root.cern/doc/v628/namespaceRooFit.html#a5cf659ce1d64334611ecf9123991ea5d +https://root.cern/doc/v628/namespaceRooFit.html#a9806d65c702b80251adf0455520dc49a +https://root.cern/doc/v628/group__CmdArgs.html#ga3e623da6814631b5d66d913695a4e7d3 +https://root.cern/doc/v628/RooCFunction3Binding_8h_source.html#l00034 +https://root.cern/doc/v628/structRooFit_1_1UniqueId.html +https://root.cern/doc/v628/group__CmdArgs.html#ga93649fc02f13b843c7fb5a5e81e097ff +https://root.cern/doc/v628/group__Fitting.html#gada4c19b9326ecc32c76bea7ee2a4a89a +https://root.cern/doc/v628/RooFunctorBinding_8cxx_source.html#l00161 +https://root.cern/doc/v628/RooGlobalFunc_8cxx_source.html#l00376 +https://root.cern/doc/v628/legend1_8C.html#a747f799d89a43a33a1ad6488a9fe2b8b +https://root.cern/doc/v628/namespaceRooFit.html#a961c02a3dd80d9ad0b4e8e7c2f612af4 +https://root.cern/doc/v628/RooTFnBinding_8cxx_source.html#l00101 +https://root.cern/doc/v628/group__Fitting.html#gafdfa532199020d29ec6d2eee96e3741c +https://root.cern/doc/v628/namespaceRooFit.html#ae9eec7541a1220845d2b0944b6b3ccd1 +https://root.cern/doc/v628/namespaceRooFit.html#ae4689d5a964a10ba5bf1f6119d1d002c +https://root.cern/doc/v628/namespaceRooFit.html#a5cf659ce1d64334611ecf9123991ea5dae7f757d3eb6e2342d40d2a6735085794 +https://root.cern/doc/v628/namespaceRooFit_1_1TestStatistics.html +https://root.cern/doc/v628/group__Generating.html#ga32d34a87079f78f25b57c515d3fd743d +https://root.cern/doc/v628/THbookFile_8cxx.html#a5c6190dc7aa1bd7aafb9592a64f7046d +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00067 +https://root.cern/doc/v628/namespaceRooFit.html#aa809feba8f838dcb94092b3fe4c0a3be +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a4723588c57617f495d852c547ac3bcb7 +https://root.cern/doc/v628/namespaceRooFit.html#a07f91cb52f06c290d32b6810c7fa5a00 +https://root.cern/doc/v628/group__Plotting.html#ga6a9740e37d6b084b0166d24949e70d53 +https://root.cern/doc/v628/namespaceRooFit.html#a6af12d95a986f10fcb83bca139cf0d0d +https://root.cern/doc/v628/group__Fitting.html#ga3ce7b600a3ebb6eb6cacbe64ed157dd0 +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00047 +https://root.cern/doc/v628/group__CmdArgs.html#gab7d0f261275d5939c7478c45c05bc07f +https://root.cern/doc/v628/namespaceRooFit.html#a8f73c56009df6869bfa1964fca1baa46 +https://root.cern/doc/v628/group__Plotting.html#ga8b1a95ee41543dd0c1c88965bb7fd271 +https://root.cern/doc/v628/group__CmdArgs.html#gada37e03c7806f5d800ce669d65137f25 +https://root.cern/doc/v628/RooTFnPdfBinding_8cxx_source.html +https://root.cern/doc/v628/group__ConstructorArgs.html#gab83faeb52ff5e962d1bb7b519854b289 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#ad2dbff84738eb48a607389465e1e83ae +https://root.cern/doc/v628/group__CmdArgs.html#gab27ad55e26ff5b86d77c691022e86b39 +https://root.cern/doc/v628/namespaceRooFit.html#a058d6549799cfb6e28f6a6db9b3fcadc +https://root.cern/doc/v628/RooFunctor1DBinding_8cxx_source.html +https://root.cern/doc/v628/group__Fitting.html#ga685eaf2316d0757535b63f682390f9df +https://root.cern/doc/v628/group__Plotting.html#gaa85dd6940b6c27ef07b2f0281a34f46b +https://root.cern/doc/v628/namespaceRooFit.html#abded4bacd669e5807eb243d039c32f0b +https://root.cern/doc/v628/RooGlobalFunc_8h_source.html#l00060 +https://root.cern/doc/v628/group__CmdArgs.html#gac1737ab51797dd51de26574e31780f3c +https://root.cern/doc/v628/namespaceRooFit.html#a30518f049839ecd6ea6776ddf5cdb1d9 +https://root.cern/doc/v628/namespaceRooFit.html#a8e23b2a8af7ec6f3bd0c56cd0aece7a8 +https://root.cern/doc/v628/RooGlobalFunc_8h_source.html#l00065 +https://root.cern/doc/v628/group__Fitting.html#gaf3aa6ce9f0d1bafe102dd47bd820e85b +https://root.cern/doc/v628/group__Plotting.html#ga077414691a26e794bfe1093c5cffa926 +https://root.cern/doc/v628/RooGlobalFunc_8cxx_source.html#l00377 +https://root.cern/doc/v628/group__CmdArgs.html#gad0570b7cfa41325671c730d4074636a0 +https://root.cern/doc/v628/group__Fitting.html#ga8a60431835ccd5e95db1e3e42f7288ce +https://root.cern/doc/v628/group__CmdArgs.html#ga032758ff9ffcec36845c44cecab89aa0 +https://root.cern/doc/v628/group__Plotting.html#gadb49f2172f58ac7b4d7e3b7fcafa38e7 +https://root.cern/doc/v628/group__CmdArgs.html#ga3b525815fc41da22b71379d641854531 +https://root.cern/doc/v628/RtypesCore_8h.html#a414970423bfdbf425d0cfccd12d6bee1 +https://root.cern/doc/v628/namespaceRooFit_1_1Experimental.html +https://root.cern/doc/v628/group__Fitting.html#ga0c33a99a22639bc158f58a72f8f85018 +https://root.cern/doc/v628/namespaceRooFit.html#ad1fd841efbfdb569ad3255b44cd28058 +https://root.cern/doc/v628/group__ConstructorArgs.html#ga0cd964c0bea1866dd662dd74e81b05d5 +https://root.cern/doc/v628/UniqueId_8h_source.html +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#aefcec293d7e3d824d9da03475d8adb2f +https://root.cern/doc/v628/namespaceRooFit.html#afe0b6d0d8a7c43f12e43bb4d1936d8fb +https://root.cern/doc/v628/namespaceRooFit.html#a5105eb0c81e11be3e627071005f7bf01 +https://root.cern/doc/v628/namespaceRooFit.html#ab6451974854274a8f531e1aca5d8f44e +https://root.cern/doc/v628/namespaceRooFit.html#ad5f5ad44eb6ae276ef74e8a7398252a5 +https://root.cern/doc/v628/group__ConstructorArgs.html#gaecba27adb2cb9b0e6aab4fc2d5285f24 +https://root.cern/doc/v628/namespaceRooFit.html#a3f3ee957c0a9c6ed062f8d18fe98a2a2 +https://root.cern/doc/v628/namespaceRooFit.html#a20b8b33791e440e9876c394f7ff6c176 +https://root.cern/doc/v628/group__CmdArgs.html#gad827f8e43a9819035349c5898af590ab +https://root.cern/doc/v628/RooCFunction1Binding_8cxx_source.html#l00059 +https://root.cern/doc/v628/group__CmdArgs.html#gabae5baea6f6ef6b1993e0c4ac351e9e4 +https://root.cern/doc/v628/namespaceRooFit.html#a3cf136a7a47bce1c6387f60d120d85b5 +https://root.cern/doc/v628/group__Plotting.html#ga98024d77c4d05337248640f23cbafac0 +https://root.cern/doc/v628/group__CmdArgs.html#ga0f7974797a4273c9c339da907da356b8 +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00075 +https://root.cern/doc/v628/RooGlobalFunc_8cxx_source.html +https://root.cern/doc/v628/group__Fitting.html#ga358d622836453ca053fd91e034b00043 +https://root.cern/doc/v628/namespaceRooFit.html#a30028b0b09a2c079646570a56806379c +https://root.cern/doc/v628/RooCFunction3Binding_8h_source.html#l00031 +https://root.cern/doc/v628/group__CmdArgs.html#ga4e17695ae4d30db8051798f48bb151a5 +https://root.cern/doc/v628/group__CmdArgs.html#ga8f3eec7fff9507804494b6df4f62968a +https://root.cern/doc/v628/namespaceRooFit.html#a5cf659ce1d64334611ecf9123991ea5da427424131c27312feb209bd7e211b598 +https://root.cern/doc/v628/THbookFile_8cxx.html#a9c42f51718ed192ed1841a53d2b0e507 +https://root.cern/doc/v628/group__CmdArgs.html#ga5ddbcf12d50fdbe60596871155593094 +https://root.cern/doc/v628/group__CmdArgs.html#ga71f450092759f7f56798d786e7cb2b40 +https://root.cern/doc/v628/namespaceRooFit.html#ae9e056ab7713a4aaae89e62f9d053e9f +https://root.cern/doc/v628/group__Fitting.html#gaa2391e144c210c9c81f59fc3c3ff2c7b +https://root.cern/doc/v628/group__CmdArgs.html#gabe6a9e3fd7a726f457b982d897f32651 +https://root.cern/doc/v628/RooCFunction1Binding_8cxx_source.html#l00067 +https://root.cern/doc/v628/group__CmdArgs.html#ga400475593561b2c3b0e16297aab37733 +https://root.cern/doc/v628/RooCFunction3Binding_8h_source.html#l00032 +https://root.cern/doc/v628/RooTFnBinding_8cxx_source.html#l00097 +https://root.cern/doc/v628/namespaceROOT_1_1Math.html#a12ea485a599dc09eb802bd98e15228b9 +https://root.cern/doc/v628/group__CmdArgs.html#ga9f26ca02d55843712ebc935e4e78a86e +https://root.cern/doc/v628/namespaceRooFit.html#a36e12ae9ea9c0d3ab48f71c4ffcdace3 +https://root.cern/doc/v628/group__Fitting.html#ga7787ce3834da848de628a8de3a1a4d13 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00083 +https://root.cern/doc/v628/group__Plotting.html#ga164ae60ae66d80ea08eba3fa1118fabd +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a995e3a68bea3be8a20676b3fbf65379a +https://root.cern/doc/v628/group__Plotting.html#ga9adfab65a79a8763ba69bd875c22eb20 +https://root.cern/doc/v628/RooCFunction1Binding_8cxx_source.html +https://root.cern/doc/v628/RooCFunction3Binding_8h_source.html#l00033 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00059 +https://root.cern/doc/v628/namespaceRooFit.html#a3ecb19ba631e3fea81b6e917c4cd7ef0 +https://root.cern/doc/v628/group__Fitting.html#ga98ea3ae7ee50f720fefb828ecb7701b4 +https://root.cern/doc/v628/namespaceRooFit_1_1BatchModeDataHelpers.html +https://root.cern/doc/v628/group__Plotting.html#ga174e1bd1c613da24c4962899d4e81244 +https://root.cern/doc/v628/group__Plotting.html#gaf1f7922ba5965c1a5a9791a00ef354cb +https://root.cern/doc/v628/group__Fitting.html#gacf7a4c048cc96d6f13129e878f10abc6 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a38c62e03a73cd43d90b65e0cf4557942 +https://root.cern/doc/v628/group__Plotting.html#ga01fa31b861a51ef7d9a888cbc950d976 +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00055 +https://root.cern/doc/v628/group__Fitting.html#ga7bbeafab5a472d7f5c01cb2e27df32d4 +https://root.cern/doc/v628/group__Fitting.html#ga055e2cd4591ffb6a7ab091e472699900 +https://root.cern/doc/v628/namespaceRooFit.html#a47fee325de5ec3d13443bcc87cdf81f5 +https://root.cern/doc/v628/namespaceRooFit.html#aecbf8c32c8735b20ed4a0b39f02af051 +https://root.cern/doc/v628/group__CmdArgs.html#gada1dc4e311cfab2b4bda6d7971f3ade9 +https://root.cern/doc/v628/stlLoader_8cc.html#a951a98f1e2d69ca61adcd53c0f8faca3 +https://root.cern/doc/v628/namespaceRooFit_1_1MultiProcess.html +https://root.cern/doc/v628/group__Plotting.html#ga007647d1cec70a55f399eeee12020381 +https://root.cern/doc/v628/group__Plotting.html#ga8287c0787749de0b11992c3ef87f1abd +https://root.cern/doc/v628/Floats_8h_source.html +https://root.cern/doc/v628/group__Generating.html#ga02590cb31aef8f044281cf050dfd85e4 +https://root.cern/doc/v628/RooFunctorBinding_8cxx_source.html#l00165 +https://root.cern/doc/v628/THbookFile_8cxx.html#a073817140685ccd37103f69352762610 +https://root.cern/doc/v628/group__Plotting.html#ga530395466a0257e8ce7a23e2bb794524 +https://root.cern/doc/v628/RooTFnBinding_8cxx_source.html#l00105 +https://root.cern/doc/v628/group__Plotting.html#ga0a5c59c7649bdef9e7148e56c8c6017b +https://root.cern/doc/v628/group__Fitting.html#gaaec91c86d0bb20f56844412530e5c9fb +https://root.cern/doc/v628/RooTFnBinding_8cxx_source.html +https://root.cern/doc/v628/RooLagrangianMorphFunc_8cxx.html#a6a3c31639a1ef1aac1fec7db5bee6538 +https://root.cern/doc/v628/namespaceRooFit.html#ab91a7b42a08473a3c4e22094b4722b18 +https://root.cern/doc/v628/group__Fitting.html#gac99ccee6b83f376ff6b037e4f4353e47 +https://root.cern/doc/v628/RooCFunction4Binding_8cxx_source.html#l00043 +https://root.cern/doc/v628/RooCFunction1Binding_8h_source.html#l00031 +https://root.cern/doc/v628/group__Plotting.html#gabec667618c1af55db7f8e6ff99f23b07 +https://root.cern/doc/v628/RooCFunction1Binding_8h_source.html +https://root.cern/doc/v628/group__CmdArgs.html#ga51ee3a4807f659a14bd034455a5c2e58 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html +https://root.cern/doc/v628/RooTFnPdfBinding_8cxx_source.html#l00079 +https://root.cern/doc/v628/Common_8cxx_source.html#l00024 +https://root.cern/doc/v628/namespaceRooFit.html#a9806d65c702b80251adf0455520dc49aac7268757fbabf48019f4984933539d8a +https://root.cern/doc/v628/group__CmdArgs.html#gaff9f549e3ce22495ece966a23e29bc9d +https://root.cern/doc/v628/group__ConstructorArgs.html#ga909a9cd68f259253d0cc6ad2ef9e49c2 +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00051 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a1eeecbc45fd15a6d5936d1dfd95c7b30 +https://root.cern/doc/v628/RooFunctor1DBinding_8cxx_source.html#l00125 +https://root.cern/doc/v628/group__CmdArgs.html#gabc55f63d9af487d67cbdd093883a1cf8 +https://root.cern/doc/v628/group__ConstructorArgs.html#ga1848f847ff8c954e9a3a51a76bb6fecd +https://root.cern/doc/v628/group__CmdArgs.html#gaafb661046426f81f794f6e075f64dadf +https://root.cern/doc/v628/group__ConstructorArgs.html#gab447faacaba8ecdb3bc4f88358b678a8 +https://root.cern/doc/v628/RooTFnPdfBinding_8cxx_source.html#l00075 +https://root.cern/doc/v628/RooCFunction4Binding_8h_source.html#l00032 +https://root.cern/doc/v628/RtypesCore_8h.html#a2f6a60bd1cf0af65f2bcef4098d623b8 +https://root.cern/doc/v628/group__Fitting.html#ga3c480b94d5f6aee3b82d2c4523fc934a +https://root.cern/doc/v628/group__CmdArgs.html#gaf6f057ffefdbf5391939dcea45b64493 +https://root.cern/doc/v628/group__Fitting.html#ga4d95b3422cc219a6fda92fb9fa225153 +https://root.cern/doc/v628/group__Plotting.html#ga8c7dec70f6e92056c00fc7da573c091a +https://root.cern/doc/v628/group__Fitting.html#ga9c01a64f90b36aaa6673780dfa312be4 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00055 +https://root.cern/doc/v628/UniqueId_8h_source.html#l00089 +https://root.cern/doc/v628/group__Plotting.html#ga2e00356af8727079ae9dde7877fb9431 +https://root.cern/doc/v628/group__ConstructorArgs.html#gaf9bcd197a31b15c305814a49d6ddf057 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00043 +https://root.cern/doc/v628/group__CmdArgs.html#ga971fe7957c35be2944d2ed7423413cc9 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00079 +https://root.cern/doc/v628/namespaceRooFit.html#a37c08b51c444bf9abf142de759f2d828 +https://root.cern/doc/v628/group__Plotting.html#ga39cd9ada2cc2481e0f8de2ac660f1553 +https://root.cern/doc/v628/group__Generating.html#ga6fd1ff0d2353b692380d25b2187885e2 +https://root.cern/doc/v628/namespaceRooFit.html#a8e23b2a8af7ec6f3bd0c56cd0aece7a8a4f2a91e15af2631ff9424564b8a45fb2 +https://root.cern/doc/v628/namespaceRooFit.html#abd1943a19281dcc29e1ea876c27ee9b2 +https://root.cern/doc/v628/group__Fitting.html#ga0e6ef753401e9383cb80a351ffc234c3 +https://root.cern/doc/v628/namespaceRooFit.html#ae1827a6a42c7f2acdd4b71c22e0acdf0 +https://root.cern/doc/v628/group__Fitting.html#gaa6092e2ababeab8a10a411e299bac89d +https://root.cern/doc/v628/group__Plotting.html#ga6f59662bf04b8b86c99ffec25cbb05e3 +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00059 +https://root.cern/doc/v628/group__Fitting.html#ga1a2f75d03596f1709f15fdce4d7370fe +https://root.cern/doc/v628/namespaceRooFit.html#a9806d65c702b80251adf0455520dc49aad15305d7a4e34e02489c74a5ef542f36 +https://root.cern/doc/v628/namespaceRooFit.html#ade45e28ae7d85e18eb766ba822ad6824 +https://root.cern/doc/v628/namespaceRooFit.html#aa1c5f0fadaa9dd6af139437f8bf0ca02 +https://root.cern/doc/v628/group__Fitting.html#ga3fab95c634bde6f6e3b91f5632d427c4 +https://root.cern/doc/v628/group__ConstructorArgs.html#ga4f7314a43bf8a890dd9f83b0c8129ded +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a3c7960e8a0d2e48320bea6c616e6d374 +https://root.cern/doc/v628/group__Fitting.html#ga60c50a603daf0966cb9f0569b21741f5 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a0f6f0fa550b06b9c83a6f989e7559ec1 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148 +https://root.cern/doc/v628/namespaceRooFit_1_1CUDAHelpers.html +https://root.cern/doc/v628/RooGlobalFunc_8h_source.html#l00073 +https://root.cern/doc/v628/RooCFunction4Binding_8cxx_source.html#l00059 +https://root.cern/doc/v628/namespaceRooFit.html#a7c397cf0d732de4c9b751f92b5a43f91 +https://root.cern/doc/v628/RooTFnBinding_8cxx_source.html#l00109 +https://root.cern/doc/v628/TStringLong_8h.html#a576b34f192317a1f29b2847d1dd8bf0a +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a43857a409d2112a5b67569a5fa018b56 +https://root.cern/doc/v628/group__Fitting.html#gacf53693d9c0879a3c60bedde45e2fd63 +https://root.cern/doc/v628/namespaceRooFit.html#ad73f0f338c113a4e4e15b1acd0127f91 +https://root.cern/doc/v628/RooGlobalFunc_8cxx_source.html#l00380 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a5ca7560d3f5c2b28780642eafa70b642 +https://root.cern/doc/v628/namespaceRooFit.html#a9806d65c702b80251adf0455520dc49aa54c82ef76ecbbd4c2293e09bae01b54e +https://root.cern/doc/v628/group__CmdArgs.html#ga07bef6cff5748aad039abc4277c7f61c +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a90b0ed6d5942e62068477f7405d6416c +https://root.cern/doc/v628/namespaceRooFit.html#a0575b2322f50c6dcf05a428f8329e99c +https://root.cern/doc/v628/group__Plotting.html#ga48acbb25108faf6dd61f7fb1eb0dfdd4 +https://root.cern/doc/v628/group__CmdArgs.html#gae73d217e5aaa87c4343972d042aba199 +https://root.cern/doc/v628/group__Plotting.html#gab5a676c46af9f25c82b15ad5d3281af5 +https://root.cern/doc/v628/group__Fitting.html#ga0e8b061a5d0b790f37ccf5db0ac6b7fc +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00051 +https://root.cern/doc/v628/namespaceRooFit.html#a330eafbf297a502f30e711467554638e +https://root.cern/doc/v628/legend1_8C.html#a0ac1b1d41769fb095f75dabe718dc793 +https://root.cern/doc/v628/namespaceRooFit_1_1STLRefCountListHelpers.html +https://root.cern/doc/v628/namespaceRooFit.html#af8ccb870877b79cae12510ae1cffa708 +https://root.cern/doc/v628/namespaceRooFit.html#a1446794a792c3793e606c1ae59022185 +https://root.cern/doc/v628/namespaceRooFit.html#a36e12ae9ea9c0d3ab48f71c4ffcdace3a8755d785e26b824e5a490ecc72c574cd +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148ac8b1dda32591d04a0bf26fa63714db0a +https://root.cern/doc/v628/namespaceRooFit.html#a394fc9b1426231be01ea70ebf6a12f93 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a1740519b77d3168152bd859b5499a250 +https://root.cern/doc/v628/group__CmdArgs.html#ga7eb2e0f56226447293ab55aa8db27a16 +https://root.cern/doc/v628/namespaceRooFit.html#a35d6adf8f05d51a30fb30290c4e7b873 +https://root.cern/doc/v628/RooFunctor1DBinding_8cxx_source.html#l00121 +https://root.cern/doc/v628/group__Plotting.html#ga318f34aae78eaa7a08dedd3200ec1d3b +https://root.cern/doc/v628/group__CmdArgs.html#ga7c75551df1ae5d86a6ac5b0f719bfc7f +https://root.cern/doc/v628/namespaceRooFit.html#a368ba5318f4a893aa819e53d96b6b70f +https://root.cern/doc/v628/RooFunctorBinding_8cxx_source.html +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a7429ef369da057a8c2922b2e61edf87c +https://root.cern/doc/v628/RooGlobalFunc_8h_source.html#l00069 +https://root.cern/doc/v628/namespaceRooFit.html +https://root.cern/doc/v628/group__CmdArgs.html#ga7b90efe763dbb5513353d03e794711bf +https://root.cern/doc/v628/group__Fitting.html#ga924a03ca64a0b324db01309b50fa4b13 +https://root.cern/doc/v628/group__Plotting.html#ga2311655f851410962b08e1e578805acf +https://root.cern/doc/v628/namespaceRooFit.html#a43df752abe9aa9d45d02c4e1f4c0faaa +https://root.cern/doc/v628/group__Plotting.html#gabf8f3386ad0a0a9ec89bf02adf114f6a +https://root.cern/doc/v628/group__Plotting.html#gae3a69b5cb30de435e0cf85e528e88d9e +https://root.cern/doc/v628/RooCFunction1Binding_8cxx_source.html#l00063 +https://root.cern/doc/v628/group__ConstructorArgs.html#gac9a978c068990a123e8497397338b492 +https://root.cern/doc/v628/group__CmdArgs.html#ga2252dbe7ecf5f7e6840f4d8b32211dfe +https://root.cern/doc/v628/namespaceRooFit.html#a9806d65c702b80251adf0455520dc49aa8b95dcff7397d0693c03e394af5552aa +https://root.cern/doc/v628/group__Plotting.html#gafdba49ab3ef4b92d7dde43bc08d63672 +https://root.cern/doc/v628/group__CmdArgs.html#gaf158555a5320f4ad884aa13ba0c420a6 +https://root.cern/doc/v628/RooGlobalFunc_8cxx_source.html#l00360 +https://root.cern/doc/v628/group__CmdArgs.html#ga7d93028cae850fd181ac8417a7e85b6e +https://root.cern/doc/v628/namespaceRooFit_1_1BidirMMapPipe__impl.html +https://root.cern/doc/v628/namespaceRooFit.html#a5974833733e5033fb7e8ac983ad895ba +https://root.cern/doc/v628/namespaceRooFit.html#a5cf659ce1d64334611ecf9123991ea5dafe9eadff2e4d859660d3cb21a60fd0c3 +https://root.cern/doc/v628/RooCFunction3Binding_8h_source.html#l00030 +https://root.cern/doc/v628/group__Fitting.html#ga30a225416ee1e8ea9d525bc4fc07105d +https://root.cern/doc/v628/TGX11_8cxx.html#a3777dbae63a15da001b2baa317a25149 +https://root.cern/doc/v628/namespaceRooFit.html#a11f22b7819fe57df26a9c3e7e6ceff38 +https://root.cern/doc/v628/namespaceRooFit.html#acc672eba4c248d7c50fcfef0f43078a3 +https://root.cern/doc/v628/group__Plotting.html#gaa40d88fa47604ab92ce76135346af056 +https://root.cern/doc/v628/group__CmdArgs.html#gac719c0c337ae8b5dcd0c29d302b4ad7f +https://root.cern/doc/v628/namespaceRooFit.html#a3487e3f4e88589cfd2188a265efbf233 +https://root.cern/doc/v628/structRooMsgService_1_1StreamConfig.html +https://root.cern/doc/v628/RooGlobalFunc_8h_source.html#l00062 +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00043 +https://root.cern/doc/v628/namespaceRooFit.html#abcc95d741e5fc2a18460eac06fdc0fd2 +https://root.cern/doc/v628/group__CmdArgs.html#gae3758d46b9757b01078cc9aee69d2755 +https://root.cern/doc/v628/namespaceRooFit.html#a3e383bd661920acf1cf80ec2d1d2ab50 +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00039 +https://root.cern/doc/v628/namespaceRooFit.html#a36e12ae9ea9c0d3ab48f71c4ffcdace3a908b03c418352ac3e23f60a6bc436c5a +https://root.cern/doc/v628/group__CmdArgs.html#gae27a7598a7774670ea0e9b2598eb4a66 +https://root.cern/doc/v628/RooTFnBinding_8cxx_source.html#l00093 +https://root.cern/doc/v628/RooCFunction2Binding_8h_source.html#l00034 +https://root.cern/doc/v628/roofit_2xroofit_2inc_2RooFit_2xRooFit_2Config_8h_source.html#l00043 +https://root.cern/doc/v628/namespaceRooFit_1_1JSONIO.html +https://root.cern/doc/v628/namespaceRooFit.html#a370eb6e9df6a754f5d945a6720a5c411 +https://root.cern/doc/v628/group__CmdArgs.html#ga25faccd27726149e49c8307d4a1a248d +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#ab88c5f10d6b9b6e780327a5c058e0f9c +https://root.cern/doc/v628/namespaceRooFit.html#adb58127a3ce9638d7d31b6b373b27d6b +https://root.cern/doc/v628/group__CmdArgs.html#gaf951dd50686be20590a2e71edf529448 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a2c8a507830b114d92feab23d67100975 +https://root.cern/doc/v628/THbookFile_8cxx.html#a058f249a5e6d20724cb0784b40a183e8 +https://root.cern/doc/v628/group__Generating.html#ga42b20d87679bc103331e6f98cae54a91 +https://root.cern/doc/v628/group__Fitting.html#gad196d5351dcfbaeb1b25f65022ce6760 +https://root.cern/doc/v628/namespaceRooFit.html#a9b26069e8021145a22b84d8bfdfa1159 +https://root.cern/doc/v628/group__CmdArgs.html#ga77df6d72fd945e1933c679ab647acd6b +https://root.cern/doc/v628/group__CmdArgs.html#ga29bbb154820c1cab6371bfc9265bd636 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a8c089e708fc17825e64f7afb99a669ee +https://root.cern/doc/v628/RooTFnPdfBinding_8cxx_source.html#l00071 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a06acd892b4a370b191bf66814941150c +https://root.cern/doc/v628/RtypesCore_8h.html#a4dccc1cbde0ba3be1661832ecb636f7a +https://root.cern/doc/v628/group__Plotting.html#ga598f3978960056200669cbc72a32efac +https://root.cern/doc/v628/group__Generating.html#gad87f0034824e8608e9e5f04bb2915156 +https://root.cern/doc/v628/RooCFunction4Binding_8cxx_source.html#l00039 +https://root.cern/doc/v628/group__CmdArgs.html#gafd69902433e7a018030047caf9c8a8d2 +https://root.cern/doc/v628/namespaceRooFit.html#aa28ef934bda34b41e74aa9794c0cb60a +https://root.cern/doc/v628/group__ConstructorArgs.html#ga9177c8b1ebb4fe8c3a92375b0152e1d6 +https://root.cern/doc/v628/namespaceRooFit.html#a94b5845af363c3033789a9f23670420a +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148ac5687014ad2752debab3abf555137dd3 +https://root.cern/doc/v628/RooCFunction4Binding_8h_source.html +https://root.cern/doc/v628/group__ConstructorArgs.html#gab50111a8eddf1721b6dda0abb077cfbb +https://root.cern/doc/v628/namespaceRooFit.html#a2c9047bd7c2e7fc515ff0dd21272847c +https://root.cern/doc/v628/RooCFunction2Binding_8cxx_source.html#l00071 +https://root.cern/doc/v628/group__ConstructorArgs.html#ga1c6ecc9e607c102b9f352f9553eb5fe6 +https://root.cern/doc/v628/Floats_8h_source.html#l00030 +https://root.cern/doc/v628/group__CmdArgs.html#gaafeee6083db7cac7aa77a48e706ce975 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148a6df4090bc5758163fb69e1f8b00f65a2 +https://root.cern/doc/v628/group__Plotting.html#gac8df677842b98ea43d970ba14fc4341d +https://root.cern/doc/v628/group__CmdArgs.html#gae6f228e3c25e5af3b6e5345c54f5ca28 +https://root.cern/doc/v628/group__CmdArgs.html#ga20acc5b7047c9090b8e09b6fe44509d8 +https://root.cern/doc/v628/group__ConstructorArgs.html#gabf1db99bed6abaa68be763fb565e74ff +https://root.cern/doc/v628/namespaceRooFit.html#a21ce0d49baba5e0b221f9806ec5542a2 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00047 +https://root.cern/doc/v628/namespaceRooFit.html#a35b54e965e595861c5be5216fd705f25 +https://root.cern/doc/v628/namespaceRooFit.html#a99d0283340846afc8439e37a86d0ab52 +https://root.cern/doc/v628/group__CmdArgs.html#ga3ce7daa8bdc2ddf7112baf2a7eaaca73 +https://root.cern/doc/v628/RooCFunction4Binding_8cxx_source.html +https://root.cern/doc/v628/namespaceRooFit.html#a717b119c9dcd37f671f6e195eabf5bb0 +https://root.cern/doc/v628/Floats_8h_source.html#l00029 +https://root.cern/doc/v628/group__ConstructorArgs.html#ga18f1f6ebfb5ac8b0a602fa00883b8599 +https://root.cern/doc/v628/group__CmdArgs.html#ga083962b80c8463afdc0ea8b1b935f722 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00075 +https://root.cern/doc/v628/group__ConstructorArgs.html#ga516e0ec4f11352cdf35d727a7ca67d8d +https://root.cern/doc/v628/RtypesCore_8h.html#a07e961e571b85f47a44bd3cb80c857e2 +https://root.cern/doc/v628/namespaceRooFit_1_1Detail.html +https://root.cern/doc/v628/group__CmdArgs.html#gaed503145dab87c73eb424b4557446d30 +https://root.cern/doc/v628/namespaceRooFit.html#a9924e612cb358cd013b50c0e1e6d6148add9fcd5594b90367110a5996a7a0d224 +https://root.cern/doc/v628/RooCFunction3Binding_8h_source.html +https://root.cern/doc/v628/namespaceRooFit_1_1BatchModeHelpers.html +https://root.cern/doc/v628/RooCFunction2Binding_8h_source.html#l00033 +https://root.cern/doc/v628/RooCFunction1Binding_8h_source.html#l00032 +https://root.cern/doc/v628/RooCFunction2Binding_8h_source.html +https://root.cern/doc/v628/group__CmdArgs.html#ga036dc1d185658c814739ca99e1ffd46d +https://root.cern/doc/v628/namespaceRooFit.html#ad8bf8c74f8179a2a706ef56bf7354a8f +https://root.cern/doc/v628/group__Fitting.html#gad6610e1acff620b6cc45ca4926b93653 +https://root.cern/doc/v628/namespaceRooFit.html#a36e12ae9ea9c0d3ab48f71c4ffcdace3adc120a36a3ec93f3fbdbfd35447ca3f9 +https://root.cern/doc/v628/group__CmdArgs.html#ga5e9bbdb48cc855892c3c7377d4db0531 +https://root.cern/doc/v628/group__Fitting.html#ga0da747254db009967dd9d4b120026f72 +https://root.cern/doc/v628/roofitcore_2inc_2RooFit_2ModelConfig_8h_source.html#l00362 +https://root.cern/doc/v628/RooCFunction3Binding_8cxx_source.html#l00039 +https://root.cern/doc/v628/group__Fitting.html#ga51ed94afba4b59978febad3db23cb35c +https://root.cern/doc/v628/group__CmdArgs.html#ga332a0422e04fd8fbc4fa8fa29e266922 +https://root.cern/doc/v628/group__Plotting.html#gaf8c2a67e2836bce375586c561ac588ca +https://root.cern/doc/v628/namespaceRooFit.html#a8e23b2a8af7ec6f3bd0c56cd0aece7a8a6adf97f83acf6453d4a6a4b1070f3754 +https://root.cern/doc/v628/namespaceRooFit.html#a36e12ae9ea9c0d3ab48f71c4ffcdace3a42b1fe0b904c330d15b7566bffe55b3a +https://root.cern/doc/v628/namespaceRooFit.html#a91d2495051c337fb9d335e5a180ac227 +https://root.cern/doc/v628/group__Fitting.html#ga7debb0ce23cddc95e9c96a89a9e07319 +https://root.cern/doc/v628/group__CmdArgs.html#gaa87f095316fb905bbaa9510159e78fdc +https://root.cern/doc/v628/namespaceRooFit.html#a886ef0cc38d7fc4417b6029ac9db820e +https://root.cern/doc/v628/group__Plotting.html#ga4f4848085cda5634f289f0d73fff2cd0 +https://root.cern/doc/v628/namespaceRooFit.html#a96f162093a6c93f10234c526b562188a +https://root.cern/doc/v628/RooCFunction2Binding_8h_source.html#l00030 +https://root.cern/doc/v628/namespaceRooFit.html#ae3b7862d9b815d2063c2ef45981e2d23 +https://root.cern/doc/v628/namespaceRooFit.html#afebd2557d85104f65cf854550ec6e89b +https://root.cern/doc/v628/group__CmdArgs.html#gaad8fcbf63ef964d74534d218f002e502 +https://root.cern/doc/v628/group__CmdArgs.html#ga3523e3112ef1da379c5fe4239aa2f703 +https://root.cern/doc/v628/group__CmdArgs.html#gabca94556501d74e9365dd13352b12a3d +https://root.cern/doc/v628/group__Plotting.html#gab2b5c1bf5731bdacfc985f990a8ec16e +https://root.cern/doc/v628/group__Fitting.html#ga8ee3876de2dd019a9363c875a4aaf21b +https://root.cern/doc/v628/RooTFnBinding_8cxx_source.html#l00089 +https://root.cern/doc/v628/namespaceRooFit.html#a97f1db6d21adffc7f5f2ef4b42045c61 +https://root.cern/doc/v628/group__Plotting.html#gadbcf0656508e28a9a31d4edd33549074 +https://root.cern/doc/v628/group__CmdArgs.html#ga4b160c05a7ff52e163f3ec040872c19d +https://root.cern/doc/v628/TGWin32VirtualGLProxy_8cxx.html#a2cc915af4a7e94ccc89354008647637c +https://root.cern/doc/v628/group__CmdArgs.html#ga1214480a470adb8160d315276c4f5004 +https://root.cern/doc/v628/group__Generating.html#gacd39c94c6fc58728a4ae1382a4a73003 +https://root.cern/doc/v628/group__CmdArgs.html#ga58dd14503739df96ed897b20fb0036ac +https://root.cern/doc/v628/group__CmdArgs.html#gaa3ca1c5f5f55e31f65ebd41df5d1353a +https://root.cern/doc/v628/namespaceRooFit.html#a36e12ae9ea9c0d3ab48f71c4ffcdace3a0cb99a7fdeef7cf9102d62fd32484558 +https://root.cern/doc/v628/rsaaux_8h.html#a34019ff4fea97f8dd6a604fb6f18ec87 +https://root.cern/doc/v628/group__Math.html +https://root.cern/doc/v628/namespaceMath.html +https://root.cern/doc/v628/tank_8C.html +https://root.cern/doc/v628/geomAlice__itsv_8C.html +https://root.cern/doc/v628/xtruDraw_8C.html +https://root.cern/doc/v628/mp3player_8C.html +https://root.cern/doc/v628/south__gate_8C.html +https://root.cern/doc/v628/geomAlice_8C.html +https://root.cern/doc/v628/na49geomfile_8C.html +https://root.cern/doc/v628/rootgeom_8C.html +https://root.cern/doc/v628/geomD0_8C.html +https://root.cern/doc/v628/structTimer.html +https://root.cern/doc/v628/geomAtlas_8C.html +https://root.cern/doc/v628/RadioNuclides_8C.html +https://root.cern/doc/v628/xtruSamples_8C.html +https://root.cern/doc/v628/na49view_8C.html +https://root.cern/doc/v628/building_8C.html +https://root.cern/doc/v628/webdemo_8C.html +https://root.cern/doc/v628/station1_8C.html +https://root.cern/doc/v628/cheongwadae_8C.html +https://root.cern/doc/v628/geom_2csgdemo_8C.html +https://root.cern/doc/v628/parallel__world_8C.html +https://root.cern/doc/v628/shapesAnim_8C.html +https://root.cern/doc/v628/runplugin_8C.html +https://root.cern/doc/v628/visualizeWavefrontObj_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/na49_8C.html +https://root.cern/doc/v628/shapes_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/station2_8C.html +https://root.cern/doc/v628/geodemo_8C.html +https://root.cern/doc/v628/robot_8C.html +https://root.cern/doc/v628/geom_2assembly_8C.html +https://root.cern/doc/v628/testoptical_8C.html +https://root.cern/doc/v628/geometry_8C.html +https://root.cern/doc/v628/geom_2lego_8C.html +https://root.cern/doc/v628/geomBrahms_8C.html +https://root.cern/doc/v628/PhaseSpace_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/FITS__tutorial5_8C.html +https://root.cern/doc/v628/FITS__tutorial1_8C.html +https://root.cern/doc/v628/FITS__tutorial4_8C.html +https://root.cern/doc/v628/FITS__tutorial6_8C.html +https://root.cern/doc/v628/FITS__tutorial3_8C.html +https://root.cern/doc/v628/FITS__tutorial7_8C.html +https://root.cern/doc/v628/FITS__tutorial8_8C.html +https://root.cern/doc/v628/FITS__tutorial2_8C.html +https://root.cern/doc/v628/rootlogon_8C_source.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/rootlogon_8C.html +https://root.cern/doc/v628/dir_a829051beca983f0d7c2feecd60624fc.html +https://root.cern/doc/v628/BreitWigner_8C.html +https://root.cern/doc/v628/exampleFunctor_8C.html +https://root.cern/doc/v628/mathcoreSpecFunc_8C.html +https://root.cern/doc/v628/ChebyshevPol_8C.html +https://root.cern/doc/v628/exampleTKDE_8C.html +https://root.cern/doc/v628/GammaFun_8C.html +https://root.cern/doc/v628/limit_8C.html +https://root.cern/doc/v628/quantiles_8C.html +https://root.cern/doc/v628/tStudent_8C.html +https://root.cern/doc/v628/namespaceTMath.html#a8a705fe4763cc5e4976c246e96a5a2ef +https://root.cern/doc/v628/mathcoreStatFunc_8C.html +https://root.cern/doc/v628/namespaceTMath.html#a54f05ddcc77d4c8f52423fdfd00a268a +https://root.cern/doc/v628/namespaceTMath.html#a0e526fe582d678f6214d961366e09812 +https://root.cern/doc/v628/mathcoreVectorCollection_8C.html +https://root.cern/doc/v628/multidimSampling_8C.html +https://root.cern/doc/v628/namespaceBessel.html +https://root.cern/doc/v628/namespaceROOT_1_1Math.html +https://root.cern/doc/v628/namespaceLegendre.html +https://root.cern/doc/v628/binomial_8C.html +https://root.cern/doc/v628/mathcoreCDF_8C.html +https://root.cern/doc/v628/Legendre_8py.html +https://root.cern/doc/v628/FeldmanCousins_8C.html +https://root.cern/doc/v628/mathcoreGenVector_8C.html +https://root.cern/doc/v628/mathmoreIntegration_8C.html +https://root.cern/doc/v628/principal_8C.html +https://root.cern/doc/v628/TSVDUnfoldExample_8C.html +https://root.cern/doc/v628/namespaceTMath.html#a393078d8d8d946cae06734a5334f7dbd +https://root.cern/doc/v628/mathStudent_8C.html +https://root.cern/doc/v628/Bessel_8C.html +https://root.cern/doc/v628/principal_8py.html +https://root.cern/doc/v628/vavilov_8C.html +https://root.cern/doc/v628/structValue.html +https://root.cern/doc/v628/namespaceMath.html +https://root.cern/doc/v628/CrystalBall_8C.html +https://root.cern/doc/v628/mathBeta_8C.html +https://root.cern/doc/v628/normalDist_8py.html +https://root.cern/doc/v628/goftest_8C.html +https://root.cern/doc/v628/multivarGaus_8C.html +https://root.cern/doc/v628/mathGammaNormal_8C.html +https://root.cern/doc/v628/kdTreeBinning_8C.html +https://root.cern/doc/v628/exampleFunction_8py.html +https://root.cern/doc/v628/mathcoreStatFunc_8py.html +https://root.cern/doc/v628/mathcoreVectorIO_8C.html +https://root.cern/doc/v628/Bessel_8py.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/namespaceTMath.html#af97ce45b2e9bb1754c77dff322a23835 +https://root.cern/doc/v628/namespaceTMath.html#a74b99df6d52d2ab25924236bb690f8cf +https://root.cern/doc/v628/namespaceTMath.html#a47548eb2e28f100d2d8150e4d5576333 +https://root.cern/doc/v628/tStudent_8py.html +https://root.cern/doc/v628/chi2test_8C.html +https://root.cern/doc/v628/hlquantiles_8C.html +https://root.cern/doc/v628/namespaceTMath.html#a0503deae555bc6c0766801e4642365d2 +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/mathcoreVectorFloatIO_8C.html +https://root.cern/doc/v628/quasirandom_8C.html +https://root.cern/doc/v628/namespaceTMath.html#a393d5eb815415eeec7f423c00bd4e0b5 +https://root.cern/doc/v628/permute_8C.html +https://root.cern/doc/v628/Rolke_8C.html +https://root.cern/doc/v628/testrandom_8C.html +https://root.cern/doc/v628/exampleMultiRoot_8C.html +https://root.cern/doc/v628/LegendreAssoc_8C.html +https://root.cern/doc/v628/normalDist_8C.html +https://root.cern/doc/v628/Legendre_8C.html +https://root.cern/doc/v628/mathLaplace_8C.html +https://root.cern/doc/v628/graphApply_8C.html +https://root.cern/doc/v628/surfaces_8C.html +https://root.cern/doc/v628/splines__test_8C.html +https://root.cern/doc/v628/graph_8C.html +https://root.cern/doc/v628/graphpolar3_8C.html +https://root.cern/doc/v628/exclusiongraph2_8C.html +https://root.cern/doc/v628/zdemo_8C.html +https://root.cern/doc/v628/gmultierrors_8C.html +https://root.cern/doc/v628/labels2_8C.html +https://root.cern/doc/v628/bent_8C.html +https://root.cern/doc/v628/gtime2_8C.html +https://root.cern/doc/v628/timeonaxis_8C.html +https://root.cern/doc/v628/timeonaxis2_8C.html +https://root.cern/doc/v628/graphpolar_8C.html +https://root.cern/doc/v628/timeSeriesFromCSV_8C.html +https://root.cern/doc/v628/zones_8py.html +https://root.cern/doc/v628/annotation3d_8C.html +https://root.cern/doc/v628/graphpalettecolor_8C.html +https://root.cern/doc/v628/multigraphpalettecolor_8C.html +https://root.cern/doc/v628/bent_8py.html +https://root.cern/doc/v628/hlGraph2_8C.html +https://root.cern/doc/v628/graphpolar2_8C.html +https://root.cern/doc/v628/multigraph_8C.html +https://root.cern/doc/v628/graphs_2gtime_8C.html +https://root.cern/doc/v628/graph2derrorsfit_8C.html +https://root.cern/doc/v628/multipalette_8C.html +https://root.cern/doc/v628/graphtext_8C.html +https://root.cern/doc/v628/approx_8C.html +https://root.cern/doc/v628/motorcycle_8C.html +https://root.cern/doc/v628/timeonaxis3_8C.html +https://root.cern/doc/v628/graphstruct_8C.html +https://root.cern/doc/v628/gerrors_8C.html +https://root.cern/doc/v628/gerrors2_8C.html +https://root.cern/doc/v628/seism_8C.html +https://root.cern/doc/v628/timeSeriesFromCSV_8py.html +https://root.cern/doc/v628/zones_8C.html +https://root.cern/doc/v628/labels1_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/waves_8C.html +https://root.cern/doc/v628/graphShade_8C.html +https://root.cern/doc/v628/timeSeriesFromCSV__TDF_8C.html +https://root.cern/doc/v628/exclusiongraph_8C.html +https://root.cern/doc/v628/solveLinear_8C.html +https://root.cern/doc/v628/invertMatrix_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/decomposeQR_8C.html +https://root.cern/doc/v628/first_8C.html +https://root.cern/doc/v628/graphics_2gtime_8C.html +https://root.cern/doc/v628/psview_8C.html +https://root.cern/doc/v628/gaxis3_8C.html +https://root.cern/doc/v628/latex3_8C.html +https://root.cern/doc/v628/schroedinger__hydrogen_8C.html +https://root.cern/doc/v628/mass__spectrum_8C.html +https://root.cern/doc/v628/pavetext_8C.html +https://root.cern/doc/v628/pstable_8C.html +https://root.cern/doc/v628/mandelbrot_8C.html +https://root.cern/doc/v628/tmathtext_8C.html +https://root.cern/doc/v628/basic3d_8C.html +https://root.cern/doc/v628/latex4_8C.html +https://root.cern/doc/v628/structTimer.html +https://root.cern/doc/v628/AtlasExample_8C.html +https://root.cern/doc/v628/markerwarning_8C.html +https://root.cern/doc/v628/crown_8C.html +https://root.cern/doc/v628/polytest2_8C.html +https://root.cern/doc/v628/piechart_8C.html +https://root.cern/doc/v628/archi_8C.html +https://root.cern/doc/v628/quarks_8C.html +https://root.cern/doc/v628/transparency_8C.html +https://root.cern/doc/v628/palettes_8C.html +https://root.cern/doc/v628/gaxis_8C.html +https://root.cern/doc/v628/eval_8C.html +https://root.cern/doc/v628/tmathtext2_8C.html +https://root.cern/doc/v628/diamond_8C.html +https://root.cern/doc/v628/framework_8C.html +https://root.cern/doc/v628/latex_8C.html +https://root.cern/doc/v628/triangles_8C.html +https://root.cern/doc/v628/latex2_8C.html +https://root.cern/doc/v628/tornado_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/event_8C.html +https://root.cern/doc/v628/latex5_8C.html +https://root.cern/doc/v628/analyze_8C.html +https://root.cern/doc/v628/perceptualcolormap_8C.html +https://root.cern/doc/v628/ellipse_8C.html +https://root.cern/doc/v628/canvas2_8C.html +https://root.cern/doc/v628/formula1_8C.html +https://root.cern/doc/v628/polytest1_8C.html +https://root.cern/doc/v628/arrows_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/anim_8C.html +https://root.cern/doc/v628/earth_8C.html +https://root.cern/doc/v628/canvas_8C.html +https://root.cern/doc/v628/compile_8C.html +https://root.cern/doc/v628/gaxis2_8C.html +https://root.cern/doc/v628/graph__edit__playback_8C.html +https://root.cern/doc/v628/feynman_8C.html +https://root.cern/doc/v628/testUnfold4_8C.html +https://root.cern/doc/v628/testUnfold5a_8C.html +https://root.cern/doc/v628/testUnfold5d_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/testUnfold7a_8C.html +https://root.cern/doc/v628/testUnfold5b_8C.html +https://root.cern/doc/v628/testUnfold7c_8C.html +https://root.cern/doc/v628/testUnfold1_8C.html +https://root.cern/doc/v628/testUnfold7b_8C.html +https://root.cern/doc/v628/testUnfold2_8C.html +https://root.cern/doc/v628/testUnfold6_8C.html +https://root.cern/doc/v628/testUnfold3_8C.html +https://root.cern/doc/v628/testUnfold5c_8C.html +https://root.cern/doc/v628/pythiaExample_8C.html +https://root.cern/doc/v628/pythia8_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/FFT_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a27821176d4fc304f1a8c78658119abf4 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00604 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00025 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00843 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00023 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00021 +https://root.cern/doc/v628/TGX11_8cxx.html#a3777dbae63a15da001b2baa317a25149 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#ae10ea76d0f4e121f23ebe29f7431d524 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00078 +https://root.cern/doc/v628/RtypesCore_8h.html#ab9b5334647b78ec4256db251e3ae1fc6 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00498 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00043 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00076 +https://root.cern/doc/v628/RSha256_8hxx.html#a337ad8a7e52da2d584c2018f2ec2c81e +https://root.cern/doc/v628/TSPlot_8h_source.html#l00036 +https://root.cern/doc/v628/RtypesCore_8h.html#a2f6a60bd1cf0af65f2bcef4098d623b8 +https://root.cern/doc/v628/legend1_8C.html#a1cf21b68373bbb5839af0adcd2aba7fa +https://root.cern/doc/v628/TSPlot_8h_source.html#l00063 +https://root.cern/doc/v628/RtypesCore_8h.html#a956adc3a5a5961ed58826fd2c156a56c +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a0589dad2fc39f739b87dd0139fcc0617 +https://root.cern/doc/v628/TMatrixDfwd_8h.html#aa2e948a208b6c139cf8a93eed078edbb +https://root.cern/doc/v628/TestSPlot_8C.html +https://root.cern/doc/v628/TSPlot_8h_source.html#l00026 +https://root.cern/doc/v628/TSPlot_8cxx_source.html +https://root.cern/doc/v628/TSPlot_8h_source.html#l00044 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00660 +https://root.cern/doc/v628/structevent.html +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00825 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00035 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00082 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00037 +https://root.cern/doc/v628/RConfig_8hxx.html#a1a5b10885d81b7312605031163435e1e +https://root.cern/doc/v628/RtypesCore_8h.html#a5684fca17bcfb165d5c72366d391e360 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00477 +https://root.cern/doc/v628/RSha256_8hxx.html#a357394e0f6f88c8a57bd893ab28dc8f8 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00618 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00739 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00056 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00083 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00024 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00033 +https://root.cern/doc/v628/TSPlot_8h_source.html +https://root.cern/doc/v628/TSPlot_8h_source.html#l00041 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00310 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00028 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00289 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00332 +https://root.cern/doc/v628/RtypesCore_8h.html#af4b8b0ed8481dce26755d68fe8f39c5d +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00631 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00521 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00090 +https://root.cern/doc/v628/RtypesCore_8h.html#a214b8b7fe0ace4cd2df6d36749310112 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00381 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00397 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00032 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00084 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00549 +https://root.cern/doc/v628/RtypesCore_8h.html#adaf6e69e06203ab5ae4994d1e7590647 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00347 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00861 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00042 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00046 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00509 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00031 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00564 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00027 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00760 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00077 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00030 +https://root.cern/doc/v628/RtypesCore_8h.html#afc405399e08793afdff5b4692827b2a1 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00064 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00691 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00038 +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00674 +https://root.cern/doc/v628/RtypesCore_8h.html#a5d4ba170dce452c8ab6038b9fff28a6d +https://root.cern/doc/v628/TSPlot_8cxx_source.html#l00578 +https://root.cern/doc/v628/TSPlot_8h_source.html#l00085 +https://root.cern/doc/v628/group__tutorial__mlp.html +https://root.cern/doc/v628/geant3tasks_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/group__tutorial__cont__legacy.html +https://root.cern/doc/v628/rootmarks_8C.html +https://root.cern/doc/v628/htmlex_8C.html +https://root.cern/doc/v628/group__tutorial__thread.html +https://root.cern/doc/v628/MyTasks_8cxx.html +https://root.cern/doc/v628/benchmarks_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/group__tutorial__regexp.html +https://root.cern/doc/v628/rootalias_8C.html +https://root.cern/doc/v628/tasks_8C.html +https://root.cern/doc/v628/rootenv_8C.html +https://root.cern/doc/v628/group__tutorial__pyroot__legacy.html +https://root.cern/doc/v628/fitLinearRobust_8C.html +https://root.cern/doc/v628/fitNormSum_8C.html +https://root.cern/doc/v628/fitExclude_8C.html +https://root.cern/doc/v628/FittingDemo_8C.html +https://root.cern/doc/v628/minuit2GausFit_8C.html +https://root.cern/doc/v628/multidimfit_8C.html +https://root.cern/doc/v628/fit2a_8C.html +https://root.cern/doc/v628/TestBinomial_8C.html +https://root.cern/doc/v628/ErrorIntegral_8C.html +https://root.cern/doc/v628/line3Dfit_8C.html +https://root.cern/doc/v628/fit1_8C.html +https://root.cern/doc/v628/NumericalMinimization_8C.html +https://root.cern/doc/v628/combinedFit_8C.html +https://root.cern/doc/v628/exampleFit3D_8C.html +https://root.cern/doc/v628/qa2_8C.html +https://root.cern/doc/v628/multifit_8py.html +https://root.cern/doc/v628/langaus_8C.html +https://root.cern/doc/v628/fitcont_8C.html +https://root.cern/doc/v628/combinedFit_8py.html +https://root.cern/doc/v628/minuit2FitBench2D_8C.html +https://root.cern/doc/v628/RSha256_8hxx.html#a357394e0f6f88c8a57bd893ab28dc8f8 +https://root.cern/doc/v628/TwoHistoFit2D_8C.html +https://root.cern/doc/v628/fitNormSum_8py.html +https://root.cern/doc/v628/fitpanel__playback_8C.html +https://root.cern/doc/v628/fit2dHist_8C.html +https://root.cern/doc/v628/myfit_8C.html +https://root.cern/doc/v628/vectorizedFit_8C.html +https://root.cern/doc/v628/fitCircle_8C.html +https://root.cern/doc/v628/fithist_8C.html +https://root.cern/doc/v628/fitLinear_8C.html +https://root.cern/doc/v628/fit2_8C.html +https://root.cern/doc/v628/fit2d_8C.html +https://root.cern/doc/v628/Ifit_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/fitslicesy_8C.html +https://root.cern/doc/v628/hsimple_8C.html +https://root.cern/doc/v628/fitMultiGraph_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/fitConvolution_8C.html +https://root.cern/doc/v628/graph2dfit_8C.html +https://root.cern/doc/v628/multifit_8C.html +https://root.cern/doc/v628/fitConvolution_8py.html +https://root.cern/doc/v628/fitLinear2_8C.html +https://root.cern/doc/v628/minuit2FitBench_8C.html +https://root.cern/doc/v628/ConfidenceIntervals_8C.html +https://root.cern/doc/v628/namespacePyROOT.html#a5e95cd82a14a1983be2d205c8fe5f901 +https://root.cern/doc/v628/namespacePyROOT.html#a2d95eaedd844c491b668794e1cb08c9e +https://root.cern/doc/v628/namespacePyROOT.html#a1bd918c22ec4828425933d9280860cbc +https://root.cern/doc/v628/namespacePyROOT.html#a780f3716f1fdca49e9782cbe2681b40e +https://root.cern/doc/v628/DllImport_8h.html#afbd1ee4913757691af4b6ad0bf8530a8 +https://root.cern/doc/v628/TTreePyz_8cxx_source.html#l00174 +https://root.cern/doc/v628/TClassPyz_8cxx_source.html +https://root.cern/doc/v628/PyzPythonHelpers_8cxx_source.html#l00176 +https://root.cern/doc/v628/RVecPyz_8cxx_source.html#l00029 +https://root.cern/doc/v628/TDirectoryPyz_8cxx_source.html#l00122 +https://root.cern/doc/v628/TFilePyz_8cxx_source.html#l00023 +https://root.cern/doc/v628/PyzPythonHelpers_8cxx_source.html +https://root.cern/doc/v628/namespacePyROOT.html#a283b0f603888fc0e0f4314d7993b0d99 +https://root.cern/doc/v628/namespacePyROOT.html#aa4b520056312ae9e47cbca5acc9dc6a0 +https://root.cern/doc/v628/namespacePyROOT.html#a7a884794825347d1163d5196721150c2 +https://root.cern/doc/v628/CPPInstancePyz_8cxx_source.html#l00039 +https://root.cern/doc/v628/namespacePyROOT_1_1PyStrings.html +https://root.cern/doc/v628/RDataFramePyz_8cxx_source.html +https://root.cern/doc/v628/PyROOTWrapper_8cxx_source.html#l00050 +https://root.cern/doc/v628/namespaceCppyy.html#a493b03295f9c562f92afc24e0d14a72a +https://root.cern/doc/v628/namespaceCppyy.html#a6508cf516b953957a60f3e146b7106ef +https://root.cern/doc/v628/namespacePyROOT.html#a59aa9b67e5a67207a328a8255415ec6f +https://root.cern/doc/v628/PyROOTWrapper_8cxx_source.html#l00066 +https://root.cern/doc/v628/namespacePyROOT.html#aaad59b5a19e22701c361f6944f520141 +https://root.cern/doc/v628/TObjectPyz_8cxx_source.html +https://root.cern/doc/v628/PyROOTStrings_8cxx_source.html#l00046 +https://root.cern/doc/v628/GenericPyz_8cxx_source.html +https://root.cern/doc/v628/namespacePyROOT.html#ab0f526e6c80c18511d68e258cf39400b +https://root.cern/doc/v628/PyzPythonHelpers_8cxx_source.html#l00045 +https://root.cern/doc/v628/namespacePyROOT.html#a339ca2108ee076b0cc9b1a2387219414 +https://root.cern/doc/v628/namespacePyROOT.html#a92fd47a3a647a70e297e550540445b8f +https://root.cern/doc/v628/TTreePyz_8cxx_source.html +https://root.cern/doc/v628/RDataFramePyz_8cxx_source.html#l00030 +https://root.cern/doc/v628/namespacePyROOT.html#a4ac015fe2a3a1cedda4fc4d3e75b7574 +https://root.cern/doc/v628/PyMethodBase_8h.html#ae19630c1f4ca6d5236b30719d9140013 +https://root.cern/doc/v628/PyzPythonHelpers_8cxx_source.html#l00071 +https://root.cern/doc/v628/namespacePyROOT.html#a7ef3ad2ea0fb9d19213eea124fb6f0a8 +https://root.cern/doc/v628/namespacePyROOT.html#aa1579c11ed20f3f4627163336d6125f9 +https://root.cern/doc/v628/TMemoryRegulator_8h_source.html#l00049 +https://root.cern/doc/v628/PyROOTModule_8cxx_source.html +https://root.cern/doc/v628/FacadeHelpers_8cxx_source.html +https://root.cern/doc/v628/TTreePyz_8cxx_source.html#l00394 +https://root.cern/doc/v628/CPPInstancePyz_8cxx_source.html#l00129 +https://root.cern/doc/v628/namespacePyROOT.html#a8bae1aeef2ace713431a21f648bbc501 +https://root.cern/doc/v628/TDirectoryFilePyz_8cxx_source.html#l00069 +https://root.cern/doc/v628/PyROOTModule_8cxx_source.html#l00039 +https://root.cern/doc/v628/RTensorPyz_8cxx_source.html +https://root.cern/doc/v628/TDirectoryPyz_8cxx_source.html#l00133 +https://root.cern/doc/v628/namespaceCppyy.html +https://root.cern/doc/v628/CPPInstancePyz_8cxx_source.html +https://root.cern/doc/v628/GenericPyz_8cxx_source.html#l00054 +https://root.cern/doc/v628/namespacePyROOT.html#adcb446f457b7446adee22e8ef5f9579a +https://root.cern/doc/v628/TClonesArrayPyz_8cxx_source.html +https://root.cern/doc/v628/PyROOTStrings_8cxx_source.html +https://root.cern/doc/v628/namespacePyROOT.html +https://root.cern/doc/v628/TMemoryRegulator_8h_source.html +https://root.cern/doc/v628/namespacePyROOT.html#aed371bfbe878450e45acbfc2a7014fa0 +https://root.cern/doc/v628/PyzPythonHelpers_8cxx_source.html#l00106 +https://root.cern/doc/v628/namespacePyROOT.html#af9b9069f974695f2ca508db72c689694 +https://root.cern/doc/v628/namespacePyROOT.html#a64542f03b4cbe7e845bd1bfb8ddef726 +https://root.cern/doc/v628/TClassPyz_8cxx_source.html#l00089 +https://root.cern/doc/v628/TObjectPyz_8cxx_source.html#l00057 +https://root.cern/doc/v628/TClonesArrayPyz_8cxx_source.html#l00167 +https://root.cern/doc/v628/PyROOTStrings_8cxx_source.html#l00029 +https://root.cern/doc/v628/namespacePyROOT.html#aaffcab4cd86c27f453468edad5af8fa1 +https://root.cern/doc/v628/PyROOTWrapper_8cxx_source.html +https://root.cern/doc/v628/TDirectoryPyz_8cxx_source.html +https://root.cern/doc/v628/RVecPyz_8cxx_source.html +https://root.cern/doc/v628/TDirectoryFilePyz_8cxx_source.html +https://root.cern/doc/v628/namespacePyROOT.html#a2dafcba95d2a0508baa92933ba60c1ad +https://root.cern/doc/v628/TTreePyz_8cxx_source.html#l00196 +https://root.cern/doc/v628/namespacePyROOT.html#a7cbe7598dae657feeae35e840e92d489 +https://root.cern/doc/v628/namespacePyROOT.html#a5340f787854380e19c42f63e11610d75 +https://root.cern/doc/v628/namespacePyROOT.html#a832eae250f8be52a427fc9368c70e08e +https://root.cern/doc/v628/namespacePyROOT.html#a80595236fb041a8a6c52c709528f6795 +https://root.cern/doc/v628/FacadeHelpers_8cxx_source.html#l00028 +https://root.cern/doc/v628/RTensorPyz_8cxx_source.html#l00029 +https://root.cern/doc/v628/namespacePyROOT.html#ad1f42d85021a9632c63e0cf2087cb572 +https://root.cern/doc/v628/TFilePyz_8cxx_source.html +https://root.cern/doc/v628/math_2mathcore_2inc_2Math_2Types_8h_source.html#l00058 +https://root.cern/doc/v628/math_2mathcore_2inc_2Math_2Types_8h_source.html#l00059 +https://root.cern/doc/v628/namespaceROOT_1_1Minuit2.html +https://root.cern/doc/v628/TROOT_8cxx_source.html#l00565 +https://root.cern/doc/v628/namespaceROOT.html#a6b05a03e52eb0b7351122c3abdd817c1 +https://root.cern/doc/v628/TROOT_8cxx_source.html#l00464 +https://root.cern/doc/v628/RConversionRuleParser_8h_source.html#l00027 +https://root.cern/doc/v628/StringConv_8hxx_source.html#l00069 +https://root.cern/doc/v628/RtypesCore_8h.html#ab9b5334647b78ec4256db251e3ae1fc6 +https://root.cern/doc/v628/namespaceROOT.html#a9f6865332b226187349f6ee9e4cf6e7a +https://root.cern/doc/v628/namespaceROOT_1_1option.html +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a6f0995dfe5e5413a5c99c0534ac5aded +https://root.cern/doc/v628/namespaceROOT.html#ab5e7f23b2463a0b825f62314c2933803 +https://root.cern/doc/v628/group__StatFunc.html +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2ea0c4e475cef8d0f057949e45e537fba69 +https://root.cern/doc/v628/RtypesCore_8h.html#a956adc3a5a5961ed58826fd2c156a56c +https://root.cern/doc/v628/namespaceROOT.html#a4c5651b013f42a907f964e3c1ce5b949 +https://root.cern/doc/v628/RConversionRuleParser_8h_source.html#l00022 +https://root.cern/doc/v628/namespaceROOT.html#a3ccdca62ca27901836dee227a6b24a59 +https://root.cern/doc/v628/namespaceROOT.html#a86d0340d99edf81db4b84ff855da0eecaeb609b99f542b955302693c0f445ba0c +https://root.cern/doc/v628/namespaceROOT.html#adf2266c1e7389aec36815ab33b51613b +https://root.cern/doc/v628/namespaceROOT.html#ace605692babb4fa8061f9021ca7123dfa695cbc29b0ec742e4970c0c2dacdf323 +https://root.cern/doc/v628/TSeq_8hxx_source.html#l00205 +https://root.cern/doc/v628/RConfig_8hxx.html#ad04c30c9b9d07734cad0fcb6a540ae51 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a0fcdfc17837a4d29246d727e0f22b4d7 +https://root.cern/doc/v628/namespaceROOT.html#af6b6120e5533533bfe589e5ed91845f0 +https://root.cern/doc/v628/group__MathMore.html +https://root.cern/doc/v628/namespaceROOT_1_1Minuit.html +https://root.cern/doc/v628/namespaceROOT.html#ace605692babb4fa8061f9021ca7123dfa8c632159fa131f09d04f94e3cbcd8782 +https://root.cern/doc/v628/group__MathCore.html +https://root.cern/doc/v628/Rtypes_8h_source.html#l00116 +https://root.cern/doc/v628/TIOFeatures_8hxx_source.html +https://root.cern/doc/v628/structROOT_1_1RCompressionSetting.html +https://root.cern/doc/v628/RRangeCast_8hxx_source.html#l00186 +https://root.cern/doc/v628/namespaceROOT.html#a1f6ac333ec583349519559f1b350a0c2 +https://root.cern/doc/v628/namespaceROOT.html#a9f6865332b226187349f6ee9e4cf6e7aa6af3db866e5b6440e1fd88f548bc9af5 +https://root.cern/doc/v628/TClass_8cxx_source.html#l00546 +https://root.cern/doc/v628/TVirtualRWMutex_8h_source.html +https://root.cern/doc/v628/entrylistblock__figure1_8C.html#a4fa05b1f00fcde100685cc887554b93b +https://root.cern/doc/v628/namespaceROOT.html#ad13ad174a5858ba2e1c35b611e856e57 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#ad3606f67c009b24850e40f180855a88a +https://root.cern/doc/v628/namespaceROOT.html#a79cf440b62f9bc27b34ce88169e217cc +https://root.cern/doc/v628/namespaceROOT.html#a215cf4198347d98c3e709780d12538f6 +https://root.cern/doc/v628/RRangeCast_8hxx_source.html#l00217 +https://root.cern/doc/v628/namespaceROOT.html#ace605692babb4fa8061f9021ca7123df +https://root.cern/doc/v628/StringConv_8hxx_source.html#l00086 +https://root.cern/doc/v628/namespaceROOT.html#a6b3d79309d2d01619f6b3c1772bcd770 +https://root.cern/doc/v628/namespaceROOT_1_1Quartz.html +https://root.cern/doc/v628/namespaceROOT.html#ae6a350f2a58831bed90e0dc20878b96d +https://root.cern/doc/v628/RVec_8hxx_source.html#l03302 +https://root.cern/doc/v628/RVec_8hxx_source.html#l03298 +https://root.cern/doc/v628/namespaceROOT.html#a5ba2d63a941721fde8ef24e6377f4db1 +https://root.cern/doc/v628/namespaceROOT.html#a3ee0da8a19f36a8eaebea768e7b49cd6 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00743 +https://root.cern/doc/v628/namespaceROOT.html#a709cb88e484e50aa15d63702a3fd91a9 +https://root.cern/doc/v628/RDataFrame_8cxx_source.html#l01346 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00885 +https://root.cern/doc/v628/namespaceROOT.html#a1e2402d25bb58da6817591125f676b01 +https://root.cern/doc/v628/RVec_8hxx_source.html#l03295 +https://root.cern/doc/v628/namespaceROOT.html#a4f0a05b4ee1b47445001597333cf5812 +https://root.cern/doc/v628/TClass_8cxx_source.html#l05869 +https://root.cern/doc/v628/namespaceROOT.html#a394a70e9bc6f2a10795e56360fb840b5af5ad416cdc4570cf1346300da8224ba0 +https://root.cern/doc/v628/Rtypes_8h_source.html#l00113 +https://root.cern/doc/v628/namespaceROOT.html#a3e1141700bd0484802f19940a3432079 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00051 +https://root.cern/doc/v628/namespaceROOT_1_1Fit.html +https://root.cern/doc/v628/TThreadSlots_8h_source.html#l00019 +https://root.cern/doc/v628/namespaceROOT.html#aba645f43cd2a7a8d28790c086bfa0020 +https://root.cern/doc/v628/RVec_8hxx_source.html#l03304 +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2ea68779d8f10135be77fb42ef54eae3d66 +https://root.cern/doc/v628/Compression_8h_source.html +https://root.cern/doc/v628/namespaceROOT.html#a9b026af1d5a066b60480524db2c313d3 +https://root.cern/doc/v628/TVirtualRWMutex_8h_source.html#l00037 +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l01012 +https://root.cern/doc/v628/TSeq_8hxx_source.html#l00203 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00062 +https://root.cern/doc/v628/namespaceROOT.html#aaaf844c7b66d4932b7526631e307ad34 +https://root.cern/doc/v628/structROOT_1_1Internal_1_1TSchemaType.html +https://root.cern/doc/v628/namespaceROOT.html#ab1f114446cf611bc86d76876166aa772 +https://root.cern/doc/v628/namespaceROOT.html#ad4b46b4131e3ecac490d7194eaf683a1 +https://root.cern/doc/v628/namespaceROOT_1_1v5.html +https://root.cern/doc/v628/TDictionary_8h_source.html#l00160 +https://root.cern/doc/v628/ESTLType_8h_source.html +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322 +https://root.cern/doc/v628/RtypesCore_8h.html#a5d4ba170dce452c8ab6038b9fff28a6d +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322aaf5fc0fc132aa91b0618d21fb6773100 +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2ea17762eec8081a5b0e3c6d28035efe2f9 +https://root.cern/doc/v628/namespaceROOT.html#a79644d144a2cbaa49fc5e6d4654bcf55 +https://root.cern/doc/v628/TSeq_8hxx_source.html#l00215 +https://root.cern/doc/v628/namespaceROOT.html#a394a70e9bc6f2a10795e56360fb840b5 +https://root.cern/doc/v628/RConversionRuleParser_8h_source.html +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a65e536335c397b9c45635391e7b011e3 +https://root.cern/doc/v628/RConversionRuleParser_8h_source.html#l00025 +https://root.cern/doc/v628/namespaceROOT.html#a394a70e9bc6f2a10795e56360fb840b5a755bc5309295453e232891c2535fb477 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322aff9b27d2af2aa242792776fc3bf3c580 +https://root.cern/doc/v628/namespaceROOT_1_1R.html +https://root.cern/doc/v628/namespaceROOT.html#a335957db867e4532efc4881efcd9bd70 +https://root.cern/doc/v628/namespaceROOT_1_1TThreadedObjectUtils.html +https://root.cern/doc/v628/Rtypes_8h_source.html#l00110 +https://root.cern/doc/v628/namespaceROOT_1_1Geom.html +https://root.cern/doc/v628/namespaceROOT_1_1GLTutorials.html +https://root.cern/doc/v628/TClass_8h_source.html#l00659 +https://root.cern/doc/v628/namespaceROOT.html#a3069a91e789226963a1043cbf5c6c652 +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l00938 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a331a8307f6376f387653ffe54eb7e93a +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00841 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a6d98d592f97faba99f19700b821f71c2 +https://root.cern/doc/v628/TClassTable_8cxx_source.html +https://root.cern/doc/v628/namespaceROOT.html#a93ae0c1680d94489d30fc6432dd4065e +https://root.cern/doc/v628/namespaceROOT_1_1TypeTraits.html +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a3f6ebad1ddddea69c31ba7f06acf66d7 +https://root.cern/doc/v628/RVec_8hxx_source.html#l03301 +https://root.cern/doc/v628/TGHtmlTable_8cxx.html#a0240ac851181b84ac374872dc5434ee4 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a1e349f6a1eada36f6c5230fd69651542 +https://root.cern/doc/v628/String_8cxx_source.html +https://root.cern/doc/v628/TClass_8cxx_source.html +https://root.cern/doc/v628/StringUtils_8cxx_source.html#l00023 +https://root.cern/doc/v628/Rtypes_8h_source.html#l00111 +https://root.cern/doc/v628/TSeq_8hxx_source.html +https://root.cern/doc/v628/TThreadSlots_8h_source.html +https://root.cern/doc/v628/namespaceROOT.html#aac34bc604d19d89f21dde9d86bd8a3c3 +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/TSeq_8hxx_source.html#l00209 +https://root.cern/doc/v628/namespaceROOT_1_1RDF.html +https://root.cern/doc/v628/namespaceROOT_1_1Experimental.html +https://root.cern/doc/v628/TDataFrame_8hxx_source.html +https://root.cern/doc/v628/RRangeCast_8hxx_source.html#l00178 +https://root.cern/doc/v628/RtypesCore_8h.html#ab45b4db521647ab29b906b66cb66ea67 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322abdfa4c24a6d14c1b6f075279524a4725 +https://root.cern/doc/v628/namespaceROOT.html#a3d0549a9c1aba80e3975eda8fceedf3a +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2e +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l00958 +https://root.cern/doc/v628/math_2mathcore_2inc_2Math_2Types_8h_source.html#l00056 +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l00925 +https://root.cern/doc/v628/TROOT_8cxx_source.html#l00544 +https://root.cern/doc/v628/namespaceROOT_1_1Math.html +https://root.cern/doc/v628/namespaceROOT.html#ace605692babb4fa8061f9021ca7123dfaae5484a6f25ec42ff2fc33b0fc8bc2d5 +https://root.cern/doc/v628/namespaceROOT.html#af0bd5ae7bc080276127dbe2c685ef2a8 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322aeaa3defda389171cb0e3da7ae52c4ddb +https://root.cern/doc/v628/StringConv_8hxx_source.html#l00158 +https://root.cern/doc/v628/namespaceROOT.html#a55f8caf1321cedba236e1f8c85626d45 +https://root.cern/doc/v628/RtypesCore_8h.html#a214b8b7fe0ace4cd2df6d36749310112 +https://root.cern/doc/v628/namespaceROOT.html#a5964a1e3bd00c320fff16ddc0b797543 +https://root.cern/doc/v628/namespaceROOT.html#a8ca5a35f286d719efe582a3033effd97 +https://root.cern/doc/v628/namespaceROOT.html#a86d0340d99edf81db4b84ff855da0eec +https://root.cern/doc/v628/RDataFrame_8cxx_source.html +https://root.cern/doc/v628/namespaceROOT.html#aebd7cf84a018a1135047edc0258f8d06 +https://root.cern/doc/v628/namespaceROOT.html#af7e9992a8b2d70f69d6c1dbcdc4d7b04 +https://root.cern/doc/v628/namespaceROOT.html#a217454057e9c62dfb99cd275bb86275e +https://root.cern/doc/v628/namespaceROOT_1_1VecOps.html +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00641 +https://root.cern/doc/v628/Rtypes_8h_source.html#l00112 +https://root.cern/doc/v628/namespaceROOT.html#a69422df0f8b843ae8b6fb735dd2c6b3f +https://root.cern/doc/v628/namespaceROOT_1_1TreeUtils.html +https://root.cern/doc/v628/RVec_8hxx_source.html#l03296 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a6fc4975d933df4b5f0ebf94a18adfa12 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a489acbae7aceb53999911af30e25a214 +https://root.cern/doc/v628/namespaceROOT.html#a8ed2cc9db80527e5fd0edf9e4f170098 +https://root.cern/doc/v628/namespaceROOT.html#a99d00943a3e682a3db822bd940b6b79b +https://root.cern/doc/v628/namespaceROOT_1_1Detail.html +https://root.cern/doc/v628/namespaceROOT.html#a5c654d0158b1c5642da3fd2a33cec7ea +https://root.cern/doc/v628/RVec_8hxx_source.html#l03300 +https://root.cern/doc/v628/namespaceROOT.html#a465dc1dabc566285569f5f8f9213cd63 +https://root.cern/doc/v628/namespaceROOT.html#ad98d87138f2670f37ffd13a9ba57ce78 +https://root.cern/doc/v628/math_2mathcore_2inc_2Math_2Types_8h_source.html#l00057 +https://root.cern/doc/v628/RooLagrangianMorphFunc_8cxx.html#a6a3c31639a1ef1aac1fec7db5bee6538 +https://root.cern/doc/v628/namespaceROOT.html#ab709e59b19926a28abd97b5d50364de9 +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2eaf7c7f2c433515649448e194a3a2b283c +https://root.cern/doc/v628/DllImport_8h.html#afbd1ee4913757691af4b6ad0bf8530a8 +https://root.cern/doc/v628/EExecutionPolicy_8hxx_source.html +https://root.cern/doc/v628/namespaceTMVA.html#aa80d9b85c1bb794248940dd499e132b4 +https://root.cern/doc/v628/TIOFeatures_8hxx_source.html#l00039 +https://root.cern/doc/v628/namespaceROOT.html#a86d0340d99edf81db4b84ff855da0eecacac9d6bfb2f7df496df5df7999d818b8 +https://root.cern/doc/v628/namespaceROOT.html#a9c91bd40329fad491d12ae780e41249e +https://root.cern/doc/v628/namespaceROOT.html#a4c9f6da03874bf27f9424cd1bf9afe72 +https://root.cern/doc/v628/namespaceROOT.html#aa658dfa614d09c3a7a364d2df0c029bd +https://root.cern/doc/v628/namespaceROOT.html#a0c7197d10701def8c3b7105d36034b66 +https://root.cern/doc/v628/RtypesCore_8h.html#a2f6a60bd1cf0af65f2bcef4098d623b8 +https://root.cern/doc/v628/ESTLType_8h_source.html#l00028 +https://root.cern/doc/v628/math_2mathcore_2inc_2Math_2Types_8h_source.html#l00060 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html +https://root.cern/doc/v628/StringConv_8hxx_source.html +https://root.cern/doc/v628/namespaceROOT_1_1Internal.html#ac5b41efadbe1c75715aff232fd7f9387 +https://root.cern/doc/v628/TDataFrame_8hxx_source.html#l00016 +https://root.cern/doc/v628/namespaceROOT.html#a49b5c7efb62a4a5c9d9d8b3f702d3ef0 +https://root.cern/doc/v628/RVec_8hxx_source.html +https://root.cern/doc/v628/namespaceROOT_1_1TMetaUtils.html +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00103 +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2ea9ca91431ebc7cfda58ffbf5189fc116d +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a6c3ee63cb94c9a5adf8ecb718453babc +https://root.cern/doc/v628/namespaceROOT.html#a338e59f29344c64d84775f550cf3a448 +https://root.cern/doc/v628/win32gdk_2src_2gifencode_8c.html#ad22b6bbcdb700b8ef23189dabb0e8dc4 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00277 +https://root.cern/doc/v628/Rtypes_8h_source.html#l00115 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322ac926494a08e1e6c8bdbdd17a96d4d5e3 +https://root.cern/doc/v628/TClass_8h_source.html#l00664 +https://root.cern/doc/v628/namespaceROOT.html#ad22fe9fbf19316aa714e5cbd8ec11cd7 +https://root.cern/doc/v628/TROOT_8h_source.html +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a742d85c4061550a44f929584c2ff1987 +https://root.cern/doc/v628/TROOT_8cxx_source.html#l00468 +https://root.cern/doc/v628/namespaceROOT.html#a2452e7130768a7bafde2047b33f55fb7 +https://root.cern/doc/v628/TClass_8h_source.html#l00667 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a6cf74f40fe9e3a3c0bbfd7ddb0b1e650 +https://root.cern/doc/v628/RVec_8hxx_source.html#l03299 +https://root.cern/doc/v628/namespaceROOT_1_1ExecutorUtils.html +https://root.cern/doc/v628/group__Math.html +https://root.cern/doc/v628/namespaceROOT.html#ac481ce88e5d727b96f277d52d27ea3f8 +https://root.cern/doc/v628/TROOT_8cxx_source.html#l00558 +https://root.cern/doc/v628/namespaceROOT_1_1MacOSX.html +https://root.cern/doc/v628/namespaceROOT.html#a394a70e9bc6f2a10795e56360fb840b5a89d4c470b7d3aa73cbba86c8be6147d4 +https://root.cern/doc/v628/namespaceROOT_1_1CocoaTutorials.html +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2ea4e2685878a146ef1576540916fa0742f +https://root.cern/doc/v628/TClass_8h_source.html +https://root.cern/doc/v628/String_8cxx_source.html#l00025 +https://root.cern/doc/v628/namespaceROOT.html#a6afcb53e29f5e1d0844ce195e1bc7940 +https://root.cern/doc/v628/Rtypes_8h_source.html +https://root.cern/doc/v628/namespaceROOT_1_1Internal.html +https://root.cern/doc/v628/math_2mathcore_2inc_2Math_2Types_8h_source.html#l00055 +https://root.cern/doc/v628/namespaceROOT.html#a428991c84bbc691f4989c83845b54509 +https://root.cern/doc/v628/TClass_8cxx_source.html#l05884 +https://root.cern/doc/v628/TROOT_8cxx_source.html#l00527 +https://root.cern/doc/v628/TParameter_8cxx_source.html#l00001 +https://root.cern/doc/v628/namespaceROOT_1_1FoundationUtils.html +https://root.cern/doc/v628/namespaceROOT.html#a0a50c774df38a507630a2ff201df20c2 +https://root.cern/doc/v628/TROOT_8h_source.html#l00394 +https://root.cern/doc/v628/namespaceROOT.html#a394a70e9bc6f2a10795e56360fb840b5a8bb3bc81485ca288293c8fe60d62bcc9 +https://root.cern/doc/v628/namespaceROOT.html#a9eb1e0accf6b1cc3ae76248881b72c29 +https://root.cern/doc/v628/TDictionary_8h_source.html +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a579f77fdce6c0c20b4c5c6d2076151bf +https://root.cern/doc/v628/namespaceROOT.html#ac945b405bf8d412e202fdec69d333073 +https://root.cern/doc/v628/Rtypes_8h.html#a38bfb72dca211fa13f4e846643e3217a +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a7429ef369da057a8c2922b2e61edf87c +https://root.cern/doc/v628/namespaceROOT_1_1TestSupport.html +https://root.cern/doc/v628/namespaceROOT.html#aece83b884ffa2e0f3a31051015d61f1c +https://root.cern/doc/v628/namespaceROOT.html#a1e4e877b243f6cd45697f8b44768acb2 +https://root.cern/doc/v628/namespaceROOT.html#ad375029718efe0cd923a217a55781f3e +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l00251 +https://root.cern/doc/v628/namespaceROOT.html#a34b5e3f8a16955f06f3b7b45833b0a25 +https://root.cern/doc/v628/namespaceROOT.html#a3332c2f629881ab608768fa6846f440e +https://root.cern/doc/v628/TSeq_8hxx_source.html#l00204 +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l00245 +https://root.cern/doc/v628/namespaceROOT.html#a822816f42767b6b1c2b9f429e291604f +https://root.cern/doc/v628/namespaceROOT.html#a7bd3f417e2625b347b80c0c8e5677fca +https://root.cern/doc/v628/RVec_8hxx_source.html#l03297 +https://root.cern/doc/v628/namespaceROOT.html#a6e1b1f70ca9a590723d5270035349d79 +https://root.cern/doc/v628/namespaceROOT.html#a394a70e9bc6f2a10795e56360fb840b5af6d282aa0d7f62f872052dd68b3a3c5f +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a6870c524a0cc569c8e0c340a3795f758 +https://root.cern/doc/v628/namespaceROOT.html#a3839d42c96d37876bac4d5e60a0b6b1f +https://root.cern/doc/v628/namespaceROOT.html#a2cf52dcd70dcd816cb707cda4c8667a0 +https://root.cern/doc/v628/namespaceROOT.html#a70bec906a3dcfa9520922f1e84677416 +https://root.cern/doc/v628/namespaceROOT.html#a9f2d8ec6c8635052df862a291a68985b +https://root.cern/doc/v628/math_2mathcore_2inc_2Math_2Types_8h_source.html +https://root.cern/doc/v628/TROOT_8cxx_source.html +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l00992 +https://root.cern/doc/v628/namespaceROOT_1_1MathMore.html +https://root.cern/doc/v628/RVec_8hxx_source.html#l03303 +https://root.cern/doc/v628/namespaceROOT.html#adf0a45cbe46a33654386e99f4422ed6b +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322ab1267e387b7ead7531b813d43d117d36 +https://root.cern/doc/v628/TGX11_8cxx.html#a3777dbae63a15da001b2baa317a25149 +https://root.cern/doc/v628/namespaceROOT.html#ade20ffa4bbe5b291c24a07125d889c00 +https://root.cern/doc/v628/namespaceROOT.html#a25815b8df225e560389790d8f279f245 +https://root.cern/doc/v628/namespaceROOT.html#a06f2b8b216b615e5abbc872c9feff40f +https://root.cern/doc/v628/RtypesCore_8h.html#a8f20055c4e934463f6fece6fb1ae3f66 +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l00234 +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2ea3aaf587b36175b5ff4f30b0da1b2ca00 +https://root.cern/doc/v628/namespaceROOT.html#a47150b697c032eb7fd4d20fc874d8796 +https://root.cern/doc/v628/namespaceROOT.html#af26aee853245a2cd75e1713c618556b6 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00765 +https://root.cern/doc/v628/namespaceROOT_1_1TF1Helper.html +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00694 +https://root.cern/doc/v628/namespaceROOT.html#a38ba15c23c59a61373c4d8718f48f419 +https://root.cern/doc/v628/namespaceROOT.html#a309c86eae9905c11341557f1391dc9bf +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a4b3c5c600de18a1891259aeece356438 +https://root.cern/doc/v628/structROOT_1_1TNumSlots.html +https://root.cern/doc/v628/TParameter_8cxx_source.html +https://root.cern/doc/v628/Compression_8h_source.html#l00105 +https://root.cern/doc/v628/TClass_8h_source.html#l00665 +https://root.cern/doc/v628/namespaceROOT.html#aabcc9fe6e8ebf8feca8c45ac609fc73a +https://root.cern/doc/v628/namespaceROOT.html#ab84a9c43823c7f8048ee75989f462fa9 +https://root.cern/doc/v628/RRangeCast_8hxx_source.html#l00225 +https://root.cern/doc/v628/namespaceROOT.html#aa0680df9a756bbfa8f83d23d13333147 +https://root.cern/doc/v628/namespaceROOT.html#a60945f6fe634f9f3be9872e57bf87f2ea3f096341314eaaf0f833de9adaa871eb +https://root.cern/doc/v628/namespaceROOT.html#a9b026af1d5a066b60480524db2c313d3a7a22442b5fae87fcc6c301686d07baf6 +https://root.cern/doc/v628/TSeq_8hxx_source.html#l00206 +https://root.cern/doc/v628/TClass_8h_source.html#l00660 +https://root.cern/doc/v628/namespaceROOT.html#a22064d788eeeb2b316d90a5f77a980c9 +https://root.cern/doc/v628/namespaceROOT.html#a9f6865332b226187349f6ee9e4cf6e7aa53dbed99b577689da0cd8e3263a55f98 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00476 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322a2fb599c09ab3f75c3cef9dabebda81ae +https://root.cern/doc/v628/namespaceROOT.html#abf1860b4d1cab180fe0aa6fc02bd6e12 +https://root.cern/doc/v628/namespaceROOT_1_1Meta.html +https://root.cern/doc/v628/namespaceROOT.html#aed5d84b446edd9bbec5e051079a70857 +https://root.cern/doc/v628/namespaceROOT.html#a86d0340d99edf81db4b84ff855da0eecaf1b7307f4c0cc1f5bff4acf6b0b85067 +https://root.cern/doc/v628/RRangeCast_8hxx_source.html +https://root.cern/doc/v628/StringUtils_8cxx_source.html +https://root.cern/doc/v628/TROOT_8cxx_source.html#l00493 +https://root.cern/doc/v628/RConversionRuleParser_8h_source.html#l00023 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00447 +https://root.cern/doc/v628/namespaceROOT.html#af1ca3e4e049b6cbfd4a17bf69535e41c +https://root.cern/doc/v628/EExecutionPolicy_8hxx_source.html#l00005 +https://root.cern/doc/v628/RtypesCore_8h.html#adaf6e69e06203ab5ae4994d1e7590647 +https://root.cern/doc/v628/Rtypes_8h_source.html#l00109 +https://root.cern/doc/v628/namespaceTMVA_1_1DNN.html +https://root.cern/doc/v628/namespaceROOT.html#a12e3ca9e5133899af9ee3d5ae2935cd1 +https://root.cern/doc/v628/namespaceROOT.html#a85f93d3c1a63fd8a19edef3bc6262217 +https://root.cern/doc/v628/namespaceROOT.html#ac1dbebf536b59bbb59eb484f734c33e6 +https://root.cern/doc/v628/RtypesCore_8h.html#aa65ddc5b79a777f9c9cfb5945492e2ac +https://root.cern/doc/v628/TClassTable_8cxx_source.html#l00903 +https://root.cern/doc/v628/RConversionRuleParser_8h_source.html#l00024 +https://root.cern/doc/v628/namespaceROOT.html#a74e0f087967bb746bbe819e61a3f9ff9 +https://root.cern/doc/v628/structROOT_1_1RCompressionSetting_1_1EAlgorithm.html#ad5ed4ef81888f5406ae0f018ff45fd96 +https://root.cern/doc/v628/namespaceROOT.html#ad5867a9a727c0d269f0e50f1d122a291 +https://root.cern/doc/v628/namespaceROOT.html#a7d1bc7b843a55ba3ee83bd060f7f9a0b +https://root.cern/doc/v628/Rtypes_8h_source.html#l00114 +https://root.cern/doc/v628/namespaceROOT.html#a66fd02559b8c1547fcd33a93aa325322ade0f3cb9ff0f1ff09683c254f380ab5d +https://root.cern/doc/v628/namespaceROOT.html#a6a68873f50426d39f28d27ab7ff1fb01 +https://root.cern/doc/v628/StringConv_8hxx_source.html#l00038 +https://root.cern/doc/v628/namespaceROOT.html#a01a87b1e479f13ae9bbc723d87308543 +https://root.cern/doc/v628/namespaceROOT.html#a394a70e9bc6f2a10795e56360fb840b5a7d6f0fc2feef46411b2c4c639e8353c1 +https://root.cern/doc/v628/RConversionRuleParser_8cxx_source.html#l00921 +https://root.cern/doc/v628/group__tutorial__ProofAux.html +https://root.cern/doc/v628/group__tutorial__ProofEventProc.html +https://root.cern/doc/v628/group__tutorial__ProcFileElements.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/runProof_8C.html +https://root.cern/doc/v628/group__tutorial__ProofPythia.html +https://root.cern/doc/v628/group__tutorial__ProofNtuple.html +https://root.cern/doc/v628/group__tutorial__ProofFriends.html +https://root.cern/doc/v628/group__tutorial__ProofEvent.html +https://root.cern/doc/v628/group__tutorial__ProofSimple.html +https://root.cern/doc/v628/group__tutorial__ProofTests.html +https://root.cern/doc/v628/EmptyInclude_8h.html +https://root.cern/doc/v628/group__tutorial__ProofStdVec.html +https://root.cern/doc/v628/finalizeProof_8C.html +https://root.cern/doc/v628/getProof_8C.html +https://root.cern/doc/v628/group__tutorial__ProofSimpleFile.html +https://root.cern/doc/v628/pad2png_8C.html +https://root.cern/doc/v628/hist2image_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/galaxy__image_8C.html +https://root.cern/doc/v628/hsumanim_8C.html +https://root.cern/doc/v628/image2hist_8C.html +https://root.cern/doc/v628/hsum_8C.html +https://root.cern/doc/v628/trans__graph_8C.html +https://root.cern/doc/v628/imgconv_8C.html +https://root.cern/doc/v628/rose__image_8C.html +https://root.cern/doc/v628/img2pad_8C.html +https://root.cern/doc/v628/portfolio_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/unuranDemo_8C.html +https://root.cern/doc/v628/unuranFoamTest_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/hsimple_8C.html +https://root.cern/doc/v628/dir_a829051beca983f0d7c2feecd60624fc.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/hsimple_8C_source.html +https://root.cern/doc/v628/vo004__SortAndSelect_8py.html +https://root.cern/doc/v628/vo003__LogicalOperations_8C.html +https://root.cern/doc/v628/vo002__VectorCalculations_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/vo005__Combinations_8C.html +https://root.cern/doc/v628/vo006__IndexManipulation_8C.html +https://root.cern/doc/v628/vo001__AdoptOrOwnMemory_8C.html +https://root.cern/doc/v628/vo007__PhysicsHelpers_8C.html +https://root.cern/doc/v628/vo001__AdoptOrOwnMemory_8py.html +https://root.cern/doc/v628/vo004__SortAndSelect_8C.html +https://root.cern/doc/v628/vo005__Combinations_8py.html +https://root.cern/doc/v628/geom__cms__playback_8C.html +https://root.cern/doc/v628/overlay__palette_8C.html +https://root.cern/doc/v628/eve_2csgdemo_8C.html +https://root.cern/doc/v628/pythia__display_8C.html +https://root.cern/doc/v628/histobrowser_8C.html +https://root.cern/doc/v628/eve_2compound_8C.html +https://root.cern/doc/v628/run__alice__esd_8C.html +https://root.cern/doc/v628/eve7_2box_8C.html +https://root.cern/doc/v628/eve_2projection__prescale_8C.html +https://root.cern/doc/v628/hierarchical__scene_8C.html +https://root.cern/doc/v628/geom__atlas_8C.html +https://root.cern/doc/v628/window__manager_8C.html +https://root.cern/doc/v628/quadset_8C.html +https://root.cern/doc/v628/geom__alice__its_8C.html +https://root.cern/doc/v628/annotation_8C.html +https://root.cern/doc/v628/geom__alice__tpc_8C.html +https://root.cern/doc/v628/SplitGLView_8C.html +https://root.cern/doc/v628/glplot__geom_8C.html +https://root.cern/doc/v628/calo__detail_8C.html +https://root.cern/doc/v628/eve_2box_8C.html +https://root.cern/doc/v628/triangleset_8C.html +https://root.cern/doc/v628/alice__esd__split_8C.html +https://root.cern/doc/v628/eve_2geom__cms_8C.html +https://root.cern/doc/v628/MultiView_8C.html +https://root.cern/doc/v628/paramlist_8C.html +https://root.cern/doc/v628/projection_8C.html +https://root.cern/doc/v628/alice__vsd_8C.html +https://root.cern/doc/v628/geom__atlas__playback_8C.html +https://root.cern/doc/v628/selection__sigs_8C.html +https://root.cern/doc/v628/view3ds_8C.html +https://root.cern/doc/v628/pointset_8C.html +https://root.cern/doc/v628/camera__restore_8C.html +https://root.cern/doc/v628/eve_2assembly_8C.html +https://root.cern/doc/v628/boxset__cones_8C.html +https://root.cern/doc/v628/eve_2lineset_8C.html +https://root.cern/doc/v628/run__alice__esd__split_8C.html +https://root.cern/doc/v628/geom__cms__stereo_8C.html +https://root.cern/doc/v628/arrow__standalone_8C.html +https://root.cern/doc/v628/geom__alias_8C.html +https://root.cern/doc/v628/geom__lhcb_8C.html +https://root.cern/doc/v628/eve_2boxset_8C.html +https://root.cern/doc/v628/arrow_8C.html +https://root.cern/doc/v628/geom__default_8C.html +https://root.cern/doc/v628/eve_2show__extract_8C.html +https://root.cern/doc/v628/eve7_2lineset_8C.html +https://root.cern/doc/v628/eve7_2boxset_8C.html +https://root.cern/doc/v628/track_8C.html +https://root.cern/doc/v628/glplot_8C.html +https://root.cern/doc/v628/alice__esd__html__summary_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/text_8C.html +https://root.cern/doc/v628/alice__esd_8C.html +https://root.cern/doc/v628/pack_8C.html +https://root.cern/doc/v628/eve_2calorimeters_8C.html +https://root.cern/doc/v628/jetcone_8C.html +https://root.cern/doc/v628/hsum_8py.html +https://root.cern/doc/v628/staff_8py.html +https://root.cern/doc/v628/pyroot001__arrayInterface_8py.html +https://root.cern/doc/v628/pyroot_2fillrandom_8py.html +https://root.cern/doc/v628/ratioplot_8py.html +https://root.cern/doc/v628/pyroot003__prettyPrinting_8py.html +https://root.cern/doc/v628/formula1_8py.html +https://root.cern/doc/v628/surfaces_8py.html +https://root.cern/doc/v628/demoshelp_8py.html +https://root.cern/doc/v628/ntuple1_8py.html +https://root.cern/doc/v628/na49geomfile_8py.html +https://root.cern/doc/v628/shapes_8py.html +https://root.cern/doc/v628/tornado_8py.html +https://root.cern/doc/v628/pyroot004__NumbaDeclare_8py.html +https://root.cern/doc/v628/DynamicSlice_8py.html +https://root.cern/doc/v628/h1ReadAndDraw_8py.html +https://root.cern/doc/v628/gerrors_8py.html +https://root.cern/doc/v628/pyroot006__tcontext__context__manager_8py.html +https://root.cern/doc/v628/zdemo_8py.html +https://root.cern/doc/v628/na49view_8py.html +https://root.cern/doc/v628/namespacePyROOT.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/hsimple_8py.html +https://root.cern/doc/v628/mrt_8py.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/pyroot002__pythonizationDecorator_8py.html +https://root.cern/doc/v628/fit1_8py.html +https://root.cern/doc/v628/graph_8py.html +https://root.cern/doc/v628/na49visible_8py.html +https://root.cern/doc/v628/gui__ex_8py.html +https://root.cern/doc/v628/geometry_8py.html +https://root.cern/doc/v628/demo_8py.html +https://root.cern/doc/v628/parse__CSV__file__with__TTree__ReadStream_8py.html +https://root.cern/doc/v628/numberEntry_8py.html +https://root.cern/doc/v628/pyroot005__tfile__context__manager_8py.html +https://root.cern/doc/v628/copytree3_8C.html +https://root.cern/doc/v628/hsimpleProxyDriver_8C.html +https://root.cern/doc/v628/tree2_8C.html +https://root.cern/doc/v628/tcl_8C.html +https://root.cern/doc/v628/htest_8C.html +https://root.cern/doc/v628/bill_8C.html +https://root.cern/doc/v628/h1analysisProxy_8C.html +https://root.cern/doc/v628/tree0_8C.html +https://root.cern/doc/v628/drawsparse_8C.html +https://root.cern/doc/v628/h1analysisTreeReader_8C.html +https://root.cern/doc/v628/tree3_8C.html +https://root.cern/doc/v628/basic2_8C.html +https://root.cern/doc/v628/basic_8C.html +https://root.cern/doc/v628/hvector_8C.html +https://root.cern/doc/v628/run__h1analysis_8C.html +https://root.cern/doc/v628/parallelcoord_8C.html +https://root.cern/doc/v628/staff_8C.html +https://root.cern/doc/v628/tree_2parallelcoordtrans_8C.html +https://root.cern/doc/v628/ntuple1_8C.html +https://root.cern/doc/v628/h1chain_8C.html +https://root.cern/doc/v628/spider_8C.html +https://root.cern/doc/v628/copytree_8C.html +https://root.cern/doc/v628/h1analysis_8C.html +https://root.cern/doc/v628/cernstaff_8C.html +https://root.cern/doc/v628/hsimpleReader_8C.html +https://root.cern/doc/v628/treefriend_8C.html +https://root.cern/doc/v628/tree4_8C.html +https://root.cern/doc/v628/hsimpleProxy_8C.html +https://root.cern/doc/v628/tree2a_8C.html +https://root.cern/doc/v628/tree_2jets_8C.html +https://root.cern/doc/v628/cernbuild_8C.html +https://root.cern/doc/v628/printSizes_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/treegetval_8C.html +https://root.cern/doc/v628/tree1_8C.html +https://root.cern/doc/v628/hsimple_8C.html +https://root.cern/doc/v628/copytree2_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/clonesA__Event_8C.html +https://root.cern/doc/v628/tree_8C.html +https://root.cern/doc/v628/temperature_8C.html +https://root.cern/doc/v628/circular_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/foam__demo_8C.html +https://root.cern/doc/v628/foam__demopers_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/foam__kanwa_8C.html +https://root.cern/doc/v628/rs401d__FeldmanCousins_8C.html +https://root.cern/doc/v628/StandardTestStatDistributionDemo_8C.html +https://root.cern/doc/v628/FourBinInstructional_8C.html +https://root.cern/doc/v628/HybridInstructional_8C.html +https://root.cern/doc/v628/namespaceRooStats.html +https://root.cern/doc/v628/MultivariateGaussianTest_8C.html +https://root.cern/doc/v628/Zbi__Zgamma_8py.html +https://root.cern/doc/v628/rs602__HLFactoryCombinationexample_8C.html +https://root.cern/doc/v628/rs101__limitexample_8py.html +https://root.cern/doc/v628/MultivariateGaussianTest_8py.html +https://root.cern/doc/v628/rs601__HLFactoryexample_8C.html +https://root.cern/doc/v628/rs701__BayesianCalculator_8py.html +https://root.cern/doc/v628/rs401c__FeldmanCousins_8C.html +https://root.cern/doc/v628/StandardProfileLikelihoodDemo_8C.html +https://root.cern/doc/v628/rs101__limitexample_8C.html +https://root.cern/doc/v628/rs401c__FeldmanCousins_8py.html +https://root.cern/doc/v628/TwoSidedFrequentistUpperLimitWithBands_8C.html +https://root.cern/doc/v628/ModelInspector_8C.html +https://root.cern/doc/v628/rs__numbercountingutils_8py.html +https://root.cern/doc/v628/HybridStandardForm_8C.html +https://root.cern/doc/v628/rs__bernsteinCorrection_8py.html +https://root.cern/doc/v628/rs302__JeffreysPriorDemo_8C.html +https://root.cern/doc/v628/rs__numbercountingutils_8C.html +https://root.cern/doc/v628/FourBinInstructional_8py.html +https://root.cern/doc/v628/rs102__hypotestwithshapes_8C.html +https://root.cern/doc/v628/rs__bernsteinCorrection_8C.html +https://root.cern/doc/v628/rs603__HLFactoryElaborateExample_8C.html +https://root.cern/doc/v628/rs__numberCountingCombination_8C.html +https://root.cern/doc/v628/rs601__HLFactoryexample_8py.html +https://root.cern/doc/v628/OneSidedFrequentistUpperLimitWithBands_8C.html +https://root.cern/doc/v628/StandardFrequentistDiscovery_8C.html +https://root.cern/doc/v628/StandardHypoTestDemo_8C.html +https://root.cern/doc/v628/TestNonCentral_8C.html +https://root.cern/doc/v628/rs301__splot_8C.html +https://root.cern/doc/v628/StandardProfileInspectorDemo_8C.html +https://root.cern/doc/v628/StandardBayesianMCMCDemo_8C.html +https://root.cern/doc/v628/StandardBayesianNumericalDemo_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/IntervalExamples_8py.html +https://root.cern/doc/v628/StandardHypoTestInvDemo_8C.html +https://root.cern/doc/v628/rs701__BayesianCalculator_8C.html +https://root.cern/doc/v628/IntervalExamples_8C.html +https://root.cern/doc/v628/Zbi__Zgamma_8C.html +https://root.cern/doc/v628/StandardFeldmanCousinsDemo_8C.html +https://root.cern/doc/v628/StandardHistFactoryPlotsWithCategories_8C.html +https://root.cern/doc/v628/candleplotstack_8C.html +https://root.cern/doc/v628/multicolor_8C.html +https://root.cern/doc/v628/hlHisto3_8C.html +https://root.cern/doc/v628/th2polyBoxes_8C.html +https://root.cern/doc/v628/candledecay_8C.html +https://root.cern/doc/v628/ratioplot1_8py.html +https://root.cern/doc/v628/movepalette_8C.html +https://root.cern/doc/v628/fillrandom_8C.html +https://root.cern/doc/v628/ratioplot5_8C.html +https://root.cern/doc/v628/ratioplot5_8py.html +https://root.cern/doc/v628/cumulative_8C.html +https://root.cern/doc/v628/reverseaxis_8C.html +https://root.cern/doc/v628/twoscales_8py.html +https://root.cern/doc/v628/ratioplot4_8C.html +https://root.cern/doc/v628/hist_2fillrandom_8py.html +https://root.cern/doc/v628/tprofile2polyRealistic_8C.html +https://root.cern/doc/v628/rebin_8C.html +https://root.cern/doc/v628/exec2_8C.html +https://root.cern/doc/v628/greyscale_8C.html +https://root.cern/doc/v628/FirstContour_8C.html +https://root.cern/doc/v628/legendautoplaced_8C.html +https://root.cern/doc/v628/ratioplot1_8C.html +https://root.cern/doc/v628/hksimple_8C.html +https://root.cern/doc/v628/ZoomHistogram_8C.html +https://root.cern/doc/v628/hlabels2_8C.html +https://root.cern/doc/v628/draw2dopt_8C.html +https://root.cern/doc/v628/ratioplot6_8py.html +https://root.cern/doc/v628/hbars_8C.html +https://root.cern/doc/v628/hlHisto1_8C.html +https://root.cern/doc/v628/th2polyEurope_8C.html +https://root.cern/doc/v628/hsumTimer_8C.html +https://root.cern/doc/v628/transpad_8C.html +https://root.cern/doc/v628/ratioplot2_8py.html +https://root.cern/doc/v628/thstackpalettecolor_8C.html +https://root.cern/doc/v628/exec1_8C.html +https://root.cern/doc/v628/hlHisto4_8C.html +https://root.cern/doc/v628/hlHisto2_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/th2polyUSA_8C.html +https://root.cern/doc/v628/thstack2palettecolor_8C.html +https://root.cern/doc/v628/candleplotoption_8C.html +https://root.cern/doc/v628/ContourList_8C.html +https://root.cern/doc/v628/ratioplot4_8py.html +https://root.cern/doc/v628/fillhistosauto2p_8C.html +https://root.cern/doc/v628/hlabels1_8C.html +https://root.cern/doc/v628/ratioplot6_8C.html +https://root.cern/doc/v628/testSmooth_8C.html +https://root.cern/doc/v628/tprofile2polyRealisticModuleError_8C.html +https://root.cern/doc/v628/DynamicSlice_8C.html +https://root.cern/doc/v628/xyplot_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/NormalizeHistogram_8C.html +https://root.cern/doc/v628/candlehisto_8C.html +https://root.cern/doc/v628/candlescaled_8C.html +https://root.cern/doc/v628/candleplot_8C.html +https://root.cern/doc/v628/hstack_8C.html +https://root.cern/doc/v628/h1ReadAndDraw_8C.html +https://root.cern/doc/v628/Fibonacci_8C.html +https://root.cern/doc/v628/logscales_8C.html +https://root.cern/doc/v628/ratioplot3_8C.html +https://root.cern/doc/v628/candleplotwhiskers_8C.html +https://root.cern/doc/v628/hsum_8C.html +https://root.cern/doc/v628/ratioplot3_8py.html +https://root.cern/doc/v628/th2polyHoneycomb_8C.html +https://root.cern/doc/v628/sparsehist_8C.html +https://root.cern/doc/v628/ratioplotOld_8C.html +https://root.cern/doc/v628/twoscales_8C.html +https://root.cern/doc/v628/statsEditing_8C.html +https://root.cern/doc/v628/histpalettecolor_8C.html +https://root.cern/doc/v628/ratioplot2_8C.html +https://root.cern/doc/v628/demoshelp_8C.html +https://root.cern/doc/v628/demoshelp_8C_source.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/dir_a829051beca983f0d7c2feecd60624fc.html +https://root.cern/doc/v628/TUnfold_8h_source.html#l00183 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a27821176d4fc304f1a8c78658119abf4 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00209 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03061 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03217 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00238 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00164 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03411 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00256 +https://root.cern/doc/v628/TGX11_8cxx.html#a3777dbae63a15da001b2baa317a25149 +https://root.cern/doc/v628/RtypesCore_8h.html#ab9b5334647b78ec4256db251e3ae1fc6 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00133 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00170 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03195 +https://root.cern/doc/v628/RSha256_8hxx.html#a337ad8a7e52da2d584c2018f2ec2c81e +https://root.cern/doc/v628/TUnfold_8h_source.html#l00323 +https://root.cern/doc/v628/RtypesCore_8h.html#a2f6a60bd1cf0af65f2bcef4098d623b8 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00103 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l01936 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00309 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00156 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00336 +https://root.cern/doc/v628/legend1_8C.html#a1cf21b68373bbb5839af0adcd2aba7fa +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02899 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#adef93e62f3be1de7c00e0e652d7406ad +https://root.cern/doc/v628/RtypesCore_8h.html#a956adc3a5a5961ed58826fd2c156a56c +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a0589dad2fc39f739b87dd0139fcc0617 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02118 +https://root.cern/doc/v628/TMatrixDfwd_8h.html#aa2e948a208b6c139cf8a93eed078edbb +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02997 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00193 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00197 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02949 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00189 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00196 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03032 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00242 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00187 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00175 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03227 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03174 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00203 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00172 +https://root.cern/doc/v628/structevent.html +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00249 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00232 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02518 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00291 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00152 +https://root.cern/doc/v628/RConfig_8hxx.html#a1a5b10885d81b7312605031163435e1e +https://root.cern/doc/v628/RtypesCore_8h.html#a5684fca17bcfb165d5c72366d391e360 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03467 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00774 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00166 +https://root.cern/doc/v628/RSha256_8hxx.html#a357394e0f6f88c8a57bd893ab28dc8f8 +https://root.cern/doc/v628/TGWin32VirtualXProxy_8cxx.html#a06acd892b4a370b191bf66814941150c +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l01685 +https://root.cern/doc/v628/TUnfold_8cxx_source.html +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02923 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00693 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00158 +https://root.cern/doc/v628/win32gdk_2src_2gifencode_8c.html#ad22b6bbcdb700b8ef23189dabb0e8dc4 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l01716 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l01913 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00177 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00592 +https://root.cern/doc/v628/RSha256_8hxx.html#acf9942d15f0dd0ac4fc5ca66096a3f6d +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02549 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00311 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03344 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02266 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03681 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00250 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03154 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00195 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00252 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00618 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00205 +https://root.cern/doc/v628/RtypesCore_8h.html#af4b8b0ed8481dce26755d68fe8f39c5d +https://root.cern/doc/v628/TUnfold_8h_source.html#l00109 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00154 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00150 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00119 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03426 +https://root.cern/doc/v628/group__Unfold.html +https://root.cern/doc/v628/TUnfold_8h_source.html#l00254 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02162 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00261 +https://root.cern/doc/v628/RtypesCore_8h.html#a214b8b7fe0ace4cd2df6d36749310112 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00139 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00150 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00199 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00201 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03529 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00181 +https://root.cern/doc/v628/textangle_8C.html#a0740371593b746fd9f4bc73edf6f8975 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00246 +https://root.cern/doc/v628/textangle_8C.html#a1988b64f5ec67c2d076d85aa86404351 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02301 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00313 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00226 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03114 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00168 +https://root.cern/doc/v628/group__Hist.html +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00931 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03207 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03644 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00341 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03264 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l01008 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02045 +https://root.cern/doc/v628/TMatrixDSparsefwd_8h.html#a9e7fb1d24c29a5f772eaf3aafe873f44 +https://root.cern/doc/v628/TUnfold_8h_source.html +https://root.cern/doc/v628/TUnfold_8h_source.html#l00160 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00833 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02223 +https://root.cern/doc/v628/RSha256_8hxx.html#aa9b8e98b3989bdffd7f36b281c72a693 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00185 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03186 +https://root.cern/doc/v628/rootcling__impl_8cxx.html#a0822d01c051e2b76c48c9ae19b07a471a7571419a9cfbfae012aedf01dc8883de +https://root.cern/doc/v628/TUnfold_8h_source.html#l00244 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00248 +https://root.cern/doc/v628/triangle_8c.html#aa22f343c7ac709eab3fdd162721759a1 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03667 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00191 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00219 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00240 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l03139 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l01974 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l02079 +https://root.cern/doc/v628/RtypesCore_8h.html#afc405399e08793afdff5b4692827b2a1 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00162 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00230 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00234 +https://root.cern/doc/v628/TUnfold_8cxx_source.html#l00210 +https://root.cern/doc/v628/TUnfold_8h_source.html#l00179 +https://root.cern/doc/v628/legend1_8C.html#abeb628b1c10a75ff3a4579f727637979 +https://root.cern/doc/v628/TUnfoldSys_8cxx.html +https://root.cern/doc/v628/RtypesCore_8h.html#a5d4ba170dce452c8ab6038b9fff28a6d +https://root.cern/doc/v628/TUnfold_8h_source.html#l00207 +https://root.cern/doc/v628/rf604__constraints_8C.html +https://root.cern/doc/v628/rf101__basics_8C.html +https://root.cern/doc/v628/rf211__paramconv_8py.html +https://root.cern/doc/v628/rf303__conditional_8py.html +https://root.cern/doc/v628/rf316__llratioplot_8C.html +https://root.cern/doc/v628/rf509__wsinteractive_8C.html +https://root.cern/doc/v628/rf403__weightedevts_8C.html +https://root.cern/doc/v628/rf104__classfactory_8C.html +https://root.cern/doc/v628/rf505__asciicfg_8C.html +https://root.cern/doc/v628/rf406__cattocatfuncs_8py.html +https://root.cern/doc/v628/rf310__sliceplot_8C.html +https://root.cern/doc/v628/rf308__normintegration2d_8C.html +https://root.cern/doc/v628/rf515__hfJSON_8py.html +https://root.cern/doc/v628/rf612__recoverFromInvalidParameters_8py.html +https://root.cern/doc/v628/rf801__mcstudy_8C.html +https://root.cern/doc/v628/rf107__plotstyles_8C.html +https://root.cern/doc/v628/rf703__effpdfprod_8py.html +https://root.cern/doc/v628/rf504__simwstool_8py.html +https://root.cern/doc/v628/rf902__numgenconfig_8py.html +https://root.cern/doc/v628/rf503__wspaceread_8C.html +https://root.cern/doc/v628/rf313__paramranges_8py.html +https://root.cern/doc/v628/rf506__msgservice_8py.html +https://root.cern/doc/v628/rf408__RDataFrameToRooFit_8C.html +https://root.cern/doc/v628/rf111__derivatives_8py.html +https://root.cern/doc/v628/rf603__multicpu_8py.html +https://root.cern/doc/v628/rf609__xychi2fit_8py.html +https://root.cern/doc/v628/rf406__cattocatfuncs_8C.html +https://root.cern/doc/v628/rf605__profilell_8py.html +https://root.cern/doc/v628/rf508__listsetmanip_8py.html +https://root.cern/doc/v628/rf702__efficiencyfit__2D_8py.html +https://root.cern/doc/v628/rf204b__extendedLikelihood__rangedFit_8C.html +https://root.cern/doc/v628/rf105__funcbinding_8C.html +https://root.cern/doc/v628/rf613__global__observables_8C.html +https://root.cern/doc/v628/rf706__histpdf_8C.html +https://root.cern/doc/v628/rf610__visualerror_8C.html +https://root.cern/doc/v628/rf106__plotdecoration_8py.html +https://root.cern/doc/v628/rf705__linearmorph_8py.html +https://root.cern/doc/v628/rf102__dataimport_8C.html +https://root.cern/doc/v628/rf209__anaconv_8py.html +https://root.cern/doc/v628/rf310__sliceplot_8py.html +https://root.cern/doc/v628/rf710__roopoly_8C.html +https://root.cern/doc/v628/rf611__weightedfits_8C.html +https://root.cern/doc/v628/rf212__plottingInRanges__blinding_8py.html +https://root.cern/doc/v628/rf311__rangeplot_8py.html +https://root.cern/doc/v628/rf401__importttreethx_8py.html +https://root.cern/doc/v628/rf303__conditional_8C.html +https://root.cern/doc/v628/rf101__basics_8py.html +https://root.cern/doc/v628/rf407__latextables_8C.html +https://root.cern/doc/v628/rf709__BarlowBeeston_8C.html +https://root.cern/doc/v628/rf209__anaconv_8C.html +https://root.cern/doc/v628/rf403__weightedevts_8py.html +https://root.cern/doc/v628/rf608__fitresultaspdf_8py.html +https://root.cern/doc/v628/rf205__compplot_8py.html +https://root.cern/doc/v628/rf512__wsfactory__oper_8C.html +https://root.cern/doc/v628/rf305__condcorrprod_8py.html +https://root.cern/doc/v628/rf502__wspacewrite_8C.html +https://root.cern/doc/v628/rf712__lagrangianmorphfit_8C.html +https://root.cern/doc/v628/rf803__mcstudy__addons2_8C.html +https://root.cern/doc/v628/namespaceMath.html +https://root.cern/doc/v628/rf503__wspaceread_8py.html +https://root.cern/doc/v628/rf110__normintegration_8py.html +https://root.cern/doc/v628/rf404__categories_8C.html +https://root.cern/doc/v628/rf706__histpdf_8py.html +https://root.cern/doc/v628/rf704__amplitudefit_8py.html +https://root.cern/doc/v628/rf506__msgservice_8C.html +https://root.cern/doc/v628/rf104__classfactory_8py.html +https://root.cern/doc/v628/rf701__efficiencyfit_8py.html +https://root.cern/doc/v628/rf607__fitresult_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/rf108__plotbinning_8py.html +https://root.cern/doc/v628/rf110__normintegration_8C.html +https://root.cern/doc/v628/rf606__nllerrorhandling_8py.html +https://root.cern/doc/v628/rf712__lagrangianmorphfit_8py.html +https://root.cern/doc/v628/rf301__composition_8C.html +https://root.cern/doc/v628/rf612__recoverFromInvalidParameters_8C.html +https://root.cern/doc/v628/rf705__linearmorph_8C.html +https://root.cern/doc/v628/rf701__efficiencyfit_8C.html +https://root.cern/doc/v628/rf202__extendedmlfit_8py.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/rf513__wsfactory__tools_8C.html +https://root.cern/doc/v628/rf709__BarlowBeeston_8py.html +https://root.cern/doc/v628/rf502__wspacewrite_8py.html +https://root.cern/doc/v628/rf608__fitresultaspdf_8C.html +https://root.cern/doc/v628/rf306__condpereventerrors_8C.html +https://root.cern/doc/v628/rf514__RooCustomizer_8py.html +https://root.cern/doc/v628/rf401__importttreethx_8C.html +https://root.cern/doc/v628/rf804__mcstudy__constr_8C.html +https://root.cern/doc/v628/rf614__binned__fit__problems_8py.html +https://root.cern/doc/v628/rf711__lagrangianmorph_8py.html +https://root.cern/doc/v628/rf512__wsfactory__oper_8py.html +https://root.cern/doc/v628/rf609__xychi2fit_8C.html +https://root.cern/doc/v628/rf614__binned__fit__problems_8C.html +https://root.cern/doc/v628/rf309__ndimplot_8C.html +https://root.cern/doc/v628/rf602__chi2fit_8py.html +https://root.cern/doc/v628/rf111__derivatives_8C.html +https://root.cern/doc/v628/rf302__utilfuncs_8C.html +https://root.cern/doc/v628/rf511__wsfactory__basic_8py.html +https://root.cern/doc/v628/rf201__composite_8C.html +https://root.cern/doc/v628/rf210__angularconv_8py.html +https://root.cern/doc/v628/rf510__wsnamedsets_8C.html +https://root.cern/doc/v628/rf708__bphysics_8C.html +https://root.cern/doc/v628/rf514__RooCustomizer_8C.html +https://root.cern/doc/v628/rf802__mcstudy__addons_8C.html +https://root.cern/doc/v628/rf208__convolution_8py.html +https://root.cern/doc/v628/rf315__projectpdf_8py.html +https://root.cern/doc/v628/rf402__datahandling_8py.html +https://root.cern/doc/v628/rf903__numintcache_8py.html +https://root.cern/doc/v628/rf606__nllerrorhandling_8C.html +https://root.cern/doc/v628/rf703__effpdfprod_8C.html +https://root.cern/doc/v628/rf206__treevistools_8py.html +https://root.cern/doc/v628/rf305__condcorrprod_8C.html +https://root.cern/doc/v628/rf708__bphysics_8py.html +https://root.cern/doc/v628/rf510__wsnamedsets_8py.html +https://root.cern/doc/v628/rf901__numintconfig_8C.html +https://root.cern/doc/v628/rf613__global__observables_8py.html +https://root.cern/doc/v628/rf206__treevistools_8C.html +https://root.cern/doc/v628/rf203__ranges_8C.html +https://root.cern/doc/v628/rf511__wsfactory__basic_8C.html +https://root.cern/doc/v628/rf208__convolution_8C.html +https://root.cern/doc/v628/rf604__constraints_8py.html +https://root.cern/doc/v628/rf203__ranges_8py.html +https://root.cern/doc/v628/rf304__uncorrprod_8py.html +https://root.cern/doc/v628/rf306__condpereventerrors_8py.html +https://root.cern/doc/v628/rf304__uncorrprod_8C.html +https://root.cern/doc/v628/rf109__chi2residpull_8py.html +https://root.cern/doc/v628/rf105__funcbinding_8py.html +https://root.cern/doc/v628/rf402__datahandling_8C.html +https://root.cern/doc/v628/rf601__intminuit_8py.html +https://root.cern/doc/v628/rf407__latextables_8py.html +https://root.cern/doc/v628/rf204a__extendedLikelihood_8py.html +https://root.cern/doc/v628/rf602__chi2fit_8C.html +https://root.cern/doc/v628/rf504__simwstool_8C.html +https://root.cern/doc/v628/rf605__profilell_8C.html +https://root.cern/doc/v628/rf102__dataimport_8py.html +https://root.cern/doc/v628/rf607__fitresult_8py.html +https://root.cern/doc/v628/rf711__lagrangianmorph_8C.html +https://root.cern/doc/v628/rf603__multicpu_8C.html +https://root.cern/doc/v628/rf307__fullpereventerrors_8py.html +https://root.cern/doc/v628/rf312__multirangefit_8C.html +https://root.cern/doc/v628/rf610__visualerror_8py.html +https://root.cern/doc/v628/rf704__amplitudefit_8C.html +https://root.cern/doc/v628/rf212__plottingInRanges__blinding_8C.html +https://root.cern/doc/v628/rf707__kernelestimation_8py.html +https://root.cern/doc/v628/rf801__mcstudy_8py.html +https://root.cern/doc/v628/rf207__comptools_8C.html +https://root.cern/doc/v628/rf314__paramfitrange_8C.html +https://root.cern/doc/v628/rf315__projectpdf_8C.html +https://root.cern/doc/v628/rf312__multirangefit_8py.html +https://root.cern/doc/v628/rf405__realtocatfuncs_8C.html +https://root.cern/doc/v628/rf311__rangeplot_8C.html +https://root.cern/doc/v628/rf205__compplot_8C.html +https://root.cern/doc/v628/rf309__ndimplot_8py.html +https://root.cern/doc/v628/rf501__simultaneouspdf_8C.html +https://root.cern/doc/v628/rf601__intminuit_8C.html +https://root.cern/doc/v628/rf201__composite_8py.html +https://root.cern/doc/v628/rf505__asciicfg_8py.html +https://root.cern/doc/v628/rf106__plotdecoration_8C.html +https://root.cern/doc/v628/rf108__plotbinning_8C.html +https://root.cern/doc/v628/rf513__wsfactory__tools_8py.html +https://root.cern/doc/v628/rf509__wsinteractive_8py.html +https://root.cern/doc/v628/rf109__chi2residpull_8C.html +https://root.cern/doc/v628/rf710__roopoly_8py.html +https://root.cern/doc/v628/rf901__numintconfig_8py.html +https://root.cern/doc/v628/rf702__efficiencyfit__2D_8C.html +https://root.cern/doc/v628/rf902__numgenconfig_8C.html +https://root.cern/doc/v628/rf107__plotstyles_8py.html +https://root.cern/doc/v628/rf307__fullpereventerrors_8C.html +https://root.cern/doc/v628/rf204b__extendedLikelihood__rangedFit_8py.html +https://root.cern/doc/v628/rf409__NumPyPandasToRooFit_8py.html +https://root.cern/doc/v628/rf211__paramconv_8C.html +https://root.cern/doc/v628/namespaceRooFit.html +https://root.cern/doc/v628/rf314__paramfitrange_8py.html +https://root.cern/doc/v628/rf103__interprfuncs_8py.html +https://root.cern/doc/v628/rf707__kernelestimation_8C.html +https://root.cern/doc/v628/rf408__RDataFrameToRooFit_8py.html +https://root.cern/doc/v628/rf207__comptools_8py.html +https://root.cern/doc/v628/rf204a__extendedLikelihood_8C.html +https://root.cern/doc/v628/rf501__simultaneouspdf_8py.html +https://root.cern/doc/v628/rf508__listsetmanip_8C.html +https://root.cern/doc/v628/rf103__interprfuncs_8C.html +https://root.cern/doc/v628/rf301__composition_8py.html +https://root.cern/doc/v628/rf302__utilfuncs_8py.html +https://root.cern/doc/v628/rf405__realtocatfuncs_8py.html +https://root.cern/doc/v628/rf313__paramranges_8C.html +https://root.cern/doc/v628/rf404__categories_8py.html +https://root.cern/doc/v628/rf316__llratioplot_8py.html +https://root.cern/doc/v628/rf903__numintcache_8C.html +https://root.cern/doc/v628/rf202__extendedmlfit_8C.html +https://root.cern/doc/v628/rf210__angularconv_8C.html +https://root.cern/doc/v628/rf308__normintegration2d_8py.html +https://root.cern/doc/v628/Function_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/GlobalMinimization_8C.html +https://root.cern/doc/v628/SimpleFitting_8C.html +https://root.cern/doc/v628/tutorials_2r_2Functor_8C.html +https://root.cern/doc/v628/Minimization_8C.html +https://root.cern/doc/v628/Integration_8C.html +https://root.cern/doc/v628/tutorials_2r_2DataFrame_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/example_8C.html +https://root.cern/doc/v628/Interpolation_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/dir_a829051beca983f0d7c2feecd60624fc.html +https://root.cern/doc/v628/demos_8C_source.html +https://root.cern/doc/v628/demos_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/xmlnewfile_8C.html +https://root.cern/doc/v628/SAXHandler_8C.html +https://root.cern/doc/v628/xmlreadfile_8C.html +https://root.cern/doc/v628/group__Tutorials.html +https://root.cern/doc/v628/xmlmodifyfile_8C.html +https://root.cern/doc/v628/namespaceROOT.html +https://root.cern/doc/v628/DOMRecursive_8C.html +https://root.cern/doc/v628/DOMParsePerson_8C.html diff --git a/deploy/dev/dev-compose.yaml b/deploy/dev/dev-compose.yaml index 369897c1..83236e45 100644 --- a/deploy/dev/dev-compose.yaml +++ b/deploy/dev/dev-compose.yaml @@ -9,6 +9,8 @@ services: depends_on: chromadb-dev: condition: service_healthy + postgres-dev: + condition: service_healthy environment: RUNTIME_ENV: dev CLEO_URL_FILE: /run/secrets/cleo_url @@ -22,6 +24,7 @@ services: SENDER_PW_FILE: /run/secrets/sender_pw OPENAI_API_KEY_FILE: /run/secrets/openai_api_key HUGGING_FACE_HUB_TOKEN_FILE: /run/secrets/hf_token + POSTGRES_PASSWORD_FILE: /run/secrets/pg_password secrets: - cleo_url - cleo_user @@ -34,6 +37,7 @@ services: - sender_pw - openai_api_key - hf_token + - pg_password volumes: - a2rchi-dev-data:/root/data/ logging: @@ -51,13 +55,17 @@ services: depends_on: chromadb-dev: condition: service_healthy + postgres-dev: + condition: service_healthy environment: RUNTIME_ENV: dev OPENAI_API_KEY_FILE: /run/secrets/openai_api_key HUGGING_FACE_HUB_TOKEN_FILE: /run/secrets/hf_token + POSTGRES_PASSWORD_FILE: /run/secrets/pg_password secrets: - openai_api_key - hf_token + - pg_password volumes: - a2rchi-dev-data:/root/data/ logging: @@ -77,6 +85,8 @@ services: depends_on: chromadb-dev: condition: service_healthy + postgres-dev: + condition: service_healthy environment: RUNTIME_ENV: dev IMAP_USER_FILE: /run/secrets/imap_user @@ -121,6 +131,8 @@ services: depends_on: chromadb-dev: condition: service_healthy + postgres-dev: + condition: service_healthy environment: RUNTIME_ENV: dev FLASK_UPLOADER_APP_SECRET_KEY_FILE: /run/secrets/flask_uploader_app_secret_key @@ -148,6 +160,7 @@ services: dockerfile: deploy/dockerfiles/Dockerfile-chroma environment: RUNTIME_ENV: dev + # ALLOW_RESET: True #Allow to request client to reset vstore. Functionality not currently used but keep for future debugging ports: - 8002:8000 # host:container volumes: @@ -165,9 +178,33 @@ services: start_period: 10s start_interval: 5s + postgres-dev: + image: postgres:16 + environment: + RUNTIME_ENV: dev + POSTGRES_PASSWORD_FILE: /run/secrets/pg_password + POSTGRES_USER: a2rchi + POSTGRES_DB: a2rchi-db + secrets: + - pg_password + volumes: + - ./dev-init.sql:/docker-entrypoint-initdb.d/init.sql + - a2rchi-dev-pg-data:/var/lib/postgresql/data + logging: + options: + max-size: 10m + restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U a2rchi -d a2rchi-db"] + interval: 10s + timeout: 5s + retries: 5 + volumes: a2rchi-dev-data: external: true + a2rchi-dev-pg-data: + external: true secrets: imap_user: @@ -200,3 +237,5 @@ secrets: file: secrets/openai_api_key.txt hf_token: file: secrets/hf_token.txt + pg_password: + file: secrets/pg_password.txt diff --git a/deploy/dev/dev-init.sql b/deploy/dev/dev-init.sql new file mode 100644 index 00000000..90d49c61 --- /dev/null +++ b/deploy/dev/dev-init.sql @@ -0,0 +1,19 @@ +CREATE TABLE IF NOT EXISTS conversations ( + conversation_id INTEGER NOT NULL, + message_id SERIAL, + sender TEXT NOT NULL, + content TEXT NOT NULL, + ts TIMESTAMP NOT NULL, + PRIMARY KEY (message_id) +); +CREATE TABLE IF NOT EXISTS feedback ( + mid INTEGER NOT NULL, + feedback_ts TIMESTAMP NOT NULL, + feedback TEXT NOT NULL, + feedback_msg TEXT, + incorrect BOOLEAN, + unhelpful BOOLEAN, + inappropriate BOOLEAN, + PRIMARY KEY (mid, feedback_ts), + FOREIGN KEY (mid) REFERENCES conversations(message_id) +); \ No newline at end of file diff --git a/deploy/dev/dev-install.sh b/deploy/dev/dev-install.sh index 29180feb..ba11b725 100755 --- a/deploy/dev/dev-install.sh +++ b/deploy/dev/dev-install.sh @@ -1,11 +1,17 @@ #!/bin/bash -# create volume if it doesn't already exist +# create volume if it doesn't already exist for app data exists=`docker volume ls | awk '{print $2}' | grep a2rchi-dev-data` if [[ $exists != 'a2rchi-dev-data' ]]; then docker volume create --name a2rchi-dev-data fi +# create volume if it doesn't already exist for postgres data +exists=`docker volume ls | awk '{print $2}' | grep a2rchi-dev-pg-data` +if [[ $exists != 'a2rchi-dev-pg-data' ]]; then + docker volume create --name a2rchi-dev-pg-data +fi + # build base image; try to reuse previously built image cd A2rchi-dev/deploy/dev/ docker build -f ../dockerfiles/Dockerfile-base -t a2rchi-base:BASE_TAG ../.. diff --git a/deploy/prod-801/prod-801-compose.yaml b/deploy/prod-801/prod-801-compose.yaml index 887f8733..50612dce 100644 --- a/deploy/prod-801/prod-801-compose.yaml +++ b/deploy/prod-801/prod-801-compose.yaml @@ -81,9 +81,33 @@ services: start_period: 10s start_interval: 5s + postgres-prod-801: + image: postgres:16 + environment: + RUNTIME_ENV: prod-801 + POSTGRES_PASSWORD_FILE: /run/secrets/pg_password + POSTGRES_USER: a2rchi + POSTGRES_DB: a2rchi-db + secrets: + - pg_password + volumes: + - ./prod-801-init.sql:/docker-entrypoint-initdb.d/init.sql + - a2rchi-prod-801-pg-data:/var/lib/postgresql/data + logging: + options: + max-size: 10m + restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U a2rchi -d a2rchi-db"] + interval: 10s + timeout: 5s + retries: 5 + volumes: a2rchi-prod-801-data: external: true + a2rchi-prod-801-pg-data: + external: true secrets: flask_uploader_app_secret_key: @@ -94,3 +118,5 @@ secrets: file: secrets/openai_api_key.txt hf_token: file: secrets/hf_token.txt + pg_password: + file: secrets/pg_password.txt diff --git a/deploy/prod-801/prod-801-init.sql b/deploy/prod-801/prod-801-init.sql new file mode 100644 index 00000000..90d49c61 --- /dev/null +++ b/deploy/prod-801/prod-801-init.sql @@ -0,0 +1,19 @@ +CREATE TABLE IF NOT EXISTS conversations ( + conversation_id INTEGER NOT NULL, + message_id SERIAL, + sender TEXT NOT NULL, + content TEXT NOT NULL, + ts TIMESTAMP NOT NULL, + PRIMARY KEY (message_id) +); +CREATE TABLE IF NOT EXISTS feedback ( + mid INTEGER NOT NULL, + feedback_ts TIMESTAMP NOT NULL, + feedback TEXT NOT NULL, + feedback_msg TEXT, + incorrect BOOLEAN, + unhelpful BOOLEAN, + inappropriate BOOLEAN, + PRIMARY KEY (mid, feedback_ts), + FOREIGN KEY (mid) REFERENCES conversations(message_id) +); \ No newline at end of file diff --git a/deploy/prod-801/prod-801-install.sh b/deploy/prod-801/prod-801-install.sh index 6ecab7e7..867b4607 100644 --- a/deploy/prod-801/prod-801-install.sh +++ b/deploy/prod-801/prod-801-install.sh @@ -6,6 +6,12 @@ if [[ $exists != 'a2rchi-prod-801-data' ]]; then docker volume create --name a2rchi-prod-801-data fi +# create volume if it doesn't already exist for postgres data +exists=`docker volume ls | awk '{print $2}' | grep a2rchi-prod-801-pg-data` +if [[ $exists != 'a2rchi-prod-801-pg-data' ]]; then + docker volume create --name a2rchi-prod-801-pg-data +fi + # build base image; try to reuse previously built image cd A2rchi-prod-801/deploy/prod-801/ docker build -f ../dockerfiles/Dockerfile-base -t a2rchi-base:BASE_TAG ../.. diff --git a/deploy/prod-root/prod-root-compose.yaml b/deploy/prod-root/prod-root-compose.yaml index 844528e8..f581b2d7 100644 --- a/deploy/prod-root/prod-root-compose.yaml +++ b/deploy/prod-root/prod-root-compose.yaml @@ -80,9 +80,33 @@ services: start_period: 10s start_interval: 5s + postgres-prod-root: + image: postgres:16 + environment: + RUNTIME_ENV: prod-root + POSTGRES_PASSWORD_FILE: /run/secrets/pg_password + POSTGRES_USER: a2rchi + POSTGRES_DB: a2rchi-db + secrets: + - pg_password + volumes: + - ./prod-root-init.sql:/docker-entrypoint-initdb.d/init.sql + - a2rchi-prod-root-pg-data:/var/lib/postgresql/data + logging: + options: + max-size: 10m + restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U a2rchi -d a2rchi-db"] + interval: 10s + timeout: 5s + retries: 5 + volumes: a2rchi-prod-root-data: external: true + a2rchi-prod-root-pg-data: + external: true secrets: flask_uploader_app_secret_key: @@ -92,4 +116,6 @@ secrets: openai_api_key: file: secrets/openai_api_key.txt hf_token: - file: secrets/hf_token.txt \ No newline at end of file + file: secrets/hf_token.txt + pg_password: + file: secrets/pg_password.txt diff --git a/deploy/prod-root/prod-root-init.sql b/deploy/prod-root/prod-root-init.sql new file mode 100644 index 00000000..90d49c61 --- /dev/null +++ b/deploy/prod-root/prod-root-init.sql @@ -0,0 +1,19 @@ +CREATE TABLE IF NOT EXISTS conversations ( + conversation_id INTEGER NOT NULL, + message_id SERIAL, + sender TEXT NOT NULL, + content TEXT NOT NULL, + ts TIMESTAMP NOT NULL, + PRIMARY KEY (message_id) +); +CREATE TABLE IF NOT EXISTS feedback ( + mid INTEGER NOT NULL, + feedback_ts TIMESTAMP NOT NULL, + feedback TEXT NOT NULL, + feedback_msg TEXT, + incorrect BOOLEAN, + unhelpful BOOLEAN, + inappropriate BOOLEAN, + PRIMARY KEY (mid, feedback_ts), + FOREIGN KEY (mid) REFERENCES conversations(message_id) +); \ No newline at end of file diff --git a/deploy/prod-root/prod-root-install.sh b/deploy/prod-root/prod-root-install.sh index 4c74567c..c915b171 100644 --- a/deploy/prod-root/prod-root-install.sh +++ b/deploy/prod-root/prod-root-install.sh @@ -6,6 +6,12 @@ if [[ $exists != 'a2rchi-prod-root-data' ]]; then docker volume create --name a2rchi-prod-root-data fi +# create volume if it doesn't already exist for postgres data +exists=`docker volume ls | awk '{print $2}' | grep a2rchi-prod-root-pg-data` +if [[ $exists != 'a2rchi-prod-root-pg-data' ]]; then + docker volume create --name a2rchi-prod-root-pg-data +fi + # build base image; try to reuse previously built image cd A2rchi-prod-root/deploy/prod-root/ docker build -f ../dockerfiles/Dockerfile-base -t a2rchi-base:BASE_TAG ../.. diff --git a/deploy/prod/prod-compose.yaml b/deploy/prod/prod-compose.yaml index 98d32cfb..8bf7d66a 100644 --- a/deploy/prod/prod-compose.yaml +++ b/deploy/prod/prod-compose.yaml @@ -165,9 +165,33 @@ services: start_period: 10s start_interval: 5s + postgres-prod: + image: postgres:16 + environment: + RUNTIME_ENV: prod + POSTGRES_PASSWORD_FILE: /run/secrets/pg_password + POSTGRES_USER: a2rchi + POSTGRES_DB: a2rchi-db + secrets: + - pg_password + volumes: + - ./prod-init.sql:/docker-entrypoint-initdb.d/init.sql + - a2rchi-prod-pg-data:/var/lib/postgresql/data + logging: + options: + max-size: 10m + restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U a2rchi -d a2rchi-db"] + interval: 10s + timeout: 5s + retries: 5 + volumes: a2rchi-prod-data: external: true + a2rchi-prod-pg-data: + external: true secrets: imap_user: @@ -200,3 +224,5 @@ secrets: file: secrets/openai_api_key.txt hf_token: file: secrets/hf_token.txt + pg_password: + file: secrets/pg_password.txt diff --git a/deploy/prod/prod-init.sql b/deploy/prod/prod-init.sql new file mode 100644 index 00000000..90d49c61 --- /dev/null +++ b/deploy/prod/prod-init.sql @@ -0,0 +1,19 @@ +CREATE TABLE IF NOT EXISTS conversations ( + conversation_id INTEGER NOT NULL, + message_id SERIAL, + sender TEXT NOT NULL, + content TEXT NOT NULL, + ts TIMESTAMP NOT NULL, + PRIMARY KEY (message_id) +); +CREATE TABLE IF NOT EXISTS feedback ( + mid INTEGER NOT NULL, + feedback_ts TIMESTAMP NOT NULL, + feedback TEXT NOT NULL, + feedback_msg TEXT, + incorrect BOOLEAN, + unhelpful BOOLEAN, + inappropriate BOOLEAN, + PRIMARY KEY (mid, feedback_ts), + FOREIGN KEY (mid) REFERENCES conversations(message_id) +); \ No newline at end of file diff --git a/deploy/prod/prod-install.sh b/deploy/prod/prod-install.sh index 7bedf15c..f6c1410d 100755 --- a/deploy/prod/prod-install.sh +++ b/deploy/prod/prod-install.sh @@ -6,6 +6,12 @@ if [[ $exists != 'a2rchi-prod-data' ]]; then docker volume create --name a2rchi-prod-data fi +# create volume if it doesn't already exist for postgres data +exists=`docker volume ls | awk '{print $2}' | grep a2rchi-prod-pg-data` +if [[ $exists != 'a2rchi-prod-pg-data' ]]; then + docker volume create --name a2rchi-prod-pg-data +fi + # build base image; try to reuse previously built image cd A2rchi-prod/deploy/prod/ docker build -f ../dockerfiles/Dockerfile-base -t a2rchi-base:BASE_TAG ../.. diff --git a/pyproject.toml b/pyproject.toml index b76db279..792a6ec5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,6 +38,7 @@ dependencies = [ "pandas==2.1.0", "peft==0.5.0", "posthog==3.0.1", + "psycopg2==2.9.9", "pulsar-client==3.2.0", "pygments==2.16.1", "pypdf==3.16.1",