This file is indexed.

/usr/share/doc/python-tables/examples/particles.py is in python-tables-doc 3.4.2-4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
"""Beware! you need PyTables >= 2.3 to run this script!"""

from __future__ import print_function
from time import time  # use clock for Win
import numpy as np
import tables

# NEVENTS = 10000
NEVENTS = 20000
MAX_PARTICLES_PER_EVENT = 100

# Particle description


class Particle(tables.IsDescription):
    # event_id = tables.Int32Col(pos=1, indexed=True) # event id (indexed)
    event_id = tables.Int32Col(pos=1)               # event id (not indexed)
    particle_id = tables.Int32Col(pos=2)            # particle id in the event
    parent_id = tables.Int32Col(pos=3)              # the id of the parent
                                                    # particle (negative
                                                    # values means no parent)
    momentum = tables.Float64Col(shape=3, pos=4)    # momentum of the particle
    mass = tables.Float64Col(pos=5)                 # mass of the particle

# Create a new table for events
t1 = time()
print("Creating a table with %s entries aprox.. Wait please..." %
      (int(NEVENTS * (MAX_PARTICLES_PER_EVENT / 2.))))
fileh = tables.open_file("particles-pro.h5", mode="w")
group = fileh.create_group(fileh.root, "events")
table = fileh.create_table(group, 'table', Particle, "A table",
                           tables.Filters(0))
# Choose this line if you want data compression
# table = fileh.create_table(group, 'table', Particle, "A table", Filters(1))

# Fill the table with events
np.random.seed(1)  # In order to have reproducible results
particle = table.row
for i in range(NEVENTS):
    for j in range(np.random.randint(0, MAX_PARTICLES_PER_EVENT)):
        particle['event_id'] = i
        particle['particle_id'] = j
        particle['parent_id'] = j - 10     # 10 root particles (max)
        particle['momentum'] = np.random.normal(5.0, 2.0, size=3)
        particle['mass'] = np.random.normal(500.0, 10.0)
        # This injects the row values.
        particle.append()
table.flush()
print("Added %s entries --- Time: %s sec" %
      (table.nrows, round((time() - t1), 3)))

t1 = time()
print("Creating index...")
table.cols.event_id.create_index(optlevel=0, _verbose=True)
print("Index created --- Time: %s sec" % (round((time() - t1), 3)))
# Add the number of events as an attribute
table.attrs.nevents = NEVENTS

fileh.close()

# Open the file en read only mode and start selections
print("Selecting events...")
fileh = tables.open_file("particles-pro.h5", mode="r")
table = fileh.root.events.table

print("Particles in event 34:", end=' ')
nrows = 0
t1 = time()
for row in table.where("event_id == 34"):
        nrows += 1
print(nrows)
print("Done --- Time:", round((time() - t1), 3), "sec")

print("Root particles in event 34:", end=' ')
nrows = 0
t1 = time()
for row in table.where("event_id == 34"):
    if row['parent_id'] < 0:
        nrows += 1
print(nrows)
print("Done --- Time:", round((time() - t1), 3), "sec")

print("Sum of masses of root particles in event 34:", end=' ')
smass = 0.0
t1 = time()
for row in table.where("event_id == 34"):
    if row['parent_id'] < 0:
        smass += row['mass']
print(smass)
print("Done --- Time:", round((time() - t1), 3), "sec")

print(
    "Sum of masses of daughter particles for particle 3 in event 34:", end=' ')
smass = 0.0
t1 = time()
for row in table.where("event_id == 34"):
    if row['parent_id'] == 3:
        smass += row['mass']
print(smass)
print("Done --- Time:", round((time() - t1), 3), "sec")

print("Sum of module of momentum for particle 3 in event 34:", end=' ')
smomentum = 0.0
t1 = time()
# for row in table.where("(event_id == 34) & ((parent_id) == 3)"):
for row in table.where("event_id == 34"):
    if row['parent_id'] == 3:
        smomentum += np.sqrt(np.add.reduce(row['momentum'] ** 2))
print(smomentum)
print("Done --- Time:", round((time() - t1), 3), "sec")

# This is the same than above, but using generator expressions
# Python >= 2.4 needed here!
print("Sum of module of momentum for particle 3 in event 34 (2):", end=' ')
t1 = time()
print(sum(np.sqrt(np.add.reduce(row['momentum'] ** 2))
          for row in table.where("event_id == 34")
          if row['parent_id'] == 3))
print("Done --- Time:", round((time() - t1), 3), "sec")


fileh.close()