![]() |
KaliVeda
Toolkit for HIC analysis
|
Calculate elastic scattering spectra in specific detectors of a multidetector array ,.
KVElasticScatter can be used to simulate elastic and inelastic scattering of projectile nuclei in experimental targets, and calculate the energy spectra of the scattered projectile- or target-like nuclei in all detectors on a given trajectory through the array.
To begin, build the geometry of the multidetector array for a given dataset:
Then initialise a KVElasticScatter with the required run number which will be used to define the default kinematics and the target properties (for energy loss calculations before and after the scattering occurs), e.g.
To define the trajectory for the scattering, give the name of a detector in the array:
All particles in the simulation will be scattered into random \(\theta,\phi\) angles corresponding to the direction of these detectors.
Call the Print() method to see the current definitions that will be used by the simulation:
If all is correct, run the simulation for a given number of events by calling:
Afterwards, you can retrieve the histograms of energy loss in each of the detectors on the chosen trajectory using the label (not the type) of each detector:
etc. etc.
In the previous example with a carbon beam and polyethylene target, you can see that of the two possible target nuclei in this compound target, it is the protons which are used by default: this has been defined for the systemm corresponding to the chosen run in the database. If you want to change the target nucleus to use for the kinematics, for example to scatter on carbon nuclei, do
You can call the Print() method at any moment to check the updated details of the simulation:
If the physical target for the chosen run has several layers, by default the scattering will take place in different layers from one event to the next. In this case a different target nucleus can be used for each scattering, depending on the interaction point in the target, if you call:
As you can see above, by default the spectra of energy losses in the different detectors are calculated for the outgoing projectile-like nuclei: to change this, i.e. to calculate for outgoing target-like nuclei, do
As also indicated above, in case there are 2 kinematic solutions for the chosen kinematics and lab angle (detector), by default the high-energy solution corresponding to the most forward centre-of-mass angle solution is used. To change, you can do either
to use the solution for backward centre-of-mass angles, or
to randomly choose, event by event, one of the two solutions according to the ratio of the corresponding (Rutherford scattering) cross-sections.
When multilayer targets are used, the user can restrict the scattering calculation to one specific layer. Energy losses before and after the scattering in the other layers of the target are of course still taken into account. To set the part of the target where scattering takes place use e.g.
with the name of the layer you require (this is normally the name of the element making up the layer - see KVTarget for details).
Calculations can also be performed for inelastic scattering e.g. when either the outgoing projectile- or target-like nucleus is left in an excited state (N.B. we still use the Rutherford elastic scattering cross-section for weighting the energy loss distributions). In order to do this, call
with the excitation energy after inelastic scattering.
Definition at line 190 of file KVElasticScatter.h.
#include <KVElasticScatter.h>

