Jpp  15.0.1-rc.2-highQE
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JPlotZebraMantis.cc
Go to the documentation of this file.
1 #include <string>
2 #include <iostream>
3 #include <iomanip>
4 #include <vector>
5 
6 #include "TROOT.h"
7 #include "TFile.h"
8 #include "TH2D.h"
9 
11 #include "JDetector/JDetector.hh"
17 #include "JROOT/JManager.hh"
18 #include "JGizmo/JGizmoToolkit.hh"
19 #include "JTools/JQuantile.hh"
20 #include "JROOT/JRootToolkit.hh"
21 
22 #include "Jeep/JPrint.hh"
23 #include "Jeep/JParser.hh"
24 #include "Jeep/JMessage.hh"
25 
28 
29 /*
30  * Gets list of keys in a ROOT TDirectory and stores it on a vector.
31  *
32  * \param dir The ROOT directory
33  * \param v Vector to store the list of keys.
34  */
35 inline void readDir(TDirectory* dir,std::vector<TString> &v){
36 
37  TIter iter(dir->GetListOfKeys());
38 
39  for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
40 
41  if (key->IsFolder()){
42 
43  dir->cd(key->GetName());
44  TDirectory *subdir = gDirectory;
45  readDir(subdir,v);
46  dir->cd();
47  }else{
48 
49  const TString fullPath(dir->GetPath());
50  TObjArray* t = fullPath.Tokenize(":");
51  v.push_back(TString(((TObjString *)(t->At(1)))->String() + "/" + (TString)key->GetName()));
52  }
53  }
54 }
55 
56 /**
57  * \file
58  * Auxiliary application to plot Run by Run comparisons.
59  *
60  * \author rgruiz
61  */
62 
63 int main(int argc, char **argv)
64 {
65  using namespace std;
66  using namespace JPP;
67  using namespace KM3NETDAQ;
68 
69  vector<string> inputFile;
70  string steeringFile;
71  string outputFileRoot;
72  string outputFileTxt;
73  string regexp;
74  int labelInterval;
75  int debug;
76 
77  try {
78 
79  JParser<> zap("Auxiliary application to plot PMT parameters.");
80 
81  zap['f'] = make_field(inputFile, "JCompare output files");
82  zap['s'] = make_field(steeringFile, "JCompare steering file");
83  zap['o'] = make_field(outputFileRoot,"output file.") = "out.root";
84  zap['t'] = make_field(outputFileTxt, "output file.") = "out.txt";
85  zap['r'] = make_field(regexp, "regular expresion to extract bin labels for the x-axis") = " ";
86  zap['L'] = make_field(labelInterval, "interval between x-axis bins for which labels are shown") = 1;
87  zap['d'] = make_field(debug, "debug") = 0;
88 
89  zap(argc, argv);
90  }
91  catch(const exception &error) {
92  FATAL(error.what() << endl);
93  }
94 
95  const int NUMBER_OF_FILES = inputFile.size();
96 
97  JManager<string, TH1D> manager (new TH1D("%", NULL, NUMBER_OF_FILES, -0.5, NUMBER_OF_FILES - 0.5));
98  JManager<string, TH1D> summaryManager(new TH1D("%", NULL, NUMBER_OF_FILES, -0.5, NUMBER_OF_FILES - 0.5));
99 
100  if (regexp != " "){
101 
102  const int n = (NUMBER_OF_FILES < labelInterval) ? 1 : labelInterval;
103 
104  const TPRegexp buffer(regexp);
105 
106  for (int i = 0; i != NUMBER_OF_FILES; ++i){
107 
108  if(i%n == 0){
109  manager->GetXaxis()->SetBinLabel(i+1 , parse(buffer , TString(inputFile[i].c_str())));
110  summaryManager->GetXaxis()->SetBinLabel(i+1 , parse(buffer , TString(inputFile[i].c_str())));
111  }else{
112  manager->GetXaxis()->SetBinLabel(i+1 , " ");
113  summaryManager->GetXaxis()->SetBinLabel(i+1 , " ");
114  }
115  }
116  }
117 
118  int c = 0;
119 
121 
122  for (vector<string>::const_iterator file = inputFile.begin() ; file != inputFile.end() ; ++file){
123 
124  if (TFile::Open((*file).c_str()) == NULL) {
125  ERROR("File: " << *file << " not opened." << endl);
126  c++;
127  continue;
128  }else{
129  TFile* f = TFile::Open((*file).c_str());
130 
131  vector<TString> keys;
132  readDir(f,keys);
133 
134  for (vector<TString>::const_iterator key = keys.begin() ; key != keys.end() ; ++key) {
135 
136  TObject* o = (TObject*)f -> Get(*key);
137 
138  if(!(dynamic_cast<TH1*>(o) == NULL) || !(dynamic_cast<TH2*>(o) == NULL)){
139 
140  istringstream iss(o->GetTitle());
141  JResultTitle t;
142  t.read(iss);
143 
144  quantiles[MAKE_STRING(t.parameter)][c].put(t.value);
145  summaryManager[MAKE_STRING(t.parameter)]->Fill(c , t.value);
146  manager[MAKE_STRING((*key).Data())]->Fill(c , t.value);
147  manager[MAKE_STRING((*key).Data())]->GetYaxis()->SetTitle(t.parameter.c_str());
148  }
149  }
150  }
151  c++;
152  }
153 
154  TFile* out = new TFile(outputFileRoot.c_str(),"recreate");
155  out->cd();
156 
159 
160  ifstream infile(steeringFile);
161  vector<string> tests;
162 
163  string line;
164  string name;
165  int id;
166  while (getline(infile, line)) {
167  while (line.length()==0)
168  getline(infile, line);
169  tests.push_back(line);
170  istringstream iss(line);
171  iss >> name >> id;
172  map[d[id]->getTestName()]++;
173  }
174 
175  ofstream summary;
176  summary.open (outputFileTxt);
177 
178  for (typename JManager < string , TH1D >::const_iterator i = summaryManager.begin() ; i != summaryManager.end() ; ++i){
179  string name = MAKE_STRING(i->second->GetName());
180  int n = map[name];
181  i->second->Scale(1./n);
182  summary << "File_ID\t" << i->first << "\t" << i->first + "(ERROR)\t" << endl;
183  cout << "File_ID\t" << i->first << "\t" << i->first + "(ERROR)\t" << endl;
184 
185  for (int bin=1 ; bin<i->second->GetNbinsX() ; ++bin){
186  i->second->SetBinError(bin,quantiles[name][bin].getSTDev()/sqrt(n));
187  summary << i->second->GetXaxis()->GetBinLabel(bin) << "\t" << i->second->GetBinContent(bin) << "\t" << i->second->GetBinError(bin) << endl;
188  cout << i->second->GetXaxis()->GetBinLabel(bin) << "\t" << i->second->GetBinContent(bin) << "\t" << i->second->GetBinError(bin) << endl;
189  }
190  // for (int bin=0 ; bin<i->second->GetNbinsX() ; ++bin){i->second->SetBinError(bin,0.0);cout << quantiles[name][bin].getCount() << endl;}
191  i->second->Write();
192  }
193 
194  for (typename JManager < string , TH1D >::const_iterator i = manager.begin() ; i != manager.end() ; ++i){
195 
196  string fullpath = MAKE_STRING(i->second->GetName());
197  string path = MAKE_STRING(fullpath.substr (fullpath.find ('/') + 1 , fullpath.rfind ('/')));
198 
199  if (out->GetDirectory(path.c_str()) == 0) out->mkdir(path.c_str());
200  out->cd(path.c_str());
201 
202  i -> second -> SetName(MAKE_CSTRING(fullpath.substr (fullpath.rfind ('/') + 1)));
203 
204  for (int bin=0 ; bin<i->second->GetNbinsX()+1 ; ++bin){i->second->SetBinError(bin,0.0);}
205  i -> second -> Write();
206  }
207 
208  out->Close();
209 }
Utility class to parse command line options.
Definition: JParser.hh:1500
bool read(const JEquation &equation)
Read equation.
Definition: JProperties.hh:677
int main(int argc, char *argv[])
Definition: Main.cc:15
then JMuonPostfit f
Class dedicated to standardize the title of the graphical objects produced by the JTest_t() derived c...
Definition: JResultTitle.hh:22
then echo Enter input within $TIMEOUT_S seconds echo n User name
Definition: JCookie.sh:42
Definition: JRoot.hh:19
#define MAKE_CSTRING(A)
Make C-string.
Definition: JPrint.hh:151
Dynamic ROOT object management.
Data structure for detector geometry and calibration.
#define MAKE_STRING(A)
Make string.
Definition: JPrint.hh:142
boost::property_tree::ptree parse(std::string str)
Definition: configure.hh:24
const int n
Definition: JPolint.hh:660
$WORKDIR driver txt done cat $WORKDIR driver txt<< EOFprocess ${DATAFILTER}$FILTER_HOST csh-c '(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&JDataFilter-H\$SERVER\$-M\$LOGGER\$-d $DEBUG-u ${DATAFILTER}-P $PORT</dev/null > &/dev/null)&';process ${DATAWRITER}$WRITER_HOST csh-c '(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&JDataWriter-H\$SERVER\$-M\$LOGGER\$-d $DEBUG-u ${DATAWRITER}</dev/null > &/dev/null)&';print enterevent ev_init{RC_CMD}event ev_reset{RC_CMD}event ev_init{RC_CMD}event ev_configure{RC_DFLTR%<$WORKDIR/ev_configure_datafilter.txt > RC_DOM<$WORKDIR/ev_configure_domsimulator.txt > RC_DWRT path
Detector specific mapping between logical positions and readout channels of PMTs in optical modules...
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
Definition: JManager.hh:43
I/O formatting auxiliaries.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
#define ERROR(A)
Definition: JMessage.hh:66
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Definition: JString.hh:478
do $DIR JTransitTime o
Definition: JTransitTime.sh:44
int debug
debug level
Definition: JSirene.cc:63
General purpose messaging.
#define FATAL(A)
Definition: JMessage.hh:67
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
Definition: JMuonPath.sh:47
Utility class to parse command line options.
KM3NeT DAQ constants, bit handling, etc.
const char * map
Definition: elog.cc:87
data_type v[N+1][M+1]
Definition: JPolint.hh:740
then usage $script< string identifier >< detectorfile > event file(toashort file)+" "\nNote that the event files and toashort files should be one-to-one related." fi if (( $
void readDir(TDirectory *dir, std::vector< TString > &v)