Files
email-tracker/external/duckdb/benchmark/realnest/hep/load.sql
2025-10-24 19:21:19 -05:00

79 lines
2.5 KiB
SQL

CREATE TABLE hep_singleMu AS SELECT * FROM READ_PARQUET('https://blobs.duckdb.org/data/realnest/Run2012B_SingleMu_restructured_1000.parquet');
CREATE FUNCTION Pi() AS (ACOS(-1));
CREATE FUNCTION FMod2Pi(x) AS (FMod(x, 2 * Pi()));
CREATE FUNCTION Square(x) AS (x*x);
CREATE FUNCTION DeltaPhi(p1, p2) AS (
CASE
WHEN FMod2Pi(p1['phi'] - p2['phi']) < -Pi() THEN FMod2Pi(p1['phi'] - p2['phi']) + 2 * Pi()
WHEN FMod2Pi(p1['phi'] - p2['phi']) > Pi() THEN FMod2Pi(p1['phi'] - p2['phi']) - 2 * Pi()
ELSE FMod2Pi(p1['phi'] - p2['phi'])
END
);
CREATE FUNCTION DeltaR(p1, p2) AS (SQRT(Square(p1['eta'] - p2['eta']) + Square(DeltaPhi(p1, p2))));
CREATE FUNCTION RhoZ2Eta(Rho, Z) AS (log(Z/Rho + sqrt(Z/Rho * Z/Rho + 1.0)));
CREATE OR REPLACE FUNCTION PtEtaPhiM2PxPyPzE(pepm) AS
{'x': pepm['pt'] * cos(pepm['phi']),
'y': pepm['pt'] * sin(pepm['phi']),
'z': pepm['pt'] * sinh(pepm['eta']),
't': sqrt((pepm['pt'] * cosh(pepm['eta']))*(pepm['pt'] * cosh(pepm['eta'])) + pepm['mass'] * pepm['mass'])
};
CREATE OR REPLACE FUNCTION PxPyPzE2PtEtaPhiM(xyzt) AS
{'pt': sqrt(xyzt['x']*xyzt['x'] + xyzt['y']*xyzt['y']),
'eta': RhoZ2Eta(sqrt(xyzt['x']*xyzt['x'] + xyzt['y']*xyzt['y']), xyzt['z']),
'phi': CASE WHEN (xyzt['x'] = 0.0 AND xyzt['y'] = 0.0) THEN 0 ELSE atan2(xyzt['y'], xyzt['x']) END,
'mass': sqrt(xyzt['t']*xyzt['t'] - xyzt['x']*xyzt['x'] - xyzt['y']*xyzt['y'] - xyzt['z']*xyzt['z'])
};
CREATE OR REPLACE FUNCTION AddPxPyPzE2( xyzt1, xyzt2) AS
{'x' : xyzt1['x'] + xyzt2['x'],
'y' : xyzt1['y'] + xyzt2['y'],
'z' : xyzt1['z'] + xyzt2['z'],
't' : xyzt1['t'] + xyzt2['t']
};
CREATE OR REPLACE FUNCTION AddPxPyPzE3(xyzt1, xyzt2, xyzt3) AS
AddPxPyPzE2(xyzt1, AddPxPyPzE2(xyzt2, xyzt3)
);
CREATE OR REPLACE FUNCTION AddPtEtaPhiM2(pepm1, pepm2) AS
AddPxPyPzE2(
PtEtaPhiM2PxPyPzE(pepm1),
PtEtaPhiM2PxPyPzE(pepm2)
);
CREATE OR REPLACE FUNCTION AddPtEtaPhiM3(
pepm1,
pepm2 ,
pepm3) AS
PxPyPzE2PtEtaPhiM(
AddPxPyPzE3(
PtEtaPhiM2PxPyPzE(pepm1),
PtEtaPhiM2PxPyPzE(pepm2),
PtEtaPhiM2PxPyPzE(pepm3)
)
);
CREATE OR REPLACE FUNCTION HistogramBinHelper(
value, lo, hi, bin_width) AS (
FLOOR((
CASE
WHEN value < lo THEN lo - bin_width / 4
WHEN value > hi THEN hi + bin_width / 4
ELSE value
END - FMod(lo, bin_width)) / bin_width) * bin_width
+ bin_width / 2 + FMod(lo, bin_width)
);
CREATE OR REPLACE FUNCTION HistogramBin(
value, lo, hi, num_bins) AS (
HistogramBinHelper(value, lo, hi, (hi - lo) / num_bins)
);