Public Member Functions | |
| KVElasticScatter (Int_t run) | |
| Default constructor. More... | |
| virtual | ~ KVElasticScatter () |
| void | CalculateScattering (Int_t N) |
| Perform scattering 'N' times. More... | |
| TH1F * | GetDepth () |
| Return pointer to histogram of 'depth' of scattering point in target (in mg/cm2) More... | |
| Int_t | GetEbinning (void) |
| Returns the number of bins of the GetEnergy histogram. More... | |
| TH1F * | GetEnergy () |
| Return pointer to energy loss histogram for chosen detector (in MeV) More... | |
| TH1F * | GetEnergy (const Char_t *label) |
| Energy loss in detector with given 'label' through which scattered particle passes. More... | |
| TH1F * | GetEnergy (Int_t index) |
| auto | GetKinematics () |
| Int_t | GetNDets () const |
| Returns the number of detectors crossed by the scattered particle. More... | |
| void | GetTargetNucleusFromTargetLayer (Bool_t yes=kTRUE) |
| TH1F * | GetTheta () |
| Return pointer to polar angle distribution of scattered particle (in degrees) More... | |
| void | Print () const |
| Print details of calculation to be performed. More... | |
| void | SetBeamDirection (const TVector3 &beam_dir) |
| void | SetDetector (const Char_t *det) |
| void | SetEbinning (Int_t nbins) |
| void | SetExcitation (Double_t ex) |
| void | SetKinematicSolution (KV2Body::kinematic_solution ik) |
| void | SetNucleusOfInterest (KV2Body::nucleus_of_interest noi) |
| void | SetOutGoingProjectileLike (const KVNucleus &opl) |
| void | SetTargetNucleusForScattering (const KVNucleus &tn) |
| void | SetTargetScatteringLayer (const Char_t *name) |
Private Member Functions | |
| virtual void | detect_particle_fill_histograms (KVNucleus *ejectile, double theta, double phi, double xsec) |
| virtual void | end_of_run () |
| virtual std::pair< double, double > | get_random_angles_for_scattering (const KV2Body &scattering_kinematics) |
| virtual bool | initial_checks_and_reset () |
| virtual void | reset_before_new_scattering () |
| void | SetRun (Int_t run) |
Private Attributes | |
| TList | fAlignedDetectors |
| all aligned detectors More... | |
| Double_t | fAtomicDensity |
| number of atoms per barn (10^-24 cm2) in target More... | |
| TVector3 | fBeamDirection {0, 0, 1} |
| Int_t | fBinE = 100 |
| TH1F * | fDepth = nullptr |
| KVDetector * | fDetector = nullptr |
| KVNameValueList | fDetInd |
| detector type-index association More... | |
| Double_t | fExx = 0.0 |
| Bool_t | fGetTargFromLay = false |
| TObjArray | fHistos |
| energy loss histograms for all hit detectors More... | |
| Int_t | fIntLayer = 0 |
| KV2Body * | fKinematics = nullptr |
| KV2Body::kinematic_solution | fKineSol = KV2Body::kinematic_solution::high_E_branch |
| Bool_t | fMultiLayer = false |
| Int_t | fNDets |
| number of aligned detectors More... | |
| Double_t | fNtirages |
| KV2Body::nucleus_of_interest | fNucleusOfInterest = KV2Body::nucleus_of_interest::projectile_like |
| std::optional< KVNucleus > | fOutgoingPL |
| optional different nucleus for outgoing projectile-like More... | |
| KVTarget * | fTarget = nullptr |
| std::optional< KVNucleus > | fTargetNuc |
| optional different target nucleus for scattering More... | |
| TH1F * | fTheta = nullptr |
| KVElasticScatter::KVElasticScatter | ( | Int_t | run | ) |
Default constructor.
Definition at line 28 of file KVElasticScatter.cpp.
|
virtual |
Perform scattering 'N' times.
Definition at line 244 of file KVElasticScatter.cpp.
|
privatevirtual |
Reimplemented in KVElasticCountRates.
Definition at line 224 of file KVElasticScatter.cpp.
|
inlineprivatevirtual |
Reimplemented in KVElasticCountRates.
Definition at line 220 of file KVElasticScatter.h.
|
privatevirtual |
Reimplemented in KVElasticCountRates.
Definition at line 199 of file KVElasticScatter.cpp.
|
inline |
Return pointer to histogram of 'depth' of scattering point in target (in mg/cm2)
Definition at line 293 of file KVElasticScatter.h.
Returns the number of bins of the GetEnergy histogram.
Definition at line 315 of file KVElasticScatter.h.
|
inline |
Return pointer to energy loss histogram for chosen detector (in MeV)
Definition at line 298 of file KVElasticScatter.h.
Energy loss in detector with given 'label' through which scattered particle passes.
Definition at line 409 of file KVElasticScatter.cpp.
Energy loss in any detector through which scattered particle passes.
The index corresponds to the order in which detectors are crossed by the particle, beginning with 0 for the first detector, and ending with (GetNDets()-1)
Definition at line 426 of file KVElasticScatter.cpp.
|
inline |
Definition at line 319 of file KVElasticScatter.h.
|
inline |
Returns the number of detectors crossed by the scattered particle.
Definition at line 310 of file KVElasticScatter.h.
Call with yes=kTRUE if you have a multilayer target with random sampling of interaction point, and you want to calculate the scattering from the different target nucleus in each layer.
Note: this will only work if all layers of the target are single elements (i.e. a single type of nucleus in each layer), not compounds.
Definition at line 275 of file KVElasticScatter.h.
|
inline |
Return pointer to polar angle distribution of scattered particle (in degrees)
Definition at line 303 of file KVElasticScatter.h.
|
privatevirtual |
Reimplemented in KVElasticCountRates.
Definition at line 177 of file KVElasticScatter.cpp.
Print details of calculation to be performed.
Definition at line 441 of file KVElasticScatter.cpp.
|
inlineprivatevirtual |
Reimplemented in KVElasticCountRates.
Definition at line 217 of file KVElasticScatter.h.
Use to change alignment of beam (default is {0,0,1})
Definition at line 226 of file KVElasticScatter.h.
Give name of detector towards which elastic scattering will occur.
Definition at line 91 of file KVElasticScatter.cpp.
Set binning of the GetEnergy histogram Default value is 500
Definition at line 166 of file KVElasticScatter.cpp.
To simulate inelastic scattering use this method to set the total excitation energy (in MeV).
This value will be used for all subsequent calculations.
Use SetExcitation(0) to return to elastic scattering.
Definition at line 260 of file KVElasticScatter.h.
|
inline |
Except for projectile-like nuclei in direct kinematics, for almost every other case the kinematics of outgoing nuclei is double-valued, i.e. to each c.m. scattering angle corresponds 2 lab scattering angles, with different energies.
The case with the smallest (most forward) c.m./lab angles is referred to as the 'high energy branch', while the solution at more backward angles has lower energies.
By default we use the high energy branch; you can choose the low energy here.
Definition at line 244 of file KVElasticScatter.h.
|
inline |
Define the the nucleus of interest in the outgoing channel of the reaction
Note that the identity of the outgoing PROJECTILE_LIKE can be changed with method SetOutgoingProjectileLike() which will of course change TARGET_LIKE to conserve mass and charge.
Definition at line 232 of file KVElasticScatter.h.
Definition at line 269 of file KVElasticScatter.h.
Set beam, detector parameters, target, etc. for run
The default reaction kinematics is that of the KVDBSystem associated to the run.
The default scattering position in the target is random.
Definition at line 63 of file KVElasticScatter.cpp.
call this method to change the default target nucleus of the kinematics for the run
Definition at line 284 of file KVElasticScatter.h.
For multilayer targets, use this method to choose in which layer the scattering will take place.
If name="", reset any previous choice so that scattering can take place in any layer
Definition at line 141 of file KVElasticScatter.cpp.
|
private |
all aligned detectors
Definition at line 197 of file KVElasticScatter.h.
|
private |
number of atoms per barn (10^-24 cm2) in target
Definition at line 215 of file KVElasticScatter.h.
|
private |
Definition at line 202 of file KVElasticScatter.h.
|
private |
Definition at line 194 of file KVElasticScatter.h.
|
private |
Definition at line 192 of file KVElasticScatter.h.
|
private |
Definition at line 196 of file KVElasticScatter.h.
|
private |
detector type-index association
Definition at line 205 of file KVElasticScatter.h.
|
private |
Definition at line 206 of file KVElasticScatter.h.
|
private |
Definition at line 201 of file KVElasticScatter.h.
|
private |
energy loss histograms for all hit detectors
Definition at line 204 of file KVElasticScatter.h.
|
private |
Definition at line 203 of file KVElasticScatter.h.
|
private |
Definition at line 195 of file KVElasticScatter.h.
|
private |
Definition at line 211 of file KVElasticScatter.h.
|
private |
Definition at line 200 of file KVElasticScatter.h.
|
private |
number of aligned detectors
Definition at line 198 of file KVElasticScatter.h.
|
private |
Definition at line 214 of file KVElasticScatter.h.
|
private |
Definition at line 210 of file KVElasticScatter.h.
|
private |
optional different nucleus for outgoing projectile-like
Definition at line 207 of file KVElasticScatter.h.
|
private |
Definition at line 199 of file KVElasticScatter.h.
|
private |
optional different target nucleus for scattering
Definition at line 208 of file KVElasticScatter.h.
|
private |
Definition at line 193 of file KVElasticScatter.h.