20 #include "KVMaterial.h"
21 #include "KVDetector.h"
22 #include "KVTelescope.h"
23 #include "KVIDTelescope.h"
24 #include "KVIDSiCsI.h"
25 #include "KVIDINDRACsI.h"
26 #include "KVIDChIoSi.h"
27 #include "KVIDChIoCsI.h"
28 #include "KVIDChIoSi75.h"
29 #include "KVIDSi75SiLi.h"
30 #include "KVIDPhoswich.h"
36 #include "KVNucleus.h"
37 #include "KVDetectorEvent.h"
38 #include "KVNucleusEvent.h"
40 #include "INDRAGeometryBuilder.h"
41 #include <KVASGroup.h>
42 #include "KVGeoNavigator.h"
43 #ifdef WITH_BUILTIN_GRU
44 #include <KVGANILDataReader.h>
46 #include <KVDBChIoPressures.h>
47 #include <KVGeoImport.h>
48 #include <KVRangeTableGeoNavigator.h>
49 #include <KVRawDataReader.h>
51 #include "KVMFMDataFileReader.h"
52 #include "MFMEbyedatFrame.h"
54 #include "MFMMesytecMDPPFrame.h"
55 #include "mesytec_buffer_reader.h"
58 #include "KVINDRAGroupReconstructor.h"
93 fChIo->SetCleanup(
kTRUE);
95 fSi->SetCleanup(
kTRUE);
97 fCsI->SetCleanup(
kTRUE);
99 fPhoswich->SetCleanup(
kTRUE);
103 fSelecteur =
nullptr;
122 if (fChIo && fChIo->TestBit(kNotDeleted)) {
127 if (fSi && fSi->TestBit(kNotDeleted)) {
132 if (fCsI && fCsI->TestBit(kNotDeleted)) {
137 if (fPhoswich && fPhoswich->TestBit(kNotDeleted)) {
142 if (fSelecteur)
delete fSelecteur;
179 TString path =
Form(
"indra-struct.%s.env", fDataSet.Data());
180 TString path2 = GetDataSetEnv(fDataSet,
"INDRA.StructureFile",
"");
182 if (!SearchKVFile(path.
Data(), path2,
"data")) {
183 path =
"indra-struct.env";
184 SearchKVFile(path.
Data(), path2,
"data");
187 fStrucInfos.ReadFile(path2,
kEnvAll);
189 KVString lruns = fStrucInfos.GetValue(
"AddOnForRuns",
"");
193 while (!lruns.
End()) {
198 path = fStrucInfos.GetValue(sruns.
Data(),
"");
199 Info(
"BuildGeometry",
"Additional geometry for run=%d in file #%s#", fCurrentRun, path.
Data());
200 SearchKVFile(path.
Data(), path2,
"data");
202 Warning(
"BuildGeometry",
"fichier %s inconnu", path.
Data());
211 SetName(fStrucInfos.GetValue(
"INDRA.Name",
""));
212 SetTitle(fStrucInfos.GetValue(
"INDRA.Title",
""));
214 KVString layers = fStrucInfos.GetValue(
"INDRA.Layers",
"");
216 while (!layers.
End()) BuildLayer(layers.
Next());
229 Int_t number = fStrucInfos.GetValue(
Form(
"INDRA.Layer.%s.Number",
name), 0);
233 Info(
"BuildLayer",
"Building layer %d:%s", number,
name);
236 while (!rings.
End()) {
239 KVRing* ring = BuildRing(ring_num, prefix);
254 Info(
"BuildRing",
"Building ring %d (%s)", number, prefix);
256 Double_t thmin = fStrucInfos.GetValue(
Form(
"%s.ThMin", prefix), 0.0);
257 Double_t thmax = fStrucInfos.GetValue(
Form(
"%s.ThMax", prefix), 0.0);
258 Double_t phi_0 = fStrucInfos.GetValue(
Form(
"%s.Phi0", prefix), 0.0);
259 Int_t ntel = fStrucInfos.GetValue(
Form(
"%s.Ntel", prefix), 0);
260 Int_t step = fStrucInfos.GetValue(
Form(
"%s.Step", prefix), 1);
261 Int_t num_first = fStrucInfos.GetValue(
Form(
"%s.Nfirst", prefix), 1);
262 Double_t dphi = fStrucInfos.GetValue(
Form(
"%s.Dphi", prefix), -1.0);
268 phi_min = (phi_min < 0. ? phi_min + 360. : phi_min);
269 dphi = (dphi < 0. ? 360. / ntel : dphi);
272 phi_max = (phi_max > 360. ? phi_max - 360. : phi_max);
277 UInt_t counter = num_first;
278 for (
int i = 0; i < ntel; i++) {
281 phi = (phi + dphi > 360. ? (phi + dphi - 360.) : (phi + dphi));
286 if (i + 1 < ntel) kvt = BuildTelescope(prefix, counter);
304 KVString telescopes = fStrucInfos.GetValue(
Form(
"%s.Telescope", prefix),
"");
305 telescopes.
Begin(
" ");
307 while (!telescopes.
End()) {
309 KVNumberList mods = fStrucInfos.GetValue(
Form(
"%s.Telescope.%s.Modules", prefix,
name.Data()),
"1-100");
313 KVString detectors = fStrucInfos.GetValue(
Form(
"INDRA.Telescope.%s.Detectors",
name.Data()),
"");
314 Double_t aziwidth = fStrucInfos.GetValue(
Form(
"INDRA.Telescope.%s.AziWidth",
name.Data()), 1.0);
317 detectors.
Begin(
" ");
319 while (!detectors.
End()) {
321 detector.
Begin(
"()");
326 Double_t depth = fStrucInfos.GetValue(
Form(
"INDRA.Telescope.%s.Depth.%s",
name.Data(), dettype.
Data()), 0.);
355 TIter it_traj(GetTrajectories());
395 MakeListOfDetectors();
397 SetGroupsAndIDTelescopes();
399 SetNamesOfIDTelescopes();
401 SetDetectorThicknesses();
403 SetIdentifications();
408 SetPinLasersForCsI();
410 SetExpectedDetectorSignalNames();
413 TIter next_det(GetDetectors());
418 fEbyedatParamDetMap.SetValue(det_name +
"_PG", det_name);
419 fEbyedatParamDetMap.SetValue(det_name +
"_GG", det_name);
422 fEbyedatParamDetMap.SetValue(det_name +
"_R", det_name);
423 fEbyedatParamDetMap.SetValue(det_name +
"_L", det_name);
428 fEbyedatParamDetMap.SetValue(det_name + time_marker_type, det_name);
508 FillListsOfDetectorsByType();
524 TIter next_det(GetDetectors());
558 CalculateGroupsFromGeometry();
561 CreateIDTelescopesInGroups();
593 return (
KVLayer*)GetStructure(
"LAYER",
"CHIO");
670 if (
type >= Phos_R &&
type <= Phos_T) {
671 sprintf(nom_det,
"PHOS_%02d", mod);
678 else if (
type >= ChIo_GG &&
type <= ChIo_T) {
679 sprintf(nom_det,
"CI_%02d%02d", cou, mod);
683 else if (
type >= Si_GG &&
type <= Si_T) {
684 sprintf(nom_det,
"SI_%02d%02d", cou, mod);
688 else if (
type >= SiLi_GG &&
type <= SiLi_T) {
689 sprintf(nom_det,
"SILI_%02d", cou);
693 else if (
type >= Si75_GG &&
type <= Si75_T) {
694 sprintf(nom_det,
"SI75_%02d", cou);
698 else if (
type >= CsI_R &&
type <= CsI_T) {
699 sprintf(nom_det,
"CSI_%02d%02d", cou, mod);
720 if (
de->InheritsFrom(
"KVSiLi") &&
e->InheritsFrom(
"KVCsI")) {
742 TIter it(GetListOfIDTelescopes());
744 const TString etalon_numbers[] = {
"1002",
"1102",
"1202",
"1304",
"1403",
"1503",
"1602",
"1702"};
751 if (de_type ==
"PHOS") {
761 if (csi_id_name_fmt.
Contains(
"R_L")) {
773 if (e_type ==
"SILI" || e_type ==
"SI75") {
781 dynamic_cast<KVHashList*
>(GetListOfIDTelescopes())->Rehash();
794 CreateROOTGeometry();
807 if (fEbyedatParamDetMap.HasParameter(param_name)) {
808 det = GetDetector(fEbyedatParamDetMap.GetStringValue(param_name));
811 std::string lab(param_name);
812 sig_type = lab.substr(lab.rfind(
'_') + 1);
815 sig_type = param_name;
817 add_and_set_detector_signal(det, detname, val, sig_type);
839 if (fMesytecData) fReconParameters.SetValue(
"INDRA.MESYTEC",
kTRUE);
840 else if (fEbyedatData) fReconParameters.SetValue(
"INDRA.EBYEDAT",
kTRUE);
896 if (!db->
FindCalibFile(
"Pressures", fullpath,
"INDRA"))
return;
897 Info(
"ReadChIoPressures()",
"Reading INDRA ChIo pressures used during runs...");
899 auto pressure_table = db->
AddTable(
"INDRA.ChIo Pressures",
"INDRA ChIo gas pressures");
901 KVString the_chios[] = {
"CI_02",
"CI_04",
"CI_06",
"CI_08",
"CI_13"};
906 pressure_sets.
Begin(
" ");
907 while (!pressure_sets.
End()) {
908 auto pressure_set = pressure_sets.
Next();
919 for (
auto& chio : the_chios) {
921 if ((P = env.
GetValue(
Form(
"%s.%s", pressure_set.Data(), chio.Data()), 0.0)) > 0.0) {
926 pressure_table->AddRecord(dbp);
952 TIter next_ps(param_list);
955 Error(
"SetChIoPressures",
956 "GetListOfChIo() returns null list pointer");
959 cout <<
"--> Setting ChIo pressures" << endl;
960 TIter next_chio(chios);
963 cout <<
" Ring 2/3: " << kvps->
966 cout <<
" Ring 4/5: " << kvps->
969 cout <<
" Ring 6/7: " << kvps->
972 cout <<
" Ring 8/12: " << kvps->
975 cout <<
" Ring 13/17: " << kvps->
977 while ((kvd = (
KVChIo*) next_chio())) {
978 if (!strcmp(kvd->
GetType(),
"CI")) {
1011 SetChIoPressures(dbr);
1015 #ifdef WITH_BUILTIN_GRU
1026 fEbyedatData =
kTRUE;
1031 handle_ebyedat_raw_data_parameter(eby_par->
GetName(), eby_par->
GetData());
1074 fEbyedatData =
kTRUE;
1079 for (
int i = 0; i <
f.GetNbItems(); ++i) {
1080 f.GetDataItem(i, lab, val);
1081 handle_ebyedat_raw_data_parameter(lab.c_str(), val);
1085 if (ts != 0) fReconParameters.SetValue64bit(
"INDRA.TS", ts);
1087 if (en != 0) fReconParameters.SetValue64bit(
"INDRA.EN", en);
1088 int npars = fReconParameters.GetNpar();
1089 std::vector<TString> names;
1090 for (
int i = 0; i < npars; ++i) {
1091 TString name = fReconParameters.GetParameter(i)->GetName();
1092 if (
name.EndsWith(
"_UP")) names.push_back(
name);
1095 for (std::vector<TString>::iterator it = names.begin(); it != names.end(); ++it) {
1099 ULong64_t par_up = fReconParameters.GetIntValue(name_up);
1101 UInt_t par32 = (par_up << 16) + par;
1102 fReconParameters.RemoveParameter(name_up);
1103 fReconParameters.RemoveParameter(
name);
1104 fReconParameters.SetValue64bit(
name, par32);
1129 Error(
"SetIDCodeForIDTelescope",
"Request for telescope name=%s of unknown class=%s",
1192 Info(
"SetPinLasersForCsI",
"Setting correspondance CsI-PinLaser using file %s.",
1196 line.ReadLine(pila_file);
1197 while (pila_file.good()) {
1198 if (!
line.BeginsWith(
"#")) {
1207 line.ReadLine(pila_file);
1212 Info(
"SetPinLasersForCsI",
"File %s not found. Correspondance Csi-PinLaser is unknown.",
1297 if (((fired_dets && fired_dets->
GetEntries()) || fFiredDetectors.GetEntries())
1298 && (GetTriggerInfo() && !GetTriggerInfo()->IsINDRAEvent()))
return;
1383 Error(
"CreateROOTGeometry",
"gIndra has to be build first");
1386 if (!GetNavigator()) {
1389 GetNavigator()->SetNameCorrespondanceList(
"INDRA.names");
1393 Info(
"CreateROOTGeometry",
"Scanning geometry shapes and matrices...");
1400 TIter next(GetDetectors());
1408 Info(
"CreateROOTGeometry",
"Volume checking for %s", det->
GetName());
1411 for (
Double_t TH = theta0 - 0.5; TH <= theta0 + 0.5; TH += 0.1) {
1412 for (
Double_t PH = phi0 - 10; PH <= phi0 + 10; PH += 1) {
1423 Info(
"CreateROOTGeometry",
"Volume checking failed for : %s", det->
GetName());
1433 Info(
"CreateROOTGeometry",
"Trajectory checking for %s", det->
GetName());
1436 for (
Double_t TH = theta0 - 0.5; TH <= theta0 + 0.5; TH += 0.1) {
1437 for (
Double_t PH = phi0 - 10; PH <= phi0 + 10; PH += 1) {
1452 Info(
"CreateROOTGeometry",
"ROOT geometry initialised for %d/%d detectors", nrootgeo, GetDetectors()->GetEntries());
1455 TIter it(GetDetectors());
1457 while ((
d = (
KVDetector*)it()))
d->GetNode()->RehashLists();
1458 AssociateTrajectoriesAndNodes();
1459 DeduceGroupsFromTrajectories();
1460 FillTrajectoryIDTelescopeLists();
1461 CalculateReconstructionTrajectories();
1462 GetNavigator()->AbsorbDetectorPaths(&gimp);
1480 if (fCloseGeometryNow) PerformClosedROOTGeometryOperations();
1503 if (GetGroup(
g->GetName())) {
1505 if (
g->GetDetectorByType(
"SILI") ||
g->GetDetectorByType(
"SI75"))
1509 if (
id->GetRingNumber() < 10) {
1530 if (GetReconParameters().HasValue64bit(
"INDRA.EN"))
e->SetNumber(GetReconParameters().GetValue64bit(
"INDRA.EN"));
1548 if (!
l.GetBoolValue(
"INDRA.MESYTEC") && !
l.GetBoolValue(
"INDRA.EBYEDAT")) {
1551 fEbyedatData =
kTRUE;
1552 prepare_to_handle_new_raw_data();
1554 int N =
l.GetNpar();
1555 for (
int i = 0; i <
N; ++i) {
1559 if (
name.BeginsWith(
"ACQPAR")) {
1561 int dots =
name.GetNValues(
".");
1565 if (
name.Next() !=
"INDRA")
continue;
1566 std::string parname(
name.Next());
1570 if (parname.find(
'_') !=
kNPOS) {
1572 detname = parname.substr(0, parname.rfind(
'_'));
1573 sig_type = parname.substr(parname.rfind(
'_') + 1);
1574 det = GetDetector(detname);
1579 add_and_set_detector_signal(det, detname,
np->GetDouble(), sig_type);
1584 fMesytecData =
l.GetBoolValue(
"INDRA.MESYTEC");
1585 fEbyedatData =
l.GetBoolValue(
"INDRA.EBYEDAT");
1601 if (!db->
InheritsFrom(
"KVINDRADB")) ReadChIoPressures(db);
1621 if (
r->GetDataFormat() ==
"MFM") {
1624 Info(
"InitialiseRawDataReading",
"Setting Mesytec crate config for run %d, raw run number=%d",
1625 GetCurrentRunNumber(),
r->GetRunNumberReadFromFile());
1628 if (channel_conf_list !=
"") {
1631 Fatal(
"InitialiseRawDataReading",
1632 "Could not open file containing names of Mesytec channel config for each run: %s",
1637 while (!files.
End()) {
1640 if (runlist.
Contains(
r->GetRunNumberReadFromFile())) {
1642 Info(
"InitialiseRawDataReading",
"Using file %s for raw run number %d",
1643 next_file.
Data(),
r->GetRunNumberReadFromFile());
1652 Fatal(
"InitialiseRawDataReading",
1653 "Name of file containing names of Mesytec channel config for each run should be defined in dataset variable %s.MesytecChannelsConf",
1654 GetDataSet().Data());
1665 Bool_t KVINDRA::handle_raw_data_event_mfmframe_mesytec_mdpp(
const MFMMesytecMDPPFrame& f)
1673 if (!fMesytecData) {
1675 mesytec::module::set_data_type_alias(
"qdc_long",
"TotLight");
1676 mesytec::module::set_data_type_alias(
"qdc_short",
"R");
1677 mesytec::module::set_data_type_alias(
"tdc",
"T");
1678 mesytec::module::set_data_type_alias(
"adc",
"ADC");
1680 fMesytecData =
kTRUE;
1682 fReconParameters.SetValue64bit(
"INDRA.TS",
f.GetTimeStamp());
1684 mfmfilereader->GetMesytecBufferReader().read_event_in_buffer(
1685 (
const uint8_t*)
f.GetPointUserData(),
f.GetBlobSize(),
1686 #ifdef MESYTEC_DATA_NO_MDPP_NAMESPACE
1687 #ifdef MESYTEC_DATA_BUFFER_READER_CALLBACK_WITH_EVENT_AND_SETUP
1688 [ = ](
const mesytec::event & evt,
const mesytec::experimental_setup & setup) {
1690 [ = ](
const mesytec::event & evt) {
1693 [ = ](
const mesytec::mdpp::event & evt) {
1695 #ifndef MESYTEC_DATA_BUFFER_READER_CALLBACK_WITH_EVENT_AND_SETUP
1696 auto& setup = mfmfilereader->GetMesytecBufferReader().get_setup();
1699 #ifdef MESYTEC_DATA_NO_PUBLIC_MEMBERS
1700 for (
auto& mdat : evt.get_module_data()) {
1701 auto mod_id = mdat.get_module_id();
1703 for (
auto& mdat : evt.modules) {
1704 auto mod_id = mdat.module_id;
1706 auto& current_module = setup.get_module(mod_id);
1707 if (current_module.is_mdpp_module()) {
1709 #ifdef MESYTEC_DATA_NO_PUBLIC_MEMBERS
1710 for (
auto& voie : mdat.get_channel_data()) {
1711 KVString detname(setup.get_detector(mod_id, voie.get_channel_number()));
1712 KVString sig_type(current_module.get_data_type_name(voie.get_data_type()));
1713 Double_t sig_data = voie.get_data();
1715 for (
auto& voie : mdat.data) {
1716 KVString detname(setup.get_detector(mod_id, voie.channel));
1721 add_and_set_detector_signal(GetDetector(detname), detname, sig_data, sig_type);
1724 else if (current_module.is_mvlc_scaler()) {
1728 #ifdef MESYTEC_DATA_NO_PUBLIC_MEMBERS
1729 if (mdat.get_channel_data().size() == 4) {
1731 if (mdat.data.size() == 4) {
1735 #ifdef MESYTEC_DATA_NO_PUBLIC_MEMBERS
1736 for (
auto& d : mdat.get_channel_data())
x += ((uint64_t)
d.get_data_word()) << (16 * (i++));
1738 for (
auto& d : mdat.data)
x += ((uint64_t)
d.data_word) << (16 * (i++));
1740 fReconParameters.SetValue64bit(current_module.name.c_str(),
x);
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t np
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t g
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
R__EXTERN TGeoManager * gGeoManager
char * Form(const char *fmt,...)
Build INDRA geometry from Huguet CAO infos.
void Build(Bool_t withTarget=kTRUE, Bool_t closeGeometry=kTRUE)
void MakeListOfDetectors()
virtual const Char_t * GetType() const
virtual void SetNumber(UInt_t num)
virtual void SetType(const Char_t *str)
static const Char_t * GetDataSetEnv(const Char_t *dataset, const Char_t *type, const Char_t *defval)
virtual Bool_t IsCalled(const Char_t *name) const
Ionisation chamber detectors of the INDRA multidetector array.
virtual Double_t GetPressure() const
virtual void SetPressure(Double_t P)
CsI(Tl) scintillation detectors of the INDRA multidetector array.
void SetPinLaser(Int_t n)
CHIO pressure parameters.
virtual void SetPressure(UInt_t n, Float_t pressure)
virtual Float_t GetPressure(UInt_t chio_number)
virtual KVRList * GetLinks(const Char_t *key) const
Returns the list of records linked to this record in table "key".
Description of an experimental run in database ,,.
virtual Bool_t AddTable(KVDBTable *table)
const Char_t * GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
TString GetFullPathToDataSetFile(const Char_t *filename)
Bool_t OpenDataSetFile(const Char_t *filename, std::ifstream &file)
List of hit groups in a multidetector array.
Base class for detector geometry description.
void SetNameOfArray(const TString &n)
static KVDetector * MakeDetector(const Char_t *name, Float_t thick)
KVList * GetAlignedIDTelescopes()
Double_t GetTheta() const
void SetDetecting(Bool_t yes=kTRUE)
KVGeoDetectorNode * GetNode()
GANIL VXI/VME 16 bit (maximum) EBYEDAT acquisition parameter.
Base class to describe database of an experiment ,,.
const KVNumberList & GetRunList() const
virtual void LinkRecordToRunRange(KVDBRecord *rec, UInt_t first_run, UInt_t last_run)
Bool_t FindCalibFile(const Char_t *type, TString &fullpath, const TString &array_name="") const
Reads GANIL acquisition files (EBYEDAT)
const KVSeqCollection & GetFiredDataParameters() const
Path taken by particles through multidetector geometry.
Bool_t ContainsAll(const TCollection *l) const
KVSeqCollection * AccessIDTelescopeList()
KVGeoDetectorNode * GetNodeInFront(const KVGeoDetectorNode *n) const
KVGeoDetectorNode * GetNodeAt(Int_t i) const
KVDetector * GetDetector() const
Int_t GetNDetsInFront() const
Returns number of detectors directly in front of this one.
Import detector array described by ROOT geometry and set up corresponding KVMultiDetArray object.
void SetLastDetector(KVDetector *)
void PropagateEvent(KVEvent *, TVector3 *TheOrigin=0)
void SetNameCorrespondanceList(const Char_t *)
virtual void Add(KVBase *)
Base class for particle reconstruction in one group of a detector array.
static KVGroupReconstructor * Factory(const TString &plugin="")
Group of detectors which can be treated independently of all others in array.
Extended version of ROOT THashList.
Base class for all detectors or associations of detectors in array which can identify charged particl...
KVDetector * GetDetector(UInt_t n) const
virtual void SetIDCode(UShort_t c)
const KVList * GetDetectors() const
Base class for detectors of INDRA array.
UInt_t GetRingNumber() const
KVINDRADetector * GetChIo() const
static TString CSI_ID_TYPE
Base class for telescopes in INDRA array.
INDRA multidetector array geometry.
virtual void Build(Int_t run=-1)
void InitialiseRawDataReading(KVRawDataReader *)
virtual KVChIo * GetChIoOf(const Char_t *detname)
void handle_ebyedat_raw_data_parameter(const char *param_name, uint16_t val)
KVINDRATelescope * BuildTelescope(const Char_t *prefix, Int_t mod)
virtual Bool_t handle_raw_data_event_ebyedat(KVGANILDataReader &)
void CreateROOTGeometry()
void SetRawDataFromReconEvent(KVNameValueList &)
void SetPinLasersForCsI()
void copy_fired_parameters_to_recon_param_list()
KVGroupReconstructor * GetReconstructorForGroup(const KVGroup *) const
virtual void SetGroupsAndIDTelescopes()
Int_t GetIDTelescopes(KVDetector *, KVDetector *, TCollection *)
virtual void SetROOTGeometry(Bool_t on=kTRUE)
void SetChIoPressures(KVDBRun *)
static Char_t SignalTypes[16][3]
Use this static array to translate EBaseIndra_type signal type to a string giving the signal type.
void FillListsOfDetectorsByType()
Fill lists of ChIo, Si, CsI and phoswich.
virtual void MakeListOfDetectors()
Overrides KVASMultiDetArray method to add FillListsOfDetectorsByType()
void FillTrajectoryIDTelescopeLists()
void SetIDCodeForIDTelescope(KVIDTelescope *) const
Set the INDRA-specific general identification code for the given telescope.
void PerformClosedROOTGeometryOperations()
void SetReconParametersInEvent(KVReconstructedEvent *) const
If "INDRA.EN" parameter has been set, we use it to set the event number.
void MakeCalibrationTables(KVExpDB *)
Override base method in order to read ChIo pressures for each run.
void SetTrigger(UChar_t trig)
Bool_t handle_raw_data_event_mfmframe_ebyedat(const MFMEbyedatFrame &)
KVRing * BuildRing(Int_t number, const Char_t *prefix)
Build ring with infos in file "$KVROOT/KVFiles/data/indra-struct.[dataset].env".
virtual KVINDRADetector * GetDetectorByType(UInt_t cou, UInt_t mod, UInt_t type) const
void SetNamesOfIDTelescopes() const
void ReadChIoPressures(KVExpDB *)
virtual void GetDetectorEvent(KVDetectorEvent *detev, const TSeqCollection *fired_dets=0)
void SetDetectorParametersForRun(KVDBRun *, const TString &="")
Override base method in order to set ChIo pressures (if defined)
void BuildLayer(const Char_t *name)
Build layer 'name' with infos in file "$KVROOT/KVFiles/data/indra-struct.[dataset]....
virtual void BuildGeometry()
Set of detectors at a similar distance from target (obsolete)
Read MFM format acquisition data.
static KVIonRangeTable * GetRangeTable()
virtual void GetDetectorEvent(KVDetectorEvent *detev, const TSeqCollection *fired_params=0)
virtual void InitialiseRawDataReading(KVRawDataReader *)
virtual void SetDetectorParametersForRun(KVDBRun *, const TString &="")
virtual void copy_fired_parameters_to_recon_param_list()
virtual Int_t GetIDTelescopes(KVDetector *, KVDetector *, TCollection *list)
virtual void MakeCalibrationTables(KVExpDB *)
virtual void SetRawDataFromReconEvent(KVNameValueList &)
virtual void SetROOTGeometry(Bool_t on=kTRUE)
virtual void SetReconParametersInEvent(KVReconstructedEvent *) const
Copy any parameters in fReconParameters in to the reconstructed event parameter list.
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
A generic named parameter storing values of different types.
An event container for KVNucleus objects.
Description of properties and kinematics of atomic nuclei.
void SetZAandE(Int_t z, Int_t a, Double_t ekin)
Set atomic number, mass number, and kinetic energy in MeV.
Strings used to represent a set of ranges of values.
Bool_t Contains(Int_t val) const
returns kTRUE if the value 'val' is contained in the ranges defined by the number list
void SetTheta(Double_t theta)
void SetPhi(Double_t phi)
virtual void SetAzimuthalMinMax(Double_t min, Double_t max)
Set min and max azimuthal angles and calculate (mean) phi.
Bool_t ROOTGeo() const
Returns kTRUE if ROOT geometry is used, kFALSE if not.
void SetDistance(Double_t d)
Double_t GetAzimuthalWidth(Double_t phmin=-1., Double_t phimax=-1.) const
virtual void SetPolarMinMax(Double_t min, Double_t max)
Set min and max polar angles and calculate (mean) theta.
Wrapper for TRefArray adding some functionality.
Propagate particles through array geometry calculating energy losses.
Abstract base class for reading raw (DAQ) data.
Event containing KVReconstructedNucleus nuclei reconstructed from hits in detectors.
Ring in INDRA array (obsolete)
void Add(KVBase *)
Only KVTelescope-derived structures can be placed in a KVRing.
KaliVeda extensions to ROOT collection classes.
virtual void Add(TObject *obj)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
void SetDepth(UInt_t ndet, Float_t depth)
set the depth of detector number ndet(=1,2,...) in mm.
void Add(KVBase *element)
virtual void SetPolarMinMax(Double_t min, Double_t max)
virtual void SetAzimuthalWidth(Double_t aw)
virtual Int_t GetEntries() const
virtual const char * GetValue(const char *name, const char *dflt) const
virtual Int_t ReadFile(const char *fname, EEnvLevel level)
const char * GetName() const override
virtual void SetName(const char *name)
TClass * IsA() const override
virtual TObject * FindObject(const char *name) const
virtual Bool_t InheritsFrom(const char *classname) const
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Prepend(char c, Ssiz_t rep=1)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
unsigned long long ULong64_t
const long double torr
pressures
double dist(AxisAngle const &r1, AxisAngle const &r2)