KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVDBSystem.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * *
3  * This program is free software; you can redistribute it and/or modify *
4  * it under the terms of the GNU General Public License as published by *
5  * the Free Software Foundation; either version 2 of the License, or *
6  * (at your option) any later version. *
7  * *
8  ***************************************************************************/
9 #include "KVDBSystem.h"
10 #include "KVDBRun.h"
11 #include "KV2Body.h"
12 #include "KVNumberList.h"
13 #include "KVUnits.h"
14 #include "TROOT.h"
15 #include "KVDBKey.h"
16 #include "KVDBTable.h"
17 #include <KVUnownedList.h>
18 
19 using namespace std;
20 
22 //___________________________________________________________________________
23 
25 
27 {
28  fZtarget = fAtarget = fZbeam = fAbeam = 0;
29  fEbeam = 0.;
30  fCinema = 0;
31  fTarget = 0;
32  fRunlist = 0;
33  fRuns = 0;
34 }
35 
36 
37 
39 
41  "Physical System")
42 {
43  fZtarget = fAtarget = fZbeam = fAbeam = 0;
44  fEbeam = 0.;
45  fCinema = 0;
46  fTarget = 0;
47  KVDBKey* dbk = AddKey("Runs", "List of Runs");
48  dbk->SetUniqueStatus(kTRUE);
49  fRunlist = 0;
50  fRuns = 0;
51 }
52 
53 
54 
57 
58 KVDBSystem::~KVDBSystem()
59 {
60  //Delete kinematics, target and associated runlist if they exist
61  if (fCinema) {
62  delete fCinema;
63  fCinema = 0;
64  }
65  delete fTarget;
66  if (fRunlist)
67  delete fRunlist;
68 }
69 
70 
71 
72 
79 
81 {
82  // Create (if it doesn't already exist) and return pointer to a KV2Body object initialised
83  // with the entrance channel corresponding to this system. Use this to obtain information
84  // such as the recoil velocity of the CM, available energy, etc. (see KV2Body).
85  //
86  // If no projectile and/or target are defined for the system, we return 0x0.
87 
88  if (GetZbeam()*GetZtarget() == 0) return nullptr;
89 
90  if (!fCinema) {
91  fCinema = new KV2Body();
96  }
97  return fCinema;
98 }
99 
100 
101 
104 
106 {
107  //retourne kTRUE, si le systeme est une collision ie projectile+cible
108  return (GetZbeam() * GetZtarget() != 0);
109 
110 }
111 
112 
113 
114 
118 
120 {
121  //Returns product of atomic number and velocity component parallel to beam axis of projectile nucleus in laboratory frame
122  //Units are cm/ns (velocity units)
123  KV2Body* kin = const_cast < KVDBSystem* >(this)->GetKinematics();
124  if (!kin) return 0.;
125  return (fZbeam * kin->GetNucleus(1)->GetVpar());
126 }
127 
128 
129 
130 
134 
136 {
137  //Returns momentum component parallel to beam axis of projectile nucleus in laboratory frame
138  //Units are MeV/c
139  KV2Body* kin = const_cast < KVDBSystem* >(this)->GetKinematics();
140  if (!kin) return 0.;
141  return (kin->GetNucleus(1)->GetMomentum().Z());
142 }
143 
144 
145 
146 
150 
152 {
153  //Returns total (mass + kinetic) energy of entrance channel corresponding to system
154  //Units are MeV
155  KV2Body* kin = const_cast < KVDBSystem* >(this)->GetKinematics();
156  if (!kin) return 0.;
157  return (kin->GetNucleus(1)->E() + kin->GetNucleus(2)->E());
158 }
159 
160 
161 
162 
166 
168 {
169  //Returns total available (CM) kinetic energy of entrance channel corresponding to system
170  //Units are MeV
171  KV2Body* kin = const_cast < KVDBSystem* >(this)->GetKinematics();
172  if (!kin) return 0.;
173  return (kin->GetCMEnergy());
174 }
175 
176 
177 
178 
184 
186 {
187  //Function used to sort lists of systems.
188  //Systems are sorted according to the number of the first run in the
189  //(sorted) list of runs associated to the system.
190  //Systems with lower first run numbers appear earlier in the list.
191 
192  if (!GetRuns())
193  return 0;
194  KVDBSystem* other_sys =
195  dynamic_cast < KVDBSystem* >(const_cast < TObject* >(obj));
196  if (!other_sys)
197  return 0;
198  KVList* other_runs;
199  if (!(other_runs = other_sys->GetRuns()))
200  return 0;
201  Int_t first = ((KVDBRecord*) fRunlist->At(0))->GetNumber();
202  Int_t other_first = ((KVDBRecord*) other_runs->At(0))->GetNumber();
203  return (first == other_first ? 0 : (other_first > first ? -1 : 1));
204 }
205 
206 
207 
208 
212 
214 {
215  //"translate" the KVRList returned by GetLinks into a standard
216  //TList which can then be sorted (Sort() is not implemented for TRefArray).
217  KVRList* _rlist = GetLinks("Runs");
218  TIter nxt(_rlist);
219  KVDBRun* db;
221  fRunlist = new KVUnownedList; //will be deleted with object
222  while ((db = (KVDBRun*) nxt()))
223  fRunlist->Add(db);
224  fRunlist->Sort();
225  return fRunlist;
226 }
227 
228 
229 
230 
233 
235 {
236  //Fills the KVNumberList object with the list of all run numbers associated with this system
237  list.Clear();
238  TIter next(GetRuns());
239  KVDBRun* run;
240  while ((run = (KVDBRun*)next())) {
241  list.Add(run->GetNumber());
242  }
243 }
244 
245 
246 
247 
258 
259 void KVDBSystem::Save(ostream& f) const
260 {
261  //Write informations on system in the format used in Systems.dat files:
262  //
263  //+155Gd + 238U 36 MeV/A '+' followed by name of system
264  //155 64 238 92 36.0 Aproj Zproj Atarg Ztarg Ebeam
265  //Target: 3 0.0 target with 3 layers, angle 0 degrees
266  //C 0.02 1st layer : carbon, 20 g/cm2
267  //238U 0.1 2nd layer : uranium-238, 100 g/cm2
268  //C 0.023 3rd layer : carbon, 23 g/cm2
269  //Runs: 770-804 list of runs in KVNumberList format
270 
271  f << "+" << GetName() << endl;
272  if (fZbeam) f << fAbeam << " " << fZbeam << " " << fAtarget << " " << fZtarget << " " << fEbeam << endl;
273  if (fTarget) {
274  f << "Target: " << fTarget->NumberOfLayers() << " " << fTarget->GetAngleToBeam() << endl;
275  TIter next(fTarget->GetLayers());
276  KVMaterial* lay;
277  while ((lay = (KVMaterial*)next())) {
278  if (lay->IsIsotopic()) f << Form("%d%s", (Int_t)lay->GetMass(), lay->GetType());
279  else f << lay->GetType();
280  f << " " << lay->GetAreaDensity() / KVUnits::mg << endl;
281  }
282  }
283  KVNumberList runlist;
284  GetRunList(runlist);
285  f << "Runs: " << runlist.AsString() << endl;
286 }
287 
288 
289 
290 
301 
302 void KVDBSystem::Load(istream& f)
303 {
304  //Read and set informations on system in the format used in Systems.dat files:
305  //
306  //+155Gd + 238U 36 MeV/A '+' followed by name of system
307  //155 64 238 92 36.0 Aproj Zproj Atarg Ztarg Ebeam
308  //Target: 3 0.0 target with 3 layers, angle 0 degrees
309  //C 0.02 1st layer : carbon, 20 ug/cm2
310  //238U 0.1 2nd layer : uranium-238, 100 ug/cm2
311  //C 0.023 3rd layer : carbon, 23 ug/cm2
312  //Runs: 770-804 list of runs in KVNumberList format
313 
314  TString line;
315  Float_t target_thickness;
316  fAbeam = fZbeam = fAtarget = fZtarget = 0;
317  fEbeam = target_thickness = 0;
318  KVNumberList runlist;
319  //'peek' at first character of next line
320  char next_char = f.peek();
321  if (next_char == '+') {
322  line.ReadLine(f, kFALSE);
323  line.Remove(0, 1);
324  SetName(line.Data());
325  cout << "New System : " << line.Data() << endl;
326  }
327  else {
328  Error("Load", "Should read system name : %s\n", line.Data());
329  return;
330  }
331  next_char = f.peek();
332  while (next_char != '+' && f.good() && !f.eof()) {
333  if ((next_char >= '0') && (next_char <= '9')) {
334  line.ReadLine(f, kFALSE);
335  if (sscanf(line.Data(), "%u %u %u %u %f %f", &fAbeam, &fZbeam, &fAtarget, &fZtarget, &target_thickness, &fEbeam) == 6) {
336  cout << "Zproj = " << fZbeam << " Ztarg = " << fZtarget << " targ_thick = " << target_thickness << " Ebeam = " << fEbeam << endl;
337  }
338  else if (sscanf(line.Data(), "%u %u %u %u %f", &fAbeam, &fZbeam, &fAtarget, &fZtarget, &fEbeam) == 5) {
339  cout << "Zproj = " << fZbeam << " Ztarg = " << fZtarget << " Ebeam = " << fEbeam << endl;
340  }
341  }
342  else {
343  line.ReadLine(f, kFALSE);
344  if (line.BeginsWith("Target")) {
345  fTarget = new KVTarget;
346  line.Remove(0, line.Index(":") + 1);
347  Int_t nlay;
348  Float_t angle;
349  sscanf(line.Data(), "%d %f", &nlay, &angle);
350  Char_t mat[10];
351  Float_t thick;
352  for (int i = 0; i < nlay; i++) {
353  line.ReadLine(f);
354  sscanf(line.Data(), "%s %f", mat, &thick);
355  fTarget->AddLayer(mat, thick);
356  }
357  fTarget->SetAngleToBeam(angle);
358  fTarget->Print();
359  }
360  else if (line.BeginsWith("Runs")) {
361  line.Remove(0, line.Index(":") + 1);
362  runlist.SetList(line.Data());
363  cout << "Runs : " << line.Data() << endl;
364  }
365  else if (line.BeginsWith("Run Range")) {
366  line.Remove(0, line.Index(":") + 1);
367  Int_t frun, lrun;
368  sscanf(line.Data(), "%i %i", &frun, &lrun);
369  runlist.Add(Form("%i-%i", frun, lrun));
370  cout << "Run range : " << line.Data() << endl;
371  }
372  }
373  next_char = f.peek();
374  }
375  if (runlist.GetNValues()) {
376  SetRuns(runlist);
377  }
378  //set target if not already done (old versions)
379  if (!fTarget && target_thickness > 0 && fZtarget > 0) {
381  fTarget = new KVTarget(n.GetSymbol(), target_thickness);
382  fTarget->Print();
383  }
384 }
385 
386 
387 
388 
392 
394 {
395  //Associate this system with the runs in the list
396  //Any previously associated runs are first removed (links in the runs will be removed too)
397  Info("SetRuns", "Setting runs for system %s : %s", GetName(), rl.AsString());
398  RemoveAllRuns();
399  rl.Begin();
400  KVDBTable* runtable = GetRunsTable();
401  Int_t run_number;
402  while (!rl.End()) {
403  run_number = rl.Next();
404  KVDBRun* run = (KVDBRun*)runtable->GetRecord(run_number);
405  if (run) {
406  if (run->GetSystem()) {
407 // Error("SetRuns", "Associating run %d with system \"%s\" : run already associated with system \"%s\"",
408 // run_number, GetName(), run->GetSystem()->GetName());
409  }
410  else {
411  if (AddLink("Runs", run)) {
412  //use name of system as title of run
413  run->SetTitle(GetName());
414  }
415  else {
416  Info("SetRuns", "Could not add link for run %d", run_number);
417  }
418  }
419  }
420  else {
421  //Info("SetRuns", "Run %d not found in database", run_number);
422  }
423  }
424 }
425 
426 
427 
428 
433 
435 {
436  //Associate the given run with this system.
437  //If the run was previously associated with another system, this association
438  //will be removed.
439  if (!rec) return;
440  if (!rec->InheritsFrom("KVDBRun")) {
441  Error("AddRun", "Called with pointer to an object of class %s; should inherit from KVDBRun!",
442  rec->ClassName());
443  return;
444  }
445  KVDBRun* run = (KVDBRun*)rec;
446  if (run->GetSystem()) run->GetSystem()->RemoveRun(run);
447  if (AddLink("Runs", run)) {
448  //Info("AddRun", "Added link for run %d", run->GetNumber());
449  //use name of system as title of run
450  run->SetTitle(GetName());
451  }
452  else {
453  Info("AddRun", "Could not add link for run %d", run->GetNumber());
454  }
455 }
456 
457 
458 
459 
464 
466 {
467  //Associate the given run with this system.
468  //If the run was previously associated with another system, this association
469  //will be removed.
470  AddRun(GetRunsTable()->GetRecord(run));
471 }
472 
473 
474 
475 
479 
481 {
482  //Unassociate the given run from this system. Cross-reference link to this system
483  //is removed from the run at the same time.
484  RemoveLink("Runs", run);
485 }
486 
487 
488 
489 
493 
495 {
496  //Unassociate the given run from this system. Cross-reference link to this system
497  //is removed from the run at the same time.
498  RemoveRun(GetRunsTable()->GetRecord(run));
499 }
500 
501 
502 
503 
507 
509 {
510  //Unassociate all runs from this system. Cross-reference links to this system
511  //are removed from the runs at the same time.
512  RemoveAllLinks("Runs");
513 }
514 
515 
516 
518 
520 {
521  cout << "________________________________________________________" <<
522  endl << "System : " << GetName() << endl;
523  KVNumberList r;
524  GetRunList(r);
525  cout << "Runs : " << r.AsString() << endl;
526  cout << " Zbeam : " << fZbeam
527  << endl << " Abeam : " << fAbeam << endl << " Ebeam : " << fEbeam
528  << " A.MeV" << endl << " Ztarget : " << fZtarget << endl <<
529  " Atarget : " << fAtarget << endl << " Target Thickness : " <<
530  const_cast <
531  KVDBSystem*
532  >(this)->
533  GetTargetThickness() << " mg/cm2" << endl <<
534  "________________________________________________________" << endl;
535 
536 }
537 
538 
539 
541 
543 {
544  KVNumberList r;
545  GetRunList(r);
546  cout << "KVDBSystem : " << GetName() << " Runs : " << r.AsString() << endl;
547 }
548 
549 
550 
557 
559 {
560  //Deduce path to runs table in database from full path to parent table of this record.
561  //The systems are stored in a table called "Systems"
562  //The runs are stored in a table called "Runs"
563  //Therefore if we take the full path to the Systems table and replace Systems with Runs,
564  //we can then use gROOT->FindObject to get the pointer to the Runs table.
565 
566  TString path = fFullPathTable.Data();
567  path.ReplaceAll("Systems", "Runs");
568  return (KVDBTable*)gROOT->FindObject(path.Data());
569 }
570 
571 
572 
573 
577 
579 {
580  // Gives name of system in compact form with all (unix-)illegal characters
581  // replaced by '_'. Can be used for naming batch jobs, files, etc.
582 
583  TString tmp;
584  tmp = "";
585  if (GetKinematics()) {
586  if (GetKinematics()->GetNucleus(1)) {
587  tmp = GetKinematics()->GetNucleus(1)->GetSymbol();
588  }
589  if (GetKinematics()->GetNucleus(2)) {
590  tmp += GetKinematics()->GetNucleus(2)->GetSymbol();
591  }
592  if (GetEbeam() > 0) {
593  tmp += TMath::Nint(GetEbeam());
594  }
595  }
596  if (tmp == "") {
597  tmp = GetName();
598  tmp.ReplaceAll(" ", "_");
599  tmp.ReplaceAll("/", "_");
600  }
601  return tmp;
602 }
603 
604 
605 
610 
612 {
613  // Gives name of system in compact form with all (unix-)illegal characters
614  // replaced by '_'. Can be used for naming batch jobs, files, etc.
615  // Only symbols of projectile and target are used, not the beam energy
616 
617  TString tmp;
618  tmp = "";
619  if (GetKinematics()) {
620  if (GetKinematics()->GetNucleus(1)) {
621  tmp = GetKinematics()->GetNucleus(1)->GetSymbol();
622  }
623  if (GetKinematics()->GetNucleus(2)) {
624  tmp += GetKinematics()->GetNucleus(2)->GetSymbol();
625  }
626  }
627  if (tmp == "") {
628  tmp = GetName();
629  tmp.ReplaceAll(" ", "_");
630  tmp.ReplaceAll("/", "_");
631  }
632  return tmp;
633 }
634 
635 
636 
641 
643 {
644  // Returns name of reaction without the beam energy i.e. just projectile + target.
645  //
646  // E.g. for system "129Xe + natSn 50 MeV/A" we return "129Xe + natSn"
647 
648  KVString name(GetName());
649  name.Begin(" ");
650  TString tmp;
651  int i = 0;
652  while (i < 3 && !name.End()) {
653  tmp += name.Next(kTRUE);
654  if (i < 2) tmp += " ";
655  ++i;
656  }
657  return tmp;
658 }
659 
660 
661 
int Int_t
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
ROOT::R::TRInterface & r
#define SafeDelete(p)
#define f(i)
char Char_t
const Bool_t kFALSE
bool Bool_t
double Double_t
float Float_t
const Bool_t kTRUE
const char Option_t
#define gROOT
char * Form(const char *fmt,...)
Relativistic binary kinematics calculator.
Definition: KV2Body.h:165
void SetTarget(const KVNucleus &)
Set target for reaction.
Definition: KV2Body.cpp:315
void SetProjectile(const KVNucleus &)
Set projectile for reaction.
Definition: KV2Body.cpp:340
void CalculateKinematics()
Definition: KV2Body.cpp:678
KVNucleus * GetNucleus(Int_t i) const
Definition: KV2Body.cpp:457
Double_t GetCMEnergy() const
Return available kinetic energy in centre of mass.
Definition: KV2Body.cpp:523
virtual const Char_t * GetType() const
Definition: KVBase.h:176
Cross-reference in a KVDataBase.
Definition: KVDBKey.h:37
virtual void SetUniqueStatus(Bool_t unique)
Definition: KVDBKey.h:72
Record folder for the database.
Definition: KVDBRecord.h:42
virtual Bool_t AddKey(KVDBKey *key, Bool_t check=kTRUE)
Definition: KVDBRecord.cpp:65
TString fFullPathTable
full path to parent table in folder structure
Definition: KVDBRecord.h:46
virtual Bool_t AddLink(const Char_t *key_name, KVDBRecord *rec, Bool_t linkback=kTRUE)
Definition: KVDBRecord.cpp:122
virtual void RemoveLink(const Char_t *key_name, KVDBRecord *rec, Bool_t linkback=kTRUE)
Remove the link between this record and the record "rec" in the DB table"key_name".
Definition: KVDBRecord.cpp:145
virtual KVRList * GetLinks(const Char_t *key) const
Returns the list of records linked to this record in table "key".
Definition: KVDBRecord.cpp:206
virtual void RemoveAllLinks(const Char_t *key)
Remove all links between this record and the records in the DB table"key_name".
Definition: KVDBRecord.cpp:166
virtual Int_t GetNumber() const
Definition: KVDBRecord.h:72
Description of an experimental run in database ,.
Definition: KVDBRun.h:35
KVDBSystem * GetSystem() const
Definition: KVDBRun.cpp:242
Database class used to store information on different colliding systems studied during an experiment.
Definition: KVDBSystem.h:51
UInt_t GetZtarget() const
.............. inline functions ...............
Definition: KVDBSystem.h:158
virtual void Print(Option_t *option="") const
Definition: KVDBSystem.cpp:519
Bool_t IsCollision() const
retourne kTRUE, si le systeme est une collision ie projectile+cible
Definition: KVDBSystem.cpp:105
Int_t Compare(const TObject *) const
Definition: KVDBSystem.cpp:185
UInt_t GetAtarget() const
Definition: KVDBSystem.h:163
void SetRuns(KVNumberList &)
Definition: KVDBSystem.cpp:393
KVUnownedList * _GetRuns()
Definition: KVDBSystem.cpp:213
Float_t fEbeam
Energy of the beam in MeV/nucleon.
Definition: KVDBSystem.h:67
KVUnownedList * GetRuns() const
Returns a sorted list of all the runs associated with this system.
Definition: KVDBSystem.h:116
void RemoveRun(KVDBRecord *)
Definition: KVDBSystem.cpp:480
Double_t GetPtot() const
Definition: KVDBSystem.cpp:135
TString GetBatchName()
Definition: KVDBSystem.cpp:578
virtual void Save(std::ostream &) const
Definition: KVDBSystem.cpp:259
Double_t GetECM() const
Definition: KVDBSystem.cpp:167
Float_t GetTargetThickness() const
Definition: KVDBSystem.h:208
void AddRun(KVDBRecord *)
Definition: KVDBSystem.cpp:434
TString GetBatchNameWithoutEnergy()
Definition: KVDBSystem.cpp:611
KV2Body * GetKinematics()
Definition: KVDBSystem.cpp:80
Float_t GetEbeam() const
Definition: KVDBSystem.h:198
KVUnownedList * fRunlist
used to store pointer to sorted list of runs
Definition: KVDBSystem.h:59
UInt_t fAbeam
Mass of the projectile nucleus.
Definition: KVDBSystem.h:64
Double_t GetZVtot() const
Definition: KVDBSystem.cpp:119
UInt_t GetZbeam() const
Definition: KVDBSystem.h:178
UInt_t GetAbeam() const
Definition: KVDBSystem.h:183
virtual void ls(Option_t *option="*") const
Definition: KVDBSystem.cpp:542
virtual void Load(std::istream &)
Definition: KVDBSystem.cpp:302
TString GetReactionNameWithoutEnergy()
Definition: KVDBSystem.cpp:642
KVDBTable * GetRunsTable()
Definition: KVDBSystem.cpp:558
Int_t fRuns
temporary variable used to stock number of associated runs
Definition: KVDBSystem.h:60
KV2Body * fCinema
used to calculate kinematics of entrance channel
Definition: KVDBSystem.h:55
UInt_t fZtarget
charge of the target nucleus
Definition: KVDBSystem.h:65
KVTarget * fTarget
physical target used for experiment run
Definition: KVDBSystem.h:57
virtual void GetRunList(KVNumberList &) const
Fills the KVNumberList object with the list of all run numbers associated with this system.
Definition: KVDBSystem.cpp:234
UInt_t fZbeam
charge of the projectile nucleus
Definition: KVDBSystem.h:63
UInt_t fAtarget
Mass of the target nucleus.
Definition: KVDBSystem.h:66
void RemoveAllRuns()
Definition: KVDBSystem.cpp:508
Double_t GetEtot() const
Definition: KVDBSystem.cpp:151
Table in a database.
Definition: KVDBTable.h:33
virtual KVDBRecord * GetRecord(const Char_t *rec_name) const
Definition: KVDBTable.h:57
Extended TList class which owns its objects by default.
Definition: KVList.h:27
void Sort(Bool_t order=kSortAscending)
Definition: KVList.h:34
Description of physical materials used to construct detectors & targets; interface to range tables.
Definition: KVMaterial.h:93
Double_t GetAreaDensity() const
Definition: KVMaterial.cpp:556
Bool_t IsIsotopic() const
Definition: KVMaterial.cpp:327
Double_t GetMass() const
Definition: KVMaterial.cpp:305
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:125
const Char_t * GetSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:81
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:83
const Char_t * AsString(Int_t maxchars=0) const
Bool_t End(void) const
Definition: KVNumberList.h:197
Int_t GetNValues() const
void Begin(void) const
void SetList(const TString &)
void Add(Int_t)
Add value 'n' to the list.
void Clear(Option_t *="")
Empty number list, reset it to initial state.
Int_t Next(void) const
TVector3 GetMomentum() const
Definition: KVParticle.h:606
Double_t GetVpar() const
Definition: KVParticle.h:677
void SetEnergy(Double_t e)
Definition: KVParticle.h:601
Wrapper for TRefArray adding some functionality.
Definition: KVRList.h:36
virtual TObject * At(Int_t idx) const
virtual void Add(TObject *obj)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:72
void Begin(TString delim) const
Definition: KVString.cpp:565
Bool_t End() const
Definition: KVString.cpp:634
KVString Next(Bool_t strip_whitespace=kFALSE) const
Definition: KVString.cpp:695
Calculation/correction of energy losses of particles through an experimental target.
Definition: KVTarget.h:126
void Print(Option_t *opt="") const
Show information on this material.
Definition: KVTarget.cpp:736
void SetAngleToBeam(Double_t a)
Definition: KVTarget.cpp:178
Int_t NumberOfLayers() const
Definition: KVTarget.h:165
void AddLayer(const Char_t *material, Double_t thick)
Definition: KVTarget.cpp:111
KVList * GetLayers() const
Definition: KVTarget.h:169
Double_t GetAngleToBeam()
Gives angle of target to incident beam direction in degrees.
Definition: KVTarget.cpp:193
Extended TList class which does not own its objects by default.
Definition: KVUnownedList.h:16
Double_t E() const
virtual const char * GetName() const
virtual void SetTitle(const char *title="")
virtual void SetName(const char *name)
virtual const char * ClassName() const
virtual Bool_t InheritsFrom(const char *classname) const
virtual void Error(const char *method, const char *msgfmt,...) const
virtual void Info(const char *method, const char *msgfmt,...) const
const char * Data() const
TString & ReplaceAll(const char *s1, const char *s2)
Double_t Z() const
TLine * line
const Int_t n
const long double mg
Definition: KVUnits.h:74
Int_t Nint(T x)