1 #include "OutputManager.hxx" 2 #include <TDirectory.h> 12 _default_docstring=
"No documentation was specified for this variable";
15 _tree_vars_counter_size.resize(NMAXTREES);
16 _link_var_to_counter.resize(NMAXTREES);
19 _tree_vars_counter.resize(NMAXTREES);
21 _tree_vars_float.resize(NMAXTREES);
22 _tree_vars_double.resize(NMAXTREES);
23 _tree_vars_int.resize(NMAXTREES);
24 _tree_vars_char.resize(NMAXTREES);
26 _tree_vars_float_vector.resize(NMAXTREES);
27 _tree_vars_double_vector.resize(NMAXTREES);
28 _tree_vars_int_vector.resize(NMAXTREES);
29 _tree_vars_char_vector.resize(NMAXTREES);
31 _tree_vars_float_matrix.resize(NMAXTREES);
32 _tree_vars_double_matrix.resize(NMAXTREES);
33 _tree_vars_int_matrix.resize(NMAXTREES);
34 _tree_vars_char_matrix.resize(NMAXTREES);
36 _tree_vars_float_3Dmatrix.resize(NMAXTREES);
37 _tree_vars_double_3Dmatrix.resize(NMAXTREES);
38 _tree_vars_int_3Dmatrix.resize(NMAXTREES);
40 _tree_vars_all_vars.resize(NMAXTREES);
41 _tree_vars_all_counters.resize(NMAXTREES);
44 _tree_vars_used_counter.resize(NMAXTREES);
46 _tree_vars_used_float.resize(NMAXTREES);
47 _tree_vars_used_double.resize(NMAXTREES);
48 _tree_vars_used_int.resize(NMAXTREES);
49 _tree_vars_used_char.resize(NMAXTREES);
51 _tree_vars_used_float_vector.resize(NMAXTREES);
52 _tree_vars_used_double_vector.resize(NMAXTREES);
53 _tree_vars_used_int_vector.resize(NMAXTREES);
54 _tree_vars_used_char_vector.resize(NMAXTREES);
56 _tree_vars_used_float_matrix.resize(NMAXTREES);
57 _tree_vars_used_double_matrix.resize(NMAXTREES);
58 _tree_vars_used_int_matrix.resize(NMAXTREES);
59 _tree_vars_used_char_matrix.resize(NMAXTREES);
61 _tree_vars_used_float_3Dmatrix.resize(NMAXTREES);
62 _tree_vars_used_double_3Dmatrix.resize(NMAXTREES);
63 _tree_vars_used_int_3Dmatrix.resize(NMAXTREES);
66 _tree_vars_exist_float.resize(NMAXTREES);
67 _tree_vars_exist_double.resize(NMAXTREES);
68 _tree_vars_exist_int.resize(NMAXTREES);
69 _tree_vars_exist_char.resize(NMAXTREES);
71 _tree_vars_exist_float_vector.resize(NMAXTREES);
72 _tree_vars_exist_double_vector.resize(NMAXTREES);
73 _tree_vars_exist_int_vector.resize(NMAXTREES);
74 _tree_vars_exist_char_vector.resize(NMAXTREES);
76 _tree_vars_exist_float_matrix.resize(NMAXTREES);
77 _tree_vars_exist_double_matrix.resize(NMAXTREES);
78 _tree_vars_exist_int_matrix.resize(NMAXTREES);
79 _tree_vars_exist_char_matrix.resize(NMAXTREES);
81 _tree_vars_exist_float_3Dmatrix.resize(NMAXTREES);
82 _tree_vars_exist_double_3Dmatrix.resize(NMAXTREES);
83 _tree_vars_exist_int_3Dmatrix.resize(NMAXTREES);
87 _single_tree_fill = -1;
92 OutputManager::~OutputManager() {
94 UInt_t tree_index = 0;
95 for (std::vector<TTree*>::iterator treeit = _trees.begin(); treeit != _trees.end(); treeit++, tree_index++) {
97 std::vector<int_vector*>::iterator it_int_vector;
98 for (it_int_vector = _tree_vars_int_vector[tree_index].begin(); it_int_vector != _tree_vars_int_vector[tree_index].end(); it_int_vector++)
99 {
delete *it_int_vector; }
101 std::vector<double_vector*>::iterator it_double_vector;
102 for (it_double_vector = _tree_vars_double_vector[tree_index].begin(); it_double_vector != _tree_vars_double_vector[tree_index].end(); it_double_vector++)
103 {
delete *it_double_vector; }
105 std::vector<float_vector*>::iterator it_float_vector;
106 for (it_float_vector = _tree_vars_float_vector[tree_index].begin(); it_float_vector != _tree_vars_float_vector[tree_index].end(); it_float_vector++)
107 {
delete *it_float_vector; }
109 std::vector<char_vector*>::iterator it_char_vector;
110 for (it_char_vector = _tree_vars_char_vector[tree_index].begin(); it_char_vector != _tree_vars_char_vector[tree_index].end(); it_char_vector++)
111 {
delete *it_char_vector; }
114 std::vector<int_matrix*>::iterator it_int_matrix;
115 for (it_int_matrix = _tree_vars_int_matrix[tree_index].begin(); it_int_matrix != _tree_vars_int_matrix[tree_index].end(); it_int_matrix++)
116 {
delete *it_int_matrix; }
118 std::vector<double_matrix*>::iterator it_double_matrix;
119 for (it_double_matrix = _tree_vars_double_matrix[tree_index].begin(); it_double_matrix != _tree_vars_double_matrix[tree_index].end(); it_double_matrix++)
120 {
delete *it_double_matrix; }
122 std::vector<float_matrix*>::iterator it_float_matrix;
123 for (it_float_matrix = _tree_vars_float_matrix[tree_index].begin(); it_float_matrix != _tree_vars_float_matrix[tree_index].end(); it_float_matrix++)
124 {
delete *it_float_matrix; }
126 std::vector<char_matrix*>::iterator it_char_matrix;
127 for (it_char_matrix = _tree_vars_char_matrix[tree_index].begin(); it_char_matrix != _tree_vars_char_matrix[tree_index].end(); it_char_matrix++)
128 {
delete *it_char_matrix; }
131 std::vector<int_3Dmatrix*>::iterator it_int_3Dmatrix;
132 for (it_int_3Dmatrix = _tree_vars_int_3Dmatrix[tree_index].begin(); it_int_3Dmatrix != _tree_vars_int_3Dmatrix[tree_index].end(); it_int_3Dmatrix++)
133 {
delete *it_int_3Dmatrix; }
135 std::vector<double_3Dmatrix*>::iterator it_double_3Dmatrix;
136 for (it_double_3Dmatrix = _tree_vars_double_3Dmatrix[tree_index].begin(); it_double_3Dmatrix != _tree_vars_double_3Dmatrix[tree_index].end(); it_double_3Dmatrix++)
137 {
delete *it_double_3Dmatrix; }
139 std::vector<float_3Dmatrix*>::iterator it_float_3Dmatrix;
140 for (it_float_3Dmatrix = _tree_vars_float_3Dmatrix[tree_index].begin(); it_float_3Dmatrix != _tree_vars_float_3Dmatrix[tree_index].end(); it_float_3Dmatrix++)
141 {
delete *it_float_3Dmatrix; }
155 _trees[tree_index] = tree->CloneTree(0);
156 _trees[tree_index]->SetTitle(GetString(tree_index).c_str());
159 _trees[tree_index] =
new TTree(name.c_str(),GetString(tree_index).c_str());
161 _trees_indices.push_back(tree_index);
162 _trees_nonull.push_back(_trees[tree_index]);
165 _trees[tree_index]->SetDirectory(0);
166 _trees[tree_index]->SetAutoSave(10000000);
169 _tree_vars_counter_size[tree_index].resize(NMAXTREEVARS);
170 _link_var_to_counter[tree_index].resize(NMAXTREEVARS);
172 _tree_vars_counter[tree_index].resize(NMAXTREEVARS);
174 _tree_vars_float[tree_index].resize(NMAXTREEVARS);
175 _tree_vars_double[tree_index].resize(NMAXTREEVARS);
176 _tree_vars_int[tree_index].resize(NMAXTREEVARS);
177 _tree_vars_char[tree_index].resize(NMAXTREEVARS);
179 _tree_vars_float_vector[tree_index].resize(NMAXTREEVARS);
180 _tree_vars_double_vector[tree_index].resize(NMAXTREEVARS);
181 _tree_vars_int_vector[tree_index].resize(NMAXTREEVARS);
182 _tree_vars_char_vector[tree_index].resize(NMAXTREEVARS);
184 _tree_vars_float_matrix[tree_index].resize(NMAXTREEVARS);
185 _tree_vars_double_matrix[tree_index].resize(NMAXTREEVARS);
186 _tree_vars_int_matrix[tree_index].resize(NMAXTREEVARS);
187 _tree_vars_char_matrix[tree_index].resize(NMAXTREEVARS);
189 _tree_vars_float_3Dmatrix[tree_index].resize(NMAXTREEVARS);
190 _tree_vars_double_3Dmatrix[tree_index].resize(NMAXTREEVARS);
191 _tree_vars_int_3Dmatrix[tree_index].resize(NMAXTREEVARS);
195 _tree_vars_exist_float[tree_index].resize(NMAXTREEVARS);
196 _tree_vars_exist_double[tree_index].resize(NMAXTREEVARS);
197 _tree_vars_exist_int[tree_index].resize(NMAXTREEVARS);
198 _tree_vars_exist_char[tree_index].resize(NMAXTREEVARS);
200 _tree_vars_exist_float_vector[tree_index].resize(NMAXTREEVARS);
201 _tree_vars_exist_double_vector[tree_index].resize(NMAXTREEVARS);
202 _tree_vars_exist_int_vector[tree_index].resize(NMAXTREEVARS);
203 _tree_vars_exist_char_vector[tree_index].resize(NMAXTREEVARS);
205 _tree_vars_exist_float_matrix[tree_index].resize(NMAXTREEVARS);
206 _tree_vars_exist_double_matrix[tree_index].resize(NMAXTREEVARS);
207 _tree_vars_exist_int_matrix[tree_index].resize(NMAXTREEVARS);
208 _tree_vars_exist_char_matrix[tree_index].resize(NMAXTREEVARS);
210 _tree_vars_exist_float_3Dmatrix[tree_index].resize(NMAXTREEVARS);
211 _tree_vars_exist_double_3Dmatrix[tree_index].resize(NMAXTREEVARS);
212 _tree_vars_exist_int_3Dmatrix[tree_index].resize(NMAXTREEVARS);
215 for (UInt_t i=0;i<NMAXTREEVARS;i++){
216 _link_var_to_counter[tree_index][i]=-1;
217 _tree_vars_counter_size[tree_index][i]=-1;
220 _tree_vars_all_vars[tree_index].resize(NMAXTREEVARS);
221 _tree_vars_all_counters[tree_index].resize(NMAXTREEVARS);
224 for (UInt_t i=0;i<NMAXTREEVARS;i++){
225 _tree_vars_all_vars[tree_index][i]=
"";
228 for (UInt_t i=0;i<NMAXTREEVARS;i++){
229 _tree_vars_exist_float[tree_index][i]=
false;
230 _tree_vars_exist_double[tree_index][i]=
false;
231 _tree_vars_exist_int[tree_index][i]=
false;
232 _tree_vars_exist_char[tree_index][i]=
false;
234 _tree_vars_exist_float_vector[tree_index][i]=
false;
235 _tree_vars_exist_double_vector[tree_index][i]=
false;
236 _tree_vars_exist_int_vector[tree_index][i]=
false;
237 _tree_vars_exist_char_vector[tree_index][i]=
false;
239 _tree_vars_exist_float_matrix[tree_index][i]=
false;
240 _tree_vars_exist_double_matrix[tree_index][i]=
false;
241 _tree_vars_exist_int_matrix[tree_index][i]=
false;
242 _tree_vars_exist_char_matrix[tree_index][i]=
false;
244 _tree_vars_exist_float_3Dmatrix[tree_index][i]=
false;
245 _tree_vars_exist_double_3Dmatrix[tree_index][i]=
false;
246 _tree_vars_exist_int_3Dmatrix[tree_index][i]=
false;
250 SetCurrentTree(tree_index);
258 return (tree_index < (Int_t)NMAXSPECIALTREES);
263 bool OutputManager::Initialize(){
272 bool OutputManager::InitializeEntry(){
321 void OutputManager::InitializeTrees(
bool iniVars){
324 for (UInt_t i= 0; i<_trees_indices.size();i++){
325 InitializeTree(_trees_indices[i], iniVars);
330 void OutputManager::InitializeTree(Int_t tree_index,
bool iniVars){
337 std::vector<Int_t>::iterator it;
338 for (it= _tree_vars_used_counter[tree_index].begin();it!=_tree_vars_used_counter[tree_index].end();it++){
340 InitializeCounter(tree_index,*it);
344 if (!iniVars)
return;
347 for (it= _tree_vars_used_int[tree_index].begin();it!=_tree_vars_used_int[tree_index].end();it++)
348 _tree_vars_int[tree_index][*it]=-999;
350 for (it= _tree_vars_used_double[tree_index].begin();it!=_tree_vars_used_double[tree_index].end();it++)
351 _tree_vars_double[tree_index][*it] = -999;
353 for (it= _tree_vars_used_float[tree_index].begin();it!=_tree_vars_used_float[tree_index].end();it++)
354 _tree_vars_float[tree_index][*it] = -999;
357 for (it= _tree_vars_used_int_vector[tree_index].begin();it!=_tree_vars_used_int_vector[tree_index].end();it++)
358 _tree_vars_int_vector[tree_index][*it]->Ini(-999);
360 for (it= _tree_vars_used_float_vector[tree_index].begin();it!=_tree_vars_used_float_vector[tree_index].end();it++)
361 _tree_vars_float_vector[tree_index][*it]->Ini(-999);
363 for (it= _tree_vars_used_double_vector[tree_index].begin();it!=_tree_vars_used_double_vector[tree_index].end();it++)
364 _tree_vars_double_vector[tree_index][*it]->Ini(-999);
367 for (it= _tree_vars_used_int_matrix[tree_index].begin();it!=_tree_vars_used_int_matrix[tree_index].end();it++)
368 _tree_vars_int_matrix[tree_index][*it]->Ini(-999);
370 for (it= _tree_vars_used_float_matrix[tree_index].begin();it!=_tree_vars_used_float_matrix[tree_index].end();it++)
371 _tree_vars_float_matrix[tree_index][*it]->Ini(-999);
373 for (it= _tree_vars_used_double_matrix[tree_index].begin();it!=_tree_vars_used_double_matrix[tree_index].end();it++)
374 _tree_vars_double_matrix[tree_index][*it]->Ini(-999);
377 for (it= _tree_vars_used_int_3Dmatrix[tree_index].begin();it!=_tree_vars_used_int_3Dmatrix[tree_index].end();it++)
378 _tree_vars_int_3Dmatrix[tree_index][*it]->Ini(-999);
380 for (it= _tree_vars_used_float_3Dmatrix[tree_index].begin();it!=_tree_vars_used_float_3Dmatrix[tree_index].end();it++)
381 _tree_vars_float_3Dmatrix[tree_index][*it]->Ini(-999);
383 for (it= _tree_vars_used_double_3Dmatrix[tree_index].begin();it!=_tree_vars_used_double_3Dmatrix[tree_index].end();it++)
384 _tree_vars_double_3Dmatrix[tree_index][*it]->Ini(-999);
389 void OutputManager::Finalize(){
397 bool OutputManager::HasCounter(Int_t tree_index, Int_t counter_index){
401 return (_tree_vars_counter_size[tree_index][counter_index]!=-1);
405 bool OutputManager::CheckCounterType(Int_t counter_index, Int_t indx, Int_t var_index){
411 if(_tree_vars_counter_size[GetCurrentTree()][counter_index] > 0){
412 std::cout <<
"Counter '" << GetCounterName(counter_index) <<
"' has a fix size = " 413 << _tree_vars_counter_size[GetCurrentTree()][counter_index]
414 <<
". Index must be specified !!!" << std::endl;
419 if(_tree_vars_counter_size[GetCurrentTree()][counter_index] == 0){
420 std::cout <<
"Counter '" << GetCounterName(counter_index) <<
"' does not have a fix size. Index cannot be specified !!!" << std::endl;
423 if (indx > _tree_vars_counter_size[GetCurrentTree()][counter_index]){
424 std::cout <<
"Requested index " << indx <<
" for variable '" << GetVarName(var_index)
425 <<
"' bigger than fix counter size " << _tree_vars_counter_size[GetCurrentTree()][counter_index] <<
" !!!" << std::endl;
464 void OutputManager::ResizeCounter(Int_t counter_index, Int_t size){
467 for (UInt_t i= 0; i<_trees_indices.size();i++){
468 ResizeCounter(_trees_indices[i],counter_index,size);
473 void OutputManager::ResizeCounter(Int_t tree_index, Int_t counter_index, Int_t size){
477 if(!HasCounter(tree_index, counter_index)){
478 std::cout <<
"Counter '" << counter_index <<
"' does not exist !!!" << std::endl;
483 _tree_vars_counter_size[tree_index][counter_index]=size;
485 _tree_vars_counter[tree_index][counter_index]=size;
488 InitializeCounter(tree_index, counter_index);
492 void OutputManager::DeleteVar(Int_t tree_index, Int_t index){
569 if (std::find(_tree_vars_all_vars[tree_index].begin(), _tree_vars_all_vars[tree_index].end(), var_name) != _tree_vars_all_vars[tree_index].end()) {
570 std::cerr <<
"ERROR: The tree '" << _trees[tree_index]->GetName() <<
"' already contains a variable called '" << var_name <<
"' - please call your variable something else." << std::endl;
571 std::cerr <<
"Program will now exit, to save you from having to solve a nasty bug later..." << std::endl;
575 if (_tree_vars_all_vars[tree_index][var_index]!=
"") {
576 std::cerr <<
"ERROR: The tree '" << _trees[tree_index]->GetName() <<
"' already contains a variable with index " << var_index
577 <<
" and a different name '" << GetVarName(tree_index, var_index)
578 <<
"' - please use a different index for variable '" << var_name <<
"'" << std::endl;
579 std::cerr <<
"Program will now exit, to save you from having to solve a nasty bug later..." << std::endl;
583 _tree_vars_all_vars[tree_index][var_index]=var_name;
589 void OutputManager::InitializeCounter(Int_t counter_index){
592 for (UInt_t i= 0; i<_trees_indices.size();i++){
593 InitializeCounter(_trees_indices[i], counter_index);
598 void OutputManager::InitializeCounter(Int_t tree_index, Int_t counter_index){
601 if (_tree_vars_counter_size[tree_index][counter_index] == -1)
return;
604 if (_tree_vars_counter_size[tree_index][counter_index] > 0)
return;
607 _tree_vars_counter[tree_index][counter_index]=0;
612 void OutputManager::InitializeVar(Int_t index, Double_t ini){
617 for (UInt_t i= 0; i<_trees_indices.size();i++){
618 Int_t tree_index = _trees_indices[i];
619 if (_tree_vars_int[tree_index][index]!=-1){
620 _tree_vars_int[tree_index][index]=(Int_t)ini;
622 else if (_tree_vars_float[tree_index][index]!=-1){
623 _tree_vars_float[tree_index][index]=(Float_t)ini;
625 else if (_tree_vars_double[tree_index][index]!=-1){
626 _tree_vars_double[tree_index][index]=(Double_t)ini;
632 void OutputManager::InitializeVectorVar(Int_t index, Double_t ini){
669 void OutputManager::InitializeMatrixVar(Int_t index, Double_t ini){
699 void OutputManager::InitializeAnalysisVar(Int_t index, Double_t ini){
702 InitializeVectorVar(index,ini);
706 void OutputManager::InitializeAnalysisVectorVar(Int_t index, Double_t ini){
709 InitializeMatrixVar(index,ini);
719 GetTree(tree_index)->Fill();
727 if (_file)
delete _file;
729 _file =
new TFile(file.c_str(),
"NEW");
731 return !_file->IsZombie();
747 _file =
new TFile(file.c_str(),
"NEW");
748 GetTree(tree_name.c_str())->
Write();
757 _file =
new TFile(file.c_str(),
"NEW");
759 for (UInt_t i= 0; i<_trees_indices.size();i++){
760 GetTree(_trees_indices[i])->Write();
766 std::string OutputManager::GetString(
int a){
769 std::stringstream st;
776 std::string OutputManager::GetSize(
const std::string& counter_name,
unsigned int size){
779 std::string ssize=counter_name;
781 ssize = GetString(size);
787 void OutputManager::FillMicroTrees(){
791 FillVar(NTOYS, (Int_t)GetNToys());
805 Float_t w = 1./GetNToys();
806 for (UInt_t i=0;i<GetNToys();i++)
807 FillVectorVar(toy_weight, w, i);
818 if(HasCounter(tree_index, NTOYS))
819 ResizeCounter(tree_index, NTOYS,nana);
821 AddCounter(tree_index,NTOYS,
"NTOYS",nana);
824 DeleteVar(tree_index,toy_index);
825 DeleteVar(tree_index,toy_weight);
828 AddToyVar(tree_index,toy_index,
"toy_index" ,
"I",
"Toy experiment index");
829 AddToyVar(tree_index,toy_weight,
"toy_weight",
"F",
"Total toy experiment weight");
837 if (_single_tree_fill==-1){
839 for (UInt_t i= 0; i<_trees_indices.size();i++){
840 Int_t tree_index = _trees_indices[i];
841 if (IsSpecialTree(tree_index))
continue;
842 AddVectorVar(tree_index, index, name, type,doc, NTOYS,
"NTOYS", GetNToys(tree_index));
846 AddVectorVar(_single_tree_fill, index, name, type,doc, NTOYS,
"NTOYS", GetNToys(_single_tree_fill));
851 void OutputManager::AddToyVar(Int_t tree_index, Int_t index,
const std::string& name,
const std::string& type,
const std::string& docstring){
854 AddVectorVar(tree_index,index, name, type,docstring, NTOYS,
"NTOYS",GetNToys(tree_index));
861 if (_single_tree_fill==-1){
863 for (UInt_t i= 0; i<_trees_indices.size();i++){
864 Int_t tree_index = _trees_indices[i];
865 if (IsSpecialTree(tree_index))
continue;
866 AddMatrixVar(tree_index, index, name, type,doc, NTOYS,
"NTOYS",GetNToys(tree_index), size2);
870 AddMatrixVar(_single_tree_fill, index, name, type,doc, NTOYS,
"NTOYS",GetNToys(_single_tree_fill), size2);
878 AddMatrixVar(tree_index, index, name, type,docstring, NTOYS,
"NTOYS",GetNToys(tree_index),size);
885 if (_single_tree_fill==-1){
887 for (UInt_t i= 0; i<_trees_indices.size();i++){
888 Int_t tree_index = _trees_indices[i];
889 if (IsSpecialTree(tree_index))
continue;
890 Add3DMatrixVar(tree_index, index, name, type,doc, NTOYS,
"NTOYS",GetNToys(tree_index), size2, size3);
894 Add3DMatrixVar(_single_tree_fill, index, name, type,doc, NTOYS,
"NTOYS",GetNToys(_single_tree_fill), size2, size3);
899 void OutputManager::AddToyMatrixVar(Int_t tree_index, Int_t index,
const std::string& name,
const std::string& type,
const std::string& docstring, Int_t size2, Int_t size3){
902 Add3DMatrixVar(tree_index, index, name, type,docstring, NTOYS,
"NTOYS",GetNToys(tree_index),size2, size3);
907 void OutputManager::AddVar(Int_t index,
const std::string& name,
const std::string& type,
const std::string& doc,
double ini){
910 if (_single_tree_fill==-1){
912 for (UInt_t i= 0; i<_trees_indices.size();i++){
913 Int_t tree_index = _trees_indices[i];
914 if (IsSpecialTree(tree_index))
continue;
915 AddVar(tree_index, index, name, type,doc, ini);
919 AddVar(_single_tree_fill, index, name, type,doc, ini);
924 void OutputManager::AddVar(Int_t tree_index, Int_t index,
const std::string& name,
const std::string& type,
const std::string& doc,
double ini){
927 ValidateVarNameAndIndex(tree_index,index,name);
930 _tree_vars_int[tree_index][index]=ini;
931 _tree_vars_used_int[tree_index].push_back(index);
932 _tree_vars_exist_int[tree_index][index]=
true;
933 _trees[tree_index]->Branch(name.c_str(), &_tree_vars_int[tree_index][index], (name+
"/"+type).c_str());
934 _trees[tree_index]->SetBranchAddress(name.c_str(), &_tree_vars_int[tree_index][index]);
937 _tree_vars_float[tree_index][index]=ini;
938 _tree_vars_used_float[tree_index].push_back(index);
939 _tree_vars_exist_float[tree_index][index]=
true;
940 _trees[tree_index]->Branch(name.c_str(), &_tree_vars_float[tree_index][index], (name+
"/"+type).c_str());
941 _trees[tree_index]->SetBranchAddress(name.c_str(), &_tree_vars_float[tree_index][index]);
944 _tree_vars_double[tree_index][index]=ini;
945 _tree_vars_used_double[tree_index].push_back(index);
946 _tree_vars_exist_double[tree_index][index]=
true;
947 _trees[tree_index]->Branch(name.c_str(), &_tree_vars_double[tree_index][index], (name+
"/"+type).c_str());
948 _trees[tree_index]->SetBranchAddress(name.c_str(), &_tree_vars_double[tree_index][index]);
951 _tree_vars_char[tree_index][index].Fill(
"");
952 _tree_vars_used_char[tree_index].push_back(index);
953 _tree_vars_exist_char[tree_index][index]=
true;
954 _trees[tree_index]->Branch(name.c_str(), &_tree_vars_char[tree_index][index], (name+
"/"+type).c_str());
955 _trees[tree_index]->SetBranchAddress(name.c_str(), &_tree_vars_char[tree_index][index]);
958 docstrings().DocumentVar(GetTreeName(tree_index), name, doc, type, 0,
"", 0,
"", 0,
"");
962 void OutputManager::AddVectorVar(Int_t index,
const std::string& name,
const std::string& type,
const std::string& doc, Int_t counter_index,
const std::string& counter_name, Int_t size){
965 if (_single_tree_fill==-1){
967 for (UInt_t i= 0; i<_trees_indices.size();i++){
968 Int_t tree_index = _trees_indices[i];
969 if (IsSpecialTree(tree_index))
continue;
970 AddVectorVar(tree_index, index, name, type,doc, counter_index, counter_name, size);
974 AddVectorVar(_single_tree_fill, index, name, type,doc, counter_index, counter_name, size);
980 void OutputManager::AddVectorVar(Int_t tree_index, Int_t index,
const std::string& name,
const std::string& type,
const std::string& doc, Int_t counter_index,
const std::string& counter_name, Int_t size){
983 ValidateVarNameAndIndex(tree_index,index,name);
985 std::string ssize= GetSize(counter_name,size);
987 AddCounter(tree_index,index,counter_index,counter_name, size);
990 _tree_vars_int_vector[tree_index][index]=
new int_vector(abs(size));
991 _tree_vars_used_int_vector[tree_index].push_back(index);
992 _tree_vars_exist_int_vector[tree_index][index]=
true;
993 _trees[tree_index]->Branch(name.c_str(), _tree_vars_int_vector[tree_index][index]->GetAddress(), (name+
"["+ssize+
"]/I").c_str());
994 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_int_vector[tree_index][index]->GetAddress());
997 _tree_vars_float_vector[tree_index][index]=
new float_vector(abs(size));
998 _tree_vars_used_float_vector[tree_index].push_back(index);
999 _tree_vars_exist_float_vector[tree_index][index]=
true;
1000 _trees[tree_index]->Branch(name.c_str(), _tree_vars_float_vector[tree_index][index]->GetAddress(), (name+
"["+ssize+
"]/F").c_str());
1001 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_float_vector[tree_index][index]->GetAddress());
1003 else if (type==
"D"){
1004 _tree_vars_double_vector[tree_index][index]=
new double_vector(abs(size));
1005 _tree_vars_used_double_vector[tree_index].push_back(index);
1006 _tree_vars_exist_double_vector[tree_index][index]=
true;
1007 _trees[tree_index]->Branch(name.c_str(), _tree_vars_double_vector[tree_index][index]->GetAddress(), (name+
"["+ssize+
"]/D").c_str());
1008 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_double_vector[tree_index][index]->GetAddress());
1010 else if (type==
"C"){
1011 _tree_vars_char_vector[tree_index][index]=
new char_vector(abs(size));
1012 _tree_vars_used_char_vector[tree_index].push_back(index);
1013 _tree_vars_exist_char_vector[tree_index][index]=
true;
1014 _trees[tree_index]->Branch(name.c_str(), _tree_vars_char_vector[tree_index][index]->GetAddress());
1018 docstrings().DocumentVar(GetTreeName(tree_index), name, doc, type, size, counter_name, 0,
"", 0,
"");
1025 if (_single_tree_fill==-1){
1027 for (UInt_t i= 0; i<_trees_indices.size();i++){
1028 Int_t tree_index = _trees_indices[i];
1029 if (IsSpecialTree(tree_index))
continue;
1030 AddVectorVar(tree_index, index, name, type,doc, size);
1034 AddVectorVar(_single_tree_fill, index, name, type,doc, size);
1039 void OutputManager::AddVectorVar(Int_t tree_index, Int_t index,
const std::string& name,
const std::string& type,
const std::string& doc,
const int size){
1042 ValidateVarNameAndIndex(tree_index,index,name);
1044 std::string ssize= GetSize(
"",size);
1046 AddCounter(tree_index,index,-1,
"", size);
1049 _tree_vars_int_vector[tree_index][index]=
new int_vector(abs(size));
1050 _tree_vars_used_int_vector[tree_index].push_back(index);
1051 _tree_vars_exist_int_vector[tree_index][index]=
true;
1052 _trees[tree_index]->Branch(name.c_str(), _tree_vars_int_vector[tree_index][index]->GetAddress(), (name+
"["+ssize+
"]/I").c_str());
1053 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_int_vector[tree_index][index]->GetAddress());
1055 else if (type==
"F"){
1056 _tree_vars_float_vector[tree_index][index]=
new float_vector(abs(size));
1057 _tree_vars_used_float_vector[tree_index].push_back(index);
1058 _tree_vars_exist_float_vector[tree_index][index]=
true;
1059 _trees[tree_index]->Branch(name.c_str(), _tree_vars_float_vector[tree_index][index]->GetAddress(), (name+
"["+ssize+
"]/F").c_str());
1060 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_float_vector[tree_index][index]->GetAddress());
1062 else if (type==
"D"){
1063 _tree_vars_double_vector[tree_index][index]=
new double_vector(abs(size));
1064 _tree_vars_used_double_vector[tree_index].push_back(index);
1065 _tree_vars_exist_double_vector[tree_index][index]=
true;
1066 _trees[tree_index]->Branch(name.c_str(), _tree_vars_double_vector[tree_index][index]->GetAddress(), (name+
"["+ssize+
"]/D").c_str());
1067 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_double_vector[tree_index][index]->GetAddress());
1069 else if (type==
"C"){
1070 _tree_vars_char_vector[tree_index][index]=
new char_vector(abs(size));
1071 _tree_vars_used_char_vector[tree_index].push_back(index);
1072 _tree_vars_exist_char_vector[tree_index][index]=
true;
1073 _trees[tree_index]->Branch(name.c_str(), _tree_vars_char_vector[tree_index][index]->GetAddress());
1077 docstrings().DocumentVar(GetTreeName(tree_index), name, doc, type, size,
"", 0,
"", 0,
"");
1081 void OutputManager::AddMatrixVar(Int_t index,
const std::string& name,
const std::string& type,
const std::string& doc, Int_t counter_index,
const std::string& counter_name, Int_t size1, Int_t size2){
1084 if (_single_tree_fill==-1){
1086 for (UInt_t i= 0; i<_trees_indices.size();i++){
1087 Int_t tree_index = _trees_indices[i];
1088 if (IsSpecialTree(tree_index))
continue;
1089 AddMatrixVar(tree_index, index, name, type,doc, counter_index, counter_name, size1, size2);
1093 AddMatrixVar(_single_tree_fill, index, name, type,doc, counter_index, counter_name, size1, size2);
1098 void OutputManager::AddMatrixVar(Int_t tree_index, Int_t index,
const std::string& name,
const std::string& type,
const std::string& docstring, Int_t counter_index,
const std::string& counter_name,
int size1,
int size2){
1101 ValidateVarNameAndIndex(tree_index,index,name);
1103 std::string ssize1= GetSize(counter_name,size1);
1104 std::string ssize2= GetSize(
"",size2);
1105 AddCounter(tree_index,index,counter_index,counter_name, size1);
1108 _tree_vars_int_matrix[tree_index][index]=
new int_matrix(abs(size1),size2);
1109 _tree_vars_used_int_matrix[tree_index].push_back(index);
1110 _tree_vars_exist_int_matrix[tree_index][index]=
true;
1111 _trees[tree_index]->Branch(name.c_str(), _tree_vars_int_matrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]/I").c_str());
1112 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_int_matrix[tree_index][index]->GetAddress());
1114 else if (type==
"D"){
1115 _tree_vars_double_matrix[tree_index][index]=
new double_matrix(abs(size1),size2);
1116 _tree_vars_used_double_matrix[tree_index].push_back(index);
1117 _tree_vars_exist_double_matrix[tree_index][index]=
true;
1118 _trees[tree_index]->Branch(name.c_str(), _tree_vars_double_matrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]/D").c_str());
1119 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_double_matrix[tree_index][index]->GetAddress());
1121 else if (type==
"F"){
1122 _tree_vars_float_matrix[tree_index][index]=
new float_matrix(abs(size1),size2);
1123 _tree_vars_used_float_matrix[tree_index].push_back(index);
1124 _tree_vars_exist_float_matrix[tree_index][index]=
true;
1125 _trees[tree_index]->Branch(name.c_str(), _tree_vars_float_matrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]/F").c_str());
1126 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_float_matrix[tree_index][index]->GetAddress());
1128 else if (type==
"C"){
1129 _tree_vars_char_matrix[tree_index][index]=
new char_matrix(abs(size1),size2);
1130 _tree_vars_used_char_matrix[tree_index].push_back(index);
1131 _tree_vars_exist_char_matrix[tree_index][index]=
true;
1132 _trees[tree_index]->Branch(name.c_str(), _tree_vars_char_matrix[tree_index][index]->GetAddress());
1133 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_char_matrix[tree_index][index]->GetAddress());
1136 docstrings().DocumentVar(GetTreeName(tree_index), name, docstring, type, size1, counter_name, size2,
"", 0,
"");
1143 if (_single_tree_fill==-1){
1145 for (UInt_t i= 0; i<_trees_indices.size();i++){
1146 Int_t tree_index = _trees_indices[i];
1147 if (IsSpecialTree(tree_index))
continue;
1148 AddMatrixVar(tree_index, index, name, type,doc, size1, size2);
1152 AddMatrixVar(_single_tree_fill, index, name, type,doc, size1, size2);
1157 void OutputManager::AddMatrixVar(Int_t tree_index, Int_t index,
const std::string& name,
const std::string& type,
const std::string& docstring,
int size1,
int size2){
1160 ValidateVarNameAndIndex(tree_index,index,name);
1162 std::string ssize1= GetSize(
"",size1);
1163 std::string ssize2= GetSize(
"",size2);
1164 AddCounter(tree_index,index,-1,
"", size1);
1167 _tree_vars_int_matrix[tree_index][index]=
new int_matrix(abs(size1),size2);
1168 _tree_vars_used_int_matrix[tree_index].push_back(index);
1169 _tree_vars_exist_int_matrix[tree_index][index]=
true;
1170 _trees[tree_index]->Branch(name.c_str(), _tree_vars_int_matrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]/I").c_str());
1171 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_int_matrix[tree_index][index]->GetAddress());
1173 else if (type==
"D"){
1174 _tree_vars_double_matrix[tree_index][index]=
new double_matrix(abs(size1),size2);
1175 _tree_vars_used_double_matrix[tree_index].push_back(index);
1176 _tree_vars_exist_double_matrix[tree_index][index]=
true;
1177 _trees[tree_index]->Branch(name.c_str(), _tree_vars_double_matrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]/D").c_str());
1178 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_double_matrix[tree_index][index]->GetAddress());
1180 else if (type==
"F"){
1181 _tree_vars_float_matrix[tree_index][index]=
new float_matrix(abs(size1),size2);
1182 _tree_vars_used_float_matrix[tree_index].push_back(index);
1183 _tree_vars_exist_float_matrix[tree_index][index]=
true;
1184 _trees[tree_index]->Branch(name.c_str(), _tree_vars_float_matrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]/F").c_str());
1185 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_float_matrix[tree_index][index]->GetAddress());
1187 else if (type==
"C"){
1188 _tree_vars_char_matrix[tree_index][index]=
new char_matrix(abs(size1),size2);
1189 _tree_vars_used_char_matrix[tree_index].push_back(index);
1190 _tree_vars_exist_char_matrix[tree_index][index]=
true;
1191 _trees[tree_index]->Branch(name.c_str(), _tree_vars_char_matrix[tree_index][index]->GetAddress());
1192 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_char_matrix[tree_index][index]->GetAddress());
1195 docstrings().DocumentVar(GetTreeName(tree_index), name, docstring, type, size1,
"", size2,
"", 0,
"");
1200 void OutputManager::Add3DMatrixVar(Int_t index,
const std::string& name,
const std::string& type,
const std::string& doc, Int_t counter_index,
const std::string& counter_name, Int_t size1, Int_t size2, Int_t size3){
1203 if (_single_tree_fill==-1){
1205 for (UInt_t i= 0; i<_trees_indices.size();i++){
1206 Int_t tree_index = _trees_indices[i];
1207 if (IsSpecialTree(tree_index))
continue;
1208 Add3DMatrixVar(tree_index, index, name, type,doc, counter_index, counter_name, size1, size2, size3);
1212 Add3DMatrixVar(_single_tree_fill, index, name, type,doc, counter_index, counter_name, size1, size2, size3);
1217 void OutputManager::Add3DMatrixVar(Int_t tree_index, Int_t index,
const std::string& name,
const std::string& type,
const std::string& docstring, Int_t counter_index,
const std::string& counter_name,
int size1,
int size2,
int size3){
1220 ValidateVarNameAndIndex(tree_index,index,name);
1222 std::string ssize1= GetSize(counter_name,size1);
1223 std::string ssize2= GetSize(
"",size2);
1224 std::string ssize3= GetSize(
"",size3);
1226 AddCounter(tree_index,index,counter_index,counter_name, size1);
1229 _tree_vars_int_3Dmatrix[tree_index][index]=
new int_3Dmatrix(abs(size1),size2,size3);
1230 _tree_vars_used_int_3Dmatrix[tree_index].push_back(index);
1231 _tree_vars_exist_int_3Dmatrix[tree_index][index]=
true;
1232 _trees[tree_index]->Branch(name.c_str(), _tree_vars_int_3Dmatrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]["+ssize3+
"]/I").c_str());
1233 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_int_3Dmatrix[tree_index][index]->GetAddress());
1235 else if (type==
"D"){
1236 _tree_vars_double_3Dmatrix[tree_index][index]=
new double_3Dmatrix(abs(size1),size2,size3);
1237 _tree_vars_used_double_3Dmatrix[tree_index].push_back(index);
1238 _tree_vars_exist_double_3Dmatrix[tree_index][index]=
true;
1239 _trees[tree_index]->Branch(name.c_str(), _tree_vars_double_3Dmatrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]["+ssize3+
"]/D").c_str());
1240 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_double_3Dmatrix[tree_index][index]->GetAddress());
1242 else if (type==
"F"){
1243 _tree_vars_float_3Dmatrix[tree_index][index]=
new float_3Dmatrix(abs(size1),size2,size3);
1244 _tree_vars_used_float_3Dmatrix[tree_index].push_back(index);
1245 _tree_vars_exist_float_3Dmatrix[tree_index][index]=
true;
1246 _trees[tree_index]->Branch(name.c_str(), _tree_vars_float_3Dmatrix[tree_index][index]->GetAddress(), (name+
"["+ssize1+
"]["+ssize2+
"]["+ssize3+
"]/F").c_str());
1247 _trees[tree_index]->SetBranchAddress(name.c_str(), _tree_vars_float_3Dmatrix[tree_index][index]->GetAddress());
1250 docstrings().DocumentVar(GetTreeName(tree_index), name, docstring, type, size1, counter_name, size2,
"", size3,
"");
1254 void OutputManager::AddCounter(Int_t tree_index, Int_t counter_index,
const std::string& counter_name,
int size){
1257 if (HasCounter(tree_index, counter_index))
return;
1260 _tree_vars_counter[tree_index][counter_index]=0;
1261 _tree_vars_counter_size[tree_index][counter_index]=0;
1266 _tree_vars_counter[tree_index][counter_index]=size;
1267 _tree_vars_counter_size[tree_index][counter_index]=size;
1270 _trees[tree_index]->Branch(counter_name.c_str(), &_tree_vars_counter[tree_index][counter_index], (counter_name+
"/I").c_str());
1271 _trees[tree_index]->SetBranchAddress(counter_name.c_str(), &_tree_vars_counter[tree_index][counter_index]);
1274 _tree_vars_all_counters[tree_index][counter_index]=counter_name;
1276 _tree_vars_used_counter[tree_index].push_back(counter_index);
1278 _tree_vars_exist_int[tree_index][counter_index]=
true;
1283 void OutputManager::AddCounter(Int_t tree_index, Int_t index, Int_t counter_index,
const std::string& counter_name,
int size){
1285 if (counter_index==-1){
1287 _tree_vars_counter[tree_index][index]=0;
1288 _tree_vars_counter_size[tree_index][index]=0;
1292 _tree_vars_counter[tree_index][index]=size;
1293 _tree_vars_counter_size[tree_index][index]=size;
1295 _link_var_to_counter[tree_index][index]= index;
1298 _link_var_to_counter[tree_index][index]= counter_index;
1299 AddCounter(tree_index,counter_index,counter_name,size);
1305 bool OutputManager::GetFirstIndexFromCounter(Int_t index, Int_t& indx1){
1309 Int_t counter_index = GetCounterIndexForVar(index);
1311 if (!CheckCounterType(counter_index, indx1, index))
return false;
1315 indx1 = _tree_vars_counter[GetCurrentTree()][counter_index];
1324 CheckVariableType(index,
"",
"Float", _tree_vars_exist_float[GetCurrentTree()][index]);
1325 _tree_vars_float[GetCurrentTree()][index]= var;
1333 CheckVariableType(index,
"",
"Double", _tree_vars_exist_double[GetCurrentTree()][index]);
1334 _tree_vars_double[GetCurrentTree()][index]= var;
1341 CheckVariableType(index,
"",
"Int", _tree_vars_exist_int[GetCurrentTree()][index]);
1342 _tree_vars_int[GetCurrentTree()][index]= var;
1349 CheckVariableType(index,
"",
"Char", _tree_vars_exist_char[GetCurrentTree()][index]);
1350 _tree_vars_char[GetCurrentTree()][index].Fill(var);
1357 return _tree_vars_float[GetCurrentTree()][index];
1361 Double_t OutputManager::GetVarValueD(Int_t index){
1364 return _tree_vars_double[GetCurrentTree()][index];
1368 Int_t OutputManager::GetVarValueI(Int_t index){
1371 return _tree_vars_int[GetCurrentTree()][index];
1378 CheckVariableType(index,
"Vector",
"Int", _tree_vars_exist_int_vector[GetCurrentTree()][index]);
1380 if (!GetFirstIndexFromCounter(index,indx))
return;
1384 (_tree_vars_int_vector[GetCurrentTree()][index])->Fill(indx,var);
1386 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside vector size. Index was: " << indx << std::endl;
1394 CheckVariableType(index,
"Vector",
"Float", _tree_vars_exist_float_vector[GetCurrentTree()][index]);
1396 if (!GetFirstIndexFromCounter(index,indx))
return;
1400 (_tree_vars_float_vector[GetCurrentTree()][index])->Fill(indx,var);
1402 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside vector size. Index was: " << indx << std::endl;
1410 CheckVariableType(index,
"Vector",
"Double", _tree_vars_exist_double_vector[GetCurrentTree()][index]);
1412 if (!GetFirstIndexFromCounter(index,indx))
return;
1416 (_tree_vars_double_vector[GetCurrentTree()][index])->Fill(indx,var);
1418 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside vector size. Index was: " << indx << std::endl;
1426 CheckVariableType(index,
"Vector",
"Char", _tree_vars_exist_char_vector[GetCurrentTree()][index]);
1428 if (!GetFirstIndexFromCounter(index,indx))
return;
1432 (_tree_vars_char_vector[GetCurrentTree()][index])->Fill(indx,var.c_str());
1434 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside vector size. Index was: " << indx << std::endl;
1442 CheckVariableType(index,
"Matrix",
"Int", _tree_vars_exist_int_matrix[GetCurrentTree()][index]);
1444 if (!GetFirstIndexFromCounter(index,indx1))
return;
1448 (_tree_vars_int_matrix[GetCurrentTree()][index])->Fill(indx1,indx2,var);
1450 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside matrix size. Indices were: " << indx1 <<
", " << indx2 << std::endl;
1458 CheckVariableType(index,
"Matrix",
"Float", _tree_vars_exist_float_matrix[GetCurrentTree()][index]);
1460 if (!GetFirstIndexFromCounter(index,indx1))
return;
1464 (_tree_vars_float_matrix[GetCurrentTree()][index])->Fill(indx1,indx2,var);
1466 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside matrix size. Indices were: " << indx1 <<
", " << indx2 << std::endl;
1474 CheckVariableType(index,
"Matrix",
"Double", _tree_vars_exist_double_matrix[GetCurrentTree()][index]);
1476 if (!GetFirstIndexFromCounter(index,indx1))
return;
1480 (_tree_vars_double_matrix[GetCurrentTree()][index])->Fill(indx1,indx2,var);
1482 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside matrix size. Indices were: " << indx1 <<
", " << indx2 << std::endl;
1490 CheckVariableType(index,
"3DMatrix",
"Int", _tree_vars_exist_int_3Dmatrix[GetCurrentTree()][index]);
1492 if (!GetFirstIndexFromCounter(index,indx1))
return;
1496 (_tree_vars_int_3Dmatrix[GetCurrentTree()][index])->Fill(indx1,indx2,indx3,var);
1498 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside 3D matrix size. Indices were: " << indx1 <<
", " << indx2 <<
", " << indx3 << std::endl;
1506 CheckVariableType(index,
"3DMatrix",
"Float", _tree_vars_exist_float_3Dmatrix[GetCurrentTree()][index]);
1508 if (!GetFirstIndexFromCounter(index,indx1))
return;
1512 (_tree_vars_float_3Dmatrix[GetCurrentTree()][index])->Fill(indx1,indx2,indx3,var);
1514 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside 3D matrix size. Indices were: " << indx1 <<
", " << indx2 <<
", " << indx3 << std::endl;
1522 CheckVariableType(index,
"3DMatrix",
"Double", _tree_vars_exist_double_3Dmatrix[GetCurrentTree()][index]);
1524 if (!GetFirstIndexFromCounter(index,indx1))
return;
1528 (_tree_vars_double_3Dmatrix[GetCurrentTree()][index])->Fill(indx1,indx2,indx3,var);
1530 std::cout <<
"WARNING: Tried to fill variable " << GetVarName(index) <<
" outside 3D matrix size. Indices were: " << indx1 <<
", " << indx2 <<
", " << indx3 << std::endl;
1538 FillVectorVar(index, var, GetToyIndex());
1544 FillVectorVar(index, var, GetToyIndex());
1550 FillVectorVar(index, var, GetToyIndex());
1556 FillMatrixVar(index,var, GetToyIndex(),comp);
1563 FillMatrixVar(index,var, GetToyIndex(),comp);
1569 FillMatrixVar(index,var, GetToyIndex(),comp);
1575 Fill3DMatrixVar(index,var, GetToyIndex(),comp1,comp2);
1582 Fill3DMatrixVar(index,var, GetToyIndex(),comp1,comp2);
1588 Fill3DMatrixVar(index,var, GetToyIndex(),comp1,comp2);
1592 void OutputManager::CheckVariableType(Int_t index,
const std::string& dim,
const std::string& type, Bool_t exist){
1596 std::cout <<
"ERROR in OutputManager::Fill" << dim <<
"Var(). " << GetVarName(index) <<
" is not a " << type <<
" variable. !!!!" << std::endl;
1597 std::cout <<
"Please check the call to Fill" << dim <<
"Var(" << GetVarName(index) <<
", A) in your analysis algorithm and cast the A input value if needed !!!!" << std::endl;
void AddVar(Int_t index, const std::string &name, const std::string &type, const std::string &doc, double ini=-9999)
Add a single variable to all trees.
Float_t GetVarValueF(Int_t index)
Get the value of a var already filled (so to be used in another package)
void AddTreeWithName(Int_t tree_index, const std::string &tree_name, TTree *tree=NULL)
Add a tree provided its index and name.
void AddToyVar(Int_t index, const std::string &name, const std::string &type, const std::string &docstring)
Add a single analysis variable to all trees.
void FillVectorVar(Int_t index, Float_t var, Int_t indx=-1)
Fill a vector variable.
void FillToyVectorVar(Int_t index, Int_t var, Int_t comp)
Fill a vector analysis variable.
Exception for if we try to fill outside the size of float_vector etc.
void FillTree()
Fill the current tree.
bool ValidateVarNameAndIndex(Int_t tree_index, Int_t var_index, const std::string &var_name)
void Fill3DMatrixVar(Int_t index, Float_t var, Int_t indx1, Int_t indx2, Int_t indx3)
Fill a 3D matrix variable.
void FillToyMatrixVar(Int_t index, Int_t var, Int_t comp1, Int_t comp2)
Fill a matrix analysis variable.
void WriteTrees(const std::string &file)
Write all trees into a file.
void SetNToys(Int_t tree_index, int ntoys)
Sets and gets the number of toy experiments for a given configuration.
void FillToyVar(Int_t index, Int_t var)
Fill a single analysis variable.
void FillVar(Int_t index, Float_t var)
Fill a single variable.
void WriteTree(const std::string &file, const std::string &conf)
Write a specific tree into a file.
void AddMatrixVar(Int_t index, const std::string &name, const std::string &type, const std::string &doc, Int_t counter_index, const std::string &counter_name, int size1=-MAXVECTORSIZE, int size2=-1)
Add a matrix variable to all trees.
void CloseOutputFile()
close the output file
void AddToyMatrixVar(Int_t index, const std::string &name, const std::string &type, const std::string &docstring, int ncomp1, int ncomp2)
Add a matrix analysis variable to all trees.
bool OpenOutputFile(const std::string &file)
open the output file
void AddVectorVar(Int_t index, const std::string &name, const std::string &type, const std::string &doc, Int_t counter_index, const std::string &counter_name, Int_t size=-MAXVECTORSIZE)
Add a vector variable to all trees.
void AddToyVectorVar(Int_t index, const std::string &name, const std::string &type, const std::string &docstring, int ncomp)
Add a vector analysis variable to all trees.
void Write()
Write histograms of the memory usage to the output file.
void FillMatrixVar(Int_t index, Float_t var, Int_t indx1, Int_t indx2)
Fill a matrix variable.
bool IsSpecialTree(Int_t tree_index)
void Add3DMatrixVar(Int_t index, const std::string &name, const std::string &type, const std::string &doc, Int_t counter_index, const std::string &counter_name, int size1=-MAXVECTORSIZE, int size2=-1, int size3=-1)
Add a 3D matrix variable to all trees.