13 #include "TSystemDirectory.h"
16 #include "TDirectory.h"
19 #include "TGFileDialog.h"
24 #include "TObjArray.h"
25 #include "TObjString.h"
35 void Import(TString Incl=
"*", TString Excl=
"*.samp", TString DefaultPath=
"");
36 void ImportFile(TString DefaultPath=
"", Double_t DefGain=1);
38 TList *
BuildHistograms(TString DataPath, TList *ListOfFiles, std::map<TString, double> GainMap);
39 TString
GetFileName(TString DefaultDir,TString FileExt);
40 std::map<TString, double>
ReadGain(TString gen_conf_Path);
42 void BuildTasks(TList *ListOfHists, TString RunNbr, std::map<TString, double> GainMap);
48 void Import(TString Incl, TString Excl, TString DefaultPath)
50 TString CurrentDir = gSystem->pwd();
52 DefaultPath=
"/agatadisks/eagata/";
55 TString Path =
GetFileName(DefaultPath,
"gen_conf.py");
58 TString StringToToken = Path;
59 TObjArray *token = StringToToken.Tokenize(
"/");
61 TString RunNbr = ((TObject*)token->At(token->GetEntries()-2))->GetName();
63 std::map<TString, double> GainMap =
ReadGain(Path);
65 Path.ReplaceAll(
"/gen_conf.py",
"");
67 gSystem->cd(CurrentDir);
71 Dir.SetDirectory(Path);
72 if(!Dir.GetListOfFiles()->Contains(
"Data") && !Dir.GetListOfFiles()->Contains(
"Conf"))
74 cout<<
"The directory don't refer to a run directory, it must contains Conf and Data sub directories"<<
endl;
80 TList *ListOfCrystals;
81 ListOfCrystals =
new TList();
82 ListOfCrystals->SetOwner();
84 TString DataPath = Path +
"/Data/";
86 if(gSystem->AccessPathName(DataPath))
88 cout<<DataPath<<
" no readable, looking in the Out Dir"<<
endl;
89 DataPath.ReplaceAll(
"/Data/",
"/Out/");
90 if(gSystem->AccessPathName(DataPath))
92 cout<<DataPath<<
" no readable, exit"<<
endl;
97 Dir.SetDirectory(DataPath);
98 TList *ListOfSubFolders = Dir.GetListOfFiles();
99 ListOfSubFolders->Remove(ListOfSubFolders->FindObject(
"."));
100 ListOfSubFolders->Remove(ListOfSubFolders->FindObject(
".."));
102 TIter iter(ListOfSubFolders);
105 while ( (entry = iter()) )
107 TString SubDirName = entry->GetName();
108 TString SubDirPath = DataPath + SubDirName;
110 if(entry->InheritsFrom(
"TSystemDirectory"))
112 TSystemDirectory SubDir;
113 SubDir.SetDirectory(SubDirPath);
114 TList *ListOfFiles = SubDir.GetListOfFiles();
115 ListOfFiles->Remove(ListOfFiles->FindObject(
"."));
116 ListOfFiles->Remove(ListOfFiles->FindObject(
".."));
118 if(ListOfFiles->IsEmpty()) ListOfSubFolders->Remove(entry);
123 ListOfSpectra->SetName(SubDirName);
124 ListOfCrystals->Add(ListOfSpectra);
130 TList *ListOfAllHistograms =
BuildHistograms(DataPath, ListOfCrystals, GainMap);
131 ListOfAllHistograms->Sort();
135 TFolder *SpectraViewerFolder = (TFolder*)gROOT->GetRootFolder()->FindObject(
"SpectraViewer");
136 if(!SpectraViewerFolder)
138 gROOT->GetRootFolder()->AddFolder(
"SpectraViewer",
"SpectraViewer");
139 SpectraViewerFolder = (TFolder*)gROOT->GetRootFolder()->FindObject(
"SpectraViewer");
142 ((TFolder*)gROOT->GetRootFolder()->FindObject(
"SpectraViewer"))->AddFolder(RunNbr,
"Folder containing the spectra created by the actors",ListOfAllHistograms);
144 TBrowser *
b = (TBrowser*)gROOT->GetListOfBrowsers()->Last();
145 b->Add(SpectraViewerFolder);
147 TFolder *RootFilesFolder = (TFolder*)gROOT->GetRootFolder()->FindObject(
"ROOT Files");
148 b->Add(RootFilesFolder);
151 BuildTasks(ListOfAllHistograms,RunNbr, GainMap);
153 delete ListOfCrystals;
160 TString CurrentDir = gSystem->pwd();
162 DefaultPath=
"/agatadisks/eagata/";
166 if(gSystem->IsFileInIncludePath(DefaultPath)) Path = DefaultPath;
171 gSystem->cd(CurrentDir);
176 std::map<TString, double> GainMap;
178 TString ActorName =
info.basename;
180 GainMap[
info.basename] = DefGain;
182 TList *ListOfCrystals;
183 ListOfCrystals =
new TList();
184 ListOfCrystals->SetOwner();
186 TString CrystalName = Path;
189 ListOfActors =
new TList();
190 ListOfActors->SetOwner();
191 ListOfActors->SetName(CrystalName);
192 ListOfCrystals->Add(ListOfActors);
195 NewActor =
new TList();
196 NewActor->SetOwner();
197 NewActor->SetName(ActorName);
198 ListOfActors->Add(NewActor);
201 TList *ListOfObservables = (TList*)ListOfActors->FindObject(ActorName);
204 TList *ListOfLibraries =
ReadFile(Path,
info,
"",GainMap);
206 ListOfObservables->Add(ListOfLibraries);
209 TFolder *TopFolder = (TFolder*)gROOT->GetRootFolder()->FindObject(
"//root/SpectraViewer");
210 if (TopFolder!=0x0)
delete TopFolder;
211 gROOT->GetRootFolder()->AddFolder(
"SpectraViewer",
"Folder containing the spectra created by the actors",ListOfCrystals);
213 TBrowser *
b = (TBrowser*)gROOT->GetListOfBrowsers()->Last();
215 TFolder *SpectraViewerFolder = (TFolder*)gROOT->GetRootFolder()->FindObject(
"SpectraViewer");
216 if(SpectraViewerFolder) b->Add(SpectraViewerFolder);
218 TFolder *RootFilesFolder = (TFolder*)gROOT->GetRootFolder()->FindObject(
"ROOT Files");
219 if(RootFilesFolder) b->Add(RootFilesFolder);
229 TList *ListOfSpectra =
new TList();
230 ListOfSpectra->SetOwner();
232 TString tmp_obj =
"", tmp_token =
"";
234 TObject *an_obj = 0x0, *a_token = 0x0;
236 ListOfFiles->Remove(ListOfFiles->FindObject(
"."));
237 ListOfFiles->Remove(ListOfFiles->FindObject(
".."));
239 TIter iter(ListOfFiles);
241 while ( (an_obj = iter()) )
243 tmp_obj = an_obj->GetName();
246 Excl = Excl +
" *.adf";
248 Excl = Excl +
" *.cdat*";
251 TObjArray *all_token_include = Incl.Tokenize(
" "),*all_token_exclude = Excl.Tokenize(
" ");
252 Bool_t add_it =
false, exclude_it =
false;
255 TIter token_include(all_token_include);
256 while ( (a_token = token_include()) )
259 tmp_token = a_token->GetName();
263 if ( tmp_token.Contains(
"*") )
265 TRegexp kept(tmp_token,wildcard);
267 if ( tmp_obj.Contains(kept) ) {
274 TIter token_exclude(all_token_exclude);
275 while ( (a_token = token_exclude()) )
278 tmp_token = a_token->GetName();
282 if ( tmp_token.Contains(
"*") )
284 TRegexp nokept(tmp_token,wildcard);
286 if ( tmp_obj.Contains(nokept) ) {
293 if ( all_token_include ) {
294 delete all_token_include; all_token_include = 0x0;
296 if ( all_token_exclude ) {
297 delete all_token_exclude; all_token_exclude = 0x0;
302 if ( add_it && !exclude_it ) {
303 ListOfSpectra->Add(an_obj);
307 return ListOfSpectra;
312 TList *
BuildHistograms(TString DataPath, TList *ListOfFiles, std::map<TString, double> GainMap)
314 TList *ListOfCrystals;
315 ListOfCrystals =
new TList();
316 ListOfCrystals->SetOwner();
318 TIter iter(ListOfFiles);
322 while ( (entry = iter()) )
324 TString CrystalName = entry->GetName();
326 cout<<
"Reading spectra for "<<entry->GetName()<<
" level:"<<
endl;
328 ListOfActors =
new TList();
329 ListOfActors->SetOwner();
330 ListOfActors->SetName(entry->GetName());
331 ListOfCrystals->Add(ListOfActors);
333 TIter iter2((TList*)entry);
337 while ( (entry2 = iter2()) )
339 cout<<
"\t File: "<<entry2->GetName()<<
endl;
341 TString Filename = entry2->GetName();
343 TString FilePath = DataPath + CrystalName +
"/" + Filename;
360 TString ActorName =
info.basename;
362 if(!ListOfActors->Contains(ActorName))
365 NewActor =
new TList();
366 NewActor->SetOwner();
367 NewActor->SetName(ActorName);
368 ListOfActors->Add(NewActor);
372 TList *ListOfObservables = (TList*)ListOfActors->FindObject(ActorName);
375 TList *ListOfLibraries =
ReadFile(FilePath,
info, CrystalName, GainMap);
377 if(ListOfLibraries->GetSize()!=0) ListOfObservables->Add(ListOfLibraries);
378 else delete ListOfLibraries;
380 if(ListOfActors->GetSize()==0)
382 ListOfCrystals->Remove(ListOfActors);
390 return ListOfCrystals;
395 bool next_pos(std::vector<int> &ptr, std::vector<int> &max)
399 for (pos = ptr.size()-1; pos >= 0; --pos)
402 if (ptr[pos] == max[pos])
419 TList *ListOfLibrairies;
420 ListOfLibrairies =
new TList();
421 ListOfLibrairies->SetOwner();
423 TObjString *FileName =
new TObjString(FilePath);
424 ListOfLibrairies->Add(FileName);
426 std::ifstream in(FilePath);
429 std::cerr <<
"cannot open file " << FilePath <<
std::endl;
438 ListOfLibrairies->SetName(Name);
442 std::cerr <<
"invalid format";
451 std::vector<int> ptr_stack(info.
number_stack.size(), 0);
456 std::ostringstream dir_name;
458 for (uint n = 0; n < ptr_stack.size()-1; ++n) dir_name <<
"_" << std::setw(3) << std::setfill(
'0') << ptr_stack[n];
460 std::ostringstream histname;
461 histname <<
"Graph_" << CrystalName.Data() <<
"_" << dir_name.str() <<
"_" << std::setw(3) << std::setfill(
'0') << ptr_stack.back();
464 TString LibraryName = dir_name.str();
466 if(!ListOfLibrairies->Contains(LibraryName))
468 TList *NewLibrary =
new TList();
469 NewLibrary->SetOwner();
470 NewLibrary->SetName(LibraryName);
471 ListOfLibrairies->Add(NewLibrary);
474 TList *ListOfHistograms = (TList*)ListOfLibrairies->FindObject(LibraryName);
476 TString HistName = (histname.str());
477 TGraph *graph = (TGraph*)gROOT->FindObject(HistName);
478 if(graph)
delete graph;
479 graph =
new TGraph(channels);
480 graph->SetNameTitle(HistName, HistName);
483 read_1d_data_to_graph<uint32_t>(in, graph);
485 read_1d_data_to_graph<uint16_t>(in, graph);
487 read_1d_data_to_graph<int16_t>(in, graph);
489 read_1d_data_to_graph<float>(in, graph);
491 if(graph->GetN() != 0)ListOfHistograms->Add(graph);
494 cout<<
"WARNING !! "<<graph->GetName()<<
" has a null size !"<<
endl;
502 if(ListOfHistograms->GetSize()==0)
504 ListOfLibrairies->Remove(ListOfHistograms);
505 delete ListOfHistograms;
516 ListOfLibrairies->SetName(Name);
520 std::cerr <<
"invalid format";
529 std::vector<int> ptr_stack(info.
number_stack.size(), 0);
534 std::ostringstream dir_name;
536 for (uint n = 0; n < ptr_stack.size()-1; ++n) dir_name <<
"_" << std::setw(3) << std::setfill(
'0') << ptr_stack[n];
538 std::ostringstream histname;
539 histname <<
"H1D_" << CrystalName.Data() <<
"_" << dir_name.str() <<
"_" << std::setw(3) << std::setfill(
'0') << ptr_stack.back();
542 TString LibraryName = dir_name.str();
544 if(!ListOfLibrairies->Contains(LibraryName))
546 TList *NewLibrary =
new TList();
547 NewLibrary->SetOwner();
548 NewLibrary->SetName(LibraryName);
549 ListOfLibrairies->Add(NewLibrary);
552 TList *ListOfHistograms = (TList*)ListOfLibrairies->FindObject(LibraryName);
554 TString HistName = (histname.str());
555 TH1 *hist = (TH1*)gROOT->FindObject(HistName);
556 if(hist) hist->Clear();
562 if( (HistName.Contains(
"Prep") && HistName.Contains(
"Esum")) ||
563 (HistName.Contains(
"Prep") && HistName.Contains(
"Ener") && !HistName.EndsWith(
"38") && !HistName.EndsWith(
"39")) ||
564 (HistName.Contains(
"Post") && HistName.Contains(
"Ener")) ||
565 (HistName.Contains(
"Psa") && HistName.Contains(
"Ener")) ||
566 (HistName.Contains(
"Track") && ((HistName.Contains(
"_EC")) || (HistName.Contains(
"_EE"))))
570 hist =
new TH1F(HistName, HistName, channels, 0, (
int)channels/Gain);
572 else hist =
new TH1I(HistName, HistName, channels, 0, channels);
575 read_1d_data<uint32_t>(in, hist);
577 read_1d_data<uint16_t>(in, hist);
579 read_1d_data<int16_t>(in, hist);
581 read_1d_data<float>(in, hist);
583 if(hist->GetEntries() != 0)ListOfHistograms->Add(hist);
591 if(ListOfHistograms->GetSize()==0)
593 ListOfLibrairies->Remove(ListOfHistograms);
594 delete ListOfHistograms;
605 ListOfLibrairies->SetName(Name);
609 std::cerr <<
"invalid format";
621 std::vector<int> ptr_stack(info.
number_stack.size(), 0);
626 std::ostringstream dir_name;
628 for (uint n = 0; n < ptr_stack.size()-1; ++n)
629 dir_name <<
"_" << std::setw(3) << std::setfill(
'0') << ptr_stack[n];
631 std::ostringstream histname;
632 histname <<
"H2D_" << CrystalName.Data() <<
"_" << dir_name.str() <<
"_" << std::setw(3) << std::setfill(
'0') << ptr_stack.back();
635 TString LibraryName = dir_name.str();
636 if(!ListOfLibrairies->Contains(LibraryName))
638 TList *NewLibrary =
new TList();
639 NewLibrary->SetOwner();
640 NewLibrary->SetName(LibraryName);
641 ListOfLibrairies->Add(NewLibrary);
644 TList *ListOfHistograms = (TList*)ListOfLibrairies->FindObject(LibraryName);
646 TString HistName = (histname.str());
647 TH2I *hist = (TH2I*)gROOT->FindObject(HistName);
648 if(hist) hist->Clear();
650 hist =
new TH2I(HistName, HistName,
651 x_channels, 0, x_channels,
652 y_channels, 0, y_channels
656 read_2d_data<uint32_t>(in, hist);
658 read_2d_data<uint16_t>(in, hist);
660 read_2d_data<int16_t>(in, hist);
662 read_2d_data<float>(in, hist);
664 if(hist->GetEntries() != 0 && hist->Integral() != 0.)ListOfHistograms->Add(hist);
671 if(ListOfHistograms->GetSize()==0)
673 ListOfLibrairies->Remove(ListOfHistograms);
674 delete ListOfHistograms;
684 return ListOfLibrairies;
698 if(FileExt==
"*.root") FileType =
"Root Files";
699 else if(FileExt==
"*.dat") FileType =
"Data Files";
700 else if(FileExt==
"gen_conf.py") FileType =
"gen_conf Files";
701 else if(FileExt==
"*.*") FileType =
"All_Files";
703 const char *filetypes[] = {FileType, FileExt,
"All files",
"*", 0, 0};
706 fi.fFileTypes = filetypes;
707 fi.fIniDir = StrDup(DefaultDir);
709 new TGFileDialog(gClient->GetDefaultRoot(), gClient->GetDefaultRoot() , kFDOpen, &fi);
712 cout<<
"!!!! **** WARNING **** !!!! No file Selected ==> exit"<<
endl;
716 return (TString)fi.fFilename;
721 std::map<TString, double>
ReadGain(TString gen_conf_Path)
723 std::map<TString, double> GainMap;
725 std::ifstream f_in(gen_conf_Path);
734 if(Buffer==
"CrystalProducer=(")
736 GainMap[
"Prod"] = 1.;
741 if(Buffer.Contains(
"ProjeM1") && !Buffer.BeginsWith(
"#"))
743 TObjArray *loa=Buffer.Tokenize(
" ");
744 GainMap[
"Prod"] = ((TObjString*)loa->At(2))->GetString().Atof();
746 if(Buffer.BeginsWith(
"}"))
break;
749 else if(Buffer==
"PreprocessingFilter=(")
751 GainMap[
"Prep"] = 1.;
756 if(Buffer.Contains(
"EnergyGain") && !Buffer.BeginsWith(
"#"))
758 TObjArray *loa=Buffer.Tokenize(
" ");
759 GainMap[
"Prep"] = ((TObjString*)loa->At(1))->GetString().Atof();;
761 if(Buffer.BeginsWith(
"}"))
break;
764 else if(Buffer==
"PSAFilter=(")
771 if(Buffer.Contains(
"EnergyGain") && !Buffer.BeginsWith(
"#"))
773 TObjArray *loa=Buffer.Tokenize(
" ");
774 GainMap[
"Psa"] = ((TObjString*)loa->At(1))->GetString().Atof();;
776 if(Buffer.BeginsWith(
"}"))
break;
779 else if(Buffer==
"PostPSAFilter=(")
781 GainMap[
"Post"] = 1.;
786 if(Buffer.Contains(
"EnergyGain") && !Buffer.BeginsWith(
"#"))
788 TObjArray *loa=Buffer.Tokenize(
" ");
789 GainMap[
"Post"] = ((TObjString*)loa->At(1))->GetString().Atof();;
791 if(Buffer.BeginsWith(
"}"))
break;
794 else if(Buffer==
"TrackingFilter=(")
796 GainMap[
"Track"] = 1.;
801 if(Buffer.Contains(
"EnergyGain") && !Buffer.BeginsWith(
"#"))
803 TObjArray *loa=Buffer.Tokenize(
" ");
804 GainMap[
"Track"] = ((TObjString*)loa->At(1))->GetString().Atof();;
806 if(Buffer.BeginsWith(
"}"))
break;
816 void BuildTasks(TList *ListOfHists, TString RunNbr, std::map<TString, double> GainMap)
819 gROOT->GetListOfTasks()->Add(Global);
822 Global->Add(LLPWatchers);
824 Global->Add(GLPWatchers);
826 TIter IterCrystal(ListOfHists);
828 while ( (oCrystal = IterCrystal()) )
830 TString LevelName = oCrystal->GetName();
831 bool IsLocal =
false;
832 if(LevelName.Atoi()>0) IsLocal =
true;
833 else if(!LevelName.Contains(
"Track") && !LevelName.Contains(
"Evb__")) IsLocal =
true;
835 if(IsLocal)TopTask = (TTask*)((TTask*)gROOT->GetListOfTasks()->FindObject(RunNbr))->GetListOfTasks()->FindObject(
"LLPWatchers");
836 else TopTask = (TTask*)((TTask*)gROOT->GetListOfTasks()->FindObject(RunNbr))->GetListOfTasks()->FindObject(
"GLPWatchers");
839 TopTask->Add(LevelWatcher);
841 TList *ListOfActors = ((TList*)oCrystal);
842 TIter IterActors(ListOfActors);
844 while ( (oActors = IterActors()) )
846 TString ActorName = oActors->GetName();
848 TList *ListOfObservables = ((TList*)oActors);
849 TIter IterObservables(ListOfObservables);
850 TObject *oObservables;
856 bool IsActorBuild =
false;
858 while ( (oObservables = IterObservables()) )
860 TString ObservableName = oObservables->GetName();
862 TList *ListOfLibraries = (TList*)oObservables;
864 TObjString *FileName = (TObjString*)ListOfLibraries->At(0);
868 if(ActorName==
"Prod" && ObservableName==
"H1D_Baseline")
870 ObservableWatcher =
new BaselineWatcher(ObservableName,ObservableName);
872 if(ActorName==
"Prod" && ObservableName==
"H1D_Ampli")
874 ObservableWatcher =
new RawAmpWatcher(ObservableName,ObservableName);
875 ((
RawAmpWatcher*)ObservableWatcher)->SetGain(GainMap[
"Prod"]);
877 if(ObservableName.Contains(
"samp"))
879 if(ObservableName.Contains(
"Traces") && ( ObservableName.Contains(
"Prep") || ObservableName.Contains(
"Prod")))
882 if(ObservableName.Contains(
"Traces") && ObservableName.Contains(
"Psa"))
885 if(ObservableName.Contains(
"AverSingles") && ObservableName.Contains(
"Psa"))
889 if(ObservableWatcher != 0x0)
892 ObservableWatcher->
SetFileName(FileName->GetString());
893 ListOfLibraries->Remove(FileName);
895 ActorWatcher->Add(ObservableWatcher);
900 if(IsActorBuild) LevelWatcher->Add(ActorWatcher);
901 else delete ActorWatcher;
void Import(TString Incl="*", TString Excl="*.samp", TString DefaultPath="")
*/
void BuildTasks(TList *ListOfHists, TString RunNbr, std::map< TString, double > GainMap)
******************************************************************************************/// ...
void SetListOfLibrairies(TList *l)
TList * BuildHistograms(TString DataPath, TList *ListOfFiles, std::map< TString, double > GainMap)
******************************************************************************************/// ...
TList * GetListFromIncExcl(TList *ListOfFiles, TString Incl, TString Excl)
******************************************************************************************/// ...
LogMessage & info(LogMessage &)
manipulator to modify the LogMessage
void SetFileName(TString name)
******************************************************************************************/// ...
bool next_pos(std::vector< int > &ptr, std::vector< int > &max)
******************************************************************************************/// ...
TList * ReadFile(TString FilePath, DinoFileInfo info, TString CrystalName, std::map< TString, double > GainMap)
******************************************************************************************/// ...
TString GetFileName(TString DefaultDir, TString FileExt)
******************************************************************************************/// ...
ADF::LogMessage & endl(ADF::LogMessage &log)
std::map< TString, double > ReadGain(TString gen_conf_Path)
******************************************************************************************/// ...
void ImportFile(TString DefaultPath="", Double_t DefGain=1)
******************************************************************************************/// ...
std::vector< int > number_stack
void SetCrystal(TString name)