KaliVeda
Toolkit for HIC analysis
KVSimDirGUI.cpp
1 //Created by KVClassFactory on Wed Jul 18 11:55:11 2012
2 //Author: John Frankland,,,
3 
4 #include "KVUnownedList.h"
5 #include "KVSimDirGUI.h"
6 #include "KVDataSetManager.h"
7 #include "KVBatchSystemManager.h"
8 #include "KVDataSet.h"
9 #include "KVDBSystem.h"
10 #include "KVDBRun.h"
11 #include "KVSimFile.h"
12 #include "KVFileDialog.h"
13 #include "KVInputDialog.h"
14 #include "KV2Body.h"
15 #include "TGLabel.h"
16 #include "TGButtonGroup.h"
17 #include "TGMsgBox.h"
18 #include "TSystem.h"
19 #include <KVDataAnalyser.h>
20 #include <KVSimDirFilterAnalyser.h>
21 #include <KVSimReader.h>
22 #include <TG3DLine.h>
23 #include <iostream>
24 using namespace std;
25 
26 #include "KVBatchSystemParametersGUI.h"
27 #include "KVDropDownDialog.h"
28 
30 
31 #ifdef WITH_RSQLITE
32 
35 
37 {
38  // Add a new dataset table for the given KVSimDir object
39 
40  TString ds_table_name = Form("Table_%d", ds_table_number);
41  KVSQLite::table DStable(ds_table_name);
43  DStable.primary_key("Id");
44  DStable.add_column("FileName", KVSQLite::column_type::TEXT);
45  DStable.add_column("TreeInfo", KVSQLite::column_type::TEXT);
46  DStable.add_column("AuxDir", KVSQLite::column_type::INTEGER);
47  DStable.add_column("Filtered", KVSQLite::column_type::INTEGER);
48  DStable.add_column("Events", KVSQLite::column_type::INTEGER);
49  DStable.add_column("DataSet", KVSQLite::column_type::TEXT);
50  DStable.add_column("System", KVSQLite::column_type::TEXT);
52  DStable.add_column("TreeName", KVSQLite::column_type::TEXT);
53  DStable.add_column("BranchName", KVSQLite::column_type::TEXT);
54  DStable.add_column("OrigFile", KVSQLite::column_type::TEXT);
55  DStable.add_column("FiltType", KVSQLite::column_type::TEXT);
56  DStable.add_column("DataQualityAudit", KVSQLite::column_type::TEXT);
57  DStable.add_column("Gemini", KVSQLite::column_type::INTEGER);
58  DStable.add_column("GemDecayPerEvent", KVSQLite::column_type::INTEGER);
59  fConfigDB.add_table(DStable);
60  // update name of dataset table in main table
61  fConfigDB["Datasets"]["Table"] = ds_table_name;
62  fConfigDB.update("Datasets", "Table", Form("Name=\"%s\"", sd->GetName()));
63  return ds_table_name;
64 }
65 
66 
67 
69 
71 {
72  fConfigDB.prepare_data_insertion(ds_table_name);
73  KVSQLite::table& dstable = fConfigDB[ds_table_name];
74  if (sd->GetSimDataList()->GetEntries()) {
75  TIter it1(sd->GetSimDataList());
76  KVSimFile* sf = nullptr;
77  while ((sf = (KVSimFile*)it1())) {
78  dstable["Id"].set_null();
79  dstable["FileName"] = sf->GetName();
80  dstable["TreeInfo"] = sf->GetTitle();
81  dstable["AuxDir"] = (int)sd->IsFromAuxDirectory(sf);
82  dstable["Filtered"] = 0;
83  dstable["Events"] = (Int_t)sf->GetEvents();
84  dstable["TreeName"] = sf->GetTreeName();
85  dstable["BranchName"] = sf->GetBranchName();
86  fConfigDB.insert_data_row();
87  }
88  }
89  if (sd->GetFiltDataList()->GetEntries()) {
90  TIter it1(sd->GetFiltDataList());
91  KVSimFile* sf = nullptr;
92  while ((sf = (KVSimFile*)it1())) {
93  dstable["Id"].set_null();
94  dstable["FileName"] = sf->GetName();
95  dstable["TreeInfo"] = sf->GetTitle();
96  dstable["AuxDir"] = (int)sd->IsFromAuxDirectory(sf);
97  dstable["Filtered"] = 1;
98  dstable["Events"] = (Int_t)sf->GetEvents();
99  dstable["TreeName"] = sf->GetTreeName();
100  dstable["BranchName"] = sf->GetBranchName();
101  dstable["DataSet"] = sf->GetDataSet();
102  dstable["System"] = sf->GetSystem();
103  dstable["Run"] = sf->GetRun();
104  dstable["FiltType"] = sf->GetFilterType();
105  dstable["DataQualityAudit"] = sf->GetDataQualityAudit();
106  dstable["OrigFile"] = sf->GetOriginalFile();
107  dstable["Gemini"] = sf->IsGemini();
108  dstable["GemDecayPerEvent"] = sf->GetGemDecayPerEvent();
109  fConfigDB.insert_data_row();
110  }
111  }
112  fConfigDB.end_data_insertion();
113 }
114 
115 #endif
116 
117 
121 
123  : fGuirc(".kvsimdirguirc")
124 #ifdef WITH_RSQLITE
125  , fConfigDB(gSystem->ExpandPathName("$(HOME)/.kvsimdirguidb"))
126 #endif
127  , menus {this}
128 {
129  // Default constructor
130  // main frame
131 
132  fSelectedSimDir = nullptr;
133  fWithPROOF = kFALSE;
134 
135  // make Aclic create all *.so *.d files in separate temporary directories
136  //this is to avoid problems with KVParticleCondition when using PROOF
138 
139  MainFrame = new TGMainFrame(gClient->GetRoot(), 10, 10, kMainFrame | kVerticalFrame);
140  MainFrame->SetName("KaliVedaSim GUI");
141  MainFrame->SetWindowName("KaliVedaSim GUI");
142  MainFrame->Connect("CloseWindow()", "KVSimDirGUI", this, "Exit()");
143 
144  // create menu bar
146 
147  // mode menu
148  menus.mode.menu = menus.add_popup("&Mode");
149  menus.mode.menu->AddEntry("Analysis", menus.mode.analysis);
150  menus.mode.menu->AddEntry("Filter", menus.mode.filter);
153 
154  // analysis menu
155  menus.analysis.menu = menus.add_popup("&Analysis");
156  menus.analysis.menu->AddEntry("Select analysis class", menus.analysis.select_analysis_class);
158  menus.analysis.generate = menus.add_popup("Generate analysis class...", menus.analysis.menu);
161 
163 
164  // filtering menu
165  menus.filter.menu = menus.add_popup("&Filtering");
166  menus.filter.geometry = menus.add_popup("Detector geometry", menus.filter.menu);
167  if (!gDataSetManager) {
169  dsm->Init();
170  }
171  // datasets have id = 100 + i where i can be given to gDataSetManager->GetDataSet(i)
172  menus.filter.ndatasets = gDataSetManager->GetNtotal();
173  for (int i = 0; i < menus.filter.ndatasets; i++)
174  menus.filter.geometry->AddEntry(gDataSetManager->GetDataSet(i)->GetName(), menus.filter.first_dataset + i);
175 
176  menus.filter.reaction = menus.add_popup("Entrance channel", menus.filter.menu);
178 
181 
183 
184  menus.filter.data_quality = menus.add_popup("Detector performances", menus.filter.menu);
186 
188  menus.filter.options->AddLabel("Filter type");
194  menus.filter.options->AddLabel("Kinematics");
200  menus.filter.options->AddLabel("Rotation");
202  menus.filter.options->AddEntry("Randomize phi", menus.filter.random_phi);
204  menus.filter.options->AddLabel("Secondary decay");
206  menus.filter.options->AddEntry("Use Gemini++", menus.filter.use_gemini);
207  menus.filter.options->AddEntry("Add Erot to E*", menus.filter.add_rot_energy);
208 
209  // set default options
212  Kinematics(kKCM);
214  SetRandomPhi(true);
216  SetGeminiDecay(false);
219 
220  fFilterMode = false;
221  fAnalysisMode = true;
222  menus.menu_bar->RemovePopup("Filtering");
223 
224  // add menu bar to main frame
225  MainFrame->AddFrame(menus.menu_bar);//, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 1, 1));
226  auto lh = new TGHorizontal3DLine(MainFrame);
228 
229  // status bar
232 
234 
236 
237  TGCompositeFrame* vf = new TGVerticalFrame(hftop, 200, 500, kVerticalFrame);
238  // sim dir buttons
239  TGCompositeFrame* hf = new TGHorizontalFrame(vf, 10, 10, kHorizontalFrame);
240  BaddDir = new TGPictureButton(hf, gClient->GetPicture("package_add.xpm"));
241  hf->AddFrame(BaddDir, new TGLayoutHints(kLHintsLeft | kLHintsTop, 3, 2, 2, 2));
242  BaddDir->Resize(40, 40);
243  BaddDir->SetToolTipText("Add dataset");
244  BaddDir->Connect("Clicked()", "KVSimDirGUI", this, "AddSimDir()");
245  BimpSim = new TGPictureButton(hf, gClient->GetPicture("bld_text.xpm"));
246  hf->AddFrame(BimpSim, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 2, 2));
247  BimpSim->Resize(40, 40);
248  BimpSim->SetToolTipText("Import simulation");
249  BimpSim->Connect("Clicked()", "KVSimDirGUI", this, "ImportSimulation()");
250  BremDir = new TGPictureButton(hf, gClient->GetPicture("package_delete.xpm"));
251  hf->AddFrame(BremDir, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 2, 2));
252  BremDir->Resize(40, 40);
253  BremDir->SetToolTipText("Remove dataset");
254  BremDir->Connect("Clicked()", "KVSimDirGUI", this, "RemSimDir()");
255  BrefreshDir = new TGPictureButton(hf, gClient->GetPicture("refresh2.xpm"));
256  hf->AddFrame(BrefreshDir, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 2, 2));
257  BrefreshDir->Resize(40, 40);
258  BrefreshDir->SetToolTipText("Update");
259  BrefreshDir->Connect("Clicked()", "KVSimDirGUI", this, "RefreshSimDir()");
263 
264  vf->AddFrame(hf, new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2));
265 
266  // canvas widget
267  fDirListCanvas = new TGCanvas(vf, 172, 400);
268  // canvas viewport
270  // list tree
272 
273  popen = gClient->GetPicture("package_add.xpm");
274  pclose = gClient->GetPicture("package_add.xpm");
275 
279  fDirListTree->Connect("Clicked(TGListTreeItem*,Int_t)", "KVSimDirGUI", this, "SelectSimDir(TGListTreeItem*,Int_t)");
280  fDirListTree->Connect("DoubleClicked(TGListTreeItem*,Int_t)", "KVSimDirGUI", this, "AddAuxDir(TGListTreeItem*,Int_t)");
284 
285  hftop->AddFrame(vf, new TGLayoutHints(kLHintsExpandY | kLHintsTop, 2, 2, 2, 2));
286 
287  /* lists of data in simdir */
288  vf = new TGVerticalFrame(hftop, 600, 500, kVerticalFrame);
289  TGGroupFrame* group = new TGGroupFrame(vf, "Simulations");
290  fLVsimData = new KVListView(KVSimFile::Class(), group, 550, 200);
292  fLVsimData->SetDataColumn(0, "Name");
293  fLVsimData->SetDataColumn(1, "Info", "GetTitle");
294  fLVsimData->SetDataColumn(2, "Events");
297  group->AddFrame(fLVsimData, new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 5, 5, 10, 10));
299  group = new TGGroupFrame(vf, "Filtered Simulations");
300  fLVfiltData = new KVListView(KVSimFile::Class(), group, 550, 200);
302  fLVfiltData->SetDataColumn(0, "Simulation", "GetOriginalFile");
303  fLVfiltData->SetDataColumn(1, "DataSet");
304  fLVfiltData->SetDataColumn(2, "System");
305  fLVfiltData->SetDataColumn(3, "Run");
306  fLVfiltData->SetDataColumn(4, "FilterType");
307  fLVfiltData->SetDataColumn(5, "DataQualityAudit");
308  fLVfiltData->SetDataColumn(6, "Gemini", "IsGemini");
309  fLVfiltData->SetDataColumn(7, "Decay/event", "GetGemDecayPerEvent");
310  fLVfiltData->SetDataColumn(8, "Events");
313  group->AddFrame(fLVfiltData, new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 5, 5, 10, 10));
315 
316  hftop->AddFrame(vf, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 10, 10, 10));
317  MainFrame->AddFrame(hftop, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 1, 1, 1, 1));
318 
319  vf = new TGVerticalFrame(MainFrame, 600, 200, kVerticalFrame);
320  hf = new TGHorizontalFrame(vf, 600, 200, kHorizontalFrame);
321 
322  auto lab = new TGLabel(hf, "Events : ");
323  hf->AddFrame(lab, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
324  fCBAllEvents = new TGCheckButton(hf, "all");
328  fCBAllEvents->Connect("Toggled(Bool_t)", "KVSimDirGUI", this, "EnableEventNumberEntry(Bool_t)");
330 
331  proof_analysis = new TGPictureButton(hf, gClient->GetPicture("proof_base.xpm"));
332  proof_analysis->Connect("Pressed()", "KVSimDirGUI", this, "EnableProof()");
333  proof_analysis->Connect("Released()", "KVSimDirGUI", this, "DisableProof()");
334  if (!gBatchSystemManager) new KVBatchSystemManager;
335  gBatchSystemManager->GetDefaultBatchSystem()->cd();
336  proof_analysis->SetToolTipText(gBatchSystem->GetTitle());
337  proof_analysis->Resize(40, 40);
339 
340  TGPictureButton* launch_analysis = new TGPictureButton(hf, gClient->GetPicture("query_submit.xpm"));
341  launch_analysis->Connect("Clicked()", "KVSimDirGUI", this, "Run()");
342  launch_analysis->SetToolTipText("Run analysis/filter");
343  launch_analysis->Resize(40, 40);
344 
345  hf->AddFrame(launch_analysis, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 5, 2, 2, 2));
347 
348  vf->AddFrame(hf, new TGLayoutHints(kLHintsExpandX | kLHintsTop, 0, 0, 0, 0));
349  MainFrame->AddFrame(vf, new TGLayoutHints(kLHintsExpandX | kLHintsTop, 10, 10, 15, 10));
350 
351 
353  kMWMFuncAll,
356 
358  MainFrame->MapWindow();
359  // MainFrame->Resize(200,500);
360 #ifdef WITH_RSQLITE
361  // define tables in DB if not already done
362  bool sqlite_conversion = false;
364  sqlite_conversion = true;
365  KVSQLite::table datasets("Datasets");
366  datasets.add_column("Id", "INTEGER");
367  datasets.primary_key("Id");
368  datasets.add_column("Name", "TEXT");
369  datasets.add_column("Directory", "TEXT");
370  datasets.add_column("AuxDir", "TEXT");
371  datasets.add_column("Table", "TEXT");
372  fConfigDB.add_table(datasets);
373  }
374  if (!sqlite_conversion) {
375  // check Datasets table has AuxDir column
376  if (!fConfigDB["Datasets"].has_column("AuxDir"))
377  fConfigDB.add_column("Datasets", "AuxDir", "TEXT");
378  // use existing sqlite database to reconstruct simdirs
380  FillTreeList();
381  return;
382  }
383 #endif
384  // use .guirc to fill the list of sim dirs
385  KVString simdirs = fGuirc.GetValue("SimDirs", "");
386  if (simdirs != "") {
387 #ifdef WITH_RSQLITE
388  if (sqlite_conversion) {
389  // we are converting from the old TEnv back end to sqlite
390  // need to fill table of Datasets
391  fConfigDB.prepare_data_insertion("Datasets");
392  }
393  int ds_table = 0;
394 #endif
395  simdirs.Begin(" ");
396  while (!simdirs.End()) {
397  KVString simdir = simdirs.Next();
398  KVString simdirectory = fGuirc.GetValue(Form("%s.Directory", simdir.Data()), "");
399  KVSimDir* sd = new KVSimDir(simdir, simdirectory);
400 #ifdef WITH_RSQLITE
401  if (sqlite_conversion) {
402  fConfigDB["Datasets"]["Name"] = simdir;
403  fConfigDB["Datasets"]["Directory"] = simdirectory;
404  fConfigDB["Datasets"]["AuxDir"].set_null();
406  }
407 #endif
408  sd->AnalyseDirectory();
409  fListOfDirs.Add(sd);
410  }
411 #ifdef WITH_RSQLITE
412  if (sqlite_conversion) {
414  TIter itdir(&fListOfDirs);
415  KVSimDir* sd = nullptr;
416  while ((sd = (KVSimDir*)itdir())) {
417  // add table for dataset
418  TString ds_table_name = AddTableForDataSet(sd, ds_table);
419  // fill table with infos
420  FillDataSetTableWithInfos(ds_table_name, sd);
421  ++ds_table;
422  }
423  }
424 #endif
425  FillTreeList();
426  }
427 }
428 
429 
430 
432 
434 {
435  EmptyTreeList();
436  TIter next(&fListOfDirs);
437  TObject* o;
438  while ((o = next())) {
439  TGListTreeItem* item0 = fDirListTree->AddItem(NULL, o->GetName());
440  item0->SetPictures(popen, pclose);
441  fDirListTree->CloseItem(item0);
442  }
443 }
444 
445 
446 
448 
450 {
452  while (first) {
455  }
459 }
460 
461 
462 
464 
466 {
467  static TString dir(".");
468  TGFileInfo fi;
469  fi.fIniDir = StrDup(dir);
470  new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDDirectory, &fi);
471  if (fi.fFilename) {
472  TString simdirname;
473  Bool_t ok;
474  TString quest;
475  quest.Form("Enter name for dataset %s", fi.fIniDir);
476  new KVInputDialog(MainFrame, quest, &simdirname, &ok);
477  simdirname.ReplaceAll(" ", "_"); //no spaces in name
478  if (ok) {
479  KVSimDir* sd = new KVSimDir(simdirname, fi.fIniDir);
480  sd->AnalyseDirectory();
481  fListOfDirs.Add(sd);
482  FillTreeList();
485  // add to guirc file
486  TString simdirs = fGuirc.GetValue("SimDirs", "");
487  if (simdirs != "") simdirs += " ";
488  simdirs += simdirname;
489  fGuirc.SetValue("SimDirs", simdirs);
490  fGuirc.SetValue(Form("%s.Directory", simdirname.Data()), sd->GetDirectory());
492 #ifdef WITH_RSQLITE
493  //update database
494  int ds_table_num = 0;
495  if (fConfigDB.count("Datasets")) {
496  // get name/number of last dataset table
497  KVNameValueList table_names = fConfigDB.get_name_value_list("Datasets", "Name", "Table");
498  sscanf(table_names.GetParameter(table_names.GetNpar() - 1)->GetString(),
499  "Table_%d", &ds_table_num);
500  ++ds_table_num;
501  }
502  fConfigDB.prepare_data_insertion("Datasets");
503  fConfigDB["Datasets"]["Name"] = simdirname;
504  fConfigDB["Datasets"]["Directory"] = sd->GetDirectory();
505  fConfigDB["Datasets"]["AuxDir"].set_null();
508  TString table_name = AddTableForDataSet(sd, ds_table_num);
509  FillDataSetTableWithInfos(table_name, sd);
510 #endif
511  }
512  }
513  dir = fi.fIniDir;
514 }
515 
516 
517 
519 
521 {
522  if (!fSelectedSimDir) return;
526 #ifdef WITH_RSQLITE
527  fConfigDB.select_data("Datasets", "Table", Form("Name=\"%s\"", fSelectedSimDir->GetName()));
528  TString ds_table_name;
529  while (fConfigDB.get_next_result()) ds_table_name = fConfigDB["Datasets"]["Table"].get_data<TString>();
530  fConfigDB.clear_table(ds_table_name);
532 #endif
533 }
534 
535 
536 
538 
540 {
541  if (!fSelectedSimDir) return;
543  // there is no way of removing a name-value pair from a TEnv!!
544  fGuirc.SetValue(Form("%s.Directory", fSelectedSimDir->GetName()), "");
545 #ifdef WITH_RSQLITE
546  // remove from datasets table
547  fConfigDB.select_data("Datasets", "Table", Form("Name = '%s'", fSelectedSimDir->GetName()));
548  TString ds_table_name;
549  while (fConfigDB.get_next_result()) ds_table_name = fConfigDB["Datasets"]["Table"].get_data<TString>();
550  fConfigDB.delete_data("Datasets", Form("Name = '%s'", fSelectedSimDir->GetName()));
551  // and delete table with dataset data
552  fConfigDB.delete_table(ds_table_name);
553 #endif
554  delete fSelectedSimDir;
555  fSelectedSimDir = nullptr;
556  FillTreeList();
559  // update guirc file
560  TString simdirs = "";
561  TIter next(&fListOfDirs);
562  KVSimDir* togo;
563  while ((togo = (KVSimDir*)next())) {
564  if (simdirs != "") simdirs += " ";
565  simdirs += togo->GetName();
566  fGuirc.SetValue(Form("%s.Directory", togo->GetName()), togo->GetDirectory());
567  }
568  fGuirc.SetValue("SimDirs", simdirs);
570 }
571 
572 
573 
575 
577 {
579  if (fSelectedSimDir) {
582  BremDir->SetEnabled();
583  BimpSim->SetEnabled();
585  }
586  else {
590  }
591 }
592 
593 
595 
597 {
599  if (fSelectedSimDir) {
602  TGFileInfo fi;
603  fi.fIniDir = StrDup(dir);
604  new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDDirectory, &fi);
605  if (fi.fFilename && TString(fi.fIniDir) != fSelectedSimDir->GetDirectory()) {
607  // add info to dataset table in db for next time
608 #ifdef WITH_RSQLITE
609  fConfigDB["Datasets"]["AuxDir"] = fi.fIniDir;
610  fConfigDB.update("Datasets", "AuxDir", Form("Name = '%s'", fSelectedSimDir->GetName()));
611 #endif
612  RefreshSimDir();
613  }
614  }
615  }
616 }
617 
618 
619 
621 
623 {
624  static TString dir(".");
625  const char* filetypes[] = {
626  "Class header files", "*.h",
627  0, 0
628  };
629  TGFileInfo fi;
630  fi.fIniDir = StrDup(dir);
631  fi.fFileTypes = filetypes;
632  new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDOpen, &fi);
633  if (fi.fFilename) {
635  Int_t idot = fAnalClass.name.Index(".");
636  if (idot < 0) return;
637  fAnalClass.name.Remove(idot, 2);
641  }
642  }
643  dir = fi.fIniDir;
644 }
645 
646 
647 
649 
651 {
653 }
654 
655 
656 
658 
659 void KVSimDirGUI::SelectDataSet(const char* name)
660 {
661  KVDataSet* ds = gDataSetManager->GetDataSet(name);
662  if (ds) {
663  fDataset = name;
664  fSystem = "";
665  fRun = 0;
666  ds->cd();
667  GeoType(kGTROOT);
668  KVSeqCollection* systems = 0;
669  if (gExpDB) systems = gExpDB->GetSystems();
671  while (auto me = (TGMenuEntry*)it()) {
672  if (me->GetEntryId() != menus.filter.ad_hoc_reaction) menus.filter.reaction->DeleteEntry(me);
673  }
675  if (systems) {
676  TIter next(systems);
677  KVDBSystem* sys;
678  int i = menus.filter.ad_hoc_reaction;
679  while ((sys = (KVDBSystem*)next())) {
680  if (sys->IsCollision()) menus.filter.reaction->AddEntry(sys->GetName(), ++i);
681  }
683  }
684  // empty data quality menu
686  while (auto entry = (TGMenuEntry*)itdqa()) {
687  if (entry->GetPopup())
688  delete entry->GetPopup();
690  }
691  menus.filter.DQA_map.clear();
692  fDataQualityAudit = "";
693  // fill data quality menu
696  menus.filter.data_quality->AddEntry("[none]", i++);
697  if (ds->FindDataSetFile("DataQualityAudit.root")) {
698  std::unique_ptr<TFile> dqaf(TFile::Open(ds->GetFullPathToDataSetFile("DataQualityAudit.root")));
699  std::unordered_map<std::string, TGPopupMenu*> DQA_system_popups;
701  menus.filter.data_quality->AddEntry("all reactions", i++);
702  if (systems) {
703  TIter next(systems);
704  KVDBSystem* sys;
705  while ((sys = (KVDBSystem*)next())) {
706  if (sys->IsCollision()) {
707  if (dqaf->FindKey(sys->GetBatchNameWithoutEnergy())) {
708  if (DQA_system_popups.find(sys->GetBatchNameWithoutEnergy().Data()) == DQA_system_popups.end()) {
709  DQA_system_popups[sys->GetBatchNameWithoutEnergy().Data()] =
711  menus.filter.DQA_map[i] = {sys->GetBatchNameWithoutEnergy().Data(), DQA_system_popups[sys->GetBatchNameWithoutEnergy().Data()]};
712  DQA_system_popups[sys->GetBatchNameWithoutEnergy().Data()]->AddEntry("all energies", i++);
713  }
714  if (dqaf->FindKey(sys->GetBatchName())) {
715  menus.filter.DQA_map[i] = {sys->GetBatchName().Data(), DQA_system_popups[sys->GetBatchNameWithoutEnergy().Data()]};
716  DQA_system_popups[sys->GetBatchNameWithoutEnergy().Data()]->AddEntry(sys->GetReactionEnergyWithoutName(), i++);
717  }
718  }
719  }
720  }
721  }
722  menus.filter.last_dqa = i;
723  }
724  }
725 }
726 
727 
728 
730 
731 void KVSimDirGUI::SelectSystem(const char* sysname)
732 {
734  while (auto me = (TGMenuEntry*)it()) {
735  if (me->GetEntryId() != menus.filter.no_run_number) menus.filter.run_number->DeleteEntry(me);
736  }
738  fRun = 0;
739  fSystem = sysname;
740  KVDBSystem* sys = gExpDB->GetSystem(sysname);
741  if (sys) {
742  auto runs = sys->GetRuns();
743  KVDBRun* dbr;
744  TIter next(runs);
745  while ((dbr = (KVDBRun*)next())) {
748  }
749  }
750 }
751 
752 
753 
756 
758 {
759  // Called when "Process" button is pressed to launch the analysis
760 
761  if (fAnalysisMode)
762  RunAnalysis("tree");
763  else if (fFilterMode) {
764  if (fDataset == "") { // Make sure a dataset has been chosen
765  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::Run", "First choose the dataset which describes the geometry!", kMBIconExclamation);
766  return;
767  }
768  RunAnalysis("filter");
769  }
770 }
771 
772 
773 // void KVSimDirGUI::ChangeOutputDirectory()
774 // {
775 // static TString dir(".");
776 // TGFileInfo fi;
777 // fi.fIniDir = StrDup(dir);
778 // new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDDirectory, &fi);
779 // if (fi.fFilename) {
780 // fTEOutputDir->SetText(fi.fIniDir);
781 // }
782 // dir = fi.fIniDir;
783 // }
784 
785 
787 
789 {
790  unique_ptr<TList> selected_sim_runs(fLVsimData->GetSelectedObjects());
791  unique_ptr<TList> selected_filt_runs(fLVfiltData->GetSelectedObjects());
792  TList* runs_to_analyse(nullptr);
793  TList* aux_runs_to_analyse(nullptr);
794  TString analysis_task;
795  if (type == "tree") { // analysis of simulated or filtered events
796  if (!selected_sim_runs->GetEntries() && !selected_filt_runs->GetEntries()) {
797  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunAnalysis", "Choose one or more simulated or filtered data files!", kMBIconExclamation);
798  return;
799  }
800  // if (selected_sim_runs->GetEntries() && selected_filt_runs->GetEntries()) {
801  // new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunAnalysis", "Choose EITHER simulated or filtered data files!", kMBIconExclamation);
802  // return;
803  // }
804  if (!fAnalClass.with_files()) {
805  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunAnalysis", "Choose a valid analysis class!", kMBIconExclamation);
806  return;
807  }
808  if (selected_sim_runs->GetEntries()) {
809  if (selected_filt_runs->GetEntries()) {
810  // if both simulated & filtered events are selected, we assume the user wants to analyse filtered
811  // data while having access to the original non-filtered data as an auxiliary/"friend" tree
812  runs_to_analyse = selected_filt_runs.get();
813  analysis_task = "analysis filtered";
814  aux_runs_to_analyse = selected_sim_runs.get();
815  }
816  else {
817  runs_to_analyse = selected_sim_runs.get();
818  analysis_task = "analysis simulated";
819  }
820  }
821  else {
822  runs_to_analyse = selected_filt_runs.get();
823  analysis_task = "analysis filtered";
824  }
825  }
826  else {
827  // filtering
828  if (selected_filt_runs->GetEntries()) {
829  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunFilter", "Only simulated events can be filtered!", kMBIconExclamation);
830  return;
831  }
832  if (!selected_sim_runs->GetEntries()) {
833  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunFilter", "Choose a simulated data file to filter!", kMBIconExclamation);
834  return;
835  }
836  runs_to_analyse = selected_sim_runs.get();
837  analysis_task = "filter simulated";
838  // set auxiliary directory of current KVSimDir to current working directory
839  // (where filter should output any new files)
840  fSelectedSimDir = dynamic_cast<KVSimFile*>(runs_to_analyse->First())->GetSimDir();
843 #ifdef WITH_RSQLITE
844  // add info to dataset table in db for next time
845  fConfigDB["Datasets"]["AuxDir"] = gSystem->pwd();
846  fConfigDB.update("Datasets", "AuxDir", Form("Name = '%s'", fSelectedSimDir->GetName()));
847 #endif
848  }
849  }
850  KVDataAnalysisTask* anTask = gDataSetManager->GetAnalysisTaskAny(analysis_task);
851  gDataAnalyser = KVDataAnalyser::GetAnalyser(anTask->GetDataAnalyser());
852  gDataAnalyser->SetAnalysisTask(anTask);
853  gDataAnalyser->SetFileList(runs_to_analyse);
854  if (aux_runs_to_analyse) gDataAnalyser->SetAuxFileList(aux_runs_to_analyse);
855  if (anTask->WithUserClass()) {
856  gDataAnalyser->SetUserClass(fAnalClass);
857  if (!gDataAnalyser->IsUserClassValid()) {
858  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunAnalysis", "Compilation failed. Correct mistakes and try again!", kMBIconExclamation);
859  }
860  }
861  else if (strcmp(anTask->GetUserBaseClass(), ""))
862  gDataAnalyser->SetUserClass(KVDataAnalyser::UserClass{anTask->GetUserBaseClass()}, kFALSE);//task with default "user" class
863  Bool_t all_events = fCBAllEvents->IsDown();
864  if (!all_events)
866  else
867  gDataAnalyser->SetNbEventToRead(0);
868  fCancelJob = kFALSE;
869  if (type == "filter") {
870  // set extra infos in kvsimdiranalyser for auto jobname
871  if (fCustomKinematics) {
872  // if an ad hoc system is used for the kinematics, we have to use it instead of fSystem,
873  // but only after first checking if it is legit
875  // check valid ad hoc system given by user
876  if (cd.IsZombie()) {
877  Error("SetFilterOptions", "Please check the format of the ad hoc system name you gave");
878  WarningBox("Bad System", "Please check the format of the ad hoc system name you gave", kFALSE);
879  fCancelJob = kTRUE;
880  }
881  else {
882  cd.CalculateKinematics();
883  cd.Print();
885  }
886  }
887 
888  KVSimDirAnalyser* simda = dynamic_cast<KVSimDirAnalyser*>(gDataAnalyser);
890  simda->SetSystemForFilter(fSystem);
891  }
892  Bool_t cancel_batch_job = kFALSE;
893  if (fWithPROOF) {
894  gBatchSystem->Clear();
895  KVNameValueList batchParams;
896  gBatchSystem->GetBatchSystemParameterList(batchParams);
897  new KVBatchSystemParametersGUI(MainFrame, &batchParams, gDataAnalyser, &cancel_batch_job);
898  if (!cancel_batch_job) {
899  gBatchSystem->SetBatchSystemParameters(batchParams);
900  gDataAnalyser->SetBatchSystem(gBatchSystem);
901  }
902  }
903  if (!cancel_batch_job && !fCancelJob) {
904  if (type == "filter") SetFilterOptions(); // this may yet set fCancelJob=true...
905  if (!fCancelJob) gDataAnalyser->Run();
906  }
907  selected_filt_runs.reset(nullptr);
908  selected_sim_runs.reset(nullptr);
909  RefreshSimDir();
910 }
911 
912 
913 
915 
916 TString KVSimDirGUI::GetKinematicsString()
917 {
918  TString kinema;
919  if (fKine == kKCM) kinema = "cm";
920  else if (fKine == kKProj) kinema = "proj";
921  else kinema = "lab";
922 
923  return kinema;
924 }
925 
926 
927 
929 
931 {
932  TString filter;
933  switch (fFilterType) {
934  case kFTGeo:
935  filter = "Geo";
936  break;
937  case kFTSeuils:
938  filter = "GeoThresh";
939  break;
940  case kFTFull:
941  filter = "Full";
942  }
943 
944  return filter;
945 }
946 
947 
948 
950 
952 {
953  TString kinema = GetKinematicsString();
954  TString filter = GetFilterTypeString();
955 
956  TString options;
957  options = Form("Dataset=%s,", fDataset.Data());
958  if (fSystem != "") options += Form("System=%s,", fSystem.Data());
959  else if (kinema != "lab") {
960  // a kinematical frame transform is required, but no system is given!
961  new TGMsgBox(gClient->GetRoot(), MainFrame,
962  "KVSimDirGUI::SetFilterOptions",
963  Form("Cannot transform kinematics from %s to lab without a defined reaction (system)!", kinema.Data()),
965  fCancelJob = true;
966  return;
967  }
968  options += Form("Filter=%s,", filter.Data());
969  options += Form("Kinematics=%s", kinema.Data());
970  if (fDataQualityAudit != "") options += Form(",DataQualityAudit=%s", fDataQualityAudit.Data());
971  if (fRun != 0) {
972  TString r;
973  r.Form(",Run=%d", fRun);
974  options += r;
975  }
976  else if (filter == "Full" && (fCustomKinematics || fSystem == "")) {
977  // "Full" filter requires run number to work: either given explicitly or taken from first run of database system (not ad hoc)
978  new TGMsgBox(gClient->GetRoot(), MainFrame,
979  "KVSimDirGUI::SetFilterOptions",
980  Form("To use 'FULL' (run-dependent) filter requires either a run number or a system from the dataset!"),
982  fCancelJob = true;
983  return;
984  }
985  if (!fRandomPhi) options += ",PhiRot=no";
986  if (fGemDecay) {
987  options += ",Gemini=yes";
988  options += Form(",GemDecayPerEvent=%d", fGemDecayPerEvent);
989  if (fGemAddRotEner) options += Form(",GemAddRotEner=yes");
990  }
991 
992  gDataAnalyser->SetUserClassOptions(options);
993 
994  std::cout << options << std::endl;
995 }
996 
997 
998 
1001 
1003 {
1004  // Import simulation data from currently selected directory
1005 
1006  const char* filetypes[] = {
1007  "All files", "*.*",
1008  0, 0
1009  };
1010  TGFileInfo fi;
1012  fi.fFileTypes = filetypes;
1013  fi.SetMultipleSelection(true);
1014 
1015  new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDOpen, &fi);
1016 
1017  bool one_file = (!fi.fMultipleSelection && fi.fFilename);
1018  bool many_files = (fi.fMultipleSelection && fi.fFileNamesList);//may only be one
1019  if (one_file || many_files) {
1020  // set up list of KVSimReader plugins
1021  KVString plugins = KVBase::GetListOfPlugins("KVSimReader");
1022  KVString choices;
1023  plugins.Begin(" ");
1024  while (!plugins.End()) {
1025  // get URI corresponding to plugin
1026  KVString uri = KVBase::GetPluginURI("KVSimReader", plugins.Next());
1027  if (choices.Length()) choices += " ";
1028  choices += uri;
1029  }
1030  // get model from user
1031  TString model;
1032  Bool_t ok;
1033  new KVDropDownDialog(MainFrame, "Choose the simulation model and type of events", choices, 0, &model, &ok);
1034  if (ok) {
1035 
1036  if (one_file) {
1037  unique_ptr<KVSimReader> SR(KVSimReader::MakeSimReader(model));
1038  SR->SetOutputDirectory(fSelectedSimDir->GetDirectory());
1039  SR->ConvertAndSaveEventsInFile(fi.fFilename);
1040  }
1041  else {
1042  if (fi.fFileNamesList->GetEntries() == 1) {
1043  unique_ptr<KVSimReader> SR(KVSimReader::MakeSimReader(model));
1044  SR->SetOutputDirectory(fSelectedSimDir->GetDirectory());
1045  SR->ConvertAndSaveEventsInFile(fi.fFileNamesList->First()->GetName());
1046  }
1047  else {
1048  TIter it(fi.fFileNamesList);
1049  TObject* o;
1050  int i = 1;
1051  while ((o = it())) {
1052  unique_ptr<KVSimReader> SR(KVSimReader::MakeSimReader(model));
1053  SR->SetMultiFiles();
1054  SR->SetFileIndex(i++);
1055  SR->SetOutputDirectory(fSelectedSimDir->GetDirectory());
1056  SR->ConvertAndSaveEventsInFile(o->GetName());
1057  }
1058  }
1059  }
1060 
1061  RefreshSimDir();
1062  }
1063  }
1064  else if (fi.fMultipleSelection && fi.fFileNamesList) {
1065  fi.fFileNamesList->ls();
1066  }
1067 }
1068 
1069 
1070 
1073 
1075 {
1076  // Get name of new class
1077  TString classname;
1078  Bool_t ok;
1079  new KVInputDialog(MainFrame, "Enter name of new analysis class", &classname, &ok, "Enter name of new analysis class");
1080  // check new classname is not name of existing class
1081  KVString impfile, decfile;
1082  if (KVBase::FindClassSourceFiles(classname, impfile, decfile)) {
1083  ok = ok && WarningBox("Replacing existing class",
1084  Form("%s is the name of an existing class defined in [%s,%s].\nDo you want to overwrite this class?\n(All existing code will be lost)",
1085  classname.Data(), decfile.Data(), impfile.Data()),
1086  kTRUE);
1087  }
1088  if (ok) {
1089  KVSimDirFilterAnalyser::Make(classname);
1090  fStatusBar->SetText(Form("Generated new filtered analysis class %s", classname.Data()), 1);
1091  }
1092 }
1093 
1094 
1095 
1098 
1100 {
1101  // Get name of new class
1102  TString classname;
1103  Bool_t ok;
1104  new KVInputDialog(MainFrame, "Enter name of new analysis class", &classname, &ok, "Enter name of new analysis class");
1105  // check new classname is not name of existing class
1106  KVString impfile, decfile;
1107  if (KVBase::FindClassSourceFiles(classname, impfile, decfile)) {
1108  ok = ok && WarningBox("Replacing existing class",
1109  Form("%s is the name of an existing class defined in [%s,%s].\nDo you want to overwrite this class?\n(All existing code will be lost)",
1110  classname.Data(), decfile.Data(), impfile.Data()),
1111  kTRUE);
1112  }
1113  if (ok) {
1114  KVSimDirAnalyser::Make(classname);
1115  fStatusBar->SetText(Form("Generated new simulated analysis class %s", classname.Data()), 1);
1116  }
1117 }
1118 
1119 
1120 
1126 
1127 Bool_t KVSimDirGUI::WarningBox(const char* title, const char* msg, Bool_t confirm)
1128 {
1129  // Warning box in case of problems
1130  // if confirm=kTRUE we ask for a yes/no answer from the user:
1131  // if 'yes' is pressed, we return kTRUE, if 'no', kFALSE.
1132  // by default, only a 'dismiss' button is shown, and this method always returns kTRUE.
1133 
1134  Bool_t reply = kTRUE;
1135  if (!confirm)
1136  new TGMsgBox(gClient->GetRoot(), MainFrame, title, msg, kMBIconExclamation);
1137  else {
1138  Int_t ret_code = 0;
1139  new TGMsgBox(gClient->GetRoot(), MainFrame, title, msg, kMBIconExclamation, kMBYes | kMBNo, &ret_code);
1140  reply = (ret_code & kMBYes);
1141  }
1142  return reply;
1143 }
1144 
1145 
1146 
1148 
1150 {
1151  int parts[] = {14, 25, 10, 14, 9, 7, 10};
1152  fStatusBar->SetParts(parts, 7);
1155  fStatusBar->SetText(Form("Run: %d", fRun), 2);
1156  fStatusBar->SetText(Form("Audit: %s", fDataQualityAudit.Data()), 3);
1157  fStatusBar->SetText(GetFilterTypeString().Data(), 4);
1158  fStatusBar->SetText(GetKinematicsString().Data(), 5);
1159  TString gemphi;
1160  if (fGemDecay) {
1161  gemphi = Form("Gem++, %d/ev.", fGemDecayPerEvent);
1162  if (fGemAddRotEner) gemphi += " +Erot";
1163  }
1164  if (fRandomPhi) {
1165  if (gemphi.Length()) gemphi += "; ";
1166  gemphi += "phi RNDM";
1167  }
1168  fStatusBar->SetText(gemphi, 6);
1169 }
1170 
1171 
1172 
1174 
1176 {
1177  fStatusBar->SetParts(2);
1178  if (!fAnalClass.name.IsNull()) {
1179  fStatusBar->SetText(Form("Analysis class: %s", fAnalClass.name.Data()), 0);
1180  fStatusBar->SetText(Form("Found header file %s and implementation file %s", fAnalClass.dec_file.Data(), fAnalClass.imp_file.Data()), 1);
1181  }
1182  else
1183  fStatusBar->SetText("Analysis class:", 0);
1184 }
1185 
1186 
1187 #ifdef WITH_RSQLITE
1188 
1191 
1193 {
1194  // Rebuild all KVSimDir/KVSimFile objects from information in sqlite DB
1195 
1196  fConfigDB.select_data("Datasets");
1197  KVNameValueList tables;
1198  while (fConfigDB.get_next_result()) {
1199  auto sd = new KVSimDir(fConfigDB["Datasets"]["Name"].get_data<TString>(),
1200  fConfigDB["Datasets"]["Directory"].get_data<TString>());
1201  if (!fConfigDB["Datasets"]["AuxDir"].is_null())
1202  sd->SetAuxDirectory(fConfigDB["Datasets"]["AuxDir"].get_data<TString>());
1203  fListOfDirs.Add(sd);
1204  tables.SetValue(fConfigDB["Datasets"]["Name"].get_data<TString>(),
1205  fConfigDB["Datasets"]["Table"].get_data<TString>());
1206  }
1207  for (int i = 0; i < tables.GetNpar(); ++i) {
1209  fConfigDB.select_data(tables.GetValue<TString>(i));
1210  KVSQLite::table& dstable = fConfigDB[tables.GetValue<TString>(i)];
1211  while (fConfigDB.get_next_result()) {
1212  bool from_aux_dir = dstable["AuxDir"].get_data<int>();
1213  if (dstable["Filtered"].get_data<int>()) {
1214  // filtered/reconstructed data
1215  KVSimFile* f = new KVSimFile(
1216  nullptr,
1217  dstable["FileName"].get_data<TString>(), dstable["TreeInfo"].get_data<TString>(),
1218  dstable["Events"].get_data<int>(), dstable["TreeName"].get_data<TString>(),
1219  dstable["BranchName"].get_data<TString>(), dstable["DataSet"].get_data<TString>(),
1220  dstable["System"].get_data<TString>(), dstable["Run"].get_data<int>(),
1221  dstable["OrigFile"].get_data<TString>(),
1222  dstable["FiltType"].get_data<TString>(),
1223  dstable["DataQualityAudit"].get_data<TString>()
1224  );
1225  f->SetGemini(dstable["Gemini"].get_data<bool>());
1226  if (f->IsGemini()) f->SetGemDecayPerEvent(dstable["GemDecayPerEvent"].get_data<int>());
1227  sd->AddFiltData(f, from_aux_dir);
1228  }
1229  else {
1230  // simulation data
1231  KVSimFile* f = new KVSimFile(
1232  nullptr,
1233  dstable["FileName"].get_data<TString>(), dstable["TreeInfo"].get_data<TString>(),
1234  dstable["Events"].get_data<int>(), dstable["TreeName"].get_data<TString>(),
1235  dstable["BranchName"].get_data<TString>());
1236  sd->AddSimData(f, from_aux_dir);
1237  }
1238  }
1239  }
1240 }
1241 
1242 #endif
1243 
int Int_t
kVerticalFrame
kHorizontalFrame
kMainFrame
ROOT::R::TRInterface & r
#define f(i)
bool Bool_t
constexpr Bool_t kFALSE
constexpr Bool_t kTRUE
kEnvUser
kButtonDown
#define gClient
kMWMFuncAll
kMWMDecorAll
kMWMInputModeless
kLHintsRight
kLHintsExpandY
kLHintsLeft
kLHintsCenterY
kLHintsTop
kLHintsExpandX
kMBNo
kMBYes
kMBIconExclamation
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t 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
char name[80]
#define quest
char * Form(const char *fmt,...)
char * StrDup(const char *str)
R__EXTERN TSystem * gSystem
Relativistic binary kinematics calculator.
Definition: KV2Body.h:166
void CalculateKinematics()
Definition: KV2Body.cpp:677
void Print(Option_t *opt="") const override
Definition: KV2Body.cpp:813
void Error(const char *method, const char *msgfmt,...) const override
Definition: KVBase.cpp:1650
static const Char_t * GetListOfPlugins(const Char_t *base)
Definition: KVBase.cpp:1228
static Bool_t FindClassSourceFiles(const KVString &class_name, KVString &imp_file, KVString &dec_file, const KVString &dir_name=".")
Definition: KVBase.cpp:1072
static const Char_t * GetPluginURI(const Char_t *base, const Char_t *plugin)
Definition: KVBase.cpp:1145
Handles list of all available batch systems for processing non-interactive data analysis tasks.
KVBatchSystem * GetDefaultBatchSystem() const
Utility GUI used for setting batch system parameters.
void Clear(Option_t *opt="") override
void cd()
Make this the default batch system.
virtual void SetBatchSystemParameters(const KVNameValueList &)
Use the parameters in the list to set all relevant parameters for batch system.
virtual void GetBatchSystemParameterList(KVNameValueList &)
virtual Int_t GetNumber() const
Definition: KVDBRecord.h:73
Description of an experimental run in database ,,.
Definition: KVDBRun.h:41
Database class used to store information on different colliding systems studied during an experiment....
Definition: KVDBSystem.h:52
Bool_t IsCollision() const
retourne kTRUE, si le systeme est une collision ie projectile+cible
Definition: KVDBSystem.cpp:105
KVUnownedList * GetRuns() const
Returns a sorted list of all the runs associated with this system.
Definition: KVDBSystem.h:118
TString GetBatchName()
Definition: KVDBSystem.cpp:630
TString GetBatchNameWithoutEnergy()
Definition: KVDBSystem.cpp:663
TString GetReactionNameWithoutEnergy()
Definition: KVDBSystem.cpp:694
TString GetReactionEnergyWithoutName()
Definition: KVDBSystem.cpp:719
virtual void Run()
Check all task variables, then run analyser.
virtual void SetAuxFileList(TList *)
void SetBatchSystem(KVBatchSystem *bs)
void SetUserClassOptions(const Char_t *o="")
void SetAnalysisTask(KVDataAnalysisTask *at)
void SetUserClass(const UserClass &kvs, Bool_t check=kTRUE)
virtual void SetFileList(TList *)
static KVDataAnalyser * GetAnalyser(const Char_t *plugin)
Bool_t IsUserClassValid() const
void SetNbEventToRead(Long64_t nb=0)
Define and manage data analysis tasks.
virtual Bool_t WithUserClass() const
virtual const Char_t * GetDataAnalyser() const
virtual const Char_t * GetUserBaseClass() const
Manage all datasets contained in a given data repository.
virtual Bool_t Init(KVDataRepository *=0)
virtual Int_t GetNtotal() const
KVDataAnalysisTask * GetAnalysisTaskAny(const Char_t *keywords) const
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.
Definition: KVDataSet.h:130
TString GetFullPathToDataSetFile(const Char_t *filename)
Definition: KVDataSet.cpp:1811
void cd() const
Definition: KVDataSet.cpp:692
static Bool_t FindDataSetFile(const TString &dataset, const Char_t *filename)
Definition: KVDataSet.cpp:1845
Ask user to choose between several options in a drop-down list.
virtual KVDBSystem * GetSystem(const Char_t *system) const
Definition: KVExpDB.h:110
virtual KVSeqCollection * GetSystems() const
Definition: KVExpDB.h:114
Modified version of TGFileDialog file selection dialog.
Definition: KVFileDialog.h:49
General purpose dialog box asking for some input in the form of a string.
Definition: KVInputDialog.h:24
Enhanced version of ROOT TGListView widget.
Definition: KVListView.h:146
virtual void ActivateSortButtons()
Definition: KVListView.cpp:72
virtual void SetDataColumns(Int_t ncolumns)
Definition: KVListView.cpp:91
virtual void Display(const TCollection *l)
Definition: KVListView.h:173
TList * GetSelectedObjects() const
Definition: KVListView.h:249
virtual void RemoveAll()
Definition: KVListView.h:190
void AllowContextMenu(Bool_t on=kTRUE)
Definition: KVListView.h:287
virtual void SetDataColumn(Int_t index, const Char_t *name, const Char_t *method="", Int_t mode=kTextCenterX)
Definition: KVListView.cpp:106
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
KVNamedParameter * GetParameter(Int_t idx) const
void SetValue(const Char_t *name, value_type value)
Int_t GetNpar() const
value_type GetValue(const Char_t *name) const
const Char_t * GetString() const
int get_number_of_tables() const
Definition: SQLiteDB.h:522
table & add_table(const table &)
Definition: SQLiteDB.cpp:258
bool update(const TString &table, const TString &columns, const TString &selection="")
Definition: SQLiteDB.cpp:1182
void delete_data(const TString &table, const TString &selection="")
Definition: SQLiteDB.cpp:1262
void delete_table(const TString &table)
Definition: SQLiteDB.cpp:1240
column & add_column(const TString &table, const TString &name, const TString &type)
Definition: SQLiteDB.cpp:1285
void insert_data_row()
Definition: SQLiteDB.cpp:533
void end_data_insertion()
Definition: SQLiteDB.cpp:620
bool select_data(const TString &tables, const TString &columns="*", const TString &selection="", bool distinct=false, const TString &anything_else="") const
Definition: SQLiteDB.cpp:835
KVNameValueList get_name_value_list(const TString &table, const TString &name_column, const TString &value_column, const TString &selection="", const TString &anything_else="")
Definition: SQLiteDB.cpp:1045
bool get_next_result() const
Definition: SQLiteDB.cpp:954
bool prepare_data_insertion(const TString &)
Definition: SQLiteDB.cpp:307
void clear_table(const TString &name)
Delete all data from table.
Definition: SQLiteDB.cpp:1093
int count(const TString &tables, const TString &column="*", const TString &selection="", bool distinct=false, const TString &anything_else="") const
Definition: SQLiteDB.cpp:1124
void primary_key(const TString &cols)
Definition: SQLiteDB.h:432
column & add_column(const KVSQLite::column &c)
Definition: SQLiteDB.cpp:1623
KaliVeda extensions to ROOT collection classes.
TObject * Remove(TObject *obj) override
Remove object from list.
void Add(TObject *obj) override
TObject * FindObject(const char *name) const override
Class piloting analyses of simulated data.
void SetDataSetForFilter(const TString &f)
void SetSystemForFilter(const TString &f)
static void Make(const Char_t *kvsname="MySimulatedAnalysis")
Generate a new simulated analysis selector class.
static void Make(const Char_t *kvsname="MyFilteredAnalysis")
Generate a new filtered analysis selector class.
GUI for analysing and filtering simulated data.
Definition: KVSimDirGUI.h:160
TGStatusBar * fStatusBar
Definition: KVSimDirGUI.h:167
KVString fDataQualityAudit
Definition: KVSimDirGUI.h:188
TGPictureButton * BremDir
Definition: KVSimDirGUI.h:171
Int_t fGemDecayPerEvent
Definition: KVSimDirGUI.h:193
void SelectDataSet(const char *)
void ReconstructSimDirsFromDB()
Rebuild all KVSimDir/KVSimFile objects from information in sqlite DB.
void NewFilteredAnalysisClass()
Get name of new class.
Bool_t fGemAddRotEner
Definition: KVSimDirGUI.h:192
KVSQLite::database fConfigDB
Definition: KVSimDirGUI.h:216
void RemSimDir()
void EmptyTreeList()
Bool_t fFilterMode
Definition: KVSimDirGUI.h:220
void RefreshSimDir()
void SelectAnalysisClass()
Bool_t fGemDecay
Definition: KVSimDirGUI.h:191
void FilterType(Int_t i)
Definition: KVSimDirGUI.h:488
void SetFilterOptions()
KVDataAnalyser::UserClass fAnalClass
Definition: KVSimDirGUI.h:182
void AddSimDir()
TGCheckButton * fCBAllEvents
Definition: KVSimDirGUI.h:183
void NewSimulatedAnalysisClass()
Get name of new class.
KVList fListOfDirs
Definition: KVSimDirGUI.h:163
TGMainFrame * MainFrame
Definition: KVSimDirGUI.h:166
void SetAnalysisStatusBar()
TGViewPort * fDirListViewPort
Definition: KVSimDirGUI.h:175
TGNumberEntry * fNENumberEvents
Definition: KVSimDirGUI.h:184
void SelectSystem(const char *)
Bool_t fAnalysisMode
Definition: KVSimDirGUI.h:220
menu_struct menus
Definition: KVSimDirGUI.h:439
void FillTreeList()
Int_t fFilterType
Definition: KVSimDirGUI.h:208
KVSimDir * fSelectedSimDir
Definition: KVSimDirGUI.h:164
KVString fReactionKinematics
Definition: KVSimDirGUI.h:186
KVString fSystem
Definition: KVSimDirGUI.h:186
TGListTree * fDirListTree
Definition: KVSimDirGUI.h:176
TGCanvas * fDirListCanvas
Definition: KVSimDirGUI.h:174
void AddAuxDir(TGListTreeItem *simdir, Int_t)
const TGPicture * pclose
used for list tree items
Definition: KVSimDirGUI.h:178
void SetRandomPhi(Bool_t on)
Definition: KVSimDirGUI.h:504
const TGPicture * popen
used for list tree items
Definition: KVSimDirGUI.h:177
void SetFilterStatusBar()
Bool_t fCustomKinematics
Definition: KVSimDirGUI.h:189
KVListView * fLVfiltData
Definition: KVSimDirGUI.h:181
void Run()
void ChangeOutputDirectory();
void FillDataSetTableWithInfos(TString ds_table_name, KVSimDir *sd)
Definition: KVSimDirGUI.cpp:70
TGPictureButton * proof_analysis
TGTextEntry* fTEOutputDir;.
Definition: KVSimDirGUI.h:212
void EnableEventNumberEntry(Bool_t)
TString GetFilterTypeString()
void RunAnalysis(const TString &type)
Bool_t WarningBox(const char *title, const char *msg, Bool_t confirm)
TGPictureButton * BaddDir
Definition: KVSimDirGUI.h:169
void SetGeminiDecay(Bool_t on)
Definition: KVSimDirGUI.h:508
Bool_t fWithPROOF
=kTRUE when running with PROOF-lite
Definition: KVSimDirGUI.h:218
void GeoType(Int_t i)
Definition: KVSimDirGUI.h:492
Bool_t fCancelJob
if job parameters are not valid
Definition: KVSimDirGUI.h:219
void Kinematics(Int_t i)
Definition: KVSimDirGUI.h:496
Bool_t fRandomPhi
Definition: KVSimDirGUI.h:190
KVListView * fLVsimData
Definition: KVSimDirGUI.h:180
TGPictureButton * BimpSim
Definition: KVSimDirGUI.h:170
TGPictureButton * BrefreshDir
Definition: KVSimDirGUI.h:172
void SelectSimDir(TGListTreeItem *, Int_t)
TString AddTableForDataSet(KVSimDir *sd, int ds_table_number)
Add a new dataset table for the given KVSimDir object.
Definition: KVSimDirGUI.cpp:36
void ImportSimulation()
Import simulation data from currently selected directory.
KVString fDataset
Definition: KVSimDirGUI.h:185
Handle directory containing simulated and/or filtered simulated data ,.
Definition: KVSimDir.h:43
const KVList * GetFiltDataList() const
Definition: KVSimDir.h:76
void SetAuxDirectory(const TString &)
Definition: KVSimDir.cpp:118
void AddFiltData(KVSimFile *, bool=false)
Definition: KVSimDir.cpp:334
Bool_t HasAuxDirectory() const
Definition: KVSimDir.cpp:143
const Char_t * GetDirectory() const
Definition: KVSimDir.h:61
Bool_t IsFromAuxDirectory(KVSimFile *) const
returns true if given file is in the auxiliary directory
Definition: KVSimDir.cpp:153
const KVList * GetSimDataList() const
Definition: KVSimDir.h:72
void AnalyseDirectory()
Definition: KVSimDir.cpp:171
void AddSimData(KVSimFile *, bool=false)
Definition: KVSimDir.cpp:317
Handle file containing simulated and/or filtered simulated data ,.
Definition: KVSimFile.h:20
const Char_t * GetSystem() const
Definition: KVSimFile.h:88
const Char_t * GetBranchName() const
Definition: KVSimFile.h:125
const Char_t * GetOriginalFile() const
Definition: KVSimFile.h:130
Int_t GetRun() const
Definition: KVSimFile.h:103
const Char_t * GetFilterType() const
Definition: KVSimFile.h:98
Bool_t IsGemini() const
Definition: KVSimFile.h:50
const Char_t * GetDataSet() const
Definition: KVSimFile.h:83
Long64_t GetEvents() const
Definition: KVSimFile.h:78
const Char_t * GetDataQualityAudit() const
Definition: KVSimFile.h:135
const Char_t * GetTreeName() const
Definition: KVSimFile.h:120
Int_t GetGemDecayPerEvent() const
Definition: KVSimFile.h:62
static KVSimReader * MakeSimReader(const char *model_uri)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
void Begin(TString delim) const
Definition: KVString.cpp:565
Bool_t End() const
Definition: KVString.cpp:634
KVString Next(Bool_t strip_whitespace=kFALSE) const
Definition: KVString.cpp:695
void ls(Option_t *option="") const override
virtual Int_t GetEntries() const
virtual const char * GetValue(const char *name, const char *dflt) const
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=nullptr)
virtual void SaveLevel(EEnvLevel level)
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
virtual void SetToolTipText(const char *text, Long_t delayms=400)
virtual void AllowStayDown(Bool_t a)
virtual void SetEnabled(Bool_t e=kTRUE)
virtual void SetContainer(TGFrame *f)
TGViewPort * GetViewPort() const
void MapSubwindows() override
Bool_t IsDown() const override
void SetState(EButtonState state, Bool_t emit=kFALSE) override
TGDimension GetDefaultSize() const override
virtual void SetLayoutManager(TGLayoutManager *l)
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr)
void MapSubwindows() override
TList * fFileNamesList
char * fFilename
void SetMultipleSelection(Bool_t option)
const char ** fFileTypes
char * fIniDir
Bool_t fMultipleSelection
virtual void Resize(TGDimension size)
void MapWindow() override
virtual const char * GetText() const=0
virtual void SetPictures(const TGPicture *, const TGPicture *)
Int_t DeleteItem(TGListTreeItem *item)
TGListTreeItem * GetFirstItem() const
void AddItem(const char *string)
void CloseItem(TGListTreeItem *item)
void SetWindowName(const char *name=nullptr) override
void SetMWMHints(UInt_t value, UInt_t funcs, UInt_t input)
virtual TGPopupMenu * RemovePopup(const char *s)
virtual void SetState(Bool_t enable=kTRUE)
virtual Double_t GetNumber() const
virtual void AddLabel(const char *s, const TGPicture *p=nullptr, TGMenuEntry *before=nullptr)
virtual void CheckEntry(Int_t id)
virtual void DisableEntry(Int_t id)
virtual void AddEntry(const char *s, Int_t id, void *ud=nullptr, const TGPicture *p=nullptr, TGMenuEntry *before=nullptr)
virtual void UnCheckEntry(Int_t id)
virtual void DeleteEntry(Int_t id)
virtual void AddSeparator(TGMenuEntry *before=nullptr)
virtual void RCheckEntry(Int_t id, Int_t IDfirst, Int_t IDlast)
const TList * GetListOfEntries() const
virtual void SetParts(Int_t *parts, Int_t npart)
virtual void SetText(const char *text, Int_t partidx=0)
virtual void SetName(const char *name)
TObject * First() const override
const char * GetName() const override
const char * GetTitle() const override
static TClass * Class()
virtual const char * GetName() const
R__ALWAYS_INLINE Bool_t IsZombie() const
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Ssiz_t Length() const
const char * Data() const
Bool_t IsNull() const
TString & Remove(EStripType s, char c)
TString & ReplaceAll(const char *s1, const char *s2)
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
const char * pwd()
virtual const char * BaseName(const char *pathname)
virtual void SetBuildDir(const char *build_dir, Bool_t isflat=kFALSE)
virtual const char * TempDirectory() const
long long Long64_t
std::map< int, DQA_entry > DQA_map
Definition: KVSimDirGUI.h:312
void handle_menu(menu_type &m)
Definition: KVSimDirGUI.h:434
TGPopupMenu * add_popup(const char *name, TGPopupMenu *parent)
Definition: KVSimDirGUI.h:423
analysis_struct analysis
Definition: KVSimDirGUI.h:291
ClassImp(TPyArg)