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);
459 if(!check_idtelescope_in_allowed_list(uri))
469 set_up_single_stage_telescope(d, idt, l);
477 set_up_single_stage_telescope(d, idt, l);
499 if(!check_idtelescope_in_allowed_list(uri))
509 set_up_telescope(
de, e, idt, l);
516 set_up_telescope(
de, e, idt, l);
534 if (
de->GetGroup()) {
548 fIDTelescopes->
Add(idt);
572 fIDTelescopes->
Add(idt);
584 void KVMultiDetArray::RenumberGroups()
592 while ((g = (
KVGroup*) next())) {
623 unique_ptr<KVSeqCollection> fGroups(
GetStructures()->GetSubListWithType(
"GROUP"));
625 TIter next(fGroups.get());
627 while ((grp = (
KVGroup*) next())) {
654 TString tabname = (myname !=
"" ?
Form(
"%s.Calibrations", myname.
Data()) :
"Calibrations");
656 KVRList* run_links =
r->GetLinks(tabname);
657 if (run_links)
Info(
"SetCalibratorParameters",
"Found %d calibrations for this run", run_links->
GetEntries());
663 TIter nxt_link(run_links);
678 while (!clop.
End()) {
691 catch (std::exception&
e) {
707 KVError::Warning(
this,
"SetCalibratorParameters",
"Wrong number of parameters (%d) for calibrator %s for detector %s : should be %d",
742 void KVMultiDetArray::SetExpectedDetectorSignalNames()
764 auto s = KVBase::GetDataSetEnv<KVString>(fDataSet.
Data(),
Form(
"%s.%s.ExpectedDetectorSignals",
GetName(), det->
GetType()));
765 if (s.IsNull())
continue;
768 det->AddDetectorSignal(s.Next(kTRUE));
798 if (!fired_dets || !fired_dets->
GetEntries()) {
799 if (fFiredDetectors.
GetEntries()) fired_dets = &fFiredDetectors;
803 TIter next_det(fired_dets);
812 unique_ptr<KVSeqCollection> fGroups(
GetStructures()->GetSubListWithType(
"GROUP"));
814 TIter next_grp(fGroups.get());
816 while ((grp = (
KVGroup*) next_grp())) {
870 if (run > 0) fMakeMultiDetectorRunNumber = run;
871 else if (fMakeMultiDetectorRunNumber > 0) run = fMakeMultiDetectorRunNumber;
878 if (gDataSetManager && (!gDataSet || (gDataSet != gDataSetManager->
GetDataSet(dataset_name)))) {
879 printf(
"Info in <KVMultiDetArray::MakeMultiDetector>: Changing dataset\n");
883 if (gMultiDetArray && gMultiDetArray->
GetDataSet() != dataset_name) {
884 printf(
"Info in <KVMultiDetArray::MakeMultiDetector>: Deleting existing array %s\n", gMultiDetArray->
GetName());
885 if (gIDGridManager) {
886 delete gIDGridManager;
887 gIDGridManager =
nullptr;
889 delete gMultiDetArray;
890 gMultiDetArray =
nullptr;
897 if (!gMultiDetArray) {
904 mda->fDataSet = dataset_name;
907 auto codes = GetDataSetEnv<KVString>(dataset_name,
Form(
"%s.ReconstructedNuclei.AcceptIDCodes", mda->
GetName()));
908 if (codes !=
"") mda->fAcceptIDCodes.
Set(codes);
909 codes = GetDataSetEnv<KVString>(dataset_name,
Form(
"%s.ReconstructedNuclei.AcceptECodes", mda->
GetName()));
910 if (codes !=
"") mda->fAcceptECodes.
Set(codes);
915 if (fMakeMultiDetectorSetParameters && !gIDGridManager->
IsSQLROOT()) {
926 filepath +=
"/idgrids_DB";
932 auto index_multiplier = gDataSet->
GetDataSetEnv(
"DataSet.RunFileIndexMultiplier.raw", 1);
936 if (n_grids_to_write) {
939 printf(
"Info in <KVMultiDetArray::MakeMultiDetector>: Saving %d grids in SQL-ROOT database file %s\n",
940 n_grids_to_write, filepath.
Data());
944 if (!db) db = gExpDB;
947 auto rl =
gr->GetRuns().GetListDividedBy(index_multiplier);
948 if (rl.IsEmpty() && db) rl = db->
GetRunList();
951 {
"IDLabel",
gr->GetIDTelescopeLabel()},
952 {
"IDTelescopes",
gr->GetParameters()->GetStringValue(
"IDTelescopes")},
953 {
"VarX",
gr->GetVarX()},
954 {
"VarY",
gr->GetVarY()},
955 {
"Runlist",
gr->GetRunList()},
959 if (!(n_grids_to_write % 1000)) printf(
"Info in <KVMultiDetArray::MakeMultiDetector>: ...%d grids left...\n",
968 mda = gMultiDetArray;
971 if (fMakeMultiDetectorSetParameters && (run > -1) && gExpDB) mda->
SetParameters(run, fMakeMultiDetectorPhysicsParametersOnly);
1003 auto alt_updater = KVBase::GetDataSetEnv<KVString>(fDataSet,
Form(
"ExpSetUp.Updater.%s",
GetName()));
1007 Info(
"GetUpDater",
"updater class for dataset %s: %s", fDataSet.
Data(), fUpDater->
IsA()->
GetName());
1036 if (gDataSetManager)
1062 if (gDataSetManager)
1088 if (gDataSetManager)
1154 filepath +=
"/idgrids_DB";
1157 delete gIDGridManager;
1164 auto id_labels = GetDataSetEnv<KVString>(fDataSet,
"ActiveIdentifications");
1166 Info(
"SetIdentifications",
"No active identifications");
1170 id_labels.Begin(
" ");
1173 while (!id_labels.End()) {
1179 Info(
"SetIdentifications",
"Initialising %s identifications...", idt->
GetLabel());
1181 Info(
"SetIdentifications",
"OK");
1188 KVError::Warning(
this,
"SetIdentfications",
"No telescopes found with labels given in %s.ActiveIdentifications list: %s",
1189 gDataSet->
GetName(), id_labels.Data());
1211 TIter next(fIDTelescopes);
1215 SetIDCodeForIDTelescope(idt);
1265 cout << endl <<
"-----STATUS OF IDENTIFICATION TELESCOPES";
1268 cout <<
"------" << endl << endl;
1277 if (id_labels ==
"") id_labels +=
type->GetString().Data();
1279 id_labels +=
Form(
" %s",
type->GetString().Data());
1283 if (id_labels ==
"") {
1284 cout <<
" *** No active identifications *** " << endl;
1288 unique_ptr<TObjArray> toks(id_labels.
Tokenize(
' '));
1293 TIter next_type(fStatusIDTelescopes);
1294 TList* id_type_list = 0;
1295 while ((id_type_list = (
TList*)next_type())) {
1297 cout <<
" *** " << id_type_list->
GetName() <<
" Identifications -------------------" << endl;
1298 if (!toks->FindObject(id_type_list->
GetName())) {
1299 cout <<
" [NOT ACTIVE]" << endl;
1303 TList* print_list = 0;
1307 if (Nok < Notok) print_list = ok_list;
1308 else print_list = notok_list;
1310 if (Nok && (!Notok)) cout <<
" ALL telescopes are OK" << endl;
1311 else if (Notok && (!Nok)) cout <<
" NO telescopes are OK" << endl;
1313 cout <<
" " << ok_list->
GetEntries() <<
" telescopes are OK, "
1314 << notok_list->
GetEntries() <<
" telescopes are NOT OK" << endl;
1315 cout <<
" " << print_list->
GetName() <<
" :" << endl;
1316 TIter it(print_list);
1319 while ((ob = it())) cout <<
"," << ob->
GetName();
1347 if (!fStatusIDTelescopes) {
1348 fStatusIDTelescopes =
new TList;
1352 fStatusIDTelescopes->
Delete();
1354 if (!fIDTelescopes || !fIDTelescopes->
GetEntries())
return fStatusIDTelescopes;
1355 TIter next(fIDTelescopes);
1361 if (!id_type_list) {
1362 id_type_list =
new TList;
1365 fStatusIDTelescopes->
Add(id_type_list);
1376 return fStatusIDTelescopes;
1393 if (!fIDTelescopes || !fIDTelescopes->
GetEntries())
return type_list;
1394 TIter next(fIDTelescopes);
1422 if (!fIDTelescopes || !fIDTelescopes->
GetEntries())
return NULL;
1446 if (!fCalibStatusDets) {
1447 fCalibStatusDets =
new TList;
1451 fCalibStatusDets->
Delete();
1453 if (!
GetDetectors()->GetEntries())
return fCalibStatusDets;
1461 type_list =
new TList;
1464 fCalibStatusDets->
Add(type_list);
1472 bool det_is_cal=
false;
1473 for(
int z=0; z<100; ++z)
1486 return fCalibStatusDets;
1502 Info(
"PrintCalibStatusOfDetectors",
"Cannot know status without knowing RUN NUMBER");
1506 cout << endl <<
"-----------STATUS OF CALIBRATIONS FOR RUN "
1512 TIter next_type(fCalibStatusDets);
1513 TList* id_type_list = 0;
1514 while ((id_type_list = (
TList*)next_type())) {
1516 cout <<
" *** " << id_type_list->
GetName() <<
" Detectors -------------------" << endl;
1519 TList* print_list = 0;
1523 if (Nok < Notok) print_list = ok_list;
1524 else print_list = notok_list;
1526 if (Nok && (!Notok)) cout <<
" ALL calibrations are OK" << endl;
1527 else if (Notok && (!Nok)) cout <<
" NO calibrations are OK" << endl;
1529 cout <<
" " << ok_list->
GetEntries() <<
" calibrations are OK, "
1530 << notok_list->
GetEntries() <<
" calibrations are NOT OK" << endl;
1531 cout <<
" " << print_list->
GetName() <<
" :" << endl;
1532 TIter it(print_list);
1535 while ((ob = it())) cout <<
"," << ob->
GetName();
1601 return fNavigator.get();
1645 auto find_a_file = [
this](
const TString & _base_filename) {
1659 auto fullpath = find_a_file(
"DetectorThicknessFiles.dat");
1660 if (!fullpath.IsNull()) {
1672 fullpath = find_a_file(
"DetectorThicknesses.dat");
1673 if (!fullpath.IsNull()) set_detector_thicknesses(fullpath);
1697 void KVMultiDetArray::set_detector_thicknesses(
const TString& fullpath)
1718 if (thickdat.
ReadFile(fullpath, kEnvUser) != 0) {
1719 KVError::Error(
this,
"SetDetectorThicknesses",
"Problem opening file %s", fullpath.
Data());
1722 Info(
"SetDetectorThicknesses",
"Setting thicknesses of detectors from file %s", fullpath.
Data());
1741 abs->SetThickness(thick);
1842 trans.
SetDz(distance) ;
1844 if (postTrans)
h = (*postTrans) * rot * trans ;
1845 else h = rot * trans;
1870 if (!
gr->GetRuns().Contains((
Int_t) run))
1876 TIter nxtid(
gr->GetListOfIDTelescopes());
1894 if (
gr->GetParameters()->HasParameter(
"IDTelescopes")) {
1895 KVString tel_list =
gr->GetParameters()->GetStringValue(
"IDTelescopes");
1896 tel_list.
Begin(
",");
1897 gr->ClearListOfIDTelescopes();
1898 while (!tel_list.
End()) {
1901 if (idt)
gr->AddIDTelescope(idt);
1932 if (opt.
Next() ==
"tracks") {
1955 fNavigator.reset(geo);
1975 name.ReplaceAll(
"-",
"_");
2000 void KVMultiDetArray::CalculateReconstructionTrajectories()
2006 TIter it(groups.get());
2009 Info(
"CalculateReconstructionTrajectories",
"Calculating trajectories for particle reconstruction:");
2011 std::cout <<
"\xd" <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::flush;
2013 ntr +=
group->CalculateReconstructionTrajectories();
2015 std::cout <<
"\xd" <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::flush;
2018 std::cout <<
" -- calculated " << ntr <<
" reconstruction trajectories" << std::endl;
2020 std::cout << std::endl;
2029 Bool_t KVMultiDetArray::check_idtelescope_in_allowed_list(
const TString& plugin)
2034 auto idt_list = GetDataSetEnv<KVString>(fDataSet,
Form(
"%s.IDTelescopes",
GetName()));
2035 if(!idt_list.IsNull())
2038 static std::unordered_map<std::string,int> allowed_idt;
2039 if(allowed_idt.empty())
2041 idt_list.Begin(
" ");
2042 while(!idt_list.End())
2043 ++allowed_idt[idt_list.Next(
true).Data()];
2045 auto _plug = plugin;
2047 _plug.
Remove(0,_plug.Index(
".")+1);
2048 return allowed_idt.find(_plug.Data()) != allowed_idt.end();
2065 void KVMultiDetArray::DeduceIdentificationTelescopesFromGeometry()
2080 Info(
"DeduceIdentificationTelescopesFromGeometry",
"Calculating...");
2082 std::cout <<
"\xd" <<
" -- created " << count <<
" telescopes" << std::flush;
2092 std::cout <<
"\xd" <<
" -- created " << count <<
" telescopes" << std::flush;
2096 std::cout <<
" -- created " << count <<
" telescopes" << std::endl;
2098 std::cout << std::endl;
2107 void KVMultiDetArray::AssociateTrajectoriesAndNodes()
2112 TIter it(&fTrajectories);
2117 int len_tr = tr->
GetN();
2118 TIter it2(&fTrajectories);
2121 if ((tr2 != tr) && (len_tr < tr2->GetN()) && (tr2->
ContainsPath(tr))) {
2129 TIter it_dup(&duplicates);
2131 fTrajectories.
Remove(tr);
2133 Info(
"AssociateTrajectoriesAndNodes",
"Removed %d duplicated sub-trajectories", duplicates.
GetEntries());
2135 Info(
"AssociateTrajectoriesAndNodes",
"Calculated %d particle trajectories", fTrajectories.
GetEntries());
2148 if (
N->GetNTraj() > 1) {
2151 multitraj_nodes.
Add(
N);
2152 TIter tr(
N->GetTrajectories());
2155 if (tried_trajectories.
FindObject(traj))
continue;
2156 tried_trajectories.
Add(traj);
2160 detectors_of_group.
Add(node);
2166 else if (
N->GetNTraj() == 1) {
2170 if (tried_trajectories.
FindObject(traj))
return;
2171 tried_trajectories.
Add(traj);
2175 detectors_of_group.
Add(node);
2181 detectors_of_group.
Add(
N);
2230 #ifdef WITH_BUILTIN_GRU
2231 if (
r->GetDataFormat() ==
"EBYEDAT")
2243 void KVMultiDetArray::DeduceGroupsFromTrajectories()
2249 Info(
"DeduceGroupsFromTrajectories",
"Deducing groups of detectors from trajectories");
2250 Int_t number_of_groups = 0;
2253 if (stl.get() && stl->GetEntries()) {
2254 Info(
"DeduceGroupsFromTrajectories",
"Deleting existing %d groups in array", stl->GetEntries());
2256 Info(
"DeduceGroupsFromTrajectories",
"Done");
2265 if (!detectors_of_group.
GetEntries())
continue;
2269 TIter next_node(&detectors_of_group);
2273 TIter tr(&fTrajectories);
2275 Info(
"DeduceGroupsFromTrajectories",
"Filling group trajectory lists");
2298 DetNames.
Begin(
"/");
2299 while (!DetNames.
End()) {
2301 if (det) DetList->
Add(det);
2355 #ifdef WITH_BUILTIN_GRU
2377 fReconParameters.
Clear();
2378 fFiredDetectors.
Clear();
2379 fHandledRawData =
false;
2381 TIter nxt(&fFiredSignals);
2387 fFiredSignals.
Clear();
2400 void KVMultiDetArray::PerformClosedROOTGeometryOperations()
2418 e->GetParameters()->Concatenate(fReconParameters);
2436 void KVMultiDetArray::copy_fired_parameters_to_recon_param_list()
2478 fRawDataReader = rawdata;
2482 fHandledRawData = handle_raw_data_event_mfmfile(
dynamic_cast<KVMFMDataFileReader&
>(*rawdata));
2486 #ifdef WITH_PROTOBUF
2487 fHandledRawData = handle_raw_data_event_protobuf(
dynamic_cast<KVProtobufDataReader&
>(*rawdata));
2491 #ifdef WITH_BUILTIN_GRU
2492 fHandledRawData = handle_raw_data_event_ebyedat(
dynamic_cast<KVGANILDataReader&
>(*rawdata));
2495 if (fHandledRawData) {
2496 copy_fired_parameters_to_recon_param_list();
2498 return fHandledRawData;
2525 ok = handle_raw_data_event_mfmfile(bufrdr);
2527 copy_fired_parameters_to_recon_param_list();
2562 det_signal = detector->AddDetectorSignal(sig_type);
2564 fFiredDetectors.
Add(detector);
2569 if (detname !=
"") sig_name =
Form(
"%s.%s", detname.
Data(), sig_type.
Data());
2570 else sig_name = sig_type;
2574 fExtraRawDataSignals.
Add(det_signal);
2580 fFiredSignals.
Add(det_signal);
2601 int N =
l->GetNpar();
2602 for (
int i = 0; i <
N; ++i) {
2606 if (
name.BeginsWith(
"ACQPAR")) {
2609 int dots =
name.GetNValues(
".");
2610 bool with_det = (dots == 4);
2611 assert(with_det || (dots == 3));
2619 det_name =
name.Next();
2620 sig_type =
name.Next();
2624 sig_type =
name.Next();
2626 add_and_set_detector_signal(det, det_name,
np->GetDouble(), sig_type);
2672 ReadOoODetectors(db);
2673 ReadAbsentDetectors(db);
2674 ReadCalibrationFiles(db);
2684 if (basic_name ==
"") {
2685 Info(meth,
"No name found for \"%s\" file", keyw);
2688 Info(meth,
"Search for %s for dataset %s ...", basic_name.
Data(), fDataSet.
Data());
2692 Info(meth,
"\tNo file found ...");
2701 unique_ptr<KVFileReader> KVMultiDetArray::GetKVFileReader(
KVExpDB* db,
const Char_t* meth,
const Char_t* keyw)
2704 TString fp = GetFileName(db, meth, keyw);
2706 return unique_ptr<KVFileReader>();
2709 if (!fr->OpenFileToRead(fp.
Data())) {
2722 void KVMultiDetArray::ReadCalibrationFiles(
KVExpDB* db)
2725 unique_ptr<KVFileReader> fr = GetKVFileReader(db,
"ReadCalibrationFiles()",
"CalibrationFiles");
2730 while (fr->IsOK()) {
2732 if (fr->GetCurrentLine().BeginsWith(
"#") || fr->GetCurrentLine() ==
"") {}
2734 ReadCalibFile(fr->GetCurrentLine().Data(), db, calib_table);
2838 Info(
"ReadCalibFile",
"%s does not exist or not found", filename);
2842 Info(
"ReadCalibFile",
"file : %s found", fullpath.
Data());
2848 KVString opt_list =
"RunList SignalIn SignalOut CalibType CalibClass CalibOptions ZRange";
2849 opt_list.
Begin(
" ");
2850 while (!opt_list.
End()) {
2858 KVError::Warning(
this,
"ReadCalibFile",
"Calibration has 'Runlist' parameter (ignored): %s, did you mean 'RunList'?", env.
GetValue(
"Runlist",
""));
2862 KVError::Error(
this,
"ReadCalibFile",
"No input signal defined : SignalIn");
2866 KVError::Error(
this,
"ReadCalibFile",
"No output signal defined : SignalOut");
2870 KVError::Error(
this,
"ReadCalibFile",
"No calibration type defined : CalibType");
2877 if (ph) calibrator_class = ph->
GetClass();
2893 Info(
"ReadCalibFile",
"Calibration used for runs %s", run_list.
AsString());
2896 Info(
"ReadCalibFile",
"Calibration used for all runs in database");
2911 TString param_delimiters =
":, \t";
2922 if (clop !=
"") par->
SetParameter(
"CalibOptions", clop);
2925 lval.Begin(param_delimiters);
2926 while (!lval.End()) {
2933 while ((rec = (
TEnvRec*)next()))
2936 for(
auto p_det : *det_list)
2937 set_calib_parameters(rec,
dynamic_cast<KVDetector*
>(p_det));
2950 Bool_t KVMultiDetArray::handle_raw_data_event_mfmfile(MFMBufferReader& mfmreader)
2957 if (mfmreader.IsFrameReadMerge()) {
2958 return handle_raw_data_event_mfmmergeframe(mfmreader.GetMergeManager());
2961 return handle_raw_data_event_mfmframe(mfmreader.GetFrameRead());
2972 Bool_t KVMultiDetArray::handle_raw_data_event_mfmmergeframe(
const MFMMergeFrameManager& mergeframe)
2978 while (mergeframe.ReadNextFrame()) {
2979 Bool_t me = handle_raw_data_event_mfmframe(mergeframe.GetFrameRead());
2998 Bool_t KVMultiDetArray::handle_raw_data_event_mfmframe(
const MFMCommonFrame& mfmframe)
3010 if (mfmframe.GetFrameType() == MFM_MESYTEC_FRAME_TYPE)
3011 return handle_raw_data_event_mfmframe_mesytec_mdpp((
const MFMMesytecMDPPFrame&)mfmframe);
3013 if (mfmframe.GetFrameType() == MFM_EBY_EN_FRAME_TYPE
3014 || mfmframe.GetFrameType() == MFM_EBY_TS_FRAME_TYPE
3015 || mfmframe.GetFrameType() == MFM_EBY_EN_TS_FRAME_TYPE)
3016 return handle_raw_data_event_mfmframe_ebyedat((
const MFMEbyedatFrame&)mfmframe);
3026 Bool_t KVMultiDetArray::handle_raw_data_event_mfmframe_ebyedat(
const MFMEbyedatFrame&)
3040 Bool_t KVMultiDetArray::handle_raw_data_event_mfmframe_mesytec_mdpp(
const MFMMesytecMDPPFrame&)
3051 #ifdef WITH_PROTOBUF
3097 Int_t ndet_absent = 0;
3099 TString absent_dets, ooo_dets;
3109 if (ndet_absent) absent_dets +=
",";
3110 absent_dets += det->
GetName();
3125 if (ndet_ooo) ooo_dets +=
",";
3136 if (ndet_absent)
Info(
"CheckStatusOfDetectors",
"%d detectors absent during run : %s", ndet_absent, absent_dets.
Data());
3137 else Info(
"CheckStatusOfDetectors",
"All detectors present during run");
3138 if (ndet_ooo)
Info(
"CheckStatusOfDetectors",
"%d detectors malfunctioned during run : %s", ndet_ooo, ooo_dets.
Data());
3139 else Info(
"CheckStatusOfDetectors",
"All detectors functioning during run");
3168 void KVMultiDetArray::ReadOoODetectors(
KVExpDB* db)
3187 Info(
"ReadOoODetectors()",
"Reading lists of out-of-order detectors...");
3188 auto fOoODet = db->
AddTable(
Form(
"%s.OoO Detectors",
GetName()),
"Name of out of order detectors");
3196 while ((rec = (
TEnvRec*)it.Next())) {
3199 if (srec.Contains(
",")) {
3201 while (!srec.End()) {
3202 dbrec =
new KVDBRecord(srec.Next(kTRUE),
"OoO Detector");
3203 dbrec->
AddKey(
"Runs",
"List of Runs");
3204 fOoODet->AddRecord(dbrec);
3210 dbrec->
AddKey(
"Runs",
"List of Runs");
3211 fOoODet->AddRecord(dbrec);
3233 void KVMultiDetArray::ReadAbsentDetectors(
KVExpDB* db)
3252 Info(
"ReadAbsentDetectors()",
"Reading lists of absent/dismounted detectors... file=[%s]", fullpath.
Data());
3253 auto fAbsDet = db->
AddTable(
Form(
"%s.Absent Detectors",
GetName()),
"Name of out of order detectors");
3261 while ((rec = (
TEnvRec*)it.Next())) {
3264 if (srec.Contains(
",")) {
3266 while (!srec.End()) {
3267 dbrec =
new KVDBRecord(srec.Next(kTRUE),
"Absent Detector");
3268 dbrec->
AddKey(
"Runs",
"List of Runs");
3269 fAbsDet->AddRecord(dbrec);
3275 dbrec->
AddKey(
"Runs",
"List of Runs");
3276 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),...)