79 lines
2.5 KiB
SQL
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)
|
|
);
|