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"
58 Bool_t KVMultiDetArray::fMakeMultiDetectorSetParameters =
kTRUE;
59 Bool_t KVMultiDetArray::fMakeMultiDetectorPhysicsParametersOnly =
kFALSE;
60 Int_t KVMultiDetArray::fMakeMultiDetectorRunNumber = -1;
73 gMultiDetArray =
this;
86 gMultiDetArray =
this;
125 fStatusIDTelescopes = 0;
126 fCalibStatusDets = 0;
141 fRawDataReader =
nullptr;
142 fHandledRawData =
false;
161 delete fIDTelescopes;
165 if (gMultiDetArray ==
this)
166 gMultiDetArray =
nullptr;
168 if (fStatusIDTelescopes) {
169 fStatusIDTelescopes->
Delete();
170 delete fStatusIDTelescopes;
171 fStatusIDTelescopes = 0;
173 if (fCalibStatusDets) {
174 fCalibStatusDets->
Delete();
175 delete fCalibStatusDets;
176 fCalibStatusDets = 0;
251 if (fDataSet ==
"" && gDataSet) fDataSet = gDataSet->
GetName();
254 if (
e->IsOK()) ntels += try_all_singleID_telescopes(e, list);
255 if (
de && (
de->GetDetector() != e)) {
256 if (
e->IsOK() &&
de->GetDetector()->IsOK()) ntels += try_all_doubleID_telescopes(
de->GetDetector(), e, list);
257 if (
de->GetDetector()->IsOK()) ntels += try_all_singleID_telescopes(
de->GetDetector(), list);
304 if (!(ntels += try_upper_and_lower_singleIDtelescope(uri, d, l))) {
307 ntels += try_upper_and_lower_singleIDtelescope(uri, d, l);
367 TString uri = de_type + de_thick +
"-" + e_type + e_thick;
369 if (try_upper_and_lower_doubleIDtelescope(uri,
de, e, l))
return 1;
371 uri = de_type + de_thick +
"-" + e_type;
373 if (try_upper_and_lower_doubleIDtelescope(uri,
de, e, l))
return 1;
375 uri = de_type +
"-" + e_type + e_thick;
377 if (try_upper_and_lower_doubleIDtelescope(uri,
de, e, l))
return 1;
379 uri = de_type +
"-" + e_type;
381 if (try_upper_and_lower_doubleIDtelescope(uri,
de, e, l))
return 1;
385 uri = de_type +
"-" + e_type;
389 set_up_telescope(
de, e, idt, l);
413 if (try_a_singleIDtelescope(uri, d, l))
return true;
415 return try_a_singleIDtelescope(uri, d, l);
435 if (try_a_doubleIDtelescope(uri,
de, e, l))
return true;
437 return try_a_doubleIDtelescope(uri,
de, e, l);
467 set_up_single_stage_telescope(d, idt, l);
475 set_up_single_stage_telescope(d, idt, l);
505 set_up_telescope(
de, e, idt, l);
512 set_up_telescope(
de, e, idt, l);
530 if (
de->GetGroup()) {
544 fIDTelescopes->
Add(idt);
568 fIDTelescopes->
Add(idt);
580 void KVMultiDetArray::RenumberGroups()
588 while ((g = (
KVGroup*) next())) {
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);
674 while (!clop.
End()) {
687 catch (std::exception&
e) {
703 KVError::Warning(
this,
"SetCalibratorParameters",
"Wrong number of parameters (%d) for calibrator %s for detector %s : should be %d",
738 void KVMultiDetArray::SetExpectedDetectorSignalNames()
760 auto s = KVBase::GetDataSetEnv<KVString>(fDataSet.
Data(),
Form(
"%s.%s.ExpectedDetectorSignals",
GetName(), det->
GetType()));
761 if (s.IsNull())
continue;
764 det->AddDetectorSignal(s.Next(kTRUE));
794 if (!fired_dets || !fired_dets->
GetEntries()) {
795 if (fFiredDetectors.
GetEntries()) fired_dets = &fFiredDetectors;
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())) {
866 if (run > 0) fMakeMultiDetectorRunNumber = run;
867 else if (fMakeMultiDetectorRunNumber > 0) run = fMakeMultiDetectorRunNumber;
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) {
900 mda->fDataSet = dataset_name;
903 auto codes = GetDataSetEnv<KVString>(dataset_name,
Form(
"%s.ReconstructedNuclei.AcceptIDCodes", mda->
GetName()));
904 if (codes !=
"") mda->fAcceptIDCodes.
Set(codes);
905 codes = GetDataSetEnv<KVString>(dataset_name,
Form(
"%s.ReconstructedNuclei.AcceptECodes", mda->
GetName()));
906 if (codes !=
"") mda->fAcceptECodes.
Set(codes);
911 if (fMakeMultiDetectorSetParameters && !gIDGridManager->
IsSQLROOT()) {
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;
967 if (fMakeMultiDetectorSetParameters && (run > -1) && gExpDB) mda->
SetParameters(run, fMakeMultiDetectorPhysicsParametersOnly);
999 auto alt_updater = KVBase::GetDataSetEnv<KVString>(fDataSet,
Form(
"ExpSetUp.Updater.%s",
GetName()));
1003 Info(
"GetUpDater",
"updater class for dataset %s: %s", fDataSet.
Data(), fUpDater->
IsA()->
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 KVError::Warning(
this,
"SetIdentfications",
"No telescopes found with labels given in %s.ActiveIdentifications list: %s",
1185 gDataSet->
GetName(), id_labels.Data());
1207 TIter next(fIDTelescopes);
1211 SetIDCodeForIDTelescope(idt);
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(
' '));
1289 TIter next_type(fStatusIDTelescopes);
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();
1343 if (!fStatusIDTelescopes) {
1344 fStatusIDTelescopes =
new TList;
1348 fStatusIDTelescopes->
Delete();
1350 if (!fIDTelescopes || !fIDTelescopes->
GetEntries())
return fStatusIDTelescopes;
1351 TIter next(fIDTelescopes);
1357 if (!id_type_list) {
1358 id_type_list =
new TList;
1361 fStatusIDTelescopes->
Add(id_type_list);
1372 return fStatusIDTelescopes;
1389 if (!fIDTelescopes || !fIDTelescopes->
GetEntries())
return type_list;
1390 TIter next(fIDTelescopes);
1418 if (!fIDTelescopes || !fIDTelescopes->
GetEntries())
return NULL;
1442 if (!fCalibStatusDets) {
1443 fCalibStatusDets =
new TList;
1447 fCalibStatusDets->
Delete();
1449 if (!
GetDetectors()->GetEntries())
return fCalibStatusDets;
1457 type_list =
new TList;
1460 fCalibStatusDets->
Add(type_list);
1468 bool det_is_cal=
false;
1469 for(
int z=0; z<100; ++z)
1482 return fCalibStatusDets;
1498 Info(
"PrintCalibStatusOfDetectors",
"Cannot know status without knowing RUN NUMBER");
1502 cout << endl <<
"-----------STATUS OF CALIBRATIONS FOR RUN "
1508 TIter next_type(fCalibStatusDets);
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();
1597 return fNavigator.get();
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");
1669 if (!fullpath.IsNull()) set_detector_thicknesses(fullpath);
1693 void KVMultiDetArray::set_detector_thicknesses(
const TString& fullpath)
1714 if (thickdat.
ReadFile(fullpath, kEnvUser) != 0) {
1715 KVError::Error(
this,
"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->GetListOfIDTelescopes());
1890 if (
gr->GetParameters()->HasParameter(
"IDTelescopes")) {
1891 KVString tel_list =
gr->GetParameters()->GetStringValue(
"IDTelescopes");
1892 tel_list.
Begin(
",");
1893 gr->ClearListOfIDTelescopes();
1894 while (!tel_list.
End()) {
1897 if (idt)
gr->AddIDTelescope(idt);
1928 if (opt.
Next() ==
"tracks") {
1951 fNavigator.reset(geo);
1971 name.ReplaceAll(
"-",
"_");
1996 void KVMultiDetArray::CalculateReconstructionTrajectories()
2002 TIter it(groups.get());
2005 Info(
"CalculateReconstructionTrajectories",
"Calculating trajectories for particle reconstruction:");
2007 std::cout <<
"\xd" <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::flush;
2009 ntr +=
group->CalculateReconstructionTrajectories();
2011 std::cout <<
"\xd" <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::flush;
2014 std::cout <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::endl;
2016 std::cout << std::endl;
2026 void KVMultiDetArray::DeduceIdentificationTelescopesFromGeometry()
2036 Info(
"DeduceIdentificationTelescopesFromGeometry",
"Calculating...");
2038 std::cout <<
"\xd" <<
" -- created " << count <<
" telescopes" << std::flush;
2048 std::cout <<
"\xd" <<
" -- created " << count <<
" telescopes" << std::flush;
2052 std::cout <<
" -- created " << count <<
" telescopes" << std::endl;
2054 std::cout << std::endl;
2063 void KVMultiDetArray::AssociateTrajectoriesAndNodes()
2068 TIter it(&fTrajectories);
2073 int len_tr = tr->
GetN();
2074 TIter it2(&fTrajectories);
2077 if ((tr2 != tr) && (len_tr < tr2->GetN()) && (tr2->
ContainsPath(tr))) {
2085 TIter it_dup(&duplicates);
2087 fTrajectories.
Remove(tr);
2089 Info(
"AssociateTrajectoriesAndNodes",
"Removed %d duplicated sub-trajectories", duplicates.
GetEntries());
2091 Info(
"AssociateTrajectoriesAndNodes",
"Calculated %d particle trajectories", fTrajectories.
GetEntries());
2104 if (
N->GetNTraj() > 1) {
2107 multitraj_nodes.
Add(
N);
2108 TIter tr(
N->GetTrajectories());
2111 if (tried_trajectories.
FindObject(traj))
continue;
2112 tried_trajectories.
Add(traj);
2116 detectors_of_group.
Add(node);
2122 else if (
N->GetNTraj() == 1) {
2126 if (tried_trajectories.
FindObject(traj))
return;
2127 tried_trajectories.
Add(traj);
2131 detectors_of_group.
Add(node);
2137 detectors_of_group.
Add(
N);
2186 #ifdef WITH_BUILTIN_GRU
2187 if (
r->GetDataFormat() ==
"EBYEDAT")
2199 void KVMultiDetArray::DeduceGroupsFromTrajectories()
2205 Info(
"DeduceGroupsFromTrajectories",
"Deducing groups of detectors from trajectories");
2206 Int_t number_of_groups = 0;
2209 if (stl.get() && stl->GetEntries()) {
2210 Info(
"DeduceGroupsFromTrajectories",
"Deleting existing %d groups in array", stl->GetEntries());
2212 Info(
"DeduceGroupsFromTrajectories",
"Done");
2221 if (!detectors_of_group.
GetEntries())
continue;
2225 TIter next_node(&detectors_of_group);
2229 TIter tr(&fTrajectories);
2231 Info(
"DeduceGroupsFromTrajectories",
"Filling group trajectory lists");
2254 DetNames.
Begin(
"/");
2255 while (!DetNames.
End()) {
2257 if (det) DetList->
Add(det);
2311 #ifdef WITH_BUILTIN_GRU
2333 fReconParameters.
Clear();
2334 fFiredDetectors.
Clear();
2335 fHandledRawData =
false;
2337 TIter nxt(&fFiredSignals);
2343 fFiredSignals.
Clear();
2356 void KVMultiDetArray::PerformClosedROOTGeometryOperations()
2374 e->GetParameters()->Concatenate(fReconParameters);
2392 void KVMultiDetArray::copy_fired_parameters_to_recon_param_list()
2434 fRawDataReader = rawdata;
2438 fHandledRawData = handle_raw_data_event_mfmfile(
dynamic_cast<KVMFMDataFileReader&
>(*rawdata));
2442 #ifdef WITH_PROTOBUF
2443 fHandledRawData = handle_raw_data_event_protobuf(
dynamic_cast<KVProtobufDataReader&
>(*rawdata));
2447 #ifdef WITH_BUILTIN_GRU
2448 fHandledRawData = handle_raw_data_event_ebyedat(
dynamic_cast<KVGANILDataReader&
>(*rawdata));
2451 if (fHandledRawData) {
2452 copy_fired_parameters_to_recon_param_list();
2454 return fHandledRawData;
2481 ok = handle_raw_data_event_mfmfile(bufrdr);
2483 copy_fired_parameters_to_recon_param_list();
2518 det_signal = detector->AddDetectorSignal(sig_type);
2520 fFiredDetectors.
Add(detector);
2525 if (detname !=
"") sig_name =
Form(
"%s.%s", detname.
Data(), sig_type.
Data());
2526 else sig_name = sig_type;
2530 fExtraRawDataSignals.
Add(det_signal);
2536 fFiredSignals.
Add(det_signal);
2557 int N =
l->GetNpar();
2558 for (
int i = 0; i <
N; ++i) {
2562 if (
name.BeginsWith(
"ACQPAR")) {
2565 int dots =
name.GetNValues(
".");
2566 bool with_det = (dots == 4);
2567 assert(with_det || (dots == 3));
2575 det_name =
name.Next();
2576 sig_type =
name.Next();
2580 sig_type =
name.Next();
2582 add_and_set_detector_signal(det, det_name,
np->GetDouble(), sig_type);
2628 ReadOoODetectors(db);
2629 ReadAbsentDetectors(db);
2630 ReadCalibrationFiles(db);
2640 if (basic_name ==
"") {
2641 Info(meth,
"No name found for \"%s\" file", keyw);
2644 Info(meth,
"Search for %s for dataset %s ...", basic_name.
Data(), fDataSet.
Data());
2648 Info(meth,
"\tNo file found ...");
2657 unique_ptr<KVFileReader> KVMultiDetArray::GetKVFileReader(
KVExpDB* db,
const Char_t* meth,
const Char_t* keyw)
2660 TString fp = GetFileName(db, meth, keyw);
2662 return unique_ptr<KVFileReader>();
2665 if (!fr->OpenFileToRead(fp.
Data())) {
2678 void KVMultiDetArray::ReadCalibrationFiles(
KVExpDB* db)
2681 unique_ptr<KVFileReader> fr = GetKVFileReader(db,
"ReadCalibrationFiles()",
"CalibrationFiles");
2686 while (fr->IsOK()) {
2688 if (fr->GetCurrentLine().BeginsWith(
"#") || fr->GetCurrentLine() ==
"") {}
2690 ReadCalibFile(fr->GetCurrentLine().Data(), db, calib_table);
2794 Info(
"ReadCalibFile",
"%s does not exist or not found", filename);
2798 Info(
"ReadCalibFile",
"file : %s found", fullpath.
Data());
2804 KVString opt_list =
"RunList SignalIn SignalOut CalibType CalibClass CalibOptions ZRange";
2805 opt_list.
Begin(
" ");
2806 while (!opt_list.
End()) {
2814 KVError::Warning(
this,
"ReadCalibFile",
"Calibration has 'Runlist' parameter (ignored): %s, did you mean 'RunList'?", env.
GetValue(
"Runlist",
""));
2818 KVError::Error(
this,
"ReadCalibFile",
"No input signal defined : SignalIn");
2822 KVError::Error(
this,
"ReadCalibFile",
"No output signal defined : SignalOut");
2826 KVError::Error(
this,
"ReadCalibFile",
"No calibration type defined : CalibType");
2833 if (ph) calibrator_class = ph->
GetClass();
2849 Info(
"ReadCalibFile",
"Calibration used for runs %s", run_list.
AsString());
2852 Info(
"ReadCalibFile",
"Calibration used for all runs in database");
2867 TString param_delimiters =
":, \t";
2878 if (clop !=
"") par->
SetParameter(
"CalibOptions", clop);
2881 lval.Begin(param_delimiters);
2882 while (!lval.End()) {
2889 while ((rec = (
TEnvRec*)next()))
2892 for(
auto p_det : *det_list)
2893 set_calib_parameters(rec,
dynamic_cast<KVDetector*
>(p_det));
2906 Bool_t KVMultiDetArray::handle_raw_data_event_mfmfile(MFMBufferReader& mfmreader)
2913 if (mfmreader.IsFrameReadMerge()) {
2914 return handle_raw_data_event_mfmmergeframe(mfmreader.GetMergeManager());
2917 return handle_raw_data_event_mfmframe(mfmreader.GetFrameRead());
2928 Bool_t KVMultiDetArray::handle_raw_data_event_mfmmergeframe(
const MFMMergeFrameManager& mergeframe)
2934 while (mergeframe.ReadNextFrame()) {
2935 Bool_t me = handle_raw_data_event_mfmframe(mergeframe.GetFrameRead());
2954 Bool_t KVMultiDetArray::handle_raw_data_event_mfmframe(
const MFMCommonFrame& mfmframe)
2966 if (mfmframe.GetFrameType() == MFM_MESYTEC_FRAME_TYPE)
2967 return handle_raw_data_event_mfmframe_mesytec_mdpp((
const MFMMesytecMDPPFrame&)mfmframe);
2969 if (mfmframe.GetFrameType() == MFM_EBY_EN_FRAME_TYPE
2970 || mfmframe.GetFrameType() == MFM_EBY_TS_FRAME_TYPE
2971 || mfmframe.GetFrameType() == MFM_EBY_EN_TS_FRAME_TYPE)
2972 return handle_raw_data_event_mfmframe_ebyedat((
const MFMEbyedatFrame&)mfmframe);
2982 Bool_t KVMultiDetArray::handle_raw_data_event_mfmframe_ebyedat(
const MFMEbyedatFrame&)
2996 Bool_t KVMultiDetArray::handle_raw_data_event_mfmframe_mesytec_mdpp(
const MFMMesytecMDPPFrame&)
3007 #ifdef WITH_PROTOBUF
3053 Int_t ndet_absent = 0;
3055 TString absent_dets, ooo_dets;
3065 if (ndet_absent) absent_dets +=
",";
3066 absent_dets += det->
GetName();
3081 if (ndet_ooo) ooo_dets +=
",";
3092 if (ndet_absent)
Info(
"CheckStatusOfDetectors",
"%d detectors absent during run : %s", ndet_absent, absent_dets.
Data());
3093 else Info(
"CheckStatusOfDetectors",
"All detectors present during run");
3094 if (ndet_ooo)
Info(
"CheckStatusOfDetectors",
"%d detectors malfunctioned during run : %s", ndet_ooo, ooo_dets.
Data());
3095 else Info(
"CheckStatusOfDetectors",
"All detectors functioning during run");
3124 void KVMultiDetArray::ReadOoODetectors(
KVExpDB* db)
3143 Info(
"ReadOoODetectors()",
"Reading lists of out-of-order detectors...");
3144 auto fOoODet = db->
AddTable(
Form(
"%s.OoO Detectors",
GetName()),
"Name of out of order detectors");
3152 while ((rec = (
TEnvRec*)it.Next())) {
3155 if (srec.Contains(
",")) {
3157 while (!srec.End()) {
3158 dbrec =
new KVDBRecord(srec.Next(kTRUE),
"OoO Detector");
3159 dbrec->
AddKey(
"Runs",
"List of Runs");
3160 fOoODet->AddRecord(dbrec);
3166 dbrec->
AddKey(
"Runs",
"List of Runs");
3167 fOoODet->AddRecord(dbrec);
3189 void KVMultiDetArray::ReadAbsentDetectors(
KVExpDB* db)
3208 Info(
"ReadAbsentDetectors()",
"Reading lists of absent/dismounted detectors... file=[%s]", fullpath.
Data());
3209 auto fAbsDet = db->
AddTable(
Form(
"%s.Absent Detectors",
GetName()),
"Name of out of order detectors");
3217 while ((rec = (
TEnvRec*)it.Next())) {
3220 if (srec.Contains(
",")) {
3222 while (!srec.End()) {
3223 dbrec =
new KVDBRecord(srec.Next(kTRUE),
"Absent Detector");
3224 dbrec->
AddKey(
"Runs",
"List of Runs");
3225 fAbsDet->AddRecord(dbrec);
3231 dbrec->
AddKey(
"Runs",
"List of Runs");
3232 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
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")
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.
Bool_t Init(KVDataSetRepository *=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
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)
KVNameValueList * GetParameters() const
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 Bool_t IsReadyForID()
KVIDGrid * CalculateDeltaE_EGrid(const KVNameValueList &AperZ, Int_t npoints=30, Double_t xfactor=1.)
void SetGroup(KVGroup *kvg)
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
KVSeqCollection * GetListOfIDTelescopes() const
void FillListOfIDTelescopes(KVIDGraph *gr) const
void SetDetectorThicknesses()
virtual void GetDetectorEvent(KVDetectorEvent *detev, const TSeqCollection *fired_params=0)
void MakeHistogramsForAllIDTelescopes(KVSeqCollection *list, Int_t dimension=100)
TList * GetStatusOfIDTelescopes()
void Draw(Option_t *option="") override
static KVMultiDetArray * MakeMultiDetector(const Char_t *dataset_name, Int_t run=-1, TString classname="KVMultiDetArray", KVExpDB *db=nullptr)
virtual Double_t GetTargetEnergyLossCorrection(KVReconstructedNucleus *)
KVSeqCollection * GetIDTelescopesWithType(const Char_t *type)
void RecursiveTrajectoryClustering(KVGeoDetectorNode *N, KVUniqueNameList &tried_trajectories, KVUniqueNameList &multitraj_nodes, KVUniqueNameList &detectors_of_group)
virtual void SetRawDataFromReconEvent(const KVReconstructedEvent &)
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
Bool_t ReadGridsFromAsciiFile(const Char_t *) const
virtual void InitialiseRawDataReading(KVRawDataReader *)
virtual void SetParameters(UInt_t n, Bool_t physics_parameters_only=kFALSE)
virtual void SetDetectorParametersForRun(KVDBRun *, const TString &="")
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
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 &)
void CheckStatusOfDetectors(KVDBRun *, const TString &="")
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()
virtual void Build(Int_t run=-1)
virtual void FillDetectorList(KVReconstructedNucleus *rnuc, KVHashList *DetList, const KVString &DetNames)
const TSeqCollection * GetTrajectories() const
TList * GetCalibrationStatusOfDetectors()
TGeoManager * GetGeometry() const
Return pointer to the (ROOT) geometry of the array.
virtual Bool_t HandleRawDataEvent(KVRawDataReader *)
virtual void InitializeIDTelescopes()
virtual void SetRunCalibrationParameters(UShort_t n)
void PrintStatusOfIDTelescopes()
void PrintCalibStatusOfDetectors()
virtual void SetCalibratorParameters(KVDBRun *, const TString &="")
virtual void SetPartSeedCond(const Char_t *cond)
void SetGridsInTelescopes(UInt_t run)
KVIDTelescope * GetIDTelescope(const Char_t *name) const
Return pointer to DeltaE-E ID Telescope with "name".
virtual void SetReconParametersInEvent(KVReconstructedEvent *) const
Copy any parameters in fReconParameters in to the reconstructed event parameter list.
virtual void AcceptParticleForAnalysis(KVReconstructedNucleus *) const
void SetNavigator(KVGeoNavigator *geo)
KVMultiDetArray()
Default constructor.
KVUniqueNameList GetIDTelescopeTypes()
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
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)
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)
RVec< PromoteType< T > > abs(const RVec< T > &v)
void Error(UserClass p, const char *location, const char *va_(fmt),...)
void Warning(UserClass p, const char *location, const char *va_(fmt),...)
void Info(UserClass p, const char *location, const char *va_(fmt),...)