Xcoll release 0.4.0
What's Changed
CollimatorManagerhas been deprecated. This is a profound change; all its functionalities have been ported as independent functions inXcoll:- Collimators can be installed in a line by using
xcoll.install_elements()though they can also be managed by (a simplified version of) theCollimatorDatabase(which can be initialised manually or from a*.yamlfile) - Optics need to be attached to the individual collimator
BeamElements(usingxcoll.assign_optics_to_collimators()). This ensures an easy syncing betweengapandjaw. Other useful functions arexcoll.open_collimators()andxcoll.send_to_parking()to fully open / send to parking all collimators (or a subset), andxcoll.enable_scattering()andxcoll.disable_scattering()to activateEverestscattering for all relevant elements in the line - Initial conditions can be generated by
xcoll.generate_pencil_on_collimator()andxcoll.generate_delta_from_dispersion()(InitialPart by @simoneotelie in #53; Test for initial_distribution.py by @simoneotelie in #62). This is still rather slow and needs to be optimised. - New
LossMapclass to analyse losses on collimators and the aperture (Loss map by @simoneotelie in #41). The next step is to port plotting from thelossmapspackage - No more manager! by @freddieknets in #73
- Collimators can be installed in a line by using
- Collimator gaps ( in sigma) are centred around the closed orbit, while the jaws (in meters) are centred around the reference frame:
- Removal of the reference point by @simoneotelie in #67
- Test for jaws and gaps by @simoneotelie in #70
- Scattering code has been split between geometry and material interaction. This allows for much easier code maintenance and development, and new features have been added.
- Geometry is defined at the
Clevel in a very generic way (and collected in anXcollGeometryobject). Collimators are represented as 2D objects, consisting of a set ofSegments. So far, threeSegmenttypes exist: aLineSegment, aHalfOpenLineSegment, and aCircularSegment. It is rather trivial to extend these. Concerning objects, we have a collimator jaw, a generic polygon, and a crystal layout (First crystal geometry by @freddieknets in #71). Different methods are provided to find the crossings of a particle trajectory with these objects, potentially including a height restriction. It is rather trivial to add new objects (hence this is a step closer to adding the jaw flatness). - The exact same geometry code is used for the
BlackAbsorberas for theEverestCollimator. So the tests of the former represent tests of the geometry code as well. - Added casting to unsigned int to ensure positive value for malloc by @simoneotelie in #72
- Geometry is defined at the
- The
Everestmaterial interaction code has been completely rewritten, for readability, maintability, and bugfixes; though a few open points / questions / TODOs remain - In particular for the crystal, this release accumulates almost one year of work on the crystal material interaction routine. Several bugfixes have been deployed, and the structural logic flow has been updated to allow for long crystals. A few open points / questions / TODOs remain
- The API of the crystal has changed: the attributes no longer have the
_L/_Rdistinction (gapinstead ofgap_L,jaw_Uinstead ofjaw_LU, etc) - Final implementation of an impact table:
InteractionRecordwhich keeps track of all touches and all interactions inside (both can be activated and deactivated independently). This is missing some dedicated tests and examples. - Release 0.4.0 by @freddieknets in #74
Develop Updates
BaseCrystalis the new abstract parent for all crystals (and it does not inherit fromBaseCollimatordue to the different API)BlackCrystalis the crystal variant of theBlackAbsorber. This is useful for testing and debugging (to find which particles hit the crystal and where)- Lots of improvements on all tests (both in execution speed and reliability)
- All examples are updated to the new API
- Removed inactive front and back, and renamed active_length as length
- Adapted code to be compatible with latest
Xtrackreleases
New Contributors
- @simoneotelie made their first contribution in #41
Full Changelog: v0.3.6...v0.4.0