KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KVSimDirGUI.cpp
Go to the documentation of this file.
1 //Created by KVClassFactory on Wed Jul 18 11:55:11 2012
2 //Author: John Frankland,,,
3 
4 #include "KVSimDirGUI.h"
5 #include "KVDataSetManager.h"
6 #include "KVBatchSystemManager.h"
7 #include "KVDataSet.h"
8 #include "KVDBSystem.h"
9 #include "KVDBRun.h"
10 #include "KVSimFile.h"
11 #include "KVFileDialog.h"
12 #include "KVInputDialog.h"
13 #include "KV2Body.h"
14 #include "TGLabel.h"
15 #include "TGButtonGroup.h"
16 #include "TGMsgBox.h"
17 #include "TSystem.h"
18 #include "TChain.h"
19 #include <KVDataAnalyser.h>
20 #include <KVSimDirFilterAnalyser.h>
21 #include <KVSimReader.h>
22 #include <iostream>
23 using namespace std;
24 
26 #include "KVDropDownDialog.h"
27 
29 
30 #ifdef WITH_RSQLITE
31 
34 
36 {
37  // Add a new dataset table for the given KVSimDir object
38 
39  TString ds_table_name = Form("Table_%d", ds_table_number);
40  KVSQLite::table DStable(ds_table_name);
41  DStable.add_primary_key("Id");
42  DStable.add_column("FileName", KVSQLite::column_type::TEXT);
43  DStable.add_column("TreeInfo", KVSQLite::column_type::TEXT);
44  DStable.add_column("Filtered", KVSQLite::column_type::INTEGER);
45  DStable.add_column("Events", KVSQLite::column_type::INTEGER);
46  DStable.add_column("DataSet", KVSQLite::column_type::TEXT);
47  DStable.add_column("System", KVSQLite::column_type::TEXT);
49  DStable.add_column("GeoType", KVSQLite::column_type::TEXT);
50  DStable.add_column("TreeName", KVSQLite::column_type::TEXT);
51  DStable.add_column("BranchName", KVSQLite::column_type::TEXT);
52  DStable.add_column("OrigFile", KVSQLite::column_type::TEXT);
53  DStable.add_column("FiltType", KVSQLite::column_type::TEXT);
54  DStable.add_column("Gemini", KVSQLite::column_type::INTEGER);
55  DStable.add_column("GemDecayPerEvent", KVSQLite::column_type::INTEGER);
56  fConfigDB.add_table(DStable);
57  // update name of dataset table in main table
58  fConfigDB["Datasets"]["Table"] = ds_table_name;
59  fConfigDB.update("Datasets", "Table", Form("Name=\"%s\"", sd->GetName()));
60  return ds_table_name;
61 }
62 
63 
64 
66 
68 {
69  fConfigDB.prepare_data_insertion(ds_table_name);
70  KVSQLite::table& dstable = fConfigDB[ds_table_name];
71  if (sd->GetSimDataList()->GetEntries()) {
72  TIter it1(sd->GetSimDataList());
73  KVSimFile* sf = nullptr;
74  while ((sf = (KVSimFile*)it1())) {
75  dstable["Id"].set_null();
76  dstable["FileName"] = sf->GetName();
77  dstable["TreeInfo"] = sf->GetTitle();
78  dstable["Filtered"] = 0;
79  dstable["Events"] = (Int_t)sf->GetEvents();
80  dstable["TreeName"] = sf->GetTreeName();
81  dstable["BranchName"] = sf->GetBranchName();
82  fConfigDB.insert_data_row();
83  }
84  }
85  if (sd->GetFiltDataList()->GetEntries()) {
86  TIter it1(sd->GetFiltDataList());
87  KVSimFile* sf = nullptr;
88  while ((sf = (KVSimFile*)it1())) {
89  dstable["Id"].set_null();
90  dstable["FileName"] = sf->GetName();
91  dstable["TreeInfo"] = sf->GetTitle();
92  dstable["Filtered"] = 1;
93  dstable["Events"] = (Int_t)sf->GetEvents();
94  dstable["TreeName"] = sf->GetTreeName();
95  dstable["BranchName"] = sf->GetBranchName();
96  dstable["DataSet"] = sf->GetDataSet();
97  dstable["System"] = sf->GetSystem();
98  dstable["Run"] = sf->GetRun();
99  dstable["GeoType"] = sf->GetGeometry();
100  dstable["FiltType"] = sf->GetFilterType();
101  dstable["OrigFile"] = sf->GetOriginalFile();
102  dstable["Gemini"] = sf->IsGemini();
103  dstable["GemDecayPerEvent"] = sf->GetGemDecayPerEvent();
104  fConfigDB.insert_data_row();
105  }
106  }
107  fConfigDB.end_data_insertion();
108 }
109 
110 #endif
111 
112 
116 
118  : fGuirc(".kvsimdirguirc")
119 #ifdef WITH_RSQLITE
120  , fConfigDB(gSystem->ExpandPathName("$(HOME)/.kvsimdirguidb"))
121 #endif
122 {
123  // Default constructor
124  // main frame
125 
126  fSelectedSimDir = nullptr;
127  fWithPROOF = kFALSE;
128 
129  // make Aclic create all *.so *.d files in separate temporary directories
130  //this is to avoid problems with KVParticleCondition when using PROOF
132 
133  MainFrame = new TGMainFrame(gClient->GetRoot(), 10, 10, kMainFrame | kVerticalFrame);
134  MainFrame->SetName("KaliVedaSim GUI");
135  MainFrame->SetWindowName("KaliVedaSim GUI");
136  MainFrame->Connect("CloseWindow()", "KVSimDirGUI", this, "Exit()");
137 
139 
140  TGCompositeFrame* vf = new TGVerticalFrame(hftop, 200, 500, kVerticalFrame);
141  // sim dir buttons
142  TGCompositeFrame* hf = new TGHorizontalFrame(vf, 10, 10, kHorizontalFrame);
143  BaddDir = new TGPictureButton(hf, gClient->GetPicture("package_add.xpm"));
144  hf->AddFrame(BaddDir, new TGLayoutHints(kLHintsLeft | kLHintsTop, 3, 2, 2, 2));
145  BaddDir->Resize(40, 40);
146  BaddDir->SetToolTipText("Add directory");
147  BaddDir->Connect("Clicked()", "KVSimDirGUI", this, "AddSimDir()");
148  BimpSim = new TGPictureButton(hf, gClient->GetPicture("bld_text.xpm"));
149  hf->AddFrame(BimpSim, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 2, 2));
150  BimpSim->Resize(40, 40);
151  BimpSim->SetToolTipText("Import simulation");
152  BimpSim->Connect("Clicked()", "KVSimDirGUI", this, "ImportSimulation()");
153  BremDir = new TGPictureButton(hf, gClient->GetPicture("package_delete.xpm"));
154  hf->AddFrame(BremDir, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 2, 2));
155  BremDir->Resize(40, 40);
156  BremDir->SetToolTipText("Remove directory");
157  BremDir->Connect("Clicked()", "KVSimDirGUI", this, "RemSimDir()");
158  BrefreshDir = new TGPictureButton(hf, gClient->GetPicture("refresh2.xpm"));
159  hf->AddFrame(BrefreshDir, new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 2, 2));
160  BrefreshDir->Resize(40, 40);
161  BrefreshDir->SetToolTipText("Update");
162  BrefreshDir->Connect("Clicked()", "KVSimDirGUI", this, "RefreshSimDir()");
166 
167  vf->AddFrame(hf, new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2));
168 
169  // canvas widget
170  fDirListCanvas = new TGCanvas(vf, 172, 400);
171  // canvas viewport
173  // list tree
175 
176  popen = gClient->GetPicture("package_add.xpm");
177  pclose = gClient->GetPicture("package_add.xpm");
178 
182  fDirListTree->Connect("Clicked(TGListTreeItem*,Int_t)", "KVSimDirGUI", this, "SelectSimDir(TGListTreeItem*,Int_t)");
186 
187  hftop->AddFrame(vf, new TGLayoutHints(kLHintsExpandY | kLHintsTop, 2, 2, 2, 2));
188 
189  /* lists of data in simdir */
190  vf = new TGVerticalFrame(hftop, 600, 500, kVerticalFrame);
191  TGGroupFrame* group = new TGGroupFrame(vf, "Simulations");
192  fLVsimData = new KVListView(KVSimFile::Class(), group, 550, 200);
194  fLVsimData->SetDataColumn(0, "Name");
195  fLVsimData->SetDataColumn(1, "Info", "GetTitle");
196  fLVsimData->SetDataColumn(2, "Events");
199  group->AddFrame(fLVsimData, new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 5, 5, 10, 10));
201  group = new TGGroupFrame(vf, "Filtered Simulations");
202  fLVfiltData = new KVListView(KVSimFile::Class(), group, 550, 200);
204  fLVfiltData->SetDataColumn(0, "Simulation", "GetOriginalFile");
205  fLVfiltData->SetDataColumn(1, "DataSet");
206  fLVfiltData->SetDataColumn(2, "System");
207  fLVfiltData->SetDataColumn(3, "Run");
208  fLVfiltData->SetDataColumn(4, "Gemini", "IsGemini");
209  fLVfiltData->SetDataColumn(5, "Decay/event", "GetGemDecayPerEvent");
210  fLVfiltData->SetDataColumn(6, "FilterType");
211  fLVfiltData->SetDataColumn(7, "Events");
214  group->AddFrame(fLVfiltData, new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 5, 5, 10, 10));
216 
217  hftop->AddFrame(vf, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 10, 10, 10));
218  MainFrame->AddFrame(hftop, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 1, 1, 1, 1));
219 
221  /* Analysis Tab */
222  fAnalTab = fAnalysisTabs->AddTab("Data Analysis");
224  vf = new TGVerticalFrame(fAnalTab, 600, 200, kVerticalFrame);
225  hf = new TGHorizontalFrame(vf, 10, 10, kHorizontalFrame);
226  TGLabel* lab = new TGLabel(hf, "Analysis class : ");
227  hf->AddFrame(lab, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
231  TGPictureButton* change_class = new TGPictureButton(hf, gClient->GetPicture("bld_open.png"));
233  change_class->SetToolTipText("Change class");
234  change_class->Connect("Clicked()", "KVSimDirGUI", this, "SelectAnalysisClass()");
235  hf->AddFrame(change_class, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 2, 2, 2, 2));
236  vf->AddFrame(hf, new TGLayoutHints(kLHintsTop | kLHintsExpandY, 2, 2, 2, 2));
237  hf = new TGHorizontalFrame(vf, 10, 10, kHorizontalFrame);
238 
239  TGTextButton* new_anal_class = new TGTextButton(hf, "New simulated analysis class");
240  new_anal_class->Connect("Clicked()", "KVSimDirGUI", this, "NewSimulatedAnalysisClass()");
241  hf->AddFrame(new_anal_class, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 10));
242  TGTextButton* new_filt_class = new TGTextButton(hf, "New filtered analysis class");
243  new_filt_class->Connect("Clicked()", "KVSimDirGUI", this, "NewFilteredAnalysisClass()");
244  hf->AddFrame(new_filt_class, new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
245 
246  vf->AddFrame(hf, new TGLayoutHints(kLHintsTop | kLHintsExpandY, 2, 2, 2, 2));
247  // fCBAllEvents->Connect("Toggled(Bool_t)", "KVSimDirGUI", this, "EnableEventNumberEntry(Bool_t)");
248  // fCBAllEvents->SetState(kButtonDown, kTRUE);
249 
251 
252  /* Filter Tab */
253  fFiltTab = fAnalysisTabs->AddTab("Filtering");
255  vf = new TGHorizontalFrame(fFiltTab, 600, 200, kHorizontalFrame);
256 
257 
258  /*system and dataset*/
259  hf = new TGGroupFrame(vf, "Experimental condition", kVerticalFrame);
260  // new TGGroupFrame()
261  // lab = new TGLabel(hf, "Experimental conditions : ");
262  // hf->AddFrame(lab, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
263 
264  TGCompositeFrame* tmpf = new TGHorizontalFrame(hf, 600, 200, kHorizontalFrame);
265  fCBdataset = new TGComboBox(tmpf);
266  if (!gDataSetManager) {
268  dsm->Init();
269  }
270  // fill list of datasets
271  Int_t ndatasets = gDataSetManager->GetNtotal();
272  fCBdataset->AddEntry("Choose dataset...", 0);
273  for (int i = 1; i <= ndatasets; i++) {
275  }
276  fCBdataset->Layout();
277  fCBdataset->Resize(200, 20);
278  fCBdataset->Select(0, kFALSE);
279  tmpf->AddFrame(fCBdataset, new TGLayoutHints(kLHintsLeft | kLHintsTop, 10, 2, 2, 2));
280  fCBdataset->Connect("Selected(const char*)", "KVSimDirGUI", this, "SelectDataSet(const char*)");
281  hf->AddFrame(tmpf, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 0, 0, 0));
282 
283  tmpf = new TGHorizontalFrame(hf, 600, 200, kHorizontalFrame);
284  fCBsystem = new TGComboBox(tmpf);
285  fCBsystem->AddEntry("Choose system...", 0);
286  fCBsystem->Layout();
287  fCBsystem->Resize(200, 20);
288  fCBsystem->Select(0, kFALSE);
289  tmpf->AddFrame(fCBsystem, new TGLayoutHints(kLHintsLeft | kLHintsTop, 10, 2, 2, 2));
290  fCBsystem->Connect("Selected(const char*)", "KVSimDirGUI", this, "SelectSystem(const char*)");
291 
292  fTESystem = new TGTextEntry(tmpf, new TGTextBuffer(200));
294  fTESystem->SetToolTipText("[Projectile_Symbol]+[Target_Symbol]@[Incident_Energy]MeV/A (ex: 129Xe+119Sn@50.0MeV/A)");
295  tmpf->AddFrame(fTESystem, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
296  fTESystem->Connect("TextChanged(const char*)", "KVSimDirGUI", this, "UpdateSystemText(const char*)");
297 
298  hf->AddFrame(tmpf, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 0, 0, 0));
299 
300  tmpf = new TGHorizontalFrame(hf, 600, 200, kHorizontalFrame);
301  fCBrun = new TGComboBox(tmpf);
302  fCBrun->AddEntry("Choose run...", 0);
303  fCBrun->Layout();
304  fCBrun->Resize(200, 20);
305  fCBrun->Select(0, kFALSE);
306  tmpf->AddFrame(fCBrun, new TGLayoutHints(kLHintsLeft | kLHintsTop, 10, 2, 2, 2));
307  fCBrun->Connect("Selected(const char*)", "KVSimDirGUI", this, "SelectRun(const char*)");
308 
309  // fTERunNumber = new TGTextEntry(tmpf, new TGTextBuffer(200));
310  // fTERunNumber->Resize(200, fTERunNumber->GetDefaultHeight());
311  // tmpf->AddFrame(fTERunNumber, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
312  hf->AddFrame(tmpf, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 0, 0, 0));
313 
314  vf->AddFrame(hf, new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 10, 2));
315 
316 
317  hf = new TGHorizontalFrame(vf, 10, 10, kHorizontalFrame);
318 
319  TGButtonGroup* bgroup = new TGButtonGroup(hf, "Filter type");
320  TGRadioButton* radiob = new TGRadioButton(bgroup, "Geometric");
321  radiob = new TGRadioButton(bgroup, "Geometry+Thresholds");
322 // radiob->SetState(kButtonDown);
323  radiob = new TGRadioButton(bgroup, "Full");
324  radiob->SetState(kButtonDown);
325  bgroup->Connect("Clicked(Int_t)", "KVSimDirGUI", this, "FilterType(Int_t)");
327 // fFilterType = kFTSeuils;
328  hf->AddFrame(bgroup, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 2, 2, 2, 2));
329 
330  TGVerticalFrame* vf1 = new TGVerticalFrame(hf, 30, 30);
331  bgroup = new TGButtonGroup(vf1, "Options");
332  phi_rotation_check = new TGCheckButton(bgroup, "Random phi");
333  phi_rotation_check->Connect("Toggled(Bool_t)", "KVSimDirGUI", this, "SetRandomPhi(Bool_t)");
334  phi_rotation_check->SetToolTipText("Random rotation around beam axis before detection");
335  fRandomPhi = kTRUE;
337 #ifdef WITH_GEMINI
338  gemini_decay = new TGCheckButton(bgroup, "Gemini++ decay");
339  gemini_decay->Connect("Toggled(Bool_t)", "KVSimDirGUI", this, "SetGeminiDecay(Bool_t)");
340  gemini_decay->SetToolTipText("Use Gemini++ to calculate statistical decay before detection");
342  //
343  TGHorizontalFrame* hhf = new TGHorizontalFrame(vf1, 20);
344  TGLabel* gemini_label = new TGLabel(hhf, "Decays/evt.:");
345  hhf->AddFrame(gemini_label, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
347  gemini_decays->GetNumberEntry()->SetToolTipText("Number of times to decay each event with Gemini++");
350  //
351  TGHorizontalFrame* hhhf = new TGHorizontalFrame(vf1, 20);
352  gemini_add_rot_energy = new TGCheckButton(hhhf, "Add rotational energy");
353  gemini_add_rot_energy->Connect("Toggled(Bool_t)", "KVSimDirGUI", this, "SetGeminiDecayAddRotEnergy(Bool_t)");
354  gemini_add_rot_energy->SetToolTipText("Add the rotational energy to the excitation energy for each nucleus");
355  //gemini_add_rot_energy->SetState(kButtonDown);
358  //
359 #endif
360  fGemDecay = kFALSE;
362  fGeoType = kGTROOT;
363  vf1->AddFrame(bgroup, new TGLayoutHints(kLHintsTop, 1, 1, 1, 5));
364 #ifdef WITH_GEMINI
365  vf1->AddFrame(hhf, new TGLayoutHints(kLHintsBottom, 2, 2, 2, 2));
366  vf1->AddFrame(hhhf, new TGLayoutHints(kLHintsBottom, 3, 3, 2, 4));
367 #endif
368  hf->AddFrame(vf1, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
369 
370  bgroup = new TGButtonGroup(hf, "Kinematics");
371  radiob = new TGRadioButton(bgroup, "CM");
372  radiob->SetState(kButtonDown);
373  radiob = new TGRadioButton(bgroup, "Lab");
374  radiob = new TGRadioButton(bgroup, "Projectile");
375  bgroup->Connect("Clicked(Int_t)", "KVSimDirGUI", this, "Kinematics(Int_t)");
376  fKine = kKCM;
377  hf->AddFrame(bgroup, new TGLayoutHints(kLHintsTop | kLHintsLeft, 20, 2, 2, 2));
378  // proof_analysis_filt = new TGPictureButton(hf, gClient->GetPicture("proof_base.xpm"));
379  // proof_analysis_filt->Connect("Pressed()", "KVSimDirGUI", this, "EnableProof()");
380  // proof_analysis_filt->Connect("Released()", "KVSimDirGUI", this, "DisableProof()");
381  // proof_analysis_filt->SetToolTipText("Enable PROOF");
382  // proof_analysis_filt->Resize(40, 40);
383  // proof_analysis_filt->AllowStayDown(kTRUE);
384  // hf->AddFrame(proof_analysis_filt, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 250, 2, 2, 2));
385  // launch_analysis = new TGPictureButton(hf, gClient->GetPicture("query_submit.xpm"));
387  // launch_analysis->Connect("Clicked()", "KVSimDirGUI", this, "Run()");
388  // launch_analysis->SetToolTipText("Run filter");
389  // launch_analysis->Resize(40, 40);
390  // hf->AddFrame(launch_analysis, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 2, 2, 2));
391  vf->AddFrame(hf, new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 10, 2));
392 
393  // hf = new TGHorizontalFrame(vf, 10, 10, kHorizontalFrame);
394  // lab= new TGLabel(hf, "Output directory : ");
395  // hf->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsCenterY, 2,2,2,2));
396  // fTEOutputDir = new TGTextEntry(hf, new TGTextBuffer(256));
397  // fTEOutputDir->SetText(gSystem->pwd());
398  // fTEOutputDir->Resize(650, fTEOutputDir->GetDefaultHeight());
399  // hf->AddFrame(fTEOutputDir, new TGLayoutHints(kLHintsCenterY|kLHintsLeft, 2,2,2,2));
400  // change_class = new TGPictureButton(hf,gClient->GetPicture("bld_open.png"));
401  // change_class->Resize(fTEOutputDir->GetDefaultHeight(),fTEOutputDir->GetDefaultHeight());
402  // change_class->SetToolTipText("Change directory");
403  // change_class->Connect("Clicked()", "KVSimDirGUI", this, "ChangeOutputDirectory()");
404  // hf->AddFrame(change_class,new TGLayoutHints(kLHintsCenterY|kLHintsLeft, 2,2,2,2));
405  // vf->AddFrame(hf, new TGLayoutHints(kLHintsTop|kLHintsExpandY,2,2,2,2));
406 
408 
412 
414 
415 
416 
417  vf = new TGVerticalFrame(MainFrame, 600, 200, kVerticalFrame);
418  hf = new TGHorizontalFrame(vf, 600, 200, kHorizontalFrame);
419 
420  lab = new TGLabel(hf, "Events : ");
421  hf->AddFrame(lab, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
422  fCBAllEvents = new TGCheckButton(hf, "all");
426  fCBAllEvents->Connect("Toggled(Bool_t)", "KVSimDirGUI", this, "EnableEventNumberEntry(Bool_t)");
428 
429 
430  proof_analysis = new TGPictureButton(hf, gClient->GetPicture("proof_base.xpm"));
431  proof_analysis->Connect("Pressed()", "KVSimDirGUI", this, "EnableProof()");
432  proof_analysis->Connect("Released()", "KVSimDirGUI", this, "DisableProof()");
436  proof_analysis->Resize(40, 40);
438 
439  TGPictureButton* launch_analysis = new TGPictureButton(hf, gClient->GetPicture("query_submit.xpm"));
440  launch_analysis->Connect("Clicked()", "KVSimDirGUI", this, "Run()");
441  launch_analysis->SetToolTipText("Run analysis/filter");
442  launch_analysis->Resize(40, 40);
443 
444  hf->AddFrame(launch_analysis, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 5, 2, 2, 2));
446 
447  vf->AddFrame(hf, new TGLayoutHints(kLHintsExpandX | kLHintsTop, 0, 0, 0, 0));
448  MainFrame->AddFrame(vf, new TGLayoutHints(kLHintsExpandX | kLHintsTop, 10, 10, 15, 10));
449 
450 
452  kMWMFuncAll,
455 
457  MainFrame->MapWindow();
458  // MainFrame->Resize(200,500);
459 #ifdef WITH_RSQLITE
460  // define tables in DB if not already done
461  bool sqlite_conversion = false;
463  sqlite_conversion = true;
464  KVSQLite::table datasets("Datasets");
465  datasets.add_primary_key("Id");
466  datasets.add_column("Name", "TEXT");
467  datasets.add_column("Directory", "TEXT");
468  datasets.add_column("Table", "TEXT");
469  fConfigDB.add_table(datasets);
470  }
471  if (!sqlite_conversion) {
472  // use existing sqlite database to reconstruct simdirs
474  FillTreeList();
475  return;
476  }
477 #endif
478  // use .guirc to fill the list of sim dirs
479  KVString simdirs = fGuirc.GetValue("SimDirs", "");
480  if (simdirs != "") {
481 #ifdef WITH_RSQLITE
482  if (sqlite_conversion) {
483  // we are converting from the old TEnv back end to sqlite
484  // need to fill table of Datasets
485  fConfigDB.prepare_data_insertion("Datasets");
486  }
487  int ds_table = 0;
488 #endif
489  simdirs.Begin(" ");
490  while (!simdirs.End()) {
491  KVString simdir = simdirs.Next();
492  KVString simdirectory = fGuirc.GetValue(Form("%s.Directory", simdir.Data()), "");
493  KVSimDir* sd = new KVSimDir(simdir, simdirectory);
494 #ifdef WITH_RSQLITE
495  if (sqlite_conversion) {
496  fConfigDB["Datasets"]["Name"] = simdir;
497  fConfigDB["Datasets"]["Directory"] = simdirectory;
499  }
500 #endif
501  sd->AnalyseDirectory();
502  fListOfDirs.Add(sd);
503  }
504 #ifdef WITH_RSQLITE
505  if (sqlite_conversion) {
507  TIter itdir(&fListOfDirs);
508  KVSimDir* sd = nullptr;
509  while ((sd = (KVSimDir*)itdir())) {
510  // add table for dataset
511  TString ds_table_name = AddTableForDataSet(sd, ds_table);
512  // fill table with infos
513  FillDataSetTableWithInfos(ds_table_name, sd);
514  ++ds_table;
515  }
516  }
517 #endif
518  FillTreeList();
519  }
520 }
521 
522 
523 
524 
531 
533 {
534  // Copy constructor
535  // This ctor is used to make a copy of an existing object (for example
536  // when a method returns an object), and it is always a good idea to
537  // implement it.
538  // If your class allocates memory in its constructor(s) then it is ESSENTIAL :-)
539 
540  obj.Copy(*this);
541 }
542 
543 
544 
547 
549 {
550  // Destructor
551 }
552 
553 
554 
555 
563 
564 void KVSimDirGUI::Copy(TObject& obj) const
565 {
566  // This method copies the current state of 'this' object into 'obj'
567  // You should add here any member variables, for example:
568  // (supposing a member variable KVSimDirGUI::fToto)
569  // CastedObj.fToto = fToto;
570  // or
571  // CastedObj.SetToto( GetToto() );
572 
573  KVBase::Copy(obj);
574  //KVSimDirGUI& CastedObj = (KVSimDirGUI&)obj;
575 }
576 
577 
578 
580 
582 {
583  EmptyTreeList();
584  TIter next(&fListOfDirs);
585  TObject* o;
586  while ((o = next())) {
587  TGListTreeItem* item0 = fDirListTree->AddItem(NULL, o->GetName());
588  item0->SetPictures(popen, pclose);
589  fDirListTree->CloseItem(item0);
590  }
591 }
592 
593 
594 
596 
598 {
600  while (first) {
603  }
607 }
608 
609 
610 
612 
614 {
615  static TString dir(".");
616  TGFileInfo fi;
617  fi.fIniDir = StrDup(dir);
618  new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDDirectory, &fi);
619  if (fi.fFilename) {
620  TString simdirname;
621  Bool_t ok;
622  TString quest;
623  quest.Form("Enter name for dataset %s", fi.fIniDir);
624  new KVInputDialog(MainFrame, quest, &simdirname, &ok);
625  simdirname.ReplaceAll(" ", "_"); //no spaces in name
626  if (ok) {
627  KVSimDir* sd = new KVSimDir(simdirname, fi.fIniDir);
628  sd->AnalyseDirectory();
629  fListOfDirs.Add(sd);
630  FillTreeList();
633  // add to guirc file
634  TString simdirs = fGuirc.GetValue("SimDirs", "");
635  if (simdirs != "") simdirs += " ";
636  simdirs += simdirname;
637  fGuirc.SetValue("SimDirs", simdirs);
638  fGuirc.SetValue(Form("%s.Directory", simdirname.Data()), sd->GetDirectory());
640 #ifdef WITH_RSQLITE
641  //update database
642  int ds_table_num = 0;
643  if (fConfigDB.count("Datasets")) {
644  // get name/number of last dataset table
645  KVNameValueList table_names = fConfigDB.get_name_value_list("Datasets", "Name", "Table");
646  sscanf(table_names.GetParameter(table_names.GetNpar() - 1)->GetString(),
647  "Table_%d", &ds_table_num);
648  ++ds_table_num;
649  }
650  fConfigDB.prepare_data_insertion("Datasets");
651  fConfigDB["Datasets"]["Id"].set_null();
652  fConfigDB["Datasets"]["Name"] = simdirname;
653  fConfigDB["Datasets"]["Directory"] = sd->GetDirectory();
656  TString table_name = AddTableForDataSet(sd, ds_table_num);
657  FillDataSetTableWithInfos(table_name, sd);
658 #endif
659  }
660  }
661  dir = fi.fIniDir;
662 }
663 
664 
665 
667 
669 {
670  if (!fSelectedSimDir) return;
674 #ifdef WITH_RSQLITE
675  fConfigDB.select_data("Datasets", "Table", Form("Name=\"%s\"", fSelectedSimDir->GetName()));
676  TString ds_table_name;
677  while (fConfigDB.get_next_result()) ds_table_name = fConfigDB["Datasets"]["Table"].get_data<TString>();
678  fConfigDB.clear_table(ds_table_name);
680 #endif
681 }
682 
683 
684 
686 
688 {
689  if (!fSelectedSimDir) return;
691  // there is no way of removing a name-value pair from a TEnv!!
692  fGuirc.SetValue(Form("%s.Directory", fSelectedSimDir->GetName()), "");
693 #ifdef WITH_RSQLITE
694  // remove from datasets table
695  fConfigDB.select_data("Datasets", "Table", Form("Name=\"%s\"", fSelectedSimDir->GetName()));
696  TString ds_table_name;
697  while (fConfigDB.get_next_result()) ds_table_name = fConfigDB["Datasets"]["Table"].get_data<TString>();
698  fConfigDB.delete_data("Datasets", Form("Name=\"%s\"", fSelectedSimDir->GetName()));
699  // and delete table with dataset data
700 #endif
701  delete fSelectedSimDir;
702  fSelectedSimDir = nullptr;
703  FillTreeList();
706  // update guirc file
707  TString simdirs = "";
708  TIter next(&fListOfDirs);
709  KVSimDir* togo;
710  while ((togo = (KVSimDir*)next())) {
711  if (simdirs != "") simdirs += " ";
712  simdirs += togo->GetName();
713  fGuirc.SetValue(Form("%s.Directory", togo->GetName()), togo->GetDirectory());
714  }
715  fGuirc.SetValue("SimDirs", simdirs);
717 }
718 
719 
720 
722 
724 {
726  if (fSelectedSimDir) {
729  BremDir->SetEnabled();
730  BimpSim->SetEnabled();
732  }
733  else {
737  }
738 }
739 
740 
741 
743 
745 {
746  static TString dir(".");
747  const char* filetypes[] = {
748  "Class header files", "*.h",
749  0, 0
750  };
751  TGFileInfo fi;
752  fi.fIniDir = StrDup(dir);
753  fi.fFileTypes = filetypes;
754  new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDOpen, &fi);
755  if (fi.fFilename) {
757  Int_t idot = fAnalClassName.Index(".");
758  if (idot < 0) return;
759  fAnalClassName.Remove(idot, 2);
762  fAnalClassDir = fi.fIniDir;
763  cout << "Found class header " << gSystem->BaseName(fAnalClassHeader) << " and implementation "
764  << gSystem->BaseName(fAnalClassImp) << " in " << fAnalClassDir << endl;
765  }
766  }
767  dir = fi.fIniDir;
768 }
769 
770 
771 
773 
775 {
777 }
778 
779 
780 
782 
783 void KVSimDirGUI::SelectDataSet(const char* name)
784 {
785  KVDataSet* ds = gDataSetManager->GetDataSet(name);
786  if (ds) {
787  fDataset = name;
788  fSystem = "";
789  fRun = "";
790  ds->cd();
791  // use ROOT geometry if available
792  if (ds->GetDataSetEnv("KVMultiDetArray.ROOTGeometry", kTRUE)) {
793  GeoType(kGTROOT);
794  }
795  else {
797  }
798  KVSeqCollection* systems = 0;
799  if (gExpDB) systems = gExpDB->GetSystems();
800  fCBsystem->RemoveAll();
801  fCBsystem->AddEntry("Choose system...", 0);
802  if (systems) {
803  TIter next(systems);
804  KVDBSystem* sys;
805  int i = 1;
806  while ((sys = (KVDBSystem*)next())) {
807  fCBsystem->AddEntry(sys->GetName(), i++);
808  }
809  }
810  fCBsystem->Layout();
811  fCBsystem->Select(0, kFALSE);
812  fCBrun->RemoveAll();
813  fCBrun->AddEntry("Choose run...", 0);
814  fCBrun->Layout();
815  fCBrun->Select(0, kFALSE);
816  }
817 }
818 
819 
820 
822 
823 void KVSimDirGUI::SelectSystem(const char* sysname)
824 {
825  KVDBSystem* sys = gExpDB->GetSystem(sysname);
826  if (sys) {
827  fSystem = sysname;
828  fRun = "";
829  KVList* runs = sys->GetRuns();
830  KVDBRun* dbr;
831  TIter next(runs);
832  int i = 1;
833  fCBrun->RemoveAll();
834  fCBrun->AddEntry("Choose run...", 0);
835  while ((dbr = (KVDBRun*)next())) {
836  fCBrun->AddEntry(Form("%4d", dbr->GetNumber()), i++);
837  }
838  fCBrun->Layout();
839  fCBrun->Select(0, kFALSE);
840  fTESystem->SetText(sysname);
841  }
842 }
843 
844 
845 
848 
850 {
851  // called every time the text changes
852  fSystem = s;
853 }
854 
855 
856 
858 
859 void KVSimDirGUI::SelectRun(const char* run)
860 {
861  fRun = run;
862  fRun.Remove(TString::kBoth, ' ');
863  if (!fRun.IsDigit()) fRun = "";
864 }
865 
866 
867 
870 
872 {
873  // Called when "Process" button is pressed to launch the analysis
874 
875  if (fAnalysisTabs->GetCurrent() == 0) RunAnalysis("tree");
876  else if (fAnalysisTabs->GetCurrent() == 1) {
877  if (fDataset == "") { // Make sure a dataset has been chosen
878  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::Run", "First choose the dataset which describes the geometry!", kMBIconExclamation);
879  return;
880  }
881  RunAnalysis("filter");
882  }
883 }
884 
885 
886 // void KVSimDirGUI::ChangeOutputDirectory()
887 // {
888 // static TString dir(".");
889 // TGFileInfo fi;
890 // fi.fIniDir = StrDup(dir);
891 // new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDDirectory, &fi);
892 // if (fi.fFilename) {
893 // fTEOutputDir->SetText(fi.fIniDir);
894 // }
895 // dir = fi.fIniDir;
896 // }
897 
898 
900 
902 {
903  unique_ptr<TList> selected_sim_runs(fLVsimData->GetSelectedObjects());
904  unique_ptr<TList> selected_filt_runs(fLVfiltData->GetSelectedObjects());
905  TList* runs_to_analyse(nullptr);
906  TList* aux_runs_to_analyse(nullptr);
907  TString analysis_task;
908  if (type == "tree") { // analysis of simulated or filtered events
909  if (!selected_sim_runs->GetEntries() && !selected_filt_runs->GetEntries()) {
910  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunAnalysis", "Choose one or more simulated or filtered data files!", kMBIconExclamation);
911  return;
912  }
913  // if (selected_sim_runs->GetEntries() && selected_filt_runs->GetEntries()) {
914  // new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunAnalysis", "Choose EITHER simulated or filtered data files!", kMBIconExclamation);
915  // return;
916  // }
917  if (fAnalClassHeader == "" || fAnalClassImp == "") {
918  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunAnalysis", "Choose a valid analysis class!", kMBIconExclamation);
919  return;
920  }
921  if (selected_sim_runs->GetEntries()) {
922  if (selected_filt_runs->GetEntries()) {
923  // if both simulated & filtered events are selected, we assume the user wants to analyse filtered
924  // data while having access to the original non-filtered data as an auxiliary/"friend" tree
925  runs_to_analyse = selected_filt_runs.get();
926  analysis_task = "analysis filtered";
927  aux_runs_to_analyse = selected_sim_runs.get();
928  }
929  else {
930  runs_to_analyse = selected_sim_runs.get();
931  analysis_task = "analysis simulated";
932  }
933  }
934  else {
935  runs_to_analyse = selected_filt_runs.get();
936  analysis_task = "analysis filtered";
937  }
938  }
939  else {
940  // filtering
941  if (selected_filt_runs->GetEntries()) {
942  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunFilter", "Only simulated events can be filtered!", kMBIconExclamation);
943  return;
944  }
945  if (!selected_sim_runs->GetEntries()) {
946  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunFilter", "Choose a simulated data file to filter!", kMBIconExclamation);
947  return;
948  }
949  runs_to_analyse = selected_sim_runs.get();
950  analysis_task = "filter simulated";
951  }
952  KVDataAnalysisTask* anTask = gDataSetManager->GetAnalysisTaskAny(analysis_task);
955  gDataAnalyser->SetFileList(runs_to_analyse);
956  if (aux_runs_to_analyse) gDataAnalyser->SetAuxFileList(aux_runs_to_analyse);
957  if (anTask->WithUserClass()) {
960  new TGMsgBox(gClient->GetRoot(), MainFrame, "KVSimDirGUI::RunAnalysis", "Compilation failed. Correct mistakes and try again!", kMBIconExclamation);
961  }
962  }
963  else if (strcmp(anTask->GetUserBaseClass(), ""))
964  gDataAnalyser->SetUserClass(anTask->GetUserBaseClass(), kFALSE);//task with default "user" class
965  Bool_t all_events = fCBAllEvents->IsDown();
966  if (!all_events)
968  else
970  Bool_t cancel_batch_job = kFALSE;
971  if (type == "filter") {
972  // set extra infos in kvsimdiranalyser for auto jobname
973  KVSimDirAnalyser* simda = dynamic_cast<KVSimDirAnalyser*>(gDataAnalyser);
975  simda->SetSystemForFilter(fSystem);
976  }
977  if (fWithPROOF) {
978  gBatchSystem->Clear();
979  KVNameValueList batchParams;
981  new KVBatchSystemParametersGUI(MainFrame, &batchParams, gDataAnalyser, &cancel_batch_job);
982  if (!cancel_batch_job) {
985  }
986  }
987  fCancelJob = kFALSE;
988  if (type == "filter") SetFilterOptions();
989  if (!cancel_batch_job && !fCancelJob) gDataAnalyser->Run();
990  selected_filt_runs.reset(nullptr);
991  selected_sim_runs.reset(nullptr);
992  RefreshSimDir();
993 }
994 
995 
996 
998 
1000 {
1001  TString geometry;
1002  if (fGeoType == kGTROOT) geometry = "ROOT";
1003  else geometry = "KV";
1004  TString kinema;
1005  if (fKine == kKCM) kinema = "cm";
1006  else if (fKine == kKProj) kinema = "proj";
1007  else kinema = "lab";
1008  TString filter;
1009  switch (fFilterType) {
1010  case kFTGeo:
1011  filter = "Geo";
1012  break;
1013  case kFTSeuils:
1014  filter = "GeoThresh";
1015  break;
1016  case kFTFull:
1017  filter = "Full";
1018  }
1019 
1020  // check system - only for ad hoc systems
1021  KVDBSystem* sys = (gExpDB ? gExpDB->GetSystem(fSystem) : nullptr);
1022  if (!sys) {
1023  KV2Body cd(fSystem.Data());
1024  // check valid ad hoc system given by user
1025  if (cd.IsZombie()) {
1026  Error("SetFilterOptions", "Please check the format of the ad hoc system name you gave");
1027  WarningBox("Bad System", "Please check the format of the ad hoc system name you gave", kFALSE);
1028  fCancelJob = kTRUE;
1029  return;
1030  }
1031  cd.CalculateKinematics();
1032  cd.Print();
1033  }
1034 
1035  TString options;
1036  options = Form("Dataset=%s,", fDataset.Data());
1037  options += Form("System=%s,", fSystem.Data());
1038  options += Form("Geometry=%s,", geometry.Data());
1039  options += Form("Filter=%s,", filter.Data());
1040  options += Form("Kinematics=%s", kinema.Data());
1041  if (fRun != "") {
1042  TString r;
1043  r.Form(",Run=%s", fRun.Data());
1044  options += r;
1045  }
1046  if (!fRandomPhi) options += ",PhiRot=no";
1047  if (fGemDecay) {
1048  options += ",Gemini=yes";
1049  options += Form(",GemDecayPerEvent=%d", (Int_t)gemini_decays->GetNumber());
1050 
1051  if (fGemAddRotEner) options += Form(",GemAddRotEner=yes");
1052  else options += Form(",GemAddRotEner=no");
1053  }
1054 
1056 }
1057 
1058 
1059 
1062 
1064 {
1065  // Import simulation data from currently selected directory
1066 
1067  const char* filetypes[] = {
1068  "All files", "*.*",
1069  0, 0
1070  };
1071  TGFileInfo fi;
1073  fi.fFileTypes = filetypes;
1074  fi.SetMultipleSelection(true);
1075 
1076  new KVFileDialog(gClient->GetDefaultRoot(), MainFrame, kKVFDOpen, &fi);
1077 
1078  bool one_file = (!fi.fMultipleSelection && fi.fFilename);
1079  bool many_files = (fi.fMultipleSelection && fi.fFileNamesList);//may only be one
1080  if (one_file || many_files) {
1081  // set up list of KVSimReader plugins
1082  KVString plugins = KVBase::GetListOfPlugins("KVSimReader");
1083  KVString choices;
1084  plugins.Begin(" ");
1085  while (!plugins.End()) {
1086  // get URI corresponding to plugin
1087  KVString uri = KVBase::GetPluginURI("KVSimReader", plugins.Next());
1088  if (choices.Length()) choices += " ";
1089  choices += uri;
1090  }
1091  // get model from user
1092  TString model;
1093  Bool_t ok;
1094  new KVDropDownDialog(MainFrame, "Choose the simulation model and type of events", choices, 0, &model, &ok);
1095  if (ok) {
1096 
1097  if (one_file) {
1098  unique_ptr<KVSimReader> SR(KVSimReader::MakeSimReader(model));
1099  SR->SetOutputDirectory(fSelectedSimDir->GetDirectory());
1100  SR->ConvertAndSaveEventsInFile(fi.fFilename);
1101  }
1102  else {
1103  if (fi.fFileNamesList->GetEntries() == 1) {
1104  unique_ptr<KVSimReader> SR(KVSimReader::MakeSimReader(model));
1105  SR->SetOutputDirectory(fSelectedSimDir->GetDirectory());
1106  SR->ConvertAndSaveEventsInFile(fi.fFileNamesList->First()->GetName());
1107  }
1108  else {
1109  TIter it(fi.fFileNamesList);
1110  TObject* o;
1111  int i = 1;
1112  while ((o = it())) {
1113  unique_ptr<KVSimReader> SR(KVSimReader::MakeSimReader(model));
1114  SR->SetMultiFiles();
1115  SR->SetFileIndex(i++);
1116  SR->SetOutputDirectory(fSelectedSimDir->GetDirectory());
1117  SR->ConvertAndSaveEventsInFile(o->GetName());
1118  }
1119  }
1120  }
1121 
1122  RefreshSimDir();
1123  }
1124  }
1125  else if (fi.fMultipleSelection && fi.fFileNamesList) {
1126  fi.fFileNamesList->ls();
1127  }
1128 }
1129 
1130 
1131 
1134 
1136 {
1137  // Get name of new class
1138  TString classname;
1139  Bool_t ok;
1140  new KVInputDialog(MainFrame, "Enter name of new analysis class", &classname, &ok, "Enter name of new analysis class");
1141  // check new classname is not name of existing class
1142  KVString impfile, decfile;
1143  if (KVBase::FindClassSourceFiles(classname, impfile, decfile)) {
1144  ok = ok && WarningBox("Replacing existing class",
1145  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)",
1146  classname.Data(), decfile.Data(), impfile.Data()),
1147  kTRUE);
1148  }
1149  if (ok) {
1150  KVSimDirFilterAnalyser::Make(classname);
1151  }
1152 }
1153 
1154 
1155 
1158 
1160 {
1161  // Get name of new class
1162  TString classname;
1163  Bool_t ok;
1164  new KVInputDialog(MainFrame, "Enter name of new analysis class", &classname, &ok, "Enter name of new analysis class");
1165  // check new classname is not name of existing class
1166  KVString impfile, decfile;
1167  if (KVBase::FindClassSourceFiles(classname, impfile, decfile)) {
1168  ok = ok && WarningBox("Replacing existing class",
1169  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)",
1170  classname.Data(), decfile.Data(), impfile.Data()),
1171  kTRUE);
1172  }
1173  if (ok) {
1174  KVSimDirAnalyser::Make(classname);
1175  }
1176 }
1177 
1178 
1179 
1185 
1186 Bool_t KVSimDirGUI::WarningBox(const char* title, const char* msg, Bool_t confirm)
1187 {
1188  // Warning box in case of problems
1189  // if confirm=kTRUE we ask for a yes/no answer from the user:
1190  // if 'yes' is pressed, we return kTRUE, if 'no', kFALSE.
1191  // by default, only a 'dismiss' button is shown, and this method always returns kTRUE.
1192 
1193  Bool_t reply = kTRUE;
1194  if (!confirm)
1195  new TGMsgBox(gClient->GetRoot(), MainFrame, title, msg, kMBIconExclamation);
1196  else {
1197  Int_t ret_code = 0;
1198  new TGMsgBox(gClient->GetRoot(), MainFrame, title, msg, kMBIconExclamation, kMBYes | kMBNo, &ret_code);
1199  reply = (ret_code & kMBYes);
1200  }
1201  return reply;
1202 }
1203 
1204 
1205 #ifdef WITH_RSQLITE
1206 
1209 
1211 {
1212  // Rebuild all KVSimDir/KVSimFile objects from information in sqlite DB
1213 
1214  fConfigDB.select_data("Datasets");
1215  KVNameValueList tables;
1216  while (fConfigDB.get_next_result()) {
1217  fListOfDirs.Add(new KVSimDir(fConfigDB["Datasets"]["Name"].get_data<TString>(),
1218  fConfigDB["Datasets"]["Directory"].get_data<TString>()));
1219  tables.SetValue(fConfigDB["Datasets"]["Name"].get_data<TString>(),
1220  fConfigDB["Datasets"]["Table"].get_data<TString>());
1221  }
1222  for (int i = 0; i < tables.GetNpar(); ++i) {
1224  fConfigDB.select_data(tables.GetValue<TString>(i));
1225  KVSQLite::table& dstable = fConfigDB[tables.GetValue<TString>(i)];
1226  while (fConfigDB.get_next_result()) {
1227  if (dstable["Filtered"].get_data<int>()) {
1228  // filtered/reconstructed data
1229  KVSimFile* f = new KVSimFile(
1230  sd,
1231  dstable["FileName"].get_data<TString>(), dstable["TreeInfo"].get_data<TString>(),
1232  dstable["Events"].get_data<int>(), dstable["TreeName"].get_data<TString>(),
1233  dstable["BranchName"].get_data<TString>(), dstable["DataSet"].get_data<TString>(),
1234  dstable["System"].get_data<TString>(), dstable["Run"].get_data<int>(),
1235  dstable["GeoType"].get_data<TString>(), dstable["OrigFile"].get_data<TString>(),
1236  dstable["FiltType"].get_data<TString>()
1237  );
1238  f->SetGemini(dstable["Gemini"].get_data<bool>());
1239  if (f->IsGemini()) f->SetGemDecayPerEvent(dstable["GemDecayPerEvent"].get_data<int>());
1240  sd->AddFiltData(f);
1241  }
1242  else {
1243  // simulation data
1244  KVSimFile* f = new KVSimFile(
1245  sd,
1246  dstable["FileName"].get_data<TString>(), dstable["TreeInfo"].get_data<TString>(),
1247  dstable["Events"].get_data<int>(), dstable["TreeName"].get_data<TString>(),
1248  dstable["BranchName"].get_data<TString>());
1249  sd->AddSimData(f);
1250  }
1251  }
1252  }
1253 }
1254 
1255 #endif
1256 
int Int_t
kVerticalFrame
kHorizontalFrame
kMainFrame
KVBatchSystemManager * gBatchSystemManager
KVBatchSystem * gBatchSystem
KVDataAnalyser * gDataAnalyser
KVDataSetManager * gDataSetManager
KVExpDB * gExpDB
Definition: KVExpDB.cpp:12
@ kKVFDOpen
Definition: KVFileDialog.h:32
@ kKVFDDirectory
Definition: KVFileDialog.h:33
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
ROOT::R::TRInterface & r
#define f(i)
const Bool_t kFALSE
bool Bool_t
const Bool_t kTRUE
kEnvUser
kButtonDown
kButtonUp
#define gClient
kMWMFuncAll
kMWMDecorAll
kMWMInputModeless
kLHintsRight
kLHintsExpandY
kLHintsLeft
kLHintsCenterY
kLHintsBottom
kLHintsTop
kLHintsExpandX
kMBNo
kMBYes
kMBIconExclamation
int type
int quest[100]
char * Form(const char *fmt,...)
char * StrDup(const char *str)
R__EXTERN TSystem * gSystem
Relativistic binary kinematics calculator.
Definition: KV2Body.h:165
void Print(Option_t *opt="") const
Definition: KV2Body.cpp:814
void CalculateKinematics()
Definition: KV2Body.cpp:678
Base class for KaliVeda framework.
Definition: KVBase.h:135
static Bool_t FindClassSourceFiles(const Char_t *class_name, KVString &imp_file, KVString &dec_file, const Char_t *dir_name=".")
Definition: KVBase.cpp:1065
static const Char_t * GetListOfPlugins(const Char_t *base)
Definition: KVBase.cpp:1223
static const Char_t * GetPluginURI(const Char_t *base, const Char_t *plugin)
Definition: KVBase.cpp:1140
virtual void Copy(TObject &) const
Make a copy of this object.
Definition: KVBase.cpp:397
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 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 void Clear(Option_t *opt="")
virtual Int_t GetNumber() const
Definition: KVDBRecord.h:72
Description of an experimental run in database ,.
Definition: KVDBRun.h:35
Database class used to store information on different colliding systems studied during an experiment.
Definition: KVDBSystem.h:51
KVList * GetRuns() const
Returns a sorted list of all the runs associated with this system.
Definition: KVDBSystem.h:116
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 SetUserClass(const Char_t *kvs, Bool_t check=kTRUE)
void SetAnalysisTask(KVDataAnalysisTask *at)
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:207
const Char_t * GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
Definition: KVDataSet.cpp:757
void cd() const
Definition: KVDataSet.cpp:735
Ask user to choose between several options in a drop-down list.
virtual KVDBSystem * GetSystem(const Char_t *system) const
Definition: KVExpDB.h:83
virtual KVSeqCollection * GetSystems() const
Definition: KVExpDB.h:87
Modified version of TGFileDialog file selection dialog.
Definition: KVFileDialog.h:48
General purpose dialog box asking for some input in the form of a string.
Definition: KVInputDialog.h:23
Enhanced version of ROOT TGListView widget.
Definition: KVListView.h:145
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:172
TList * GetSelectedObjects() const
Definition: KVListView.h:244
virtual void RemoveAll()
Definition: KVListView.h:189
void AllowContextMenu(Bool_t on=kTRUE)
Definition: KVListView.h:282
virtual void SetDataColumn(Int_t index, const Char_t *name, const Char_t *method="", Int_t mode=kTextCenterX)
Definition: KVListView.cpp:106
Extended TList class which owns its objects by default.
Definition: KVList.h:27
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
KVNamedParameter * GetParameter(Int_t idx) const
return the parameter object with index idx
void SetValue(const Char_t *name, value_type value)
Int_t GetNpar() const
return the number of stored parameters
value_type GetValue(const Char_t *name) const
const Char_t * GetString() const
int get_number_of_tables() const
Definition: SQLiteDB.h:418
void add_table(KVSQLite::table &)
Definition: SQLiteDB.cpp:193
int count(const TString &table, const TString &column="*", const TString &selection="", bool distinct=false) const
Definition: SQLiteDB.cpp:680
void delete_data(const TString &table, const TString &selection="")
Definition: SQLiteDB.cpp:775
bool select_data(const TString &table, const TString &columns="*", const TString &selection="", bool distinct=false, const TString &anything_else="") const
Definition: SQLiteDB.cpp:441
void insert_data_row()
Definition: SQLiteDB.cpp:365
void end_data_insertion()
Definition: SQLiteDB.cpp:405
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:616
bool get_next_result() const
Definition: SQLiteDB.cpp:526
bool prepare_data_insertion(const TString &)
Definition: SQLiteDB.cpp:243
void clear_table(const TString &name)
Delete all data from table.
Definition: SQLiteDB.cpp:664
const column & add_primary_key(const TString &name)
Definition: SQLiteDB.cpp:1092
column & add_column(const KVSQLite::column &c)
Definition: SQLiteDB.cpp:1056
KaliVeda extensions to ROOT collection classes.
virtual void Add(TObject *obj)
virtual TObject * Remove(TObject *obj)
Remove object from list.
virtual TObject * FindObject(const char *name) const
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:35
TGPictureButton * BremDir
Definition: KVSimDirGUI.h:45
void SelectDataSet(const char *)
void ReconstructSimDirsFromDB()
Rebuild all KVSimDir/KVSimFile objects from information in sqlite DB.
void NewFilteredAnalysisClass()
Get name of new class.
TGCheckButton * gemini_add_rot_energy
Definition: KVSimDirGUI.h:80
Bool_t fGemAddRotEner
Definition: KVSimDirGUI.h:81
TGCompositeFrame * fAnalTab
analysis tab
Definition: KVSimDirGUI.h:58
KVSQLite::database fConfigDB
Definition: KVSimDirGUI.h:104
void RemSimDir()
TGComboBox * fCBrun
Definition: KVSimDirGUI.h:71
TGComboBox * fCBdataset
Definition: KVSimDirGUI.h:69
TGTextEntry * fTESystem
Definition: KVSimDirGUI.h:61
void EmptyTreeList()
void RefreshSimDir()
void SelectAnalysisClass()
KVString fRun
Definition: KVSimDirGUI.h:74
TGCompositeFrame * fFiltTab
filter tab
Definition: KVSimDirGUI.h:59
Bool_t fGemDecay
Definition: KVSimDirGUI.h:78
void UpdateSystemText(const char *)
called every time the text changes
void SetFilterOptions()
void AddSimDir()
TGCheckButton * fCBAllEvents
Definition: KVSimDirGUI.h:66
virtual ~KVSimDirGUI()
Destructor.
void NewSimulatedAnalysisClass()
Get name of new class.
KVList fListOfDirs
Definition: KVSimDirGUI.h:38
TGMainFrame * MainFrame
Definition: KVSimDirGUI.h:41
TGCheckButton * gemini_decay
Definition: KVSimDirGUI.h:77
TGViewPort * fDirListViewPort
Definition: KVSimDirGUI.h:49
TGNumberEntry * fNENumberEvents
Definition: KVSimDirGUI.h:67
KVString fAnalClassName
Definition: KVSimDirGUI.h:62
void SelectSystem(const char *)
void FillTreeList()
Int_t fFilterType
Definition: KVSimDirGUI.h:96
TGComboBox * fCBsystem
Definition: KVSimDirGUI.h:70
KVSimDir * fSelectedSimDir
Definition: KVSimDirGUI.h:39
void Copy(TObject &) const
TGTab * fAnalysisTabs
Definition: KVSimDirGUI.h:57
KVString fSystem
Definition: KVSimDirGUI.h:73
TGListTree * fDirListTree
Definition: KVSimDirGUI.h:50
TGCanvas * fDirListCanvas
Definition: KVSimDirGUI.h:48
const TGPicture * pclose
used for list tree items
Definition: KVSimDirGUI.h:52
const TGPicture * popen
used for list tree items
Definition: KVSimDirGUI.h:51
KVString fAnalClassHeader
Definition: KVSimDirGUI.h:63
KVListView * fLVfiltData
Definition: KVSimDirGUI.h:55
void Run()
void ChangeOutputDirectory();
void FillDataSetTableWithInfos(TString ds_table_name, KVSimDir *sd)
Definition: KVSimDirGUI.cpp:67
TGPictureButton * proof_analysis
TGTextEntry* fTEOutputDir;.
Definition: KVSimDirGUI.h:100
KVString fAnalClassImp
Definition: KVSimDirGUI.h:64
TGNumberEntry * gemini_decays
Definition: KVSimDirGUI.h:79
TGCheckButton * phi_rotation_check
Definition: KVSimDirGUI.h:75
Int_t fKine
Definition: KVSimDirGUI.h:98
KVString fAnalClassDir
Definition: KVSimDirGUI.h:65
void EnableEventNumberEntry(Bool_t)
Int_t fGeoType
Definition: KVSimDirGUI.h:97
void RunAnalysis(const TString &type)
Bool_t WarningBox(const char *title, const char *msg, Bool_t confirm)
TGPictureButton * BaddDir
Definition: KVSimDirGUI.h:43
Bool_t fWithPROOF
=kTRUE when running with PROOF-lite
Definition: KVSimDirGUI.h:106
void GeoType(Int_t i)
Definition: KVSimDirGUI.h:145
Bool_t fCancelJob
if job parameters are not valid
Definition: KVSimDirGUI.h:107
Bool_t fRandomPhi
Definition: KVSimDirGUI.h:76
KVListView * fLVsimData
Definition: KVSimDirGUI.h:54
TGPictureButton * BimpSim
Definition: KVSimDirGUI.h:44
TGPictureButton * BrefreshDir
Definition: KVSimDirGUI.h:46
TGTextEntry * fTEAnalysisClassFileName
Definition: KVSimDirGUI.h:60
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:35
void ImportSimulation()
Import simulation data from currently selected directory.
KVString fDataset
Definition: KVSimDirGUI.h:72
void SelectRun(const char *)
Handle directory containing simulated and/or filtered simulated data ,.
Definition: KVSimDir.h:43
virtual const KVList * GetFiltDataList() const
Definition: KVSimDir.h:72
void AddSimData(KVSimFile *)
Definition: KVSimDir.cpp:263
virtual void AnalyseDirectory()
Definition: KVSimDir.cpp:126
virtual const KVList * GetSimDataList() const
Definition: KVSimDir.h:68
void AddFiltData(KVSimFile *)
Definition: KVSimDir.cpp:272
virtual const Char_t * GetDirectory() const
Definition: KVSimDir.h:60
Handle file containing simulated and/or filtered simulated data ,.
Definition: KVSimFile.h:18
const Char_t * GetSystem() const
Definition: KVSimFile.h:80
const Char_t * GetBranchName() const
Definition: KVSimFile.h:107
const Char_t * GetOriginalFile() const
Definition: KVSimFile.h:112
Int_t GetRun() const
Definition: KVSimFile.h:90
const Char_t * GetFilterType() const
Definition: KVSimFile.h:85
Bool_t IsGemini() const
Definition: KVSimFile.h:48
const Char_t * GetGeometry() const
Definition: KVSimFile.h:95
const Char_t * GetDataSet() const
Definition: KVSimFile.h:75
Long64_t GetEvents() const
Definition: KVSimFile.h:70
const Char_t * GetTreeName() const
Definition: KVSimFile.h:102
Int_t GetGemDecayPerEvent() const
Definition: KVSimFile.h:60
static KVSimReader * MakeSimReader(const char *model_uri)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:72
void Begin(TString delim) const
Definition: KVString.cpp:562
Bool_t End() const
Definition: KVString.cpp:625
KVString Next(Bool_t strip_whitespace=kFALSE) const
Definition: KVString.cpp:675
virtual void ls(Option_t *option="") const
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)
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)
virtual void MapSubwindows()
TGViewPort * GetViewPort() const
virtual void SetDisabledAndSelected(Bool_t)
virtual void SetState(EButtonState state, Bool_t emit=kFALSE)
virtual Bool_t IsDown() const
virtual void RemoveAll()
virtual void Select(Int_t id, Bool_t emit=kTRUE)
virtual void AddEntry(const char *s, Int_t id)
virtual void Layout()
virtual void SetLayoutManager(TGLayoutManager *l)
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
virtual UInt_t GetDefaultWidth() const
virtual void ChangeOptions(UInt_t options)
virtual TGDimension GetDefaultSize() const
virtual void MapSubwindows()
TList * fFileNamesList
char * fFilename
void SetMultipleSelection(Bool_t option)
const char ** fFileTypes
char * fIniDir
Bool_t fMultipleSelection
virtual UInt_t GetDefaultHeight() const
virtual void Resize(TGDimension size)
virtual void MapWindow()
virtual void Layout()=0
virtual const char * GetText() const=0
virtual void SetPictures(const TGPicture *, const TGPicture *)
TGListTreeItem * GetFirstItem() const
Int_t DeleteItem(TGListTreeItem *item)
void AddItem(const char *string)
void CloseItem(TGListTreeItem *item)
void SetMWMHints(UInt_t value, UInt_t funcs, UInt_t input)
void SetWindowName(const char *name=0)
TGNumberEntryField * GetNumberEntry() const
virtual void SetState(Bool_t enable=kTRUE)
virtual Double_t GetNumber() const
virtual void SetState(EButtonState state, Bool_t emit=kFALSE)
virtual TGCompositeFrame * AddTab(const char *text)
virtual TGLayoutManager * GetLayoutManager() const
Int_t GetCurrent() const
virtual void SetToolTipText(const char *text, Long_t delayms=500)
virtual void SetText(const char *text, Bool_t emit=kTRUE)
virtual void SetName(const char *name)
virtual TObject * First() const
virtual const char * GetName() const
virtual const char * GetTitle() const
virtual const char * GetName() const
R__ALWAYS_INLINE Bool_t IsZombie() const
virtual void Error(const char *method, const char *msgfmt,...) const
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Ssiz_t Length() const
Bool_t IsDigit() const
const char * Data() 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
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
const long double s
Definition: KVUnits.h:94