diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..f82824ad5 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,13 @@ +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners. + +# These owners will be the default owners for everything in the repo. +* @eq19 + +# Order is important. The last matching pattern has the most precedence. +# So if a pull request only touches javascript files, only these owners +# will be requested to review. +# *.js @octocat @github/js + +# You can also use email addresses if you prefer. +# .github/* docs@example.com diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..79693d22b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ["https://git.io/JJAW8"] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index dd84ea782..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 279f9eaaf..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -blank_issues_enabled: true -contact_links: - - name: Ask a question or provide feedback about using this action - about: For general Q&A and feedback, see the Discussions tab. - url: https://github.com/actions/github-script/discussions - - name: Ask a question or provide feedback about GitHub Actions - about: Please check out the GitHub community forum for discussions about GitHub Actions - url: https://github.com/orgs/community/discussions/categories/actions diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index bbcbbe7d6..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/actions/1-addition/1-maps/action.yml b/.github/actions/1-addition/1-maps/action.yml new file mode 100644 index 000000000..5fd78a3fd --- /dev/null +++ b/.github/actions/1-addition/1-maps/action.yml @@ -0,0 +1,228 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + default: ${{ github.action_repository }} + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + initiate_pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + api_key: + description: The key of api application + required: true + api_secret: + description: The secret of api application + required: true + pypi_token: + description: The pypi token + required: true + bot_token: + description: The monitor token + required: true + logs_token: + description: The warning token + required: true + chat_id: + description: The telegram chat id + required: true + +outputs: + artifact: + description: Collect artifact outputs + value: ${{ toJSON(steps.artifact.outputs) }} + variables: + description: Collect variables outputs + value: ${{ toJSON(steps.variables.outputs) }} + +runs: + using: composite + steps: + - name: Remove Existing Connection + shell: bash + env: + RUN: ${{ github.run_id }} + USER: ${{ github.actor }} + REPO: ${{ github.repository }} + ACTOR: ${{ github.triggering_actor }} + OWNER: ${{ github.repository_owner }} + run: | + gh variable set RERUN_RUNNER --body "false" + + HEADER="Accept: application/vnd.github+json" + RESPONSE=$(gh api -H "${HEADER}" repos/${{ github.repository }}/actions/runners) + TOTAL_COUNT=$(gh api -H "${HEADER}" /repos/${{ github.repository }}/actions/runners --jq '.total_count') + STATUS=$(echo "$RESPONSE" | jq -r --arg NAME "${{ env.RUNNER_TITLE }}" '.runners[] | select(.name == $NAME).status') + + if [[ "$TOTAL_COUNT" -eq 0 ]]; then + export "RUNNER_COUNT=$TOTAL_COUNT" + gh variable set RERUN_RUNNER --body "true" + elif [[ "$STATUS" == "offline" ]]; then + export "RUNNER_STATUS=$STATUS" + gh variable set RERUN_RUNNER --body "true" + RUNNER_ID=$(gh api -H "${HEADER}" /repos/${{ github.repository }}/actions/runners --jq '.runners.[].id') + gh api --method DELETE -H "${HEADER}" /repos/${{ github.repository }}/actions/runners/${RUNNER_ID} + fi + + bash /home/runner/work/_actions/eq19/eq19/v2/.github/entrypoint/init.sh ${{ inputs.action_path }} + mv -f /home/runner/work/_actions/eq19/eq19/v2/.github/entrypoint/dockerfile/* ${{ inputs.action_path }}/ + + - name: View context attributes + uses: actions/github-script@v7 + with: + script: console.log(context) + + - uses: actions/setup-python@v5 + with: + python-version: 3.12 + allow-prereleases: true + + - uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip + + - name: πŸ’Ž Set ID Token + id: 'auth' + uses: 'google-github-actions/auth@v2' + with: + token_format: 'id_token' + create_credentials_file: false + credentials_json: ${{ inputs.credentials }} + id_token_audience: 'https://us-central1-feedmapping.cloudfunctions.net/function' + + - name: Install dependencies + shell: bash + env: + ACCESS_API: ${{ inputs.api_key }} + ACCESS_KEY: ${{ inputs.api_secret }} + ACCESS_TOKEN: ${{ inputs.token }} + MESSAGE_API: ${{ inputs.chat_id }} + MONITOR_TOKEN: ${{ inputs.bot_token }} + WARNING_TOKEN: ${{ inputs.logs_token }} + PYPI_TOKEN: ${{ inputs.pypi_token }} + DOCKER_HUB_TOKEN: ${{ inputs.hub_token }} + DOCKER_HUB_PASSWORD: ${{ inputs.hub_password }} + GCP_CREDENTIALS: ${{ inputs.credentials }} + run: | + python -m pip -q install --upgrade pip + python -m pip -qqq install tensorflow-cpu + #python -m pip -qqq install -r ${{ inputs.action_path }}/dataFile/requirements.txt + + ##Ref: https://iree.dev/guides/ml-frameworks/tensorflow/ + #pip uninstall -y iree-base-compiler iree-base-runtime iree-compiler iree-tools-tf + python -m pip -q install --pre iree-base-compiler iree-base-runtime iree-tools-tf -f https://iree.dev/pip-release-links.html + + ##python -m pip -q install -e ./.github/entrypoint/artifact/python + ##iree-compile --iree-llvmcpu-list-targets && iree-run-module --list_drivers + + ##Ref: https://github.com/iree-org/iree-experimental + ##python ${{ inputs.action_path }}/pythonCode/testIREE.py + + #sudo apt-get update > /dev/null + #sudo apt-get install llvm-17 llvm-17-dev clang-17 mlir-17-tools > /dev/null + #export IREE_LLVM_ENABLE_BACKTRACE=1 + #export LLVM_SYMBOLIZER_PATH=$(which llvm-symbolizer) + + pip freeze | grep iree + pip cache purge && find . -type d -name "__pycache__" -exec rm -rf {} + + python user_data/ft_client/test_client/app.py orgs.json ${{ inputs.action_path }} + + ##Ref: https://github.com/eq19/maps/tree/v3/pythonCode + ##python ${{ github.workspace }}/.github/entrypoint/artifact/python/gellmann.py + ##cd ${{ inputs.action_path }}/pythonCode && python npreader.py -h && python map.py -h + + # Get all secrets from source repository + secrets=$(curl -s -H "Authorization: token $GH_TOKEN" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/actions/secrets" | jq -r '.secrets[].name') + for secret in $secrets; do gh secret set $secret --repo ${{ env.TARGET_REPOSITORY }} --body "${!secret}"; done + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ inputs.hub_username }} + password: ${{ inputs.hub_token }} + + - name: πŸš€ Initiate Lexer + uses: devcontainers/ci@v0.3 + with: + skipContainerUserIdUpdate: true + imageName: ${{ inputs.image_name }} + imageTag: target-${{ github.run_number }} + configFile: ${{ inputs.action_path }}/.devcontainer.json + push: ${{ env.RERUN_RUNNER == 'true' && 'always' || 'never' }} + runCmd: bash user_data/ft_client/test_client/maps.sh + env: | + ID=${{ env.ID }} + GH_TOKEN=${{ env.GH_TOKEN }} + REMOTE_REPO=${{ env.REMOTE_REPO }} + BEARER=${{ steps.auth.outputs.id_token }} + GITHUB_REPOSITORY=${{ github.repository }} + TARGET_REPOSITORY=${{ env.TARGET_REPOSITORY }} + WORKSPACE=/workspaces/${{ github.event.repository.name }} + ARTIFACT=user_data/ft_client/test_client/results/orgs.json + + - name: πŸ—‘οΈ Delete Docker Tags AND Images + id: delete_images + shell: bash + env: + IMAGE_NAME: "${{ inputs.image_name }}" + HUB_USERNAME: "${{ inputs.hub_username }}" + HUB_PASSWORD: "${{ inputs.hub_password }}" + MAX_DELETIONS: 15 + run: | + ./.github/entrypoint/remote.sh diff --git a/.github/actions/1-addition/2-feed/action.yml b/.github/actions/1-addition/2-feed/action.yml new file mode 100644 index 000000000..bbc3ccace --- /dev/null +++ b/.github/actions/1-addition/2-feed/action.yml @@ -0,0 +1,169 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + default: ${{ github.action_repository }} + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + initiate_pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + api_key: + description: The key of api application + required: true + api_secret: + description: The secret of api application + required: true + pypi_token: + description: The pypi token + required: true + bot_token: + description: The monitor token + required: true + logs_token: + description: The warning token + required: true + chat_id: + description: The telegram chat id + required: true + +outputs: + artifact: + description: Collect artifact outputs + value: ${{ toJSON(steps.artifact.outputs.repo) }} + set_output: + description: Collect set_output outputs + value: ${{ toJSON(steps.set_output.outputs) }} + +runs: + using: composite + steps: + - name: πŸ’Ž Set Artifact + id: artifact + shell: bash + run: | + shopt -s dotglob + rm -rf ${{ inputs.action_path }}/.git + + mv -f ${{ inputs.action_path }} ${{ github.workspace }}/_site + mkdir -p ${{ inputs.action_path }} && cp -R ${{ github.workspace }}/_site/. ${{ inputs.action_path }}/ + + - uses: ikalnytskyi/action-setup-postgres@v7 + id: postgres + with: + username: yoda + password: GrandMaster + database: jedi_order + port: 34837 + postgres-version: "17" + ssl: true + + - name: πŸͺ‚ Test postgres + env: + CONNECTION_URI: ${{ steps.postgres.outputs.connection-uri }} + SERVICE_NAME: ${{ steps.postgres.outputs.service-name }} + CERTIFICATE_PATH: ${{ steps.postgres.outputs.certificate-path }} + EXPECTED_CONNECTION_URI: postgresql://yoda:GrandMaster@localhost:34837/jedi_order?sslmode=verify-ca&sslrootcert=${{ steps.postgres.outputs.certificate-path }} + EXPECTED_SERVICE_NAME: yoda + EXPECTED_SERVER_VERSION: 17 + EXPECTED_SSL: true + shell: bash + run: | + ##cd /home/runner/work/_actions/eq19/eq19/v2/integrations/tensorflow + ##pip install -e python_projects/* && iree-import-tflite -h && iree-import-tf -h + + ##cd /home/runner/work/_actions/eq19/eq19/v2/integrations/pjrt + ##pip install -e ctstools python_packages/iree_cpu_plugin + + ##pip install -r requirements.txt && cd python_packages/iree_cpu_plugin/build/cmake && ninja + ##JAX_PLATFORMS=iree-cpu pytest -n4 --max-worker-restart=9999 -p openxla_pjrt_artifacts --openxla-pjrt-artifact-dir=/tmp/foobar test/test_simple.py + + #cp ${{ github.workspace }}/.github/entrypoint/test.py . && python3 -m pytest -vv test.py + #python ${{ github.workspace }}/web_programming/cc_exchanges.py + + - name: πŸš€ Initiate Feed Container + if: runner.os != 'Windows' + uses: devcontainers/ci@v0.3 + id: set_output + with: + imageTag: spin-${{ env.ID }} + skipContainerUserIdUpdate: true + imageName: ${{ inputs.image_name }} + configFile: _site/.devcontainer.json + runCmd: bash user_data/ft_client/test_client/feed.sh + push: ${{ env.RERUN_RUNNER == 'true' && 'always' || 'never' }} + env: | + ID=${{ env.ID }} + GH_TOKEN=${{ env.GH_TOKEN }} + REMOTE_REPO=${{ env.REMOTE_REPO }} + BEARER=${{ steps.auth.outputs.id_token }} + TARGET_REPOSITORY=${{ env.TARGET_REPOSITORY }} + + - name: πŸͺ‚ Remove existing images + id: variables + shell: bash + run: | + BASE_NAME=$(basename ${{ inputs.image_name }}) + IFS=', '; array=($(curl -L -s 'https://registry.hub.docker.com/v2/repositories/${{ inputs.image_name }}/tags?page_size=1024' | jq -rc '."results"[]["name"]' | yq eval -P | sed "s/ /, /g")) + for ((i=0; i < ${#array[@]}; i++)); do + if [[ "${array[$i]}" != "latest" ]]; then + HUB_TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d "{\"username\": \"${{ inputs.hub_username }}\", \"password\": \"${{ inputs.hub_password }}\"}" https://hub.docker.com/v2/users/login/ | jq -r .token) + curl -s -i -X DELETE -H "Accept: application/json" -H "Authorization: JWT $HUB_TOKEN" https://hub.docker.com/v2/namespaces/${{ inputs.hub_username }}/repositories/$BASE_NAME/tags/${array[$i]} + echo "deleted: ${{ inputs.image_name }}:${array[$i]}" + fi + done diff --git a/.github/actions/1-addition/3-lexer/action.yml b/.github/actions/1-addition/3-lexer/action.yml new file mode 100644 index 000000000..44f33d913 --- /dev/null +++ b/.github/actions/1-addition/3-lexer/action.yml @@ -0,0 +1,137 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'green' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + default: ${{ github.action_repository }} + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + initiate_pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + +outputs: + artifact: + description: Collect artifact outputs + value: ${{ toJSON(steps.artifact.outputs) }} + variables: + description: Collect variables outputs + value: ${{ toJSON(steps.variables.outputs) }} + +runs: + using: composite + steps: + - name: πŸͺ‚ Adapt feed mapping + shell: bash + run: | + gh variable set ORGS_JSON --body "$(cat $RUNNER_TEMP/orgs.json)" + mv -f .github/entrypoint/dockerfile/* ${{ inputs.action_path }}/ + cd ${{ github.workspace }}/_site && rm -rf .git .devcontainer.json Dockerfile* + #git clone --single-branch -b gh-pages ${REMOTE_REPO} ${{ inputs.action_path }}/_site &>/dev/null + + #cd ${{ inputs.action_path }}/_site + #shopt -s dotglob && rm -rf ${RUNNER_TEMP}/* + #[[ -d docs ]] && mv -f docs ${RUNNER_TEMP}/ + #[[ -d .sass-cache ]] && mv -f .sass-cache ${RUNNER_TEMP}/ + #[[ -f .jekyll-metadata ]] && mv -f .jekyll-metadata ${RUNNER_TEMP}/ + + #rm -rf * + #git rm -rfq . + #git clean -fxd + #mv -f ${RUNNER_TEMP}/* . + #mv -f ${{ github.workspace }}/_site/* . + + mv -f ${{ github.workspace }}/_site ${{ inputs.action_path }}/ + cat ${{ inputs.action_path }}/Dockerfile + + - name: πŸš€ Initiate Lexer + uses: devcontainers/ci@v0.3 + id: artifact + with: + imageTag: id-${{ env.ID }} + skipContainerUserIdUpdate: true + imageName: ${{ inputs.image_name }} + runCmd: bash user_data/ft_client/test_client/lexer.sh + configFile: ${{ inputs.action_path }}/.devcontainer.json + push: ${{ env.RERUN_RUNNER == 'true' && 'always' || 'never' }} + env: | + ID=${{ env.ID }} + GH_TOKEN=${{ env.GH_TOKEN }} + REMOTE_REPO=${{ env.REMOTE_REPO }} + BEARER=${{ steps.auth.outputs.id_token }} + TARGET_REPOSITORY=${{ env.TARGET_REPOSITORY }} + + - name: πŸ’Ž Variables + id: variables + shell: bash + env: + id: ${{ inputs.id }} + TARGET_REPOSITORY: ${{ env.TARGET_REPOSITORY }} + run: | + BASE_NAME=$(basename ${{ inputs.image_name }}) + echo 'output_${id}='${TARGET_REPOSITORY} >> ${GITHUB_OUTPUT} + IFS=', '; array=($(curl -L -s 'https://registry.hub.docker.com/v2/repositories/${{ inputs.image_name }}/tags?page_size=1024' | jq -rc '."results"[]["name"]' | yq eval -P | sed "s/ /, /g")) + for ((i=0; i < ${#array[@]}; i++)); do + if [ "${array[$i]}" != "latest" ]; then + HUB_TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d "{\"username\": \"${{ inputs.hub_username }}\", \"password\": \"${{ inputs.hub_password }}\"}" https://hub.docker.com/v2/users/login/ | jq -r .token) + curl -s -i -X DELETE -H "Accept: application/json" -H "Authorization: JWT $HUB_TOKEN" https://hub.docker.com/v2/namespaces/${{ inputs.hub_username }}/repositories/$BASE_NAME/tags/${array[$i]} + echo "deleted: ${{ inputs.image_name }}:${array[$i]}" + fi + done diff --git a/.github/actions/2-multiplication/1-maps/action.yml b/.github/actions/2-multiplication/1-maps/action.yml new file mode 100644 index 000000000..f0b88e166 --- /dev/null +++ b/.github/actions/2-multiplication/1-maps/action.yml @@ -0,0 +1,155 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: "Name for the container to be created. Example: nginx" + required: false + image_tag: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + build_args: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + chat_id: + description: 'The telegram chat id' + required: false + bot_token: + description: 'The monitor token' + required: false + logs_token: + description: 'The warning token' + required: false + action_path: + description: 'The action path' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + initiate_pauli_sum: + description: Build args + required: false + default: "" + +branding: + icon: 'command' + color: 'yellow' + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + using: composite + steps: + - name: Login to DockerHub + uses: docker/login-action@v3 + if: runner.os == '-Windows' + with: + username: ${{ inputs.hub_username }} + password: ${{ inputs.hub_token }} + + - name: πŸ’Ž Set ID Token + uses: 'google-github-actions/auth@v2' + with: + credentials_json: ${{ inputs.credentials }} + + - name: πŸ’Ž Setup Gcloud + uses: 'google-github-actions/setup-gcloud@v2' + #with: + #install_components: 'alpha,cloud-datastore-emulator' + + # Ref: https://cloud.google.com/compute/docs/instances/create-start-instance + - name: πŸ’Ž Remove Existing Self-Hosted Runner + shell: bash + run: | + bash /Users/runner/work/_actions/eq19/eq19/v2/.github/entrypoint/init.sh + + - name: View context attributes + uses: actions/github-script@v7 + with: + script: console.log(context) + + - name: Set Docker Hub description + uses: peter-evans/dockerhub-description@v4 + with: + enable-url-completion: true + password: ${{ inputs.hub_token }} + username: ${{ inputs.hub_username }} + repository: ${{ inputs.image_name }} + readme-filepath: ${{ inputs.action_path }}/README.md + short-description: ${{ github.event.repository.description }} + + - name: Build and Push my_awesome_microservice + uses: mr-smithers-excellent/docker-build-push@v5 + if: runner.os == '-Windows' + with: + image: my_awesome_microservice + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ inputs.token }} + platform: windows/amd64 + tags: development-latest + + # Ref: https://cloud.google.com/compute/docs/instances/create-start-instance + - name: πŸ’Ž Remove Existing Self-Hosted Runner + if: env.RERUN_RUNNER == 'true' + shell: bash + run: | + for instance_uri in $(gcloud compute instances list --uri 2> /dev/null); do + instance_name=${instance_uri##*/} + instance_zone_uri=${instance_uri/\/instances\/${instance_name}/} + instance_zone=${instance_zone_uri##*/} + gcloud compute instances update "${instance_name}" --zone "${instance_zone}" --no-deletion-protection + if [ -n "${instance_name}" ] && [ -n "${instance_zone}" ] && gcloud compute instances delete ${instance_name} --zone ${instance_zone} --quiet; then + echo "deleted: ${instance_zone}/${instance_name}" + fi + done diff --git a/.github/actions/2-multiplication/2-feed/action.yml b/.github/actions/2-multiplication/2-feed/action.yml new file mode 100644 index 000000000..6d0314ab8 --- /dev/null +++ b/.github/actions/2-multiplication/2-feed/action.yml @@ -0,0 +1,224 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: "Name for the container to be created. Example: nginx" + required: false + image_tag: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + build_args: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + chat_id: + description: 'The telegram chat id' + required: false + bot_token: + description: 'The monitor token' + required: false + logs_token: + description: 'The warning token' + required: false + action_path: + description: 'The action path' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + initiate_pauli_sum: + description: Build args + required: false + default: "" + +outputs: + variables: + description: Collect variables outputs + value: ${{ toJSON(steps.variables.outputs) }} + metadata: + description: Collect metadata outputs + value: ${{ toJSON(steps.metadata.outputs) }} + +runs: + using: composite + steps: + - name: πŸͺ‚ Get tag of dependencies + id: variables + shell: bash + run: | + brew update --quiet + brew install --quiet coreutils doxygen pandoc gsl cmake ninja lcov gcc@12 qt@5 texlive + brew info qt@5 && brew info gsl + IFS=', '; array=($(curl -L -s 'https://registry.hub.docker.com/v2/repositories/${{ inputs.image_name }}/tags?page_size=1024' | jq -rc '."results"[]["name"]' | yq eval -P | sed "s/ /, /g")) + for ((i=0; i < ${#array[@]}; i++)); do + if [[ "${array[$i]}" != "latest" ]]; then + image_tag="${array[$i]}" + echo 'IMAGE_TAG='${image_tag##*-} >> ${GITHUB_ENV} + fi + done + + # See https://github.com/thesofproject/sof/blob/main/zephyr/docker-run.sh + - name: πŸͺ‚ Cloud Config + if: env.RERUN_RUNNER == 'true' + id: metadata + shell: bash + run: | + cat << EOL >> cloud-config + #cloud-config + users: + - default + - uid: 1000 + name: runner + groups: admin,adm,video,docker,google-sudoers + + write_files: + - path: /etc/systemd/system/firewall.service + permissions: "0644" + owner: root + content: | + [Unit] + Description=Configures the host firewall + + [Service] + Type=oneshot + RemainAfterExit=true + ExecStart=/sbin/iptables -A INPUT -p tcp --match multiport --dports 80,5432,6379,8080 -j ACCEPT + + - path: /etc/systemd/system/runner1.service + permissions: "0644" + owner: root + content: | + [Unit] + Description=Runner service + After=docker.service firewall.service + Wants=docker.service firewall.service + + [Service] + RestartSec=5s + Restart=on-failure + Environment="HOME=/home/runner" + ExecStop=/usr/bin/docker stop runner1 + ExecStopPost=/usr/bin/docker rm runner1 + ExecStartPre=/usr/bin/docker-credential-gcr configure-docker + ExecStart=/usr/bin/docker run --rm -e RUNNER_REPLACE_EXISTING=true -e RUNNER_NAME=${{ env.RUNNER_TITLE }} -e RUNNER_REPOSITORY_URL=https://github.com/${{ env.TARGET_REPOSITORY }} -e GITHUB_ACCESS_TOKEN=${{ inputs.token }} -e CONTAINER_NAME=runner1 -v /home/runner/.docker:/home/runner/.docker -v /mnt:/mnt -v /var/log:/host/var/log -v /etc/systemd:/host/etc/systemd -v /var/run/docker.sock:/var/run/docker.sock --name runner1 --pull=always eq19/maps:target-${{ github.run_number }} + + - path: /etc/systemd/system/mydb.service + permissions: "0644" + owner: root + content: | + [Unit] + Description=MyDB service + After=runner1.service + Wants=runner1.service + + [Service] + Restart=always + Environment="HOME=/home/runner" + ExecStop=/usr/bin/docker exec mydb -s quit + ExecStartPre=/usr/bin/docker-credential-gcr configure-docker + ExecStart=/usr/bin/docker run --rm -e POSTGRES_DB=postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e TELEGRAM_CHAT_ID=${{ inputs.chat_id }} -e MONITOR_BOT_TOKEN=${{ inputs.bot_token }} -e WARNING_BOT_TOKEN=${{ inputs.logs_token }} -v /mnt:/mnt --memory=512M --memory-swap=1G --name=mydb -p 5432:5432 --pull=always eq19/feed:spin-${{ env.IMAGE_TAG }} + + - path: /etc/systemd/system/runner2.service + permissions: "0644" + owner: root + content: | + [Unit] + Description=gcloud compute + Wants=mydb.service + After=mydb.service + + [Service] + RestartSec=5s + Restart=on-failure + Environment="HOME=/home/runner" + ExecStop=/usr/bin/docker stop runner2 + ExecStopPost=/usr/bin/docker rm runner2 + ExecStartPre=/usr/bin/docker-credential-gcr configure-docker + ExecStart=/usr/bin/docker run --rm -e RUNNER_REPLACE_EXISTING=true -e RUNNER_NAME=${{ env.RUNNER_TITLE }} -e RUNNER_REPOSITORY_URL=https://github.com/${{ inputs.repository }} -e GITHUB_ACCESS_TOKEN=${{ inputs.token }} -e CONTAINER_NAME=runner2 -v /home/runner/.docker:/home/runner/.docker -v /mnt:/mnt -v /var/log:/host/var/log -v /etc/systemd:/host/etc/systemd -v /var/run/docker.sock:/var/run/docker.sock --name runner2 --pull=always eq19/lexer:id-${{ env.IMAGE_TAG }} + + bootcmd: + - fsck.ext4 -tvy /dev/sdb1 + - mkdir -p /mnt/disks/deeplearning + - mount -o nosuid,nodev,commit=30,defaults -t ext4 /dev/sdb1 /mnt/disks/deeplearning + + runcmd: + - systemctl stop docker + - fallocate -l 2G /mnt/disks/deeplearning/swapfile || dd if=/dev/zero of=/mnt/disks/deeplearning/swapfile bs=1M count=2048 + - chmod 600 /mnt/disks/deeplearning/swapfile + - mkswap /mnt/disks/deeplearning/swapfile + - swapon /mnt/disks/deeplearning/swapfile + - echo '/mnt/disks/deeplearning/swapfile none swap sw 0 0' >> /etc/fstab + - mkdir -p /mnt/disks/deeplearning/var/lib/docker/cos + - mv /var/lib/docker/* /mnt/disks/deeplearning/var/lib/docker/cos/ || true + - find /var/lib/docker -mindepth 1 -delete + - rmdir /var/lib/docker || true + - chattr +i /var/lib/docker + - mount --bind /mnt/disks/deeplearning/var/lib/docker/cos /var/lib/docker + - systemctl daemon-reload + - systemctl start docker + - systemctl start runner2.service + EOL + + # Ref: https://stackoverflow.com/a/47018417/4058484 + - name: πŸͺ‚ Setup Runner by Gcloud + if: env.RERUN_RUNNER == 'true' + id: instances + shell: bash + run: > + gcloud compute instances create grid-${{ env.IMAGE_TAG }} + --service-account=project-owner@feedmapping.iam.gserviceaccount.com + --scopes=https://www.googleapis.com/auth/cloud-platform --deletion-protection + --zone=us-central1-a --machine-type=e2-micro --enable-display-device --tags=https-server + --boot-disk-device-name=cos --image-project cos-cloud --image-family cos-stable --metadata-from-file=user-data=cloud-config + --create-disk=boot=no,auto-delete=yes,name=tensorflow,device-name=deeplearning,mode=rw,size=50,type=pd-standard,image=projects/ml-images/global/images/c0-deeplearning-common-cpu-v20250325-debian-11-py310-conda diff --git a/.github/actions/2-multiplication/3-lexer/action.yml b/.github/actions/2-multiplication/3-lexer/action.yml new file mode 100644 index 000000000..349ff9bb8 --- /dev/null +++ b/.github/actions/2-multiplication/3-lexer/action.yml @@ -0,0 +1,166 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'green' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + default: ${{ github.action_repository }} + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + initiate_pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + config: + description: The config of secrets variables + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + +outputs: + describe: + description: Collect describe outputs + value: ${{ steps.describe.outputs.ip }} + compute: + description: Collect compute outputs + value: ${{ steps.describe.outputs.function }} + +runs: + using: composite + steps: + - name: configure + if: env.RERUN_RUNNER == 'true' + shell: bash + env: + CXX: g++-12 + CC: gcc-12 + FC: gfortran-12 + run: | + mkdir ${{ inputs.action_path }}/build + cd ${{ inputs.action_path }}/build + echo "GSL prefix: $(brew --prefix gsl)" + echo "Content of GSL prefix:" + ls $(brew --prefix gsl) + export PATH=$PATH:/usr/local/bin + export CPATH=$CPATH:/usr/local/include:$(brew --prefix gsl)/include + export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include:$(brew --prefix gsl)/include + export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib:$(brew --prefix gsl)/lib + export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH:/usr/local/lib:$(brew --prefix gsl)/lib + cmake .. -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 -DCMAKE_PREFIX_PATH=$(brew --prefix qt5)/lib/cmake + make && sudo make install && ctest --output-on-failure + + #Ref: https://gist.github.com/xtrmstep/92aab2d465e348ce1c07ed903ca0dfb8 + - id: describe + if: runner.os == 'Windows' + shell: bash + #env: + #CONFIG_JSON: ${{ inputs.config }} + run: | + #echo -n "$CONFIG_JSON" > config.json + cd ${{ inputs.action_path }} && doxygen > /dev/null 2>&1 + rm -rf ${{ github.workspace }}/xml && mv -f xml ${{ github.workspace }}/ + + COMMIT="${{ env.LATEST_COMMIT }}" + cd ${{ github.workspace }} && rm -rf cloud-config + + # Remove double quotes using parameter extension + git add . && git commit --allow-empty -m "${COMMIT//\"/}" && git push + + #ssh-keygen -t rsa -b 3072 -N '' -f $HOME/.ssh/google_compute_engine -C root + #sed -i.backup "1s|^|runner: |" $HOME/.ssh/google_compute_engine.pub && gh secret set GCP_ID_RSA < $HOME/.ssh/google_compute_engine + + # Ref: https://console.cloud.google.com/security/secret-manager?hl=en&project=feedmapping + #gcloud secrets describe freqtrade-config --project feedmapping || \ + #gcloud secrets create freqtrade-config --project feedmapping --data-file=config.json + #gcloud secrets versions add freqtrade-config --project feedmapping --data-file=config.json + + gcloud compute instances add-metadata grid-${{ env.IMAGE_TAG }} --zone=us-central1-a \ + --metadata=startup-script=/home/runner/work/_actions/eq19/eq19/v2/.github/entrypoint/startup.sh + + #gcloud compute instances describe grid-${{ env.IMAGE_TAG }} --zone=us-central1-a --format='value(metadata.items)' + #gcloud compute scp ${{ github.workspace }}/.github/entrypoint/artifact/python/manual_v2.ipynb grid-${{ env.IMAGE_TAG }}:/home/runner/.docker --zone=us-central1-a + + echo $(gcloud compute instances describe grid-${{ env.IMAGE_TAG }} --zone=us-central1-a --format json) > instance + echo 'ip='$(gcloud compute instances describe grid-${{ env.IMAGE_TAG }} --zone=us-central1-a --format='value(networkInterfaces.accessConfigs[0].natIP)') >> ${GITHUB_OUTPUT} + echo 'function='$(curl -s -X POST https://us-central1-feedmapping.cloudfunctions.net/function -H "Authorization: Bearer $(gcloud auth print-identity-token)" -H "Content-Type: application/json" --data @instance | base64) >> ${GITHUB_OUTPUT} + + #Ref: https://blog.benoitblanchon.fr/github-action-run-ssh-commands/ + - name: Configure SSH + if: runner.os == 'Windows' + id: compute + shell: bash + env: + IP: ${{ steps.describe.outputs.ip }} + run: | + #localedef -i en_US -f UTF-8 en_US.UTF-8 + ssh-keyscan -t rsa $IP >> $HOME/.ssh/known_hosts + chmod 600 $HOME/.ssh/id_rsa + cat << EOL >> $HOME/.ssh/config + Host staging + HostName $IP + User runner + IdentityFile $HOME/.ssh/id_rsa + StrictHostKeyChecking no + EOL + #Ref: https://github.com/cloudkite-io/google-container-optimized-os-tools + ssh staging 'sudo whoami && \ + sudo echo ${{ steps.setup_runner.outputs.function }} > /home/runner/.ssh/function.json && \ + sudo chown root:root /home/runner/.ssh/*.json && sudo mv -f /home/runner/.ssh/*.json /home/runner/.docker/' + if [ $? -eq 0 ]; then + ssh staging 'sudo ls -alR /home/runner' + else + exit 1 + fi diff --git a/.github/actions/3-exponentiation/4-parser/action.yml b/.github/actions/3-exponentiation/4-parser/action.yml new file mode 100644 index 000000000..f8a006810 --- /dev/null +++ b/.github/actions/3-exponentiation/4-parser/action.yml @@ -0,0 +1,97 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + failure_status: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + - name: πŸ’Ž Reinvented + shell: bash + env: + BASE: "https://github.com/eq19/eq19.github.io.wiki.git" + WIKI: "https://github.com/${{ env.TARGET_REPOSITORY }}.wiki.git" + run: | + if [ -d /mnt/disks/deeplearning/usr/local/sbin ]; then + export PAULI_SUM=$(echo -n "${{ inputs.pauli_sum }}" | base64 --decode); + export PATH=/home/runner/_work/_actions/eq19/eq19/v2/.github/entrypoint:$PATH && init.sh + else + exit 1 + fi + + - name: View context attributes + uses: actions/github-script@v7 + with: + script: console.log(context) + + - name: πŸ—οΈ Collect outputs + uses: mathiasvr/command-output@v2.0.0 + id: command + with: + run: | + date +'%Y-%m-%d' diff --git a/.github/actions/3-exponentiation/5-syntax/action.yml b/.github/actions/3-exponentiation/5-syntax/action.yml new file mode 100644 index 000000000..3014cac3e --- /dev/null +++ b/.github/actions/3-exponentiation/5-syntax/action.yml @@ -0,0 +1,123 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + api_key: + description: 'The api key' + required: true + api_secret: + description: 'The api secret' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + #Fill in metadata with ${{ steps.artifact.outputs.orgs_json }} + - name: Run identity + if: runner.os == 'Redis' + shell: bash + run: | + TOKEN=$(/mnt/disks/deeplearning/usr/bin/gcloud auth print-identity-token) + curl -s -X POST https://us-central1-feedmapping.cloudfunctions.net/function \ + -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" \ + --data @${{ github.workspace }}/docs/data.json | jq '.' + + # Bring GitHub Env Variables in to the config file on another container usong docker from the attached deeplearning image + /mnt/disks/deeplearning/usr/bin/docker exec mydb sed -i "s|your_exchange_key|${{ inputs.api_key }}|g" /home/runner/user_data/config.json + /mnt/disks/deeplearning/usr/bin/docker exec mydb sed -i "s|your_exchange_secret|${{ inputs.api_secret }}|g" /home/runner/user_data/config.json + + - name: πŸ’Ž Connect to Redis + # Runs a script that creates a Redis client, populates + # the client with data, and retrieves data + if: runner.os == 'Redis' + env: + # The hostname used to communicate with the Redis client service container + # Ref: https://gitlab.com/NamingThingsIsHard/crypto/freqtrade/clients + # Ref: https://stackoverflow.com/a/48547074/4058484 + REDIS_PORT: 6379 + REDIS_HOST: 172.17.0.1 + shell: bash + run: | + npm run test + echo '${{ inputs.pauli_sum }}' + + - name: πŸ’Ž Connect to postgres + if: env.RERUN_RUNNER == 'true' + env: + # use the internal host here because we have specified a container for the job. + # If we were running the job on the VM this would be localhost + POSTGRES_PORT: 5432 + POSTGRES_HOST: 172.17.0.1 + shell: bash + run: | + node /home/runner/scripts/post.js + echo '${{ inputs.pauli_sum }}' diff --git a/.github/actions/3-exponentiation/6-grammar/action.yml b/.github/actions/3-exponentiation/6-grammar/action.yml new file mode 100644 index 000000000..4edff2873 --- /dev/null +++ b/.github/actions/3-exponentiation/6-grammar/action.yml @@ -0,0 +1,124 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + - name: ⏩ Next wiki's jobs on applying + shell: bash + env: + BASE: "D:/a/_actions/eq19/eq19/v2/.github" + run: | + if [[ '${{ inputs.failure_status }}' == 'false' ]]; then + + TARGET_WIKI="https://${{ github.actor }}:${{ inputs.token }}@github.com/$TARGET_REPOSITORY.wiki.git" + rm -rf $RUNNER_TEMP/wiki && git clone $TARGET_WIKI $RUNNER_TEMP/wiki + cat $RUNNER_TEMP/wiki/_Sidebar.md + + fi + + - name: βͺ Rewind all jobs on failure + shell: bash + run: | + if [[ '${{ inputs.failure_status }}' == 'true' ]]; then + + git config --global user.name "$GITHUB_ACTOR" + git config --global --add safe.directory "$GITHUB_WORKSPACE" + git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com" + + REMOTE_REPO="https://$GITHUB_ACTOR:$GH_TOKEN@github.com/$GITHUB_REPOSITORY.git" + git clone --single-branch --branch gh-pages $REMOTE_REPO gh-pages && cd gh-pages + git add . && git commit --allow-empty -m "rerun due to job failure" && git push + + else + + # Assign the environment variable correctly + #COMMIT="${{ env.LATEST_COMMIT }}" + + # Remove double quotes + MESSAGE=$(echo "$LATEST_COMMIT" | tr -d '"') + + # Debug output to verify + echo "Original: $LATEST_COMMIT" + echo "Processed: $MESSAGE" + + # Commit and push changes + git add . + git commit --allow-empty -m "$MESSAGE" + git push + + fi diff --git a/.github/actions/4-identition/4-parser/action.yml b/.github/actions/4-identition/4-parser/action.yml new file mode 100644 index 000000000..2bcf1b74e --- /dev/null +++ b/.github/actions/4-identition/4-parser/action.yml @@ -0,0 +1,90 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + runner_temp: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + - name: Run identity + shell: bash + run: | + drive=/$(echo "$GITHUB_WORKSPACE" | cut -c1 | tr '[:upper:]' '[:lower:]') + $drive/a/_actions/eq19/eq19/v2/.github/entrypoint/init.sh + + - name: View context attributes + uses: actions/github-script@v7 + with: + script: console.log(context) diff --git a/.github/actions/4-identition/5-syntax/action.yml b/.github/actions/4-identition/5-syntax/action.yml new file mode 100644 index 000000000..82c7545c9 --- /dev/null +++ b/.github/actions/4-identition/5-syntax/action.yml @@ -0,0 +1,114 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + # See: https://github.com/svopper/munaiah-analyser/blob/18cb09be3a343a051239d5b6378ed7524dad3147/out/groonga/grntest/.github_workflows_windows.yml#L50 + - name: πŸ’Ž Setup Ruby + uses: ruby/setup-ruby@v1 + if: runner.os == 'Windows' + with: + cache-version: 1 + rubygems: default + bundler-cache: true + ruby-version: '3.3.4' + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: πŸ’Ž Set ID Token + id: 'auth' + uses: 'google-github-actions/auth@v2' + with: + token_format: 'id_token' + create_credentials_file: false + credentials_json: ${{ inputs.credentials }} + id_token_audience: 'https://us-central1-feedmapping.cloudfunctions.net/function' + + #Fill in metadata with ${{ steps.artifact.outputs.orgs_json }} + - name: Run identity + if: runner.os != 'Windows' + shell: bash + env: + GCP_TOKEN: ${{ steps.auth.outputs.id_token }} + run: | + curl -s -X POST https://us-central1-feedmapping.cloudfunctions.net/function \ + -H "Authorization: Bearer ${GCP_TOKEN}" -H "Content-Type: application/json" \ + --data @${{ inputs.workspace }}/_data/orgs.json | jq '.' diff --git a/.github/actions/4-identition/6-grammar/action.yml b/.github/actions/4-identition/6-grammar/action.yml new file mode 100644 index 000000000..967293254 --- /dev/null +++ b/.github/actions/4-identition/6-grammar/action.yml @@ -0,0 +1,194 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + runner_temp: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + - name: βͺ Rewind all jobs on failure + shell: bash + env: + GH_TOKEN: ${{ inputs.token }} + BASE: "D:/a/_actions/eq19/eq19/v2/.github" + run: | + if [[ '${{ inputs.failure_status }}' == 'true' ]]; then + + curl -s -X POST \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/$GITHUB_REPOSITORY/dispatches" \ + -d '{"event_type": "retry_workflow", "client_payload": {"original_run_id": "$GITHUB_RUN_ID"}}' + echo -e "Rerun workflow since there is failure happen on the previous jobs" + exit 1 + + else + + echo -e "\n$hr\nSource Pages\n$hr" + rm -rf _user && ls -al . + + FILE=$(find . -name "plugin_manager.rb") + sed -i 's|unless site.safe|if site.safe|g' $FILE + sed -i 's|plugins_path.each|Array(["./_plugins"]).each|g' $FILE + + echo -e "\n$hr\nBuild Pages\n$hr" + #Jekyll Quick Reference https://gist.github.com/DrOctogon/bfb6e392aa5654c63d12 + JEKYLL_GITHUB_TOKEN=${{ inputs.token }} DISABLE_WHITELIST=true bundle exec jekyll build --profile --trace -t -d ./docs + + if [[ "${TARGET_REPOSITORY}" == "eq19/eq19.github.io" ]]; then echo "www.eq19.com" > ./docs/CNAME; fi + rm -rf ./docs/.nojekyll && touch ./docs/.nojekyll + + echo -e "\n$hr\nFinal Pages\n$hr" + ls -al ./docs + + # Assign the environment variable correctly + #COMMIT="${{ env.LATEST_COMMIT }}" + + # Remove double quotes + MESSAGE=$(echo "$LATEST_COMMIT" | tr -d '"') + + # Debug output to verify + echo "Original: $LATEST_COMMIT" + echo "Processed: $MESSAGE" + + echo -e "\n$hr\nFinal Status\n$hr" + # Fetch all branches + git fetch --all + + # Check if any branches (exclude tags) with 'v' suffix exist + if ! git branch -a | grep -E 'remotes/origin/v[0-9]*$' | grep -v 'HEAD'; then + # Get default branch name (usually main or master) + set -e # Exit on error + + DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@') + + git checkout $DEFAULT_BRANCH + git pull origin $DEFAULT_BRANCH + + # Delete local v0 branch if it exists + git branch -D v0 || true + + # Create new v0 branch + git checkout -b v0 + + # Update .github directory + rm -rf .github + cp -r /d/a/_actions/eq19/eq19/v2/.github . + + git add . + git commit --allow-empty -m "Update GitHub workflows and configurations" + git push origin v0 + + #Change the setting of default branch + curl -s -X PATCH \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/$TARGET_REPOSITORY \ + -d '{"default_branch":"v0"}' > /dev/null + echo "Created v0 branch and set it as default" + fi + + # Commit and push changes + git add . && git commit --allow-empty -m "$MESSAGE" && git push + + if [[ "$TARGET_REPOSITORY" != *"eq19/"* ]]; then + # Unpublish existing GitHub Pages + curl -s -X DELETE \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/$TARGET_REPOSITORY/pages > /dev/null + + # Disable GitHub Pages + curl -s -X PATCH \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/$TARGET_REPOSITORY/pages \ + -d '{"build_type":"legacy","source":null}' > /dev/null + + # Trigger a dispaches action + curl -s -X POST \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/$TARGET_REPOSITORY/dispatches" \ + -d '{"event_type": "trigger_action", "client_payload": {"env": "prod", "version": "1.0"}}' + echo -e "\nDispatched to https://github.com/${{ env.TARGET_REPOSITORY }}/actions" + fi + fi diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml deleted file mode 100644 index c5f23930e..000000000 --- a/.github/actions/install-dependencies/action.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: 'Install dependencies' -description: 'Set up node and install dependencies' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v3 - with: - node-version: '20.x' - cache: npm - - - run: npm ci - shell: bash diff --git a/.github/actions/reserves/ubuntu/README.md b/.github/actions/reserves/ubuntu/README.md new file mode 100644 index 000000000..cf195015b --- /dev/null +++ b/.github/actions/reserves/ubuntu/README.md @@ -0,0 +1,4 @@ +# Github actions for WSL +This page has been moved to our documentation + +https://canonical-ubuntu-wsl.readthedocs-hosted.com/en/latest/ diff --git a/.github/actions/reserves/ubuntu/download-rootfs/action.yaml b/.github/actions/reserves/ubuntu/download-rootfs/action.yaml new file mode 100644 index 000000000..ac58e3643 --- /dev/null +++ b/.github/actions/reserves/ubuntu/download-rootfs/action.yaml @@ -0,0 +1,103 @@ +name: Download Ubuntu WSL Rootfs +description: Download the latest Rootfs for a particular release of Ubuntu WSL + +inputs: + distros: + description: Space-separated list of distros to download + required: true + default: "Ubuntu" + path: + description: Directory to store the rootfs in (${path}\${distro}.tar.gz) + required: true + default: "Ubuntu" + +runs: + using: "composite" + steps: + - name: Check out repo + uses: actions/checkout@v3 + - name: Install python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + - name: Install dependencies + shell: powershell + run: python -m pip install launchpadlib + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: "1.21.4" + - name: Generate WSL release info + shell: powershell + # Repository root + working-directory: ${{ github.action_path }}\..\..\..\ + run: | + # Prepare environment + + # Install PowerShell + winget install --id Microsoft.Powershell --silent --accept-package-agreements --accept-source-agreements --source winget + + Write-Output "::group::Build wsl release info generator" + go build .\wsl-builder\release-info\ + if ( "${LastExitCode}" -ne "0" ) { + Write-Output "::endgroup::" + Exit(1) + } + Write-Output "::endgroup::" + + Write-Output "::group::Fetch release info" + python .\wsl-builder\lp-distro-info -o "${{ inputs.path }}\ubuntu-releases.csv" + Get-Content "${{ inputs.path }}\ubuntu-releases.csv" + Write-Output "::endgroup::" + + Write-Output "::group::Filter release info" + if(!(Test-Path "${{ inputs.path }}")) { + New-Item -Type Directory -Path "${{ inputs.path }}" + } + .\release-info.exe "${{ inputs.path }}\ubuntu-releases.csv" ${{ inputs.distros }} --rootfs amd64 --short 1> "${{ inputs.path }}\wsl-releases.csv" + Write-Output "::endgroup::" + + # Check for success + if (Test-Path "${{ inputs.path }}\wsl-releases.csv") { + Exit(0) + } + Write-Error "Did not write WSL releases file" + Exit(1) + - name: Download Ubuntu rootfs + shell: powershell + run: | + # Download rootfs + cd "${{ inputs.path }}" + + $releaseList = $(Get-Content "wsl-releases.csv") -split "\n" + $allSuccess = $true + + foreach ($release in $releaseList) { + $data = $release -split "\s+" + + # $name is the one in inputs.distros + $name = $data[0] + $file = ".\${name}.tar.gz" + $url = $data[1] + + & ${{ github.action_path }}\download-rootfs.ps1 -Path "${file}" -URL "$url" + if ( ! $? ) { + $allSuccess = $false + Write-Output "Error: Could not download ${name}" + } + + Write-Output "::endgroup::" + } + + if ( "${allSuccess}" -eq "$false" ) { + Exit(1) + } + Exit(0) + - name: Cleanup + if: always() + shell: powershell + run: | + # Cleanup + Remove-Item "${{ inputs.path }}\ubuntu-releases.csv" 2>&1 | Out-Null + Remove-Item "${{ inputs.path }}\wsl-releases.csv" 2>&1 | Out-Null + Exit(0) diff --git a/.github/actions/reserves/ubuntu/download-rootfs/download-rootfs.ps1 b/.github/actions/reserves/ubuntu/download-rootfs/download-rootfs.ps1 new file mode 100644 index 000000000..d37e6e2e8 --- /dev/null +++ b/.github/actions/reserves/ubuntu/download-rootfs/download-rootfs.ps1 @@ -0,0 +1,110 @@ +param ( + [Parameter(Mandatory = $true, HelpMessage = "The path where to download the tarball")] + [string]$Path, + [Parameter(Mandatory = $true, HelpMessage = "The URL of the tarball")] + [Uri]$URL +) + +# Global variables +$RootFS = "${Path}" +$Directory = Split-Path -Path "${RootFS}" -Parent +$Checksums = "${Directory}\SHA256SUMS" + +# Helper functions + +function Get-URIParent { + param ( + [Parameter(Mandatory=$true)] [Uri]$URI + ) + + $segments = $URI.Segments + $end = $segments.Length - 2 + $trailing = [string]::Join("", $segments[0..$end]) + + return "$($URI.Scheme)://$($URI.Authority)${trailing}" +} + +function Remove-File { + param ( + [Parameter(Mandatory=$true)] [string]$Path + ) + if (!(Test-Path -Path $Path)) { + return + } + Remove-Item -Path "${Path}" -Force 2>&1 | Out-Null +} + +# Test-Checksums returns true if the current rootfs checksum matches the remote one. +# Returns false otherwise, or if any error arises. +function Test-Checksums { + # Get Hash of the current RootFS + if (!(Test-Path -Path ${RootFS})) { + return $false + } + + $oldSHA256 = (Get-FileHash "${Rootfs}" -Algorithm SHA256).Hash + if ($oldSHA256 -eq "") { + Write-Warning "Could not compute hash of ${Rootfs}" + return $false + } + + # Download remote checksum + $checksumURL = "$(Get-URIParent -URI "${URL}")SHA256SUMS" + pwsh.exe -Command pwsh.exe -Command Invoke-WebRequest -Uri "${checksumURL}" -OutFile "${Checksums}" -Resume -MaximumRetryCount 5 -RetryIntervalSec 2 + if (! $?) { + Write-Warning "Could not download checksums" + return $false + } + + if (!(Test-Path "${Checksums}")) { + Write-Warning "Could not download checksums" + return $false + } + + # Parse checksum file + $image = $URL.Segments[$Url.Segments.Length - 1] + $pattern = "(\w+) ${image}" + + $newSHA256 = (Select-String -Pattern "${pattern}" -Path "${Checksums}").Matches[0].Groups[1] + if ($newSHA256 -eq "") { + Write-Warning "Could not find $image in checksums file" + return $false + } + + # Compare checksums + if ($oldSHA256 -ne $newSHA256) { + return $false + } + return $true +} + +function main { + New-Item -Type Directory -Force "${Directory}" 2>&1 | Out-Null + + # Validate checksum + if ( Test-Checksums ) { + Write-Warning "Cache hit: skipping download" + return 0 + } + + # Download Rootfs into temp file + pwsh.exe -Command Invoke-WebRequest -Uri "${URL}" -OutFile "${RootFS}.tmp" -Resume -MaximumRetryCount 5 -RetryIntervalSec 2 + if ( ! $? ) { + Write-Error "Error: Failed download" + return 1 + } + + # Move downloaded tmp file into position + Move-Item -Force "${RootFS}.tmp" "${RootFS}" + return 0 +} + +# Main function +$exitCode = main + +# Clean artefacts +Remove-File -Path "${RootFS}.tmp" +Remove-File -Path "${Checksums}" + +Exit($exitCode) + diff --git a/.github/actions/reserves/ubuntu/wsl-bash/action.yaml b/.github/actions/reserves/ubuntu/wsl-bash/action.yaml new file mode 100644 index 000000000..efc56f725 --- /dev/null +++ b/.github/actions/reserves/ubuntu/wsl-bash/action.yaml @@ -0,0 +1,60 @@ +name: Azure WSL script runner +description: 'Runs scripts on WSL in Azure machines.' + +inputs: + exec: + description: Script to run on WSL + required: true + working-dir: + description: The WSL directory to run the script in. Must be absolute, but ~ is allowed. + required: false + default: "~" + distro: + description: Which (installed) distro to run the script on. Use the name as shown in 'wsl -l -v'. + required: false + default: Ubuntu + +runs: + using: 'composite' + steps: + - name: Copy script into WSL + shell: powershell + env: + exec: ${{ inputs.exec }} + scriptDir: C:\Temp\Ubuntu-WSL-actions\${{github.run_number}}_${{github.run_attempt}} + run: | + Write-Output '::group::Storage of script into WSL' + + New-Item -Force -Path "${{ env.scriptDir }}" -ItemType Directory | Out-Null + + # The following function is used because: + # - It does not write the BOM (0xff 0xfe at file start) + # - It does not write \r at line ends + # - Overwrites a pre-existing file if there was one + [IO.File]::WriteAllText( "${{ env.scriptDir }}\script.sh" , "${env:exec}") + $exit=$? + + Write-Output '::endgroup::' + if ( "${exit}" -eq "$False" ) { Exit(1) } + - name: Run linux script + shell: powershell + env: + scriptDir: C:\Temp\Ubuntu-WSL-actions\${{github.run_number}}_${{github.run_attempt}} + WSL_UTF8: "1" + run: | + # Run script + + # We use this --cd trick otherwise bash gets confused with the \ path separators + $linuxPath = wsl.exe -d "${{ inputs.distro }}" --cd "${{ env.scriptDir }}" -- wslpath -ua . + + wsl.exe -d ${{ inputs.distro }} --cd '${{ inputs.working-dir }}' -- bash "$linuxPath/script.sh" + if ( ! $? ) { Exit(1) } + - name: Cleanup + if: always() + shell: powershell + env: + scriptDir: C:\Temp\Ubuntu-WSL-actions\${{github.run_number}}_${{github.run_attempt}} + run: | + if(Test-Path -Path "${{ env.scriptDir }}") { + Remove-Item -Recurse -Force -Path "${{ env.scriptDir }}" + } \ No newline at end of file diff --git a/.github/actions/reserves/ubuntu/wsl-checkout/action.yaml b/.github/actions/reserves/ubuntu/wsl-checkout/action.yaml new file mode 100644 index 000000000..241fcf267 --- /dev/null +++ b/.github/actions/reserves/ubuntu/wsl-checkout/action.yaml @@ -0,0 +1,38 @@ +name: Azure WSL repo clone +description: 'Clones your repo into WSL.' + +inputs: + distro: + description: Which (installed) distro to use. Use the name as shown in 'wsl -l -v'. + required: true + working-dir: + description: Where the repo should be cloned + required: false + default: "." + submodules: + description: Whether to fetch submodules or not + required: false + default: "false" + +runs: + using: 'composite' + steps: + - name: Clone repo + uses: ubuntu/WSL/.github/actions/wsl-bash@main + with: + distro: ${{ inputs.distro }} + exec: | + set -eu + + export GIT_TERMINAL_PROMPT=0 + + mkdir -p ${{ inputs.working-dir }} + git clone --quiet --depth 1 https://github.com/${{ github.repository }}.git ${{ inputs.working-dir }} + + cd ${{ inputs.working-dir }} + git fetch --quiet --depth 1 --no-tags --prune --update-head-ok origin +${{ github.sha }}:${{ github.ref }} + git checkout --quiet ${{ github.sha }} + + if [ "${{ inputs.submodules }}" = true ] ; then + git submodule --quiet update --init --recursive --depth 1 + fi \ No newline at end of file diff --git a/.github/actions/reserves/ubuntu/wsl-install/action.yaml b/.github/actions/reserves/ubuntu/wsl-install/action.yaml new file mode 100644 index 000000000..a41594b33 --- /dev/null +++ b/.github/actions/reserves/ubuntu/wsl-install/action.yaml @@ -0,0 +1,57 @@ +name: Install Ubuntu WSL +description: 'Install WSL from the store' + +inputs: + distro: + description: Distro name as shown in 'wsl -l -v'. Leave blank to install no distro. + required: false + default: "" + +runs: + using: 'composite' + steps: + - name: Install WSL + shell: powershell + continue-on-error: true + run: | + Write-Output "::group::Install Windows Subsystem for Linux" + winget install --name 'Windows Subsystem for Linux' --accept-source-agreements --accept-package-agreements --silent --verbose + Write-Output "::endgroup::" + + - name: Install the new distro + if: ${{ inputs.distro != '' }} + shell: powershell + run: | + # Install the new distro + switch ( "${{ inputs.distro }}" ) + { + "Ubuntu" { $storeId="9PDXGNCFSCZV" ; $launcher="ubuntu.exe" ; $appxname="Ubuntu" } + "Ubuntu-Preview" { $storeId="9P7BDVKVNXZ6" ; $launcher="ubuntupreview.exe" ; $appxname="UbuntuPreview" } + "Ubuntu-22.04" { $storeId="9PN20MSR04DW" ; $launcher="ubuntu2204.exe" ; $appxname="Ubuntu22.04LTS" } + "Ubuntu-20.04" { $storeId="9MTTCL66CPXJ" ; $launcher="ubuntu2004.exe" ; $appxname="Ubuntu20.04LTS" } + "Ubuntu-18.04" { $storeId="9PNKSF5ZN4SW" ; $launcher="ubuntu1804.exe" ; $appxname="Ubuntu18.04LTS" } + default { Write-Output "Error: Unknown distro ${distro}" ; Exit(1) } + } + + # Uninstall pre-existing appx + $pkgFullName = (Get-AppxPackage | Where-Object Name -like "CanonicalGroupLimited.${appxname}").PackageFullName + if ( "$pkgFullName" -ne "" ) { + Remove-AppxPackage "${pkgFullName}" 3>&1 2>&1 | Out-Null + } + + # Unregister leftover distros + $env:WSL_UTF8=1 + wsl.exe --shutdown + wsl.exe --unregister ${{ inputs.distro }} 3>&1 2>&1 | Out-Null + + Write-Output "::group::Install a new distro" + winget install --id "${storeId}" --accept-source-agreements --accept-package-agreements --silent + Write-Output "::endgroup::" + + # Register the new distro + & ${launcher} install --root --ui=none + + # Testing succesful install + & ${launcher} run echo Created a new distro with user: '$(whoami)' + + if ( ! $? ) { Exit(1) } \ No newline at end of file diff --git a/.github/csc.json b/.github/csc.json new file mode 100644 index 000000000..d2888fd15 --- /dev/null +++ b/.github/csc.json @@ -0,0 +1,18 @@ +{ + "problemMatcher": [ + { + "owner": "csc", + "pattern": [ + { + "regexp": "^([^\\s].*)\\((\\d+)(?:,\\d+|,\\d+,\\d+)?\\):\\s+(error|warning)\\s+([a-zA-Z]+(? ${RUNNER_TEMP}/pinned_repos + else + QUERY='{"query":"{\n organization(login: \"'${OWNER}'\") {\n pinnedItems(first: 6, types: REPOSITORY) {\n nodes {\n ... on Repository {\n name\n }\n }\n }\n }\n}"' + curl -s -X POST "${GITHUB_GRAPHQL_URL}" -H "Authorization: bearer ${GH_TOKEN}" --data-raw "${QUERY}" | jq --raw-output '.data.organization.pinnedItems.nodes[].name' | yq eval -P | sed "s/ /, /g" > ${RUNNER_TEMP}/pinned_repos + sed -i "1s|^|maps, feed, lexer, parser, syntax, grammar, |" ${RUNNER_TEMP}/pinned_repos + fi + IFS=', '; array=($(cat ${RUNNER_TEMP}/pinned_repos)) + else + gh api -H "${HEADER}" /user/orgs --jq '.[].login' | sort -uf | yq eval -P | sed "s/ /, /g" > ${RUNNER_TEMP}/user_orgs + IFS=', '; array=($(cat ${RUNNER_TEMP}/user_orgs)) + echo "[" > ${RUNNER_TEMP}/orgs.json + for ((i=0; i < ${#array[@]}; i++)); do + QUERY='{"query":"{\n organization(login: \"'${array[$i]}'\") {\n pinnedItems(first: 6, types: REPOSITORY) {\n nodes {\n ... on Repository {\n name\n }\n }\n }\n }\n}"' + IFS=', '; pr=($(curl -s -X POST "${GITHUB_GRAPHQL_URL}" -H "Authorization: bearer ${GH_TOKEN}" --data-raw "${QUERY}" | jq --raw-output '.data.organization.pinnedItems.nodes[].name' | yq eval -P | sed "s/ /, /g")) + gh api -H "${HEADER}" /orgs/${array[$i]} | jq '. + + {"key1": ["maps","feed","lexer","parser","syntax","grammar"]} + + {"key2": ["'${pr[0]}'","'${pr[1]}'","'${pr[2]}'","'${pr[3]}'","'${pr[4]}'","'${pr[5]}'"]}' >> ${RUNNER_TEMP}/orgs.json + if [[ "$i" -lt "${#array[@]}-1" ]]; then echo "," >> ${RUNNER_TEMP}/orgs.json; fi + done + echo "]" >> ${RUNNER_TEMP}/orgs.json + fi + + # Iterate the Structure + printf -v array_str -- ',,%q' "${array[@]}" + if [[ ! "${array_str},," =~ ",,$1,," ]]; then + SPAN=0; echo ${array[0]} + elif [[ "${array[-1]}" == "$1" ]]; then + SPAN=${#array[@]}; echo $2 | sed "s|${OWNER}.github.io|${ENTRY}.github.io|g" + if [[ -n "$CELL" ]]; then + if [[ "${ENTRY}" == "eq19" ]]; then + echo "maps, feed, lexer, parser, syntax, grammar" > ${RUNNER_TEMP}/pinned_repos + else + QUERY='{"query":"{\n organization(login: \"'${ENTRY}'\") {\n pinnedItems(first: 6, types: REPOSITORY) {\n nodes {\n ... on Repository {\n name\n }\n }\n }\n }\n}"' + curl -s -X POST "${GITHUB_GRAPHQL_URL}" -H "Authorization: bearer ${GH_TOKEN}" --data-raw "${QUERY}" | jq --raw-output '.data.organization.pinnedItems.nodes[].name' | yq eval -P | sed "s/ /, /g" > ${RUNNER_TEMP}/pinned_repos + sed -i "1s|^|maps, feed, lexer, parser, syntax, grammar, |" ${RUNNER_TEMP}/pinned_repos + fi + fi + else + for ((i=0; i < ${#array[@]}; i++)); do + if [[ "${array[$i]}" == "$1" && "$i" -lt "${#array[@]}-1" ]]; then + SPAN=$(( $i + 1 )); echo ${array[$SPAN]} + fi + done + fi + + # Generate id from the Structure + [[ -z "$SPIN" ]] && if [[ "$1" != "$2" ]]; then SPIN=0; else SPIN=13; fi + if [[ -n "$CELL" ]]; then + SPANPLUS=$(($SPAN + 1)) + if (( $CELL == 0 )); then MOD=7; else MOD=13; fi + if (( $SPANPLUS == $MOD )); then + SPANPLUS=0 + CELLPLUS=$(($CELL + 1)) + if (( $CELLPLUS == 14 )); then CELLPLUS=0; fi + else + CELLPLUS=$(($CELL + 0)) + fi + + echo "SPIN=[${CELLPLUS}, ${SPANPLUS}]" >> ${GITHUB_ENV} + echo " spin: [${CELLPLUS}, ${SPANPLUS}]" >> ${RUNNER_TEMP}/_config.yml + echo " pinned: [$(cat ${RUNNER_TEMP}/pinned_repos)]" >> ${RUNNER_TEMP}/_config.yml + echo " organization: [$(cat ${RUNNER_TEMP}/user_orgs)]" >> ${RUNNER_TEMP}/_config.yml + fi + return $(( $SPAN + $SPIN )) + +} + +jekyll_build() { + + [[ $1 == *"github.io"* ]] && OWNER=$2 + if [[ $1 != "eq19.github.io" ]]; then SITEID=$(( $3 + 2 )); else SITEID=1; fi + + if [[ "${OWNER}" == "eq19" ]]; then + sed -i "1s|^|description: An attempt to discover the Final Theory\n\n|" ${RUNNER_TEMP}/_config.yml + else + DESCRIPTION=$(gh api -H "${HEADER}" /orgs/${OWNER} --jq '.description') + sed -i "1s|^|description: ${DESCRIPTION}\n\n|" ${RUNNER_TEMP}/_config.yml + fi + + # Note: If you need to use a workflow run's URL from within a job, you can combine + # these variables: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID + sed -i "1s|^|action: ${REPO}/actions/runs/${RUN}\n|" ${RUNNER_TEMP}/_config.yml + sed -i "1s|^|repository: ${OWNER}/$1\n|" ${RUNNER_TEMP}/_config.yml + [[ $1 != *"github.io"* ]] && sed -i "1s|^|baseurl: /$1\n|" ${RUNNER_TEMP}/_config.yml + + FOLDER="span$(( 19 - $SITEID ))" + gh variable set FOLDER --body "$FOLDER" + echo 'FOLDER='${FOLDER} >> ${RUNNER_TEMP}/.env + + TARGET_REPOSITORY="${OWNER}/$1" + echo 'repo='${TARGET_REPOSITORY} >> ${GITHUB_OUTPUT} + gh variable set TARGET_REPOSITORY --body "$TARGET_REPOSITORY" + echo 'TARGET_REPOSITORY='${TARGET_REPOSITORY} >> ${GITHUB_ENV} + + sed -i "1s|^|title: eQuantum\n|" ${RUNNER_TEMP}/_config.yml + sed -i "1s|^|span: ${FOLDER}\n|" ${RUNNER_TEMP}/_config.yml + sed -i "1s|^|user: ${USER}\n|" ${RUNNER_TEMP}/_config.yml + sed -i "1s|^|id: ${SITEID}\n|" ${RUNNER_TEMP}/_config.yml + + echo 'ID='${SITEID} >> ${GITHUB_ENV} + cat ${RUNNER_TEMP}/_config.yml + + if [[ "${TARGET_REPOSITORY}" != *"eq19/"* ]]; then + + echo -e "\nTest Module Structure:" + echo "1. ${OWNER}/maps β†’ $(next_repo "${OWNER}/maps")" + echo "2. ${OWNER}/grammar β†’ $(next_repo "${OWNER}/grammar")" + NEXT_REPOSITORY=$(next_repo "${OWNER}/$(yq -r '.track.pinned | .[-1]' ${RUNNER_TEMP}/_config.yml)") + echo "3. ${OWNER}/$(yq -r '.track.pinned | .[-1]' ${RUNNER_TEMP}/_config.yml) β†’ ${NEXT_REPOSITORY}" + echo "4. ${NEXT_REPOSITORY} β†’ $(next_repo "${NEXT_REPOSITORY}")" + + NEXT_REPOSITORY=$(next_repo "${TARGET_REPOSITORY}") + gh variable set TARGET_REPOSITORY --repo $TARGET_REPOSITORY --body "$NEXT_REPOSITORY" + + fi + +} + +# Define the next repository function using jq +next_repo() { + + local target_repo="$1" + jq -r --arg target "$target_repo" ' + ($target | split("/")) as $parts | + $parts[0] as $org | + $parts[1] as $repo | + + (map(.login) | index($org)) as $org_index | + if $org_index == null then + "Organization not found: \($org)" | halt_error(1) + else + .[$org_index] as $current_org | + (.[($org_index + 1) % length].login) as $next_org | + + if $repo == "\($org).github.io" then + "\($org)/\($current_org.key1[0])" + else + ($current_org.key1 | index($repo)) as $key1_index | + if $key1_index != null then + if ($key1_index + 1) < ($current_org.key1 | length) then + "\($org)/\($current_org.key1[$key1_index + 1])" + else + "\($org)/\($current_org.key2[0])" + end + else + ($current_org.key2 | index($repo)) as $key2_index | + if $key2_index != null then + if ($key2_index + 1) < ($current_org.key2 | length) then + "\($org)/\($current_org.key2[$key2_index + 1])" + else + "\($next_org)/\($next_org).github.io" + end + else + "Repository not found: \($repo)" | halt_error(1) + end + end + end + end + ' ${RUNNER_TEMP}/orgs.json + +} + +# Get structure on gist files +PATTERN='sort_by(.created_at)|.[] | select(.public == true).files.[] | select(.filename != "README.md").raw_url' +HEADER="Accept: application/vnd.github+json" #&& echo ${TOKEN} | gh auth login --with-token +gh api -H "${HEADER}" "/users/eq19/gists" --jq "${PATTERN}" > ${RUNNER_TEMP}/gist_files + +# Capture the string and return status +if [[ "${OWNER}" != "${USER}" ]]; then ENTRY=$(set_target ${OWNER} ${USER}); else ENTRY=$(set_target ${OWNER}); fi +CELL=$? && TARGET_REPOSITORY=$(set_target $(basename ${REPO}) ${OWNER}.github.io) +jekyll_build ${TARGET_REPOSITORY} ${ENTRY} $? diff --git a/.github/entrypoint/artifact/BosonJet.c b/.github/entrypoint/artifact/BosonJet.c new file mode 100644 index 000000000..be74a78f4 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJet.c @@ -0,0 +1,326 @@ +#include "BosonJet.h" +#include +#define PI 3.141592653589793 + +BosonJet::BosonJet(){ + invGeV2topb=3.893793656233564944e8; + _nf=5;_calls=50000; +} + +BosonJet::BosonJet(double Ecm, Particle *boson){ + _boson=boson;_Ecm=Ecm;invGeV2topb=3.893793656233564944e8; + _nf=5;_calls=50000; + + //calculate some universal prefactors: + _s=_Ecm*_Ecm; + _preXsection=2.0*PI*_ew.alpha()/(_s*_s); + _mB2=_boson->m()*_boson->m(); + +} + +void BosonJet::setpT(double pT){ + _pT=pT; +} + +double BosonJet::getpT(){ + return _pT; +} + +void BosonJet::getKinematics(){ + cout << "x1=" << _x1 << ", x2=" << _x2 << ", s=" << _shat << ", t=" << _that << ", u=" << _uhat << endl; +} + +double BosonJet::M2toXsection(double pT, double x1, double x2, double Q){ + /* + This function gives the prefactor for + dsigma/dpTdyBdyJ=2*pi*pT*aEM*aS*M2/(x1*x2*s^2)*pdf1(x2)*pdf2(x2) + without pdfs and M2 and aS. + */ + return _preXsection*pT*_qcd.alphas(Q)/(x1*x2); +} + +double BosonJet::M2toXsection(double Q){ + /* + This function gives the prefactor for + dsigma/dpTdyBdyJ=2*pi*pT*aEM*aS*M2/(x1*x2*s^2)*pdf1(x2)*pdf2(x2) + without pdfs and M2 and aS. + */ + return _preXsection*_pT*_qcd.alphas(Q)/(_x1*_x2); +} + +void BosonJet::setEcm(double Ecm){ + _Ecm=Ecm;_s=_Ecm*_Ecm;_preXsection=2.0*PI*_ew.alpha()/(_Ecm*_Ecm*_Ecm*_Ecm); +} + +void BosonJet::setBoson(Particle *boson){ + _boson=boson; _mB2=_boson->m()*_boson->m(); +} + +void BosonJet::setNf(unsigned int nf){ + _nf=nf; +} + +void BosonJet::getxBs(double *xB, double pT, double yB, double yJ){ + /* + p1=x_1 (_Ecm,0,0,_Ecm)/2, p2=x_2 (_Ecm,0,0,-_Ecm)/2, + pB=(sqrt(pT^2+m^2)cosh(yB),pT cos(phiB),pT sin(phiB),sqrt(pT^2+m^2)sinh(yB)), + pJ=(sqrt(pT^2+m^2) cosh(yJ),pT cos(phiJ),pT sin(phiJ),sqrt(pT^2+m^2)sinh(yJ)). + */ + double mT=sqrt(1.0+_boson->m()*_boson->m()/(pT*pT)); + double xT=pT/_Ecm; + xB[0]=xT*(mT*exp(yB)+exp(yJ));xB[1]=xT*(mT*exp(-yB)+exp(-yJ)); +} + +void BosonJet::Mandelstam(double x1, double x2, double pT, double yB, double &s, double &t, double &u){ + /* p1=xB[0] (_Ecm, 0,0,_Ecm)/2, p2=xB[1](_Ecm,0,0,-_Ecm)/2, + pB=(sqrt(pT^2+mB^2)cosh(yB), pT cos(phiB), pT sin(phiB),sqrt(pT^2+mB^2)sinh(yB)), + */ + double mT=sqrt(_mB2+pT*pT);double EcmmT=_Ecm*mT; + s=x1*x2*_s; t=_mB2-x1*EcmmT*exp(-yB); u=_mB2-x2*EcmmT*exp(yB); +} + +void BosonJet::setKinematics(double pT, double yB, double yJ){ + _pT=pT;_yB=yB;_yJ=yJ; + double xB[2];getxBs(xB, pT, yB, yJ);_x1=xB[0];_x2=xB[1]; + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u);_shat=s;_that=t;_uhat=u; + //cout << _shat << ", " << _that << ", " << _uhat << ", " << _x1 << ", " << _x2 << endl; + //cout << _shat*_pT*_pT/(_that*_uhat) << endl; +} + +bool BosonJet::kinematicsQ(){ + return _x1>0.0&&_x1<1.0&&_x2>0.0&&_x2<1.0; +} + +/* + M^2/(g_s^2 e_q^2) aveaged and summed over the spin and color indices repectively in the intial and final states. + See Table 7.2 in page 265 in QCD and Collider Physics. +*/ + +double BosonJet::Mgq2(double s, double t, double u){ + /* + M^2/(e^2g^2) for gq->BJ. For qg->BJ, swap t and u. + */ + return -(s*s+u*u+2.0*t*(s+t+u))/(_qcd._Nc*s*u); +} + +double BosonJet::Mgq2(){ + /* + M^2/(e^2g^2) for gq->BJ. + */ + return -(_shat*_shat+_uhat*_uhat+2.0*_that*(_shat+_that+_uhat))/(_qcd._Nc*_shat*_uhat); +} + +double BosonJet::Mqg2(){ + /* + M^2/(e^2g^2) for qg->BJ. + */ + return -(_shat*_shat+_that*_that+2.0*_uhat*(_shat+_uhat+_that))/(_qcd._Nc*_shat*_that); +} + +double BosonJet::Mqqb2(double s, double t, double u){ + /*M^2/(e^2g^2) for qqb->BJ. The same for qbq->BJ. + */ + return 2.0*_qcd._CF*(t*t+u*u+2.0*s*(s+t+u))/(_qcd._Nc*t*u); +} + +double BosonJet::Mqqb2(){ + /*M^2/(e^2g^2) for qqb->BJ. The same for qbq->BJ. + */ + return 2.0*_qcd._CF*(_that*_that+_uhat*_uhat+2.0*_shat*(_shat+_that+_uhat))/(_qcd._Nc*_that*_uhat); +} + +double BosonJet::e2(double eq){ + double e2eff; + switch(_boson->id()){ + case 22: + e2eff=eq*eq;//photon + break; + case 23: + e2eff=1.0-2.0*fabs(eq)*_ew.sw2();e2eff=(e2eff*e2eff+4.0*eq*eq*_ew.sw2()*_ew.sw2())/(8.0*_ew.sw2()*_ew.cw2());//Z^0 + } + return e2eff; +} + +//differential cross sectoin at LO + +double BosonJet::sigmagqLO(double pT, double yB, double yJ, double Q){ + /* + dsigma/dpTdyZdyJ in unit pb/GeV for gq->ZJ & gqb->ZJ + */ + double res; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + //cout << s << ", " << t << ", " << u << endl; + double dsgq=0.0; + for(unsigned int i=1;i<=_nf;i++){ + dsgq+=(_qcd.pdf(i,xB[1],Q)+_qcd.pdf(-i,xB[1],Q))*e2(_qcd._partons[i].e());//g(p1) q(p2)->boson(pB) jet(pJ) + } + res=(_qcd.pdf(21,xB[0],Q)*dsgq*Mgq2(s,t,u))*M2toXsection(pT, xB[0], xB[1], Q); + //cout << (_qcd.pdf(21,xB[0],Q)*dsgq*Mgq2(s,t,u)) << ", " << M2toXsection(pT, xB[0], xB[1], Q) << endl; + + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJet::sigmagqLO(double Qh, double QPDF){ + /* + dsigma/dpTdyZdyJ in unit pb/GeV for gq->ZJ & gqb->ZJ + */ + double res=0.0; + if(kinematicsQ()){ + double dsgq=0.0; + for(unsigned int i=1;i<=_nf;i++){ + dsgq+=(_qcd.pdf(i,_x2,QPDF)+_qcd.pdf(-i,_x2,QPDF))*e2(_qcd._partons[i].e());//g(p1) q(p2) or g(p1) qb(p2)->boson(pB) jet(pJ) + } + res=(_qcd.pdf(21,_x1,QPDF)*dsgq*Mgq2())*M2toXsection(Qh); + //cout << (_qcd.pdf(21,xB[0],Q)*dsgq*Mgq2(s,t,u)) << ", " << M2toXsection(pT, xB[0], xB[1], Q) << endl; + + } + return res*invGeV2topb;//return with unit pb +} + + +double BosonJet::sigmaqgLO(double pT, double yB, double yJ, double Q){ + /* + dsigma/dpTdyZdyJ in unit pb/GeV for qg->ZJ and qbg->ZJ + */ + double res; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + double dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + dsqg+=(_qcd.pdf(i,xB[0],Q)+_qcd.pdf(-i,xB[0],Q))*e2(_qcd._partons[i].e());//q(p1) g(p2) or qb(p1) g(p2)->boson(pB) jet(pJ) + } + res=dsqg*_qcd.pdf(21,xB[1],Q)*Mgq2(s,u,t)*M2toXsection(pT, xB[0], xB[1], Q); + } + return res*invGeV2topb; +} + +double BosonJet::sigmaqgLO(double Q,double QPDF){ + /* + dsigma/dpTdyZdyJ in unit pb/GeV for qg->ZJ and qbg->ZJ + */ + double res=0.0; + if(kinematicsQ()){ + double dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + dsqg+=(_qcd.pdf(i,_x1,QPDF)+_qcd.pdf(-i,_x1,QPDF))*e2(_qcd._partons[i].e());//q(p1) g(p2) or qb(p1) g(p2)->boson(pB) jet(pJ) + } + res=dsqg*_qcd.pdf(21,_x2,QPDF)*Mqg2()*M2toXsection(Q); + } + return res*invGeV2topb; +} + +double BosonJet::sigmaqqbLO(double pT, double yB, double yJ, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qqb->ZJ and qbq->ZJ + */ + double res; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + double ds=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //qg->Zj + ds+=_qcd.pdf(i,xB[0],Q)*_qcd.pdf(-i,xB[1],Q)*e2(_qcd._partons[i].e());//g(p1) q(p2)->boson(pB) jet(pJ) + //qbg->ZJ + ds+=_qcd.pdf(i,xB[1],Q)*_qcd.pdf(-i,xB[0],Q)*e2(_qcd._partons[i].e());//q(p1) g(p2)->boson(pB) jet(pJ) + } + res=ds*Mqqb2(s,t,u)*M2toXsection(pT, xB[0], xB[1], Q); + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJet::sigmaqqbLO(double Q, double QPDF){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qqb->ZJ and qbq->ZJ + */ + double res=0.0; + if(kinematicsQ()){ + double ds=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //qqb and qb q->Zj + ds+=(_qcd.pdf(i,_x1,QPDF)*_qcd.pdf(-i,_x2,QPDF)+_qcd.pdf(i,_x2,QPDF)*_qcd.pdf(-i,_x1,QPDF))*e2(_qcd._partons[i].e()); + } + res=ds*Mqqb2()*M2toXsection(Q); + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJet::sigmaLO(double pT, double yB, double yJ, double Q){ + return sigmaqgLO(pT, yB, yJ, Q)+sigmagqLO(pT, yB, yJ, Q)+sigmaqqbLO(pT, yB, yJ, Q); +} + +double BosonJet::sigmaLO(double Q, double QPDF){ + double res=0.0; + if(kinematicsQ()){ + res=sigmaqgLO(Q, QPDF)+sigmagqLO(Q, QPDF)+sigmaqqbLO(Q, QPDF); + } + return res; +} + +//MC integration + +void BosonJet::setupMC(double (*pds)(double *, size_t, void *), size_t dim, double *ymin, double *ymax, void *para){ + + gsl_rng_env_setup (); + _T = gsl_rng_default; + _r = gsl_rng_alloc (_T); + + _dim=dim;_mcFun.f=pds;_mcFun.dim=dim;_mcFun.params=para; +#ifdef MC_MISER + cout << "miser is used..." << endl; + _mcStatus = gsl_monte_miser_alloc (dim); +#else + cout << "vegas is used..." << endl; + _mcStatus = gsl_monte_vegas_alloc (dim); +#endif + _ymin=ymin;_ymax=ymax; + +} + +void BosonJet::cleanupMC(){ +#ifdef MC_MISER + gsl_monte_miser_free (_mcStatus); +#else + gsl_monte_vegas_free (_mcStatus); +#endif + gsl_rng_free (_r); + +} + +void BosonJet::setCalls(size_t calls){ + _calls=calls; +} + +void BosonJet::calculate(double qT, ostream &out){ + double res, err; +#ifdef MC_MISER + gsl_monte_miser_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res, &err); +#else + gsl_monte_vegas_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res, &err); +#endif + out << setprecision(15) << qT << " " << qT*res << " " << qT*err << endl;//here, in resum, we actually calculate dsigam/qTdqT but we only save dsigma/dqT. +} + +void BosonJet::calculate(double qT, double *res){ +#ifdef MC_MISER + gsl_monte_miser_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res[0], &res[1]); +#else + gsl_monte_vegas_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res[0], &res[1]); +#endif +} + +void BosonJet::calculate(double *res){//calculate the total cross section in pb +#ifdef MC_MISER + gsl_monte_miser_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res[0], &res[1]); +#else + gsl_monte_vegas_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res[0], &res[1]); +#endif +} + diff --git a/.github/entrypoint/artifact/BosonJet.h b/.github/entrypoint/artifact/BosonJet.h new file mode 100644 index 000000000..35c101886 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJet.h @@ -0,0 +1,92 @@ +//#define MC_MISER +#include "QCD.h" +#include "ElectroWeak.h" +#include +#include +#include +#include + +using namespace std; + + +class BosonJet{ + + protected: + + unsigned int _nf;//flavors of quarks, 5 by default + + //pdfs and parameters + double _Ecm;//=sqrt{s} characterizes the collision. We always choose the CM frame. + QCD _qcd; + ElectroWeak _ew; + Particle *_boson; + + double _preXsection;//prefactor for calculting cross secton + double _s; + double _mB2;//boson mass squared + + double _x1, _x2, _yB, _yJ, _shat, _that, _uhat,_pT;//Kinematics for a scattering process + + //unit conversion 1 GeV fm=0.1973269788 from PDG 2018 + double invGeV2topb;//1/GeV^2 to pb + + //Variables for Monte Carlo + const gsl_rng_type *_T; + gsl_rng *_r; + +#ifdef MC_MISER + gsl_monte_miser_state * _mcStatus; +#else + gsl_monte_vegas_state * _mcStatus; +#endif + gsl_monte_function _mcFun; + size_t _dim, _calls; + + double *_ymin, *_ymax;//integration boundary + + public: + + BosonJet(); + BosonJet(double Ecm, Particle *boson); + + //calculte the effective charge + double e2(double); + + void setEcm(double Ecm); + void setBoson(Particle *boson); + void getxBs(double *xB, double pT, double yB, double yJ);//calculate Bjorken x's from Ecm, pT and the rapidities of the two produced particles + void Mandelstam(double x1, double x2, double pT, double yB, double &s, double &t, double &u); + void setNf(unsigned int nf); + void setKinematics(double pT, double yB, double yJ); + bool kinematicsQ();//return whether it is allowed kinematics. + void getKinematics(); + void setpT(double pT); + double getpT(); + + //Born amplitudes squared: basically the hard function + double Mgq2(double s, double t, double u);//averged amplitude squared for gq channel + double Mgq2();//averged amplitude squared for gq channel + double Mqg2();//averged amplitude squared for gq channel + double Mqqb2(double s, double t, double u);//averaged amplitude squared for qqbar channel + double Mqqb2();//averaged amplitude squared for qqbar channel + + //differential cross section at LO, used for tests + double M2toXsection(double Q);//The prefactor*M^2 gives Born cross section. + double M2toXsection(double pT, double x1, double x2, double Q);//The prefactor*M^2 gives Born cross section. + double sigmagqLO(double pT, double yB, double yJ, double Q);//differential cross section for gq channel + double sigmagqLO(double Qh, double QPDF);//differential cross section for gq+gqb channel + double sigmaqgLO(double Q, double QPDF);//differential cross section for gq+gqb channel + double sigmaqgLO(double pT, double yB, double yJ, double Q);//differential cross section for qg+qbg channel + double sigmaqqbLO(double pT, double yB, double yJ, double Q);//differential cross section for qqb+qbq channel + double sigmaqqbLO(double Q,double QPDF);//differential cross section for qq channel + double sigmaLO(double pT, double yB, double yJ, double Q); + double sigmaLO(double Q,double QPDF); + + //Monte Carlo + void setupMC(double (*pds)(double *, size_t, void *), size_t dim, double *ymin, double *ymax, void *para); + void cleanupMC();void setCalls(size_t); + void calculate(double, ostream &); + void calculate(double, double *); + void calculate(double *); +}; + diff --git a/.github/entrypoint/artifact/BosonJetBorn.c b/.github/entrypoint/artifact/BosonJetBorn.c new file mode 100644 index 000000000..e3f6c0e89 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetBorn.c @@ -0,0 +1,10 @@ +#include "BosonJetBorn.h" + + +BosonJetBorn::BosonJetBorn(double Ecm, Particle *boson):BosonJet(Ecm, boson){ +} + +void BosonJetBorn::getFilename(stringstream &filename, double yJmax){ + filename << "s" << _Ecm << "etaJ" << yJmax << "Born.dat"; + +} diff --git a/.github/entrypoint/artifact/BosonJetBorn.h b/.github/entrypoint/artifact/BosonJetBorn.h new file mode 100644 index 000000000..c3f4ce93b --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetBorn.h @@ -0,0 +1,9 @@ +#include "BosonJet.h" + +class BosonJetBorn: public BosonJet{ + + public: + BosonJetBorn(double Ecm, Particle *boson); + void getFilename(stringstream &filename, double ymax); + +}; diff --git a/.github/entrypoint/artifact/BosonJetCSS.c b/.github/entrypoint/artifact/BosonJetCSS.c new file mode 100644 index 000000000..90e010a45 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetCSS.c @@ -0,0 +1,133 @@ +#include +#include "BosonJetCSS.h" +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +using namespace std; + +BosonJetCSS::BosonJetCSS():BosonJetResum(){ +} + +BosonJetCSS::BosonJetCSS(double Ecm, Particle *boson):BosonJetResum(Ecm, boson){ +} + + +//CSS +double BosonJetCSS::H1qqb(double muh){ + double lmuhomz2=log(muh*muh/_mB2), lRpTomuh2=_R*_pT/muh,mz2t=_mB2/(_mB2-_that),mz2u=_mB2/(_mB2-_uhat); + double lsomz2=log(_shat/_mB2),ltomz2=log(-_that/_mB2),luomz2=log(-_uhat/_mB2),lmz2t=log(mz2t),lmz2u=log(mz2u); + lRpTomuh2=2.0*log(lRpTomuh2); + return 0.5*_qcd.alphas(muh)*( _qcd._Nc*( -_qcd._beta0*lRpTomuh2/6.0 +0.5*lRpTomuh2*lRpTomuh2 + gsl_sf_dilog(mz2t)+ gsl_sf_dilog(mz2u)-lmuhomz2*log(_shat*_mB2/(_that*_uhat)) - 0.5*lmuhomz2*lmuhomz2+0.5*lsomz2*lsomz2-0.5*(ltomz2+luomz2)*(ltomz2+luomz2) + ltomz2*luomz2 + 0.5*lmz2t*lmz2t+0.5*lmz2u*lmz2u-2.0*log(_R)*log(_R)-2.0*M_PI*M_PI/3.0+67.0/9.0-23.0*_nf/54.0 ) + _qcd._CF*( 2.0*lsomz2*lmuhomz2-lmuhomz2*lmuhomz2-3.0*lmuhomz2-lsomz2*lsomz2+M_PI*M_PI-8.0 ) )/M_PI; +} + +double BosonJetCSS::H1qg(double muh){ + double lmuhomz2=log(muh*muh/_mB2), lRpTomuh2=_R*_pT/muh,mz2t=_mB2/(_mB2-_that),mz2u=_mB2/(_mB2-_uhat); + double lsomz2=log(_shat/_mB2),ltomz2=log(-_that/_mB2),luomz2=log(-_uhat/_mB2),lmz2t=log(mz2t),lmz2u=log(mz2u); + lRpTomuh2=2.0*log(lRpTomuh2); + return 0.5*_qcd.alphas(muh)*( _qcd._CF*( -1.5*lRpTomuh2 +0.5*lRpTomuh2*lRpTomuh2 + 2.0*luomz2*lmuhomz2-lmuhomz2*lmuhomz2-3.0*lmuhomz2-luomz2*luomz2-2.0*log(_R)*log(_R)-2.0*M_PI*M_PI/3.0-1.5) + _qcd._Nc*( gsl_sf_dilog(mz2t)-gsl_sf_dilog(_mB2/_shat) - lmuhomz2*log(_uhat*_mB2/(_shat*_that))-0.5*lmuhomz2*lmuhomz2-0.5*(lsomz2+ltomz2)*(lsomz2+ltomz2)+lsomz2*ltomz2-lsomz2*log(_that/(_mB2-_shat)) -0.5*lsomz2*lsomz2+0.5*lmz2t*lmz2t+0.5*luomz2*luomz2+0.5*M_PI*M_PI ) )/M_PI; +} +/* + +double BosonJetCSS::H1qg(double muh){ + double lmuhomz2=log(muh*muh/_mB2), lRpTomuh2=_R*_pT/muh,mz2t=_mB2/(_mB2-_that),mz2u=_mB2/(_mB2-_uhat); + double lsomz2=log(_shat/_mB2),ltomz2=log(-_that/_mB2),luomz2=log(-_uhat/_mB2),lmz2t=log(mz2t),lmz2u=log(mz2u); + lRpTomuh2=2.0*log(lRpTomuh2); + return 0.5*_qcd.alphas(muh)*( _qcd._CF*( -1.5*lRpTomuh2 +0.5*lRpTomuh2*lRpTomuh2 + 2.0*luomz2*lmuhomz2-lmuhomz2*lmuhomz2-3.0*lmuhomz2-luomz2*luomz2-2.0*log(_R)*log(_R)-2.0*M_PI*M_PI/3.0-1.5) + _qcd._Nc*( gsl_sf_dilog(mz2t)-gsl_sf_dilog(_mB2/_shat) - lmuhomz2*log(_uhat*_mB2/(_shat*_that))-0.5*lmuhomz2*lmuhomz2-0.5*(lsomz2+ltomz2)*(lsomz2+ltomz2)+lsomz2*ltomz2+lsomz2*log(_shat-_mB2) -0.5*lsomz2*lsomz2+0.5*lmz2t*lmz2t+0.5*luomz2*luomz2+0.5*M_PI*M_PI ) )/M_PI; +} +*/ + +double BosonJetCSS::aHqgCSS(){ + return -2.0*(_qcd._Nc+_qcd._CF)/M_PI; +} + +double BosonJetCSS::bHqgCSS(double muh){ + return (_qcd._CF*(2.0*log(-_uhat/(_pT*muh*_R))-1.5)+_qcd._Nc*log(_shat*_that/(_uhat*muh*muh))-0.5*_qcd._beta0)/M_PI; +} + +double BosonJetCSS::aHqqbCSS(){ + return _aHqqb+_aJqqb; +} + +double BosonJetCSS::bHqqbCSS(double muh){ + //cout << "s=" << _shat << endl; + return ( _qcd._CF*(2.0*log(_shat/(muh*muh))-3.0)-2.0*_qcd._Nc*log(_R) )/M_PI; +} + +double BosonJetCSS::aSqgCSS(){ + return _asbbqg+_acoftqg; +} + +double BosonJetCSS::bSqgCSS(double muxT){ + return (_qcd._CF*(1.5-2.0*log(-_uhat/(_pT*muxT*_R)))+2.0*_qcd._Nc*log(-_pT*muxT/_that)+0.5*_qcd._beta0)/M_PI; +} + +double BosonJetCSS::CHqgCSS(double mu, double muh){ + return rge(mu,muh,aHqgCSS(),bHqgCSS(muh)); +} + +double BosonJetCSS::CHqqbCSS(double mu, double muh){ + return rge(mu,muh,aHqqbCSS(),bHqqbCSS(muh)); +} + +double BosonJetCSS::CSqgCSS(double mu, double muxT){ + return rge(mu,muxT,aSqgCSS(),bSqgCSS(muxT)); +} + + + +double BosonJetCSS::sigmaqgCSS(double xT, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qg->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + double muT=muxTCSS(xT),muh=muhCSS(); + res=0.5*xT*NonPert(xT,muh)*gsl_sf_bessel_J0(_qT*xT)*CHqgCSS(muT,muh)*(1.0+H1qg(muh))*sigmaqgLO(muh,muT)/M_PI; + } + return res; +} + +double BosonJetCSS::sigmaqqbCSS(double xT, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qqb and qbq->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + double muT=muxTCSS(xT),muh=muhCSS(); + res=xT*NonPert(xT,muh)*gsl_sf_bessel_J0(_qT*xT)*CHqqbCSS(muT,muh)*(1.0+H1qqb(muh))*sigmaqqbLO(muh,muT); + } + return res; +} + +double BosonJetCSS::sigmaCSS(double xT, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qqb and qbq->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + double muT=muxTCSS(xT),muh=muhCSS(); + res=xT*NonPert(xT,muh)*gsl_sf_bessel_J0(_qT*xT)*((1.0+H1qqb(muh))*CHqqbCSS(muT,muh)*sigmaqqbLO(muh,muT)+2.0*(1.0+H1qg(muh))*CHqgCSS(muT,muh)*sigmaqgLO(muh,muT)); + } + return res; +} + +double BosonJetCSS::RGInvariance(double mu, double muxT, double muh){ + return aHqgCSS()*log(mu/muh)+bHqgCSS(muh)+aSqgCSS()*log(mu/muxT)+bSqgCSS(muxT); +} + +//filename + +void BosonJetCSS::getFilename(stringstream &filename, double ymin, double ymax){ + filename << "R" << _R << "pT" << ymin << "." << ymax; + filename << "CSS.dat"; + +} diff --git a/.github/entrypoint/artifact/BosonJetCSS.h b/.github/entrypoint/artifact/BosonJetCSS.h new file mode 100644 index 000000000..6cf4da933 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetCSS.h @@ -0,0 +1,33 @@ + +#include "BosonJetResum.h" + +class BosonJetCSS: public BosonJetResum{ + public: + BosonJetCSS(); + BosonJetCSS(double Ecm, Particle *boson); + + //CSS formalism: H=Hard+Jet, S=Soft+Coft + double H1qg(double muh); + double H1qqb(double muh); + + double aHqgCSS();//a for anomalous dimension of hard function Hqg + double bHqgCSS(double muh);//b for anomalous dimension of hard function Hqg + + double aHqqbCSS();//a for anomalous dimension of hard function Hqg + double bHqqbCSS(double muh);//b for anomalous dimension of hard function Hqg + + double aSqgCSS();//a for anomalous dimension of soft function Hqg + double bSqgCSS(double);//b for anomalous dimension of soft function Hqg + + double CHqgCSS(double mu, double muH);//nll resummed for hard function: Hqg in CSS + + double CHqqbCSS(double mu, double muH);//nll resummed for hard function: Hqg in CSS + + double CSqgCSS(double mu, double muS);//nll resummed for hard function: Hqg + double sigmaqgCSS(double xT, double pT, double yB, double yJ); + double sigmaqqbCSS(double xT, double pT, double yB, double yJ); + double sigmaCSS(double xT, double pT, double yB, double yJ); + + double RGInvariance(double mu, double muxT, double muh); + void getFilename(stringstream &filename, double ymin, double ymax); +}; diff --git a/.github/entrypoint/artifact/BosonJetLL.c b/.github/entrypoint/artifact/BosonJetLL.c new file mode 100644 index 000000000..f125060b9 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetLL.c @@ -0,0 +1,42 @@ +#include +#include "BosonJetLL.h" +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +BosonJetLL::BosonJetLL():BosonJetNLL(){ + initLL(); +} + +BosonJetLL::BosonJetLL(double Ecm, Particle *boson):BosonJetNLL(Ecm, boson){ + initLL(); +} + +void BosonJetLL::initLL(){ + _ngl=false; +} + +double BosonJetLL::bHqg(){ + cout << "We are here..." << endl; + return -(_cf*(2.0*log(-_muh*_muh/_uhat))+_nc*log(_muh*_muh*_uhat/(_shat*_that))); +} + +//filename + +void BosonJetLL::getFilename(stringstream &filename, double ymin, double ymax){ + filename << "R" << _R << "pT" << ymin << "." << ymax << "LL"; + if(_css){ + filename << "CSS"; + } + if(_nonpert){ + filename << "NP"; + } + filename <<"muh" << _muhV << "mub" << _muxTV << "muJ" << _muJV << "mut" << _mutV; + filename <<".dat"; +} + diff --git a/.github/entrypoint/artifact/BosonJetLL.h b/.github/entrypoint/artifact/BosonJetLL.h new file mode 100644 index 000000000..f5153a6a6 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetLL.h @@ -0,0 +1,23 @@ + +#include "BosonJetNLL.h" + +class BosonJetLL: public BosonJetNLL{ + +protected: + +public: + + BosonJetLL(); + BosonJetLL(double Ecm, Particle *boson); + + void initLL(); + + virtual double bHqg();//b for anomalous dimension of hard function Hqg + + + //NGL resummation + + void getFilename(stringstream &filename, double ymin, double ymax); + +}; + diff --git a/.github/entrypoint/artifact/BosonJetLO.c b/.github/entrypoint/artifact/BosonJetLO.c new file mode 100644 index 000000000..73591a108 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetLO.c @@ -0,0 +1,198 @@ +#include "BosonJetLO.h" + +#define PI 3.141592653589793 + +BosonJetLO::BosonJetLO(double Ecm, Particle *boson):BosonJet(Ecm, boson){ +} + + +double BosonJetLO::nllqg(double qT, double pT, double yB, double yJ, double R, double Q){ + /* + Double log + non-PDF single log at O(alpha_s) for qg->BJ channel. It is the same for qbg->BJ. + For gq->BJ and gqb->BJ, it is given by t<->u. + */ + double xB[2],res;getxBs(xB, pT, yB, yJ); + + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + res=-_qcd.alphas(Q)*(2.0*(_qcd._Nc*log(-pT*qT/t)+_qcd._CF*log(-pT*qT*R/u))+( 11.0*_qcd._Nc/6.0-_nf/3.0+3.0*_qcd._CF/2.0))/(PI); + } + // + //res=-_qcd.alphas(Q)*2.0*(_qcd._Nc+_qcd._CF)*(log(0.5*qT)+0.5772156649015329)/(PI); + return res; +} + +double BosonJetLO::nllqq(double qT, double pT, double yB, double yJ, double R, double Q){ + /* + Double log + non-PDF single log at O(alpha_s) for qqb->BJ channel. It is the same for qbq->BJ. + */ + double xB[2],res;getxBs(xB, pT, yB, yJ); + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + res=-_qcd.alphas(Q)*(_qcd._CF*(3.0+2.0*log(-pT*qT/t)+2.0*log(-pT*qT/u))+2.0*_qcd._Nc*log(R))/(PI); + } + return res; +} + +double BosonJetLO::sigmaqg(double qT, double pT, double yB, double yJ, double R, double Q){ + /* + Non-PDF LL and NLL for qg+qbg channel. + */ + return sigmaqgLO(pT,yB,yJ,Q)*nllqg(qT, pT,yB,yJ,R,Q); +} + +double BosonJetLO::sigmaqg(double qT, double pT, double yB, double yJ, double z, double R, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qg->ZJ+qbg->ZJ. + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]<1.0&&xB[1]<1.0&&xB[0]>0.0&&xB[1]>0.0&&z>0.0&&z<1.0){//z has to be in the whole range (0,1) in order to get the delta function in splitting function + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + double dg=0.0,dq=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //qg->q'g->BJ+qbg->qb'g + dq+=(_qcd.Pqq(i,z,xB[0],Q)+_qcd.Pqq(-i,z,xB[0],Q))*e2(_qcd._partons[i].e()); + //qg->qg'->BJ+qbg->qb'g->BJ + dg+=(_qcd.pdf(i,xB[0],Q)+_qcd.pdf(-i,xB[0],Q))*e2(_qcd._partons[i].e()); + //That is all. + } + res=_qcd.alphas(Q)*((dg*_qcd.Pgg(z,xB[1],Q)+dq*_qcd.pdf(21,xB[1],Q))*Mgq2(s,u,t)+ dg*_qcd.Pqg(z,xB[1],Q)*Mqqb2(s,t,u))*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor alphas/PI + } + return res*invGeV2topb+sigmaqgLO(pT,yB,yJ,Q)*nllqg(qT, pT,yB,yJ,R,Q); + //return sigmaqgLO(pT,yB,yJ,Q)*nllqg(qT, pT,yB,yJ,R,Q); +} + +double BosonJetLO::sigmaqqb(double qT, double pT, double yB, double yJ, double R, double Q){ + /* + Non-PDF LL and NLL for qqb+qbq channel. + */ + return sigmaqqbLO(pT,yB,yJ,Q)*nllqq(qT, pT,yB,yJ,R,Q); +} + +double BosonJetLO::sigmaqqb(double qT, double pT, double yB, double yJ, double z, double R, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qqb->ZJ. + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + //z has to be in the whole range (0,1) in order to get the delta function in splitting function + if(xB[0]<1.0&&xB[1]<1.0&&xB[0]>0.0&&xB[1]>0.0&&z>0.0&&z<1.0){ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + double ds=0.0,dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //qqb->qqb'->BJ with ' indicating undergoing splitting + ds+=_qcd.pdf(i,xB[0],Q)*_qcd.Pqq(-i,z,xB[1],Q)*e2(_qcd._partons[i].e()); + //qqb->qg->BJ + dsqg+=_qcd.pdf(i,xB[0],Q)*_qcd.Pgqb(z,xB[1],Q)*e2(_qcd._partons[i].e()); + //qbq->qbq'->BJ + ds+=_qcd.pdf(-i,xB[0],Q)*_qcd.Pqq(i,z,xB[1],Q)*e2(_qcd._partons[i].e()); + //qbq->qbg->BJ + dsqg+=_qcd.pdf(-i,xB[0],Q)*_qcd.Pgq(z,xB[1],Q)*e2(_qcd._partons[i].e()); + //qqb->q'qb->BJ, qqb->gqb->BJ,qbq->qb'q->BJ & qbq->gq->BJ is taken into account by a factor of 2. + } + res=2.0*_qcd.alphas(Q)*( ds*Mqqb2(s,t,u)+dsqg*Mgq2(s,u,t) )*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor: 2 alphas/(PI) + } + + return res*invGeV2topb+sigmaqqbLO(pT,yB,yJ,Q)*nllqq(qT, pT,yB,yJ,R,Q); +} + +double BosonJetLO::sigmagg(double qT, double pT, double yB, double yJ, double z, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for gg->ZJ. + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>0.0&&xB[1]>0.0&&xB[0]<1.0&&xB[1]<1.0&&z<1.0&&z>xB[0]){ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + for(unsigned int i=1;i<=_nf;i++){ + //Conly gg->qg->BJ is calculated. + //gg->qbg->BJ, gg->gq->BJ and gg->gqb is taken into account by a factor of 4. + res+=e2(_qcd._partons[i].e());//g(p1) q(p2)->boson(pB) jet(pJ) + } + res*=4.0*_qcd.alphas(Q)*_qcd.Pqg(z,xB[0],Q)*_qcd.pdf(21,xB[1],Q)*Mgq2(s,u,t)*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor: 4*alphas/PI + } + return res*invGeV2topb;//return with unit pb +} + + +double BosonJetLO::sigmaqq(double qT, double pT, double yB, double yJ, double z, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qq->ZJ. + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>0.0&&xB[1]>0.0&&xB[0]<1.0&&xB[1]<1.0&&z<1.0&&z>xB[0]){ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + double dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //Only qq->qg->ZJ is calculated. + //qq->gq->ZJ is taken into account by a factor of 2. + dsqg+=_qcd.pdf(i,xB[0],Q)*e2(_qcd._partons[i].e()); + } + + res=2.0*_qcd.alphas(Q)*dsqg*_qcd.Pgq(z,xB[1],Q)*Mgq2(s,u,t)*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor: 2*alphas/(PI) + + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJetLO::sigmaqbqb(double qT, double pT, double yB, double yJ, double z, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qbqb->ZJ + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>0.0&&xB[1]>0.0&&xB[0]<1.0&&xB[1]<1.0&&z<1.0&&z>xB[0]){ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + double dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //Only qb qb->qb g->ZJ is calculated. + //qbqb->gqb->ZJ is taken into account by a factor 2 + dsqg+=_qcd.pdf(-i,xB[0],Q)*e2(_qcd._partons[i].e()); + } + + res=2.0*_qcd.alphas(Q)*(dsqg*_qcd.Pgqb(z,xB[1],Q)*Mgq2(s,u,t))*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor: 2*alphas/PI + + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJetLO::sigma(double qT, double pT, double yB, double yJ,double z, double R, double Q){ + return 2.0*sigmaqg(qT,pT,yB,yJ,z,R,Q)+sigmaqqb(qT,pT,yB,yJ,z,R,Q)+sigmaqq(qT,pT,yB,yJ,z,Q)+sigmaqbqb(qT,pT,yB,yJ,z,Q)+sigmagg(qT,pT,yB,yJ,z,Q); +} + +//output + +void BosonJetLO::getFilename(stringstream &filename, double R, int chan, double ymin, double ymax){ + filename << "R" << R << "pT" << ymin << "." << ymax; + switch(chan){ + case 0: + filename<< "tot"; + break; + case 1: + filename<< "qg"; + break; + case 2: + filename<< "qqb"; + break; + case 3: + filename<< "gg"; + break; + case 4: + filename<< "qq"; + break; + case 5: + filename<< "qbqb"; + break; + } + filename << "LO.dat"; + +} diff --git a/.github/entrypoint/artifact/BosonJetLO.h b/.github/entrypoint/artifact/BosonJetLO.h new file mode 100644 index 000000000..ecc433307 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetLO.h @@ -0,0 +1,31 @@ +#include "BosonJet.h" + +class BosonJetLO: public BosonJet{ + + public: + BosonJetLO(double Ecm, Particle *boson); + + //differential cross section at LO + double sigmaqg(double qT, double pT, double yB, double yJ, double R, double Q);//differential cross section for gq channel + double sigmaqg(double qT, double pT, double yB, double yJ,double z, double R, double Q);//differential cross section for gq channel + //differential cross section after resummation (RG evolution) + double sigmagq(double qT,double dphi, double pT, double yB, double yJ);//differential cross section for gq channel + double sigmagg(double qT,double pT, double yB, double yJ, double z,double Q);//differential cross section for gq channel + double sigmaqq(double qT,double pT, double yB, double yJ, double z,double Q);//differential cross section for gq channel + double sigmaqbqb(double qT,double pT, double yB, double yJ, double z,double Q);//differential cross section for gq channel + double sigmaqqb(double qT,double pT, double yB, double yJ, double R, double Q);//differential cross section for gq channel + double sigmaqqb(double qT,double pT, double yB, double yJ,double z, double R, double Q);//differential cross section for gq channel + double sigma(double qT,double pT, double yB, double yJ, double z, double R, double Q); + + //Fixed-order calculation + double nllqg(double pT, double qT, double yB, double yJ, double R, double Q); + double nllqq(double pT, double qT, double yB, double yJ, double R, double Q); + + //Output + void getFilename(stringstream &filename, double R, int chan, double ymin, double ymax); + +}; + +struct ParaQT{BosonJetLO *_bj;double _R;double _qT; int _chan;}; + + diff --git a/.github/entrypoint/artifact/BosonJetNLL.c b/.github/entrypoint/artifact/BosonJetNLL.c new file mode 100644 index 000000000..9b878640a --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetNLL.c @@ -0,0 +1,210 @@ +#include +#include "BosonJetNLL.h" +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +BosonJetNLL::BosonJetNLL():BosonJetResum(){ + initNLL(); +} + +BosonJetNLL::BosonJetNLL(double Ecm, Particle *boson):BosonJetResum(Ecm, boson){ + initNLL(); +} + +void BosonJetNLL::initNLL(){ + _css=false;_imgcphix=true;;_ngl=true; + _angl=0.85*_qcd._Nc;_bngl=0.86*_qcd._Nc;_cngl=1.33; + _cNGL=_qcd._Nc*_qcd._CF*M_PI*M_PI/(3.0); + _muhV=1.0;_muJV=1.0;_mutV=1.0;_muxTV=1.0; + + _mutMin=10.0; + _ll=false; +} + +void BosonJetNLL::setScaleVar(double vh, double vb, double vJ, double vt){ + _muhV=vh;_muxTV=vb;_muJV=vJ;_mutV=vt; +} + +void BosonJetNLL::setCSS(bool cssQ){ + _css=cssQ; +} + +void BosonJetNLL::setNGL(bool nglQ){ + _ngl=nglQ; +} + +void BosonJetNLL::setImgcphix(bool cssQ){ + _imgcphix=cssQ; +} + +double BosonJetNLL::CHqg(){ + //cout << _mu <<", " << _muh << ", " << _pT << ", " << aHqg() << ", " << bHqg() << ", " << aHqg()*log(_mu/_muh)+bHqg() << endl; + return rge(_mu,_muh,aHqg(),bHqg()); +} + +double BosonJetNLL::CJqg(){ + return rge(_mu,_muJ,aJqg(),bJqg()); +} + +double BosonJetNLL::Ccoftqg(){ + return rge(_mu,_mut,acoftqg(),bcoftqg()); +} + +double BosonJetNLL::Csbbqg(){ + return rge(_mu,_muxT,asbbqg(),bsbbqg()); +} + +double BosonJetNLL::CHqqb(){ + return rge(_mu,_muh,aHqqb(),bHqqb()); +} + +double BosonJetNLL::CJqqb(){ + return rge(_mu,_muJ,aJqqb(),bJqqb()); +} + +double BosonJetNLL::Ccoftqqb(){ + return rge(_mu,_mut,acoftqqb(),bcoftqqb()); +} + +double BosonJetNLL::Csbbqqb(){ + return rge(_mu,_muxT,asbbqqb(),bsbbqqb()); +} + +//R resum +double BosonJetNLL::Ccphixqg(){ + return cos(2.0*M_PI*_qcd._CF*log(_qcd.alphas(_muxT)/_qcd.alphas(_mut))/_qcd._beta0); +} + +double BosonJetNLL::Ccphixqqb(){ + return cos(2.0*M_PI*_qcd._Nc*log(_qcd.alphas(_muxT)/_qcd.alphas(_mut))/_qcd._beta0); +} + +double BosonJetNLL::NGL(){ + double res=1.0; + + if(_mut<_muJ){ + double u=log(_qcd.alphas(_mut)/_qcd.alphas(_muJ))/_qcd._beta0; + double u2=u*u; + + //cout << _mut << ", " << _muJ << endl; + + //cout << u2 << ", " << exp(-_cNGL*u2*(1.0+_angl*_angl*u2)/(1.0+pow(_bngl*u,_cngl))) << endl; + + res=exp(-_cNGL*u2*(1.0+_angl*_angl*u2)/(1.0+pow(_bngl*u,_cngl))); + } + return res; +} + + +void BosonJetNLL::setScales(double xT){ + _muxT=_muxTV*_b0/xT;_muh=_muhV*muh();_muJ=_muJV*_R*_pT;_mut=_mutV*_R*_b0/xT; + _mu=_muJ; + if(_muxT>_muh) _muxT=_muh; + if(_mut>_muJ) _mut=_muJ; + if(_muxT>_pT) _muxT=_pT; + + // if(_mut<_muJ&&_muxT<_muh){ + + //CSS + if(_css){ + _mut=_muxT;_muJ=_muh;_mu=_muxT; + } +} + +double BosonJetNLL::sigmaqgR(double xT, double cphix, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qg->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + + _xT=xT; _cphix=cphix; setScales(xT); + if((_qcd.alphas(_muxT)/_qcd.alphas(_mut)>exp(-0.25*_qcd._beta0/_qcd._CF))){ + //cout << "RGI: " << RGInvariance(_mu, _muh, _muxT, _muJ, _mut, xT, cphix) << endl; + if(_mutMin>_mut) _mutMin=_mut; + //cout << _mutMin << ", " << _mut << endl; + res=xT*gsl_sf_bessel_J0(_qT*xT)*Ccphixq()*CHqg()*CJqg()*Csbbqg()*Ccoftqg()*sigmaqgLO(_muh,_muxT)/M_PI; + if(_nonpert){ + res*=NonPert(xT,_muh); + } + if(_imgcphix){ + res*=Ccphixqg(); + } + if(_ngl){ + res*=NGL(); + } + } + //} + } + return res; +} + + +double BosonJetNLL::sigmaqqbR(double xT, double cphix, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qqb->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + + _xT=xT; _cphix=cphix; setScales(xT); + //cout << "qqb: " << Ccphixqqb()*Csbbqqb() << ", " << CHqqb()*CJqqb()*Csbbqqb()*Ccoftqqb() << endl; + //cout << "mu=" << _mu << ", muxT=" << _muxT << ", muh=" << _muh << ", muJ" << _muJ << ", mut=" << _mut << endl; + // cout << exp(-0.25*_qcd._beta0/_qcd._Nc) << ", " << exp(-0.25*_qcd._beta0/_qcd._CF) << endl; + if((_qcd.alphas(_muxT)/_qcd.alphas(_mut)>exp(-0.25*_qcd._beta0/_qcd._Nc))){ + if(_mutMin>_mut) _mutMin=_mut; + res=xT*gsl_sf_bessel_J0(_qT*xT)*Ccphixg()*CHqqb()*CJqqb()*Csbbqqb()*Ccoftqqb()*sigmaqqbLO(_muh,_muxT)/M_PI; + if(_nonpert){ + res*=NonPert(xT,_muh); + } + if(_imgcphix){ + res*=Ccphixqqb(); + } + if(_ngl){ + double ngl=NGL(); + res*=pow(ngl,_qcd._Nc/_qcd._CF); + } + //} + } + } + return res; +} + +double BosonJetNLL::sigmaR(double xT, double cphix, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV. + */ + + return 2.0*sigmaqgR(xT, cphix, pT, yB, yJ)+sigmaqqbR(xT, cphix, pT, yB,yJ); +} + + + +//filename + +void BosonJetNLL::getFilename(stringstream &filename, double ymin, double ymax){ + filename << "R" << _R << "pT" << ymin << "." << ymax; + if(_css){ + filename << "CSS"; + } + if(_nonpert){ + filename << "NP"; + } + if(_ngl){ + filename << "NGL"; + } + if(_ll){ + filename << "LL"; + } + filename <<"muh" << _muhV << "mub" << _muxTV << "muJ" << _muJV << "mut" << _mutV; + filename <<"s"<< _Ecm << ".dat"; +} + diff --git a/.github/entrypoint/artifact/BosonJetNLL.h b/.github/entrypoint/artifact/BosonJetNLL.h new file mode 100644 index 000000000..7d854fadf --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetNLL.h @@ -0,0 +1,55 @@ + +#include "BosonJetResum.h" + +class BosonJetNLL: public BosonJetResum{ + +protected: + bool _css,_imgcphix,_ngl; + double _cNGL,_angl,_bngl,_cngl; + double _muhV,_muxTV,_muJV,_mutV; + + +public: + + BosonJetNLL(); + BosonJetNLL(double Ecm, Particle *boson); + + double _mutMin; + + void initNLL(); + void setScales(double xT);//var is a prefactor for the scale variation + void setScaleVar(double vh, double vb, double vJ, double vt); + + double CHqg();//nll resummed for hard function in qg + double CJqg();//nll resummed for Jet function in qg + double Ccoftqg();//nll resummed for Jet function in qg + double Csbbqg();//nll resummed for SBB in qg + double CHqqb();//nll resummed for hard function: Hqqb + double CJqqb();//nll resummed for Jet function in qqb + double Ccoftqqb();//nll resummed for Jet function in qqb + double Csbbqqb();//nll resummed for SBB: Hqqb + + //R resummation + double Ccphixqg(); + double Ccphixqqb(); + double sigmaqgR(double xT, double cphix, double pT, double yB, double yJ); + double sigmaqqbR(double xT,double cphix, double pT, double yB, double yJ); + double sigmaR(double xT,double cphix, double pT, double yB, double yJ); + + //NGL resummation + double NGL(); + + + void getFilename(stringstream &filename, double ymin, double ymax); + + //check css limit + void setCSS(bool cssQ); + void setImgcphix(bool icphix); + + //switch on and off NGL + void setNGL(bool nglQ); + + //print _mut min + double mutMin(); +}; + diff --git a/.github/entrypoint/artifact/BosonJetResum.c b/.github/entrypoint/artifact/BosonJetResum.c new file mode 100644 index 000000000..3420f67c7 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetResum.c @@ -0,0 +1,280 @@ +#include +#include "BosonJetResum.h" +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +using namespace std; + +void BosonJetResum::init(){ + _R=0.0;_qT=0.0;_eps=1.0e-4;_b0=1.1229189671337703; + _aHqg=-2.0*(_qcd._Nc+2.0*_qcd._CF)/M_PI;_asbbqg=2.0*(_qcd._Nc+2.0*_qcd._CF)/M_PI; + _aJqg=2.0*_qcd._CF/M_PI;_acoftqg=-2.0*_qcd._CF/M_PI; + _aHqqb=-2.0*(_qcd._Nc+2.0*_qcd._CF)/M_PI;_aJqqb=2.0*_qcd._Nc/M_PI; + _acoftqqb=-2.0*_qcd._Nc/M_PI;_asbbqqb=2.0*(_qcd._Nc+2.0*_qcd._CF)/M_PI; + + //constant for RG evolution + _b2i=2.0*M_PI/_qcd._beta0;double b2ia=0.5/_qcd._beta0; + _aHqg*=b2ia;_aJqg*=b2ia;_asbbqg*=b2ia;_acoftqg*=b2ia; + _aHqqb*=b2ia;_aJqqb*=b2ia;_asbbqqb*=b2ia;_acoftqqb*=b2ia; + + _beta0=_qcd._beta0/M_PI;_nc=_qcd._Nc/M_PI;_cf=_qcd._CF/M_PI; + + _nonpert=false; +} + +BosonJetResum::BosonJetResum(){ + init(); +} + +BosonJetResum::BosonJetResum(double Ecm, Particle *boson):BosonJet(Ecm, boson){ + init(); +} + +void BosonJetResum::setNonPert(bool npQ){ + _nonpert=npQ; +} + +void BosonJetResum::setLL(bool ll){ + _ll=ll; +} + + +void BosonJetResum::setRegulator(double eps){ + _eps=eps; +} + +void BosonJetResum::setScale(double mu, double muh, double muJ, double muxT, double mut,double xT, double cphix){ + _mu=mu;_muJ=muJ;_muh=muh;_mut=mut;_muxT=muxT, _xT=xT, _cphix=cphix; +} + +double BosonJetResum::rge(double mu, double mu0, double a, double b){ + //double b2i=2.0*M_PI/_qcd._beta0;double b2ia=0.5*a/_qcd._beta0; + //return pow(_qcd.alphas(mu)/_qcd.alphas(mu0),-b2i*b)*exp( -b2ia*log(mu/mu0)*log(_qcd.alphas(mu))-b2ia*b2i*( (log(_qcd.alphas(mu0))+1.0)/_qcd.alphas(mu0)- (log(_qcd.alphas(mu))+1.0)/_qcd.alphas(mu)) ); + double r=_qcd.alphas(mu)/_qcd.alphas(mu0); + double lr=log(r); + return exp(-_b2i*b*log(r)-_b2i*a*(4.0*M_PI*(1.0- 1.0/r-lr)/_qcd.alphas(mu0) + ( _qcd._gcusp1/_qcd._gcusp0-_qcd._beta1/_qcd._beta0 )*(1.0-r+lr) + 0.5*_qcd._beta1*lr*lr/_qcd._beta0 ) ); +} + +void BosonJetResum::setR(double R){ + if(R>0.0) + _R=R; + else{ + cout << "The cone size can not be less than zero!" << endl; + throw exception(); + } +} + +void BosonJetResum::setqT(double qT){ + if(qT>0.0) + _qT=qT; + else{ + cout << "qT can not be less than zero!" << endl; + throw exception(); + } +} + +void BosonJetResum::setmu(double mu){ + if(mu>0.0) + _mu=mu; + else{ + cout << "mu can not be less than zero!" << endl; + throw exception(); + } +} + +void BosonJetResum::setPara(double R, double qT, double mu){ + setR(R);setqT(qT);setmu(mu); +} + +double BosonJetResum::regulator(double xT){ + return exp(-_eps*xT*xT); + } + +double BosonJetResum::aHqg(){ + return _aHqg; +} + +double BosonJetResum::bHqg(){ + double b; + if(_ll){ + b=-(_cf*(2.0*log(-_muh*_muh/_uhat))+_nc*log(_muh*_muh*_uhat/(_shat*_that))); + } + else{ + b=-(0.5*_beta0+_cf*(3.0+2.0*log(-_muh*_muh/_uhat))+_nc*log(_muh*_muh*_uhat/(_shat*_that))); + } + return b; +} + + +double BosonJetResum::aJqg(){ + return _aJqg; +} + +double BosonJetResum::bJqg(){ + double b; + if(_ll){ + b=_cf*(-2.0*log(_pT*_R/_muJ) ); + } + else{ + b=_cf*(1.5-2.0*log(_pT*_R/_muJ) ); + } + return b; +} + +double BosonJetResum::acoftqg(){ + return _acoftqg; +} + +double BosonJetResum::bcoftqg(){ + //return -2.0*_cf*log( 2.0*fabs(_cphix)*_xT*_mut/(_b0*_R) ); + double b; + if(_ll){ + b=-2.0*_cf*log(_xT*_mut/(_b0*_R) ); + } + else{ + b=-2.0*_cf*log( 2.0*_xT*_mut/(_b0*_R) ); + } + return b; +} + +double BosonJetResum::asbbqg(){ + return _asbbqg; +} + +double BosonJetResum::bsbbqg(){ + //return (0.5*_beta0+_cf*(1.5+2.0*log(-2.0*fabs(_cphix)*_pT*_xT*_muxT*_muxT/(_b0*_uhat)) )-2.0*_nc*log(-_that/(_pT*_muxT)) ); + double b; + if(_ll){ + b=(_cf*(2.0*log(-_pT*_xT*_muxT*_muxT/(_b0*_uhat)) )-2.0*_nc*log(-_that/(_pT*_muxT)) ); + } + else{ + b=(0.5*_beta0+_cf*(1.5+2.0*log(-2.0*_pT*_xT*_muxT*_muxT/(_b0*_uhat)) )-2.0*_nc*log(-_that/(_pT*_muxT)) ); + } + return b; +} + +double BosonJetResum::aHqqb(){ + return _aHqqb; +} + +double BosonJetResum::bHqqb(){ + double b; + if(_ll){ + b=(2.0*_nc*log(_pT/_muh)-_cf*(2.0*log(_muh*_muh/_shat))); + } + else{ + b=(2.0*_nc*log(_pT/_muh)-0.5*_beta0-_cf*(3.0+2.0*log(_muh*_muh/_shat))); + } + return b; +} + +double BosonJetResum::aJqqb(){ + return _aJqqb; +} + +double BosonJetResum::bJqqb(){ + double b; + if(_ll){ + b=(-2.0*_nc*log(_pT*_R/_muJ) ); + } + else{ + b=( 0.5*_beta0-2.0*_nc*log(_pT*_R/_muJ) ); + } + return b; + +} + + +double BosonJetResum::acoftqqb(){ + return _acoftqqb; +} + +double BosonJetResum::bcoftqqb(){ + //return -2.0*_nc*log( 2.0*fabs(_cphix)*_xT*_mut/(_b0*_R) ); + double b; + if(_ll){ + b=-2.0*_nc*log(_xT*_mut/(_b0*_R) ); + } + else{ + b=-2.0*_nc*log( 2.0*_xT*_mut/(_b0*_R) ); + } + return b; +} + + +double BosonJetResum::asbbqqb(){ + return _asbbqqb; +} + +double BosonJetResum::bsbbqqb(){ + //return (2.0*_nc*log(2.0*fabs(_cphix)*_xT*_muxT/(_b0))+_cf*(3.0+2.0*log(_muxT*_muxT/_shat)) ); + double b; + if(_ll){ + b=(2.0*_nc*log(_xT*_muxT/(_b0))+_cf*(2.0*log(_muxT*_muxT/_shat)) ); + } + else{ + b=(2.0*_nc*log(2.0*_xT*_muxT/(_b0))+_cf*(3.0+2.0*log(_muxT*_muxT/_shat)) ); + } + return b; +} + +double BosonJetResum::Ccphixq(){ + double pre=4.0*_qcd._CF/_qcd._beta0; + return exp(pre*log(fabs(_cphix))*log(_qcd.alphas(_muxT)/_qcd.alphas(_mut)) ); +} + +double BosonJetResum::Ccphixg(){ + double pre=4.0*_qcd._Nc/_qcd._beta0; + return exp(pre*log(fabs(_cphix))*log(_qcd.alphas(_muxT)/_qcd.alphas(_mut)) ); +} + +double BosonJetResum::muxT(double xT){ + return 1.1229189671337703/xT;//muxT=2.0*exp(-gamma_E)/xT +} + +double BosonJetResum::RGInvariance(double mu, double muh, double muxT, double muJ, double mut, double xT, double cphix){ + double b2ia=0.5/_qcd._beta0; + _mu=mu;_muh=muh; _muxT=muxT; _muJ=muJ; _mut=mut;_xT=xT;_cphix=cphix; + //return aHqg()+asbbqg()+aJqg()+acoftqg(); + //return aHqqb()+asbbqqb()+aJqqb()+acoftqqb(); + cout << aHqg()*log(_mu/_muh)/b2ia+bHqg() << " vs " << (2.0*_cf+_nc)*log(_shat/(_mu*_mu))+_cf*log(_uhat*_uhat/(_pT*_pT*_shat))+_nc*log(_that*_that/(_pT*_pT*_shat))+_cf*log(_pT*_pT/(_shat)) << endl; + cout << asbbqg()*log(_mu/_muxT)/b2ia+bsbbqg() << " vs " << -2.0*_cf*log(-_uhat/(_mu*_pT))-2.0*_nc*log(-_that/(_mu*_pT))+ 2.0*_cf*log(_xT*_mu/_b0)<< endl; + cout << aJqg()*log(_mu/_muJ)/b2ia+bJqg() << " vs " <<-2.0*_cf*log(_pT*_R/_mu) << endl; + cout << acoftqg()*log(_mu/_mut)/b2ia+bcoftqg() << " vs " << 2.0*_cf*log(_R*_b0/(_mu*_xT))<< endl; + cout << aHqqb()*log(_mu/_muh)/b2ia+bHqqb() << " vs " << (2.0*_cf+_nc)*log(_shat/(_mu*_mu))+_cf*log(_uhat*_uhat/(_pT*_pT*_shat))+_cf*log(_that*_that/(_pT*_pT*_shat))+_nc*log(_pT*_pT/(_shat)) << endl; + cout << asbbqqb()*log(_mu/_muxT)/b2ia+bsbbqqb() << " vs " << -2.0*_cf*log(-_uhat/(_mu*_pT))-2.0*_cf*log(-_that/(_mu*_pT))+ 2.0*_nc*log(_xT*_mu/_b0) << endl; + cout << aJqqb()*log(_mu/_muJ)/b2ia+bJqqb() << " vs " <<-2.0*_nc*log(_pT*_R/_mu) << endl; + cout << acoftqqb()*log(_mu/_mut)/b2ia+bcoftqqb() << " vs " << 2.0*_nc*log(_R*_b0/(_mu*_xT)) << endl; + return aHqg()*log(_mu/_muh)/b2ia+bHqg()+asbbqg()*log(_mu/_muxT)/b2ia+bsbbqg()+aJqg()*log(_mu/_muJ)/b2ia+bJqg()+acoftqg()*log(_mu/_mut)/b2ia+bcoftqg()+aHqqb()*log(_mu/_muh)/b2ia+bHqqb()+asbbqqb()*log(_mu/_muxT)/b2ia+bsbbqqb()+aJqqb()*log(_mu/_muJ)/b2ia+bJqqb()+acoftqqb()*log(_mu/_mut)/b2ia+bcoftqqb(); + //return aHqqb()*log(_mu/_muh)/b2ia+bHqqb()+asbbqqb()*log(_mu/_muxT)/b2ia+bsbbqqb()+aJqqb()*log(_mu/_muJ)/b2ia+bJqqb()+acoftqqb()*log(_mu/_mut)/b2ia+bcoftqqb(); +} + +double BosonJetResum::muxTCSS(double xT){ + return muxT(xT)*sqrt(1.0+xT*xT/2.25); +} + +double BosonJetResum::muhCSS(){ + //cout << _mB2 << ", " << _pT << endl; + return sqrt(_mB2+_pT*_pT)+_pT; +} + +double BosonJetResum::muh(){ + //cout << _mB2 << ", " << _pT << endl; + //return (sqrt(_mB2)+7.0*_pT)/6.0; + return sqrt(_mB2+_pT*_pT); +} + +double BosonJetResum::muJ(){ + return _R*_pT; +} + +double BosonJetResum::NonPert(double xT, double Q){ + double bmax=1.5; + return exp(-0.21*xT*xT-0.42*log(Q/1.5491933384829668)*log(1.0+xT*xT/(bmax*bmax))); +} diff --git a/.github/entrypoint/artifact/BosonJetResum.h b/.github/entrypoint/artifact/BosonJetResum.h new file mode 100644 index 000000000..0cd115543 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetResum.h @@ -0,0 +1,78 @@ + +#include "BosonJet.h" + +class BosonJetResum: public BosonJet{ + +protected: + + double _R; + double _qT; + double _mu, _muJ, _muh, _muxT, _cphix, _mut, _xT, _b0; + double _aHqg, _aJqg, _asbbqg, _acoftqg; + double _aHqqb, _aJqqb, _asbbqqb, _acoftqqb; + double _eps;//regulator for xT integration + + double _b2i, _beta0, _nc, _cf;//constant for RG evolution + + bool _nonpert; + bool _ll; + + void init(); + +public: + + BosonJetResum(); + BosonJetResum(double Ecm, Particle *boson); + + void setR(double R); + void setqT(double qT); + void setmu(double mu); + void setPara(double R, double qT, double mu); + void setRegulator(double eps); + void setScale(double mu, double muh, double muJ, double muxT, double mut,double xT, double cphix); + void setNonPert(bool); + void setLL(bool); + + double rge(double mu, double mu0, double a, double b);//gives the solution of RG equation + + double aHqg();//a for anomalous dimension of hard function Hqg + double bHqg();//b for anomalous dimension of hard function Hqg + + double aJqg();//a for anomalous dimension of Jet function in qg + double bJqg();//b for anomalous dimension of Jet function in qg + + double acoftqg();//a for coft function in qg + double bcoftqg(); + + double asbbqg();//a for anomalous dimension of soft+beams in qg->BJ + double bsbbqg();//b for anomalous dimension 0of soft+beams in qg->BJ + + double aHqqb();//a for anomalous dimension of hard function Hqqb + double bHqqb();//b for anomalous dimension of hard function Hqqb + + double aJqqb();//a for anomalous dimension of Jet function in qqb + double bJqqb();//b for anomalous dimension of Jet function in qqb + + double acoftqqb();//a for coft function in qqb + double bcoftqqb();//a for coft function in qqb + + double asbbqqb();//a for anomalous dimension of soft+beams in qqb->BJ + double bsbbqqb();//b for anomalous dimension of soft+beams in qqb->BJ + + double Ccphixq(); + double Ccphixg(); + + double RGInvariance(double mu, double muh, double muxT, double muJ, double mut, double xT, double cphix); + + double muxT(double xT); + double muh(); + double muxTCSS(double xT); + double muhCSS(); + double muJ(); + + //Mathematical tricks + + double NonPert(double xT, double Q); + double regulator(double xT); +}; + diff --git a/.github/entrypoint/artifact/ElectroWeak.c b/.github/entrypoint/artifact/ElectroWeak.c new file mode 100644 index 000000000..540fdecf4 --- /dev/null +++ b/.github/entrypoint/artifact/ElectroWeak.c @@ -0,0 +1,27 @@ +#include "ElectroWeak.h" +#include +#define PI 3.141592653589793 + + +/*ElectroWeak::ElectroWeak(){ + //Here, all the values are taken from PDG 2018 + _GF=1.1663787e-5;//in GeV^{-2} + _mZ=91.1876;//in GeV + _mW=80.379;//in GeV + + //gmu scheme shall be used by taking the above three parameters as an input + _cw2=_mW/_mZ; _cw2*=_cw2;_sw2=1.0-_cw2;_alpha=_mW*_mW*sqrt(2.0)*_GF*_sw2/PI; +} +*/ + + +ElectroWeak::ElectroWeak(){ + //Here, all the values are taken from PDG 2018 + //_GF=1.1663787e-5;//in GeV^{-2} + _mZ=91.1876;//in GeV + _mW=80.398;//in GeV + + //gmu scheme shall be used by taking the above three parameters as an input + _sw2=0.22264585;_cw2=1-_sw2;_alpha=1.0/132.33843228; +} + diff --git a/.github/entrypoint/artifact/ElectroWeak.h b/.github/entrypoint/artifact/ElectroWeak.h new file mode 100644 index 000000000..e2854e7c1 --- /dev/null +++ b/.github/entrypoint/artifact/ElectroWeak.h @@ -0,0 +1,20 @@ + +class ElectroWeak{ + private: + + double _mZ;//Z boson mass in GeV + double _mW;//W boson mass in GeV + double _GF;//G_F in GeV^{-2} + + double _cw2;//cos(theta_W)^2 + double _sw2;//sin(theta_W)^2 + double _alpha;//elecromagnetic alpha + + public: + ElectroWeak(); + //ElectroWeak~(); + double cw2(){return _cw2;} + double sw2(){return _sw2;} + double alpha(){return _alpha;} +}; + diff --git a/.github/entrypoint/artifact/Makefile b/.github/entrypoint/artifact/Makefile new file mode 100644 index 000000000..248ccc31d --- /dev/null +++ b/.github/entrypoint/artifact/Makefile @@ -0,0 +1,99 @@ +CC=g++ +IPDF=-I/Users/biwu/Software/LHAPDF/include +LPDF=-L/Users/biwu/Software/LHAPDF/lib -lLHAPDF +#IGSL=-I/usr/local/include/ +#LGSL=-L/usr/local/lib -lgsl -lgslcblas -lm + +#IPDF=-I/home/bwu/Softwares/LHAPDF/include +#LPDF=-L/home/bwu/Softwares/LHAPDF/lib -lLHAPDF +IGSL=-I/usr/local/include/ +LGSL=-L/usr/local/lib -lgsl -lgslcblas -lm + + +All: resum + +Particle.o: Particle.c Particle.h + $(CC) -Wall -c Particle.c + +QCD.o: QCD.c QCD.h + $(CC) -Wall $(IPDF) -c QCD.c + +ElectroWeak.o: ElectroWeak.c ElectroWeak.h + $(CC) -Wall -c ElectroWeak.c + +BosonJet.o: BosonJet.c BosonJet.h + $(CC) -Wall $(IPDF) -c BosonJet.c + +#Born cross section + +BosonJetBorn.o: BosonJetBorn.c BosonJetBorn.h + $(CC) -Wall $(IPDF) -c BosonJetBorn.c + +born.o: born.c + $(CC) -Wall $(IPDF) $(IGSL) -c born.c + +born: born.o BosonJetBorn.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall born.o BosonJetBorn.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o born + +#properties of qcd + +test_qcd.o: test_qcd.c + $(CC) -Wall $(IPDF) -c test_qcd.c + +test_qcd: test_qcd.o QCD.o Particle.o + $(CC) -Wall test_qcd.o QCD.o Particle.o $(LPDF) -o test_qcd + +#Fixed order result at LO (O(alphas)) + +BosonJetLO.o: BosonJetLO.c BosonJetLO.h + $(CC) -Wall $(IPDF) -c BosonJetLO.c + +main.o: main.c + $(CC) -Wall $(IPDF) $(IGSL) -c main.c + +LO: main.o BosonJetLO.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall main.o BosonJetLO.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o LO + +#Resummed result + +BosonJetResum.o: BosonJetResum.c BosonJetResum.h + $(CC) -Wall $(IPDF) -c BosonJetResum.c + +#css + +BosonJetCSS.o: BosonJetCSS.c BosonJetCSS.h + $(CC) -Wall $(IPDF) -c BosonJetCSS.c + +css.o: css.c + $(CC) -Wall $(IPDF) $(IGSL) -c css.c + +css: css.o BosonJetCSS.o BosonJetResum.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall css.o BosonJetCSS.o BosonJetResum.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o css + +#R resummed + +BosonJetNLL.o: BosonJetNLL.c BosonJetNLL.h + $(CC) -Wall $(IPDF) -c BosonJetNLL.c + +resum.o: resum.c + $(CC) -Wall $(IPDF) $(IGSL) -c resum.c + +resum: resum.o BosonJetNLL.o BosonJetResum.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall resum.o BosonJetNLL.o BosonJetResum.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o resum + +#tot + +BosonJetNLL.o: BosonJetNLL.c BosonJetNLL.h + $(CC) -Wall $(IPDF) -c BosonJetNLL.c + +tot.o: tot.c + $(CC) -Wall $(IPDF) $(IGSL) -c tot.c + +tot: tot.o BosonJetNLL.o BosonJetResum.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall tot.o BosonJetNLL.o BosonJetResum.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o tot + + +clean: + rm *.o + rm resum + rm tot diff --git a/.github/entrypoint/artifact/Particle.c b/.github/entrypoint/artifact/Particle.c new file mode 100644 index 000000000..66b0439df --- /dev/null +++ b/.github/entrypoint/artifact/Particle.c @@ -0,0 +1,30 @@ +#include +#include "Particle.h" + +Particle::Particle(){ + _m=0.0;_e=0.0;_name="UFO";_id=-273; +} + +Particle::Particle(string name, int id, double m, double e){ + _name=name;_id=id;_m=m;_e=e; +} + +void Particle::setParticle(string name, int id, double m, double e){ + _name=name;_id=id;_m=m;_e=e; +} + + +double Particle::m(){ + return _m; +} + +int Particle::id(){return _id;} +double Particle::e(){return _e;} +string Particle::name(){return _name;} + +/* +int main(){ + Particle pl; + return 0; +} +*/ diff --git a/.github/entrypoint/artifact/Particle.h b/.github/entrypoint/artifact/Particle.h new file mode 100644 index 000000000..753979e97 --- /dev/null +++ b/.github/entrypoint/artifact/Particle.h @@ -0,0 +1,26 @@ +#include + +using namespace std; + +class Particle{ + private: + + string _name;//particle name + double _m;//particle mass + double _e;//electric charge in the unit of the elementary charge e + int _id;//particle id according to PDF particle codes + + + public: + + enum _type {d=1,u=2,s=3,c=4,b=5,t=6,g=21,photon=22,Z0=23,Wp=24}; + + Particle(); + Particle(string name, int id, double m,double e); + //~Particle(){}; + void setParticle(string name, int id, double m,double e); + double m(); + int id(); + double e(); + string name(); +}; diff --git a/.github/entrypoint/artifact/QCD.c b/.github/entrypoint/artifact/QCD.c new file mode 100644 index 000000000..2dab63d62 --- /dev/null +++ b/.github/entrypoint/artifact/QCD.c @@ -0,0 +1,122 @@ +#include +#include "QCD.h" +#include + +using namespace std; + +QCD::QCD(unsigned int nf){ + /*Here, one needs to download the pdfset from + https://lhapdf.hepforge.org/pdfsets.html + and put it into the folder which can be found out by lhapdf-config --datadir. + */ + _nf=nf; + init(); +} + +QCD::QCD(){ + /*Here, one needs to download the pdfset from + https://lhapdf.hepforge.org/pdfsets.html + and put it into the folder which can be found out by lhapdf-config --datadir. + */ + _nf=5; + init(); +} + +void QCD::init(){ + const int imem = 0; + _Nc=3.0;_CF=4.0/3.0; + _beta0=11.0*_Nc/3.0 - 2.0*_nf/3.0; + _beta1=34.0*_Nc*_Nc/3.0-10.0*_Nc*_nf/3.0-2.0*_CF*_nf; + _gcusp0=4.0;_gcusp1=(268.0/9.0-4.0*M_PI*M_PI/3.0)*_Nc-40.0*_nf/9.0; + _pdf = mkPDF("CT14nlo", imem); + _partons=new Particle[7]; + _partons[0].setParticle("g",21, 0.0, 0.0); + _partons[1].setParticle("d",1, 0.0, -1.0/3.0); + _partons[2].setParticle("u",2, 0.0, 2.0/3.0); + _partons[3].setParticle("s",3, 0.0, -1.0/3.0); + _partons[4].setParticle("c",4, 0.0, 2.0/3.0); + _partons[5].setParticle("b",5, 0.0, -1.0/3.0); + _partons[6].setParticle("t",6,173.0, 2.0/3.0); + +} + +QCD::~QCD(){ + delete _pdf; + delete [] _partons; +} + +double QCD::pdf(int f,double x,double Q){ + return _pdf->xfxQ(f,x,Q)/x; +} + +double QCD::alphas(double Q){ + return _pdf->alphasQ(Q); +} + +double QCD::Pqg(double z){ + double res=0.0; + if(z>0&&z<=1.0) + res=z*z-z+0.5; + return res; +} + +double QCD::Pqg(double z,double x, double Q){ + double res=0.0; + if(z<1.0&&z>x) + res=Pqg(z)*pdf(21,x/z,Q)/z; + return res; +} + +double QCD::Pgq(double z){ + double res=0.0; + if(z>0&&z<1.0) + res=_CF*(z-2.0+2.0/z); + return res; +} + +double QCD::Pgq(double z,double x, double Q){ + double res=0.0; + if(z<1.0&&z>x){ + for(unsigned int i=1;i<=_nf;i++){ + res+=pdf(i,x/z,Q); + } + res*=Pgq(z)/z; + } + return res; +} + +double QCD::Pgqb(double z,double x, double Q){ + double res=0.0; + if(z<1.0&&z>x){ + for(unsigned int i=1;i<=_nf;i++){ + res+=pdf(-i,x/z,Q); + } + res*=Pgq(z)/z; + } + return res; +} + +double QCD::Pqq(int flavor, double z,double x, double Q){ + double res=0.0; + if(z<1.0&&z>0.0){ + double qsumx=pdf(flavor,x,Q); + res=1.5*qsumx;//Here, we have to make sure the range for z integration is from 0 to 1 + double qsum=0.0; + if(z>x) qsum=pdf(flavor,x/z,Q); + res+=((1.0+z*z)*qsum/z-2.0*qsumx)/((1.0-z)); + res*=_CF; + } + return res; +} + +double QCD::Pgg(double z, double x, double Q){ + double res=0.0; + if(z<1.0&&z>0.0){ + res=(11.0*_Nc/6.0-_nf/3.0)*pdf(21,x,Q);//Here, we have to make sure the range for z integration is from 0 to 1 + if(z>x) + res+=2.0*_Nc*( ( z*z-z+1.0 )*(z*z-z+1.0)*pdf(21,x/z,Q)/(z*z) - pdf(21,x,Q) )/(1.0-z); + else + res+=-2.0*_Nc*pdf(21,x,Q)/(1.0-z); + } + return res; +} diff --git a/.github/entrypoint/artifact/QCD.h b/.github/entrypoint/artifact/QCD.h new file mode 100644 index 000000000..728065f03 --- /dev/null +++ b/.github/entrypoint/artifact/QCD.h @@ -0,0 +1,39 @@ +#include "Particle.h" +#include "LHAPDF/LHAPDF.h" + +using namespace LHAPDF; + +/*namespace colorfactor{ + double _Nc=3.0; + double _CF=4.0/3.0; +} +*/ + +class QCD{ + private: + const PDF* _pdf; + unsigned int _nf;//flavors of quarks, 5 by default + + public: + + double _Nc, _CF;//number of colors + //const static double _Nc=3.0, _CF=4.0/3.0;//number of colors + double _beta0, _beta1, _gcusp0, _gcusp1;//_gcusp=gamma^cusp + Particle *_partons; + QCD(); + QCD(unsigned int); + ~QCD(); + void init(); + + double pdf(int,double x,double Q);//PDF as a function of flavor, x and Q + double alphas(double Q);//the strong coupling alpha_s as a function of Q + + double Pqg(double z); + double Pqg(double z, double x, double Q); + double Pgq(double z); + double Pgq(double z, double x, double Q); + double Pgqb(double z, double x, double Q); + double Pgg(double z, double x, double Q); + double Pqq(int flavor, double z, double x, double Q); + +}; diff --git a/.github/entrypoint/artifact/README.md b/.github/entrypoint/artifact/README.md new file mode 100644 index 000000000..b189dc632 --- /dev/null +++ b/.github/entrypoint/artifact/README.md @@ -0,0 +1,3 @@ +# SM +C++ code for hadron colliders. +Published papers using this code: JHEP 1911 (2019) 025. diff --git a/.github/entrypoint/artifact/StandardModel.h b/.github/entrypoint/artifact/StandardModel.h new file mode 100644 index 000000000..5874957cc --- /dev/null +++ b/.github/entrypoint/artifact/StandardModel.h @@ -0,0 +1,19 @@ +/* + This class is used for parameters in ElectroWeak theory + Created on January 5 2019 by Bin Wu. +*/ + +class ElectroWeak{ + private: + + double _mZ;//Z boson mass + double _mW;//W boson mass + double _GF;//Fermi coupling constant G_F + double _sw2;//sin(theta_W)^2 + double _cw2;//cos(theta_W)^2 + double _alpha;//electromagnetic coupling + + public: + ElectroWeak(); + //~ElectroWeak(); +}; diff --git a/.github/entrypoint/artifact/born.c b/.github/entrypoint/artifact/born.c new file mode 100644 index 000000000..3a4f2c4b0 --- /dev/null +++ b/.github/entrypoint/artifact/born.c @@ -0,0 +1,52 @@ +#include "BosonJetBorn.h" +#include +#include +#include +#include + +using namespace std; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={yB,yJ}; + BosonJetBorn *bj=(BosonJetBorn*)p; + bj->setKinematics(bj->getpT(),y[0],y[1]); + return bj->sigmaLO(bj->getpT(),bj->getpT()); +} + + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetBorn ZJ(1.3e4,&Z0); + + //range of the integration: from ymin to ymax + double ymin[]={-2.4,-2.4}; + double ymax[]={2.4,2.4}; + + int dim=2; + size_t calls = 50000; + ZJ.setupMC( &dsigmadqT, dim, ymin,ymax, &ZJ); + ZJ.setCalls(calls); + //output file: + + stringstream filename; + ZJ.getFilename(filename, ymax[1]); + cout << filename.str() << endl; + ofstream f(filename.str(), ofstream::out | ofstream::app); + + double pT[]={35.5, 50., 71., 100.5, 143., 194., 260., 350.}; + for(int i=0;i<21;i++){ + ZJ.setpT(pT[i]); + ZJ.calculate(pT[i],f); + //cout << (0.5772156649015329+log(0.5*qT[i]))/(M_PI*qT[i]*qT[i]) << endl; + } + + f << "\n\n"; + f.close(); + + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/artifact/css.c b/.github/entrypoint/artifact/css.c new file mode 100644 index 000000000..2fcb491d0 --- /dev/null +++ b/.github/entrypoint/artifact/css.c @@ -0,0 +1,72 @@ +#include "BosonJetCSS.h" +#include +#include +#include +#include + +using namespace std; + + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, pT, yB,yJ}; + BosonJetCSS *bj=(BosonJetCSS *)p; + return bj->sigmaCSS(y[0],y[1],y[2],y[3]); +} + + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetCSS ZJ(1.3e4,&Z0); + + double R=0.2;ZJ.setR(R); + + /* + double pT=30.0,yB=0.1,yJ=0.2,muh=100.0,mu=10.0,muJ=10.0,xT=0.2,qT=1.0;ZJ.setqT(qT); + ZJ.setKinematics(pT,yB,yJ);ZJ.getKinematics(); + ZJ.setScale(mu,muJ,muh); + cout << setprecision(15) << ZJ. RGInvariance(0.1,0.2,0.3,0.4,0.5,0.6,0.7) << endl; + cout << setprecision(15) << ZJ. RGInvariance(1.1,3.2,5.3,9.4,1.5,0.6,0.7) << endl; + + */ + //range of the integration: from ymin to ymax + double ymin[]={0.0,200.0,-10.0,-2.4}; + double ymax[]={3.0,6500.0,10.0,2.4}; + + int dim=4; + size_t calls = 50000; + ZJ.setupMC( &dsigmadqT, dim, ymin,ymax, &ZJ); + ZJ.setCalls(calls); + //output file: + + stringstream filename; + ZJ.getFilename(filename, ymin[1],ymax[1]); + cout << filename.str() << endl; + ofstream f(filename.str(), ofstream::out | ofstream::app); + + + double qT[]={1., 1.1273, 1.27082, 1.4326, 1.61497, 1.82056, 2.05233, 2.3136, + 2.60813, 2.94016, 3.31445, 3.7364, 4.21206, 4.74827, 5.35275, + 6.03418, 6.80235, 7.66832, 8.64453, 9.74502, 10.9856, 12.3841, + 13.9607, 15.7379, 17.7414, 20., 22.5461, 25.4163, 28.6519, 32.2994, + 36.4113, 41.0466, 46.272, 52.1626, 58.8032, 66.2891, 74.728, 84.2412, + 94.9654, 107.055, 120.684, 136.047, 153.366, 172.891, 194.9, 219.712, + 247.682, 279.213, 314.759, 354.829, 400.}; + /*{1., 1.25893, 1.58489, 1.99526, 2.51189, 3.16228, 3.98107, 5.01187, + 6.30957, 7.94328, 10., 12.5893, 15.8489, 19.9526, 25.1189, 31.6228, + 39.8107, 50.1187, 63.0957, 79.4328, 100.};*/ + for(int i=0;i<51;i++){ + ZJ.setqT(qT[i]); + ZJ.calculate(qT[i],f); + //cout << (0.5772156649015329+log(0.5*qT[i]))/(M_PI*qT[i]*qT[i]) << endl; + } + + f << "\n\n"; + f.close(); + + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/artifact/main.c b/.github/entrypoint/artifact/main.c new file mode 100644 index 000000000..d33c17e1d --- /dev/null +++ b/.github/entrypoint/artifact/main.c @@ -0,0 +1,114 @@ +#include "BosonJetLO.h" +#include +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +using namespace std; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={pT, yB,yJ,z}; + //parameter list p: BosonJet, qT, R, chan + struct ParaQT *para=(struct ParaQT *)p; + double res; + switch(para->_chan){ + case 0: + res=para->_bj->sigma(para->_qT, y[0],y[1],y[2],y[3],para->_R,y[0]); + break; + case 1: + res=para->_bj->sigmaqg(para->_qT, y[0],y[1],y[2],y[3],para->_R,y[0]); + break; + case 2: + res=para->_bj->sigmaqqb(para->_qT, y[0],y[1],y[2],y[3],para->_R,y[0]); + break; + case 3: + res=para->_bj->sigmagg(para->_qT, y[0],y[1],y[2],y[3],y[0]); + break; + case 4: + res=para->_bj->sigmaqq(para->_qT, y[0],y[1],y[2],y[3],y[0]); + break; + case 5: + res=para->_bj->sigmaqbqb(para->_qT, y[0],y[1],y[2],y[3],y[0]); + break; + } + return res; +} + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetLO ZJ(1.3e4,&Z0); + //double qT=0.1, pT=500.0, yB=0.5, yJ=0.1,z=0.9999; + //cout << ZJ.sigmaqqb(qT, pT, yB, yJ, z, 0.01, pT) << endl; + + //range of the integration: from ymin to ymax + double ymin[]={30.0,-10.0,-2.4,0.0}; + double ymax[]={6500.0,10.0,2.4,1.0}; + + //integration + struct ParaQT para; + para._bj=&ZJ; para._R=0.2;para._chan=0; + + int dim=4; + size_t calls = 50000; + ZJ.setupMC( &dsigmadqT, dim, ymin,ymax, ¶); + ZJ.setCalls(calls); + //output file: + + stringstream filename; + ZJ.getFilename(filename, para._R, para._chan, ymin[0], ymax[0]); + cout << filename.str() << endl; + ofstream f(filename.str(), ofstream::out | ofstream::app); + + double qT[]={1., 1.1273, 1.27082, 1.4326, 1.61497, 1.82056, 2.05233, 2.3136, + 2.60813, 2.94016, 3.31445, 3.7364, 4.21206, 4.74827, 5.35275, + 6.03418, 6.80235, 7.66832, 8.64453, 9.74502, 10.9856, 12.3841, + 13.9607, 15.7379, 17.7414, 20., 22.5461, 25.4163, 28.6519, 32.2994, + 36.4113, 41.0466, 46.272, 52.1626, 58.8032, 66.2891, 74.728, 84.2412, + 94.9654, 107.055, 120.684, 136.047, 153.366, 172.891, 194.9, 219.712, + 247.682, 279.213, 314.759, 354.829, 400.};/*{0.106101, 0.119047, 0.133573, 0.149872, 0.168159, 0.188677, + 0.211699, 0.23753, 0.266513, 0.299033, 0.335521, 0.37646, 0.422395, + 0.473935, 0.531764, 0.596649, 0.669452, 0.751137, 0.84279, 0.945625, + 1.06101, 1.19047, 1.33573, 1.49872, 1.68159, 1.88677, 2.11699, + 2.3753, 2.66513, 2.99033, 3.35521, 3.7646, 4.22395, 4.73935, 5.31764, + 5.96649, 6.69452, 7.51137, 8.4279, 9.45625}; + {1., 1.25893, 1.58489, 1.99526, 2.51189, 3.16228, 3.98107, 5.01187, + 6.30957, 7.94328, 10., 12.5893, 15.8489, 19.9526, 25.1189, 31.6228, + 39.8107, 50.1187, 63.0957, 79.4328, 100.};*/ + for(int i=0;i<51;i++){ + para._qT=qT[i]; + if(para._chan>5){ + int chan=para._chan; + double res[2]; + f << qT[i]; + for(para._chan=0;para._chan<=5;para._chan++){ + //cout << para._chan << endl; + ZJ.calculate(qT[i],res); + f << " " << res[0] << " " << res[1]; + } + f << endl; + para._chan=chan; + } + else{ + double res[2]; + f << qT[i]; + //cout << para._chan << endl; + ZJ.calculate(qT[i],res); + f << " " << res[0]/qT[i] << " " << res[1]/qT[i] << endl;//save as dsigma/dqT + } + } + + f << "\n\n"; + f.close(); + + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/artifact/nllR.c b/.github/entrypoint/artifact/nllR.c new file mode 100644 index 000000000..6f9628c2b --- /dev/null +++ b/.github/entrypoint/artifact/nllR.c @@ -0,0 +1,67 @@ +#include "BosonJetResum.h" +#include +#include +#include +#include + +using namespace std; + +struct ParaQT{BosonJetResum *_bj; int _chan;}; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, phi, pT, yB,yJ}; + BosonJetResum *bj=(BosonJetResum *)p; + double cphix=cos(y[1]); + return bj->sigmaqqbR(y[0],cphix,y[2],y[3],y[4]); +} + + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetResum ZJ(1.3e4,&Z0); + + double R=0.4;ZJ.setR(R); + + /* + double pT=30.0,yB=0.1,yJ=0.2,muh=100.0,mu=10.0,muJ=10.0,xT=0.2,qT=1.0;ZJ.setqT(qT); + ZJ.setKinematics(pT,yB,yJ);ZJ.getKinematics(); + ZJ.setScale(mu,muJ,muh); + cout << setprecision(15) << ZJ. RGInvariance(0.1,0.2,0.3,0.4,0.5,0.6,0.7) << endl; + cout << setprecision(15) << ZJ. RGInvariance(1.1,3.2,5.3,9.4,1.5,0.6,0.7) << endl; + + */ + //range of the integration: from ymin to ymax + double ymin[]={0.0,-0.5*M_PI,30.0,-10.0,-2.4}; + double ymax[]={3.0,0.5*M_PI,6500.0,10.0,2.4}; + + int dim=5; + size_t calls = 500000; + ZJ.setupMC( &dsigmadqT, dim, ymin,ymax, &ZJ); + ZJ.setCalls(calls); + //output file: + + stringstream filename; + ZJ.getFilename(filename, ymin[2],ymax[2]); + cout << filename.str() << endl; + ofstream f(filename.str(), ofstream::out | ofstream::app); + + + double qT[]={1., 1.25893, 1.58489, 1.99526, 2.51189, 3.16228, 3.98107, 5.01187, + 6.30957, 7.94328, 10., 12.5893, 15.8489, 19.9526, 25.1189, 31.6228, + 39.8107, 50.1187, 63.0957, 79.4328, 100.}; + for(int i=0;i<21;i++){ + ZJ.setqT(qT[i]); + ZJ.calculate(qT[i],f); + //cout << (0.5772156649015329+log(0.5*qT[i]))/(M_PI*qT[i]*qT[i]) << endl; + } + + f << "\n\n"; + f.close(); + + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/artifact/python/LICENSE b/.github/entrypoint/artifact/python/LICENSE new file mode 100644 index 000000000..c4f387f15 --- /dev/null +++ b/.github/entrypoint/artifact/python/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Neural Field Transformations For Lattice QCD + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.github/entrypoint/artifact/python/README.md b/.github/entrypoint/artifact/python/README.md new file mode 100644 index 000000000..37ef8dc43 --- /dev/null +++ b/.github/entrypoint/artifact/python/README.md @@ -0,0 +1,32 @@ +# lgt +Collection of objects / models for Lattice Gauge Theory + +## Install +`python3 -m pip install lgt`
+`python3 -m pip install -e /path/to/this/repo` + +## Organization +``` +πŸ“ lgt/ +β”œβ”€β”€πŸ“ group/ +β”‚Β Β  β”œβ”€β”€ generators.py +β”‚Β Β  └── group.py +└── πŸ“ lattice/ + β”œβ”€β”€πŸ“ su3/ + β”‚Β Β  β”œβ”€β”€πŸ“ numpy/ + β”‚Β Β  β”‚Β Β  └── lattice.py + β”‚Β Β  β”œβ”€β”€πŸ“ pytorch/ + β”‚Β Β  β”‚Β Β  └── __init__.py + β”‚Β Β  β””β”€β”€πŸ“ tensorflow/ + β”‚Β Β  └── lattice.py + β”œβ”€β”€πŸ“ sun/ + β”‚Β Β  β”œβ”€β”€ logm.py + β”‚Β Β  └── sun.py + β””β”€β”€πŸ“ u1/ + β”œβ”€β”€πŸ“ numpy/ + β”‚Β Β  └── lattice.py + β”œβ”€β”€πŸ“ pytorch/ + β”‚Β Β  └── lattice.py + β””β”€β”€πŸ“ tensorflow/ + └── lattice.py +``` diff --git a/.github/entrypoint/artifact/python/colour_matrices.py b/.github/entrypoint/artifact/python/colour_matrices.py new file mode 100644 index 000000000..160ddba47 --- /dev/null +++ b/.github/entrypoint/artifact/python/colour_matrices.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +"""Small program to explore colour matrices and structure constants in QCD. + +Written by Gavin Salam as an illustration for lecture 1 of the QCD +course at the 2024 European School of High-Energy Physics. +""" +import numpy as np + +def main(): + + print("Warning: the A,B,C indices here run from 0 to 7, not 1 to 8 as in the lecture notes.") + print("Warning: the a,b,c indices here run from 0 to 2, not 1 to 3 as in the lecture notes.") + + nF = 3 # number of degrees of freedom in Fundamental representation (quarks) + nA = 8 # number of degrees of freedom in Adjoint representation (gluos) + lambdas = get_lambdas() + ts = [0.5*l for l in lambdas] + + #--------------------------------------------- + header("check Tr(t^A t^B) = T_R delta^{AB}") + for A in range(nA): + for B in range(nA): + trace = np.trace(np.matmul(ts[A],ts[B])) + if abs(trace)>1e-10: print(f"{A=} {B=}: Trace(t^A t^B)={trace}") + + #--------------------------------------------- + header("check Sum_A(t_{ab}^A t_{bc}^A) = C_F \\delta_{ac}") + sum = np.zeros((3,3),dtype=complex) + for A in range(nA): + sum += np.matmul(ts[A],ts[A]) + for a in range(nF): + for c in range(nF): + print(f"{a=} {c=}: Sum_A(t_{{ab}}^A t_{{bc}}^A)={sum[a][c]}") + + #--------------------------------------------- + header("Examine the non-zero fABCs (A 1e-10: print(f"{A=} {B=} {result=}") + +def header(title): + print() + print("-"*len(title)) + print(title) + print("-"*len(title)) + +def non_zero_entries(arr,imin, tag="i"): + res = [] + for i in range(imin, arr.shape[0]): + if abs(arr[i]) > 1e-10: res.append(f"{tag}={i}:{arr[i]}") + return ", ".join(res) + +def get_fABCs(ts): + "returns the fABC array" + + # get the ts supplemented by a unit array, which is needed to + # complete the basis below that we will use in solving for the fABCs + ts_plus_unit = np.array([t.flatten() + for t in ts+[np.diag(np.array([1,1,1],dtype=complex))] ]) + + nA = len(ts) + fABC = np.zeros((nA,nA,nA)) + for A in range(nA): + for B in range(nA): + tt = (np.matmul(ts[A],ts[B]) - np.matmul(ts[B],ts[A]))/complex(0,1) + ff = np.linalg.solve(ts_plus_unit.transpose(), tt.flatten()) + if abs(ff[nA]) > 1e-10: raise("illegal 9th component in nA") + fABC[A,B,:] = np.real(ff[:nA]) + #if B <= A: continue + #print(f"{A=} {B=}, fABC={fABC[A,B,:]}") + + return fABC + + +def get_lambdas(): + """Return the Gell-Mann matrices as a list of 3x3 numpy arrays.""" + i = complex(0,1) + lambdas = [0]*8 + lambdas[0] = [[ 0, 1, 0], + [ 1, 0, 0], + [ 0, 0, 0]] + + lambdas[1] = [[ 0,-i, 0], + [ i, 0, 0], + [ 0, 0, 0]] + + lambdas[2] = [[ 1, 0, 0], + [ 0,-1, 0], + [ 0, 0, 0]] + + lambdas[3] = [[ 0, 0, 1], + [ 0, 0, 0], + [ 1, 0, 0]] + + lambdas[4] = [[ 0, 0,-i], + [ 0, 0, 0], + [ i, 0, 0]] + + lambdas[5] = [[ 0, 0, 0], + [ 0, 0, 1], + [ 0, 1, 0]] + + lambdas[6] = [[ 0, 0, 0], + [ 0, 0,-i], + [ 0, i, 0]] + + lambdas[7] = [[ 1.0/np.sqrt(3), 0, 0], + [ 0, 1.0/np.sqrt(3), 0], + [ 0, 0,-2.0/np.sqrt(3)]] + + return [np.array(l,dtype=complex) for l in lambdas] + +if __name__ == "__main__": + main() diff --git a/.github/entrypoint/artifact/python/gellmann.ipynb b/.github/entrypoint/artifact/python/gellmann.ipynb new file mode 100644 index 000000000..c772c82a5 --- /dev/null +++ b/.github/entrypoint/artifact/python/gellmann.ipynb @@ -0,0 +1,815 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "7L2WbBt5uNag" + }, + "source": [ + "# 1. Preliminaries" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 5024, + "status": "ok", + "timestamp": 1584469489951, + "user": { + "displayName": "mahkame salimi", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GhXCkBWY2tBzsPtIAaeDyn3ng2gbWea3ReVrZhe=s64", + "userId": "11757140415455670736" + }, + "user_tz": -210 + }, + "id": "lHgp6b1NuNat", + "outputId": "472e7f3d-53e9-4c23-99a5-bb712c0be181" + }, + "outputs": [], + "source": [ + "##!pip3 install qutip\n", + "import qutip as qp\n", + "import numpy as np\n", + "from scipy.spatial import ConvexHull, Delaunay\n", + "import pandas as pd\n", + "from random import random, choice, randint\n", + "##from multiprocessing import Pool\n", + "##from concurrent.futures import ThreadPoolExecutor" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "CkRTqRe-uNa_" + }, + "source": [ + "# 2. Gell_Mann matrix generator function" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Xaqtqo1quNbD" + }, + "source": [ + "this function will generate the gellmann matrix of dimension d.\n", + "\n", + "the function \"gellmann(j,k,d)\" will generate the jth_kth gellmann matrix of dimension d. so for every d dimension we have d^2 gellmann matrix. one of them is I, so the number of gellmann matrix that is not trivial is (d^2 - 1)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "wjlZ7FERuNbH" + }, + "outputs": [], + "source": [ + "\"\"\"Generate generalized Gell-Mann matrices.\n", + " .. module:: gellmann.py\n", + " :synopsis: Generate generalized Gell-Mann matrices\n", + " .. moduleauthor:: Jonathan Gross \n", + "\"\"\"\n", + "from itertools import product\n", + "\n", + "def gellmann(j, k, d):\n", + " r\"\"\"Returns a generalized Gell-Mann matrix of dimension d.\n", + " \n", + " According to the convention in *Bloch Vectors for Qubits* by Bertlmann and\n", + " Krammer (2008), returns :math:`\\Lambda^j` for :math:`1\\leq j=k\\leq d-1`,\n", + " :math:`\\Lambda^{kj}_s` for :math:`1\\leq k k:\n", + " gjkd = np.zeros((d, d), dtype=np.complex128)\n", + " gjkd[j - 1][k - 1] = 1\n", + " gjkd[k - 1][j - 1] = 1\n", + " elif k > j:\n", + " gjkd = np.zeros((d, d), dtype=np.complex128)\n", + " gjkd[j - 1][k - 1] = -1.j\n", + " gjkd[k - 1][j - 1] = 1.j\n", + " elif j == k and j < d:\n", + " gjkd = np.sqrt(2/(j*(j + 1)))*np.diag([1 + 0.j if n <= j\n", + " else (-j + 0.j if n == (j + 1)\n", + " else 0 + 0.j)\n", + " for n in range(1, d + 1)])\n", + " else:\n", + " gjkd = np.diag([1 + 0.j for n in range(1, d + 1)])\n", + "\n", + " return gjkd\n", + "\n", + "def get_basis(d):\n", + " r\"\"\"Return a basis of operators.\n", + " \n", + " The basis is made up of orthogonal Hermitian operators on a Hilbert space\n", + " of dimension d, with the identity element in the last place.\n", + " Parameters\n", + " ----------\n", + " d : int\n", + " The dimension of the Hilbert space.\n", + " Returns\n", + " -------\n", + " list of numpy.array\n", + " The basis of operators.\n", + " \"\"\"\n", + " return [gellmann(j, k, d) for j, k in product(range(1, d + 1), repeat=2)]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "1yB7X5nruNbU" + }, + "source": [ + "in this cell the gellmann matrix of 3 dimension will generate and they will save in a dictionary and labeled them by numbers 0,1,...,8 ." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "trodoU6zuNbY" + }, + "outputs": [], + "source": [ + "def gellmann_basis(d):\n", + " \"\"\" generalization gellmann matrice \n", + " input : dimesion of system\n", + " output: dictionary of gellmann matrices of dimension 'd'\n", + " \"\"\"\n", + " \n", + " gellmann_basis = {} ## a dictionary that saved the gellmann matrices\n", + "\n", + " k=0\n", + " for i in range(1,d+1):\n", + " for j in range(1,d+1):\n", + " gellmann_basis.update({\"G{}\".format(k):gellmann(i,j,d)})\n", + " k+=1\n", + " \n", + " return gellmann_basis\n", + "\n", + "#gellmann_basis(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "K4Ck7uDYuNbl" + }, + "source": [ + "# 3. Coefficients of gellmann's expansion" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_sL95KUXuNbp" + }, + "source": [ + "at this cell a random density matrix will generate by qutip library.\n", + "\n", + "for calculating the coefficients of gellmann expansion we do this iteration:\n", + "1. calculate the tensor product of gellmann matrices for every coefficient\n", + "2. calculate the dot product of \"ro\" and the \"gellmann's tensor product\"\n", + "3. calculate the trace of this matrix and divide it into 4\n", + "4. append it to our index list" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2Upf2jQDuNbt" + }, + "outputs": [], + "source": [ + "def coef_of_gellmann(ro, d_sub1, d_sub2):\n", + " \"\"\" coefficient of gellmann expansion \n", + " input : density matrix and dimensions of two subsystem\n", + " output: dictionary of coefficient\n", + " \"\"\"\n", + " \n", + " coef = {} ## the coefficient's dictionary (suitable format for saving as a data)\n", + " gellmann_basis_d_sub1 = gellmann_basis(d_sub1) ## the gellmann matrix for a d_sub1 dimension system\n", + " gellmann_basis_d_sub2 = gellmann_basis(d_sub2) ## the gellmann matrix for a d_sub2 dimension system\n", + " \n", + " n1 = d_sub1**2\n", + " n2 = d_sub2**2\n", + " for i in range(n1):\n", + " for j in range(n2):\n", + " tensorP = np.kron(gellmann_basis_d_sub1[\"G{}\".format(i)],gellmann_basis_d_sub2[\"G{}\".format(j)]) ## Tensor product of gelllmann matrices\n", + " c = np.trace(np.dot(ro,tensorP))/4 ## dot product and trace\n", + " c = c.real ## all of gellmann coefs is a real\n", + " c = round(c,8) \n", + " coef.update({\"a{}{}\".format(i,j):c}) ## update the coef dict by a[i][j] and its gellmann coef for g[i][j]\n", + "\n", + " index = np.array(coef) ## change list to np.array() object\n", + " return coef" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "vfa0qkq6uNb6" + }, + "source": [ + "this cell is just a test of this algotithm in 3 dimension bipatite systems." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "uA-NxF1vuNcA" + }, + "outputs": [], + "source": [ + "N = 3\n", + "\n", + "ro = qp.rand_dm(N*N,0.5,dims=[[N,N], [N,N]])\n", + "#print(coef_of_gellmann(ro))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "jSoxsPBiuNcJ" + }, + "source": [ + "# 4. Generate entangled states (PPT)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this cell we define a PPT funcion that check positive partial transpose." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "VWGoxF5EuNcL" + }, + "outputs": [], + "source": [ + "def PPT(ro, d_sub1, d_sub2):\n", + " \"\"\" positive partial transpose \n", + " input : density matrix and the dimension of subsystem 1 and subsystem 2\n", + " output: dictionary of coefficient of gellmann matrices and label 1 or 2 for entangeled states and unknown respectivly\n", + " \"\"\"\n", + " \n", + " ro_pt = qp.partial_transpose(ro,[0,1]) ## partial transpose in subsystem 2\n", + " eig = ro_pt.eigenstates() ## calculate the eigenvalues and eigenstates\n", + " eigv = [round(i,8) for i in eig[0]] \n", + " \n", + " result = coef_of_gellmann(ro, d_sub1, d_sub2)\n", + " \n", + " if (eigv[0]<0 ):\n", + " result.update({\"label\":1}) ## the entangled states that labeled by 1\n", + " return result\n", + " else :\n", + " result.update({\"label\":2}) ## the unknown states that labeled by 2\n", + " return result\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. Generate separable states (Convex combination)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in this cell we define two function that:\n", + "1. Convex_Combination: this function is give a matrix list and return a convex combination of this matrices\n", + "2. generate_ran_den_list: this function is generate a list of random density matrices" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def Convex_Combination(matrix_list1, matrix_list2, index=10):\n", + " \"\"\" Convex Combination \n", + " input : two list of matrices that you want to build a convex combination of them. index is the number of iteration\n", + " output: a state that is a convex combination of input\n", + " \"\"\"\n", + " \n", + " coef = np.random.dirichlet(np.ones(index), size=1) ## generating list of numbers that is positive and its sum is 1 with length equal to 'index'\n", + " \n", + " seprable_state = qp.Qobj() ## build an empty Qobj for cycle\n", + " for i in range(index):\n", + " a = choice(matrix_list1) ## choice a density matrix randomly\n", + " b = choice(matrix_list2) ## choice a density matrix randomly\n", + " \n", + " tensorP = np.kron(a,b) ## Tensor product of density matrices\n", + " tensorP *= round(coef[0][i],8) ## product of tensorP and a coef that come from the coef list\n", + " \n", + " seprable_state += tensorP ## at the last its a convex combination of tensor product of density matrices\n", + " \n", + " return seprable_state\n", + "\n", + "\n", + "def generate_ran_den_list(d, length= 100):\n", + " \"\"\" generate random density matrix list \n", + " input : dimension of system and the lenght of list\n", + " output: list of random density matrix with dimension 'd'\n", + " \"\"\"\n", + " \n", + " result = []\n", + " for i in range(length):\n", + " density = round(random(),4) ## for build a random number between 0 and 1\n", + "\n", + " rand = qp.rand_dm(d, density) ## generate a random density matrix with dimension N\n", + " result.append(rand) ## appending this random density matrix to ran_den_mat list \n", + " \n", + " return result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 6. Convex hull approximation method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Making a Convex Hull for a 2_qutrit system and checking for new points in the convex Hull" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "d_sub1 = 3\n", + "d_sub2 = 3\n", + "num_extreme_points = 83\n", + "index = np.zeros((1,81))\n", + "\n", + "for i in range(num_extreme_points):\n", + " ro = qp.rand_dm(d_sub1 * d_sub2, pure=True)\n", + "\n", + " coef = list(coef_of_gellmann(ro, d_sub1, d_sub2).values())\n", + " coef = np.reshape(np.array(coef),(1,81))\n", + " index = np.vstack((index,coef))\n", + "#print(np.shape(index[1:,]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using different functions to build convex hull" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "#generating convex hull from extreme points(Pure separable states)\n", + "hull = Delaunay(index)\n", + "#hull = ConvexHull(index)\n", + "#print(index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function that checks if a point is in a convex hull" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "#This function checks if a point is in the convex hull or not\n", + "def in_hull(p, hull):\n", + " \"\"\"\n", + " Test if points in `p` are in `hull`\n", + "\n", + " `p` should be a `NxK` coordinates of `N` points in `K` dimensions\n", + " `hull` is either a scipy.spatial.Delaunay object or the `MxK` array of the \n", + " coordinates of `M` points in `K`dimensions for which Delaunay triangulation\n", + " will be computed\n", + " \"\"\"\n", + " from scipy.spatial import Delaunay\n", + " if not isinstance(hull,Delaunay):\n", + " hull = Delaunay(hull)\n", + "\n", + " return hull.find_simplex(p)>=0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "ro = qp.rand_dm(9) ## generate the random density matrix\n", + "\n", + "coef = list(coef_of_gellmann(ro,3,3).values())\n", + "coef = np.reshape(np.array(coef),(1,81)) \n", + "\n", + "#print(coef)\n", + "print(in_hull(index[20:,],index))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Making a Convex Hull for a 2_qubit system and checking for new points in the convex Hull." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "d_sub1 = 2\n", + "d_sub2 = 2\n", + "num_extreme_points = 20\n", + "index = np.zeros((1,16))\n", + "\n", + "for i in range(num_extreme_points):\n", + " ro = qp.rand_dm(d_sub1 * d_sub2, pure=True)\n", + " \n", + " coef = list(coef_of_gellmann(ro, d_sub1, d_sub2).values())\n", + " coef = np.reshape(np.array(coef),(1,16))\n", + " index = np.vstack((index,coef))\n", + "#print(np.real(index[1:,]))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hull = ConvexHull(index[:,])\n", + "in_hull(index[2,],index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 7. Generate data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in this cell we build 100 000 random states and labeled that. after that we build a data frame for saving and using in future." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "5kfhME1RuNcT" + }, + "outputs": [], + "source": [ + "%%time\n", + "\n", + "states={} #states\n", + "d_sub1 = 3 #dimension of subsystem 1\n", + "d_sub2 = 3 #dimension of subsystem 2\n", + "R1 = 50000 # the number of entangled states\n", + "\n", + "##generate the entangled states\n", + "for i in range (1, R1+1):\n", + " density = round(random(),4) ## for build a random number between 0 and 1\n", + " \n", + " ro = qp.rand_dm(d_sub1*d_sub2, density, dims=[[d_sub1,d_sub2], [d_sub1,d_sub2]]) #generating random density matrix with a random density\n", + " states.update({\"{}\".format(i):PPT(ro, d_sub1, d_sub2)}) # update the states by its number and label and gellmann coefs\n", + "\n", + "\n", + "##generate the separable states\n", + "R2 = 50000 # the number of seperable states\n", + "ran_den_mat1 = generate_ran_den_list(d_sub1, 100) ## a list of random density matrix for a system\n", + "ran_den_mat2 = generate_ran_den_list(d_sub2, 100) ## a list of random density matrix for a system\n", + "\n", + "for i in range(R1+1, R1+R2+1):\n", + " index = randint(10,100) ## build a integer number between 10 and 100 for using in function\n", + " sep = Convex_Combination(ran_den_mat1, ran_den_mat2, index) ## generate a random seprable density matrix\n", + " \n", + " sep_coef = coef_of_gellmann(sep, d_sub1, d_sub2) ## calculate the gellmann coefs\n", + " sep_coef.update({\"label\":0}) ## labeled seprable states by 0\n", + " \n", + " states.update({\"{}\".format(i):sep_coef}) ## update states\n", + " \n", + " \n", + "df = pd.DataFrame(data=states).T # build a data frame by pandas\n", + "\n", + "df.to_csv('data_of_states.csv.zip') #for saving the data in zip format\n", + "#df.to_excel('data_of_states.xlsx') #for saving tha data in an excel file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in this cell we save our data frame as a zip file" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 163 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 1231, + "status": "error", + "timestamp": 1584469470718, + "user": { + "displayName": "mahkame salimi", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GhXCkBWY2tBzsPtIAaeDyn3ng2gbWea3ReVrZhe=s64", + "userId": "11757140415455670736" + }, + "user_tz": -210 + }, + "id": "rt63ussFuNcc", + "outputId": "dae4bdb2-205b-4bbc-b702-de4e82d70511" + }, + "outputs": [], + "source": [ + "df.to_csv('data_of_states.csv.zip')\n", + "##df.to_csv('data_of_states.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in the blow cell we define a function that merge all of our data to a one data." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def merge(list_data):\n", + " N = len(list_data) #the number of datas\n", + " n = [len(i.index) for i in list_data] # length of index of every data\n", + " \n", + " new_datas = [list_data[0]]\n", + " index = {}\n", + " k = n[0]\n", + " for i in range(1,N):\n", + " last_index, new_index = [i for i in range(1,n[i]+1)], []\n", + " for j in range(1+k, n[i]+1+k):\n", + " new_index.append(j)\n", + " \n", + " index = {last_index[p]:new_index[p] for p in range(n[i])}\n", + " df = list_data[i]\n", + " df = df.rename(index = index)\n", + " new_datas.append(df)\n", + " k += n[i]\n", + " \n", + " result_data = pd.concat(new_datas)\n", + " return result_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "this function dont true work because of 'memory error'.\n", + "\n", + "so we dont merge datas and just fix their index for future." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "at this cell we read the unfixed datas. after that we drop the 'a88' column, because it's same for all." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "#df1 = pd.read_csv('data/data_of_states1.csv.zip', index_col=0, compression = 'zip')\n", + "#df2 = pd.read_csv('data/data_of_states2.csv.zip', index_col=0, compression = 'zip')\n", + "#df3 = pd.read_csv('data/data_of_states3.csv.zip', index_col=0, compression = 'zip')\n", + "#df4 = pd.read_csv('data/data_of_states4.csv.zip', index_col=0, compression = 'zip')\n", + "#df5 = pd.read_csv('data/data_of_states5.csv.zip', index_col=0, compression = 'zip')\n", + "#df6 = pd.read_csv('data/data_of_states6.csv.zip', index_col=0, compression = 'zip')\n", + "#df7 = pd.read_csv('data/data_of_states7.csv.zip', index_col=0, compression = 'zip')\n", + "#df8 = pd.read_csv('data/data_of_states8.csv.zip', index_col=0, compression = 'zip')\n", + "#df9 = pd.read_csv('data/data_of_states_100.csv.zip', index_col=0, compression = 'zip')\n", + "#df10 = pd.read_csv('data/data_of_states_200.csv.zip', index_col=0, compression = 'zip')\n", + "\n", + "df = df.drop(columns=['a88'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in this cell we fixed (rename) the index." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "k = 1000000\n", + "\n", + "a = [i for i in range(1,100000+1)]\n", + "b = [i for i in range(k+1,k+100000+1)]\n", + "c = {a[i]:b[i] for i in range(len(a))}\n", + "\n", + "df = df.rename(index = c)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#df10.to_csv('fixed_data/data_of_states_10(100 k).csv.zip')\n", + "#df1.to_csv('fixed_data/data_of_states_2(100 k).csv.zip')\n", + "#df2.to_csv('fixed_data/data_of_states_3(100 k).csv.zip')\n", + "#df3.to_csv('fixed_data/data_of_states_4(100 k).csv.zip')\n", + "#df4.to_csv('fixed_data/data_of_states_5(100 k).csv.zip')\n", + "#df5.to_csv('fixed_data/data_of_states_6(100 k).csv.zip')\n", + "#df6.to_csv('fixed_data/data_of_states_7(100 k).csv.zip')\n", + "#df7.to_csv('fixed_data/data_of_states_8(100 k).csv.zip')\n", + "#df8.to_csv('fixed_data/data_of_states_9(100 k).csv.zip')\n", + "#df9.to_csv('fixed_data/data_of_states_10(100 k).csv.zip')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 8. Correlation of data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the plot shows the correlation of 100000 random states" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn\n", + "\n", + "#import the data\n", + "df = pd.read_csv('fixed_data/data_of_states_4(100 k).csv.zip', index_col=0, compression = 'zip')\n", + "\n", + "# Compute the correlation matrix\n", + "corr = df.corr()\n", + "\n", + "# Set up the matplotlib figure\n", + "f, ax = plt.subplots(figsize=(8, 8))\n", + "\n", + "# Generate a custom diverging colormap\n", + "cmap = seaborn.diverging_palette(220, 10, as_cmap=True)\n", + "\n", + "# Draw the heatmap with the mask and correct aspect ratio\n", + "#data_mini = d.sample(10000)\n", + "seaborn.heatmap(corr, cmap=cmap, vmax=.3, center=0)\n", + "plt.show()" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "PPt.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/.github/entrypoint/artifact/python/gellmann.py b/.github/entrypoint/artifact/python/gellmann.py new file mode 100644 index 000000000..f2126f7c6 --- /dev/null +++ b/.github/entrypoint/artifact/python/gellmann.py @@ -0,0 +1,92 @@ +"""Generate generalized Gell-Mann matrices. + + .. module:: gellmann.py + :synopsis: Generate generalized Gell-Mann matrices + .. moduleauthor:: Jonathan Gross + + .. references:: + - https://arxiv.org/pdf/0806.1174.pdf + - https://github.com/iree-org/iree/tree/main/integrations/pjrt + - https://mathworld.wolfram.com/GeneralizedGell-MannMatrix.html + - https://github.com/husisy/klearning/blob/master/misc/draft_gellman.py + +""" +import numpy as np +import itertools as it + +from pylab import * +from sparse import COO +from pprint import pprint + +def gellmann(j, k, d, sparse=False): + r"""Returns a generalized Gell-Mann matrix of dimension d. + + According to the convention in *Bloch Vectors for Qubits* by Bertlmann and + Krammer (2008), returns :math:`\Lambda^j` for :math:`1\leq j=k\leq d-1`, + :math:`\Lambda^{kj}_s` for :math:`1\leq k k: + coords = [[j - 1, k - 1], + [k - 1, j - 1]] + data = [1, 1] + elif k > j: + coords = [[j - 1, k - 1], + [k - 1, j - 1]] + data = [-1j, 1j] + elif j == k and j < d: + coords = [list(range(j + 1)), + list(range(j + 1))] + data = np.sqrt(2/(j*(j + 1)))*np.array(list(it.repeat(1 + 0j, j)) + + [-j + 0j]) + else: + coords = [list(range(d)), + list(range(d))] + data = list(it.repeat(1 + 0j, d)) + + if sparse: + gjkd = COO(coords, data, shape=(d, d)) + else: + gjkd = np.zeros((d, d), dtype=np.complex128) + for val, m, n in zip(data, *coords): + gjkd[m][n] = val + + return gjkd + +def get_basis(d, sparse=False): + r"""Return a basis of operators. + + The basis is made up of orthogonal Hermitian operators on a Hilbert space + of dimension d, with the identity element in the last place. + + Parameters + ---------- + d : int + The dimension of the Hilbert space. + + Returns + ------- + list of numpy.array + The basis of operators. + + """ + return [gellmann(j, k, d, sparse) + for j, k in it.product(range(1, d + 1), repeat=2)] + +pprint(get_basis(13)) diff --git a/.github/entrypoint/artifact/python/inventory.py b/.github/entrypoint/artifact/python/inventory.py new file mode 100644 index 000000000..2ae2333fc --- /dev/null +++ b/.github/entrypoint/artifact/python/inventory.py @@ -0,0 +1,218 @@ +# This Python file uses the following encoding: utf-8 + +from gametext import * + +states = {} + +states["currentrm"] = 'entryrm' + +states["entryrm"] = { + roomd: 0, + e_door: 1, + w_door: 1, + chair: 1, + sagan: 1 + } + +states["mainrm"] = { + roomd: 0, + n_door: 1, + e_door: 1, + w_door: 1, + s_door: 1, + # fireplace: 1 + } + +#QUARKS + +states["strangerm"] = { + roomd: 0, + n_door: 1, + e_door: 1, + w_door: 1, + s_door: 1, + dirac: 1 + } + +states["charmrm"] = { + roomd: 0, + s_door: 1 + } + +states["downrm"] = { + roomd: 0, + n_door: 1, + portal: 1, + e_door: 1, + gellmann: 1, + wardrobe: 1, + rope: 0, + teaspoon: 0, + tripod: 0, + hadrons: 0 + } + +states["uprm"] = { + roomd: 0, + s_door: 1, + portal: 1, + hadrons: 1, + rope: 0 + } + +states["bottomrm"] = { + roomd: 0, + w_door: 1, + stairs: 1, + pauli: 1, + trapdoor: 1, + upstairs: 1, + downstairs: 1 + } + +states["toprm"] = { + roomd: 0, + stairs: 1, + trapdoor: 1, + downstairs: 1, + bed: 1, + chest: 0, + powder: 0, + chair: 1, + desk: 1, + drawer: 0, + paperclip: 0, + seashell: 0, + bricabrac: 0, + floorlamp: 1, + drapes: 1, + window: 1, + pauli: 0 + } + + +#LEPTONS + +states["muneurm"] = { + roomd: 0, + n_door: 1, + s_door: 1, + e_door: 1, + w_door: 1, + feynman: 1, + tripod: 1 + } + +states["eneurm"] = { + roomd: 0, + s_door: 1, + e_door: 1 + } + +states["tneurm"] = { + roomd: 0, + s_door: 1, + w_door: 1 + } + +states["elecrm"] = { + roomd: 0, + n_door: 1, + e_door: 1 + } + +states["muonrm"] = { + roomd: 0, + n_door: 1, + e_door: 1, + w_door: 1 + } + +states["taurm"] = { + roomd: 0, + n_door: 1, + w_door: 1 + } + +# BOSONS + +states["photonrm"] = { + roomd: 0 + } + +states["gluonrm"] = { + roomd: 0 + } + +states["Zrm"] = { + roomd: 0 + } + +states["Wrm"] = { + roomd: 0 + } + +states["higgsrm"] = { + roomd: 0 + } + +#INVENTORY + +states["inv"] = { + beads: 0, + key: 9, + key_bt: 0, + bottle: 1, + powder: 0, + refresher: 0, + bongos: 1, + tripod: 0, + up_bongos: 0, + rope: 0, + teaspoon: 0, + paperclip: 0, + seashell: 0 + } + +states[beads] = { + 'u': 0, + 'd': 0, + 'c': 0, + 's': 0, + 't': 0, + 'b': 0, + 've': 0, + 'e': 0, + 'vmu': 0, + 'mu': 0, + 'vtau': 0, + 'tau': 0, + 'y': 0, + 'g': 0, + 'Z': 0, + 'W': 0 + } + +#MAP + +states['map'] = { + "entryrm": 1, + "mainrm": 0, + "strangerm": 0, + "charmrm": 0, + "downrm": 0, + "uprm": 0, + "toprm": 0, + "bottomrm": 0, + "muneurm": 0, + "eneurm": 0, + "tneurm": 0, + "elecrm": 0, + "muonrm": 0, + "taurm": 0, + "photonrm": 0, + "gluonrm": 0, + "Zrm": 0, + "Wrm": 0, + "higgsrm": 0 + } diff --git a/.github/entrypoint/artifact/python/keywords.lst b/.github/entrypoint/artifact/python/keywords.lst new file mode 100644 index 000000000..01926db38 --- /dev/null +++ b/.github/entrypoint/artifact/python/keywords.lst @@ -0,0 +1,7614 @@ +(2+1) dimensional topological gravity +(n p) reaction +1s slater type function +2d lattice +3 j symbol +3d scanner +4 current +4 divergence +4 laplacian +4 tensor +4 vector +4 vector potential +4 velocities +4 velocity +4pi microscope +6 j symbol +9 j symbol +ab initio multiple spawning +abelian group +abelian sandpile model +aberration equation +above threshold ionization +abraham lorentz equation of motion +abraham lorentz model of electron +abrikosov vortex +absolute zero +absorbance +absorption band +absorption coefficient +absorption cross section +absorption edge +absorption spectra +absorption spectroscopy +absorption spectrum +absorptivity +abstract differential geometry +ac stark shift +acceleration field +accelerator mass spectrometry +accelerator operator +acceleron +accidental symmetry +acholeplasma +acoustic droplet vaporization +acoustic metric +acoustic paramagnetic resonance +acoustic phonon +acoustic resonance spectroscopy +acousto optic +acousto optical spectrometer +actinide chemistry +actinide concept +action principle +activation product +active laser medium +adaptive measurement +adaptive optic +addition of velocities +addition theorem for spherical harmonic +adhm construction +adiabatic +adiabatic approximation +adiabatic dynamic +adiabatic elimination +adiabatic evolution +adiabatic flame temperature +adiabatic invariance +adiabatic invariant +adiabatic passage +adiabatic quantum algorithm +adiabatic quantum computation +adiabatic quantum computing +adiabatic quantum optimization +adiabatic theorem +adiabatic transport +adiabatically eliminated +adinkra symbol +adjacency matrix +admittance +ads/cft correspondence +advanced green function for wave equation +advanced potential +advanced tactical laser +affine gauge theory +affine lie algebra +afshar experiment +aharonov bohm effect +aharonov bohm phase +aharonov bohm potential +aharonov casher effect +airy beam +airy disk +airy integral +aklt model +akns system +alfven velocities +alfven velocity +alfven wave +algebraic holography +algebraic quantum field theory +algorithmic cooling +alikhanian alikhanov spectrometer +alkali atom +alkali metal atom +all gas phase iodine laser +all optical switching +alpha particle spectroscopy +alpha particle x ray spectrometer +alpha process +alpine planetary boundary layer +american superconductor +ampac +amperes law +amplified spontaneous emission +amplitude amplification +amplitude damping channel +amplitude modulation +amplitude of low frequency fluctuation +amplituhedron +amsterdam density functional +an exceptionally simple theory of everything +anaem +analytic continuation +analytic properties of the index of refraction +analytical regularization +anatoly dyatlov +ancilla bit +ancillary qubit +ancillary system +anderson impurity model +anderson localisation +anderson localization +anderson model +anderson transition +andersons rule +andreev reflection +angle resolved photoemission spectroscopy +angles of incidence +angular distribution of radiation +angular momentum +angular momentum coupling +angular momentum diagram +angular momentum operator +angular velocities +angular velocity +anharmonic oscillator +anisotropy parameter +annihilation +annihilation radiation +annni model +annular dark field imaging +anomalon +anomalous diffusion +anomalous dispersion +anomalous magnetic dipole moment +anomalous magnetic moment +anomaly +anomaly matching condition +antenna in wave guide +anti stokes raman spectroscopy +anti symmetric operator +anti zeno effect +antiferromagnetism +antifreeze protein +antihydrogen +antimatter +antimatter comet +antimatter gravity measurement +antimatter rocket +antimatter tests of lorentz violation +antimatter weapon +antineutron +antiparticle +antiproton +antiproton decelerator +antiprotonic helium +antisymmetric exchange +antisymmetrizer +anyon +anyonic excitation +apparent paradox +apparent violation +applied radiochemistry +applied spectroscopy +approximate quantum error correction +approximation scheme +arago spot +arc fusion reactor +argon fluoride laser +argonaut class reactor +argus laser +arnolds cat map +aromatic ring current +arrival time +arrow of time +arthrobacter +arthrobacter antarcticus +arthrobacter chlorophenolicus +arthrobacter cryotolerans +arthrobacter cumminsii +arthrobacter flavus +arthrobacter livingstonensis +arthrobacter roseus +arthrobacter russicus +arthrobacter soli +arthrobacter subterraneus +arthrobacter woluwensis +arthur komar +arthur maitland +artificial atom +artificial disintegration +artificial insemination +artificial intelligence +ashtekar variable +associated legendre function +associated legendre polynomial +asterix iv laser +astro comb +astronomical spectroscopy +asymmetric entanglement +asymmetrically entangled quantum state +asymmetry measure +asymptotic entanglement +asymptotic freedom +asymptotic iteration method +asymptotic limit +asymptotic regime +asymptotic safety in quantum gravity +atiyah jones conjecture +atmospheric diffraction +atmospheric lidar +atmospheric optics ray tracing code +atmospheric turbulence +atom +atom atom interaction +atom beam +atom bose einstein condensate +atom cavity system +atom center of mass motion +atom chip +atom clock +atom coherence +atom decay +atom dynamic +atom entanglement +atom excitation +atom field coupling +atom field entanglement +atom field interaction +atom force microscope +atom gas +atom hydrogen +atom interacting +atom interaction +atom interferometry +atom inversion +atom laser +atom level +atom memory +atom motion +atom nuclei +atom optic +atom photon entanglement +atom position +atom quantum memory +atom qubit +atom resonance +atom spontaneous emission +atom transition +atom transition frequency +atom vibration +atomic absorption spectroscopy +atomic and molecular astrophysic +atomic decay rate +atomic electron transition +atomic emission spectroscopy +atomic form factor +atomic heraldry +atomic internal degree +atomic mass +atomic mass unit +atomic nucleus +atomic number +atomic operator +atomic optic +atomic orbital +atomic physic +atomic recoil +atomic spacing +atomic spectroscopy +atomic theory +atomic unit +atomistix toolkit +atomistix virtual nanolab +atoms in molecule +attenuated total reflectance +attenuation coefficient +attenuation in optical fiber +attenuation length +attosecond +attosecond chronoscopy +audience scanning +aufbau principle +auger architectomic +auger effect +auger electron spectroscopy +austin model +autler townes effect +autler townes splitting +autoignition temperature +autoionization +automated mineralogy +autonomous landing hazard avoidance technology +auxiliary field +auxiliary field monte carlo +auxiliary qubit +auxiliary system +avalanche diode +averaging procedure +avoided crossing +avoided level crossing +awpp +axial vector +axino +axiomatic quantum field theory +axion +azeotrope +azimuthal quantum number +azimuthal symmetry +b integral +b meson +b tagging +b0 +babinets principle +back action +back action evasion +background field +background field method +background noise +bad cavity limit +baecklund transform +bakers map +balanced homodyne detection +ballistic conduction +ballistic conduction in single walled carbon nanotube +banach space +bancroft point +band bending +band diagram +band emission +band gap +band head +band offset +band structure +bandwidth limited pulse +banks zaks fixed point +bare mass +bargmann state +bargmann wigner equation +bargmanns limit +bariloche atomic centre +barrett crane model +baryon +baryon acoustic oscillation +baryon number +baryonic dark matter +basis set +basis set superposition error +basis state +basis vector +batalin vilkovisky formalism +bathochromic shift +bayesian approach +bayesian estimate +bb84 +bb84 protocol +bcfw recursion +bcs theory +beam dump +beam expander +beam homogenizer +beam parameter product +beam powered propulsion +beam splitter +beans critical state model +bechgaard salt +beer lambert law +bekenstein bound +belavkin equation +bell chsh inequalities +bell chsh inequality +bell diagonal state +bell experiment +bell inequalities +bell inequality +bell inequality violation +bell kochen specker theorem +bell measurement +bell nonlocality +bell operator +bell pair +bell state +bell state measurement +bell test +bell test experiment +bell theorem +bell type inequalities +bell type inequality +bell violation +belle ii detector +bells theorem +benchtop nuclear magnetic resonance spectrometer +beneath the city street +benesi hildebrand method +bennetts law +berezin integral +berezinian +beriev a 60 +berry connection and curvature +berry curvature +berry phase +bessel beam +bessel equation +bessel function +bessels differential equation +bessels inequalities +bessels inequality +beta decay +beta decay stable isobar +beta function +beta m +betatron +bethe ansatz +bethe feynman formula +bethe formula +bethe heitler formula +bethe lattice +bethe salpeter equation +bf model +bhabha scattering +bht algorithm +biexciton +big bang +big bang nucleosynthesis +bigdft +biham middleton levine traffic model +bilepton +binary collision approximation +binding energy +biocentric universe +biological half life +biological small angle scattering +biological system +biomedical spectroscopy +biot and savart law +biot savart law +bipartite case +bipartite correlation +bipartite entanglement +bipartite gaussian state +bipartite mixed state +bipartite pure state +bipartite quantum state +bipartite quantum system +bipartite state +bipartite system +biphoton +bipolaron +birefringence of the ionosphere +birge sponer method +bismuth strontium calcium copper oxide +bispinor +bistability +bistatic cross section +bistochastic quantum channel +bit commitment +bit error rate +bit string physic +bks theory +black body radiation +black hole +black hole complementarity +black hole electron +black hole entropy +black hole evaporation +black hole information paradox +black hole physic +black hole thermodynamic +black star +blackbody radiation +blasius boundary layer +blind quantum computation +bloch ball +bloch equation +bloch grueneisen temperature +bloch oscillation +bloch spectrum +bloch sphere +bloch vector +bloch wave +blood irradiation therapy +blown flap +blue laser +blueshift +bmt equation for spin +boeing laser avenger +boeing yal 1 +bogdanov map +bogoliubov causality condition +bogoliubov inner product +bogoliubov parasyuk theorem +bogoliubov transformation +bogomolnyi prasad sommerfield bound +bogomolnyi prasad sommerfield state +bohmian interpretation +bohmian mechanic +bohmian quantum mechanics +bohmian trajectory +bohr einstein debate +bohr magneton +bohr model +bohr radius +bohrs classical formula +boiling +boiling chip +boiling point +bolometer +boltzmann distribution +boltzmanns distribution law +bond fluctuation model +bond hardening +bond softening +boolean network +boost momentum +boost parameter +borchers algebra +borel summation +born approximation +born huang approximation +born infeld nonlinear electrodynamic +born markov approximation +born oppenheimer approximation +born probability rule +born rule +born serie +borromean nucleus +bose condensate +bose einstein condensate +bose einstein condensation +bose einstein statistic +bose gas +bose hubbard hamiltonian +bose hubbard model +bosenova +boson +boson sampling +bosonic atom +bosonic environment +bosonic field +bosonic gaussian channel +bosonic particle +bosonic system +bosonization +bottom eta meson +bottom quark +bottomness +bound electron dynamic +bound entangled +bound entanglement +bound state +bound state energy +bound state problem +bound state solution +bound states in wave guide +boundary condition +boundary conformal field theory +boundary layer +boundary layer control +boundary layer suction +boundary layer thickness +boundary value problem +bounded error +bounded operator +boussos holographic bound +bpst instanton +bqp +bra ket notation +bragg plane +bragg scattering +braggs law +braid group +braid statistic +braided vector space +branch point +branching fraction +brauer wall group +braunstein ghosh severini entropy +breast mri +breathalyzer +breit equation +breit interaction +bremsstrahlung +bretherton equation +brewsters angle +brian josephson +brillouin precursor +brillouin scattering +brillouin spectroscopy +brillouin zone +brillouins theorem +broadband +broadband acoustic resonance dissolution spectroscopy +broken symmetry +brownian motion +brownian particle +brst quantization +brus equation +btz black hole +bubble fusion +bubble point +buffer gas +bulk richardson number +bullough dodd model +bunch davies vacuum +bures distance +bures metric +butcher group +byers yang theorem +c parity +c rot gate +c symmetry +c theorem +c70 molecule +cabibbo kobayashi maskawa matrix +cadpac +caesium cadmium bromide +cal pt symmetry +caldeira leggett model +calkin correspondence +callan symanzik equation +calligraphic projection +calogero conjecture +caloron +camassa holm equation +canadian penning trap mass spectrometer +canonical commutation relation +canonical ensemble +canonical momentum +canonical quantization +canonical quantum gravity +canonical state +canonical stress tensor +canonical transformation +canonical variable +capacitance +capacitive coupling +capacitive resistance +capacitively coupled +capacity region +capillary rise method +capping inversion +car parrinello method +car parrinello molecular dynamic +carbon 13 nmr satellite +carbon 13 nuclear magnetic resonance +carbon burning process +carbon dioxide +carbon dioxide laser +carbon nanotube +cardiac magnetic resonance imaging +cardiac magnetic resonance imaging perfusion +cardiac ventriculography +cardy formula +carnobacterium pleistocenium +carnot efficiency +caroline herzenberg +carrier scattering +cartan decomposition +cartesian coordinate +cascading gauge theory +casimir effect +casimir energy +casimir force +casimir force measurement +casimir free energy +casimir interaction +casimir interaction energy +casimir polder force +casimir polder interaction +casimir polder potential +casimir pressure +castep +cat state +catastrophic optical damage +categorical quantum mechanic +category of finite dimensional hilbert space +category theory +cathode ray +cathodoluminescence +cauchy boundary condition +cauchy hadamard formula +cauchy riemann differential equation +cauchy schwarz inequalities +cauchy schwarz inequality +cauchys integral formula +cauchys theorem +causal dynamical triangulation +causal fermion system +causal green function +causal interpretation +causal patch +causal perturbation theory +causal set +causal structure +causality +cavendishs apparatu +cavities +cavity +cavity cooling +cavity decay +cavity field +cavity frequency +cavity loss +cavity mirror +cavity mode +cavity optomechanic +cavity optomechanical system +cavity photon +cavity qed +cavity qed system +cavity quantum electrodynamic +cavity resonance +cavity ring down spectroscopy +cayley graph +ccr and car algebras +cecoin5 +cells alive system +cellular potts model +center fed antenna +center of inversion +center of mass +center of mass motion +center vortex +central charge +central field approximation +central limit theorem +central potential +central role +central spin +centre for magnetic resonance investigation +cesium atom +cghs model +ch inequalities +ch inequality +chain of circle procedure +chameleon field +chameleon particle +channel capacity +channel loss +channel state duality +chaotic behaviour +chaotic dynamic +chaotic motion +chaotic regime +chaotic scattering +chaotic state +chaotic system +chaplygin gas model +characteristic time +charge +charge carrier +charge conjugation +charge conservation +charge contrast imaging +charge density +charge density wave +charge noise +charge ordering +charge qubit +charge radius +charge state +charge transfer insulator +charge transport +charged current +charged particle +charged particle equilibrium +chargino +charm +charm quark +charmed baryon +charmed eta meson +chebyshev polynomial +chelpg +chemical bond +chemical computer +chemical imaging +chemical laser +chemical oxygen iodine laser +chemical potential +chemical shift +chemical shift index +chemiluminescence +chep conference +cherenkov angle +cherenkov radiation +chern number +chern simons theory +chip integration +chiral algebra +chiral anomaly +chiral gauge theory +chiral model +chiral molecule +chiral perturbation theory +chiral potts curve +chiral potts model +chiral superfield +chiral symmetry +chiral symmetry breaking +chirality +chirped pulse amplification +chladnis law +chromism +chromo weibel instability +chronon +chsh bell inequalities +chsh bell inequality +chsh inequalities +chsh inequality +cidnp +circuit model +circuit qed +circuit quantum electrodynamic +circular current loop +circular polarization +circularly polarized wave +cladding +claes goeran granqvist +clas detector +classical action +classical algorithm +classical analogue +classical and quantum conductivity +classical approach +classical behaviour +classical bit +classical bound +classical capacity +classical case +classical channel +classical chaos +classical communication +classical complexity +classical computation +classical computing +classical concept +classical correlation +classical counterpart +classical cryptography +classical diffusion +classical domain +classical dynamic +classical electrodynamic +classical electron radius +classical entanglement +classical environment +classical equation +classical evolution +classical field +classical field theory +classical hamiltonian +classical heisenberg model +classical information channel +classical information theory +classical interpretation +classical level +classical light +classical limit +classical logic +classical measurement +classical mechanic +classical memory +classical method +classical mixture +classical model +classical motion +classical noise +classical notion +classical object +classical observable +classical optic +classical orbit +classical particle +classical phase space +classical physic +classical post processing +classical probability distribution +classical probability theory +classical problem +classical property +classical protocol +classical quantum channel +classical quantum correspondence +classical random walk +classical regime +classical resource +classical result +classical setting +classical simulation +classical solution +classical state +classical statistic +classical statistical mechanic +classical strategy +classical system +classical theory +classical trajectory +classical transition +classical treatment +classical variable +classical version +classical xy model +classically chaotic system +classically correlated state +classically forbidden region +clauser horne inequalities +clauser horne inequality +clauser horne shimony holt inequalities +clauser horne shimony holt inequality +clausius mossotti formula +clausius mossotti relation +clear physical interpretation +clebsch gordan coefficient +clifford algebra +clifford gate +clifford group +clock +cloning +cloning machine +closed expression +closed form expression +closed form solution +closed formula +closed loop +closed quantum system +closed system +closed timelike curve +cloud aerosol transport system +cloud quantum computing +cluster decomposition theorem +cluster expansion approach +cluster state +cmos +cndo/2 +cno cycle +cnot +coanda effect +coarse graining +coaxial cable +coaxial line +cobalt 59 +coblentz society +cobordism hypothesis +coefficient matrix +coffee ring effect +cognitive system +coherence +coherence function +coherence length +coherence property +coherence representation +coherence time +coherent addition +coherent anti stokes raman spectroscopy +coherent attack +coherent backscattering +coherent control +coherent coupling +coherent destruction +coherent diffraction imaging +coherent dynamic +coherent evolution +coherent excitation +coherent feedback +coherent field +coherent information +coherent interaction +coherent light +coherent manipulation +coherent oscillation +coherent perfect absorber +coherent population trapping +coherent spectroscopy +coherent state +coherent superposition +coherent transfer +coherent transport +coherent tunneling +coherently control +coherently manipulated +coil +coin operator +coincidence counting +coincidence detection +coincidence measurement +coincidence probability +cold atom ensemble +cold atom experiment +cold atom gas +cold atom laboratory +cold atom system +cold dark matter +cold fission +cold fusion +cold polar molecule +cold trapped ion +cold vapour +coleman mandula theorem +coleman weinberg potential +collaborative computing project for nmr +collapse model +collection efficiency +collective atomic excitation +collective attack +collective behaviour +collective coupling +collective decoherence +collective dephasing +collective effect +collective excitation +collective measurement +collective mode +collective motion +collective noise +collective spin +collective state +collinear quasi phase matching +collision energy +collision induced absorption and emission +collision problem +collisional broadening limit +collisional decoherence +collisional excitation +collisional process +colocalization benchmark source +color center +color charge +color code +color confinement +color flavor locking +color glass condensate +color superconductivity +colored noise +colored particle in cell +colorimeter +colossal magnetoresistance +combinatorial hierarchy +combining dimensions +common bath +common reservoir +communicating party +communication capacity +communication channel +communication complexity +communication cost +communication protocol +commutation relation +commutator subspace +commuting observable +commuting operator +compact fluorescent lamp +compact operator on hilbert space +compact quantum group +compact reconnaissance imaging spectrometer +compacton +comparative analysis +comparative study +complementarity +complementarity principle +complementarity relation +complementary observable +complementary screen +complete active space +complete graph +complete information +complete positivity +complete set +complete set of commuting observable +complete set of function +complete solution +complete system +complete theory +completely mixed state +completely positive map +completely positive trace preserving map +completely suppressed +completeness +completeness relation +complex conjugation +complex differentiable +complex function +complex hadamard matrix +complex hilbert space +complex network +complex number +complex oxide +complex plane +complex potential +complex quantum system +complexity theory +composite fermion +composite field +composite gravity +composite pulse +composite quantum system +composite reaction texturing +composite system +compound system +compressed sensing +compton edge +compton effect +compton scattering +compton wavelength +computation time +computational bases +computational basis +computational complexity +computational cost +computational fluid dynamic +computational power +computational problem +computational resource +compute analytically +computed efficiently +computer algorithm +computer science +computer simulation +concurrence +condensation +condensed matter +condensed matter physic +condensed matter system +conditional dynamic +conditional entropy +conditional measurement +conditional preparation +conditional probability +conditional quantum entropy +conditional state +conductance quantum +conduction band +conduction electron +conduction in a moving medium +conductivity +conductivity near the percolation threshold +conductor +configuration interaction +configuration space +configuration state function +confining potential +conformal bootstrap +conformal family +conformal field theory +conformal loop ensemble +conformal supergravity +conformal symmetry +congruent melting +conical hole or point +conical intersection +conjugate bases +conjugate basis +conjugate momenta +conjugate variable +conquest +conscious observer +conservation law +conservation law of energy +conservation law of momentum +conservation of angular momentum +conserved quantity +consistency condition +consistent description +consistent histories +consistent history approach +consistent theory +constant diffusion process +constant magnetic field +constant time +constituent quark +constituive equation +constitutive relation +constrained system +constraint algebra +constraints imposed +constructive interference +constructive quantum field theory +contact interaction +contact process +contextuality +continuity equation +continuous cooling transformation +continuous degree +continuous family +continuous limit +continuous observation +continuous quantum computation +continuous quantum measurement +continuous quantum variable +continuous scan laser doppler vibrometry +continuous set +continuous slowing down approximation range +continuous spectra +continuous spectrum +continuous spontaneous localisation +continuous symmetry +continuous time quantum walk +continuous variable +continuous variable entanglement +continuous variable quantum cryptography +continuous variable quantum key distribution +continuous variable quantum system +continuous variable quantum teleportation +continuous variable regime +continuous variable state +continuous variable system +continuous variable teleportation +continuous wave +continuum limit +continuum percolation theory +contraction +contractive state +contravariant vector +control error +control field +control parameter +control pulse +control qubit +control scheme +control theory +controlled disorder +controlled generation +controlled not gate +controlled phase gate +controlled z +convective boundary layer +convective derivative +conventional superconductor +conventional transmission electron microscope +convergence in square mean +convergence property +conversion efficiency +conversion electron moessbauer spectroscopy +conversion process +convex combination +convex hull +convex optimization +convex set +convolution theorem +cooling process +cooper pair +cooper pair box +cooperative effect +coorbit theory +copenhagen +copenhagen interpretation +copper vapor laser +coprecipitation +core charge +core electron +core excited shape resonance +corner transfer matrix +coronal radiative loss +correlated noise +correlated photon +correlated photon pair +correlated state +correlation +correlation effect +correlation energy +correlation function +correlation inequalities +correlation inequality +correlation length +correlation matrix +correlation property +correlation time +correspondence principle +correspondence rule +coset construction +cosmic acceleration +cosmic microwave background +cosmic ray spallation +cosmic string spacetime +cosmological constant problem +cosmological interpretation +cost function +coster kronig transition +cotlar stein lemma +coulomb barrier +coulomb blockade +coulomb collision +coulomb excitation +coulomb explosion +coulomb field +coulomb force +coulomb gauge +coulomb interaction +coulomb law +coulomb operator +coulomb potential +coulomb repulsion +coulomb scattering state +coulombs law +coumarin +counter rotating term +counterfactual definiteness +counterfactual quantum computation +counting statistic +coupled bose einstein condensate +coupled cavity array +coupled cluster +coupled dynamic +coupled equation +coupled harmonic oscillator +coupled oscillator +coupled quantum dot +coupled qubit +coupled spin +coupled system +coupling constant +coupling efficiency +coupling field +coupling parameter +coupling strength +covafiant lagrangian formalism +covalent superconductor +covariance +covariance mapping +covariance matrix +cp violation +cp2k +cpt symmetry +craic technologies +cramer rao bound +creation and annihilation operator +critical behaviour +critical coupling +critical exponent +critical field +critical fluctuation +critical line +critical opalescence +critical phenomena +critical point +critical property +critical radius +critical system +critical temperature +critical value +critical variable +cross kerr nonlinearity +cross phase modulation +cross section +crossed crystal configuration +crowther criterion +cryochemistry +cryoelectronic +cryogenic particle detector +cryogenic temperature +cryoneurolysis +cryoneuromodulation +cryophorus +cryoprotectant +cryoscopic constant +cryostasis +cryosurgery +cryozoa +cryptographic protocol +crypton +crystal base +crystal momentum +crystal oven +crystallization +crystallization of polymer +css code +cubic harmonic +cubical atom +cumulant expansion +cuprate +curie tempenature +curie temperature +curies law +current algebra +current density +current density imaging +current four vector +current quark +curtright field +curvaton +curvature of space +curved space +curved space time +custodial symmetry +cutoff +cyclic evolution +cyclic group +cyclic operation +cyclops laser +cylindrical capacitor +cοΏ½as lemma +d dimensional hilbert space +d level system +d meson +d term +d wave system +d wave two +dacapo +dalitz plot +damped harmonic oscillator +damped lyman alpha system +damped oscillator +damping rate +damping time +dangerously irrelevant operator +darboux transformation +dark count +dark count rate +dark energy +dark energy star +dark matter +dark photon +dark state +dark state polariton +dasar +data compression +data processing inequalities +data processing inequality +david deutsch +davisson germer experiment +davydov soliton +dbar problem +de broglie bohm interpretation +de broglie bohm theory +de broglie relation +de broglie wavelength +de haas van alphen effect +de sitter invariant special relativity +de sitter spacetime +de wolf +dead time +debye waller factor +decay channel +decay energy +decay exponentially +decay process +decay product +decay rate +decay time +decision making +decision problem +decision theory +decoherence +decoherence channel +decoherence control +decoherence dynamic +decoherence effect +decoherence factor +decoherence free subspace +decoherence functional +decoherence induced +decoherence mechanism +decoherence process +decoherence property +decoherence rate +decoherence suppression +decoherence theory +decoherence time +decoherence time scale +decoherent history approach +deconfinement +decoy state +decoy state method +decoy state quantum key distribution +deelectrification +deelectrification factor +deep inelastic scattering +deep level transient spectroscopy +deferred measurement principle +deflection +deformation parameter +deformation polarization +deformation quantization +degasperis procesi equation +degenerate energy level +degenerate ground state +degenerate operation +degenerate parametric oscillator +degenerate state +degree of coherence +delay time +delayed choice +delayed choice experiment +delayed choice quantum eraser +delayed neutron +delbrueck scattering +delocalized electron +delta baryon +delta potential +dennis m. bushnell +dense coding +density +density fluctuation +density functional theory +density matrix +density matrix renormalization group +density of state +density operator +density profile +dephasing +dephasing channel +dephasing due +dephasing effect +dephasing noise +dephasing rate +dephasing rate sp formula +dephasing time +depletion effect +deployable tactical engagement system +depolarization ratio +depolarizing channel +depolarizing noise +deposition +derivations of the lorentz transformation +derricks theorem +deslandres table +desy +detection efficiency +detection inefficiency +detection loophole +detection scheme +detector efficiency +detector inefficiency +determination of nuclear radii +deterministic entanglement +deterministic generation +deterministic model +deterministic quantum computation +deuterium burning +deuterium nmr +deutsch jozsa algorithm +deutsch jozsa problem +device independent quantum cryptography +dew point +dexter electron transfer +di positronium +diabatic +diamagnetic +diamagnetism +diamond +diatom molecule +dicke effect +dicke model +dicke state +dielectric +dielectric displacement +dielectric function +dielectric media +dielectric medium +dielectric permittivity +dielectric polarization +dielectric property +dielectric spectroscopy +dielectric susceptibility +diffeomorphism constraint +differential cross section +differential dynamic microscopy +differential geometry +differential operator +diffraction +diffraction efficiency +diffraction formalism +diffraction grating +diffraction in time +diffraction limit +diffraction limited system +diffraction pattern +diffraction tomography +diffractive beam splitter +diffuse interstellar band +diffuse reflectance infrared fourier transform +diffuse serie +diffusing wave spectroscopy +diffusion coefficient +diffusion monte carlo +diffusion mri +diffusion process +diffusionless transformation +diffuson +digital fish library +dihydrogen cation +diis +dilaton +dimensional entangled quantum system +dimensional regularization +dimensional transmutation +dinger cat state +dinger equation +diode +diode pumped solid state laser +dipolar bose einstein condensate +dipolar interaction +dipole approximation +dipole blockade +dipole density +dipole dipole interaction +dipole layer +dipole moment +dipole vector +diquark +dirac adjoint +dirac bracket +dirac delta function +dirac electron +dirac equation +dirac equation in curved spacetime +dirac equation in the algebra of physical space +dirac fermion +dirac field +dirac hamiltonian +dirac hole theory +dirac operator +dirac oscillator +dirac particle +dirac point +dirac sea +dirac spectrum +dirac spinor +dirac string +dirac von neumann axiom +diracs relativistic generalization of +direct and indirect band gap +direct quantum chemistry +directed percolation +dirichlet boundary condition +discovery of the neutron +discrete dipole approximation +discrete dipole approximation code +discrete fourier transform +discrete phase space +discrete spectrum +discrete symmetry +discrete time quantum walk +discrete wigner function +disjoint interval +disk laser +disordered system +dispersion force +dispersion relation +dispersion relation for electromagnetic in vacuum +dispersion relation for electromagnetic wave +dispersion relation in a conducting medium +dispersive bistability +dispersive interaction +dispersive media +dispersive medium +dispersive regime +displaced vacuum +displacement current +displacement operator +displacement polarization +dissipation model for extended environment +dissipation rate +dissipative dynamic +dissipative effect +dissipative environment +dissipative preparation +dissipative process +dissipative quantum system +dissipative soliton +dissipative system +distant atom +distant node +distant particle +distillable entanglement +distillation +distillation protocol +distinguishability +distinguishable particle +distribute entanglement +distributed bragg reflector laser +distributed entanglement +distributed feedback laser +distributed multipole analysis +distributed quantum computation +distributed quantum computing +distribution +divergence +dixmier trace +dm interaction +dmol3 +domain wall +domino tiling +doppler cooling +doppler cooling limit +doppler effect +doppler shift +doppler spectroscopy +dose fractionation theorem +double exchange mechanism +double ionization +double quantum dot +double slit +double slit experiment +doublet state +doubly degenerate +dove prism +down converted photon +down quark +drell yan process +dressed state +driven harmonic oscillator +driven system +driving field +driving force +driving frequency +driving laser +dropleton +drude model +drudes formula +dual superconductor model +duanes hypothesis +ductile brittle transition +dunham expansion +durcupan +duru kleinert transformation +dwell time +dyall hamiltonian +dye laser +dym equation +dynamic contrast enhanced mri +dynamic light scattering +dynamic structure factor +dynamical decoupling +dynamical mean field theory +dynamical picture +dynamical reduction +dyon +dyson serie +dzyaloshinskii moriya interaction +early universe +earths field nmr +eavesdropping +eberhard inequalities +eberhard inequality +ebullioscopic constant +eckart condition +eckhaus equation +ecton +edans +eddy covariance +edge mode +edge of the wedge theorem +edge state +efda +effective action +effective atomic number +effective coupling +effective current +effective dynamic +effective field theory +effective hamiltonian +effective interaction +effective magnetic field +effective mass +effective photon mass +effective potential +effective temperature +effective theory +effective voltage +effects of nuclear explosion +efficiency +efficient algorithm +efficient classical simulation +efficient computation +efficient coupling +efficient generation +efimov effect +efimov physic +efimov state +ehrenfest theorem +ehrenfest time +ehrenfest tolman effect +eigenspinor +eigenstate thermalization hypothesis +eigenvalue equation +eigenvalue perturbation +eigenvalue problem +eigenvalue spectrum +eight vertex model +eikonal approximation +einselection +einstein brillouin keller method +einstein coefficient +einstein de haas effect +einstein maxwell dirac equation +einstein podolsky rosen +einstein podolsky rosen correlation +einstein podolsky rosen paradox +einstein podolsky rosen steering +einsteins summation convention +ekman layer +elastic scattering +electret +electric charge +electric dipole spin resonance +electric dipole transition +electric field gradient +electric field intensity +electric field nmr +electric motor +electric potential +electric susceptibility +electrical aerosol spectrometer +electrically detected magnetic resonance +electricoil +electrochromism +electrolaser +electromagnetic absorption by water +electromagnetic cavities +electromagnetic cavity +electromagnetic field strength tensor +electromagnetic interaction +electromagnetic momentum density +electromagnetic radiation +electromagnetic vacuum fluctuation +electromagnetic wave +electromagnetic waves in matter +electromagnetic waves in vacuum +electromagnetically induced grating +electromagnetically induced transparency +electron +electron affinity +electron backscatter diffraction +electron beam additive manufacturing +electron beam freeform fabrication +electron beam furnace +electron beam induced current +electron beam induced deposition +electron beam ion trap +electron beam machining +electron beam physical vapor deposition +electron beam prober +electron beam processing +electron beam technology +electron beam texturing +electron beam tomography +electron bubble +electron configuration +electron correlation +electron degeneracy pressure +electron density +electron diffraction +electron energy loss spectroscopy +electron excitation +electron gas +electron gun +electron hole +electron liquid +electron localization function +electron magnetic circular dichroism +electron magnetic moment +electron multiplier +electron neutrino +electron nuclear double resonance +electron pair +electron paramagnetic resonance +electron phenomenological spectroscopy +electron phonon coupling +electron positron pair production +electron precipitation +electron rest mass +electron scattering +electron shell +electron spectrometer +electron spectroscopy +electron spin +electron spin qubit +electron spin resonance +electron therapy +electron tomography +electron transfer +electron transport +electron tunneling +electron wake +electron wave packet interference +electronic anticoincidence +electronic band structure +electronic correlation +electronic density +electronic energy transfer +electronic excitation +electronic spin +electronic state +electronic structure +electronic transport +electrostatic +electrostatic energy +electrostatic lens +electrostatic nuclear accelerator +electrostatic potential +electrostatic unit +electrostriction +electrothermal feedback +electroweak interaction +electroweak scale +elementary excitation +elementary gate +elementary particle +elitzur vaidman bomb tester +elitzurs theorem +elko field +ellen gleditsch +elliott formula +ellipsometry +elliptic flow +elliptically polarized wave +emc effect +emission spectra +emission spectrum +empty lattice approximation +encoded qubit +endovenous laser treatment +energy band +energy catalyzer +energy conservation +energy density of the electric field +energy dispersive x ray diffraction +energy dispersive x ray spectroscopy +energy flow +energy level +energy level splitting +energy momentum 4 vector +energy momentum tensor +energy operator +energy transfer +energy transfer upconversion +engineering diffraction +englert greenberger yasin duality relation +ensemble interpretation +entangled atom +entangled coherence +entangled light +entangled pair +entangled particle +entangled photon +entangled photon pair +entangled quantum state +entangled quantum system +entangled qubit +entangled qutrit +entangled state +entangled system +entanglement +entanglement assisted capacity +entanglement assisted classical capacity +entanglement breaking channel +entanglement class +entanglement classification +entanglement concentration +entanglement cost +entanglement creation +entanglement criteria +entanglement criterion +entanglement decay +entanglement detection +entanglement dimensionality +entanglement distillation +entanglement distribution +entanglement entropy +entanglement evolution +entanglement fidelity +entanglement generation +entanglement manipulation +entanglement measure +entanglement monotone +entanglement of formation +entanglement purification +entanglement renormalization +entanglement representation +entanglement resource +entanglement sharing +entanglement spectra +entanglement spectrum +entanglement sudden death +entanglement swapping +entanglement teleportation +entanglement transfer +entanglement transformation +entanglement witness +entangling capability +entangling gate +entangling power +entropic inequalities +entropic inequality +entropic quantity +entropic uncertainty +entropic uncertainty relation +entropy exchange +entropy increase +entropy inequality +entropy of black hole +entropy of entanglement +entropy production +environment +environment induced decoherence +environmental decoherence +environmental degree +environmental effect +environmental interaction +environmental noise +environmental scanning electron microscope +enyi entropy +ep quantum mechanic +epcard +epistemological letter +epr argument +epr correlation +epr entanglement +epr experiment +epr pair +epr paradox +epr state +epsilon radiation +eqp +equilibrium state +equivalence class +equivalence principle +equivalent width +er:yag laser +er=epr +ergodic hypothesis +ermakov lewis invariant +ernst angle +error ellipse +essential singularity +eta meson +eternally collapsing object +ether drift experiment +euclidean quantum gravity +euclidean space +eugene mallove +eugene podkletnov +euler heisenberg lagrangian +euler lagrange equation +euler maclaurin formula +european spallation source +eutectic +eutectic system +eutectoid +evanescent field +evanescent mode +evanescent wave +evaporation +evaporative cooling +even and odd atomic nuclei +event horizon +event symmetry +everett interpretation +evershed effect +evolution equation +evolution operator +evolution time +ex situ conservation +exablate +exchange coupling +exchange energy +exchange force +exchange interaction +exchange operator +exchange symmetry +excimer laser +excitation +excitation energy transfer +excitation function +excitation population +excitation probability +excitation spectra +excitation spectrum +excited atom +excited state +exciton +exciton polariton +excitonic state +exclusion principle +exclusive correlation spectroscopy +exoelectron emission +exotic atom +exotic baryon +exotic hadron +exotic meson +exotic particle +expanding universe +expectation value +exponential decay law +exponential scaling +exponential separation +exponential speed +exponential speedup +extended hueckel method +extended interaction oscillator +external beam radiotherapy +extinction coefficient +extinction ratio +extraordinary magnetoresistance +eye surgery +fabry perot cavities +fabry perot cavity +factoring algorithm +factorization method +faddeev equation +faddeev popov ghost +fair sampling +fair sampling assumption +fajans paneth hahn law +fano factor +fano resonance +far infrared laser +faraday effect +faradays law of induction +fast fission +fast low angle shot magnetic resonance imaging +fast neutron therapy +faster than light +fault current limiter +fault tolerance +fault tolerant quantum computation +fault tolerant quantum computing +fayet iliopoulos d term +fazia +feedback control +feedback loop +fellgetts advantage +femtochemistry +femtosecond pulse shaping +fenna matthews olson complex +fermi arc +fermi dirac statistic +fermi energy +fermi gas +fermi heap and fermi hole +fermi level +fermi liquid theory +fermi motion +fermi point +fermi resonance +fermi sea +fermi statistic +fermi surface +fermi surface of superconducting cuprate +fermion +fermion doubling +fermion system +fermionic atom +fermionic condensate +fermionic field +fermionic system +fermis golden rule +fermis interaction +ferrimagnetism +ferroelectric crystal +ferroelectrics +ferromagnetic phase +ferromagnetic superconductor +ferromagnetics +ferromagnetism +feshbach fano partitioning +feshbach resonance +few body system +feynman checkerboard +feynman diagram +feynman heaviside expressions for field +feynman parametrization +feynman slash notation +fiber based wavelength division multiplexer +fiber bragg grating +fiber disk laser +fiber laser +fiber source +fibonacci anyon +fibre bundle +fidelity decay +fidelity of quantum state +fidelity susceptibility +field approximation +field effect +field electron emission +field equation +field strength tensor +field tensor +fierz identity +filling factor +fine structure +fine structure constant +fine structure splitting +finite amount +finite automata +finite bandwidth +finite conductivity +finite difference method +finite dimension +finite dimensional case +finite dimensional hilbert space +finite dimensional quantum system +finite dimensional representation +finite dimensional system +finite element analysis +finite potential well +firestrike +firewall +first order coherence +first order correlation function +first quantization +fisher information +fission product +fission product pilot plant +fitzgerald lorentz contraction +fixed orbit +fizeaus experiment +flack parameter +flash +flash freezing +flash point +flat spacetime +flavour +flip angle +floer homology +floquet state +floquet theory +flow separation +fluctuation dissipation theorem +fluctuation theorem +fluctuation x ray scattering +fluid analogs in quantum mechanic +fluid attenuated inversion recovery +fluorescein +fluorescence correlation spectroscopy +fluorescence cross correlation spectroscopy +fluorescence intensity decay shape microscopy +fluorescence intermittency +fluorescence loss in photobleaching +fluorescence microscope +fluorescence recovery after photobleaching +fluorescence spectroscopy +fluorescence spectrum +fluorescent tag +fluorine 19 nuclear magnetic resonance +fluorometer +flux footprint +flux pinning +flux pumping +flux quantization +flux quantum +flux qubit +fluxon +fmo complex +fmri adaptation +fock matrix +fock space +fock state +focused ion beam +foerster coupling +fokker planck equation +foldy wouthuysen transformation +forbidden mechanism +force density +force equation +force spectroscopy +form factor +formation of the universe +forward scattering amplitude +four dimensional laplacian operator +four divergence +four fermion interaction +four gradient +four level system +four potential +four tensor +four vector +four wave mixing +fourier analysis +fourier bessel serie +fourier domain mode locking +fourier integral +fourier serie +fourier spherical bessel series +fourier transform +fourier transform infrared spectroscopy +fourier transform spectroscopy +fourth order +fractional anisotropy +fractional crystallization +fractional freezing +fractional quantum hall effect +fractional quantum hall state +fractional quantum mechanic +fractional revival +fractional schroedinger equation +fractional statistic +fractional supersymmetry +fractional vortices +fracton +franck condon principle +franck hertz experiment +franco british nuclear forum +fraunhofer diffraction +fraunhofer distance +fraunhofer line +fraxel +fredholm module +fredkin gate +free carrier absorption +free electron +free electron laser +free electron model +free energy +free evolution +free fall +free fall atomic model +free fermion +free field +free induction decay +free motion +free orbit experiment +free particle +free space +free space optical communication +freeze thaw resistance +freezing +freezing point +freezing point depression +frequency addition source of optical radiation +frequency comb +frequency conversion +frequency dependence +frequency dependence of the conductivity +frequency dependence of the index of refraction +frequency detuning +frequency difference +frequency distribution +frequency distribution of radiation +frequency domain +frequency entanglement +frequency modulation +frequency range +frequency resolved optical gating +frequency shift +frequency spectrum +frequent measurement +fresnel +fresnel diffraction +fresnel number +fresnel zone +fresnels formula +fresnels rhombus +freund rubin compactification +friedmann robertson walker metric +fringe visibility +frobenius manifold +froissart stora equation +frontier molecular orbital theory +frozen ark +frozen mirror image method +frozen zoo +frw/cft duality +frοΏ½edericksz transition +fubini study metric +fujikawa method +fulde ferrell larkin ovchinnikov phase +full configuration interaction +full spectral imaging +functional integral +functional integration +functional magnetic resonance imaging +functional magnetic resonance spectroscopy of the brain +functional renormalization group +fundamental serie +fusenet +fusion ignition +fusion rule +futbolin +fuzzy cold dark matter +fuzzy sphere +g factor +g strain +gadolinium yttrium garnet +gain medium +gain switching +galerkins method +galilean invariance +galilean relativity +galilean transformation +galilei group +game theory +gamma counter +gamma matrices +gamma ray spectrometer +gammasphere +gamow factor +gamow teller transition +gans theory +gary taubes +gas dynamic laser +gas electron diffraction +gas laser +gasochromism +gate fidelity +gate operation +gate time +gate voltage +gauge anomaly +gauge boson +gauge covariant derivative +gauge field +gauge fixing +gauge gravitation theory +gauge group +gauge invariance +gauge invariant +gauge potential +gauge principle +gauge symmetry +gauge theory +gauge theory gravity +gauge transformation +gauged supergravity +gaugino +gaugino condensation +gauss sum +gauss theorem +gaussian approximation +gaussian beam +gaussian broadening +gaussian channel +gaussian entanglement +gaussian fixed point +gaussian measurement +gaussian method +gaussian noise +gaussian orbital +gaussian pillbox +gaussian position +gaussian quantum discord +gaussian quantum monte carlo +gaussian state +gaussian system of unit +gausson +gausss law +geiger marsden experiment +geiger nuttall law +geisa +gekko xii +gel dosimetry +gelfand naimark segal construction +gelfand zeitlin integrable system +gell mann and low theorem +gell mann matrices +gell mann okubo mass formula +general antiparticle spectrometer +general covariant transformation +general criterion +general integral theorem +general relativity +generalized abel plana formula +generalized bell inequalities +generalized bell inequality +generalized bell state +generalized coherence +generalized entanglement +generalized entropy +generalized fourier coefficient +generalized gibbs ensemble +generalized index of refraction +generalized measurement +generalized momenta +generalized ohms law +generalized permittivity +generalized probabilistic theory +generalized quantum measurement +generalized relative entropy +generalized uncertainty principle +generalized uncertainty relation +generalized valence bond +generate entanglement +generated entanglement +generating entanglement +generating function +generators of the lorentz group +genetic algorithm +genuine multipartite entanglement +genuine tripartite entanglement +geometric algebra +geometric approach +geometric description +geometric discord +geometric entanglement +geometric formulation +geometric interpretation +geometric measure +geometric measure of entanglement +geometric phase +geometric phase analysis +geometric quantization +geometric quantum discord +geometric structure +geometrical interpretation +geometrical property +geometrical structure +geonium atom +gerchberg saxton algorithm +gf method +ghirardi rimini weber theory +ghost imaging +ghz experiment +ghz state +ghz theorem +giant magnetoresistance +giant resonance +gibbs state +gim mechanism +gingerbreadman map +ginzburg landau theory +glashow resonance +glass transition +glauber sudarshan p representation +gleasons theorem +global anomaly +global entanglement +global symmetry +global warming potential +globar +glossary of quantum philosophy +glueball +gluex +gluino +gluon +gluon condensate +gluon field +gluon field strength tensor +goertler vortices +golay cell +golden rule +goldstino +goldstone boson +good quantum number +goos hanchen effect +gopakumar vafa invariant +gottesman knill theorem +graded manifold +gradient enhanced nmr spectroscopy +graph isomorphism problem +graph state +graph theory +graphane +graphene +graphene quantum dot +graphene sheet +graphical unitary group approach +graphite furnace atomic absorption +graphite like zno nanostructure +grassmann integral +grassmann number +gravastar +graviphoton +graviscalar +gravitational anomaly +gravitational effect +gravitational field +gravitational instanton +gravitational interaction +gravitational interaction of antimatter +gravitational radiation +gravitational redshift +gravitational self interaction +gravitational wave +gravitational wave detection +gravitational wave detector +gravitational wave interferometer +gravitino +graviton +gravity +gravity wave +gravity wave interferometer +gray tree frog +grazing incidence small angle scattering +green function +green function in electrostatic +greenberger horne zeilinger +greenberger horne zeilinger state +greenberger horne zeilinger theorem +greens first identity +greens function +greens reciprocation theorem +greens theorem +greg fahy +greninger chart +grenouille +gribov ambiguity +grimm sommerfeld rule +grism +gross neveu model +gross pitaevskii equation +grotrian diagram +ground state +ground state atom +ground state cooling +ground state degeneracy +ground state energy +ground state entanglement +ground state fidelity +ground state phase diagram +ground state property +ground state wave function +group field theory +group hopf algebra +group theory +group velocities +group velocity +grover algorithm +grover search +grover walk +grovers algorithm +grylloblatta campodeiformis +grylloblattidae +gsi anomaly +guided mode +gupta bleuler formalism +gutmann beckett method +gw approximation +gyration frequency +gyration radius +gyromagnetic ratio +gyrotropic media +gyrovector space +haag lopuszanski sohnius theorem +haags theorem +haar measure +hadamard gate +hadamard matrix +hadamard space +hadamard transform +hadamard walk +hadron +hadron spectroscopy +hadronization +hafnium controversy +hagedorn temperature +hagen rubens relation +hair removal +half metal +hall effect +halo nucleus +halochromism +halomonas +hamilton jacobi einstein equation +hamilton jacobi equation +hamiltonian +hamiltonian constraint +hamiltonian constraint of lqg +hamiltonian describing +hamiltonian description +hamiltonian dynamic +hamiltonian evolution +hamiltonian field theory +hamiltonian formalism +hamiltonian formulation +hamiltonian function +hamiltonian lattice gauge theory +hamiltonian matrix +hamiltonian operator +hamiltonian parameter +hamiltonian system +hamiltons optico mechanical analogy +hamiltons principle +hanbury brown +hanbury brown and twiss effect +hanbury brown twiss experiment +hankel function +hankel transform +hanle effect +hard core boson +hard hexagon model +hardening +hardys paradox +harmonic approximation +harmonic chain +harmonic confinement +harmonic generation +harmonic oscillator +harmonic oscillator potential +harmonic potential +harmonic superspace +harmonic trap +hartman effect +hartree fock method +hartree product +hawking effect +hawking radiation +hawking temperature +heat bath +heat deflection temperature +heat engine +heat of combustion +heat transfer +heat transport +heaviside feynman expression +heavy baryon chiral perturbation theory +heavy fermion +heavy fermion superconductor +heavy ion collision +heisenberg algebra +heisenberg chain +heisenberg cut +heisenberg equation +heisenberg group +heisenberg langevin equation +heisenberg limit +heisenberg model +heisenberg picture +heisenberg scaling +heisenberg uncertainty relation +heisenbergs microscope +helical orbit spectrometer +helicity +helicity bases +helicity basis +helion +helion energy +helium +helium atom +helium line ratio +helium neon laser +hellmann feynman theorem +helmholtz coil +helmholtz equation +helram +hemisphere +heralded single photon +heralded single photon source +hermite gauss +hermite polynomial +hermitian hamiltonian +hermitian matrix +hermitian operator +herta regina leng +hertz vector +hertzian dipole +hessian normal form +heteroazeotrope +heterodyne detection +heusler alloy +hexaarylbiimidazole +hexadecupole deformation +hexadecupole moment +hidden measurements interpretation +hidden momentum +hidden subgroup problem +hidden symmetry +hidden variable +hidden variable model +hidden variable theory +higgs boson +higgs field +higgs mechanism +higgs phase +higgsino +high aperture lens +high definition fiber tracking +high dimension +high dimensional entangled +high dimensional entanglement +high dimensional quantum state +high dimensional system +high dimensional transformation +high dimensionally entangled +high efficiency superconducting detector +high energy density physic +high energy liquid laser area defense system +high energy nuclear physic +high energy physic +high fidelity quantum gate +high finesse cavities +high finesse cavity +high finesse optical cavities +high finesse optical cavity +high finesse optical resonator +high flux advanced neutron application reactor +high frequency approximation +high frequency behavior of dielectric constant +high harmonic generation +high intensity focused ultrasound +high order harmonic generation +high resolution electron energy loss spectroscopy +high resolution transmission electron microscopy +high sensitivity +high spatial resolution +high temperature limit +high temperature superconductivity +high visibility +higher dimension +higher dimensional gamma matrices +higher dimensional quantum system +higher dimensional system +higher moment +higher order correlation function +higher temperature +highly charged ion +highly efficient +highly efficient superconducting detector +highly entangled +highly entanglement +highly sensitive +hilbert schmidt distance +hilbert schmidt norm +hilbert space +hilbert space dimension +hilbert space formalism +hilbert space structure +hilbert spectroscopy +hiper +histidine tryptophan ketoglutarate +holbrook superconductor project +holevo bound +holevo capacity +holevo information +holevos theorem +hollow atom +hollow cathode lamp +holographic principle +holography +holomorphic +holomovement +holon +holonomic quantum computation +holstein herring method +holstein primakoff transformation +homess law +homodyne detection +homodyne detector +homodyne measurement +homodyne tomography +homogeneous broadening +homogeneous magnetic field +honeycomb lattice +hong ou mandel +hong ou mandel effect +hong ou mandel interference +hong ou mandel interferometry +hookes atom +hopfield dielectric +horava lifshitz gravity +hot band +hot particle +hpo formalism +hubbard model +hueckel method +hunds case +hunds rule +hunter saxton equation +husimi distribution +husimi function +husimi q representation +huygens fresnel principle +huygens principle +huygenss principle +hybrid entanglement +hybrid functional +hybrid quantum system +hybrid silicon laser +hybrid system +hydrocarbon dew point +hydrodynamic equations for conducting fluid +hydrodynamic quantum analog +hydrogen atom +hydrogen fluoride laser +hydrogen like atom +hydrogen maser +hydrogen molecule +hydroxyl tagging velocimetry +hypercharge +hyperdeformation +hyperfine coupling +hyperfine interaction +hyperfine interaction energy +hyperfine level +hyperfine splitting +hyperfine state +hyperfine structure +hypermultiplet +hypernucleus +hyperon +hyperpolarization +hyperspectral imaging +hypertriton +hyphomonas +hypothermia +hypsochromic shift +hysteresis +hze ion +ice type model +idealizations in electromagnetism +ideally hard superconductor +identical atom +identical boson +identical copy +identical fermion +identical particle +identical photon +identity operator +identity theorem for holomorphic function +identity theorem for power series +idler mode +idler photon +image charge +image mapping spectrometer +imaginary time +imaging spectrometer +imaging spectroscopy +immirzi parameter +immobilized enzyme electron spin resonance +immunogold labelling +impact ionization +impact parameter +impedance +implicate and explicate order +in situ electron microscopy +in vivo magnetic resonance spectroscopy +ince gauss +incoherent broad band cavity enhanced absorption spectroscopy +incoherent scattering +incompatible measurement +incompatible observable +incongruent melting +increasing temperature +incredible utility +independent electron approximation +independent parameter +independent reservoir +independent source +index of reflection +index of refraction +indistinguishability +indistinguishable particle +indistinguishable photon +indistinguishable single photon +individual addressing +individual atom +individual attack +induce charge +induced gamma emission +inductance +induction coefficient +inductive resistance +inductively coupled plasma +inductively coupled plasma atomic emission spectroscopy +inelastic collision +inelastic neutron scattering +inelastic process +inelastic scattering +inequality violation +inert pair effect +inertial redshift +infinite dimension +infinite dimensional case +infinite dimensional hilbert space +infinite dimensional quantum system +infinite dimensional system +infinite energy +infinite family +infinite temperature +information capacity +information causality +information encoded +information entropy +information exchange +information flow +information gained +information geometry +information loss +information processing task +information theoretic approach +information theoretic security +information theory +information transfer +information transmission +infraparticle +infrared divergence +infrared fixed point +infrared safety +infrared spectroscopy +infrared spectroscopy correlation table +inglis teller equation +inhomogeneous broadening +inhomogeneous plane wave +inhour +injection seeder +inner bremsstrahlung +input output formalism +insensitive nuclei enhanced by polarization transfer +instanton +instanton fluid +integer quantum hall effect +integrable system +integral equations of the first kind +integrated optic +integrated optical circuit +integrating sphere +intelligent laser speckle classification +intense laser field +intensity correlation +intensity dependent coupling +intensity fluctuation +intensity interferometer +interacting atom +interacting boson +interacting boson model +interacting electron +interacting fermion +interacting field +interacting particle +interacting particle system +interacting quantum system +interacting qubit +interacting spin +interacting system +interaction energy +interaction free measurement +interaction hamiltonian +interaction picture +interaction potential +interatomic coulombic decay +interband cascade laser +interface between two media +interference +interference effect +interference experiment +interference fringe +interference pattern +interference phenomena +interference term +interference visibility +interferometric measurement +interferometric scheme +interferometry +internal conversion +internal conversion coefficient +internal degree +internal dynamic +internal energy +internal field +internal space time symmetry +internal symmetry +interpretations of quantum mechanics +intersubband polariton +intersystem crossing +intervalence charge transfer +interventional magnetic resonance imaging +intracavity field +intralase +intralase sbk +intramolecular vibrational energy redistribution +intraoperative electron radiation therapy +intraoperative mri +intravoxel incoherent motion +intrinsic decoherence +intrinsic parity +intrinsic property +intruder state +invariance +invariance mechanics +invariant set postulate +inverse participation ratio +inverse photoemission spectroscopy +inverse scattering problem +inverse scattering transform +inverse square law +inverse square root potential +inverse temperature +inversion symmetry +inversion with respect to a sphere +inxitu +ion coulomb crystal +ion crystal +ion implantation +ion laser +ion milling machine +ion notation +ion reactor +ion trap +ionization +ionization energy +ionized impurity scattering +ionosphere +ir uv mixing +iron based superconductor +iron beam +iron group +iron tetraboride +irrational conformal field theory +irreducible representation +irrotational vector +isadore perlman +ising anyon +ising chain +ising interaction +ising model +iskra laser +island of inversion +isobar +isodiapher +isogenous serie +isolated quantum system +isolated singularity +isolated system +isomeric shift +isosbestic point +isospin +isothermal transformation diagram +isotone +isotopic shift +isotropic state +isovalent hybridization +isttok +iterative algorithm +ito equation +ivan dryer +ivar giaever +j coupling +j/psi meson +j1 j2 model +jablonski diagram +jacobi identity +jacobi matrix +jacobi operator +jacobi polynomial +jacobian +janus laser +jarzynski equality +jaynes cummings hamiltonian +jaynes cummings hubbard model +jaynes cummings model +jefimenkos expression +jellium +jemris +joanna fowler +johari goldstein relaxation +john bell +john marburger +joint quantum entropy +jones polynomial +jordan map +jordan wigner transformation +josephson charge qubit +josephson effect +josephson energy +josephson junction +josephson junction count +josephson penetration depth +josephson phase +josephson voltage standard +josephson vortex +jost function +joulean heat +judd ofelt theory +julian schwinger +k alpha +k band multi object spectrograph +k beta +k line +k space +kadomtsev petviashvili equation +kadowaki woods ratio +kagome lattice +kane quantum computer +kaon +kaonic hydrogen +kaonium +kapitsa dirac effect +kapitza dirac regime +karnovsky fixative +karplus equation +kashas rule +kato theorem +kautsky effect +kcbs pentagram +kdv hierarchy +kelvin helmholtz instability +kerr effect +kerr medium +kerr nonlinearity +kibble zurek mechanism +kicked rotator +kicked rotor +kikuchi line +killing spinor +kinetic equation +kinetic inductance +kinetic inductance detector +kinetic theory +kinoshita lee nauenberg theorem +kirchhoff diffraction +kirchhoff integral theorem +kirchhoffs diffraction formula +kirchhoffs integral +kirchhoffs integral representation +kirszbraun theorem +kitaev model +klein gordon equation +klein nishina formula +klein paradox +klein transformation +klein tunneling +klystron +kmb09 protocol +kms state +knight shift +knizhnik zamolodchikov equation +kochen specker theorem +kodama state +kogut susskind fermion +kohn sham equation +kolmogorov complexity +kondo model +konishi anomaly +kontsevich quantization formula +koopmans theorem +korringa kohn rostoker approximation +korteweg de vries equation +kosterlitz thouless transition +kozai mechanism +kramers kronig dispersion relation +kramers kronig relation +kramers law +kramers theorem +kramers wannier duality +kraus representation +krefts dichromaticity index +krypton +krypton fluoride laser +ktp crystal +kubo formula +kubo gap +kuipers theorem +kuramoto model +kurchatov medal +kurt wuethrich +kuzyk quantum gap +ladder operator +lageos +lagrangian +lagrangian density +lagrangian foliation +lagrangian grassmannian +laguerre gauss +laguerre polynomial +lamb dicke limit +lamb dicke regime +lamb moessbauer factor +lamb shift +lambda baryon +lambda configuration +lambda point +lambda system +lambda transition +lambert w step potential +laminar turbulent transition +lanczos tensor +landau level +landau pole +landau quantization +landau zener formula +landau zener problem +landau zener transition +landauer formula +landοΏ½ g factor +landοΏ½ interval rule +langevin equation +langmuir state +lanthanum barium copper oxide +laplace equation +laplace expansion +laplace transform +laplaces method +laplacian operator +laporte rule +large angular momentum +large detuning +large gauge transformation +large helical device +large molecule +large quantum system +large scale quantum computation +large scale quantum computer +large separation +larmor formula +larmor formula for power +larmor precession +laser +laser ablation +laser absorption spectrometry +laser accelerometer +laser antibunching +laser assisted new attachment procedure +laser based angle resolved photoemission spectroscopy +laser beam machining +laser beam profiler +laser beam quality +laser beam welding +laser blended vision +laser bonding +laser broom +laser capture microdissection +laser cavities +laser cavity +laser coagulation +laser communication +laser communication in space +laser communications relay demonstration +laser construction +laser converting +laser cooled atom +laser cooling +laser cutting +laser cutting bridge +laser designator +laser detuning +laser diffraction analysis +laser diode +laser diode rate equation +laser doppler velocimetry +laser doppler vibrometer +laser dye +laser engineered net shaping +laser engraving +laser fence +laser field +laser fluctuation +laser frequency +laser guide star +laser gun +laser hair removal +laser harp +laser hybrid welding +laser induced breakdown spectroscopy +laser induced fluorescence +laser induced incandescence +laser induced thermotherapy +laser inertial fusion energy +laser integration line +laser intensity +laser jammer +laser lamp +laser level +laser light +laser lighting display +laser line level +laser linewidth +laser lithotripsy +laser machine control +laser marking +laser medicine +laser mοΏ½gajoule +laser parameter +laser peening +laser physic +laser pointer +laser power +laser power scaling +laser printing +laser projector +laser propulsion +laser pulse +laser pumping +laser radiation +laser rangefinder +laser resurfacing +laser scalpel +laser scanning +laser scanning vibrometry +laser science +laser shaft alignment +laser speckle +laser surgery +laser survey +laser tag +laser tracker +laser ultrasonic +laser warning receiver +laser weapon system +lasik +lasik md +lasing threshold +lasing without inversion +lasnex +latent internal energy +lateral casimir force +lattice boltzmann method +lattice density functional theory +lattice depth +lattice field theory +lattice gauge theory +lattice light sheet microscopy +lattice model +lattice potential +lattice qcd +lattice scattering +lattice site +lattice spacing +lattice system +laughlin wavefunction +laurent serie +laurents expansion +laws of reflection +laws of refraction +lax pair +lboz +lcp theory +lead star +legendre differential equation +legendre function +legendre polynomial +leggett garg +leggett garg inequalities +leggett garg inequality +leggett inequalities +leggett inequality +lehmann spectral representation +length measurement +lenzs law +lepton +leroy radius +leslie lawrance foldy +level crossing +level repulsion +level shift +level spacing +lever rule +liblas +libquantum +libration +lidar +lidar detector +lie algebra +lie conformal algebra +lie group +lie superalgebra +lieb conjecture +lieb oxford inequalities +lieb oxford inequality +lieb robinson bound +lienard wiechert potential +lifshitz formula +lifshitz theory +ligand k edge +light cone +light dressed state +light front computational method +light front quantization +light front quantization application +light harvesting complexes +light matter interaction +light polarization +light propagation +light pulse +light scattered +light scattering +light section +light sheet fluorescence microscopy +light source +light storage +light transport +light wave +lightcraft +lightest supersymmetric particle +limit theorem +limiting speed +lindblad equation +lindblad form +lindblad master equation +lindblad operator +lindblad resonance +lindblad superoperator +lindblad theory +line integral +line laser +linear antenna +linear combination of atomic orbital +linear dichroism +linear energy transfer +linear entropy +linear momentum +linear motor +linear operator +linear optical device +linear optical element +linear optical quantum computation +linear optical quantum computing +linear optics quantum computation +linear optics quantum computing +linear paul trap +linear programming +linear quantum system +linear response theory +linear stability +linear superposition +linear transform model +linearly polarized +linewidth +liouville equation +liouville von neumann equation +liouvillian operator +lipkin meshkov glick model +lippmann schwinger equation +liquid crystal +liquid crystal laser +liquid crystal thermometer +liquid helium +liquid liquid critical point +liquid metal cooled reactor +liquid sky +liquid state nuclear magnetic resonance +liquidus +lithium atom +lithium burning +little hierarchy problem +little parks effect +lloyd cross +local action +local causality +local control +local decoherence +local density approximation +local distinguishability +local hamiltonian +local hamiltonian problem +local hidden variable +local hidden variable model +local hidden variable theory +local oscillator +local perturbation +local quantum field theory +local quantum operation +local quench +local realism +local realistic model +local realistic theory +local state +local symmetry +local system +local theory +local transformation +local unitary equivalence +local unitary invariant +local unitary operation +local unitary transformation +local variable +locality +locality condition +localizable entanglement +localized mode +localized molecular orbital +localized state +locally compact quantum group +locc +lockin effect +log wind profile +logarithmic conformal field theory +logarithmic schroedinger equation +logic gate +logical gate +logical operation +logical qubit +logical state +london equation +london moment +london penetration depth +long coherence time +long distance communication +long distance entanglement +long distance experiment +long distance quantum communication +long distance quantum experiment +long josephson junction +long lived quantum memory +long path laser +long period fiber grating +long range correlation +long range entanglement +long range interaction +long slit spectroscopy +long time behaviour +long time dynamic +long time evolution +long time limit +long time nuclear waste +loop group +loop integral +loop quantum cosmology +loop quantum gravity +loop representation +loophole +loophole free bell test +loophole free test +loopholes in bell test experiment +lorentz boost +lorentz force +lorentz gauge +lorentz group +lorentz invariance +lorentz invariance in loop quantum gravity +lorentz invariant +lorentz lorenz relation +lorentz symmetry +lorentz transformation +lorenz condition +lorenz gauge +loschmidt echo +loss divincenzo quantum computer +lossy beam splitter +lossy cavities +lossy cavity +lossy channel +low angle laser light scattering +low dimension +low energy electron diffraction +low energy electron microscopy +low energy excitation +low energy limit +low energy spectrum +low field nuclear magnetic resonance +low level laser therapy +low lying excitation +low lying state +low temperature +low temperature limit +low temperature regime +low voltage electron microscope +lower critical solution temperature +lowest landau level +lsz reduction formula +luca turin +luli2000 +luminosity +lunar atmosphere and dust environment explorer +lunar reconnaissance orbiter +lund string model +luttinger liquid +luttingers theorem +lyapunov control +lyapunov exponent +lyman alpha blob +lyman alpha forest +lyman alpha line +lyman limit +mach zehnder interferometer +mach zehnder interferometry +machine learning +macroscopic average +macroscopic body +macroscopic entanglement +macroscopic field +macroscopic limit +macroscopic maxwell equation +macroscopic object +macroscopic quantum coherence +macroscopic quantum electrodynamic +macroscopic quantum phenomena +macroscopic quantum self trapping +macroscopic quantum state +macroscopic quantum system +macroscopic quantum tunneling +macroscopic realism +macroscopic scale +macroscopic superposition +macroscopic system +macroscopic world +macroscopically distinct state +madelung equation +madison symmetric torus +magic angle +magic angle spinning +magic state +magic state distillation +magnesium diboride +magnetic bottle +magnetic catalysis +magnetic charge +magnetic circular dichroism +magnetic diffusion +magnetic dipole +magnetic dipole dipole interaction +magnetic energy +magnetic field +magnetic field gradient +magnetic field in matter +magnetic field intensity +magnetic field strength +magnetic flux +magnetic flux density +magnetic flux quantum +magnetic impurity +magnetic induction +magnetic induction tomography +magnetic inequivalence +magnetic microtrap +magnetic mirror +magnetic moment +magnetic monopole +magnetic multipole field +magnetic permeability +magnetic photon +magnetic polarization +magnetic pressure +magnetic property +magnetic proton recoil neutron spectrometer +magnetic quantum number +magnetic resonance +magnetic resonance angiography +magnetic resonance cholangiopancreatography +magnetic resonance elastography +magnetic resonance force microscopy +magnetic resonance imaging +magnetic resonance imaging of the brain +magnetic resonance microscopy +magnetic resonance neurography +magnetic resonance spectroscopic imaging +magnetic resonance velocimetry +magnetic scalar potential +magnetic semiconductor +magnetic shielding +magnetic skyrmion +magnetic susceptibility +magnetic system +magnetic tension +magnetic translation +magnetic trap +magnetic wave +magnetization +magnetization transfer +magnetized liner inertial fusion +magnetized sphere +magnetizing current +magneto inertial fusion +magneto optical trap +magnetocapacitance +magnetohydrodynamics +magnetometer +magnetophosphene +magnetoreception +magnetoresistance +magnetoresistive random access memory +magnetostatics +magnon +major actinide +majorana bound state +majorana equation +majorana fermion +majorana mode +majorana representation +majoron +majumdar ghosh model +man in the middle +mandel parameter +mandel q parameter +mandelstam variable +mangler transformation +manick sorcar +manipulation of atoms by optical field +many body dynamic +many body effect +many body entanglement +many body hamiltonian +many body interaction +many body localisation +many body physic +many body problem +many body quantum system +many body state +many body system +many body theory +many minds interpretation +many particle system +many worlds interpretation +marchenko equation +margolus levitin theorem +markov approximation +markov chain +markov chain in the ising model +markov property +markovian approximation +markovian dynamic +markovian limit +markovian master equation +mars climate sounder +mars telecommunications orbiter +martin fleischmann +maryland lidar availability +maser +mass excess +mass gap +mass motion +mass number +mass of photon +mass spectrometer +mass spectrum +massive particle +massive scalar field +massless particle +massless scalar field +master equation +material property +materials oscilloscope +mathematical formulation of quantum mechanic +mathematical universe hypothesis +matrix algebra +matrix element +matrix isolation +matrix mechanic +matrix product operator +matrix product state +matrix representation +matsubara frequency +mattauch isobar rule +matter field +matter interferometry +matter wave +matter wave clock +matter wave interferometer +matter wave interferometry +mattis bardeen theory +maxim chernodub +maximal entanglement +maximally entangled mixed state +maximally entanglement +maximally mixed state +maximon +maximum entanglement +maximum entropy principle +maximum entropy spectral estimation +maximum likelihood estimation +maximum violation +maxwell +maxwell bloch equation +maxwell equation +maxwell stress tensor +maxwell wagner sillars polarization +maxwellian stress tensor +maxwells equation +mccumber relation +mcstas +mean field approach +mean field approximation +mean field dynamic +mean field theory +mean free path +measurable quantity +measurement apparatus +measurement back action +measurement based quantum computation +measurement based quantum computing +measurement device independent quantum cryptography +measurement device independent quantum key distribution +measurement in quantum mechanic +measurement limit +measurement operator +measurement precision +measurement problem +measurement process +measurement statistic +measurement strategy +measurement strength +measurement theory +measurement time +measurement uncertainty +mechanical frequency +mechanical mode +mechanical motion +mechanical oscillator +mechanical resonator +mechanochromism +meir wingreen formula +meissner effect +melting +melting point +melting point depression +membrane paradigm +memory effect +mercury laser +mermin inequalities +mermin inequality +mermin wagner theorem +meron +meson +mesonic molecule +mesophase +mesoscopic physic +mesoscopic system +messential singularity +metal induced gap state +metal k edge +metal l edge +metallic plate +metallomesogen +metastable helium +metastable inner shell molecular state +metastable state +method of continued fraction +method of electric image +method of image +method of steepest descent +metric operator +metric tensor +metrology +mhv amplitude +michael coey +michael mckubre +michael nobel +michel parameter +michelson interferometry +michelson morley experiment +michigan spin physics center +micro cavities +micro cavity +micro spectrophotometry +micro spider +microcanonical ensemble +microcoil +microprobe +microring resonator +microscopic degree +microscopic derivation +microscopic description +microscopic dynamic +microscopic system +microscopic theory +microscopy +microwave +microwave field +microwave frequency +microwave photon +microwave radiation +microwave regime +microwave resonator +mictomagnetism +millikelvin temperature +mimos +min entropy +mindo +mini tes +minimal coupling +minimal model +minimal monotone +minimal output entropy +minimal subtraction scheme +minimal supersymmetric standard model +minimum design metal temperature +minimum distance +minimum error discrimination +minimum output entropy +minimum uncertainty state +minisuperspace +minkowski space +minkowski space time +minkowski vacuum +minnesota functional +minority interpretations of quantum mechanic +miracl +mirror nuclei +miscibility gap +mixed anomaly +mixed entanglement +mixed layer +mixed phase space +mixed quantum state +mixed state +mixed state entanglement +mixed two qubit state +mndo +moata +mode entanglement +mode locking +mode structure +mode volume +modern valence bond theory +modulation frequency +moduli +moessbauer effect +moessbauer spectroscopy +molecular aggregate +molecular beacon +molecular beam +molecular dynamic +molecular electronic transition +molecular gases +molecular hamiltonian +molecular ion +molecular magnet +molecular multipole moment +molecular orbital +molecular orbital theory +molecular physic +molecular polarizability +molecular rotation +molecular system +molecular tagging velocimetry +molecular term symbol +molecular vibration +molecule +mollow triplet +moment problem +momentum distribution +momentum entanglement +momentum observable +momentum operator +momentum representation +momentum space +momentum transfer +momentum transfer cross section +monin obukhov length +monochromatic wavelength +monochromatic wavelength dispersive x ray fluorescence +monochromator +monogamy inequalities +monogamy inequality +monogamy relation +monopole moment +monopole radiation field +monotone metric +monte carlo method +monte carlo methods for electron transport +monte carlo simulation +montonen olive duality +mood ring +morse palais lemma +morse potential +moseleys law +mosquito laser +mossbauer effect +motional degree +motional ground state +motional narrowing +motional state +mott bethe formula +mott criterion +mott insulator +mott insulator state +mott phase +mott problem +mott scattering +movable mirror +moving charge +moving mirror +moving object +moyal bracket +moyal product +mpc&a +mpemba effect +mtz black hole +mu problem +muffin tin approximation +mulliken population analysis +multi configuration time dependent hartree +multi configurational self consistent field +multi particle entangled state +multi particle entanglement +multi particle system +multi partite entangled state +multi partite entanglement +multi photon entangled state +multi photon experiment +multi photon state +multi photon state generation +multi qubit state +multi qubit system +multi scale entanglement renormalization ansatz +multi unit spectroscopic explorer +multiangle light scattering +multicritical point +multifocal diffractive lens for laser application +multifocal plane microscopy +multiparticle entanglement +multipartite case +multipartite correlation +multipartite entanglement +multipartite pure state +multipartite quantum correlation +multipartite quantum state +multipartite quantum system +multipartite setting +multipartite state +multipartite system +multipass spectroscopic absorption cell +multiphoton interference +multiple exciton generation +multiple histories +multiple integrated laser engagement system +multiple prism grating laser oscillator +multiple qubit +multiple scale analysis +multiple scattering +multiplet +multiplication factor +multiplicative quantum number +multiplicity +multipolarity of gamma radiation +multipole expansion +multipole field +multipole moment +multipole radiation +multipoles constructed of point charge +multiqubit state +multireference configuration interaction +multiscale tomography +multispectral image +multispectral segmentation +multivariate optical computing +multivariate optical element +multiverse +munnerlyn formula +muon capture +muon catalyzed fusion +muon neutrino +muon spin spectroscopy +muonium +mutual information +mutual interaction +mutually unbiased bases +mutually unbiased basis +mutually unbiased measurement +mycoplasma mycoides +myron mathisson +mοΏ½ller plesset perturbation theory +mοΏ½ller scattering +n = 4 supersymmetric yang mills theory +n electron valence state perturbation theory +n qubit state +n qubit system +n slit interferometric equation +n vector model +n00n state +n=8 supergravity +nahm equation +nakajima zwanzig equation +nambu jona lasinio model +nanocrystal solar cell +nanolaser +nanomechanical oscillator +nanomechanical resonator +nanophotonic coherent imager +nanophotonic resonator +nanowire +narrow resonance +nash equilibria +nash equilibrium +national ignition facility +national lidar dataset +national radiological protection board +natural bond orbital +natural orbital +natural width +nd:gdvo4 +nd:yag laser +nd:ycob +nddo +near infrared camera and multi object spectrometer +near infrared spectroscopy +nearest neighbor +nearest neighbor interaction +nearest neighbour interaction +nearly free electron model +negative eigenvalue +negative energy density +negative energy state +negative probability +negative refraction +negative temperature +negatively charged nitrogen vacancy +negativity +neighboring site +neighboring spin +nematicon +neodymium doped yttrium lithium fluoride +neodymium doped yttrium orthovanadate +neon +neon burning process +nephelauxetic effect +nernst heat theorem +nested neutron spectrometer +neumann boundary condition +neutral atom +neutral current +neutral kaon +neutral kaon system +neutral particle +neutral particle oscillation +neutralino +neutrino +neutrino oscillation +neutron +neutron acceptance diagram shading +neutron activation +neutron backscattering +neutron bomb +neutron capture +neutron capture nucleosynthesis +neutron cross section +neutron degenerate matter +neutron detection +neutron diffraction +neutron economy +neutron emission +neutron flux +neutron imaging +neutron interferometry +neutron moisture gauge +neutron number +neutron probe +neutron proton ratio +neutron radiation +neutron reflectometry +neutron reflector +neutron research facility +neutron scattering +neutron source +neutron spectroscopy +neutron spin echo +neutron star +neutron stimulated emission computed tomography +neutron temperature +neutron time of flight scattering +neutron transport +neutronium +new worlds mission +newton wigner localization +newtonian gravity +next to minimal supersymmetric standard model +nichols algebra +nielsen ninomiya theorem +nielsen olesen vortex +nielsen olsen string +nike laser +nikiforov uvarov method +niobium germanium +niobium nitride +niobium tin +niobium titanium +nitrogen +nitrogen 15 nuclear magnetic resonance spectroscopy +nitrogen laser +nitrogen rule +nitrogen vacancy +nitrogen vacancy center +nmr quantum computation +nmr quantum computer +nmr quantum information processor +nmr spectroscopy +nmr tube +nmrpipe +no broadcast theorem +no cloning +no communication theorem +no go theorem +no signaling +no teleportation theorem +noble gas configuration +noether theorem +noethers second theorem +noethers theorem +noise correlation +noise equivalent power +noise immune cavity enhanced optical heterodyne molecular spectroscopy +noise level +noise model +noise property +noise ratio +noise reduction +noise source +noise spectrum +noise strength +noise threshold +noiseless quantum channel +noiseless subsystem +noisy channel +noisy environment +noisy quantum channel +noisy storage model +non abelian anyon +non abelian gauge transformation +non abelian geometric phase +non abelian statistic +non adiabatic transition +non classical correlation +non classical feature +non classical light +non classical property +non classical state +non commuting observable +non commuting operator +non demolition +non equilibrium dynamic +non equilibrium steady state +non exponential decay +non extensive self consistent thermodynamical theory +non gaussian state +non hermitian hamiltonian +non hermitian operator +non hermitian system +non inertial frame +non interacting fermion +non interacting particle +non linear coherent state +non linear sigma model +non local correlation +non local property +non markovian behaviour +non markovian character +non markovian dynamic +non markovian effect +non markovian environment +non markovian master equation +non markovian noise +non markovian open quantum system +non markovian quantum dynamic +non markovian quantum state diffusion +non markovian regime +non maximally entanglement +non orthogonal quantum state +non orthogonal state +non perturbative +non relativistic case +non relativistic limit +non relativistic quantum mechanic +non topological soliton +non unitary evolution +nonclassical correlation +nonclassical effect +nonclassical feature +nonclassical light +nonclassical photon counting +nonclassical property +nonclassical state +noncommutative geometry +noncommutative quantum field theory +noncommutative quantum mechanic +noncommutative space +noncommuting observable +noncontextuality inequalities +noncontextuality inequality +nonequilibrium dynamic +nonequilibrium steady state +noninertial frame +nonlinear cavities +nonlinear cavity +nonlinear coherences +nonlinear coupling +nonlinear crystal +nonlinear dirac equation +nonlinear dynamic +nonlinear electrodynamic effect +nonlinear equation +nonlinear interaction +nonlinear medium +nonlinear optic +nonlinear optical process +nonlinear oscillator +nonlinear processe +nonlinear quantum mechanic +nonlinear refractive index +nonlinear regime +nonlinear response +nonlinear schroedinger equation +nonlinear susceptibility +nonlinear system +nonlocal correlation +nonlocal lagrangian +nonlocal nature +nonlocal property +nonlocality +nonlocality in time +nonorthogonal state +nonrelativistic limit +nonrelativistic quantum mechanic +nontrivial topology +nonzero probability +nonzero temperature +noon state +normal dispersion +normal mode +normal mode splitting +normal order +northwest nuclear consortium +nova +novette laser +novikov veselov equation +np complete +npdgamma experiment +nuclear astrophysic +nuclear binding energy +nuclear chain reaction +nuclear chemistry +nuclear collision length +nuclear cross section +nuclear data +nuclear density +nuclear drip line +nuclear emulsion +nuclear energy in kenya +nuclear energy in saudi arabia +nuclear force +nuclear forensic +nuclear fusion +nuclear instruments and methods in physics research +nuclear interaction length +nuclear isomer +nuclear magnetic moment +nuclear magnetic resonance +nuclear magnetic resonance chemical shift re referencing +nuclear magnetic resonance crystallography +nuclear magnetic resonance database method +nuclear magnetic resonance decoupling +nuclear magnetic resonance in porous media +nuclear magnetic resonance quantum computer +nuclear magnetic resonance spectra database +nuclear magnetic resonance spectroscopy +nuclear magnetic resonance spectroscopy of carbohydrate +nuclear magnetic resonance spectroscopy of nucleic acid +nuclear magnetic resonance spectroscopy of protein +nuclear magnetic resonance spectroscopy of stereoisomer +nuclear matter +nuclear microscopy +nuclear orientation +nuclear overhauser effect +nuclear physic +nuclear pumped laser +nuclear quadrupole moment +nuclear quadrupole resonance +nuclear resonance fluorescence +nuclear resonance vibrational spectroscopy +nuclear shell model +nuclear spin +nuclear structure +nuclear transparency +nucleic acid quantitation +nucleocosmogenesis +nucleogenic +nucleon +nucleon spin structure +nucleosynthesis +nuclep +nukleonik +number operator +number state +number state expansion +number theory +numerical algorithm +numerical analysis +numerical approach +numerical calculation +numerical computation +numerical evidence +numerical example +numerical experiment +numerical method +numerical optimization +numerical renormalization group +nv center +nοΏ½el temperature +objective collapse theory +oblate +obliquity factor in diffraction +oblivious transfer +observable +observable consequence +observer +obstacles in wave guide +occupation number +octacube +octupole moment +od600 +oddo harkins rule +oerstedts law +of the poisson equation +ohmic power +ohmic resistance +ohms law +oil drop experiment +old quantum theory +oldstone conference +omega baryon +omega meson +on demand source +on shell and off shell +on shell renormalization scheme +on thermonuclear war +one dimensional chain +one dimensional harmonic oscillator +one dimensional harmonic trap +one dimensional hubbard model +one dimensional lattice +one dimensional optical lattice +one dimensional quantum mechanic +one dimensional quantum system +one dimensional system +one dimensional waveguide +one electron universe +one loop feynman diagram +one parameter family +one photon interference +one qubit gate +one way quantum computation +one way quantum computer +onetep +oniom +onium +onset of deconfinement +oocyte selection +oops leon +opacity +opals +open boundary condition +open quantum dynamic +open quantum system +open shell +open system dynamic +operando spectroscopy +operating temperature +operational interpretation +operator algebra +operator norm +operator quantum error correction +oppenheimer phillips process +optical amplifier +optical autocorrelation +optical beam +optical bistability +optical bloch equation +optical cavities +optical cavity +optical coherence +optical coherence tomography +optical control +optical decay +optical depth +optical detection +optical device +optical dipole trap +optical equivalence theorem +optical excitation +optical fiber +optical fibre +optical field +optical frequency comb +optical frequency multiplier +optical interferometry +optical isolator +optical lattice +optical loss +optical microcavities +optical microcavity +optical mode +optical nanofiber +optical network +optical parametric amplification +optical parametric amplifier +optical parametric oscillator +optical phase +optical phase space +optical photon +optical potential +optical pulse +optical pumping +optical quantum computing +optical quantum information processing +optical qubit +optical realization +optical resonator +optical response +optical scheme +optical setup +optical spectrometer +optical state +optical theorem +optical transition +optical trap +optical tweezer +optical wavelength +optimal choice +optimal cloning +optimal control problem +optimal control theory +optimal discrimination +optimal entanglement witnesses +optimal fidelity +optimal measurement +optimal protocol +optimal quantum cloning +optode +optomechanic +optomechanical cavities +optomechanical cavity +optomechanical coupling +optomechanical interaction +optomechanical system +optomechanically induced transparency +oracle query +orbit modeling +orbital angular momentum +orbital free density functional theory +orbital hybridisation +orbital magnetization +orbital motion +orbital overlap +orbital stability +orbiton +orchestrated objective reduction +order operator +orders of approximation +organic laser +organic molecule +organic superconductor +orientation entanglement +orientation polarization +ornstein uhlenbeck process +orthodox quantum mechanic +orthogonal function +orthogonal state +orthogonality relation +orthomodular lattice +orthonormal bases +orthonormal basis +orthonormal system +orthonormalization +oscillating circuit +oscillation threshold +oscillator representation +oscillator strength +oscillon +osculating orbit +out of equilibrium dynamic +output correlation matrix +output coupler +ova bank +overtone band +oxygen burning process +oxypnictide +ozi rule +p adic quantum mechanic +p form electrodynamic +p nuclei +p process +page time +painted turtle +pair creation +pair production +pairwise entanglement +pake doublet +pandemonium effect +pandya theorem +parallel plate capacitor +parallel transport +paramagnetic +paramagnetic nuclear magnetic resonance spectroscopy +paramagnetism +parameter estimation +parametric amplification +parametric amplifier +parametric down conversion +parametric downconversion +parametric oscillator +parametric process +parametric resonance +parastatistic +paraxial approximation +paraxial limit +paraxial wave equation +pariser parr pople method +parity +parity anomaly +parity check matrices +parsec +parsevals equation +parsevals theorem +partial cloning +partial information +partial polarization +partial separability +partial trace +partial transposition criterion +partial wave analysis +particle creation +particle entanglement +particle in a box +particle in a one dimensional lattice +particle in a ring +particle in a spherically symmetric potential +particle induced x ray emission +particle loss +particle motion +particle number operator +particle physics and representation theory +particle production +particle trajectory +partite entanglement +partition function +parton +pascal photocoagulator +paser +path distinguishability +path entanglement +path integral +path integral formulation +path integral molecular dynamic +path integral monte carlo +path integration +path length +path ordering +patterson power cell +paul kuroda +paul trap +pauli channel +pauli equation +pauli exclusion principle +pauli group +pauli lubanski pseudovector +pauli matrix +pauli operator +pauli principle +pauli spin operator +pauli villars regularization +paulings principle of electroneutrality +pbr theorem +peakon +pearl vortex +peccei quinn theory +pegasus toroidal experiment +peierls substitution +peierls transition +penetration depth +penguin diagram +penning trap +penrose interpretation +pentaquark +per cent mille +percolation critical exponent +percolation theory +percolation threshold +perdaix +peregrine soliton +peres horodecki criterion +perfect conductor +perfect correlation +perfect quantum state transfer +perfect state transfer +perfect teleportation +periodic boundary condition +periodically poled ktp crystal +periodically poled lithium niobate +permanent magnet +permanent magnetization +permeability +permittivity +permutation group +permutation symmetry +perpendicular magnetic field +persistent current +personnel halting and stimulation response rifle +perturbation +perturbation problem beyond all order +perturbation theory +perturbative qcd +petahertz +peter l. hagelstein +peter van riper +pglo +phase boundary +phase coherence +phase control +phase damping channel +phase decoherence +phase dependent correlation function +phase diagram +phase difference +phase diffusion +phase distribution +phase error +phase estimation +phase factor +phase fluctuation +phase gate +phase information +phase instability +phase matching +phase measurement +phase modulation +phase noise +phase of plane wave +phase operator +phase quadrature +phase qubit +phase retrieval +phase sensitivity +phase separation +phase shift +phase shift for scattering by sphere +phase shifter +phase space approach +phase space density +phase space description +phase space distribution +phase space formulation +phase space representation +phase state +phase structure +phase super resolution +phase time +phase transition +phase transitions and critical phenomena +phase velocities +phase velocity +phason +phi meson +philosophical interpretation of classical physic +phonon +phonon bath +phonon drag +phonon interaction +phonon mode +phonon noise +phonon number +phonon scattering +phosphorescence +phosphorus 31 nuclear magnetic resonance +phosphorus donor +photino +photo detection +photo meson +photoacoustic effect +photoacoustic spectroscopy +photobleaching +photochromic lens +photochromism +photodarkening +photodetection +photodisintegration +photodynamic therapy +photoelectric effect +photoelectrochemical process +photoelectron photoion coincidence spectroscopy +photoemission spectroscopy +photofission +photoinduced phase transition +photoionization +photoionization mode +photoluminescence +photoluminescence excitation +photomagneton +photomedicine +photon +photon absorption +photon antibunching +photon blockade +photon bunching +photon correlation +photon counter +photon counting +photon counting distribution +photon counting statistic +photon detection +photon detector +photon distribution +photon emission +photon energy +photon entanglement +photon field +photon flux +photon generation +photon loss +photon mass +photon number +photon number distribution +photon number resolving detector +photon number splitting attack +photon number state +photon number statistic +photon pair +photon polarization +photon scattering +photon source +photon state +photon statistic +photon structure function +photon subtraction +photon wave function +photonic band gap +photonic crystal +photonic crystal cavities +photonic crystal cavity +photonic entanglement +photonic laser thruster +photonic molecule +photonic orbital angular momentum +photonic qubit +photonic state +photonic system +photorefractive keratectomy +photorejuvenation +photosynthesis +photosynthetic complexes +photothermal microspectroscopy +photothermal spectroscopy +photovoltaic +physical limit +physics applications of asymptotically safe gravity +physics of magnetic resonance imaging +pi josephson junction +pi pulse +pickering series +piezochromism +piezoelectric effect +piezoelectricity +pilot wave +pilot wave theory +pinning force +pion +pion decay constant +pionium +planck constant +planck distribution +planck einstein relation +planck length +planck mass +planck particle +planck postulate +planck scale +plancks law +plane of incidence +plane wave +plane wave expansion +planetary boundary layer +planetary fourier spectrometer +plasma +plasma acoustic shield system +plasma frequency +plasma model +plasma science society of india +plasmaron +plasmon +plasmonic laser +plasmonic nanoparticle +plate trick +plekton +plum pudding model +pockels cell +pockels effect +pocono conference +poeschl teller potential +poincare group +poincare stresses +poincarοΏ½ group +poincarοΏ½ lindstedt method +point dipole +point interaction +point particle +pointer bases +pointer basis +pointer state +poisson bracket +poisson equation +poisson superalgebra +poissonian pumping +poissonian statistic +poissons equation +polar coordinate +polar decomposition +polar molecule +polar substance +polar vector +polariton +polariton laser +polarizability +polarization +polarization correlation +polarization degree +polarization entangled photon +polarization entangled photon pair +polarization entanglement +polarization interferometer +polarization optic +polarization potential +polarization property +polarization qubit +polarization rotator +polarization sensitive imaging +polarization spectroscopy +polarization squeezing +polarization state +polarization vector +polarized light +polarized photon +polaron +polyamorphism +polymer field theory +polynomial time algorithm +polynomial wigner ville distribution +polythiazyl +pomeron +ponderomotive energy +ponderomotive force +pontecorvo maki nakagawa sakata matrix +poole frenkel effect +pople diagram +pople notation +poppers experiment +population dynamic +population imbalance +population inversion +population transfer +population trapping +porods law +port wine stain +position and momentum space +position dependent effective mass +position dependent mass +position measurement +position operator +position space +positive definite kernel +positive operator valued measure +positive partial transpose +positive partial transposition +positron +positron annihilation spectroscopy +positron emission tomography +positronium +positronium hydride +post hartree fock +post selection +postbqp +potential energy +potential energy of protein +potential energy surface +potential well +potts model +pour point +pourbaix diagram +povm +powder diffraction +power flow +power law decay +power loss +power series +poynting robertson effect +poynting theorem +poynting vector +poyntings theorem +ppt state +practical quantum key distribution +precession electron diffraction +precession frequency +precision measurement +precision tests of qed +precursor +pregeometry +preon +present day technology +presolar grain +pressuron +primary field +prime dimension +prime number +prime power dimension +primon gas +principal quantum number +principal value +principle of locality +principle of superposition +prior entanglement +prior information +prior knowledge +prior work +prism compressor +prism spectrometer +privacy amplification +probabilistic description +probabilistic interpretation +probabilistic teleportation +probability amplitude +probability current +probability density function +probability distribution +probability interpretation +probability measure +probability representation +probability theory +probe beam +probe field +probe laser +probe light +probe pulse +probe qubit +problem of time +proca action +proca lagrangian +process tomography +product bases +product basis +product numerical range +product operator formalism +product state +project 1640 +project sherwood +project valkyrie +projected entangled pair state +projection measurement +projection operator +projection postulate +projective hilbert space +projective measurement +projective superspace +projector augmented wave method +prolate +prompt neutron +propagator +proper time +protective measurement +protein chemical shift prediction +protein chemical shift re referencing +protein protein interaction +protocol on blinding laser weapon +proton +proton boron fusion +proton coupled electron transfer +proton decay +proton emission +proton enhanced nuclear induction spectroscopy +proton exchange membrane +proton exchange membrane fuel cell +proton magnetic moment +proton nuclear magnetic resonance +proton pack +proton proton chain reaction +proton pump +proton spin crisis +proton therapy +proton to electron mass ratio +proton transfer reaction mass spectrometry +proton tunneling +protonium +protonophore +proximity effect +pseudogap +pseudomonas +pseudomonas genome database +pseudopotential +pseudoscalar meson +pseudospin symmetry +pseudovector meson +psi meson +psychrophile +pt symmetric hamiltonian +pt symmetric quantum mechanic +pt symmetric system +pt symmetry +pt symmetry breaking +ptc rubber +public channel +pulay stress +pulse duration +pulse height analyzer +pulse laser +pulse programming +pulse sequence +pulse shape +pulse width +pulsed electron paramagnetic resonance +pulsed excitation +pulsed field gradient +pulsed field magnet +pulsed laser deposition +pump beam +pump depletion +pump field +pump laser +pump power +pure dephasing +pure entanglement +pure gaussian state +pure quantum state +pure spinor +pure state +pure state entanglement +pure three qubit state +purely classical +purely quantum +purification of quantum state +purity +push broom scanner +pyquante +pyroelectric effect +pyroelectricity +pyrromethene +q ball +q switching +q value +qbism +qcd matter +qcd string +qcd sum rule +qcd vacuum +qcma +qed vacuum +qkd protocol +qkd system +qma +qmc@home +qnd measurement +quadratic configuration interaction +quadrature phase measurement +quadrature phase operator +quadrature squeezing +quadrature variance +quadrupole deformation +quadrupole moment +quadrupole splitting +quadrupole transition +quantisation +quantitative susceptibility mapping +quantization +quantization commutes with reduction +quantization of charge +quantization of the electromagnetic field +quantized electromagnetic field +quantized field +quantum 1/f noise +quantum action +quantum adiabatic algorithm +quantum adiabatic evolution +quantum adiabatic theorem +quantum advantage +quantum adversary +quantum affine algebra +quantum algebra +quantum algorithm +quantum algorithm for linear systems of equation +quantum amplifier +quantum annealer +quantum annealing +quantum anomaly +quantum aspects of life +quantum attack +quantum automata +quantum baker +quantum bayesianism +quantum beat +quantum billiard +quantum biology +quantum bit +quantum bit commitment +quantum bit error rate +quantum black hole +quantum brownian motion +quantum bus +quantum byzantine agreement +quantum calculus +quantum capacitance +quantum capacity +quantum carpet +quantum cascade laser +quantum catalyst +quantum cellular automata +quantum cellular automaton +quantum channel +quantum channel capacity +quantum chaos +quantum chaotic system +quantum chemistry +quantum chemistry composite method +quantum chromodynamic +quantum circuit +quantum classical boundary +quantum classical correspondence +quantum classical transition +quantum clock +quantum cloning +quantum code +quantum cognition +quantum coherence +quantum communication +quantum communication channel +quantum communication complexity +quantum compass +quantum complex network +quantum complexity +quantum complexity theory +quantum computation +quantum computation based +quantum computer +quantum computing +quantum computing application +quantum concentration +quantum configuration space +quantum confined stark effect +quantum contextuality +quantum convolutional code +quantum correction +quantum correlation +quantum cosmology +quantum counterpart +quantum coupling +quantum cramer rao bound +quantum critical point +quantum criticality +quantum cryptographic protocol +quantum cryptography +quantum cylindrical quadrupole +quantum darwinism +quantum data bus +quantum decay +quantum decoherence +quantum defect +quantum degeneracy +quantum degree +quantum dense coding +quantum depolarizing channel +quantum description +quantum device +quantum diffusion +quantum digital signature +quantum dimer model +quantum discord +quantum dissipation +quantum dissipative system +quantum domain +quantum dot +quantum dot cellular automaton +quantum dot coupled +quantum dot display +quantum dot laser +quantum dot solar cell +quantum dynamic +quantum dynamical semigroup +quantum effect +quantum efficiency +quantum electrochemistry +quantum electrodynamic +quantum electromagnetic field +quantum emitter +quantum energy teleportation +quantum ensemble +quantum entanglement +quantum entropy +quantum equation +quantum equilibrium +quantum eraser +quantum eraser experiment +quantum erasure +quantum ergodicity +quantum error correcting code +quantum error correction +quantum error correction code +quantum espresso +quantum estimation theory +quantum evolution +quantum factoring algorithm +quantum feedback +quantum feedback control +quantum fiction +quantum fidelity +quantum field +quantum field theory +quantum field theory in curved spacetime +quantum filtering +quantum fingerprinting +quantum finite automata +quantum fisher information +quantum fluctuation +quantum fluid +quantum flux parametron +quantum foam +quantum formalism +quantum foundation +quantum fourier transform +quantum game +quantum game theory +quantum gas +quantum gate +quantum gate operation +quantum gauge theory +quantum geometry +quantum graph +quantum gravity +quantum ground state +quantum group +quantum gyroscope +quantum hall effect +quantum hamilton jacobi equation +quantum hardware +quantum harmonic oscillator +quantum heat engine +quantum heat engines and refrigerators +quantum heterostructure +quantum hilbert space +quantum history +quantum hydrodynamic +quantum hypothesis testing +quantum illumination +quantum imaging +quantum immortality +quantum indeterminacy +quantum inequalities +quantum inequality +quantum information +quantum information processor +quantum information protocol +quantum instrument +quantum interference +quantum interference effect +quantum interferometry +quantum internet +quantum inverse scattering method +quantum ising chain +quantum ising model +quantum jump +quantum jump approach +quantum jump method +quantum key +quantum key distribution +quantum kicked rotor +quantum kz equation +quantum langevin equation +quantum lattice system +quantum lc circuit +quantum light +quantum limit +quantum lithography +quantum localisation +quantum logic +quantum logic gate +quantum logic operation +quantum lower bound +quantum machine +quantum machine learning +quantum magnetism +quantum markov chain +quantum master equation +quantum matter +quantum measurement +quantum measurement problem +quantum mechanic +quantum mechanical bell test prediction +quantum mechanical modification +quantum mechanical scattering of photon and nucleus +quantum mechanics of time travel +quantum memory +quantum metamaterial +quantum metrology +quantum mirage +quantum money +quantum monte carlo +quantum mutual information +quantum network +quantum neural network +quantum no deleting theorem +quantum noise +quantum noise reduction +quantum non demolition measurement +quantum non equilibrium +quantum non locality +quantum nondemolition measurement +quantum nonlocality +quantum number +quantum operation +quantum optic +quantum optical spectroscopy +quantum optomechanic +quantum oscillator +quantum paradox +quantum parallelism +quantum parameter estimation +quantum pendulum +quantum phase +quantum phase estimation +quantum phase estimation algorithm +quantum phase gate +quantum phase space +quantum phase transition +quantum phenomena +quantum phenomenon +quantum point contact +quantum potential +quantum prediction +quantum principle +quantum probability +quantum probability theory +quantum process +quantum process tomography +quantum processor +quantum programming +quantum protocol +quantum pseudo telepathy +quantum pure state +quantum quench +quantum query complexity +quantum rabi model +quantum radar +quantum random number generator +quantum random walk +quantum randomness +quantum readout of puf +quantum reality +quantum realm +quantum recurrance phenomena +quantum refereed game +quantum reference frame +quantum reflection +quantum refrigerator +quantum regime +quantum register +quantum regression theorem +quantum relative entropy +quantum repeater +quantum resonance +quantum resource +quantum revival +quantum rotor model +quantum scattering +quantum search algorithm +quantum searching +quantum secret sharing scheme +quantum secure direct communication +quantum sensing +quantum sensor +quantum shannon theory +quantum side information +quantum signal +quantum simulator +quantum sort +quantum space time +quantum speed limit +quantum speedup +quantum spin +quantum spin chain +quantum spin hall effect +quantum spin model +quantum spin tunneling +quantum stabilizer code +quantum state diffusion +quantum state discrimination +quantum state engineering +quantum state estimation +quantum state preparation +quantum state reconstruction +quantum state reduction +quantum state space +quantum state tomography +quantum state transfer +quantum statistical mechanic +quantum statistical property +quantum steering +quantum stein +quantum stochastic calculus +quantum stochastic differential equation +quantum storage +quantum strategy +quantum structure +quantum subsystem +quantum suicide +quantum superposition +quantum superposition principle +quantum switch +quantum t design +quantum technology +quantum teleportation +quantum thermodynamic +quantum threshold theorem +quantum tic tac toe +quantum to classical transition +quantum tomography +quantum topology +quantum trajectory approach +quantum transition +quantum transport +quantum triviality +quantum tunneling +quantum tunnelling +quantum tunnelling composite +quantum turing machine +quantum two level system +quantum uncertainty +quantum universe +quantum vacuum fluctuation +quantum vacuum thruster +quantum vortex +quantum walk +quantum wave function +quantum wave packet +quantum well +quantum well laser +quantum wire +quantum yield +quantum zeno dynamic +quantum zeno effect +quark +quark gluon plasma +quark lepton complementarity +quark model +quark nova +quark star +quarkonium +quartic interaction +quasi harmonic approximation +quasi set theory +quasi static approximation +quasi stationary current +quasiatom +quasielastic neutron scattering +quasielastic scattering +quasiparticle +quasiparticle excitation +quasiprobability distribution +qubit +qubit channel +qubit coherence +qubit entanglement +qubit field theory +qubit frequency +qubit gate +qubit measurement +qudit +quench dynamic +quenched approximation +quenching +query complexity +quiteron +qunit +qutrit +r parity +r process +r symmetry +rabi cycle +rabi frequency +rabi hamiltonian +rabi model +rabi oscillation +rabi problem +rabi resonance method +racah parameter +racetrack memory +radial mode +radial number +radially polarized +radiated electromagnetic energy +radiation chemistry +radiation cross section +radiation damping +radiation field +radiation impedance +radiation length +radiation pressure +radiation pressure force +radiation reaction +radiation resistance +radiation zone +radiative auger effect +radiative energy loss +radiative heat transfer +radiative reaction +radio frequency +radio spectrum scope +radioactive displacement law +radiofrequency coil +radius of convergence +raman amplification +raman cooling +raman laser +raman nath regime +raman optical activity +raman process +raman scattering +raman spectroscopy +raman transition +ramsauer townsend effect +ramsey interferometry +ramsey spectroscopy +random bit +random coil index +random error +random laser +random matrix theory +random number +random phase approximation +random pure state +random state +random variable +random walk +randomized benchmarking +randomness +range criterion +rapid phase transition +rapid single flux quantum +rapidity +rare earth ion +rare earth ion doped crystal +rarita schwinger equation +rashba spin orbit coupling +rate equation +rational conformal field theory +rational number +rayleigh criterion +rayleigh jeans law +rayleigh scattering +rb atom +rb vapor +rds 3 +reaction center +reaction coordinate +real hilbert space +real time mri +realist interpretation +realistic interpretation +realistic theory +reality +realized experimentally +recalescence +reciprocal lattice +reciprocation theorem of green +recoil energy +recoil temperature +recrystallization +rectangular potential barrier +recycling antimatter +redfield equation +redshift +reduced density matrix +reduced density operator +reduced dynamic +reduction criterion +reed muller code +reeh schlieder theorem +reentrant superconductivity +reflection coefficient +reflection high energy electron diffraction +reflection law +reflectometric interference spectroscopy +refraction law +refractive index +regenerative amplification +regge theory +regular +regularization +regularly pumped laser +relational approach to quantum physic +relational quantum mechanic +relative entropy +relative error +relative frequency +relative intensity noise +relative locality +relative phase +relative state +relativistic addition of velocities +relativistic breit wigner distribution +relativistic causality +relativistic correction +relativistic covariance +relativistic dynamic +relativistic effect +relativistic electron beam +relativistic hamilton equation +relativistic heavy ion collider +relativistic lagrange equation +relativistic motion +relativistic particle +relativistic quantum chemistry +relativistic quantum field theory +relativistic quantum information +relativistic quantum mechanic +relativistic quantum theory +relativistic regime +relativistic runaway electron avalanche +relativistic symmetry +relativistic theory +relativistic transformation of acceleration +relativistic wave equation +relativity theory +relaxation +relaxation dynamic +relaxation process +relaxation rate +relaxation time +relaxometry +relic particle +remanence +remission +remote sensing atmospheric boundary layer +remote state preparation +renner teller effect +renninger negative result experiment +renormalization +renormalization group +renormalization procedure +renormalon +renyi entanglement entropy +renyi entropy +representation theory of the galilean group +representation theory of the lorentz group +representation theory of the poincarοΏ½ group +representations of the atmospheric boundary layer +representer theorem +reproducing kernel hilbert space +reptation monte carlo +repulsive interaction +repulsive state +research reactor +reservoir engineering +residual chemical shift anisotropy +residual dipolar coupling +residual entanglement +residual resistance ratio +residue +residue theorem +resolution +resolved sideband cooling +resolved sideband regime +resonance +resonance condition +resonance energy +resonance enhanced multiphoton ionization +resonance fluorescence +resonance frequency +resonance raman spectroscopy +resonance state +resonances in scattering +resonant absorption +resonant cavities +resonant cavity +resonant coupling +resonant enhancement +resonant excitation +resonant frequency +resonant inelastic x ray scattering +resonant interaction +resonant line shape +resonant state +resonant tunneling +resonating valence bond theory +resource theory +response factor +response function +response time +rest frame +rest mass +resting state fmri +restricted open shell hartree fock +reststrahlen effect +resummation +retarded green function +retarded potential +retarded time +retrocausality +retrograde condensation +reverse reconciliation +reversible circuit +reversibly assembled cellular composite material +revival time +rho meson +rhodamine +rhodamine 123 +rhodamine 6g +rhodamine b +riafp +richard feynman +riemann hilbert problem +riemann surface +riemann zeta function +rietveld refinement +rigged hilbert space +right hand rule +rigid rotor +ring cavities +ring cavity +ring laser +ring laser gyroscope +rishon model +ritz method +robert w. bussard +robin boundary condition +robin bullough +robinson oscillator +rodriguess formula +rolling ball argument +ron rocco +ronens golden rule +room temperature superconductor +roothaan equation +roper resonance +rosenau hyman equation +rossiter mclaughlin effect +rotating frame +rotating magnetic field +rotating wave approximation +rotation group +rotation operator +rotational invariance +rotational spectroscopy +rotational state +rotational symmetry +rotational temperature +rotational vibrational spectroscopy +roton +round trip gain +rovibronic coupling +rp process +rrkm theory +rst model +rubidium +ruby laser +rule 184 +rule of mutual exclusion +runge gross theorem +rushbrooke inequalities +rushbrooke inequality +rusi taleyarkhan +rutherford atom model +rutherford backscattering spectrometry +rutherford medal and prize +rutherford model +rutherford scattering +rydberg atom +rydberg blockade +rydberg constant +rydberg correction +rydberg excitation +rydberg formula +rydberg ionization spectroscopy +rydberg klein rees method +rydberg molecule +rydberg ritz combination principle +rydberg state +s factor +s function +s knot +s matrix +s process +s pulse +s wave scattering length +sacla +saddlepoint approximation method +sagnac interferometer +sagnac interferometry +saha ionization equation +sakurais bell inequalities +sakurais bell inequality +sam1 +sarg04 +satellite laser ranging +saturated absorption spectroscopy +saturated spectroscopy +saturation dome +saturation magnetization +saxion +scalable architecture +scalable quantum computation +scalable quantum computer +scalable quantum computing +scalable quantum information processing +scalar boson +scalar curvature +scalar electrodynamic +scalar field +scalar field theory +scalar meson +scalar potential +scalar tensor theory +scale free ideal gas +scale invariance +scale relativity +scaling behaviour +scaling dimension +scaling law +scaling limit +scaling property +scanning confocal electron microscopy +scanning electron microscope +scanning mobility particle sizer +scanning squid microscope +scanning squid microscopy +scanning transmission electron microscopy +scanning tunneling spectroscopy +scattered light +scattered photon +scattering +scattering amplitude +scattering approach +scattering channel +scattering cross section +scattering from rough surface +scattering length +scattering matrix +scattering media absorption spectroscopy +scattering of particle +scattering of radiation +scattering phase shift +scattering potential +scattering problem +scattering process +scattering state +scattering theory +schaefer bergmann diffraction +scharnhorst effect +scheelite +scherrer equation +schmidt coefficient +schmidt decomposition +schmidt number +schmidt rank +schmidts orthogonalization +schoenflies notation +schottky effect +schreinemakers analysi +schrieffer wolff transformation +schrodinger cat state +schrodinger equation +schroedinger cat +schroedinger equation +schroedinger field +schroedinger functional +schroedinger group +schroedinger newton equation +schroedinger picture +schroedingers cat +schroedingers cat trilogy +schumann resonance +schumann runge band +schwarzschild black hole +schwind eye tech solution +schwinger dyson equation +schwinger function +schwinger limit +schwinger magnetic induction +schwinger model +schwinger parametrization +schwinger variational principle +schwingers quantum action principle +sciamachy +science by press conference +scientists against nuclear arm +scientists for global responsibility +scissors mode +scop formalism +scotophor +screening by atomic electron +screening effect +scully lamb form +scully lamb laser +search algorithm +search for the higgs boson +second harmonic generation +second order correlation function +second order phase transition +second quantization +second solar spectrum +second sound +secondary electron +secondary emission +secret key rate +secret sharing +secular resonance +secure communication +secure direct communication +secure key distribution +secure key rate +seed nucleus +seesaw mechanism +seiberg duality +seiberg witten theory +selected area diffraction +selection rule +selective laser melting +selective laser sintering +self adjoint extension +self adjoint operator +self amplified spontaneous emission +self assembled quantum dot +self consistency principle in high energy physic +self correcting quantum memory +self energy +self energy part +self focusing +self force +self induction coefficient +self organized criticality +self organized criticality control +self pulsation +self pulsing +semi classical approximation +semi classical limit +semi classical theory +semi empirical mass formula +semi empirical quantum chemistry method +semi rigid molecule +semicircular potential well +semiclassical analysis +semiclassical approach +semiclassical approximation +semiclassical behaviour +semiclassical description +semiclassical dynamic +semiclassical gravity +semiclassical limit +semiclassical method +semiclassical model +semiclassical physic +semiclassical propagator +semiclassical regime +semiclassical solution +semiclassical steady state +semiconductor bloch equation +semiconductor laser theory +semiconductor luminescence equation +semiconductor microcavities +semiconductor microcavity +semiconductor nanostructures +semiconductor optical gain +semiconductor quantum dot +semiconductor quantum well +semiconductor ring laser +semidefinite program +semifluxon +semileptonic decay +semilinear response +sensitivity +separability condition +separability criteria +separability criterion +separable operation +separable quantum state +separable state +sequence transformation +sequential walking +sergio focardi +series acceleration +sery expansion +sfermion +sgoldstino +shannon entropy +shape invariance +shape invariant potential +shape resonance +shared entanglement +shared randomness +sharp series +sharp transition +shelter island conference +shielding effect +shiftcor +shim +shin sung chul +shinnar le roux algorithm +shiva laser +shoolerys rule +shors algorithm +short distance +short laser pulse +short pulse +short range interaction +short supermultiplet +short time behaviour +short time limit +short time scale +shot noise +shot noise level +shot noise limit +shpolskii matrix +siberian salamander +sic povm +sideband cooling +sidney kimmel +siegbahn notation +sievert chamber +sigma baryon +sigma model +sign problem +signal beam +signal field +signal photon +signal to noise ratio +signal variance +signal velocities +signal velocity +silicon burning process +silicon vacancy centre +silsbee effect +simon glatzel equation +simons problem +simplified perturbations model +simulated annealing +simulated fluorescence process algorithm +simultaneous measurement +sindo +sine gordon equation +single atom +single bit +single cavity mode +single crystal diamond +single electron +single electron spin +single electron transistor +single ion +single mode approximation +single mode cavity field +single mode fiber +single mode field +single mode optical fiber +single mode radiation field +single molecule +single molecule experiment +single molecule magnet +single nitrogen vacancy center +single nv center +single photon detection +single photon detector +single photon emission +single photon generation +single photon interference +single photon level +single photon pulse +single photon sensitive camera +single photon source +single photon state +single photon wave packet +single quantum dot +single qubit gate +single qubit measurement +single qubit operation +single qubit rotation +single qudit +single semiconductor quantum dot +single spin measurement +single trapped atom +single trapped ion +single two level atom +single two level system +singlet fission +singlet state +singleton field +singular perturbation +singular trace +sisyphus cooling +six state protocol +size consistency and size extensivity +skin depth +skin effect +skyrmion +slater condon rule +slater determinant +slater integral +slater type orbital +slaters rule +slavnov taylor identitie +slip melting point +slitless spectroscopy +slope efficiency +slow light +small angle neutron scattering +small angle scattering +small angle x ray scattering +small arms weapons effects simulator +small tight aspect ratio tokamak +smart onboard data interface module +smith purcell effect +snapshot hyperspectral imaging +snellius law of refraction +snells law +sobolev space +social thermodynamics theory +society for applied spectroscopy +society for cryobiology +soft collinear effective theory +soft photon +soft photon emission +soft retooling +soft susy breaking +soft tissue laser surgery +soft x ray emission spectroscopy +sokol eshelon +solar neutrino +solar pumped laser +solarization +soldering +solenoid +solenoidal vector +soler model +solid harmonic +solid state device +solid state dye laser +solid state laser +solid state nuclear magnetic resonance +solid state nuclear track detector +solid state physic +solid state quantum memory +solid state qubit +solid state system +solidus +soliton +solomon equation +solvated electron +solvatochromism +solvent suppression +sommerfeld expansion +sommerfeld kossel displacement law +sommerfeld parameter +sonochemistry +soret peak +source field +soviet laser pistol +soxs +space dimension +space like separat +space time +space time symmetry +spacetime dimension +spacetime geometry +spallation neutron source +spaser +spatial coherence +spatial correlation +spatial degree +spatial dimension +spatial distribution +spatial entanglement +spatial filter +spatial inversion +spatial light modulator +spatial mode +spatial profile +spatial resolution +spatial separation +spatial structure +spatial wavefunction +spatially offset raman spectroscopy +spatiospectral scanning +spatiotemporal wavefunction +spc file format +spdc +special conformal transformation +special sensor ultraviolet limb imager +special theory of relativity +specific heat +specim +speckle pattern +spectral analysis +spectral atlas +spectral band +spectral characteristic +spectral component +spectral correlation +spectral decomposition +spectral density +spectral diffusion +spectral distribution +spectral energy distribution +spectral feature +spectral filtering +spectral flux density +spectral function +spectral gap +spectral hole burning +spectral imaging +spectral line +spectral line ratio +spectral line shape +spectral phase interferometry +spectral property +spectral purity +spectral resolution +spectral signature +spectral singularity +spectral statistic +spectral theory +spectral wavefunction +spectral width +spectro polarimetric high contrast exoplanet research +spectrochemistry +spectrofluorometer +spectrohelioscope +spectrometer +spectronic 20 +spectrophotometer for nucleic acid measurement +spectrophotometry +spectroradiometer +spectroscopic notation +spectroscopy +spectrum analyzer +speed of light +spekkens toy model +sphaleron +spherical bases +spherical basis +spherical bessel function +spherical capacitor +spherical cavities +spherical cavity +spherical coordinate +spherical harmonic +spherical model +spherical wave +spherium +sphingomona +spin +spin 1 particle +spin 1/2 particle +spin 1/2 system +spin angular momentum +spin bath +spin boson model +spin canting +spin chain +spin charge separation +spin chemistry +spin coherence +spin component +spin connection +spin contamination +spin correlation +spin current +spin decoherence +spin destruction collision +spin diffusion +spin dynamic +spin echo +spin engineering +spin ensemble +spin entanglement +spin exchange interaction +spin foam +spin glasses +spin group +spin hall effect +spin label +spin lattice +spin lattice relaxation +spin lattice relaxation in the rotating frame +spin magnetic moment +spin model +spin network +spin operator +spin orbit coupling +spin orbit interaction +spin pair +spin polarization +spin polarized electron +spin precession +spin projection +spin pumping +spin quantum number +spin qubit +spin relaxation +spin representation +spin spherical harmonic +spin spin interaction +spin spin relaxation +spin squeezed state +spin squeezing +spin state +spin statistics connection +spin statistics theorem +spin stiffness +spin symmetry +spin system +spin tensor +spin transfer torque +spin transistor +spin transition +spin valve +spin wave +spin οΏ½ +spinhenge@home +spinless fermion +spinless particle +spinlock srl +spinmechatronic +spinodal decomposition +spinon +spinor +spinor bose einstein condensate +spinor field +spinors in three dimension +spinplasmonic +spintronic +spontaneous breaking +spontaneous decay rate +spontaneous emission +spontaneous emission rate +spontaneous four wave mixing +spontaneous parametric down conversion +spontaneous parametric downconversion +spontaneous symmetry breaking +spontaneous wave function collapse +spontaneously broken +spring peeper +spurion +sputter coating +square lattice +square lattice ising model +squashed entanglement +squeeze operator +squeezed coherence +squeezed coherent state +squeezed light +squeezed state +squeezed thermal state +squeezed vacuum +squeezed vacuum state +squeezing generator +squeezing parameter +squeezing property +squeezing spectrum +squeezing vacuum +squid +stability analysis +stability of the solar system +stabilizer code +stabilizer formalism +stabilizer group +stabilizer state +staggered fermion +standard model +standard model extension +standard quantum limit +standing wave +stanene +star product +stark effect +stark shift +stark spectroscopy +state collapse +state discrimination +state disturbance +state estimation +state evolution +state merging +state preparation +state reconstruction +state reduction +state space +state tomography +state transfer +state universal coupled cluster +state vector collapse +static disorder +static forces and virtual particle exchange +static imperfection +static light scattering +static magnetic field +stationary phase +stationary phase approximation +stationary state +stationary wave integrated fourier transform spectrometry +statistical distribution +statistical ensemble +statistical error +statistical field theory +statistical fluctuation +statistical inference +statistical interpretation +statistical mechanic +statistical mixture +statistical operator +statistical physic +statistical prediction +statistical property +statistical theory +steady state +steady state entanglement +steady state free precession imaging +steady state solution +steane code +stebbins whitford effect +steering +steering inequalities +steering inequality +stellar nucleosynthesis +stereoelectronic +stereolithography +stereoscopic spectroscopy +sterile neutrino +sterilization +stern gerlach experiment +stimulated emission +stimulated raman adiabatic passage +stochastic cellular automaton +stochastic differential equation +stochastic dynamic +stochastic electrodynamic +stochastic evolution +stochastic interpretation +stochastic local operation +stochastic master equation +stochastic matrix +stochastic mechanic +stochastic model +stochastic process +stochastic vacuum model +stokes boundary layer +stokes operator +stokes parameter +stokes shift +stokes theorem +stone von neumann theorem +stong basis set +stop squark +stopping and range of ions in matter +stopping power +storage time +storing quantum information +strain encoded magnetic resonance imaging +strain scanning +strained quantum well laser +strange b meson +strange matter +strange quark +strangelet +strangeness +strangeness production +streak +stream function +stress tensor +strictly correlated electrons density functional theory +string net liquid +stripping reaction +strong correlation +strong coupling expansion +strong coupling limit +strong coupling regime +strong interaction +strong subadditivity of quantum entropy +strongly correlated material +strongly correlated quantum spin liquid +strongly correlated system +strongly coupled +strongly interacting boson +strongly interacting regime +strongly monotone +strontium ruthenate +strontium vapor laser +structural property +structure based assignment +struve sahade effect +stueckelberg action +sub doppler cooling +sub poissonian statistic +sub shot noise +subatomic particle +subatomic scale +sublimation +sublimation apparatus +subsequent measurement +subsystem code +subtracted dispersion relation +sudden birth +sudden death +sudden quench +sudden transition +sugawara theory +sum frequency generation +sum frequency generation spectroscopy +sum rule +sum rule in quantum mechanics +super linear algebra +super minkowski space +super poincarοΏ½ algebra +super poissonian statistic +super qcd +super resolution +super vector space +superalgebra +superatom +supercharge +supercommutative algebra +superconducting cavities +superconducting cavity +superconducting charge qubit +superconducting circuit +superconducting coherence length +superconducting detector +superconducting device +superconducting flux qubit +superconducting logic +superconducting magnet +superconducting magnetic energy storage +superconducting nanowire single photon detector +superconducting phase qubit +superconducting quantum circuit +superconducting quantum computing +superconducting quantum interference device +superconducting qubits coupled +superconducting radio frequency +superconducting resonator +superconducting steel +superconducting system +superconducting transmission line resonator +superconducting tunnel junction +superconducting wire +superconductivity +superconductor classification +superconductor insulator transition +superconformal algebra +supercritical angle fluorescence microscopy +supercritical liquid gas boundaries +supercurrent +superdeformation +superdense coding +superdeterminism +superdiamagnetism +superfield +superfluid helium +superfluid phase +superfluid state +supergeometry +superghost +supergravity +supergrid +supergroup +superinsulator +superlattice +superluminal communication +superluminal propagation +superluminal signaling +superluminal signalling +supermanifold +supermathematic +supermatrix +supermembrane +supermetric +supermodule +supermultiplet +supernova nucleosynthesis +superoperator +superparamagnetic iron platinum particle +superpartner +superposition +superposition principle +superposition state +superpotential +superradiance +superradiant laser +superradiant phase +superradiant phase transition +superresolution +superselection +superselection rule +superspace +superstripe +superstructure +supersymmetric gauge theory +supersymmetric partner +supersymmetric quantum mechanic +supersymmetry +supersymmetry algebra +supersymmetry as a quantum group +supersymmetry breaking +supersymmetry breaking scale +supersymmetry nonrenormalization theorem +supertrace +surface acoustic wave +surface charge +surface charge density +surface code +surface core level shift +surface current +surface energy transfer +surface enhanced raman spectroscopy +surface extended x ray absorption fine structure +surface hopping +surface impedance +surface layer +surface phonon +surface plasmon +surface resistance +surface state +susceptibility +susceptibility weighted imaging +susskind glogower operator +svetlichny inequalities +svetlichny inequality +swampland +swap gate +swedish radiation safety authority +sweeping jet actuator +swihart velocities +swihart velocity +swissfel +switching time +symmetric group +symmetric logarithmic derivative +symmetry group +symmetry in quantum mechanic +symmetry property +symmetry protected topological order +sympathetic cooling +symplectic geometry +symplectic group +symplectic structure +symplectite +synchrotron light source +synchrotron radiation +synthesis of precious metal +synthetic gauge field +system bath coupling +system bath interaction +system density matrix +system environment coupling +system environment interaction +system evolution +systems of orthonormal function +systems of unit +systolic freedom +sznajd model +t hooft operator +t hooft polyakov monopole +t hooft symbol +t j model +t meson +t symmetry +tachyon +tachyon condensation +tachyonic antitelephone +tachyonic field +tachyons in fiction +tactical high energy laser +tadahiko mizuno +tadpole +tailing in graphics or image revelation +talbot cavities +talbot cavity +talbot effect +tangloid +tardigrade +targeted temperature management +tattoo removal +tau +tau neutrino +tauonium +tavis cummings model +taylors theorem +te wave +tea laser +technical noise +technicolor +technological applications of superconductivity +telecom band +telecom wavelength +telecommunication wavelength +telegraph equation +teleportation +teleportation fidelity +teleportation process +teleportation protocol +teleportation scheme +tem wave +temperature coefficient +temperature dependence +temperley lieb algebra +temporal mode +tensor analysis +tensor force +tensor network +tensor operator +tensor product +tensor product of hilbert space +terachem +terahertz spectroscopy and technology +terahertz time domain spectroscopy +term symbol +terra 3 +tesla turbine +tetracene +tetraneutron +tetraquark +tetron model +thallium barium calcium copper oxide +theoretical limit +thermal bath +thermal blooming +thermal casimir effect +thermal casimir force +thermal conductance quantum +thermal correction +thermal desorption spectroscopy +thermal emission spectrometer +thermal energy +thermal entanglement +thermal environment +thermal equilibrium state +thermal excitation +thermal field +thermal fluctuation +thermal hall effect +thermal infrared spectroscopy +thermal light +thermal motion +thermal noise +thermal photon +thermal printing +thermal property +thermal quantum field theory +thermal radiation +thermal reduced state +thermal reservoir +thermal shock +thermal state +thermally stimulated current spectroscopy +thermionic emission +thermochromism +thermodesulforhabdus norvegica +thermodynamic entropy +thermodynamic equilibrium +thermodynamic function +thermodynamic limit +thermodynamic property +thermodynamic quantity +thermodynamical limit +thermodynamical property +thermofield dynamic +thermonuclear fusion +theta meson +theta representation +thirring model +thirring wess model +thomas athol rafter +thomas factor +thomas fermi model +thomas jefferson national accelerator facility +thomas precession +thomson cross section +thomson formula +thomson medal and prize +thomson problem +thomson scattering +thomsons theorem +thought experiment +thouless energy +three body force +three body interaction +three body problem +three body recombination +three dimensional space +three jet event +three level atom +three level system +three qubit entanglement +three qubit pure state +three qubit state +three qubit system +three stage quantum cryptography protocol +ti polaron +ti sapphire laser +tight binding +tight binding approximation +tight binding model +time asymmetry +time bin encoding +time delay +time dependent density functional theory +time dependent electric field +time dependent frequency +time dependent green function +time dependent hamiltonian +time dependent harmonic oscillator +time dependent magnetic field +time dependent parameter +time dependent perturbation theory +time dependent potential +time dependent schrodinger equation +time dependent schroedinger equation +time dependent variational monte carlo +time dependent variational principle +time dilatation +time energy uncertainty relation +time evolution +time evolution operator +time evolving block decimation +time independent hamiltonian +time like separation +time of flight +time operator +time resolution +time resolved fluorescence energy transfer +time resolved spectroscopy +time reversal +time reversal invariance +time reversal symmetry +time reversal symmetry breaking +time scale +time symmetry +time variation +timeline of nuclear fusion +timeline of quantum computing +timir datta +tip enhanced raman spectroscopy +tm wave +tnp atp +toda field theory +toda lattice +toffoli gate +tokamak fusion test reactor +tokamak οΏ½ configuration variable +tolman electronic parameter +tomographic probability representation +tomographic reconstruction +tomography +tomography imaging spectrometer +tomography laser mammography +tonks girardeau gas +top eta meson +top quark +tophat beam +topicity +topness +topoflight +topological charge +topological code +topological defect +topological degeneracy +topological entanglement entropy +topological entropy +topological insulator +topological invariant +topological order +topological phase +topological phase transition +topological property +topological protection +topological quantum computation +topological quantum computer +topological quantum computing +topological quantum field theory +topological quantum memory +topological quantum number +topological qubit +topological state +topological tensor product +topologically protected +topos theory +tore supra +toric code +toric code model +toroidal ring model +total active reflection coefficient +total angular momentum +total angular momentum quantum number +total energy +total momentum +total noise +total reflection +total scattering cross section +totalitarian principle +townsend discharge +toy model +trace distance +trace norm +tractography +trans planckian problem +transactinide element +transactional interpretation +transcranial photobiomodulation +transfer efficiency +transfer function +transfer matrix method +transformation property +transformation theory +transformer +transistor laser +transition amplitude +transition dipole moment +transition edge sensor +transition frequency +transition matrix +transition of state +transition point +transition probability +transition rate +transition temperature +translation invariance +translation operator +translational invariance +translational motion +translational partition function +translational symmetry +transmission coefficient +transmission electron aberration corrected microscope +transmission electron microscopy +transmission line resonator +transmission probability +transmission raman spectroscopy +transmission spectrum +transmissometer +transmit information +transmittance +transmon +transmon qubit +transport efficiency +transport property +transuranium element +transverse doppler shift +transverse electric wave +transverse electromagnetic wave +transverse field ising model +transverse ising model +transverse magnetic wave +transverse mode +transverse relaxation optimized spectroscopy +transverse spatial mode +transverse vector field +transverse wave +trap electrodes +trap frequency +trapped atom +trapped atom ion +trapped bose einstein condensate +trapped ion +trapped ion quantum computer +trapped ion qubit +trapping frequency +trapping potential +traveling wave solution +treated classically +treated quantum mechanically +tree kernel +triality +triangular lattice +tribimaximal mixing +tribochromism +tricritical point +trident laser +trimaximal mixing +trinity paradox +trion +tripartite entanglement +tripartite state +tripartite system +triple alpha process +triple point +triple resonance nuclear magnetic resonance spectroscopy +triplet state +tristimulus colorimeter +trochoid +trojan wave packet +tropospheric emission spectrometer +true muonium +truncated wigner approximation +tsallis entropy +tsirelson bound +tsirelsons bound +tunable diode laser absorption spectroscopy +tunable laser +tunnel coupling +tunnel injection +tunnel ionization +tunnel junction +tunnel magnetoresistance +tunneling dynamic +tunneling probability +tunneling process +tunneling rate +tunneling time +tunnelling time +turbulent atmosphere +turbulent quantum channel +turing machine +twin beam +twisted geometries +twistor theory +two atom system +two body dirac equation +two body force +two body interaction +two component bose einstein condensate +two dimensional array +two dimensional case +two dimensional correlation analysis +two dimensional electron gas +two dimensional hilbert space +two dimensional infrared spectroscopy +two dimensional lattice +two dimensional nuclear magnetic resonance spectroscopy +two dimensional potential +two dimensional system +two electron atom +two level atom +two level quantum system +two level system +two mode gaussian state +two mode squeezed state +two mode squeezed vacuum state +two mode squeezing +two parameter family +two particle system +two path interferometer +two photon absorption +two photon entanglement +two photon interference +two photon photoelectron spectroscopy +two photon resonance +two photon state +two photon transition +two point correlation function +two qubit case +two qubit entanglement +two qubit gate +two qubit interaction +two qubit operation +two qubit state +two qubit system +two sided cavities +two sided cavity +two slit experiment +two spin system +two state quantum system +two state system +two state vector formalism +two time correlation function +tyndall effect +type 1.5 superconductor +type i superconductor +type ii superconductor +typical subspace +u bit +uk atomic energy authority constabulary +ultra cold atom +ultra high energy cosmic ray +ultra strong coupling regime +ultrabright +ultracold atom +ultracold atom gas +ultracold boson +ultracold fermion +ultracold gas +ultracold molecule +ultracold neutron +ultracold polar molecule +ultracold quantum gas +ultrafast electron diffraction +ultrafast laser spectroscopy +ultrafast x ray +ultramicrotomy +ultrashort laser pulse +ultrashort pulse +ultrashort pulse laser +ultrasonic grating +ultrasound attenuation spectroscopy +ultrastrong coupling regime +ultrastructure +ultraviolet catastrophe +ultraviolet divergence +ultraviolet fixed point +ultraviolet photoelectron spectroscopy +ultraviolet visible spectroscopy +ultraviolet visible spectroscopy of stereoisomer +umbelliferone +umklapp scattering +unambiguous discrimination +unambiguous state discrimination +unbroken pt symmetry +uncertainty principle +uncertainty relation +uncleftish beholding +uncomputation +unconditional security +unconditionally secure quantum bit commitment +unconventional superconductor +undetected photon +unentanglements +unextendible product bases +unextendible product basis +uniform acceleration +uniform magnetic field +unique ground state +uniqueness theorem +unit sphere +unit time +unitarity +unitarity gauge +unitary dynamic +unitary equivalence +unitary evolution +unitary gate +unitary group +unitary limit +unitary matrix +unitary operation +unitary operator +unitary representation +unitary time evolution +unitary transformation +universal behaviour +universal conductance fluctuation +universal control +universal feature +universal gate +universal gate set +universal linear accelerator +universal property +universal quantum computation +universal quantum computer +universal quantum computing +universal quantum gate +universal resource +universal scaling +universal set +universal wavefunction +universality +universality class +unpaired electron +unrestricted hartree fock +unruh effect +unruh temperature +unsorted database +unstable particle +unstable state +unstable system +up conversion +up quark +upper critical solution temperature +upsilon meson +uranium rhodium germanium +uv completion +v particle +vacuum +vacuum angle +vacuum energy +vacuum energy density +vacuum expectation value +vacuum field +vacuum fluctuation +vacuum level +vacuum manifold +vacuum polarization +vacuum rabi oscillation +vacuum rabi splitting +vacuum state +vafa witten theorem +vainshtein radius +vakhitov kolokolov stability criterion +valence and conduction band +valence bond theory +valence electron +valley exit jet +valleytronic +van allen belt +van der waals force +van der waals interaction +van der waerden notation +vanadium gallium +vapochromism +variable pathlength cell +variational approach +variational method +variational monte carlo +variational perturbation theory +variational principle +varphi josephson junction +vector beam +vector boson +vector diagram +vector field +vector greens theorem +vector meson +vector meson dominance +vector model of the atom +vector plane wave +vector potential +vector radiative transfer +vector space +velocity field +velocity interferometer system +verlinde algebra +vertex function +vertex model +vertex operator algebra +vertical cavity surface emitting laser +vertical external cavity surface emitting laser +vertico spatially modulated illumination +viaspan +vibration theory of olfaction +vibrational circular dichroism +vibrational degree +vibrational ground state +vibrational level +vibrational mode +vibrational motion +vibrational state +vibrational temperature +vibronic coupling +vibronic spectroscopy +video spectroscopy +vienna ab initio simulation package +virasoro algebra +virtual black hole +virtual particle +virtual photon +virtual quanta +viscous fingering +visible light photon counter +vitaly ginzburg +vitess +vitrification +vnmr +voigt profile +voigt thomson law +voitenko compressor +volterra lattice +volume operator +von kοΏ½rmοΏ½n constant +von neumann algebra +von neumann entropy +von neumann equation +von neumann measurement +von neumann wigner interpretation +vortex beam +vortex state +voter model +vsepr theory +vulcan laser +vulvar intraepithelial neoplasia +w algebra +w and z boson +w state +wannier equation +ward takahashi identity +wards conjecture +water retention on mathematical surface +waterloo institute for nanotechnology +wattless current +wave equation +wave function +wave function collapse +wave function renormalization +wave guide +wave mechanic +wave number +wave packet +wave packet dynamic +wave particle duality +wave vector +wavefront shaping +wavefunction +wavelength dispersive x ray spectroscopy +weak coherence +weak coherent pulse +weak convergence +weak coupling limit +weak coupling regime +weak equivalence principle +weak field limit +weak hypercharge +weak interaction +weak isospin +weak localization +weak measurement +weak nonlinearity +weak probe field +weak trace class operator +weak value +weakless universe +wehrl entropy +weinberg angle +weinberg witten theorem +weiss domain +weizsacker williams method +werner state +werthamer helfand hohenberg theory +wess zumino gauge +wess zumino model +wess zumino witten model +western chorus frog +wet electron +wetting layer +weyl brauer matrice +weyl equation +weyl heisenberg group +weyl quantization +weyl semimetal +weyls eigendifferential +wheeler dewitt equation +wheelers delayed choice experiment +which path information +whispering gallery mode +whistler +white noise +wick rotation +wicks theorem +wide angle x ray scattering +widom scaling +wien filter +wien2k +wiens displacement law +wiggler +wightman axiom +wightman function +wigner distribution function +wigner eckart theorem +wigner function +wigner inequalities +wigner inequality +wigner quasiprobability distribution +wigner representation +wigner rotation +wigner transform +wigner weisskopf theory +wigner weyl transform +wigners classification +wigners friend +wigners theorem +wilson bappu effect +wilson loop +wind profile power law +winding number +wiswessers rule +witness operator +witt algebra +witten index +wkb approximation +wolf effect +wood frog +woods saxon potential +woodwards rule +work function +workable approximation to +world line +worlds interpretation +wronskian +wssus model +wu experiment +wu yang monopole +x and y boson +x ray +x ray absorption fine structure +x ray absorption near edge structure +x ray burster +x ray crystallography +x ray fluorescence +x ray fluorescence holography +x ray free electron laser +x ray laser +x ray magnetic circular dichroism +x ray notation +x ray photoelectron spectroscopy +x ray raman scattering +x ray reflectivity +x ray scattering technique +x ray spectroscopy +x ray standing wave +x(3872) +xi baryon +xstream system +xy spin chain +xylomannan +y(4140) +y(4260) +yamartino method +yang baxter equation +yang mills existence and mass gap +yang mills theory +yangian +yarkovsky effect +yarkovsky okeefe radzievskii paddack effect +yb:luvo4 +yetter drinfeld category +yoshiaki arata +yoshimine sort +youngs interference experiment +yrast +yttrium aluminium garnet +yttrium barium copper oxide +yukawa interaction +yukawa potential +yvette mattern +z n model +z(4430) +zc(3900) +zeeman doppler imaging +zeeman effect +zeeman energy +zeeman slower +zeeman splitting +zeeman sublevel +zeno dynamic +zeno effect +zero curtain effect +zero field nmr +zero field splitting +zero phonon line and phonon sideband +zero point energy +zero point fluctuation +zero sound +zerona +zeta function +zinc selenide +zindo +zitterbewegung +zm 87 +zone axis +zz diboson diff --git a/.github/entrypoint/artifact/python/particle.ipynb b/.github/entrypoint/artifact/python/particle.ipynb new file mode 100644 index 000000000..0e551656a --- /dev/null +++ b/.github/entrypoint/artifact/python/particle.ipynb @@ -0,0 +1,374 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import numpy as np\n", + "from scipy import interpolate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# class Particle\n", + "\n", + "*The Particle object represents a particles with id given by:*\n", + "\n", + "|QUARKS|no|LEPTONS|no|GAUGE AND HIGGS BOSONS|no|\n", + "|------|---|------|----|--|--|\n", + "|d| 1|$e^-$|11|$g$|(9)21|\n", + "|u| 2|$\\nu_e$|12|$\\gamma$|22|\n", + "|s| 3|$\\mu^-$|13|$Z^0$|23|\n", + "|c| 4|$\\nu_\\mu$|14|$W^+$|24|\n", + "|b| 5|$\\tau^-$|15|$H^0$|25|\n", + "|t| 6|$\\nu_\\tau$|16|||\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# class QCD\n", + "\n", + "*This class includes pdf and splitting functions.*\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## $\\alpha_s$" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy as sp\n", + "from sympy import I, pi, oo\n", + "sp.init_printing()" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( Q^{2}, \\ Q^{2}_{0}, \\ b_{0}, \\ b_{1}, \\ C_{A}, \\ C_{F}\\right)$" + ], + "text/plain": [ + "(QΒ², QΒ²β‚€, bβ‚€, b₁, C_A, C_F)" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Q2, x, Q02, b0, b1, CA, CF = sp.symbols('Q^2, x, Q_0^2 b_0, b_1, C_A, C_F')\n", + "Q2, Q02, b0, b1, CA, CF" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( a_{s}({Q_0^2}), \\ a_{s}({Q^2})\\right)$" + ], + "text/plain": [ + "(a_{s}({Q_0__2}), a_{s}({Q__2}))" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a0, a = sp.symbols('a_{s}({Q_0^2}), a_{s}({Q^2})')\n", + "a0, a" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle - \\frac{1}{x^{2} \\left(b_{0} + b_{1} x\\right)}$" + ], + "text/plain": [ + " -1 \n", + "──────────────\n", + " 2 \n", + "x β‹…(bβ‚€ + b₁⋅x)" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-1/(x**2*(b0 + b1*x))" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle - \\frac{b_{1} \\left(- \\log{\\left(a_{s}({Q^2}) \\right)} + \\log{\\left(a_{s}({Q^2}) + \\frac{b_{0}}{b_{1}} \\right)}\\right)}{b_{0}^{2}} + \\frac{b_{1} \\left(- \\log{\\left(a_{s}({Q_0^2}) \\right)} + \\log{\\left(a_{s}({Q_0^2}) + \\frac{b_{0}}{b_{1}} \\right)}\\right)}{b_{0}^{2}} - \\frac{1}{a_{s}({Q_0^2}) b_{0}} + \\frac{1}{a_{s}({Q^2}) b_{0}}$" + ], + "text/plain": [ + " βŽ› βŽ› bβ‚€βŽžβŽž βŽ› \n", + " bβ‚β‹…βŽœ-log(a_{s}({Q__2})) + log⎜a_{s}({Q__2}) + β”€β”€βŽŸβŽŸ bβ‚β‹…βŽœ-log(a_{s}({Q_0__2}\n", + " ⎝ ⎝ bβ‚βŽ βŽ  ⎝ \n", + "- ────────────────────────────────────────────────── + ───────────────────────\n", + " 2 \n", + " bβ‚€ \n", + "\n", + " βŽ› bβ‚€βŽžβŽž \n", + ")) + log⎜a_{s}({Q_0__2}) + β”€β”€βŽŸβŽŸ \n", + " ⎝ bβ‚βŽ βŽ  1 1 \n", + "─────────────────────────────── - ────────────────── + ────────────────\n", + " 2 a_{s}({Q_0__2})β‹…bβ‚€ a_{s}({Q__2})β‹…bβ‚€\n", + " bβ‚€ " + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.integrate(-1/(x**2*(b0 + b1*x)), (x, a0, a))" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.6100939485189322\n", + "0.24485952713564962\n" + ] + } + ], + "source": [ + "N_c = 3.0\n", + "C_A = N_c\n", + "n_f = 5\n", + "C_F = (N_c*N_c-1)/(2.0*N_c)\n", + "b0 = (11.0*C_A - 2.0*n_f)/(12.0*np.pi)\n", + "b1 = (17.0*C_A**2 - 5.0*C_A*n_f - 3.0*C_F*n_f)/(24.0*np.pi**2)\n", + "print(b0)\n", + "print(b1)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "alphas_df = pd.read_csv('alphas.csv')\n", + "alphas_df = alphas_df.set_index('$Q$[GeV]')\n", + "alphas = interpolate.interp1d(alphas_df.index, alphas_df[r'$\\alpha_s(Q)$'])\n", + "\n", + "alphas_df.plot(logx=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(0.95798)" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alphas(0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(0.4405)" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alphas(1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(0.30426603)" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alphas(2.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## PDFs" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def plot(url, width='100%', height=500):\n", + " \"\"\"Return an IFrame plot\"\"\"\n", + " from IPython.display import IFrame\n", + " return IFrame(url, width=width, height=height) " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "link_pdf = \"http://hepdata.cedar.ac.uk/pdf/pdf3.html\"\n", + "plot(link_pdf, height=900)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.github/entrypoint/artifact/python/pyproject.toml b/.github/entrypoint/artifact/python/pyproject.toml new file mode 100644 index 000000000..e4a8cb2ba --- /dev/null +++ b/.github/entrypoint/artifact/python/pyproject.toml @@ -0,0 +1,29 @@ +[tool.poetry] +name = "lgt" +version = "0.1.3" +description = "Python library for Lattice Gauge Theory" +authors = ["Sam Foreman "] + +[tool.poetry.dependencies] +python = ">=3.8,<3.11" +tensorflow = "^2.8.0" +numpy = "^1.22.3" +torch = "^1.11.0" +scipy = "^1.8.0" +itermplot = "^0.331" +ipython = "^8.2.0" + +[tool.poetry.dev-dependencies] +pyright = "^1.1.232" +pynvim = "^0.4.3" +ptipython = "^1.0.1" +# ipdb = {version = "*", optional = true} +pudb = {version = "*", optional = true} +# ptipython = {optional = true} + +[tool.poetry.extras] +dev_tools = ["pudb"] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/.github/entrypoint/artifact/python/setup.py b/.github/entrypoint/artifact/python/setup.py new file mode 100644 index 000000000..4e5b539cd --- /dev/null +++ b/.github/entrypoint/artifact/python/setup.py @@ -0,0 +1,29 @@ +import setuptools + +with open("README.md", "r", encoding="utf-8") as fh: + long_description = fh.read() + +setuptools.setup( + name="nftqcd/lgt", + version="0.1.2", + author="Sam Foreman", + author_email="saforem2@gmail.com", + description=( + "A package containing a collection of" + " utilities for Lattice Gauge Theory" + ), + long_description=long_description, + long_description_content_type="text/markdown", + url="https://github.com/nftqcd/lgt", + project_urls={ + "Bug Tracker": "https://github.com/nftqcd/lgt/issues", + }, + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + package_dir={"": "src"}, + packages=setuptools.find_packages(where="src"), + python_requires=">=3.8", +) diff --git a/.github/entrypoint/artifact/python/src/lgt/__init__.py b/.github/entrypoint/artifact/python/src/lgt/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/group/__init__.py b/.github/entrypoint/artifact/python/src/lgt/group/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/group/generators.py b/.github/entrypoint/artifact/python/src/lgt/group/generators.py new file mode 100644 index 000000000..0d520bc4e --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/group/generators.py @@ -0,0 +1,55 @@ +""" +generators.py + +Contains methods for generating elements of SU(2), SU(3) gauge groups. + +Note: + - The `eps` (type: float) argument to the below functions controls the + 'distance' from the identity matrix. +""" +from __future__ import absolute_import, print_function, division, annotations + +import numpy as np + +# from re import split +# from multiprocessing import pool + + +def generate_SU2(eps: float) -> np.ndarray: + """Returns a single randomly initialized SU(2) matrix.""" + r_rand_nums = np.random.uniform(0, 0.5, (4)) + r = np.empty((4)) + + r[1:] = eps * r_rand_nums[1:] / np.linalg.norm(r_rand_nums[1:]) + r[0] = np.sign(r_rand_nums[0]) * np.sqrt(1 - eps ** 2) + + r11 = +r[0] + 1j * r[3] + r12 = +r[2] + 1j * r[1] + r21 = -r[2] + 1j * r[1] + r22 = +r[0] - 1j * r[3] + + return np.array([[r11, r12], [r21, r22]]) + + +def generate_SU3(eps: float) -> np.ndarray: + """Returns a single randomly initialized SU(3) mtx.""" + r = np.identity(3, dtype=np.complexfloating) + s = np.identity(3, dtype=np.complexfloating) + t = np.identity(3, dtype=np.complexfloating) + + r[:2, :2] = generate_SU2(eps) + s[0:3:2, 0:3:2] = generate_SU2(eps) + t[1:, 1:] = generate_SU2(eps) + + return np.dot(np.dot(r, s), t) + + +def generate_SU3_array(n: int, eps: float) -> np.ndarray: + """Generates a 2*n array of SU(3) mtxs; eps controls dist from Identity""" + arr = np.zeros((2 * n, 3, 3), dtype=np.complexfloating) + for i in range(n): + mtx = generate_SU3(eps) + arr[2 * i] = mtx + arr[2 * i + 1] = mtx.conj().T + + return arr diff --git a/.github/entrypoint/artifact/python/src/lgt/group/group.py b/.github/entrypoint/artifact/python/src/lgt/group/group.py new file mode 100644 index 000000000..640499b07 --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/group/group.py @@ -0,0 +1,403 @@ +""" +group.py + +Contains implementations of various (special) unitary groups. + +Date: 2022/03/25 + +Original version from: + + https://github.com/nftqcd/nthmc/blob/master/lib/group.py + +written by Xiao-Yong Jin +""" +from __future__ import absolute_import, division, print_function, annotations + + +import numpy as np +import tensorflow as tf +import math +from typing import Callable + +Array = np.array +Tensor = tf.Tensor +PI = tf.convert_to_tensor(math.pi) +SQRT1by3 = tf.math.sqrt(1. / 3.) + +TF_FLOAT = tf.keras.backend.floatx() + +# def adj(x: Array): +# return x.conj().T + + +class Group: + """Gauge group represented as matrices in the last two dims in tensors.""" + def mul( + self, + a: Tensor, + b: Tensor, + adjoint_a: bool = False, + adjoint_b: bool = False + ) -> Tensor: + return tf.linalg.matmul(a, b, adjoint_a=adjoint_a, adjoint_b=adjoint_b) + + +class U1Phase(Group): + def mul( + self, + a: Tensor, + b: Tensor, + adjoint_a: bool = False, + adjoint_b: bool = False + ) -> Tensor: + if adjoint_a and adjoint_b: + return tf.subtract(tf.math.negative(a), b) + elif adjoint_a: + return tf.add(tf.math.negative(a), b) + elif adjoint_b: + return tf.subtract(a, b) + else: + return tf.add(a, b) + + def adjoint(self, x: Tensor) -> Tensor: + return tf.math.negative(x) + + def trace(self, x: Tensor) -> Tensor: + return tf.math.cos(x) + + def diff_trace(self, x: Tensor) -> Tensor: + return tf.math.negative(tf.math.sin(x)) + + def diff2trace(self, x: Tensor) -> Tensor: + return tf.math.negative(tf.math.cos(x)) + + def compat_proj(self, x: Tensor) -> Tensor: + return tf.math.floormod(x + PI, 2 * PI) - PI + + def random(self, shape: list[int]): + return self.compat_proj(tf.random.uniform(shape, *(-4, 4))) + + def random_momentum(self, shape: list[int]) -> Tensor: + return tf.random.normal(shape) + + def kinetic_energy(self, p: Tensor) -> Tensor: + return tf.reduce_sum( + tf.square(tf.reshape(p, [p.shape[0], -1])), + axis=1 + ) + + +class SU3(Group): + dtype = tf.complex128 + size = [3, 3] + shape = (3, 3) + + def mul( + self, + a: Tensor, + b: Tensor, + adjoint_a: bool = False, + adjoint_b: bool = False, + ) -> Tensor: + return tf.linalg.matmul(a, b, adjoint_a=adjoint_a, adjoint_b=adjoint_b) + + def adjoint(self, x: Tensor) -> Tensor: + return tf.linalg.adjoint(x) + + def trace(self, x: Tensor) -> Tensor: + return tf.linalg.trace(x) + + def diff_trace(self, x: Tensor): # type: ignore + print('TODO') + + def diff2Trace(self, x: Tensor): # -> Tensor: + print('TODO') + + def exp(self, x: Tensor) -> Tensor: + return exp(x) + + def projectTAH(self, x: Tensor) -> Tensor: + return projectTAH(x) + + def random(self, shape: tuple) -> Tensor: + r = tf.random.normal(shape, dtype=TF_FLOAT) + i = tf.random.normal(shape, dtype=TF_FLOAT) + return projectSU(tf.dtypes.complex(r, i)) + + def random_momentum(self, shape: tuple) -> Tensor: + return randTAH3(shape[:-2]) + + def kinetic_energy(self, p: Tensor) -> Tensor: + p2 = norm2(p) - tf.constant(8.0) # - 8.0 ?? + return ( + 0.5 * tf.math.reduce_sum(tf.reshape(p2, [p.shape[0], -1]), axis=1) + ) + + +def norm2(x: Tensor, axis=[-2, -1]) -> Tensor: + """No reduction if axis is empty""" + n = tf.math.real(tf.math.multiply(tf.math.conj(x), x)) + if len(axis) == 0: + return n + + return tf.math.reduce_sum(n, axis=axis) + + +# Converted from qex/src/maths/matrixFunctions.nim +# Last two dims in a tensor contain matrices. +# WARNING: below only works for SU3 for now +def randTAH3(shape, s): + s2 = 0.70710678118654752440 # sqrt(1/2) + s3 = 0.577350269189625750 # sqrt(1/3) + r3 = s2 * s.normal(shape, dtype=TF_FLOAT) + r8 = s2 * s3 * s.normal(shape, dtype=TF_FLOAT) + # m00 = tf.dtypes.complex(tf.cast(0.0,TF_FLOAT), r8+r3) + # m11 = tf.dtypes.complex(tf.cast(0.0,TF_FLOAT), r8-r3) + # m22 = tf.dtypes.complex(tf.cast(0.0,TF_FLOAT), -2*r8) + m00 = tf.dtypes.complex(0.0, r8+r3) + m11 = tf.dtypes.complex(0.0, r8-r3) + m22 = tf.dtypes.complex(0.0, -2*r8) + r01 = s2 * s.normal(shape, dtype=TF_FLOAT) + r02 = s2 * s.normal(shape, dtype=TF_FLOAT) + r12 = s2 * s.normal(shape, dtype=TF_FLOAT) + i01 = s2 * s.normal(shape, dtype=TF_FLOAT) + i02 = s2 * s.normal(shape, dtype=TF_FLOAT) + i12 = s2 * s.normal(shape, dtype=TF_FLOAT) + m01 = tf.dtypes.complex(r01, i01) + m10 = tf.dtypes.complex(-r01, i01) + m02 = tf.dtypes.complex(r02, i02) + m20 = tf.dtypes.complex(-r02, i02) + m12 = tf.dtypes.complex(r12, i12) + m21 = tf.dtypes.complex(-r12, i12) + return tf.stack([ + tf.stack([m00, m10, m20], axis=-1), + tf.stack([m01, m11, m21], axis=-1), + tf.stack([m02, m12, m22], axis=-1), + ], axis=-1) + + +def eigs3(tr, p2, det): + tr3 = (1.0/3.0)*tr + p23 = (1.0/3.0)*p2 + tr32 = tr3*tr3 + q = tf.math.abs(0.5*(p23-tr32)) + r = 0.25*tr3*(5*tr32-p2) - 0.5*det + sq = tf.math.sqrt(q) + sq3 = q*sq + isq3 = 1.0/sq3 + maxv = tf.constant(3e38, shape=isq3.shape, dtype=isq3.dtype) + minv = tf.constant(-3e38, shape=isq3.shape, dtype=isq3.dtype) + isq3c = tf.math.minimum(maxv, tf.math.maximum(minv, isq3)) + rsq3c = r * isq3c + maxv = tf.constant(1, shape=isq3.shape, dtype=isq3.dtype) + minv = tf.constant(-1, shape=isq3.shape, dtype=isq3.dtype) + rsq3 = tf.math.minimum(maxv, tf.math.maximum(minv, rsq3c)) + t = (1.0/3.0)*tf.math.acos(rsq3) + st = tf.math.sin(t) + ct = tf.math.cos(t) + sqc = sq*ct + sqs = 1.73205080756887729352*sq*st # sqrt(3) + ll = tr3 + sqc + e0 = tr3 - 2*sqc + e1 = ll + sqs + e2 = ll - sqs + return e0, e1, e2 + + +def rsqrtPHM3f(tr, p2, det): + l0, l1, l2 = eigs3(tr, p2, det) + sl0 = tf.math.sqrt(tf.math.abs(l0)) + sl1 = tf.math.sqrt(tf.math.abs(l1)) + sl2 = tf.math.sqrt(tf.math.abs(l2)) + u = sl0 + sl1 + sl2 + w = sl0 * sl1 * sl2 + d = w*(sl0+sl1)*(sl0+sl2)*(sl1+sl2) + di = 1.0/d + c0 = (w*u*u+l0*sl0*(l1+l2)+l1*sl1*(l0+l2)+l2*sl2*(l0+l1))*di + c1 = -(tr*u+w)*di + c2 = u*di + return c0, c1, c2 + + +def rsqrtPHM3(x: Tensor) -> Tensor: + tr = tf.math.real(tf.linalg.trace(x)) + x2 = tf.linalg.matmul(x, x) + p2 = tf.math.real(tf.linalg.trace(x2)) + det = tf.math.real(tf.linalg.det(x)) + c0, c1, c2 = rsqrtPHM3f(tr, p2, det) + c0_ = tf.reshape(c0, c0.shape + [1, 1]) + c1_ = tf.reshape(c1, c1.shape + [1, 1]) + c2_ = tf.reshape(c2, c2.shape + [1, 1]) + term0 = tf.cast(c0_ * tf.eye(3, batch_shape=[1] * len(c0.shape)), x.dtype) + term1 = tf.multiply(x, tf.cast(c1_, x.dtype)) + term2 = tf.multiply(x, tf.cast(c2_, x.dtype)) + return term0 + term1 + term2 + + +def projectU(x: Tensor) -> Tensor: + """x (x'x)^{-1/2}""" + # nc = x.shape[-1] + t = tf.linalg.matmul(x, x, adjoint_a=True) + t2 = rsqrtPHM3(t) + return tf.linalg.matmul(x, t2) + + +def projectSU(x: Tensor) -> Tensor: + nc = tf.constant(x.shape[-1], TF_FLOAT) + m = projectU(x) + d = tf.linalg.det(m) + tmp = tf.math.atan2(tf.math.imag(d), tf.math.real(d)) + p = tmp * tf.constant(-1.0) / nc + # p = -(1.0 / nc) * tf.math.atan2(tf.math.imag(d), tf.math.real(d)) + # p = tf.math.multiply(tf.math.negative(tf.constant(1.0) / nc), + # tf.math.atan2(tf.math.imag(d), tf.math.real(d))) + p_ = tf.reshape(tf.dtypes.complex(tf.math.cos(p), tf.math.sin(p)), + p.shape + [1, 1]) + return p_ * m + + +def projectTAH(x: Tensor) -> Tensor: + """Returns R = 1/2 (X - X†) - 1/(2 N) tr(X - X†) + R = - T^a tr[T^a (X - X†)] + = T^a βˆ‚_a (- tr[X + X†]) + """ + nc = tf.constant(x.shape[-1]) + r = 0.5 * (x - tf.linalg.adjoint(x)) + d = tf.linalg.trace(r) / nc + r -= tf.reshape(d, d.shape + [1, 1]) * eyeOf(x) + + return r + +def checkU(x: Tensor) -> tuple[Tensor, Tensor]: + """Returns the average and maximum of the sum of the deviations of X†X""" + nc = tf.constant(x.shape[-1]) + d = norm2(tf.linalg.matmul(x, x, adjoint_a=True) - eyeOf(x)) + a = tf.math.reduce_mean(d, axis=range(1, len(d.shape))) + b = tf.math.reduce_max(d, axis=range(1, len(d.shape))) + c = 2 * (nc * nc + 1) + + return tf.math.sqrt(a / c), tf.math.sqrt(b / c) + + +def checkSU(x: Tensor) -> tuple[Tensor, Tensor]: + """Returns the average and maximum of the sumf of deviations of: + - X† X + - det(x) + from unitarity + """ + nc = tf.constant(x.shape[-1]) + d = norm2(tf.linalg.matmul(x, x, adjoint_a=True) - eyeOf(x)) + det = tf.linalg.det(x) + d = tf.math.add(d, norm2(tf.constant(1., dtype=det.dtype) + det, axis=[])) + # d = tf.math.add(d, norm2(tf.constant(1.) + tf.linalg.det(x), axis=[])) + # d += norm2(-1 + tf.linalg.det(x), axis=[]) + a = tf.math.reduce_mean(d, axis=range(1, len(d.shape))) + b = tf.math.reduce_max(d, axis=range(1, len(d.shape))) + c = tf.cast(2 * (nc * nc + 1), TF_FLOAT) + return tf.math.sqrt(a / c), tf.math.sqrt(b / c) + + +def su3vec(x: Tensor) -> Tensor: + """Only for x in 3x3 anti-Hermitian. + + Return 8 real numbers, X^a T^a = X - 1/3 tr(X) + + Convention: tr{T^a T^a} = -1/2 + X^a = - 2 tr[T^a X] + """ + c = -2 + x00 = x[..., 0, 0] # type:ignore + x01 = x[..., 0, 1] # type:ignore + x11 = x[..., 1, 1] # type:ignore + x02 = x[..., 0, 2] # type:ignore + x12 = x[..., 1, 2] # type:ignore + x22 = x[..., 2, 2] # type:ignore + return tf.stack([ + c * tf.math.imag(x01), + c * tf.math.real(x01), + tf.math.imag(x11) - tf.math.imag(x00), + c * tf.math.imag(x02), + c * tf.math.real(x02), + c * tf.math.imag(x12), + c * tf.math.real(x12), + SQRT1by3 * ( + 2 * tf.math.imag(x22) - tf.math.imag(x11) - tf.math.imag(x00) + ), + ], axis=-1) + + +def su3fromvec(v: Tensor) -> Tensor: + """ + X = X^a T^a + tr{X T^b} = X^a tr{T^a T^b} = X^a (-1/2) 𝛅^ab = -1/2 X^b + X^a = -2 X_{ij} T^a_{ji} + """ + s3 = 0.577350269189625751 # sqrt(1/3) + c = -0.5 + zero = tf.zeros(v[..., 0].shape, dtype=v[..., 0].dtype) # type:ignore + x01 = c * tf.dtypes.complex(v[..., 1], v[..., 0]) # type:ignore + x02 = c * tf.dtypes.complex(v[..., 4], v[..., 3]) # type:ignore + x12 = c * tf.dtypes.complex(v[..., 6], v[..., 5]) # type:ignore + x2i = s3 * v[..., 7] # type:ignore + x0i = c * (x2i + v[..., 2]) # type:ignore + x1i = c * (x2i - v[..., 2]) # type:ignore + + def neg_conj(x: Tensor) -> Tensor: + return tf.math.negative(tf.math.conj(x)) + + # ---------------------------------------------------- + # NOTE: Returns matrix of the form: + # + # M = [[ cmplx(x0i), -x01*, -x02*], + # [ x01, cmplx(x1i), -x12*], + # [ x02, x12, cmplx(x2i)]] + # ---------------------------------------------------- + v1 = tf.stack([ + tf.dtypes.complex(zero, x0i), neg_conj(x01), neg_conj(x02) + ], axis=-1) + v2 = tf.stack([ + x01, tf.dtypes.complex(zero, x1i), neg_conj(x12) + ], axis=-1) + v3 = tf.stack([ + x02, x12, tf.dtypes.complex(zero, x2i) + ], axis=-1) + + return tf.stack([v1, v2, v3]) + + +def eyeOf(m): + batch_shape = [1] * (len(m.shape) - 2) + return tf.eye(*m.shape[-2:], batch_shape=batch_shape, dtype=m.dtype) + + +def exp(m: Tensor, order: int = 12): + eye = eyeOf(m) + x = eye + m / tf.constant(order) + for i in tf.range(order-1, 0, -1): + x = eye + tf.linalg.matmul(m, x) / tf.constant(tf.cast(i, m.dtype)) + + return x + + +def SU3GradientTF( + f: Callable[[Tensor], Tensor], + x: Tensor, +) -> tuple[Tensor, Tensor]: + """Compute gradient using TensorFlow GradientTape. + + y = f(x) must be a real scalar value. + + Returns: + - (f(x), D), where D = T^a D^a = T^a βˆ‚_a f(x) + + NOTE: Use real vector derivatives, e.g. + D^a = βˆ‚_a f(x) + = βˆ‚_t f(exp(T^a) x) |_{t=0} + """ + zeros = tf.zeros(8) + with tf.GradientTape(watch_accessed_variables=False) as tape: + tape.watch(zeros) + y = f(tf.linalg.matmul(exp(su3fromvec(zeros)), x)) + d = tape.gradient(y, zeros) + + return y, d diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/lattice.py new file mode 100644 index 000000000..07964bf6e --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/lattice.py @@ -0,0 +1,178 @@ +""" +su3/numpy/lattice.py + +Implements SU3BaseLattice Class +""" +from __future__ import absolute_import, print_function, division, annotations + +# import jax.numpy as jnp +import numpy as np + +from lgt.group import group as g +# from typing import Generator +# from l2hmc.lattice.generators import generate_SU3 + +Array = np.ndarray +PI = np.pi +TWO_PI = 2. * np.pi + + +def pbc(tup: tuple[int], shape: tuple[int]) -> list: + return np.mod(tup, shape).tolist() + + +def mat_adj(mat: Array) -> Array: + return mat.conj().T + + +Site = tuple[int, int, int, int] # t, x, y, z +Link = tuple[int, int, int, int, int] # t, x, y, z, dim +Buffer = tuple[int, int, int, int, int, int] # b, t, x, y, z, dim + + +class BaseLatticeSU3: + """4D Lattice with SU(3) links.""" + dim = 4 + + def __init__( + self, + nb: int, + shape: tuple[int, int, int, int], + c1: float = 0.0, + ) -> None: + """4D SU(3) Lattice object for dealing with lattice quantities. + + NOTE: + `x.shape = [nb, 4, nt, nx, nx, nx, 3, 3]`. + + Args: + - nb (int): Batch dimension, i.e. number of chains to run in parallel + - nt (int): Temporal extent of lattice + - nx (int): Spatial extent of lattice + - dim (int): Number of dimensions, 4 by default (t, x, y, z) + """ + self.dim = 4 + self.g = g.SU3() + assert len(shape) == 4 # (nb, nt, nx, dim) + self.c1 = c1 + self.link_shape = self.g.shape + self.nt, self.nx, self.ny, self.nz = shape + self._shape = (nb, 4, *shape, *self.g.shape) + self.volume = self.nt * self.nx * self.ny * self.nz + # ---------------------------------------------------------------- + # NOTE: + # - self.link_shape: [*e] = [3, 3] + # - self.site_idxs: [nb, *n] = [nb, t, x, y, z] + # - self.link_idxs: [nb, *n, d] = [nb, t, x, y, z, d] + # - self.shape: [nb, *n, d, *e] = [nb, t, x, y, z, d, 3, 3] + # + # - where: t in [0, 1, ..., (nt - 1)] + # (x, y, z) in [0, 1, ..., (nx - 1)] + # d in [0, 1, ..., (dim - 1)] + # ---------------------------------------------------------------- + self.site_idxs = tuple( + [self.nt] + [self.nx for _ in range(self.dim - 1)] + ) + self.nplaqs = self.nt * self.nx + self._lattice_shape = shape + self.nsites = np.cumprod(shape)[-1] + self.nlinks = self.nsites * self.dim + self.link_idxs = tuple(list(self.site_idxs) + [self.dim]) + + def coeffs(self, beta: Array) -> dict[str, Array]: + """Coefficients for the plaquette and rectangle terms.""" + rect_coeff = beta * self.c1 + plaq_coeff = beta * (1.0 - 8.0 * self.c1) + + return {'plaq': plaq_coeff, 'rect': rect_coeff} + + def _link_staple_op(self, link: Array, staple: Array) -> Array: + return self.g.mul(link, staple) + + def _plaquette(self, x: Array, u: int, v: int): + xuv = self.g.mul(x[:, u], np.roll(x[:, v], shift=-1, axis=u + 1)) + xvu = self.g.mul(x[:, v], np.roll(x[:, u], shift=-1, axis=v + 1)) + return self.g.trace(self.g.mul(xuv, xvu, adjoint_b=True)) + + def _wilson_loops( + self, + x: Array, + needs_rect: bool = False + ) -> tuple[list[Array], list[Array]]: + # x.shape = [nb, nt, nx, nx, nx, d, 3, 3] + # y.shape = [nb, d, nt, nx, nx, nx, 3, 3] + assert len(x.shape) == 8 + plaqs = [] + rects = [] + for u in range(1, 4): + for v in range(0, u): + yuv = self.g.mul(x[:, u], np.roll(x[:, v], shift=-1, axis=u+1)) + yvu = self.g.mul(x[:, v], np.roll(x[:, u], shift=-1, axis=v+1)) + plaq = self.g.trace(self.g.mul(yuv, yvu, adjoint_b=True)) + plaqs.append(plaq) + if needs_rect: + yu = np.roll(x[:, u], shift=-1, axis=v+1) + yv = np.roll(x[:, v], shift=-1, axis=u+1) + uu = self.g.mul(x[:, v], yuv, adjoint_a=True) + ur = self.g.mul(x[:, u], yvu, adjoint_a=True) + ul = self.g.mul(yuv, yu, adjoint_b=True) + ud = self.g.mul(yvu, yv, adjoint_b=True) + ul_ = np.roll(ul, shift=-1, axis=u+1) + ud_ = np.roll(ud, shift=-1, axis=v+1) + rects.append( + self.g.trace(self.g.mul(ur, ul_, adjoint_b=True)) + ) + rects.append( + self.g.trace(self.g.mul(uu, ud_, adjoint_b=True)) + ) + + return plaqs, rects + + def _plaquettes(self, x: Array) -> Array: + ps, _ = self._wilson_loops(x) + psum = 0.0 + for p in ps: # NOTE: len(ps) == 6 + psum += np.sum(p.real, axis=range(1, len(p.shape))) + + # NOTE: return psum / (len(ps) * dim(link) * volume) + return psum / (6 * 3 * self.volume) + + def action(self, x: Array, beta: Array): + """Returns the action""" + coeffs = self.coeffs(beta) + ps, rs = self._wilson_loops(x, needs_rect=self.c1 != 0) + psum = 0.0 + for p in ps: + psum += np.sum( + p.real, + axis=range(1, len(p.shape)) + ) + + action = coeffs['plaq'] * psum + + if self.c1 != 0: + rsum = 0.0 + for r in rs: + rsum += np.sum( + r.real, + axis=range(1, len(r.shape)) + ) + action += coeffs['rect'] * rsum + # action += tf.math.multiply(coeffs['rect'], rsum) + + return action * (-1.0 / 3.0) + + def random(self): + return self.g.random(self._shape) + + # def grad_action(self, x: Array, beta: Array) -> Array: + # """Returns the derivative of the action""" + # if tf.executing_eagerly(): + # with tf.GradientTape(watch_accessed_variables=False) as tape: + # tape.watch(x) + # action = self.action(x, beta) + # g = tape.gradient(action, x) + # else: + # g = tf.gradients(self.action(x, beta), [x])[0] + + # return self.g.projectTAH(self.g.mul(g, x, adjoint_b=True)) diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/pytorch/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/pytorch/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/lattice.py new file mode 100644 index 000000000..324479f6b --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/lattice.py @@ -0,0 +1,169 @@ +""" +lattice.py + +Contains implementation of generic GaugeLattice object. +""" +from __future__ import absolute_import, print_function, division, annotations + +import numpy as np +import tensorflow as tf + +from lgt.group import group as g +from lgt.lattice.su3.numpy.lattice import BaseLatticeSU3 +# from typing import Generator +# from l2hmc.lattice.generators import generate_SU3 + +Array = np.ndarray +PI = np.pi +TWO_PI = 2. * np.pi + +Tensor = tf.Tensor + + +def pbc(tup: tuple[int], shape: tuple[int]) -> list: + return np.mod(tup, shape).tolist() + + +def mat_adj(mat: Array) -> Array: + return mat.conj().T + + +Site = tuple[int, int, int, int] # t, x, y, z +Link = tuple[int, int, int, int, int] # t, x, y, z, dim +Buffer = tuple[int, int, int, int, int, int] # b, t, x, y, z, dim + + +class LatticeSU3(BaseLatticeSU3): + """4D Lattice with SU(3) links.""" + dim = 4 + + def __init__( + self, + nb: int, + shape: tuple[int, int, int, int], + c1: float = 0.0, + ) -> None: + """4D SU(3) Lattice object for dealing with lattice quantities. + + NOTE: + `x.shape = [nb, 4, nt, nx, ny, nz, 3, 3]`. + + Args: + - nb (int): Batch dimension, i.e. number of chains to run in parallel + - shape: Lattice shape, list or tuple of 4 ints + - c1: Constant indicating whether or not to use rectangle terms ? + """ + self.dim = 4 + self.g = g.SU3() + assert len(shape) == 4 # (nb, nt, nx, dim) + self.c1 = tf.constant(c1) + self.link_shape = self.g.shape + self.nt, self.nx, self.ny, self.nz = shape + self._shape = (nb, 4, *shape, *self.g.shape) + self.volume = self.nt * self.nx * self.ny * self.nz + self.site_idxs = tuple( + [self.nt] + [self.nx for _ in range(self.dim - 1)] + ) + self.nplaqs = self.nt * self.nx + self._lattice_shape = shape + self.nsites = np.cumprod(shape)[-1] + self.nlinks = self.nsites * self.dim + self.link_idxs = tuple(list(self.site_idxs) + [self.dim]) + + def coeffs(self, beta: Tensor) -> dict[str, Tensor]: + """Coefficients for the plaquette and rectangle terms.""" + rect_coeff = beta * self.c1 + plaq_coeff = beta * (tf.constant(1.0) - tf.constant(8.0) * self.c1) + + return {'plaq': plaq_coeff, 'rect': rect_coeff} + + def _link_staple_op(self, link: Tensor, staple: Tensor) -> Tensor: + return self.g.mul(link, staple) + + def _plaquette(self, x: Tensor, u: int, v: int): + xuv = self.g.mul(x[:, u], tf.roll(x[:, v], shift=-1, axis=u + 1)) + xvu = self.g.mul(x[:, v], tf.roll(x[:, u], shift=-1, axis=v + 1)) + return self.g.trace(self.g.mul(xuv, xvu, adjoint_b=True)) + + def _wilson_loops( + self, + x: Tensor, + needs_rect: bool = False + ) -> tuple[list[Tensor], list[Tensor]]: + # x.shape = [nb, nt, nx, nx, nx, d, 3, 3] + # y.shape = [nb, d, nt, nx, nx, nx, 3, 3] + x = tf.reshape(x, self._shape) + assert len(x.shape) == 8 + plaqs = [] + rects = [] + for u in range(1, 4): + for v in range(0, u): + yuv = self.g.mul(x[:, u], tf.roll(x[:, v], shift=-1, axis=u+1)) + yvu = self.g.mul(x[:, v], tf.roll(x[:, u], shift=-1, axis=v+1)) + plaq = self.g.trace(self.g.mul(yuv, yvu, adjoint_b=True)) + plaqs.append(plaq) + if needs_rect: + yu = tf.roll(x[:, u], shift=-1, axis=v+1) + yv = tf.roll(x[:, v], shift=-1, axis=u+1) + uu = self.g.mul(x[:, v], yuv, adjoint_a=True) + ur = self.g.mul(x[:, u], yvu, adjoint_a=True) + ul = self.g.mul(yuv, yu, adjoint_b=True) + ud = self.g.mul(yvu, yv, adjoint_b=True) + ul_ = tf.roll(ul, shift=-1, axis=u+1) + ud_ = tf.roll(ud, shift=-1, axis=v+1) + rects.append( + self.g.trace(self.g.mul(ur, ul_, adjoint_b=True)) + ) + rects.append( + self.g.trace(self.g.mul(uu, ud_, adjoint_b=True)) + ) + + return plaqs, rects + + def _plaquettes(self, x: Tensor) -> Tensor: + ps, _ = self._wilson_loops(x) + psum = tf.constant(0.0) + for p in ps: # NOTE: len(ps) == 6 + psum += tf.reduce_sum(tf.math.real(p), axis=range(1, len(p.shape))) + + # NOTE: return psum / (len(ps) * dim(link) * volume) + return psum / (6 * 3 * self.volume) + + def action(self, x: Tensor, beta: Tensor): + """Returns the action""" + coeffs = self.coeffs(beta) + ps, rs = self._wilson_loops(x, needs_rect=self.c1 != 0) + psum = tf.constant(0.0) + for p in ps: + psum += tf.reduce_sum( + tf.math.real(p), + axis=range(1, len(p.shape)) + ) + + action = tf.math.multiply(coeffs['plaq'], psum) + + if self.c1 != 0: + rsum = tf.constant(0.0) + for r in rs: + rsum += tf.reduce_sum( + tf.math.real(r), + axis=range(1, len(r.shape)) + ) + action += tf.math.multiply(coeffs['rect'], rsum) + + return action * tf.constant(-1.0 / 3.0) + + def random(self): + return self.g.random(self._shape) + + def grad_action(self, x: Tensor, beta: Tensor) -> Tensor: + """Returns the derivative of the action""" + if tf.executing_eagerly(): + with tf.GradientTape(watch_accessed_variables=False) as tape: + tape.watch(x) + action = self.action(x, beta) + g = tape.gradient(action, x) + else: + g = tf.gradients(self.action(x, beta), [x])[0] + + return self.g.projectTAH(self.g.mul(g, x, adjoint_b=True)) diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/lattice.py new file mode 100644 index 000000000..dfe88e043 --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/lattice.py @@ -0,0 +1,204 @@ +""" +lattice.py + +Implements BaseLatticeU1 class in numpy +""" +from __future__ import absolute_import, division, print_function, annotations +from dataclasses import dataclass +from math import pi as PI +from typing import Optional +from scipy.special import i1, i0 + +import numpy as np + +TWO_PI = 2. * PI +Array = np.ndarray + + +@dataclass +class Charges: + intQ: Array + sinQ: Array + + def asdict(self): + return {'intQ': self.intQ, 'sinQ': self.sinQ} + + +@dataclass +class LatticeMetrics: + plaqs: Array + charges: Charges + p4x4: Array + + def asdict(self): + return { + 'plaqs': self.plaqs, + 'p4x4': self.p4x4, + 'sinQ': self.charges.sinQ, + 'intQ': self.charges.intQ, + } + + +def area_law(beta: float, nplaqs: int): + return (i1(beta) / i0(beta)) ** nplaqs + + +def plaq_exact(beta: float): + return area_law(beta, nplaqs=1) + + +def project_angle(x: Array) -> Array: + return x - TWO_PI * np.floor((x + PI) / TWO_PI) + + +class BaseLatticeU1: + def __init__(self, nb: int, shape: tuple[int, int]): + self.nb = nb + self._dim = 2 + assert len(shape) == 2 + self.nt, self.nx = shape + self.xshape = (self._dim, *shape) + self._shape = (nb, *self.xshape) + + self.nplaqs = self.nt * self.nx + self.nlinks = self.nplaqs * self._dim + + def draw_uniform_batch(self): + unif = np.random.uniform(self.xshape) + return TWO_PI * unif - PI + + def unnormalized_log_prob(self, x: Array) -> Array: + return self.action(x=x) + + def action( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None + ) -> Array: + """Calculate the Wilson gauge action for a batch of lattices.""" + wloops = self._get_wloops(x) if wloops is None else wloops + return (1. - np.cos(wloops)).sum((1, 2)) + + def calc_metrics(self, x: Array) -> dict[str, Array]: + wloops = self.wilson_loops(x) + plaqs = self.plaqs(wloops=wloops) + charges = self.charges(wloops=wloops) + return {'plaqs': plaqs, 'intQ': charges.intQ, 'sinQ': charges.sinQ} + + def observables(self, x: Array) -> LatticeMetrics: + wloops = self.wilson_loops(x) + return LatticeMetrics(p4x4=self.plaqs4x4(x=x), + plaqs=self.plaqs(wloops=wloops), + charges=self.charges(wloops=wloops)) + + def wilson_loops(self, x: Array) -> Array: + """Calculate the Wilson loops by summing links in CCW direction.""" + # -------------------------- + # NOTE: Watch your shapes! + # -------------------------- + # * First, x.shape = [-1, 2, Lt, Lx], so + # (x_reshaped).T.shape = [2, Lx, Lt, -1] + # and, + # x0.shape = x1.shape = [Lx, Lt, -1] + # where x0 and x1 are the links along the 2 (t, x) dimensions. + # + # * The Wilson loop is then: + # wloop = U0(x, y) + U1(x+1, y) - U0(x, y+1) - U(1)(x, y) + # and so output = wloop.T, with output.shape = [-1, Lt, Lx] + # -------------------------- + x0, x1 = x.reshape(-1, *self.xshape).transpose(1, 2, 3, 0) + return (x0 + np.roll(x1, -1, axis=0) - np.roll(x0, -1, axis=1) - x1).T + + def wilson_loops4x4(self, x: Array) -> Array: + """Calculate the 4x4 Wilson loops""" + x0, x1 = x.reshape(-1, *self.xshape).transpose(1, 0, 2, 3) + return ( + x0 # Ux [x, y] + + x0.roll(-1, dims=2) # Ux [x+1, y] + + x0.roll(-2, dims=2) # Ux [x+2, y] + + x0.roll(-3, dims=2) # Ux [x+3, y] + + x0.roll(-4, dims=2) # Ux [x+4, y] + + x1.roll((-4, -1), dims=(2, 1)) # Uy [x+4, y+1] + + x1.roll((-4, -2), dims=(2, 1)) # Uy [x+4, y+2] + + x1.roll((-4, -3), dims=(2, 1)) # Uy [x+4, y+3] + - x0.roll((-3, -4), dims=(2, 1)) # -Ux [x+3, y+4] + - x0.roll((-2, -4), dims=(2, 1)) # -Ux [x+2, y+4] + - x0.roll((-1, -4), dims=(2, 1)) # -Ux [x+1, y+4] + - x1.roll(-4, dims=1) # -Uy [x, y+4] + - x1.roll(-3, dims=1) # -Uy [x, y+3] + - x1.roll(-2, dims=1) # -Uy [x, y+2] + - x1.roll(-1, dims=1) # -Uy [x, y+1] + - x1 # -Uy [x, y] + ).T + + def plaqs( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None, + # beta: float = None + ) -> Array: + """Calculate the average plaquettes for a batch of lattices.""" + if wloops is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + wloops = self.wilson_loops(x) + + return np.cos(wloops).mean((1, 2)) + + def _plaqs4x4(self, wloops4x4: Array) -> Array: + return np.cos(wloops4x4).mean((1, 2)) + + def plaqs4x4( + self, + x: Optional[Array] = None, + wloops4x4: Optional[Array] = None + ) -> Array: + """Calculate the 4x4 Wilson loops for a batch of lattices.""" + if wloops4x4 is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + wloops4x4 = self.wilson_loops4x4(x) + + return self._plaqs4x4(wloops4x4) + + def _sin_charges(self, wloops: Array) -> Array: + """Calculate sinQ from Wilson loops.""" + return np.sin(wloops).sum((1, 2)) / TWO_PI + + def _int_charges(self, wloops: Array) -> Array: + """Calculate intQ from Wilson loops.""" + return project_angle(wloops).sum((1, 2)) / TWO_PI + + def _get_wloops(self, x: Optional[Array] = None) -> Array: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + return self.wilson_loops(x) + + def sin_charges( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None + ) -> Array: + """Calculate the real-valued charge approximation, sin(Q).""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._sin_charges(wloops) + + def int_charges( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None + ) -> Array: + """Calculate the integer valued topological charge, int(Q).""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._int_charges(wloops) + + def charges( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None + ) -> Charges: + """Calculate both charge representations and return as single object""" + wloops = self._get_wloops(x) if wloops is None else wloops + sinQ = self._sin_charges(wloops) + intQ = self._int_charges(wloops) + return Charges(intQ=intQ, sinQ=sinQ) diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/lattice.py new file mode 100644 index 000000000..bb16532b6 --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/lattice.py @@ -0,0 +1,258 @@ +""" +lattice.py + +Contains pytorch implementation of Lattice object. + +Author: Sam Foreman +Date: 06/02/2021 +""" +from __future__ import absolute_import, annotations, division, print_function +from dataclasses import dataclass +from typing import Optional +from math import pi as PI + +from scipy.special import i0, i1 +import torch + +from lgt.lattice.u1.numpy.lattice import BaseLatticeU1 + +TWO_PI = 2. * PI +Tensor = torch.Tensor + + +@dataclass +class Charges: + intQ: Tensor + sinQ: Tensor + + +@dataclass +class LatticeMetrics: + plaqs: Tensor + charges: Charges + p4x4: Tensor + + +def area_law(beta: float, nplaqs: int): + return (i1(beta) / i0(beta)) ** nplaqs + + +def plaq_exact(beta: float | Tensor): + return i1(beta) / i0(beta) + + +def project_angle(x: Tensor) -> Tensor: + """For x in [-4pi, 4pi], returns x in [-pi, pi].""" + return x - TWO_PI * torch.floor((x + PI) / TWO_PI) + + +class LatticeU1(BaseLatticeU1): + def __init__(self, nb: int, shape: tuple[int, int]): + super().__init__(nb, shape=shape) + + def draw_uniform_batch(self, requires_grad=True) -> Tensor: + """Draw batch of samples, uniformly from [-pi, pi).""" + unif = torch.rand(self._shape, requires_grad=requires_grad) + return TWO_PI * unif - PI + + def unnormalized_log_prob(self, x: Tensor) -> Tensor: + return self.action(x=x) + + def action( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the Wilson gauge action for a batch of lattices.""" + wloops = self._get_wloops(x) if wloops is None else wloops + return (1. - torch.cos(wloops)).sum((1, 2)) + + def plaqs_diff( + self, + beta: float, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None, + ) -> Tensor: + """Calculate the difference between plaquettes and expected value""" + wloops = self._get_wloops(x) if wloops is None else wloops + plaqs = self.plaqs(wloops=wloops) + pexact = plaq_exact(beta) * torch.ones_like(plaqs) + return pexact - self.plaqs(wloops=wloops) + + def calc_metrics( + self, + x: Tensor, + beta: Optional[float] = None + ) -> dict[str, Tensor]: + """Calculate various metrics and return as dict""" + wloops = self.wilson_loops(x) + plaqs = self.plaqs(wloops=wloops) + charges = self.charges(wloops=wloops) + metrics = {'plaqs': plaqs} + if beta is not None: + metrics.update({ + 'plaqs_err': plaq_exact(torch.from_numpy(beta)) - plaqs + }) + metrics.update({ + 'intQ': charges.intQ, 'sinQ': charges.sinQ + }) + + return metrics + + def observables(self, x: Tensor) -> LatticeMetrics: + """Calculate observables and return as LatticeMetrics object""" + wloops = self.wilson_loops(x) + return LatticeMetrics(p4x4=self.plaqs4x4(x=x), + plaqs=self.plaqs(wloops=wloops), + charges=self.charges(wloops=wloops)) + + def wilson_loops(self, x: Tensor) -> Tensor: + """Calculate the Wilson loops by summing links in CCW direction.""" + # -------------------------- + # NOTE: Watch your shapes! + # -------------------------- + # * First, x.shape = [-1, 2, Lt, Lx], so + # (x_reshaped).T.shape = [2, Lx, Lt, -1] + # and, + # x0.shape = x1.shape = [Lx, Lt, -1] + # where x0 and x1 are the links along the 2 (t, x) dimensions. + # + # * The Wilson loop is then: + # wloop = U0(x, y) + U1(x+1, y) - U0(x, y+1) - U(1)(x, y) + # and so output = wloop.T, with output.shape = [-1, Lt, Lx] + # -------------------------- + x0, x1 = x.reshape(-1, *self.xshape).transpose(0, 1) + x0 = x0.T + x1 = x1.T + + return (x0 + x1.roll(-1, dims=0) - x0.roll(-1, dims=1) - x1).T + + def wilson_loops4x4(self, x: Tensor) -> Tensor: + """Calculate the 4x4 Wilson loops""" + x0, x1 = x.reshape(-1, *self.xshape).transpose(0, 1) + x0 = x0.T + x1 = x1.T + return ( + x0 # Ux [x, y] + + x0.roll(-1, dims=2) # Ux [x+1, y] + + x0.roll(-2, dims=2) # Ux [x+2, y] + + x0.roll(-3, dims=2) # Ux [x+3, y] + + x0.roll(-4, dims=2) # Ux [x+4, y] + + x1.roll((-4, -1), dims=(2, 1)) # Uy [x+4, y+1] + + x1.roll((-4, -2), dims=(2, 1)) # Uy [x+4, y+2] + + x1.roll((-4, -3), dims=(2, 1)) # Uy [x+4, y+3] + - x0.roll((-3, -4), dims=(2, 1)) # -Ux [x+3, y+4] + - x0.roll((-2, -4), dims=(2, 1)) # -Ux [x+2, y+4] + - x0.roll((-1, -4), dims=(2, 1)) # -Ux [x+1, y+4] + - x1.roll(-4, dims=1) # -Uy [x, y+4] + - x1.roll(-3, dims=1) # -Uy [x, y+3] + - x1.roll(-2, dims=1) # -Uy [x, y+2] + - x1.roll(-1, dims=1) # -Uy [x, y+1] + - x1 # -Uy [x, y] + ).T + + def plaqs( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None, + # beta: float = None + ) -> Tensor: + """Calculate the average plaquettes for a batch of lattices.""" + if wloops is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + wloops = self.wilson_loops(x) + + return torch.cos(wloops).mean((1, 2)) + + def _plaqs4x4(self, wloops4x4: Tensor) -> Tensor: + return torch.cos(wloops4x4).mean((1, 2)) + + def plaqs4x4( + self, + x: Optional[Tensor] = None, + wloops4x4: Optional[Tensor] = None + ) -> Tensor: + """Calculate the 4x4 Wilson loops for a batch of lattices.""" + if wloops4x4 is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + wloops4x4 = self.wilson_loops4x4(x) + + return self._plaqs4x4(wloops4x4) + + def _sin_charges(self, wloops: Tensor) -> Tensor: + """Calculate sinQ from Wilson loops.""" + return torch.sin(wloops).sum((1, 2)) / TWO_PI + + def _int_charges(self, wloops: Tensor) -> Tensor: + """Calculate intQ from Wilson loops.""" + return project_angle(wloops).sum((1, 2)) / TWO_PI + + def _get_wloops( + self, + x: Optional[Tensor] = None + ) -> Tensor: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + return self.wilson_loops(x) + + def sin_charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the real-valued charge approximation, sin(Q).""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._sin_charges(wloops) + + def int_charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the integer valued topological charge, int(Q).""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._int_charges(wloops) + + def charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Charges: + """Calculate both charge representations and return as single object""" + wloops = self._get_wloops(x) if wloops is None else wloops + sinQ = self._sin_charges(wloops) + intQ = self._int_charges(wloops) + return Charges(intQ=intQ, sinQ=sinQ) + + def plaq_loss( + self, + acc: Tensor, + x1: Optional[Tensor] = None, + x2: Optional[Tensor] = None, + wl1: Optional[Tensor] = None, + wl2: Optional[Tensor] = None, + ) -> float: + wloops1 = self._get_wloops(x1) if wl1 is None else wl1 + wloops2 = self._get_wloops(x2) if wl2 is None else wl2 + dwloops = 2. * (1. - torch.cos(wloops2 - wloops1)) + ploss = acc * dwloops.sum((1, 2)) + 1e-4 + + return -ploss.mean(0) + + def charge_loss( + self, + acc: Tensor, + x1: Optional[Tensor] = None, + x2: Optional[Tensor] = None, + wl1: Optional[Tensor] = None, + wl2: Optional[Tensor] = None, + ): + wloops1 = self._get_wloops(x1) if wl1 is None else wl1 + wloops2 = self._get_wloops(x2) if wl2 is None else wl2 + q1 = self._sin_charges(wloops=wloops1) + q2 = self._sin_charges(wloops=wloops2) + dq = (q2 - q1) ** 2 + qloss = acc * dq + 1e-4 + return -qloss.mean(0) diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/lattice.py new file mode 100644 index 000000000..dbb75a64d --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/lattice.py @@ -0,0 +1,263 @@ +""" +lattice.py + +TensorFlow implementation of the Lattice object. +""" +from __future__ import absolute_import, annotations, division, print_function +from dataclasses import asdict, dataclass + +import numpy as np +import tensorflow as tf +from typing import Optional + +from lgt.lattice.u1.numpy.lattice import BaseLatticeU1 + +TF_FLOAT = tf.keras.backend.floatx() +PI = tf.constant(np.pi) +TWO_PI = 2. * PI + +Tensor = tf.Tensor + + +@dataclass +class Charges: + intQ: Tensor + sinQ: Tensor + + def asdict(self): + return asdict(self) + + +@dataclass +class LatticeMetrics: + plaqs: Tensor + charges: Charges + p4x4: Tensor + + def asdict(self): + return { + 'plaqs': self.plaqs, + 'sinQ': self.charges.sinQ, + 'intQ': self.charges.intQ, + 'p4x4': self.p4x4, + } + + +def area_law(beta: float, num_plaqs: int) -> float: + """Returns the expected value of the Wilson loop containing `num_plaqs`.""" + return (tf.math.bessel_i1(beta) / tf.math.bessel_i0(beta)) ** num_plaqs + + +def plaq_exact(beta: float | Tensor) -> Tensor: + """Computes the expected value of the avg. plaquette for 2D U(1).""" + beta = tf.constant(beta, dtype=TF_FLOAT) + pexact = tf.constant(tf.math.bessel_i1(beta) / tf.math.bessel_i0(beta)) + return pexact + + +def project_angle(x): + """Returns the projection of an angle `x` from [-4 Ο€, 4 Ο€] to [-Ο€, Ο€].""" + return x - TWO_PI * tf.math.floor((x + PI) / TWO_PI) + + +class LatticeU1(BaseLatticeU1): + def __init__(self, nb: int, shape: tuple[int, int]): + super().__init__(nb, shape=shape) + + def draw_uniform_batch(self) -> Tensor: + """Draw batch of samples, uniformly from [-pi, pi).""" + return tf.random.uniform(self._shape, *(-PI, PI), dtype=TF_FLOAT) + + def unnormalized_log_prob(self, x: Tensor) -> Tensor: + return self.action(x) + + def action( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the Wilson gauge action for a batch of lattices.""" + wloops = self._get_wloops(x) if wloops is None else wloops + local_action = tf.ones_like(wloops) - tf.math.cos(wloops) + return tf.reduce_sum(local_action, (1, 2)) + + def calc_metrics( + self, + x: Tensor, + beta: Optional[Tensor] = None, + ) -> dict[str, Tensor]: + wloops = self.wilson_loops(x) + plaqs = self.plaqs(wloops=wloops) + charges = self.charges(wloops=wloops) + metrics = {'plaqs': plaqs} + if beta is not None: + pexact = plaq_exact(beta) * tf.ones_like(plaqs) + metrics.update({ + 'plaqs_err': pexact - plaqs + }) + + metrics.update({ + 'intQ': charges.intQ, 'sinQ': charges.sinQ + }) + return metrics + + def observables(self, x: Tensor) -> LatticeMetrics: + """Calculate Lattice observables.""" + wloops = self.wilson_loops(x) + return LatticeMetrics(p4x4=self.plaqs4x4(x=x), + plaqs=self.plaqs(wloops=wloops), + charges=self.charges(wloops=wloops)) + + def wilson_loops(self, x: Tensor) -> Tensor: + """Calculate the Wilson loops by summing links in CCW direction.""" + # -------------------------- + # NOTE: Watch your shapes! + # -------------------------- + # * First, x.shape = [-1, 2, Lt, Lx], so + # (x_reshaped).T.shape = [2, Lx, Lt, -1] + # and, + # x0.shape = x1.shape = [Lx, Lt, -1] + # where x0 and x1 are the links along the 2 (t, x) dimensions. + # + # * The Wilson loop is then: + # wloop = U0(x, y) + U1(x+1, y) - U0(x, y+1) - U1(x, y) + # and so output = wloop.T, with output.shape = [-1, Lt, Lx] + # -------------------------- + x = tf.transpose(tf.reshape(x, self._shape), (1, 2, 3, 0)) + x0 = x[0] # type:ignore NOTE: x0 = t links + x1 = x[1] # type:ignore NOTE: x1 = x links + return tf.transpose( + x0 + tf.roll(x1, -1, axis=0) - tf.roll(x0, -1, axis=1) - x1 + ) + + def wilson_loops4x4(self, x: Tensor) -> Tensor: + """Calculate the 4x4 Wilson loops""" + x = tf.transpose(tf.reshape(x, (-1, *self.xshape)), (1, 2, 3, 0)) + x0 = x[0] # type:ignore + x1 = x[1] # type:ignore + return tf.transpose( + x0 # Ux [x, y] + + tf.roll(x0, -1, 2) # Ux [x+1, y] + + tf.roll(x0, -2, 2) # Ux [x+2, y] + + tf.roll(x0, -3, 2) # Ux [x+3, y] + + tf.roll(x0, -4, 2) # Ux [x+4, y] + + tf.roll(x1, (-4, -1), (2, 1)) # Uy [x+4, y] + + tf.roll(x1, (-4, -2), (2, 1)) # Uy [x+4, y+1] + + tf.roll(x1, (-4, -3), (2, 1)) # Uy [x+4, y+3] + - tf.roll(x0, (-3, -4), (2, 1)) # -Ux [x+3, y+4] + - tf.roll(x0, (-2, -4), (2, 1)) # -Ux [x+2, y+4] + - tf.roll(x0, (-1, -4), (2, 1)) # -Ux [x+1, y+4] + - tf.roll(x1, -4, 1) # -Uy [x, y+4] + - tf.roll(x1, -3, 1) # -Uy [x, y+3] + - tf.roll(x1, -2, 1) # -Uy [x, y+2] + - tf.roll(x1, -1, 1) # -Uy [x, y+1] + - x1 # -Uy [x, y] + ) + + def plaqs_diff( + self, + beta: float, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None, + ) -> Tensor: + wloops = self._get_wloops(x) if wloops is None else wloops + plaqs = self.plaqs(wloops=wloops) + pexact = plaq_exact(beta) * tf.ones_like(plaqs) + return pexact - self.plaqs(wloops=wloops) + + def plaqs( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the avg plaq for each of the lattices in x.""" + wloops = self._get_wloops(x) if wloops is None else wloops + return tf.reduce_mean(tf.math.cos(wloops), (1, 2)) + + def _plaqs4x4(self, wloops4x4: Tensor) -> Tensor: + return tf.reduce_mean(tf.math.cos(wloops4x4), (1, 2)) + + def plaqs4x4( + self, + x: Optional[Tensor] = None, + wloops4x4: Optional[Tensor] = None + ) -> Tensor: + """Calculate 4x4 wilson loops.""" + if wloops4x4 is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified') + wloops4x4 = self.wilson_loops4x4(x) + + return self._plaqs4x4(wloops4x4) + + def _sin_charges(self, wloops: Tensor) -> Tensor: + """Calculate sinQ from Wilson loops.""" + return tf.reduce_sum(tf.math.sin(wloops), (1, 2)) / TWO_PI + + def _int_charges(self, wloops: Tensor) -> Tensor: + return tf.reduce_sum(project_angle(wloops), (1, 2)) / TWO_PI + + def _get_wloops(self, x: Optional[Tensor] = None) -> Tensor: + if x is None: + raise ValueError('Expected input `x`') + return self.wilson_loops(x) + + def sin_charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the real-valued charge approximation, sin(Q)""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._sin_charges(wloops) + + def int_charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the integer valued charges.""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._int_charges(wloops) + + def charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Charges: + """Calculate both charge representations and return as single object""" + wloops = self._get_wloops(x) if wloops is None else wloops + sinQ = self._sin_charges(wloops) + intQ = self._int_charges(wloops) + return Charges(intQ=intQ, sinQ=sinQ) + + def plaq_loss( + self, + acc: Tensor, + x1: Optional[Tensor] = None, + x2: Optional[Tensor] = None, + wl1: Optional[Tensor] = None, + wl2: Optional[Tensor] = None, + ) -> float: + wloops1 = self._get_wloops(x1) if wl1 is None else wl1 + wloops2 = self._get_wloops(x2) if wl2 is None else wl2 + dwl = tf.subtract(wloops2, wloops1) + dwloops = 2. * (tf.ones_like(wl1) - tf.math.cos(dwl)) + ploss = acc * tf.reduce_sum(dwloops, axis=(1, 2)) + 1e-4 + + return tf.reduce_mean(-ploss, axis=0) + + def charge_loss( + self, + acc: Tensor, + x1: Optional[Tensor] = None, + x2: Optional[Tensor] = None, + wl1: Optional[Tensor] = None, + wl2: Optional[Tensor] = None, + ) -> float: + wloops1 = self._get_wloops(x1) if wl1 is None else wl1 + wloops2 = self._get_wloops(x2) if wl2 is None else wl2 + q1 = self._sin_charges(wloops=wloops1) + q2 = self._sin_charges(wloops=wloops2) + qloss = (acc * tf.math.subtract(q2, q1) ** 2) + 1e-4 + return tf.reduce_mean(-qloss, axis=0) diff --git a/.github/entrypoint/artifact/python/src/params/spaces.json b/.github/entrypoint/artifact/python/src/params/spaces.json new file mode 100644 index 000000000..eb82ec533 --- /dev/null +++ b/.github/entrypoint/artifact/python/src/params/spaces.json @@ -0,0 +1,54 @@ +{ + "strategy_name": "fibbo", + "params": { + "roi": { + "0": 0.0786, + "4": 0.0238, + "11": 0.006, + "19": 0 + }, + "trailing": { + "trailing_stop": true, + "trailing_stop_positive": 0.099, + "trailing_stop_positive_offset": 0.178, + "trailing_only_offset_is_reached": false + }, + "max_open_trades": { + "max_open_trades": Infinity + }, + "buy": { + "SmoothK": 2, + "buy_additional_indicator": "NONE", + "buy_fast_dema": "13", + "buy_fib_level": "0.618", + "buy_rsi": 45, + "buy_slow_ema": "34", + "buy_stoch_osc": 29, + "buy_swing_period": 50, + "period": 14, + "smoothD": 3 + }, + "sell": { + "sell_additional_indicator": "NONE", + "sell_fib_level": "0.382", + "sell_rsi": 70, + "sell_rsi_threshold": 64, + "sell_stoch_osc": 85 + }, + "protection": { + "cooldown_lookback": 4, + "low_profit_trade_limit": 7, + "max_drawdown_trade_limit": 6, + "stop_duration": 36, + "trade_limit": 3, + "use_low_profit": true, + "use_max_drawdown_protection": false, + "use_stop_protection": false + }, + "stoploss": { + "stoploss": -0.104 + } + }, + "ft_stratparam_v": 1, + "export_time": "2025-03-26 11:31:32.125452+00:00" +} \ No newline at end of file diff --git a/.github/entrypoint/artifact/resum.c b/.github/entrypoint/artifact/resum.c new file mode 100644 index 000000000..62d225e04 --- /dev/null +++ b/.github/entrypoint/artifact/resum.c @@ -0,0 +1,100 @@ +#include "BosonJetNLL.h" +#include +#include +#include +#include + +//#define NLL_DEBUG + +using namespace std; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, phi, pT, yB,yJ}; + BosonJetNLL *bj=(BosonJetNLL *)p; + double cphix=cos(y[1]); + return bj->sigmaR(y[0],cphix,y[2],y[3],y[4]); +} + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetNLL ZJ(1.3e4,&Z0); + + double R=0.4;ZJ.setR(R); + + #ifdef NLL_DEBUG + double pT=100.0,yB=0.1,yJ=0.2,muh=100.0,mu=30.0,muJ=10.0, mut=5.0, muxT=70.0, xT=1.2,qT=1.0,cphix=0.4;ZJ.setqT(qT); + ZJ.setKinematics(pT,yB,yJ);ZJ.getKinematics(); + ZJ.setScale(mu,muh,muJ,muxT,mut,xT,cphix); + cout << ZJ.aHqqb()<< ", " << ZJ.bHqqb() << endl; + ZJ.setLL(true); + cout << ZJ.RGInvariance(mu,muh,muxT,muJ,mut,xT,cphix) << endl; + /* + cout << M_PI*ZJ.sigmaqgR(xT, cphix, pT, yB, yJ) < +#include +#include +#include + +//#define LL_DEBUG + +using namespace std; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, phi, pT, yB,yJ}; + BosonJetLL *bj=(BosonJetLL *)p; + double cphix=cos(y[1]); + return bj->sigmaR(y[0],cphix,y[2],y[3],y[4]); +} + + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetLL ZJ(1.3e4,&Z0); + + double R=0.6;ZJ.setR(R); + + #ifdef LL_DEBUG + double pT=100.0,yB=0.1,yJ=0.2,muh=100.0,mu=30.0,muJ=10.0, mut=5.0, muxT=70.0, xT=1.2,qT=1.0,cphix=0.4;ZJ.setqT(qT); + ZJ.setKinematics(pT,yB,yJ);ZJ.getKinematics(); + ZJ.setScale(mu,muh,muJ,muxT,mut,xT,cphix); + cout << ZJ.aHqqb()<< ", " << ZJ.bHqqb() << endl; + cout << ZJ.RGInvariance(mu,muh,muxT,muJ,mut,xT,cphix) << endl; + /* + cout << M_PI*ZJ.sigmaqgR(xT, cphix, pT, yB, yJ) < + +using namespace std; + +int main(){ + QCD qcd; + /* + for(double Q=0.1;Q<100;Q+=0.1) + cout << Q << " " << qcd.alphas(Q) << " " << qcd.pdf(21, 0.1,Q) << endl; + */ + double Q = + + for(double x=0.001;x<1.0;x+=0.001){ + cout << x << " " << qcd.pdf(1,x,3.3) << endl; + } + + return 0; +} diff --git a/.github/entrypoint/artifact/tot.c b/.github/entrypoint/artifact/tot.c new file mode 100644 index 000000000..330ee9718 --- /dev/null +++ b/.github/entrypoint/artifact/tot.c @@ -0,0 +1,54 @@ +#include "BosonJetNLL.h" +#include +#include +#include +#include + +using namespace std; + +double sigma(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, phi, pT, yB,yJ, qT}; + BosonJetNLL *bj=(BosonJetNLL *)p; + double cphix=cos(y[1]); + bj->setqT(y[5]); + return y[5]*(bj->sigmaR(y[0],cphix,y[2],y[3],y[4])); +} + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetNLL ZJ(1.3e4,&Z0); + + double R=0.1;ZJ.setR(R); + + //range of the integration: from ymin to ymax + double pT=200.0; + double ymin[]={0.0,-0.5*M_PI,pT,-10.0,-2.4,0.0}; + double ymax[]={1.5,0.5*M_PI,6500.0,10.0,2.4,pT}; + + int dim=6; + size_t calls = 500000; + ZJ.setupMC( &sigma, dim, ymin,ymax, &ZJ); + ZJ.setCalls(calls); + //output file: + + ZJ.setImgcphix(true); + ZJ.setCSS(false); + ZJ.setNGL(true); + ZJ.setLL(false); + ZJ.setNonPert(false); + ZJ.setScaleVar(1.0,1.0,1.0,1.0); + + double res[2]; + double Rls[]={0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}; + + for(int i=0;i<10;i++){ + ZJ.setR(Rls[i]);ZJ.calculate(res); + cout << Rls[i] << " " << res[0] << " " << res[1] << endl; + } + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/cleanup_bundler.rb b/.github/entrypoint/cleanup_bundler.rb new file mode 100644 index 000000000..a579baf8b --- /dev/null +++ b/.github/entrypoint/cleanup_bundler.rb @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + +gempaths = %x(gem env gempath).split(":") +gempaths.each do |gempath| + # lookup bundler-*.gemspec files and delete them + # this is the only way to completely cleanup default bundler + # Note: the bundler gemspecs' paths are different for CRuby and JRuby + Dir.glob(gempath.strip + "/specifications/**/bundler-*.gemspec").each { |p| File.delete(p) } +end + diff --git a/.github/entrypoint/config.sh b/.github/entrypoint/config.sh new file mode 100755 index 000000000..5657f5c0c --- /dev/null +++ b/.github/entrypoint/config.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +git config --global user.name "${GITHUB_ACTOR}" +git config --global --add safe.directory "${GITHUB_WORKSPACE}" +git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" + +#git config --global credential.helper store +#echo "https://${GITHUB_ACTOR}:${GITHUB_ACCESS_TOKEN}@github.com" > ~/.git-credentials + +echo 'REMOTE_REPO="https://${GITHUB_ACTOR}:${GITHUB_ACCESS_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"' >> ${GITHUB_ENV} +COMMIT=$(curl -s "https://api.github.com/users/eq19/events/public" | jq ".[0].payload.commits[0].message") + +# Remove double quotes using parameter expansion +echo 'LATEST_COMMIT="${COMMIT//\"/}"' >> ${GITHUB_ENV} diff --git a/.github/entrypoint/dockerfile/Doxyfile b/.github/entrypoint/dockerfile/Doxyfile new file mode 100644 index 000000000..425f17c1a --- /dev/null +++ b/.github/entrypoint/dockerfile/Doxyfile @@ -0,0 +1,2473 @@ +# Doxyfile 1.8.13 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "Moxygen Example" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = YES + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = ./src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = */test/* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = *internal* + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = NO + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /