Warning, /firebird/packages/firebird-ng/workers/geometry/src/lib/root-geometry.processor.spec.ts is written in an unsupported language. File is not indexed.
0001 /**
0002 * The worker-side TGeo edits: a detector pattern that matches several
0003 * top-level nodes (two copies of one detector) edits each of them instead of
0004 * failing the load, and cut lists remove top-level detectors by name prefix.
0005 */
0006 import { EditActions } from '@dexvis/root-geo-tree-editor';
0007 import { applyDetectorEditRules, pruneTopLevelDetectors } from './root-geometry.processor';
0008
0009 /** A TGeo node with daughters, wired the way jsroot reads them (daughters know their mother volume). */
0010 function geoNode(name: string, daughters: any[] = []): any {
0011 const node = { fName: name, fGeoAtt: 0, fVolume: { fNodes: { arr: daughters }, fGeoAtt: 0 } };
0012 for (const daughter of daughters) daughter.fMother = node.fVolume;
0013 return node;
0014 }
0015
0016 function geoManager(topNodes: any[]): any {
0017 const master = { fNodes: { arr: topNodes }, fGeoAtt: 0 };
0018 for (const node of topNodes) node.fMother = master;
0019 return { fName: 'Default', fMasterVolume: master };
0020 }
0021
0022 const daughterNames = (node: any) => node.fVolume.fNodes.arr.map((daughter: any) => daughter.fName);
0023
0024 describe('applyDetectorEditRules', () => {
0025 it('edits every top-level node that matches a pattern', () => {
0026 const trackerA = geoNode('Tracker_14', [geoNode('Envelope_lens_vol_0'), geoNode('Envelope_box_0')]);
0027 const trackerB = geoNode('Tracker_15', [geoNode('Envelope_lens_vol_0'), geoNode('Envelope_box_0')]);
0028 const other = geoNode('Calorimeter_24', [geoNode('Envelope_lens_vol_0')]);
0029 const manager = geoManager([trackerA, trackerB, other]);
0030
0031 applyDetectorEditRules(manager, [
0032 { namePattern: '*/Tracker*', editRules: [{ pattern: '*/Envelope_lens_vol*', action: EditActions.Remove }] },
0033 { namePattern: '*/NotInThisGeometry*', editRules: [{ pattern: '*', action: EditActions.RemoveChildren }] },
0034 ]);
0035
0036 expect(daughterNames(trackerA)).toEqual(['Envelope_box_0']);
0037 expect(daughterNames(trackerB)).toEqual(['Envelope_box_0']);
0038 expect(daughterNames(other)).toEqual(['Envelope_lens_vol_0']);
0039 });
0040 });
0041
0042 describe('pruneTopLevelDetectors', () => {
0043 it('removes the top-level detectors whose names start with a listed prefix', () => {
0044 const manager = geoManager([geoNode('BeamMagnet_32'), geoNode('Tracker_14'), geoNode('FarCalorimeter_40')]);
0045 const result = pruneTopLevelDetectors(manager, ['Beam', 'Far']);
0046 expect(result.removedNodes.map((node: any) => node.fName)).toEqual(['BeamMagnet_32', 'FarCalorimeter_40']);
0047 expect(manager.fMasterVolume.fNodes.arr.map((node: any) => node.fName)).toEqual(['Tracker_14']);
0048 });
0049 });