FairRoot/PandaRoot
inspectmode.C
Go to the documentation of this file.
1 #include <vector>
2 #include <fstream>
3 #include <iostream>
4 
5 #include "TChain.h"
6 #include "TCanvas.h"
7 #include "TH2F.h"
8 #include "TString.h"
9 #include "TRegexp.h"
10 #include "TLine.h"
11 #include "TArrow.h"
12 
13 using std::cout;
14 using std::endl;
15 
16 typedef std::vector<TString> StrArr;
17 typedef std::map<TString,int> VarHash;
18 typedef std::map<TString, std::vector<double> > VarCutMap;
19 typedef std::map<TString, std::vector<double> >::iterator VarCutMapIt;
20 
23 
25 
26 int SplitString(TString s, TString delim, StrArr &toks)
27 {
28  toks.clear();
29 
30  TObjArray *tok = s.Tokenize(delim);
31  int N = tok->GetEntries();
32 
33  for (int i=0;i<N;++i)
34  {
35  TString token = ((TObjString*)tok->At(i))->String();
36  token.ReplaceAll("\t","");
37  token = token.Strip(TString::kBoth);
38  toks.push_back(token);
39  }
40  return N;
41 }
42 
43 bool readConfig(TString fname, int mode)
44 {
45  ifstream file(fname.Data());
46  if (!file.is_open()) return false;
47 
48  varlist.clear();
49  vhash.clear();
50  lecutmap.clear();
51  gecutmap.clear();
52 
53  char line[1500];
54 
55  StrArr sar1, sar2;
56 
57  // loop through file line by line
58  while (!file.eof())
59  {
60  file.getline(line,1499);
61  TString sline(line);
62 
63  // remove tabs everywhere
64  sline.ReplaceAll("\t","");
65  // if lines contains a '#' somewhere, cut string from that position (=comment)
66  if (sline.Contains("#")) sline = sline(0,sline.Index("#")-1);
67  // remove whitespace at begin and end
68  sline = sline.Strip(TString::kBoth);
69 
70  if (sline=="") continue;
71 
72  SplitString(sline,":",sar1);
73 
74  int cmode = (sar1[0].Atoi())%1000;
75  double sqs = (sar1[0].Atof())/100000.;
76  sqs = int(sqs*100)/100.;
77 
78  if (cmode != mode) continue;
79 
80  cout <<sline<<endl;
81 
82  SplitString(sar1[1],"&&",sar2);
83 
84  for (int i=0;i<sar2.size();++i)
85  {
86  TString var=sar2[i], cut=sar2[i];
87  cut.ReplaceAll("=","");
88  double gecut=-99999., lecut=-99999.;
89 
90  if (sar2[i].Contains(">"))
91  {
92  var=sar2[i](0,sar2[i].Index(">"));
93  gecut = TString(cut(cut.Index(">")+1,1000)).Atof();
94  }
95 
96  else if (sar2[i].Contains("<"))
97  {
98  var=sar2[i](0,sar2[i].Index("<"));
99  lecut = TString(cut(cut.Index("<")+1,1000)).Atof();
100  }
101 
102  //cout <<sqs<<" "<<"cut:"<<cut<<" le:"<<lecut<<" ge:"<<gecut<<endl;
103 
104  if ( lecutmap.find(var)==lecutmap.end() && var!="tag" )
105  {
106  varlist.push_back(var);
107  //vhash[var]=1;
108  std::vector<double> t;
109  lecutmap[var] = t;
110  gecutmap[var] = t;
111  }
112 
113  if (lecut>-99999) {lecutmap[var].push_back(sqs); lecutmap[var].push_back(lecut);}
114  if (gecut>-99999) {gecutmap[var].push_back(sqs); gecutmap[var].push_back(gecut);}
115  }
116  }
117 
118  file.close();
119 
120  return true;
121 }
122 
123 int inspectmode(int mode, TString opt="cont", TString selcfg = "../../softrig/selection_fsim_dec2014.cfg")
124 {
125  TString path="/data.local1/kgoetzen/data/softrig/fsim/merge4/shr/";
126 
127  TChain n(TString::Format("n%3d",mode));
128  n.Add(TString::Format("%sM*_n%3d_*root",path.Data(),mode));
129 
130  TCanvas *c1=new TCanvas("c1","c1",10,10,800,600);
131 
132  if (!readConfig(selcfg,mode)) return;
133 
134  cout <<"vars("<<mode<<")"<<endl;
135 
136  TLine l1;
137  l1.SetLineWidth(2);
138  l1.SetLineColor(2);
139 
140  TArrow ar1;
141  ar1.SetAngle(40);
142  ar1.SetLineWidth(2);
143  ar1.SetLineColor(2);
144  ar1.SetFillColor(2);
145 
146  for (int i=0;i<varlist.size();++i)
147  {
148  TString var = varlist[i];
149  cout <<var<<""<<endl;
150 
151  double min = n.GetMinimum(var), max = n.GetMaximum(var), d=max-min;
152 
153  min-=0.05*d;
154  max+=0.05*d;
155 
156  TH2F *h=new TH2F("h",var+" (mode "+TString::Format("%d",mode)+")",360,2.2,5.8,200,min,max);
157  h->SetStats(0);
158  h->SetXTitle("E_{cm} [GeV]");
159  h->SetYTitle(var);
160 
161  n.Draw(var+":mode/1e8-0.13+recmode*0.01>>h","xmct");
162  n.Draw(var+":mode/1e5+0.05>>+h","mode%1000==900");
163  n.Draw(var+":mode/1e5+0.03>>+h","mode%1000==900");
164  n.Draw(var+":mode/1e5+0.04>>+h","mode%1000==900");
165  n.Draw(var+":mode/1e5+0.06>>+h","mode%1000==900");
166 
167  h->SetContour(50);
168  h->Draw(opt);
169 
170  for (int j=0;j<lecutmap[var].size();j+=2)
171  {
172  double sqs = lecutmap[var][j], val = lecutmap[var][j+1];
173  printf(" sqs=%4.2f : %s<%f\n", sqs, var.Data(), val);
174  l1.DrawLine(sqs-0.15, val, sqs+0.15, val);
175  ar1.DrawArrow(sqs,val,sqs,val-d*0.05,0.015,"|>");
176  }
177 
178  for (int j=0;j<gecutmap[var].size();j+=2)
179  {
180  double sqs = gecutmap[var][j], val = gecutmap[var][j+1];
181  printf(" sqs=%4.2f : %s>%f\n", sqs, var.Data(), val);
182  l1.DrawLine(sqs-0.15, val, sqs+0.15, val);
183  ar1.DrawArrow(sqs,val,sqs,val+d*0.05,0.015,"|>");
184  }
185 
186  /*
187  TH2F *h=new TH2F("h",var,70,2.3,5.8,200,min,max);
188  h->SetStats(0);
189 
190  n.Draw(var+":mode/1e8+0.05>>h","xmct",opt);
191  n.Draw(var+":mode/1e5-0.05>>+h","mode%1000==900",opt);
192 
193  h->SetContour(50);
194 
195  */
196  c1->Update();
197  c1->SaveAs(TString::Format("fig/mode%d_%s.gif",mode,var.Data()));
198 
199 
200  }
201  cout <<endl;
202 
203 
204  return 0;
205 }
VarCutMap gecutmap
Definition: inspectmode.C:24
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
TObjArray * d
Int_t i
Definition: run_full.C:25
TFile * file
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
TLorentzVector s
Definition: Pnd2DStar.C:50
int n
VarCutMap lecutmap
Definition: inspectmode.C:24
std::map< TString, int > VarHash
Definition: inspectmode.C:17
bool readConfig(TString fname, int mode)
Definition: inspectmode.C:43
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition: P4_F32vec4.h:26
int SplitString(TString s, TString delim, StrArr &toks)
Definition: inspectmode.C:26
VarHash vhash
Definition: inspectmode.C:22
std::map< TString, std::vector< double > >::iterator VarCutMapIt
Definition: inspectmode.C:19
double cut[MAX]
Definition: autocutx.C:36
Int_t mode
Definition: autocutx.C:47
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition: P4_F32vec4.h:25
c1
Definition: plot_dirc.C:35
std::map< TString, std::vector< double > > VarCutMap
Definition: inspectmode.C:18
int inspectmode(int mode, TString opt="cont", TString selcfg="../../softrig/selection_fsim_dec2014.cfg")
Definition: inspectmode.C:123
std::vector< TString > StrArr
Definition: inspectmode.C:16
TTree * t
Definition: bump_analys.C:13
StrArr varlist
Definition: inspectmode.C:21