4 #include "KVMultiDetArray.h"
5 #include "KVDetector.h"
6 #include "KVDetectorEvent.h"
7 #include "KVReconstructedEvent.h"
8 #include "KVReconstructedNucleus.h"
10 #include "KVNucleus.h"
12 #include "KVMaterial.h"
14 #include "KVIDTelescope.h"
18 #include <KVIDGridManager.h>
19 #include <KVDataSetManager.h>
20 #include <KVUpDater.h>
22 #include "KVDataSet.h"
24 #include "KVHashList.h"
25 #include "KVNameValueList.h"
26 #include "KVUniqueNameList.h"
27 #include "KVIonRangeTable.h"
28 #include "KVRangeTableGeoNavigator.h"
29 #include <KVDataAnalyser.h>
30 #include <KVNamedParameter.h>
31 #include <KVCalibrator.h>
32 #include <KVDBParameterSet.h>
34 #include <KVSQLROOTIDGridManager.h>
40 #ifdef WITH_BUILTIN_GRU
41 #include "KVGANILDataReader.h"
43 #include "KVRawDataReader.h"
46 #include "KVMFMDataFileReader.h"
47 #include "MFMEbyedatFrame.h"
50 #include "KVProtobufDataReader.h"
73 gMultiDetArray =
this;
86 gMultiDetArray =
this;
165 if (gMultiDetArray ==
this)
166 gMultiDetArray =
nullptr;
255 if (
de && (
de->GetDetector() !=
e)) {
367 TString uri = de_type + de_thick +
"-" + e_type + e_thick;
371 uri = de_type + de_thick +
"-" + e_type;
375 uri = de_type +
"-" + e_type + e_thick;
379 uri = de_type +
"-" + e_type;
385 uri = de_type +
"-" + e_type;
530 if (
de->GetGroup()) {
619 unique_ptr<KVSeqCollection> fGroups(
GetStructures()->GetSubListWithType(
"GROUP"));
621 TIter next(fGroups.get());
623 while ((grp = (
KVGroup*) next())) {
650 TString tabname = (myname !=
"" ?
Form(
"%s.Calibrations", myname.
Data()) :
"Calibrations");
652 KVRList* run_links =
r->GetLinks(tabname);
653 if (run_links)
Info(
"SetCalibratorParameters",
"Found %d calibrations for this run", run_links->
GetEntries());
659 TIter nxt_link(run_links);
665 Warning(
"SetCalibratorParameters",
"Got parameters for unknown detector: %s", dbps->
GetName());
674 while (!clop.
End()) {
687 catch (std::exception&
e) {
688 Error(
"SetCalibratorParameters",
703 Warning(
"SetCalibratorParameters",
"Wrong number of parameters (%d) for calibrator %s for detector %s : should be %d",
761 if (s.IsNull())
continue;
794 if (!fired_dets || !fired_dets->
GetEntries()) {
799 TIter next_det(fired_dets);
808 unique_ptr<KVSeqCollection> fGroups(
GetStructures()->GetSubListWithType(
"GROUP"));
810 TIter next_grp(fGroups.get());
812 while ((grp = (
KVGroup*) next_grp())) {
874 if (gDataSetManager && (!gDataSet || (gDataSet != gDataSetManager->
GetDataSet(dataset_name)))) {
875 printf(
"Info in <KVMultiDetArray::MakeMultiDetector>: Changing dataset\n");
879 if (gMultiDetArray && gMultiDetArray->
GetDataSet() != dataset_name) {
880 printf(
"Info in <KVMultiDetArray::MakeMultiDetector>: Deleting existing array %s\n", gMultiDetArray->
GetName());
881 if (gIDGridManager) {
882 delete gIDGridManager;
883 gIDGridManager =
nullptr;
885 delete gMultiDetArray;
886 gMultiDetArray =
nullptr;
893 if (!gMultiDetArray) {
903 auto codes = GetDataSetEnv<KVString>(dataset_name,
Form(
"%s.ReconstructedNuclei.AcceptIDCodes", mda->
GetName()));
905 codes = GetDataSetEnv<KVString>(dataset_name,
Form(
"%s.ReconstructedNuclei.AcceptECodes", mda->
GetName()));
922 filepath +=
"/idgrids_DB";
928 auto index_multiplier = gDataSet->
GetDataSetEnv(
"DataSet.RunFileIndexMultiplier.raw", 1);
932 if (n_grids_to_write) {
935 printf(
"Info in <KVMultiDetArray::MakeMultiDetector>: Saving %d grids in SQL-ROOT database file %s\n",
936 n_grids_to_write, filepath.
Data());
940 if (!db) db = gExpDB;
943 auto rl =
gr->GetRuns().GetListDividedBy(index_multiplier);
944 if (rl.IsEmpty() && db) rl = db->
GetRunList();
947 {
"IDLabel",
gr->GetIDTelescopeLabel()},
948 {
"IDTelescopes",
gr->GetParameters()->GetStringValue(
"IDTelescopes")},
949 {
"VarX",
gr->GetVarX()},
950 {
"VarY",
gr->GetVarY()},
951 {
"Runlist",
gr->GetRunList()},
955 if (!(n_grids_to_write % 1000)) printf(
"Info in <KVMultiDetArray::MakeMultiDetector>: ...%d grids left...\n",
964 mda = gMultiDetArray;
999 auto alt_updater = KVBase::GetDataSetEnv<KVString>(
fDataSet,
Form(
"ExpSetUp.Updater.%s",
GetName()));
1032 if (gDataSetManager)
1058 if (gDataSetManager)
1084 if (gDataSetManager)
1150 filepath +=
"/idgrids_DB";
1153 delete gIDGridManager;
1160 auto id_labels = GetDataSetEnv<KVString>(
fDataSet,
"ActiveIdentifications");
1162 Info(
"SetIdentifications",
"No active identifications");
1166 id_labels.Begin(
" ");
1169 while (!id_labels.End()) {
1175 Info(
"SetIdentifications",
"Initialising %s identifications...", idt->
GetLabel());
1177 Info(
"SetIdentifications",
"OK");
1184 Warning(
"SetIdentfications",
"No telescopes found with labels given in %s.ActiveIdentifications list: %s",
1185 gDataSet->
GetName(), id_labels.Data());
1261 cout << endl <<
"-----STATUS OF IDENTIFICATION TELESCOPES";
1264 cout <<
"------" << endl << endl;
1273 if (id_labels ==
"") id_labels +=
type->GetString().Data();
1275 id_labels +=
Form(
" %s",
type->GetString().Data());
1279 if (id_labels ==
"") {
1280 cout <<
" *** No active identifications *** " << endl;
1284 unique_ptr<TObjArray> toks(id_labels.
Tokenize(
' '));
1290 TList* id_type_list = 0;
1291 while ((id_type_list = (
TList*)next_type())) {
1293 cout <<
" *** " << id_type_list->
GetName() <<
" Identifications -------------------" << endl;
1294 if (!toks->FindObject(id_type_list->
GetName())) {
1295 cout <<
" [NOT ACTIVE]" << endl;
1299 TList* print_list = 0;
1303 if (Nok < Notok) print_list = ok_list;
1304 else print_list = notok_list;
1306 if (Nok && (!Notok)) cout <<
" ALL telescopes are OK" << endl;
1307 else if (Notok && (!Nok)) cout <<
" NO telescopes are OK" << endl;
1309 cout <<
" " << ok_list->
GetEntries() <<
" telescopes are OK, "
1310 << notok_list->
GetEntries() <<
" telescopes are NOT OK" << endl;
1311 cout <<
" " << print_list->
GetName() <<
" :" << endl;
1312 TIter it(print_list);
1315 while ((ob = it())) cout <<
"," << ob->
GetName();
1357 if (!id_type_list) {
1358 id_type_list =
new TList;
1457 type_list =
new TList;
1468 bool det_is_cal=
false;
1469 for(
int z=0; z<100; ++z)
1498 Info(
"PrintCalibStatusOfDetectors",
"Cannot know status without knowing RUN NUMBER");
1502 cout << endl <<
"-----------STATUS OF CALIBRATIONS FOR RUN "
1509 TList* id_type_list = 0;
1510 while ((id_type_list = (
TList*)next_type())) {
1512 cout <<
" *** " << id_type_list->
GetName() <<
" Detectors -------------------" << endl;
1515 TList* print_list = 0;
1519 if (Nok < Notok) print_list = ok_list;
1520 else print_list = notok_list;
1522 if (Nok && (!Notok)) cout <<
" ALL calibrations are OK" << endl;
1523 else if (Notok && (!Nok)) cout <<
" NO calibrations are OK" << endl;
1525 cout <<
" " << ok_list->
GetEntries() <<
" calibrations are OK, "
1526 << notok_list->
GetEntries() <<
" calibrations are NOT OK" << endl;
1527 cout <<
" " << print_list->
GetName() <<
" :" << endl;
1528 TIter it(print_list);
1531 while ((ob = it())) cout <<
"," << ob->
GetName();
1641 auto find_a_file = [
this](
const TString & _base_filename) {
1655 auto fullpath = find_a_file(
"DetectorThicknessFiles.dat");
1656 if (!fullpath.IsNull()) {
1668 fullpath = find_a_file(
"DetectorThicknesses.dat");
1715 Error(
"SetDetectorThicknesses",
"Problem opening file %s", fullpath.
Data());
1718 Info(
"SetDetectorThicknesses",
"Setting thicknesses of detectors from file %s", fullpath.
Data());
1737 abs->SetThickness(thick);
1838 trans.
SetDz(distance) ;
1840 if (postTrans)
h = (*postTrans) * rot * trans ;
1841 else h = rot * trans;
1866 if (!
gr->GetRuns().Contains((
Int_t) run))
1872 TIter nxtid(
gr->GetIDTelescopes());
1890 gr->ClearListOfTelescopes();
1891 if (
gr->GetParameters()->HasParameter(
"IDTelescopes")) {
1892 KVString tel_list =
gr->GetParameters()->GetStringValue(
"IDTelescopes");
1893 tel_list.
Begin(
",");
1894 while (!tel_list.
End()) {
1897 if (idt)
gr->AddIDTelescope(idt);
1928 if (opt.
Next() ==
"tracks") {
1971 name.ReplaceAll(
"-",
"_");
1989 name.ReplaceAll(
"-",
"_");
2021 TIter it(groups.get());
2024 Info(
"CalculateReconstructionTrajectories",
"Calculating trajectories for particle reconstruction:");
2026 std::cout <<
"\xd" <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::flush;
2028 ntr +=
group->CalculateReconstructionTrajectories();
2030 std::cout <<
"\xd" <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::flush;
2033 std::cout <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::endl;
2035 std::cout << std::endl;
2055 Info(
"DeduceIdentificationTelescopesFromGeometry",
"Calculating...");
2057 std::cout <<
"\xd" <<
" -- created " << count <<
" telescopes" << std::flush;
2067 std::cout <<
"\xd" <<
" -- created " << count <<
" telescopes" << std::flush;
2071 std::cout <<
" -- created " << count <<
" telescopes" << std::endl;
2073 std::cout << std::endl;
2092 int len_tr = tr->
GetN();
2096 if ((tr2 != tr) && (len_tr < tr2->GetN()) && (tr2->
ContainsPath(tr))) {
2104 TIter it_dup(&duplicates);
2108 Info(
"AssociateTrajectoriesAndNodes",
"Removed %d duplicated sub-trajectories", duplicates.
GetEntries());
2123 if (
N->GetNTraj() > 1) {
2126 multitraj_nodes.
Add(
N);
2127 TIter tr(
N->GetTrajectories());
2130 if (tried_trajectories.
FindObject(traj))
continue;
2131 tried_trajectories.
Add(traj);
2135 detectors_of_group.
Add(node);
2141 else if (
N->GetNTraj() == 1) {
2145 if (tried_trajectories.
FindObject(traj))
return;
2146 tried_trajectories.
Add(traj);
2150 detectors_of_group.
Add(node);
2156 detectors_of_group.
Add(
N);
2205 #ifdef WITH_BUILTIN_GRU
2206 if (
r->GetDataFormat() ==
"EBYEDAT")
2224 Info(
"DeduceGroupsFromTrajectories",
"Deducing groups of detectors from trajectories");
2225 Int_t number_of_groups = 0;
2228 if (stl.get() && stl->GetEntries()) {
2229 Info(
"DeduceGroupsFromTrajectories",
"Deleting existing %d groups in array", stl->GetEntries());
2231 Info(
"DeduceGroupsFromTrajectories",
"Done");
2240 if (!detectors_of_group.
GetEntries())
continue;
2244 TIter next_node(&detectors_of_group);
2250 Info(
"DeduceGroupsFromTrajectories",
"Filling group trajectory lists");
2273 DetNames.
Begin(
"/");
2274 while (!DetNames.
End()) {
2276 if (det) DetList->
Add(det);
2330 #ifdef WITH_BUILTIN_GRU
2461 #ifdef WITH_PROTOBUF
2466 #ifdef WITH_BUILTIN_GRU
2544 if (detname !=
"") sig_name =
Form(
"%s.%s", detname.
Data(), sig_type.
Data());
2545 else sig_name = sig_type;
2575 int N =
l.GetNpar();
2576 for (
int i = 0; i <
N; ++i) {
2580 if (
name.BeginsWith(
"ACQPAR")) {
2583 int dots =
name.GetNValues(
".");
2584 bool with_det = (dots == 4);
2585 assert(with_det || (dots == 3));
2593 det_name =
name.Next();
2594 sig_type =
name.Next();
2598 sig_type =
name.Next();
2658 if (basic_name ==
"") {
2659 Info(meth,
"No name found for \"%s\" file", keyw);
2666 Info(meth,
"\tNo file found ...");
2680 return unique_ptr<KVFileReader>();
2683 if (!fr->OpenFileToRead(fp.
Data())) {
2684 Error(meth,
"Error in opening file %s", fp.
Data());
2688 Info(meth,
"Reading %s file", fp.
Data());
2699 unique_ptr<KVFileReader> fr =
GetKVFileReader(db,
"ReadCalibrationFiles()",
"CalibrationFiles");
2704 while (fr->IsOK()) {
2706 if (fr->GetCurrentLine().BeginsWith(
"#") || fr->GetCurrentLine() ==
"") {}
2708 ReadCalibFile(fr->GetCurrentLine().Data(), db, calib_table);
2812 Info(
"ReadCalibFile",
"%s does not exist or not found",
filename);
2816 Info(
"ReadCalibFile",
"file : %s found", fullpath.
Data());
2822 KVString opt_list =
"RunList SignalIn SignalOut CalibType CalibClass CalibOptions ZRange";
2823 opt_list.
Begin(
" ");
2824 while (!opt_list.
End()) {
2832 Warning(
"ReadCalibFile",
"Calibration has 'Runlist' parameter (ignored): %s, did you mean 'RunList'?", env.
GetValue(
"Runlist",
""));
2836 Error(
"ReadCalibFile",
"No input signal defined : SignalIn");
2840 Error(
"ReadCalibFile",
"No output signal defined : SignalOut");
2844 Error(
"ReadCalibFile",
"No calibration type defined : CalibType");
2851 if (ph) calibrator_class = ph->
GetClass();
2853 Error(
"ReadCalibFile",
"No calibrator plugin of type %s", options.
GetStringValue(
"CalibClass"));
2867 Info(
"ReadCalibFile",
"Calibration used for runs %s", run_list.
AsString());
2870 Info(
"ReadCalibFile",
"Calibration used for all runs in database");
2885 TString param_delimiters =
":, \t";
2896 if (clop !=
"") par->
SetParameter(
"CalibOptions", clop);
2899 lval.
Begin(param_delimiters);
2900 while (!lval.
End()) {
2910 for(
auto p_det : *det_list)
2931 if (mfmreader.IsFrameReadMerge()) {
2952 while (mergeframe.ReadNextFrame()) {
2984 if (mfmframe.GetFrameType() == MFM_MESYTEC_FRAME_TYPE)
2987 if (mfmframe.GetFrameType() == MFM_EBY_EN_FRAME_TYPE
2988 || mfmframe.GetFrameType() == MFM_EBY_TS_FRAME_TYPE
2989 || mfmframe.GetFrameType() == MFM_EBY_EN_TS_FRAME_TYPE)
3025 #ifdef WITH_PROTOBUF
3071 Int_t ndet_absent = 0;
3073 TString absent_dets, ooo_dets;
3083 if (ndet_absent) absent_dets +=
",";
3084 absent_dets += det->
GetName();
3099 if (ndet_ooo) ooo_dets +=
",";
3110 if (ndet_absent)
Info(
"CheckStatusOfDetectors",
"%d detectors absent during run : %s", ndet_absent, absent_dets.
Data());
3111 else Info(
"CheckStatusOfDetectors",
"All detectors present during run");
3112 if (ndet_ooo)
Info(
"CheckStatusOfDetectors",
"%d detectors malfunctioned during run : %s", ndet_ooo, ooo_dets.
Data());
3113 else Info(
"CheckStatusOfDetectors",
"All detectors functioning during run");
3161 Info(
"ReadOoODetectors()",
"Reading lists of out-of-order detectors...");
3162 auto fOoODet = db->
AddTable(
Form(
"%s.OoO Detectors",
GetName()),
"Name of out of order detectors");
3175 while (!srec.
End()) {
3177 dbrec->
AddKey(
"Runs",
"List of Runs");
3178 fOoODet->AddRecord(dbrec);
3184 dbrec->
AddKey(
"Runs",
"List of Runs");
3185 fOoODet->AddRecord(dbrec);
3226 Info(
"ReadAbsentDetectors()",
"Reading lists of absent/dismounted detectors... file=[%s]", fullpath.
Data());
3227 auto fAbsDet = db->
AddTable(
Form(
"%s.Absent Detectors",
GetName()),
"Name of out of order detectors");
3240 while (!srec.
End()) {
3242 dbrec->
AddKey(
"Runs",
"List of Runs");
3243 fAbsDet->AddRecord(dbrec);
3249 dbrec->
AddKey(
"Runs",
"List of Runs");
3250 fAbsDet->AddRecord(dbrec);
winID h TVirtualViewer3D TVirtualGLPainter p
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 filename
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 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 UChar_t Atom_t typelist
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,...)
void SetLabel(const Char_t *lab)
virtual const Char_t * GetType() const
void Error(const char *method, const char *msgfmt,...) const override
static const Char_t * GetWORKDIRFilePath(const Char_t *namefile="")
const Char_t * GetLabel() const
static bool is_gnuinstall()
void Print(Option_t *option="") const override
virtual void SetType(const Char_t *str)
static Bool_t SearchKVFile(const Char_t *name, TString &fullpath, const Char_t *kvsubdir="")
static TPluginHandler * LoadPlugin(const Char_t *base, const Char_t *uri="0")
void Warning(const char *method, const char *msgfmt,...) const override
Base class for all detector calibrations.
virtual Int_t GetNumberParams() const
virtual void SetParameter(int i, Double_t par_val)
virtual void SetOptions(const KVNameValueList &)
void SetStatus(Bool_t ready)
void SetOutputSignalType(const TString &type)
void SetInputSignalType(const TString &type)
static KVCalibrator * MakeCalibrator(const Char_t *type)
To store calibration parameters in a database ,.
TString GetStringParameter(const TString &name) const
Double_t GetParameter(UShort_t i=0) const
Bool_t HasParameter(const TString &name) const
void Print(Option_t *option="") const override
Int_t GetParamNumber() const
void SetParameter(UShort_t i, Double_t val)
const KVNameValueList & GetParameters() const
Record folder for the database.
virtual Bool_t AddKey(KVDBKey *key, Bool_t check=kTRUE)
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 AddRecord(KVDBRecord *add)
static Bool_t IsRunningBatchAnalysis()
virtual Bool_t AddTable(KVDBTable *table)
Manage all datasets contained in a given data repository.
virtual Bool_t Init(KVDataRepository *=0)
KVDataSet * GetDataSet(Int_t) const
Return pointer to DataSet using index in list of all datasets, index>=0.
Manage an experimental dataset corresponding to a given experiment or campaign.
TString GetFullPathToDataSetFile(const Char_t *filename) const
const Char_t * GetDataSetDir() const
Bool_t HasCalibIdentInfos() const
Bool_t DataBaseUpdateInProgress() const
ValType GetDataSetEnv(const Char_t *type, const ValType &defval={}) const
static Bool_t FindDataSetFile(const TString &dataset, const Char_t *filename)
List of hit groups in a multidetector array.
void AddGroup(KVGroup *grp)
Base class for output signal data produced by a detector.
virtual void SetValue(Double_t x)
virtual Double_t GetValue(const KVNameValueList ¶ms="") const
TString GetFullName() const
void SetFired(Bool_t yes=true)
Base class for detector geometry description, interface to energy-loss calculations.
void SetThickness(Double_t thick) override
KVGroup * GetGroup() const
void AddDetectorSignal(KVDetectorSignal *ds)
Bool_t IsCalibrated(const KVNameValueList ¶ms={}) const
void Print(Option_t *option="") const override
KVMaterial * GetAbsorber(Int_t i) const
Returns pointer to the i-th absorber in the detector (i=0 first absorber, i=1 second,...
virtual KVDetectorSignal * GetDetectorSignal(const KVString &type) const
void SetDetecting(Bool_t yes=kTRUE)
virtual void RemoveCalibrators()
KVGeoDetectorNode * GetNode()
virtual Bool_t IsPresent() const
Bool_t AddCalibrator(KVCalibrator *cal, const KVNameValueList &opts="")
void SetPresent(Bool_t yes=kTRUE)
Base class to describe database of an experiment ,,.
void SetDBType(const TString &s)
TString GetCalibFileName(const Char_t *type) const
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
Handle reading columns of numeric data in text files.
KVString GetCurrentLine()
ReadStatus ReadLine(const KVString &pattern="")
Bool_t OpenFileToRead(const KVString &filename)
Reads GANIL acquisition files (EBYEDAT)
Path taken by particles through multidetector geometry.
KVGeoDetectorNode * GetNextNode() const
KVSeqCollection * AccessIDTelescopeList()
void AddToNodes()
Add reference to this trajectory to all nodes on it.
void IterateFrom(const KVGeoDetectorNode *node0=nullptr) const
KVGeoDetectorNode * GetNodeInFront(const KVGeoDetectorNode *n) const
Bool_t ContainsPath(const KVGeoDNTrajectory *other) const
KVGeoDetectorNode * GetNodeAt(Int_t i) const
Information on relative positions of detectors & particle trajectories.
KVDetector * GetDetector() const
Base class for propagation of particles through array geometry.
void DrawTracks(KVNumberList *=nullptr)
Base class describing elements of array geometry.
virtual Bool_t Fired(Option_t *opt="any") const
void SetOwnsDetectors(Bool_t yes=kTRUE)
virtual KVDetector * GetDetector(const Char_t *name) const
Return detector in this structure with given name.
const KVSeqCollection * GetDetectors() const
const KVSeqCollection * GetStructures() const
virtual void Add(KVBase *)
KVSeqCollection * GetStructureTypeList(const Char_t *type) const
void ClearStructures(const Char_t *type="")
KVSeqCollection * GetDetectorNameList(const Char_t *name) const
const KVSeqCollection * GetParents() const
Base class for particle reconstruction in one group of a detector array.
static KVGroupReconstructor * Factory(const TString &plugin="", const KVGroup *g=nullptr)
Group of detectors which can be treated independently of all others in array.
void SetNumber(UInt_t num) override
void AddTrajectory(KVGeoDNTrajectory *t)
void Reset(Option_t *opt="")
Extended version of ROOT THashList.
Base class for particle identification in a 2D map.
Handles a stock of identification grids to be used by one or more identification telescopes.
virtual void LoadGridsForRun(UInt_t)
KVSeqCollection * GetGrids()
Bool_t ReadAsciiFile(const Char_t *filename)
const TList * GetLastReadGrids() const
virtual bool IsSQLROOT() const
Base class for all detectors or associations of detectors in array which can identify charged particl...
virtual Double_t GetIDMapY(Option_t *opt="")
virtual Bool_t IsReadyForID()
KVIDGrid * CalculateDeltaE_EGrid(const KVNameValueList &AperZ, Int_t npoints=30, Double_t xfactor=1.)
void SetGroup(KVGroup *kvg)
virtual Double_t GetIDMapX(Option_t *opt="")
static KVIDTelescope * MakeIDTelescope(const Char_t *name)
virtual Bool_t SetIdentificationParameters(const KVMultiDetArray *)
void SetIDGrid(KVIDGraph *)
virtual void AddDetector(KVDetector *d)
virtual void Initialize(void)
Extended TList class which owns its objects by default.
Read MFM format acquisition data.
Description of physical materials used to construct detectors & targets; interface to range tables.
static KVIonRangeTable * GetRangeTable()
Base class for describing the geometry of a detector array.
const KVSeqCollection * GetFiredSignals() const
KVNumberList fAcceptECodes
list of acceptable calibration codes for reconstructed nuclei
bool try_a_singleIDtelescope(TString uri, KVDetector *d, TCollection *l)
KVUniqueNameList fExtraRawDataSignals
any signals read from raw data not associated with a detector
KVSeqCollection * GetListOfIDTelescopes() const
void FillListOfIDTelescopes(KVIDGraph *gr) const
virtual Bool_t handle_raw_data_event_mfmframe_ebyedat(const MFMEbyedatFrame &)
Read a raw data event from a EBYEDAT MFM Frame.
KVNumberList fAcceptIDCodes
list of acceptable identification codes for reconstructed nuclei
void SetDetectorThicknesses()
virtual void GetDetectorEvent(KVDetectorEvent *detev, const TSeqCollection *fired_params=0)
virtual Bool_t handle_raw_data_event_protobuf(KVProtobufDataReader &)
void MakeHistogramsForAllIDTelescopes(KVSeqCollection *list, Int_t dimension=100)
TList * GetStatusOfIDTelescopes()
int try_all_singleID_telescopes(KVDetector *d, TCollection *l)
static Bool_t fCloseGeometryNow
void Draw(Option_t *option="") override
virtual void DeduceIdentificationTelescopesFromGeometry()
static KVMultiDetArray * MakeMultiDetector(const Char_t *dataset_name, Int_t run=-1, TString classname="KVMultiDetArray", KVExpDB *db=nullptr)
std::unique_ptr< KVFileReader > GetKVFileReader(KVExpDB *db, const Char_t *meth, const Char_t *keyw)
virtual Double_t GetTargetEnergyLossCorrection(KVReconstructedNucleus *)
virtual Bool_t handle_raw_data_event_mfmmergeframe(const MFMMergeFrameManager &)
virtual Bool_t handle_raw_data_event_mfmfile(MFMBufferReader &)
void ReadOoODetectors(KVExpDB *db)
Bool_t fHandledRawData
set to true if multidetector handles data in last call to HandleRawData
KVSeqCollection * GetIDTelescopesWithType(const Char_t *type)
TList * fCalibStatusDets
used by GetStatusIDTelescopes
KVDetectorEvent * fHitGroups
list of hit groups in simulation
void ReadAbsentDetectors(KVExpDB *db)
void RecursiveTrajectoryClustering(KVGeoDetectorNode *N, KVUniqueNameList &tried_trajectories, KVUniqueNameList &multitraj_nodes, KVUniqueNameList &detectors_of_group)
KVSeqCollection * fIDTelescopes
deltaE-E telescopes in groups
UInt_t fCurrentRun
Number of the current run used to call SetParameters.
static Bool_t fMakeMultiDetectorSetParameters
void Clear(Option_t *opt="") override
void CalculateIdentificationGrids()
For each IDtelescope in array, calculate an identification grid.
void prepare_to_handle_new_raw_data()
reset acquisition parameters etc. before reading new raw data event
int try_all_doubleID_telescopes(KVDetector *de, KVDetector *e, TCollection *l)
void FillHistogramsForAllIDTelescopes(KVSeqCollection *list)
Fill TH2F histograms for all IDTelescopes of the array.
virtual void set_detector_thicknesses(const TString &)
Bool_t ReadGridsFromAsciiFile(const Char_t *) const
virtual void InitialiseRawDataReading(KVRawDataReader *)
virtual void SetExpectedDetectorSignalNames()
virtual void SetParameters(UInt_t n, Bool_t physics_parameters_only=kFALSE)
virtual void SetDetectorParametersForRun(KVDBRun *, const TString &="")
virtual void copy_fired_parameters_to_recon_param_list()
TString GetDataSet() const
KVGroup * GetGroup(const Char_t *name) const
static TGeoHMatrix * GetVolumePositioningMatrix(Double_t distance, Double_t theta, Double_t phi, TGeoTranslation *postTrans=nullptr)
KVGeoNavigator * GetNavigator() const
KVUpDater * fUpDater
used to set parameters for multidetector
void SetGeometry(TGeoManager *)
virtual void MakeCalibrationTables(KVExpDB *)
virtual ~KVMultiDetArray()
destroy (delete) the MDA and all the associated structure, detectors etc.
virtual void SetRunIdentificationParameters(UShort_t n)
Bool_t HandleRawDataBuffer(MFMBufferReader &)
TString GetFileName(KVExpDB *, const Char_t *meth, const Char_t *keyw)
void CheckStatusOfDetectors(KVDBRun *, const TString &="")
virtual void PerformClosedROOTGeometryOperations()
UInt_t GetCurrentRunNumber() const
void SetDetectorTransparency(Char_t)
Modify the transparency of detector volumes in OpenGL view.
virtual KVGroupReconstructor * GetReconstructorForGroup(const KVGroup *) const
virtual void SetIdentifications()
static Bool_t fMakeMultiDetectorPhysicsParametersOnly
TList * fStatusIDTelescopes
used by GetStatusIDTelescopes
Bool_t fSimMode
=kTRUE in "simulation mode" (use for calculating response to simulated events)
virtual void Build(Int_t run=-1)
virtual void FillDetectorList(KVReconstructedNucleus *rnuc, KVHashList *DetList, const KVString &DetNames)
virtual Bool_t handle_raw_data_event_ebyedat(KVGANILDataReader &)
General method for reading raw data in old GANIL ebyedat format.
const TSeqCollection * GetTrajectories() const
static Bool_t fBuildTarget
KVTarget * fTarget
target used in experiment
virtual void set_up_telescope(KVDetector *de, KVDetector *e, KVIDTelescope *idt, TCollection *l)
Set up detectors in de-e identification telescope and add to fIDTelescopes and to l.
TList * GetCalibrationStatusOfDetectors()
bool try_upper_and_lower_singleIDtelescope(TString uri, KVDetector *d, TCollection *l)
virtual Bool_t handle_raw_data_event_mfmframe(const MFMCommonFrame &)
TGeoManager * GetGeometry() const
Return pointer to the (ROOT) geometry of the array.
KVRawDataReader * fRawDataReader
last raw data reader object used in call to HandleRawData
virtual void SetRawDataFromReconEvent(KVNameValueList &)
void add_and_set_detector_signal(KVDetector *det, KVString detname, Double_t sig_data, KVString sig_type)
static Int_t fMakeMultiDetectorRunNumber
virtual Bool_t HandleRawDataEvent(KVRawDataReader *)
virtual void InitializeIDTelescopes()
KVUniqueNameList fFiredDetectors
list of fired detectors after reading raw data event
virtual void RenumberGroups()
virtual void SetRunCalibrationParameters(UShort_t n)
void PrintStatusOfIDTelescopes()
bool try_upper_and_lower_doubleIDtelescope(TString uri, KVDetector *de, KVDetector *e, TCollection *l)
void PrintCalibStatusOfDetectors()
void ReadCalibrationFiles(KVExpDB *db)
virtual void SetCalibratorParameters(KVDBRun *, const TString &="")
Int_t fFilterType
type of filtering (used by DetectEvent)
virtual void SetPartSeedCond(const Char_t *cond)
std::unique_ptr< KVGeoNavigator > fNavigator
for propagating particles through array geometry
void SetGridsInTelescopes(UInt_t run)
KVIDTelescope * GetIDTelescope(const Char_t *name) const
Return pointer to DeltaE-E ID Telescope with "name".
void CalculateReconstructionTrajectories()
KVUniqueNameList fTrajectories
list of all possible trajectories through detectors of array
virtual void SetIDCodeForIDTelescope(KVIDTelescope *) const
virtual void SetReconParametersInEvent(KVReconstructedEvent *) const
Copy any parameters in fReconParameters in to the reconstructed event parameter list.
KVNameValueList fReconParameters
general purpose list of parameters for storing information on data reconstruction
TString fDataSet
name of associated dataset, used with MakeMultiDetector()
virtual void AssociateTrajectoriesAndNodes()
void ReadCalibFile(const Char_t *filename, KVExpDB *db, KVDBTable *calib_table)
virtual void AcceptParticleForAnalysis(KVReconstructedNucleus *) const
Int_t GetIDTelescopes(KVGeoDetectorNode *, KVDetector *, TCollection *list)
void SetNavigator(KVGeoNavigator *geo)
KVMultiDetArray()
Default constructor.
KVUniqueNameList GetIDTelescopeTypes()
void DeduceGroupsFromTrajectories()
virtual void set_up_single_stage_telescope(KVDetector *det, KVIDTelescope *idt, TCollection *l)
Set up detector in single-stage identification telescope and add to fIDTelescopes and to l.
bool try_a_doubleIDtelescope(TString uri, KVDetector *de, KVDetector *e, TCollection *l)
virtual Bool_t handle_raw_data_event_mfmframe_mesytec_mdpp(const MFMMesytecMDPPFrame &)
Read a raw data event from a Mesytec MFM Frame.
KVUnownedList fFiredSignals
list of fired signals after reading raw data event
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
void SetValue(const Char_t *name, value_type value)
void Clear(Option_t *opt="") override
const Char_t * GetStringValue(const Char_t *name) const
Bool_t HasParameter(const Char_t *name) const
TString GetTStringValue(const Char_t *name) const
A generic named parameter storing values of different types.
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
const Char_t * AsString(Int_t maxchars=0) const
void Set(const TString &l)
void SetIsOK(Bool_t flag=kTRUE)
Double_t GetEnergy() const
Read Google Protobuf DAQ files.
Wrapper for TRefArray adding some functionality.
KVBase * FindObject(const Char_t *name, const Char_t *type) const
Propagate particles through array geometry calculating energy losses.
Abstract base class for reading raw (DAQ) data.
virtual TString GetDataFormat() const =0
Event containing KVReconstructedNucleus nuclei reconstructed from hits in detectors.
Nuclei reconstructed from data measured by a detector array .
virtual Int_t GetECode() const
virtual Int_t GetIDCode() const
Combine ROOT file containing objects with SQLite database with info on the objects.
ID grid manager using KVSQLROOTFile backend.
KaliVeda extensions to ROOT collection classes.
virtual TObject * FindObjectByLabel(const Char_t *) const
T * get_object(const TString &name) const
TObject * Remove(TObject *obj) override
Remove object from list.
void Add(TObject *obj) override
TObject * FindObject(const char *name) const override
KVSeqCollection * GetSubListWithType(const Char_t *retvalue) const
void Clear(Option_t *option="") override
virtual void SetCleanup(Bool_t enable=kTRUE)
void SetOwner(Bool_t enable=kTRUE) override
void Delete(Option_t *option="") override
KVSeqCollection * GetSubListWithLabel(const Char_t *retvalue) const
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
Int_t GetNValues(TString delim) const
Double_t GetParticleEIncFromERes(KVNucleus *, TVector3 *norm=0) override
void Clear(Option_t *opt="") override
Optimised list in which named objects can only be placed once.
void Add(TObject *obj) override
Base class implementing necessary methods for setting multidetector parameters for each run of the cu...
virtual void SetParameters(UInt_t, Bool_t physics_parameters_only=kFALSE)
static KVUpDater * MakeUpDater(const Char_t *uri, KVMultiDetArray *)
virtual void SetCalibrationParameters(UInt_t)
Set calibration parameters for this run.
virtual void SetIdentificationParameters(UInt_t)
void SetName(const char *name)
const char * GetName() const override
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
Bool_t Contains(const char *name) const
THashList * GetTable() const
virtual const char * GetValue(const char *name, const char *dflt) const
virtual Int_t ReadFile(const char *fname, EEnvLevel level)
Bool_t Defined(const char *name) const
void SetStyle(Short_t st)
void SetCurrentCamera(ECameraType camera)
void SetSmoothPoints(Bool_t s)
void SetSmoothLines(Bool_t s)
TGeoVolume * GetTopVolume() const
void SetAngles(Double_t phi, Double_t theta, Double_t psi)
void SetDz(Double_t dz) override
void Draw(Option_t *option="") override
void SetTransparency(Char_t transparency=0)
virtual Int_t Fill(const char *name, Double_t w)
TObject * FindObject(const char *name) const override
void Add(TObject *obj) override
void Delete(Option_t *option="") override
TObject * At(Int_t idx) const override
virtual void SetTitle(const char *title="")
const char * GetName() const override
const char * GetTitle() const override
virtual void SetName(const char *name)
TClass * IsA() const override
void AbstractMethod(const char *method) const
virtual const char * GetName() const
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Info(const char *method, const char *msgfmt,...) const
const char * GetClass() const
Longptr_t ExecPlugin(int nargs)
Int_t GetEntries() const override
const char * Data() const
TObjArray * Tokenize(const TString &delim) const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Prepend(char c, Ssiz_t rep=1)
void Form(const char *fmt,...)
TString & Remove(EStripType s, char c)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
RVec< PromoteType< T > > abs(const RVec< T > &v)