Newer
Older
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
This should resolve issue https://github.com/AIDASoft/DD4hep/issues/421
* 2018-08-09 Markus Frank ([PR#432](https://github.com/aidasoft/DD4hep/pull/432))
- Make the expression evaluator understand variable names with namespaces
- Variable names containing a `:` or `::` are now accepted by the expression evaluator. This is first step towars resolving #421
- It has now to be seen what has to be done further. The DCMS example was not yet updated to use this feature.
- Add new example in `examples/ClientTests` to test this functionality.
* 2018-08-09 Andre Sailer ([PR#429](https://github.com/aidasoft/DD4hep/pull/429))
- DDG4: add possibility to simulate all events in a file by passing NumberOfEvents < 0. Fixes #237
* The de-facto limit is ~2 billion, which should be fine for input files.
* 2018-08-08 Markus Frank ([PR#430](https://github.com/aidasoft/DD4hep/pull/430))
- Fix HEPMC reader for unknown generator status codes
- Update DDCodex example, feature imports from plain ROOT file
- Allow debugging Geant4VolumeManager
* 2018-08-07 Mircho Rodozov ([PR#428](https://github.com/aidasoft/DD4hep/pull/428))
- Adapt to root interfaces changes for `TGeoMatrix::Inverse` (https://github.com/root-project/root/pull/2365), fixes #426
* 2018-08-06 Andre Sailer ([PR#424](https://github.com/aidasoft/DD4hep/pull/424))
- CMake: Ensure proper tls flag (global-dynamic) for Geant4 build, added option DD4HEP_IGNORE_GEANT4_TLS to override the check. Closes #419
* 2018-07-31 Andre Sailer ([PR#420](https://github.com/aidasoft/DD4hep/pull/420))
- DDG4: Import the ddsim python program from https://github.com/iLCSoft/lcgeo
For example:
- `ddsim --help`
- `ddsim --dumpSteeringFile > mySteer.py`
- `ddsim --steeringFile=mySteer.py --compactFile myDetector.xml`
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
# v01-08
* 2018-07-02 Markus Frank ([PR#418](https://github.com/aidasoft/dd4hep/pull/418))
- Add DDCodexB in standalone mode with simulation script and basic skeleton for DDEve
* 2018-06-28 Markus Frank ([PR#417](https://github.com/aidasoft/dd4hep/pull/417))
- Steer debug printouts in CondDB2DDDB and DDDB2Objects by parsing xml files.
* 2018-06-26 Markus Frank ([PR#416](https://github.com/aidasoft/dd4hep/pull/416))
- Separate the hit class and add dictionary. No base class - entirely independent.
- Allow to save the hit class to ROOT (but without MC truth)
See MyTrackerHit.h for details.
* 2018-06-26 Markus Frank ([PR#415](https://github.com/aidasoft/dd4hep/pull/415))
- Add small example how to specialize a new sensitive action and attach it to a detector in DDG4.
* 2018-06-26 Frank Gaede ([PR#414](https://github.com/aidasoft/dd4hep/pull/414))
- bug fix in Geant4EventReaderGuineaPig
- fix ignoring input lines with 'nan'
* 2018-06-26 Shaojun Lu ([PR#412](https://github.com/aidasoft/dd4hep/pull/412))
- Added one more if statement: If the track went into new Volume,
- then extracted the hit in previous Volume,
- and start a new hit in this current Volume,
- in this current process, also allow the same following treatments for the new hit.
* 2018-06-21 Markus Frank ([PR#409](https://github.com/aidasoft/dd4hep/pull/409))
- Support out-of-source builds of DD4hep examples.
Comes with an expense: A new environment DD4hepExamplesINSTALL.
has to be defined to support internal file accesses and loads.
The builds were also checked with read-only installation directories.
Solves issue https://github.com/AIDASoft/DD4hep/issues/382
- Smallish improvement to the ConditionsManager.
* 2018-06-21 Andre Sailer ([PR#408](https://github.com/aidasoft/dd4hep/pull/408))
- Cmake: fix for configuring with Geant4 with internal CLHEP, fixes #406
- Cmake: fix for configuring with BUILD_TESTING=OFF, fixes #407
* 2018-06-07 Markus Frank ([PR#404](https://github.com/aidasoft/dd4hep/pull/404))
- Fix basic shape tests for PseudoTrap
* 2018-06-07 Markus Frank ([PR#403](https://github.com/aidasoft/dd4hep/pull/403))
- patch for truncated tubes shapes.
* 2018-06-04 Markus Frank ([PR#402](https://github.com/aidasoft/dd4hep/pull/402))
- Fix truncated tube shape
* 2018-06-04 Markus Frank ([PR#400](https://github.com/aidasoft/dd4hep/pull/400))
- Allow for world volumes other than boxes. See `examples/ClientTests/compact/WorldVolume.xml` how to set it up. The effective thing is that the top level volume must be set to the TGeoManager before `Detector::init()`. If a top level volume is set, it is implicitly assumed to be the world volume. Otherwise the already existing mechanism (box volume) is activated.
- Add new basic shape tests.
* 2018-06-01 Markus Frank ([PR#399](https://github.com/aidasoft/dd4hep/pull/399))
- As discussed in issue #398 The use of TGeoUnits is inconvenient. The dd4hep units are now exposed in the python modules.
- Basic shapes are now tested in the regular ctest executions. The mesh vertices of the shapes were
saved to a reference file and are compared to in subsequent runs. The reference files reside in
`examples/ClienTests/ref`. See `examples/ClientTests/compact/Check_Shape_*.xml` for details.
- The ROOT UI and some dump plugins were enhanced to expose more information.
* 2018-05-30 Markus Frank ([PR#397](https://github.com/aidasoft/dd4hep/pull/397))
- Enable to start DDG4 using a saved detector description in a ROOT file.
- Added corresponding test: `Persist_CLICSiD_Geant4_LONGTEST`
- Fix shape constructors for Trap and PseudoTrap
- The python module `DD4hep.py` is gone as discussed in the developers meeting use `dd4hep.py` instead.
- on masOS : your "git pull" possibly deletes both files. you may have to checkout `dd4hep.py` again, due to fact that the filesystem is case-insensitive.
- Add example for LHCb CODEX-b.
* 2018-05-29 Markus Frank ([PR#394](https://github.com/aidasoft/dd4hep/pull/394))
- Consistently handle cmake command line options in case no Geant4 or no documentation should be built.
* 2018-05-28 Markus Frank ([PR#393](https://github.com/aidasoft/dd4hep/pull/393))
- Improvements to `geoPluginRun`.
`$> geoPluginRun -ui -interactive`
results in DD4hep enabled ROOT prompt.
- DD4hepUI: improvements to interact with DD4hep instance from ROOT prompt
- DDDB improve configuration for printing and debugging
- DDDB: allow to block certain XML branches
* 2018-05-22 Frank Gaede ([PR#389](https://github.com/aidasoft/dd4hep/pull/389))
- fix bug in input handling, for details see discussion #387
- exclude leptons with zero lifetime from Geant4
* 2018-05-22 Markus Frank ([PR#388](https://github.com/aidasoft/dd4hep/pull/388))
- Update doxygen information for some undocumented classes.
- Add licence header to files where not present.
* 2018-05-22 Marko Petric ([PR#380](https://github.com/aidasoft/dd4hep/pull/380))
- Update LICENSE to LGPLv3
- The name of the file containing the LICENSE has ben changed from LICENCE->LICENSE as all source files reference `For the licensing terms see $DD4hepINSTALL/LICENSE.`
* 2018-05-16 Markus Frank ([PR#386](https://github.com/aidasoft/dd4hep/pull/386))
- Fix bug in variable order of `ExtrudedPolygon` (x<->y)
* 2018-05-15 Markus Frank ([PR#384](https://github.com/aidasoft/dd4hep/pull/384))
# Implementation of non-cylindrical tracking region (resolves #371)
- It is possible to define volumes in a parallel world such as e.g. a tracking region. In principle any volume hierarchy may be attached to the parallel world. None of these volumes participate in the tracking as long as the "connected" attribute is set to false. The hierarchy of parallel world volumes can be accessed from the main detector object using
```cpp
dd4hep::Volume parallel = dd4hep::Description::parallelWorldVolume()
```
This parallel world volume is created when the geometry is opened together (and with the same dimensions) as the world volume itself.
- IF the NAME of the volumes is "tracking_volume" within the compact notation it is declared as the Detector's trackingVolume entity and is accessible as well:
```cpp
dd4hep::Volume trackers = dd4hep::Description::trackingVolume()
```
- Although the concept is available in the DD4hep core, its configuration from XML is only implemented for the compact notation. For details see the example `examples/ClientTests/compact/TrackingRegion.xml`.
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
- If the volume should be connected to the world: connected="true". This is useful for debugging because the volume can be visualized else if the volume is part of the parallelworld: connected="false". The volume is always connected to the top level. The anchor detector element defines the base transformation to place the volume within the (parallel) world.
```xml
<parallelworld_volume name="tracking_volume" anchor="/world" material="Air" connected="true" vis="VisibleBlue">
<shape type="BooleanShape" operation="Subtraction">
<shape type="BooleanShape" operation="Subtraction">
<shape type="BooleanShape" operation="Subtraction" >
<shape type="Tube" rmin="0*cm" rmax="100*cm" dz="100*cm"/>
<shape type="Cone" rmin2="0*cm" rmax2="60*cm" rmin1="0*cm" rmax1="30*cm" z="40*cm"/>
<position x="0*cm" y="0*cm" z="65*cm"/>
</shape>
<shape type="Cone" rmin1="0*cm" rmax1="60*cm" rmin2="0*cm" rmax2="30*cm" z="40*cm"/>
<position x="0" y="0" z="-65*cm"/>
</shape>
<shape type="Cone" rmin2="0*cm" rmax2="55*cm" rmin1="0*cm" rmax1="55*cm" z="30*cm"/>
<position x="0" y="0" z="0*cm"/>
</shape>
<position x="0*cm" y="50*cm" z="0*cm"/>
<rotation x="pi/2.0" y="0" z="0"/>
</parallelworld_volume>
```
# Enhancement of assemblies, regions and production cuts (resolves #373)
On request from FCC particle specific production cuts may be specified in the compact notation. These production cuts (Geant4 currently supports these for e+, e-, gammas and protons) are specified as "cut" entities in the limitset. (See the example `examples/ClientTests/compact/Assemblies.xml`).
- The hierarchy of cuts being applied is:
- If present particle specific production cuts for a region are applied.
- else the "cut" attribute of the compact region specification is used
- else the global Geant4 cut is automaticallly applied by Geant4.
```xml
<limits>
<limitset name="VXD_RegionLimitSet">
<!--
These are particle specific limits applied to the region
ending in Geant4 in a G4UserLimits instance
-->
<limit name="step_length_max" particles="*" value="5.0" unit="mm" />
<limit name="track_length_max" particles="*" value="5.0" unit="mm" />
<limit name="time_max" particles="*" value="5.0" unit="ns" />
<limit name="ekin_min" particles="*" value="0.01" unit="MeV" />
<limit name="range_min" particles="*" value="5.0" unit="mm" />
<!--
These are particle specific production cuts applied to the region
ending in Geant4 in a G4ProductionCuts instance
-->
<cut particles="e+" value="2.0" unit="mm" />
<cut particles="e-" value="2.0" unit="mm" />
<cut particles="gamma" value="5.0" unit="mm" />
</limitset>
</limits>
```
# SensitiveDetector types not changed by Geant4SensDetActionSequence (resolves #378)
The sensitive detector type defined in the detector constructors is no longer changed intransparently in the back of the users. This may have side-effects for creative detector constructor writers, who invent sd types out of the sky. These obviously will not work with Geant4, because in Geant4 a mapping of these types must be applied to supported sensitive detectors. Now the mapping of a sd type (e.g. "tracker") is strict in the python setup. The default factory to create any sensitive detector instance in Geant4 (ie. an object of type G4VSensitiveDetector, G4VSDFilter, Geant4ActionSD) is a property of the Geant4Kernel instance and defaults to:
```cpp
declareProperty("DefaultSensitiveType", m_dfltSensitiveDetectorType = "Geant4SensDet");
```
- Since the actual behavior is defined in the sequencer instanciated therein this default should be sufficient for 99.99 % of all cases. Otherwise the factory named "Geant4SensDet" may be overloaded.
* 2018-05-15 David Blyth ([PR#379](https://github.com/aidasoft/dd4hep/pull/379))
- Geant4FieldTrackingConstruction now properly overrides `constructField()`
* 2018-05-03 David Blyth ([PR#377](https://github.com/aidasoft/dd4hep/pull/377))
- Geant4Handle unhandled reference to shared actions. This affected the destruction of shared actions.
* 2018-05-03 Markus Frank ([PR#375](https://github.com/aidasoft/dd4hep/pull/375))
- Development of a small user example on how to do analysis in `DDG4`.
- See `examples/DDG4/src/HitTupleAction.cpp`
- Simply collect the energy deposits of hits and write an N-tuple with them.
- The example shows how to access the hit collections and to extract the data in order to write other more sophisticated analyses.
- This `DDG4` action is used in one of the Minitel examples: `examples/ClientTests/srcipts/MiniTelEnergyDeposits.py`
* 2018-05-02 Markus Frank ([PR#374](https://github.com/aidasoft/dd4hep/pull/374))
- recommission the multithreaded SiD example
- `DDG4/examples/SiDSim_MT.py` vs. `DDG4/examples/SiDSim.py`
* 2018-04-19 Markus Frank ([PR#370](https://github.com/aidasoft/dd4hep/pull/370))
* Allow to disable building the documentation cmake option BUILD_DOCS. By default ON and backwards compatible. If set to OFF no doc shall be built. (not everybody has biber installed)
* Move from `DD4hep.py` to `dd4hep.py`, since `DD4hep.py` has to disappear due to conflicts on MAC.
* 2018-04-13 Markus Frank ([PR#367](https://github.com/aidasoft/dd4hep/pull/367))
- resolves #361
The Detector object has a state `Detector::state()` with three values:
```cpp
/// The detector description states
enum State {
/// The detector description object is freshly created. No geometry nothing.
NOT_READY = 1<<0,
/// The geometry is being created and loaded. (parsing ongoing)
LOADING = 1<<1,
/// The geometry is loaded.
READY = 1<<2
};
```
It starts with `NOT_READY`, moves to `LOADING` once the geometry is opened and goes to `READY` once the geometry is closed. As suggested in the developers meeting: the initial field object is invalid and gets created only once the geometry is opened. As a corollary, the field may not be accessed before. Geometry parsers must take this behavior into account!
- Address some compiler warnings.
- Mainly add override/final statements in header files.
- Implement a module to invoke python as a DD4hep plugin:
invoked e.g. by: `geoPluginRun -plugin DD4hep_Python -dd4hep -prompt`
```
geoPluginRun -plugin DD4hep_Python -help
Usage: -plugin <name> -arg [-arg]
name: factory name DD4hep_Python
-import <string> import a python module, making its classes available.
-macro <string> load a python script as if it were a macro.
-exec <string> execute a python statement (e.g. import ROOT.
-eval <string> evaluate a python expression (e.g. 1+1)
-prompt enter an interactive python session (exit with ^D)
-dd4hep Equivalent to -exec "import dd4hep"
-help Show this online help message.
Note: entries can be given multiple times and are executed in exactly the
order specified at the command line!
```
Implementation wise the plugin is a simple CLI wrapper for TPython.
* 2018-04-12 Marko Petric ([PR#362](https://github.com/aidasoft/dd4hep/pull/362))
- Update DD4hepManual
* 2018-04-12 Markus Frank ([PR#360](https://github.com/aidasoft/dd4hep/pull/360))
- Examples: only build some examples depending on the availability of dependencies.
- DDCore: Add interface to allow URI blocking during file parsing. Default is as now.
- DDCMS: Add conversion of new shapes.
* 2018-04-10 Markus Frank ([PR#359](https://github.com/aidasoft/dd4hep/pull/359))
- Bunch of fixes. Mostly in `examples/DDDB`
- Only build `examples/DDDB` if XercesC is present.
- Only build `examples/DDCMS` if CLHEP is present
* 2018-04-09 Markus Frank ([PR#357](https://github.com/aidasoft/dd4hep/pull/357))
- Add configuration options for loading DDDB
* 2018-04-05 Markus Frank ([PR#351](https://github.com/aidasoft/dd4hep/pull/351))
- To avoid unwanted disappearing conditions sub pools, a conditions slice may be instructed to collect shared references to the used pools in the slice.
- For python:
- Move DDG4/SystemOfUnits.py to DDG4/g4units.py
Keep SystemOfUnits.py with deprecation warning
- move DD4hep.py to dd4hep.py.
import dd4hep also imports all TGeoUnit units into its namespace.
Hence: import dd4hep; print dd4hep.m gives: "100.0"
- DD4hep.py is kept for backwards compatibility issuing a deprecation warning
- DDG4.py: imports g4units as G4Units: DDG4.G4Units.m etc.
- DDG4.py: imports TGeoUnit as TGeo4Units: DDG4.TGeoUnits.m etc.
- Some problem with replacing DD4hepUnits.h with TGeoSystemOfUnits.h
Surface test complains. To be investigated. Keep old DD4hepUnits for the time being.
* 2018-04-05 Markus Frank ([PR#350](https://github.com/aidasoft/dd4hep/pull/350))
- Merge `DDCMS` and `DDCMSTests` to `DDCMS`
- Move `DDDB` to the `examples/`
- Add tests `DDDB_DeVelo` and `DDDB_DeVelo_Gaudi` missing from #349
* 2018-04-05 Markus Frank ([PR#349](https://github.com/aidasoft/dd4hep/pull/349))
- Resolves #339
- DDDB conditions had a bug when loading from file base. The IOV was not handled properly. Now the resulting IOV is configurable using properties.
- Added Gaudi like example use case for options handling with the DeVelo detector elements.
- Configuration improvement in DDG4 action Output2ROOT:
- New property "DisableParticles" allows to suppress the MCParticle record from being written to the ROOT file.
- dto. the option "DisabledCollections" allows to NOT write any hit collection.
- Unit tests for these options are not (yet) present.
- DDCond: allow for user defined conditions cleanup policies. Base class `dd4hep::cond::ConditionsCleanup`. Callbacks are issued to the class for IOV type pools and IOV dependent pools asking if the pools should be processed.
* 2018-04-05 Marko Petric ([PR#344](https://github.com/aidasoft/dd4hep/pull/344))
- Move `DDCMS` into examples as it is not core functionality
# v01-07-02
* 2018-06-26 Frank Gaede [PR#413](https://github.com/AIDASoft/DD4hep/pull/413)
- bug fix in Geant4EventReaderGuineaPig
- fix ignoring input lines with 'nan'
- did not work on SL6 w/ gcc
# v01-07-01
* 2018-05-17 Frank Gaede
- fix bug in input handling, for details see discussion [#387](https://github.com/AIDASoft/DD4hep/issues/387)
- exclude leptons with zero lifetime from Geant4
# v01-07
* 2018-03-26 Javier Cervantes Villanueva ([PR#343](https://github.com/AIDASoft/DD4hep/pull/343))
- Fix bug in calculating eta, introduced in #138
- use `magFromXYZ` instead of `radiusFromXYZ` to calculate pseudorapidity
* 2018-03-19 Frank Gaede ([PR#338](https://github.com/AIDASoft/DD4hep/pull/338))
- Include fixes from Chris Burr for the alignments calculator.
- Add a small study for the LHCb upgrade defining reasonable detector element conditions for the Velo pixel detector using the DDCond derived condition mechanism.
- To be done: somehow get an example for this mechanism, which works outside Gaudi.
* 2018-03-23 Markus Frank ([PR#340](https://github.com/AIDASoft/DD4hep/pull/340))
- Improvement for DDDB - case study to implement real-world detector elements.
* 2018-03-28 Frank Gaede ([PR#345](https://github.com/AIDASoft/DD4hep/pull/345))
- Remove `DDSurfaces` folder as it was merged in `DDRec`
* 2018-03-28 Frank Gaede ([PR#341](https://github.com/AIDASoft/DD4hep/pull/341))
- Remove top level `DDSegmentation` folder as it is not needed anymore
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
# v01-06
* 2018-01-31 Ete Remi ([PR#297](https://github.com/aidasoft/dd4hep/pull/297))
- Geant4Output2LCIO
- Switch run header writing order at beginning of run instead of end of run
* 2018-03-15 Marko Petric ([PR#335](https://github.com/aidasoft/dd4hep/pull/335))
- Deduce CLHEP location from `CLHEP_INCLUDE_DIR` ( Fixes #314 )
- Add `gSystem.Load('libglapi')` to `testDDPython.py` which failed due to TLS issues on local machine
- Add Geant4 10.4 to test suite
* 2018-03-14 Markus Frank ([PR#336](https://github.com/aidasoft/dd4hep/pull/336))
- New shape definitions for CMS
Generic Polyhedra, ExtrudedPolygon, CutTube, TruncatedTube, PseudoTrap.
- DDDB: allow to configure the match for the entity resolver.
* 2018-03-13 Daniel Jeans ([PR#333](https://github.com/aidasoft/dd4hep/pull/333))
- changed utility name from graphicalMaterialScan -> graphicalScan
- add visualisation of electric and magnetic fields (switched by parameter)
- change order of x/y/z range parameters for ease of use
- added parameter for name of output root file
* 2018-03-12 Markus Frank ([PR#334](https://github.com/aidasoft/dd4hep/pull/334))
- `step_length_max` not propagated to Geant4 for `G4UserLimit` instances.
- All limits can now be set separately for each particle type (or for all as a catchall situation if the particle type is '*'.
- Fixes #327
* 2017-11-29 Markus Frank ([PR#271](https://github.com/aidasoft/dd4hep/pull/271))
- Add `LHeD` example (contribution from Peter Kostka)
- Fix to support `python3` in `DDG4`
- Fix issue in Volumes.h for backwards compatibility with gcc version < 5
- Fix type definition of `XmlChar` to also support Xerces-C 3.2.0
- Fix `AClick` initialization files in `DDG4` (remove dependency on `libDDSegmentation`)
* 2017-11-29 Marko Petric ([PR#270](https://github.com/aidasoft/dd4hep/pull/270))
- Fields: Remove pessimizing move and shadow warnings
* 2018-02-06 Ete Remi ([PR#301](https://github.com/aidasoft/dd4hep/pull/301))
- Geant4Output2LCIO plugin
- Added run number and event number offset properties. Enable steering of run and event counters from outside
- Added 3 event parameters properties for int, float and string event parameters
* 2018-02-05 Markus Frank ([PR#304](https://github.com/aidasoft/dd4hep/pull/304))
- Restructure the files a bit to simplify the use of the `XML` and `JSON` parsers and the spirit utilities in other projects.
* 2018-02-28 Frank Gaede ([PR#323](https://github.com/aidasoft/dd4hep/pull/323))
- make Geant4InputHandling.cpp compatible w/ gcc49
- avoid stringstream move operation
- fixes #320
* 2018-01-24 Markus Frank ([PR#292](https://github.com/aidasoft/dd4hep/pull/292))
- Fix bug in Alignment test:
- A long standing bug was fixed for the test `t_AlignDet_Telescope_align_new`.
- It was assumed that the `DetElements` were ordered in memory, which is **not** true (probably due to memory randomization).
- Moved to path dependent ordering. Test now OK.
- Closes #282
- Removed a Bunch of `rootcling` warnings
- Apparently `rootcling` now expects a class with the name of the dictionary header file.
- To satify this some dummy anonymous classes were added.
- Closes #290
* 2018-01-26 Marko Petric ([PR#296](https://github.com/aidasoft/dd4hep/pull/296))
- Check dynamic cast if it was successful
* 2018-01-22 Markus Frank ([PR#289](https://github.com/aidasoft/dd4hep/pull/289))
- Add possibility to parse `XML` from string
- Please see #288 for details.
- The main interface was not changed. Rather a view to the Detector class supports this functionality.
- The existing view `dd4hep::DetectorLoad` was enhanced to allow the required functionality:
```cpp
Detector detector = ....;
/// So here is the actual test: We parse the raw XML string
DetectorLoad loader(detector);
loader.processXMLString(buffer,0);
```
- An example was added (`ClientTests/src/XML_InMemory.cpp`, which illustrates the usage).
- Improve DDCond manual
- Improve that the DDCond manual reflects the source code.
- The possible plugins provided are not all described. This shall be future work.
- Enable the GDML reader plugin
- Closes #275
* 2018-03-01 Markus Frank ([PR#325](https://github.com/aidasoft/dd4hep/pull/325))
- Add dictionaries to `DDRec`.
- Consequently add the python interface to access the exported classes.
* 2018-03-01 Ete Remi ([PR#321](https://github.com/aidasoft/dd4hep/pull/321))
- Geant4InputAction and Geant4EventReader :
- Register input action pointer to event reader, enabling the event reader to access the Geant4 context
- Added new class LCIOEventParameters to handle LCIO input event parameters
- LCIOFileReader :
- Add extension with LCIO input event parameters to Geant4event
- Geant4Output2LCIO :
- Get LCIO event parameters from event extension (if any) and write them to LCIO output event
* 2018-03-01 David Blyth ([PR#317](https://github.com/aidasoft/dd4hep/pull/317))
- DDCore: added CartesianStrip segmentations
* 2018-03-02 Frank Gaede ([PR#328](https://github.com/aidasoft/dd4hep/pull/328))
- finalize the python bindings for DDRec:
- implement StructExtension(DetElement&) and toString()
- add DetectorData classes to python
- add example `dumpDetectorData.py`
- closes #306
- remove deprecated methods and classes in DDRec
- resolves #326
* 2018-03-06 Andre Sailer ([PR#331](https://github.com/aidasoft/dd4hep/pull/331))
- Geant4InputHandling: reject stable particles without lifetime (e.g., initial state electrons), fixes #330
* 2018-03-07 Markus Frank ([PR#329](https://github.com/aidasoft/dd4hep/pull/329))
- Fixes #324
- Call `TGeoMixture::ComputeDerivedQuantities()` for ROOT >= 6.12.0 (Resolves #281)
- Start to address issue: https://github.com/AIDASoft/DD4hep/issues/327
* 2018-03-07 Daniel Jeans ([PR#322](https://github.com/aidasoft/dd4hep/pull/322))
- correct coded expressions for quadrupole, sextupole and octopole fields.
- correct expression for octopole field in documentation
* 2018-03-09 Ercan Pilicer ([PR#319](https://github.com/aidasoft/dd4hep/pull/319))
- Remove unnecessary `import exceptions` from python
* 2017-11-30 Markus Frank ([PR#272](https://github.com/aidasoft/dd4hep/pull/272))
### DDG4 enhancements
- Enable framework support in DDG4. The `Geant4Context` is the main thread specific accessor to the `dd4hep`, `DDG4` and the user framework.
- The access to the `dd4hep` objects is via the `Geant4Context::detectorDescription()` call,
- the access to `DDG4` as a whole is supported via `Geant4Context::kernel()` and
- the access to the user gframework using a specialized implementation of:
`template <typename T> T& userFramework() const;`
A user defined implementations must be specialized somewhere in a compilation unit of the user framework, not in a header file. The framework object could host e.g. references for histogramming, logging, data access etc.
This way any experiment/user related data processing framework can exhibit its essential tools to `DDG4` actions.
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
A possible specialized implementations would look like the following:
```cpp
struct Gaudi {
IMessageSvc* msg;
IHistogramSvc* histos;
....
};
template<> Gaudi& Geant4Context::userFramework<Gaudi>() const {
UserFramework& fw = m_kernel->userFramework();
if ( fw.first && &typeid(T) == fw.second ) return *(T*)fw.first;
throw std::runtime_error("No user specified framework context present!");
}
```
To access the user framework then use the following call:
```cpp
Gaudi* fw = context->userFramework<Gaudi>();
```
of course after having initialized it:
```cpp
Gaudi * fw = ...;
GaudiKernel& kernel = ...;
kernel.setUserFramework(fw);
```
- `G4RunManager` is now a plugin. To enable user defined run managers in `DDG4`, the run manager is encapsulated in a `Geant4Action`. See `DDG4/plugins/Geant4RunManagers.cpp` how to implement such plugins. Currently there are to factories implemented:
- `G4RunManager` -> factory invokes the single threaded `G4RunManager`
- `G4MTRunManager `-> factory invokes the multi threaded `G4MTRunManager`
The factory names here are identical to the names of the native G4 classes.
* 2017-11-30 Marko Petric ([PR#268](https://github.com/aidasoft/dd4hep/pull/268))
- Introduce new DD4hep web-site: http://dd4hep.cern.ch/
- Page is automatically build from [this repo](https://gitlab.cern.ch/CLICdp/DetectorSoftware/DD4hep-website)
- Restructured `doc` folder and removed not doc related stuff to `etc`
- Fixes to Doxygen configuration
- create reference manual `make reference`
- Better integration of DD4hep tex documentation and cmake
- create manuals in PDF format `make pdf` create manuals in HTML format `make html`
- allow creation of documentation if dependencies are not present
- extended gitlab runners to automatically build documentation PDF and HTML and also reference manual and publish to web-site, thus ensuring always up to date information.
* 2018-02-14 Markus Frank ([PR#310](https://github.com/aidasoft/dd4hep/pull/310))
- Fix MC truth problem in DDG4
- Update of the `XML` reader to simplify externalization
* 2018-02-15 David Blyth ([PR#302](https://github.com/aidasoft/dd4hep/pull/302))
- Added "NOINSTALL" option to cmake build function dd4hep_add_library
* 2018-02-16 Andre Sailer ([PR#315](https://github.com/aidasoft/dd4hep/pull/315))
- DDG4::ExtraParticles: particles with too small life time were tagged as stable, now correctly marked unstable
- DDG4::Geant4InputHandling: pass all particles except strings, quarks and gluons to Geant4 to get completely consistent MCParticle History, fixes #307
- DDG4::Geant4PrimaryHandler: add property RejectPDGs
- DDG4::Geant4InputHandling: print geant4 primary particle chains if VERBOSE
* 2017-11-16 David Blyth ([PR#258](https://github.com/aidasoft/dd4hep/pull/258))
- Corrected `EcalBarrel` constructor after finding significant layer overlaps
- Corrected `CylindricalEndcapCalorimeter` factors of 2 in layer/slice thickness
- Corrected `ForwardDetector` factors of 2 in layer/slice thickness
* 2017-12-05 Marko Petric ([PR#278](https://github.com/aidasoft/dd4hep/pull/278))
- Remove `DD4HEP_USE_CXX11` and `DD4HEP_USE_CXX14` and use [CMake default way](https://cmake.org/cmake/help/v3.1/variable/CMAKE_CXX_STANDARD.html)`CMAKE_CXX_STANDARD` to define C++ standard
* 2017-12-05 Marko Petric ([PR#277](https://github.com/aidasoft/dd4hep/pull/277))
- Fix logic for ignoring warnings in dictionary creation
- Add `-Wno-overlength-strings` to all generated targets
* 2017-12-05 peterkostka ([PR#276](https://github.com/aidasoft/dd4hep/pull/276))
- Update of LHeD example - overlaps (problem with SubdetectorAssembly)
* 2017-12-01 Markus Frank ([PR#275](https://github.com/aidasoft/dd4hep/pull/275))
- Add Support to Export and Import GDML Data
- Allow extorts and imports of partial geometry trees with GDML. **This requires however a future version of ROOT**, since some changes were necessary in the ROOT GDML handlers. The code is commented out for the time being. The plugin implementation is in `DDCore/src/gdml/GdmlPlugin.cpp`
- Remove print statements from DDG4 scripts
- Replace prints with calls to the python logging utility. Hopefully this shall give at some point python3 compatibility.
- Update `G4Stepper` factories
- Add some missing steppers
* 2017-12-01 Marko Petric ([PR#274](https://github.com/aidasoft/dd4hep/pull/274))
- Revert `DDG4.py` Geant4 initialization parameters back to values specified in Geant4 (see discussion #266)
# v01-05
* 2017-11-10 Dan Protopopescu ([PR#262](https://github.com/aidaSoft/DD4hep/pull/262))
- Added createGearForSiD minimal plugin solely for use with LCCalibration
* 2017-11-10 Frank Gaede ([PR#261](https://github.com/aidaSoft/DD4hep/pull/261))
- add `Geant4::HitData::MonteCarloContrib::length` (step length)
- set in all CalorimeterSDActions
- write out it LCIO if `Geant4Sensitive::DETAILED_MODE` and LCIO_VERS>v02-10
* 2017-11-10 Whitney Armstrong ([PR#260](https://github.com/aidaSoft/DD4hep/pull/260))
- added electric and magnetic field functions that return the field value (taking the position as the only argument) directly in `dd4hep::OverlayedField`
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
# v01-04
* 2017-10-17 Markus Frank ([PR#248](https://github.com/aidasoft/DD4hep/pull/248))
### VolumeManager Implementation
A possibly important bug was fixed for the lookup of top level subdetectors in the `VolumeManager` by volume identifers of (sensitive) volumes. Due to a bug in the de-masking possible wrong top level subdetectors were returned. The default use cases typically do not use this call and hence should not be affected.
* 2017-10-17 Shaojun Lu ([PR#247](https://github.com/aidasoft/DD4hep/pull/247))
- Fix C++11 pointer error by adding include <memory> for 'unique_ptr' (GCC 4.9).
* 2017-10-13 Marko Petric ([PR#246](https://github.com/aidasoft/DD4hep/pull/246))
### DDCMS:
- Improve the CMS excercise. New examples etc.
- Support for simulation using DDG4 (at least partially - since not all subdetector volumes are accepted by Geant4).
### DDG4:
- Event reader returns `EVENT_READER_EOF` if `EOF` is detected rather than a generic IO error.
- Add generator status word to the `Geant4Particle` object. Remove the extension mechanism, which is very heavy to just add one integer.
### General:
- We need to distinguish the plugins using some namespace mechanism. I started to introduce the namespace separator `"_".` Hence all DD4hep plugins start with `DD4hep_<plugin>`. I hope this does not break everything. If it does, please notify me and we can undo.
* 2017-10-13 Whitney Armstrong ([PR#243](https://github.com/aidasoft/DD4hep/pull/243))
- Added helper function `getAttrOrDefault` (defined in `DDCore/include/XML/Helper.h`)
This function `getAttrOrDefault(xml::Element e, xml::XmlChar attr_name, T default_value)` will return the attribute name, converted to to type `T` but if it is not found it will return `default_value`. When building new detectors supplying this is useful for supplying default attribute values.
* 2017-10-19 Markus Frank ([PR#249](https://github.com/aidasoft/DD4hep/pull/249))
* Improve the CMS tracker visualisation
* Add DDG4 simulation example to DDCMS
* Add some plugins to add visualisation attributes if required (not for the compact description)
* 2017-11-01 David Blyth ([PR#254](https://github.com/aidasoft/DD4hep/pull/254))
- DDG4/python/DDG4.py: loadDDG4() changed to not raise exception if libraries are already loaded
* 2017-11-01 David Blyth ([PR#252](https://github.com/aidasoft/DD4hep/pull/252))
- Added requirement of Python 2 in cmake/FindPYTHON.cmake. This makes clear the requirement of Python 2, and resolves the issue where CMake tries to build with Python 3 in a system where both exist.
* 2017-11-07 Frank Gaede ([PR#256](https://github.com/aidasoft/DD4hep/pull/256))
- bug fix in `BitField64::operator[std::string]() `
- make uses of TString in DocumentHandler.cpp compatible with clang9 (on Mac)
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
# v01-03
* 2017-10-12 Frank Gaede ([PR#244](https://github.com/AIDASoft/DD4hep/pull/244))
- allow for unbounded surfaces in DDRec
- add new property `SurfaceType::Unbounded`
- if a surface is marked unbounded `Surface::insideBounds()` ignores the volume boundaries (and only checks the distance to the surface)
* 2017-09-19 Whitney Armstrong ([PR#233](https://github.com/AIDASoft/DD4hep/pull/233))
- Added helper `CellIDPositionConverter::cellDimensions(const CellID& cell)`
* 2017-10-09 Frank Gaede ([PR#242](https://github.com/AIDASoft/DD4hep/pull/242))
- improve `BitFieldCoder` class
- remove heap allocation of BitFieldElements
- add move constructors for efficient filling of vector
* 2017-09-29 Frank Gaede ([PR#238](https://github.com/AIDASoft/DD4hep/pull/238))
- add new threadsafe class `BitFieldCoder` as replacement for `BitField64`
- use as `const` everywhere
- re-implement `BitField64` using `BitFieldCoder`
- is thread safe if used locally
- can be instantiated from `const BitFieldCoder*`
* 2017-09-18 Markus Frank ([PR#234](https://github.com/AIDASoft/DD4hep/pull/234))
- Created a new example showing the CMS tracking detector
- Get CMS going with their evaluation. Added a package DDCMS with the conversion plugins for the silicon trackers and the corresponding conversion mechanism for their `xml` structure.
* 2017-09-18 Frank Gaede ([PR#232](https://github.com/AIDASoft/DD4hep/pull/232))
- fix reading of stdhep/lcio generator files with generator statuses not in [0,3]
- add `G4PARTICLE_GEN_BEAM` and `G4PARTICLE_GEN_OTHER` to DDG4
- `G4PARTICLE_GEN_BEAM` is generally agreed to be used for beam particles (HepMC, LCIO)
- all other status codes vary from generator to generator and we use OTHER
- for stdhep or lcio input the true generator status is preserved in the lcio output, regardless of its value
- create a vertex for every parent-less particle in LCIOEventReader
- this allows for example to read GuineaPig files ( non-prompt pair particles) or special user created files with non-prompt particles
- Resolves #101
* 2017-09-20 Markus Frank ([PR#235](https://github.com/AIDASoft/DD4hep/pull/235))
- A more complete version of the CMS tracker
- Enhanced the CMS tracker example to be more complete.
- Stopped at some point to convert all CMS algorithms. Hence, the tracker is not complete, but the remaining work looks to be purely mechanical.
* 2017-10-02 Frank Gaede ([PR#239](https://github.com/AIDASoft/DD4hep/pull/239))
- add cell sizes to printout of `LayeredCalorimeterData::layer`
- used in `dumpdetector -d`
* 2017-09-14 Frank Gaede ([PR#231](https://github.com/AIDASoft/DD4hep/pull/231))
- adapt LCIOEventReader for Pythia8 and Whizard2
- add all parent-less particles to outgoing vertex
- fixes #226 and closes #229
- also used for stdhep files
* 2017-09-07 Daniel Jeans ([PR#227](https://github.com/AIDASoft/DD4hep/pull/227))
- Fix calculation of cell position in `MegatileLayerGridXY`
- previously, returned position was the lower corner of the cell
- after this bug fix, it's the cell centre
* 2017-10-05 Frank Gaede ([PR#241](https://github.com/AIDASoft/DD4hep/pull/241))
- remove deprecated and unused classes from DDRec
* 2017-10-05 Frank Gaede ([PR#240](https://github.com/AIDASoft/DD4hep/pull/240))
- add `dd4hep::rec::FixedPadSizeTPCData.zMinReadout`
- needed to describe the cathode thickness
* 2017-08-21 Markus Frank ([PR#221](https://github.com/AIDASoft/DD4hep/pull/221))
- Document several classes in doxygen notation.
- Aim is that there are (at least) no class headers without docs.
- See [documentation](http://test-dd4hep.web.cern.ch/test-dd4hep/doxygen/html/annotated.html)
# v01-02
* 2017-07-14 Daniel Jeans ([PR#204](https://github.com/AIDAsoft/DD4hep/pull/204))
- add ncellsX/Y as a "parameter", allowing it to be set in compact description. This change is for easier use in the case of a MultiSegmentation. (Only a uniform segmentation can be defined in this way: for more complex cases, must set by driver.)
- change from array to std::vector to store ncells information
* 2017-07-17 Markus Frank ([PR#206](https://github.com/AIDAsoft/DD4hep/pull/206))
## Implement ROOT persistency mechanism for detector descriptions (continuation of AIDASoft/DD4hep#202).
Object extensions are now persistent.
This is however not for free: **it requires a dictionary for the extension itself and it requires a dictionary for the class holding the extension**. These are:
- `dd4hep::DetElement::DetElementExtension<IFACE,CONCRETE>` for `DetElement` extensions.
- `dd4hep::SimpleExtension<IFACE,CONCRETE>` for simple extension managed by the user framework (user calls explicitly destructor).
- `dd4hep::DeleteExtension<IFACE,CONCRETE>` for simple extension managed by dd4hep (dd4hep calls automatically destructor on hosting object destruction).
- `dd4hep::CopyDeleteExtension<IFACE,CONCRETE>`. As above, but these extensions support calling the copy constructor of the embedded object and hence allow to copy also the hosting objects.
Please note: to persistify these objects it was necessary to no longer use the type-info of the objects as an identifier, but rather a 64-bit-hash of the raw type-info-name. This relies that this name is identical across platforms. This typically is true for linux, but not enforced by any standard.
* 2017-08-11 Andre Sailer ([PR#213](https://github.com/AIDAsoft/DD4hep/pull/213))
- CMake:: dd4hep_generate_rootmap: use CMAKE_INSTALL_LIBDIR if it is set. If the macro is called from other libraries this variable might be set and should be used for consistency. Fixes #212
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
* 2017-07-13 Markus Frank ([PR#202](https://github.com/AIDAsoft/DD4hep/pull/202))
## Implement ROOT persistency mechanism for detector descriptions
The following commits allow to save and restore Detector objects (ie. the full detector description) to/from ROOT. Most changes affected the usage of void pointers.
It is **NOT** possible to:
* save object extensions. Another usage of void pointers and type-info objects, which both cannot be saved.
* save callback objects. Callbacks store in memory pointers to member functions. These depend on the loading of libraries at run-time and hence may differ from application to application.
* save conditions slices. This shall be a futute extension. There should be no fundamental problem doing so - it was simply not yet done.
In the example area a new slot call "Persistency" was created with various tests:
* Save and restore simple conditions
* Save and restore the MiniTel detector (`examples/ClientTests/compact/MiniTel.xml`)
* Save and restore the CLICSiD detector (`examples/CLICSiD/compact/compact.xml`)
The detector examples also have a set of tests associated to check the validity of the restored information.
## Integrate `DDSegmentatation` into `DDCore`
As a first step to start the cleanup of `DDSegmentation` the code was integrated into `DDCore`. For backwards compatibility a dummy library `libDDSegmentation.so` is kept, so that client cmake files directly referring `DDSegmentation` still work. **This tough is only a temporary measure and users should remove references to the DDSegmentation library.** Include files can be accessed as before. These are part of the `DDCore` include directory.
* 2017-08-15 Yorgos Voutsinas ([PR#216](https://github.com/AIDAsoft/DD4hep/pull/216))
* Adding variable "nocore" for beam pipe (with default value = false) In case the variable appears in the BP xml file as "true", the BP sections will have no core of beam material, in order that someone might add various BP walls made of different materials while avoiding G4 overlaps. Example of use:
```xml
<detector name="BeBeampipe" type="DD4hep_Beampipe_o1_v01" insideTrackingVolume="true" nocore="true" vis="BeamPipeVis">
```
* 2017-08-15 Jan Strube ([PR#215](https://github.com/AIDAsoft/DD4hep/pull/215))
- LCIOEventReader: adding parameter for the name of the MCParticle collection: `MCParticleCollectionName`
* 2017-08-14 Markus Frank ([PR#217](https://github.com/AIDAsoft/DD4hep/pull/217))
## Enhance ROOT Detector Description Persistency
Conditions slices from the DD4hep conditions store can now be saved to ROOT files ans named objects. Conditions persistency examples are added to the `examples/Conditions` section.
The examples are derived from the Telescope and CLICSiD example:
- `Conditions_Telescope_root_save`
- `Conditions_Telescope_root_load_iov`
- `Conditions_Telescope_root_load_pool`
- `Conditions_CLICSiD_root_save_LONGTEST`
- `Conditions_CLICSiD_root_load_iov_LONGTEST`
- `Conditions_CLICSiD_root_load_usr_LONGTEST`
- `Conditions_CLICSiD_root_load_cond_LONGTEST`
## Fix Handle Problem when Accessing Materials from Volumes
A cast problem was not spotted in the last commit, which manifested itself in accessing invalid materials from volumes. This commit resolves #211 , reported by @jhrdinka.
A set of tests checks this behaviour in the ClientTests: `ClientTests_volume_materials_<text>`, where the volume tree is scanned and for all sensitive volumes and access the corresponding `materials/TGeoMedium` entities from the volume object.
* 2017-07-18 Shaojun Lu ([PR#208](https://github.com/AIDAsoft/DD4hep/pull/208))
- added "#include <memory>" for the smart pointers to DD4hepRootPersistency.cpp
* 2017-07-19 Markus Frank ([PR#209](https://github.com/AIDAsoft/DD4hep/pull/209))
- Implement `dd4hep::Tube` using `TGeoTubeSeg` (See also Issue AIDASoft/DD4hep#203 for details)
* 2017-07-21 Markus Frank ([PR#210](https://github.com/AIDAsoft/DD4hep/pull/210))
## Implement ROOT persistency mechanism for the conditions
Conditions pools can now be made persistent provided all the dictionaries for the payload objects are provided. A new class `ConditionsRootPersistency` allows to save and re-load conditions pools to/from a ROOT file. Such pools can either be:
- Simple `ConditionsPool` objects
- The entire `IOV` indexed pool set (class `ConditionsIOVPool`) or
- A the pool used by a `ConditionsSlice` (class `UserPool`).
- A std::vector<Condition> which belong all to the same IOV
In any case the restoration of the saved conditions is performed through the `ConditionsManager` interface in order to ensure proper management of the added condition objects.
Some example plugin tasks were added in examples/Conditions:
- `DD4hep_ConditionExample_save` to save conditions to a ROOT file.
- `DD4hep_ConditionExample_load` to restore conditions from file.
## Split of dictionary files
The ROOT dictionary creation in `DDCore` was getting increasingly large. Now the ROOT dictionaries are created in several files, what firstly allows them to be produced in parallel and secondly eases the compilation due to smaller generated file sizes.
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
# v01-01
* 2017-07-06 Markus Frank ([PR#201](https://github.com/AIDASoft/DD4hep/pull/201))
## DDCore: Changes to the VolumeManager interface
Recent descrepancies showed that the call to lookup a placement
from the volume manager may have an ambiguous meaning:
It may (as used until now) be the placement of thge closest
detector element - a functionality used by various tests
or be the placement of the sensitive volume itself.
So far, since each sensitive volume in the DD4hep tests
is represented by a DetElement structure, both
approaches returned the same placed volume.
Since there is the possibility to have sensitive volumes, which are not
directly connected to a single DetElement structure, this call was
split to resolve this ambiguity:
/// Lookup a physical (placed) volume identified by its 64 bit hit ID
PlacedVolume lookupVolumePlacement(VolumeID volume_id) const;
/// Lookup a physical (placed) volume of the detector element
/// containing a volume identified by its 64 bit hit ID
PlacedVolume lookupDetElementPlacement(VolumeID volume_id) const;
* 2017-07-06 Andre Sailer ([PR#200](https://github.com/AIDASoft/DD4hep/pull/200))
- Now will give a warning if multiple entities (e.g., constants) of the same name are defined in the XML
# v01-00-01
* 2017-07-04 Frank Gaede ([PR#199](https://github.com/AIDASoft/DD4hep/pull/199))
- bug fix for VolumeManagerContext::toElement() and VolumeManagerContext::placement()
- set flag=true in VolumeManager_Populator::add_entry when
a ContextExtension is needed, i.e. sensitive volume is not DetElement's volume
- fixes problems in CellIDPositionConverter
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
# v01-00
* 2017-06-22 Marko Petric ([PR#192](https://github.com/AIDASoft/DD4hep/pull/192))
- Move `AlignDet_Telescope_readback_xml` to later in the pipeline since it depends on the output of `AlignDet_Telescope_write_xml`
* 2017-06-22 Andre Sailer ([PR#191](https://github.com/AIDASoft/DD4hep/pull/191))
- Surface: fix memory leak of transformation matrix
- XML::Layering: fix memory leak of contained layers in the object
* 2017-06-23 Andre Sailer ([PR#197](https://github.com/AIDASoft/DD4hep/pull/197))
- Fix memory leaks for Tube, EllipticalTube and Polyhedron
* 2017-06-23 Andre Sailer ([PR#196](https://github.com/AIDASoft/DD4hep/pull/196))
- CMake: add `Project( DD4hep )`, needed to get the correct CMAKE_CXX_COMPILER_ID on macs due to CMP0025 (cmake policy)
- CMake: fix treatment of linker flags, they are now properly set for Linux and Macs to error when undefined functions are encountered at link time
- CMake: fix elif --> elseif when checking threading libraries
* 2017-06-23 Frank Gaede ([PR#195](https://github.com/AIDASoft/DD4hep/pull/195))
- fix crash in `dd4hep::rec::Surface` after changes in Handle assignment (PR #193)
- fix use of deprecated `dd4hep::rec::MaterialManager` c'tor in Surface
* 2017-06-20 Frank Gaede ([PR#185](https://github.com/AIDASoft/DD4hep/pull/185))
- bug fix in material utilities
- call `MaterialManager( Volume v)` with `Detector.world().volume()`
* 2017-06-20 Marko Petric ([PR#184](https://github.com/AIDASoft/DD4hep/pull/184))
- Reinstate the full test-suite on Travis
* 2017-06-20 Markus Frank ([PR#183](https://github.com/AIDASoft/DD4hep/pull/183))
- Unify header guards in DDCore
- Add header to steer ignoring warnings of rootcling generated dictionaries.
* 2017-06-20 Frank Gaede ([PR#182](https://github.com/AIDASoft/DD4hep/pull/182))
- cleanup of namespace `dd4hep::rec`
- remove obsolete bwd compatibility for `DD4hep::DDRec`
- re-introduce `[deprecated]` warnings for unmaintained classes in DDRec/API
- re-fix deprecated c'tor for `MaterialManager` in material utilities
* 2017-06-20 Markus Frank ([PR#181](https://github.com/AIDASoft/DD4hep/pull/181))
- Attack many warnings from:
- `-Wshadow`
- `-Winclude-hygiene`
- `-Woverlength-strings` (int cling dictionaries)
* 2017-06-20 Markus Frank ([PR#179](https://github.com/AIDASoft/DD4hep/pull/179))
- Remove a bunch of shadow warnings and include-hygiene warnings.
* 2017-06-21 Marko Petric ([PR#169](https://github.com/AIDASoft/DD4hep/pull/169))
- Make boost explicit requirement for DD4hep and drop DD4HEP_USE_BOOST
* 2017-06-21 David Blyth ([PR#168](https://github.com/AIDASoft/DD4hep/pull/168))
- Added environment helper scripts `thisdd4hep_only.(c)sh` that only set up variables for DD4hep and not for dependencies.
* 2017-06-19 Markus Frank ([PR#178](https://github.com/AIDASoft/DD4hep/pull/178))
- Update documentation after reorganization of namespaces (put back previous docs).
* 2017-06-19 Markus Frank ([PR#175](https://github.com/AIDASoft/DD4hep/pull/175))
## DD4hep namespace reorganization
Re-organize namespaces according to the decisions of the DD4hep developers meeting from 16th June we have decided:
1. all namespaces will be lower case and shorter
* rename namespace `DD4hep` -> `dd4hep`
* rename namespace `DD4hep::DDRec` -> `dd4hep::rec`
* rename namespace `DD4hep::Simulation` -> `dd4hep::sim`
* rename namespace `XML` -> `xml` and `JSON` -> `json`
* rename all other namespaces according to this pattern
2. The namespace `DD4hep::Geometry::` will be incorporated into `dd4hep::`
3. All utilities will be moved `dd4hep::detail`
4. `LCDD` will be renamed to `Detector` and current `Detector.h` will be renamed to `DetElement.h`
8. Examine if `DDSegmentation` can be incorporated into `DDCore` and make it volume aware
* If this this cannot be achieved in whole place `DDSegmentation` into the right namespace
## DDParsers
DDParsers are now a separate package. This does not make it yet standalone,
but it is at the same level as e.g. DDSeqmentation. Any librarian is
encouraged to externialize it fully.
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
# v00-24
* 2017-06-08 Markus Frank ([PR#160](https://github.com/AIDASoft/DD4hep/pull/160))
* Add a new class `AlignmentsNominalMap`, which behaves like a `ConditionsMap` and handles alignment entries.
* The `AlignmentsNominalMap` is not a conditions cache per-se. This implementation behaves like a `conditionsmap`, but it shall not return real conditions to the user, but rather return the default alignment objects (which at the basis are conditions as well) to the user. These alignments are taken from the `DetElement` in question `Alignment DetElement::nominal()`.
* The basic idea is to enable users to write code "as if" there would be conditions present. This is important to ease in the lifetime of the experiment the step from the design phase (where obviously no conditions are taken into account) to a more mature phase, where alignment studies etc. actually are part of the "bread and butter work".
* Added a corresponding example in examples/AlignDet:
```
$> geoPluginRun -volmgr -destroy -plugin DD4hep_AlignmentExample_nominal \
-input file:${DD4hep_DIR}/examples/AlignDet/compact/Telescope.xml
```
* Access the DetElement nominal conditions using the `AlignmentNominalMap`.
Any use of DDCond is inhibited.
1) We use the generic printer, which during the detector element scan accesses the conditions map.
2) We use a delta scanner to extract the nominal deltas from the `DetElement`'s nominal alignments
3) We use a `ConditionsTreeMap` to perform the alignments re-computation.
* 2017-06-08 Markus Frank ([PR#159](https://github.com/AIDASoft/DD4hep/pull/159))
# Implementation of the decisions made at the Conditions mini-workshop
## Access mechanisms of DD4hep conditions for utilities
Access to conditions is solely supported using the interface class DDCore/ConditionsMap.
* All utilities must use this interface.
* Any concrete implementation using conditions/alignment utilities must implement this interface
* Basic implementation using STL `map`, `multimap` and `unordered_map` are provided.
* A special no-op implementation of this interface shall be provided to access "default" alignment conditions. This implementation shall fall-back internally to the `DetElement::nominal()` alignment.
Known clients: `VolumeManager` (hence: DDG4, DDRec, etc.)
Though this sounds like a trivial change, the consequences concern the entire conditions
and alignment handling. This interface decouples entirely the core part of DD4hep
from the conditions cache handling and the alignment handling.
Based on this interface most utilities used to handle conditions, detectors scans
to visit `DetElement` related condition sets, alignment and conditions printers etc.
For details, please see:
```
DDCore/include/DD4hep/AlignmentsPrinter.h
DDCore/include/DD4hep/AlignmentsProcessor.h
DDCore/include/DD4hep/ConditionsPrinter.h
DDCore/include/DD4hep/ConditionsProcessor.h
DDCore/include/DD4hep/DetectorProcessor.h
```
## Naming conventions for detector conditions
* Condition are logically attached to DetElements
* Condition names are: `DetElement.path()+"#"+condition-name`
Example: `/world/LHCb/DownstreamRegion/Muon/M5/M5ASide/R3ASide/Cham046#alignment`
* Condition keys are a `int64` compound of two `int32`:
```cpp
union {
int64 key;
struct {
int32 item_key;
int32 det_key; // Needs to be the high word to have a properly ordered map
} values;
};
det_key = hash32(DetElement.path())
item_key = hash32(condition-name)
```
**Condition keys must be unique throughout the detector description.**
* Alignment conditions naming conventions:
* Alignment-delta conditions are called `alignment_delta`.
* Fully qualified alignment conditions are called `alignment`.
DD4hep provided alignment utilities rely on this convention.
* Other conditions can be named freely.
## Important Notice
The **Alignment conditions naming conventions** are already used by several utilities involving alignments. If you plan to use these, do not freely ignore these recommendations. When the naming conventions are ignored, these utilities shall not work.
## Updates to DDCond
DDCond implements a working conditions cache following the design criteria sketched above. The `conditionsSlice` object implements (though by forwarding to the `ConditionsUserPool`) a `ConditionsMap` interface.
The `DD4hep_ConditionsMapUserPool` plugin implements in a very efficient way this interface using an ordered map. Using the above described key definition, this implementation allows very efficient scans of conditions/alignments etc. of individual detector elements, since conditions which belong to the same detector element are contiguous.
## Alignment handling/computations
Using the conditions maps, the computation of (mis-)alignment data from deltas
is no longer bound to the conditions mechanisms.
A special utility called `AlignmentsCalculator` is put in place (see `DDCore/include/DD4hep/AlignmentsCalculator.h`) to facilitate the computation of a coherent set of alignments given a set of delta-parameters. This mechanism is much simpler, easier to understand and far less code intensive than the previously designed callback mechanism where alignments are obtained using conditions derivation.
## Update of the existing examples
The example sets in DDDB, `examples/Conditions, examples/AlignDet`, `examples/DDDB` were updated according to the changed mechanism of accessing conditions. Here we can see the real benefits of the new approach: keeping same functionality, the examples became way off simpler. Simply count the number of lines of code.
* 2017-06-17 Marko Petric ([PR#170](https://github.com/AIDASoft/DD4hep/pull/170))
- Add clang flag to warn about using namespace directive in global context in header
* 2017-06-17 Frank Gaede ([PR#167](https://github.com/AIDASoft/DD4hep/pull/167))
- renamed the namespace DD4hep::DDRec to dd4hep::rec (see #166)
- provide backward compatibility to outside world for now
- moved the interfaces in namespace DDSurfaces to dd4hep::rec
- provide backward compatibility to outside world for now
* 2017-06-15 Frank Gaede ([PR#165](https://github.com/AIDASoft/DD4hep/pull/165))
- started to cleanup DDRec
- don't use LCDD::getInstance() in SurfaceManager and SurfaceHelper
- deprecate unused(?) classes in DDRec/API and DDRec/Extensions
- deprecate MaterialManager() using LCDD::getInstance()
* 2017-05-12 Marko Petric ([PR#152](https://github.com/aidasoft/DD4hep/pull/152))
- Update CI to GCC 7.1 and LLVM 4.0 and include Geant4 10.3
* 2017-05-22 Frank Gaede ([PR#154](https://github.com/aidasoft/DD4hep/pull/154))
- protect against NANs in Guineapig pairs files in Geant4EventReaderGuineaPig
- make INFO printout more consistent with dd4hep style