GSI Object Oriented Online Offline (Go4)  GO4-6.3.0
TXXXUnpackProc.cxx
Go to the documentation of this file.
1 // $Id$
2 //-----------------------------------------------------------------------
3 // The GSI Online Offline Object Oriented (Go4) Project
4 // Experiment Data Processing at EE department, GSI
5 //-----------------------------------------------------------------------
6 // Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7 // Planckstr. 1, 64291 Darmstadt, Germany
8 // Contact: http://go4.gsi.de
9 //-----------------------------------------------------------------------
10 // This software can be used under the license agreements as stated
11 // in Go4License.txt file which is part of the distribution.
12 //-----------------------------------------------------------------------
13 
14 #include "TXXXUnpackProc.h"
15 
16 #include "TH1.h"
17 #include "TF1.h"
18 #include "TH2.h"
19 #include "TCutG.h"
20 #include "TMath.h"
21 #include "TLatex.h"
22 
23 #include "TGo4Log.h"
24 #include "TGo4MbsEvent.h"
25 #include "TGo4WinCond.h"
26 #include "TGo4ShapedCond.h"
27 #include "TGo4ListCond.h"
28 #include "TGo4CondArray.h"
29 #include "TGo4Picture.h"
30 #include "TGo4RollingGraph.h"
31 
32 #include "TXXXParameter.h"
33 #include "TXXXUnpackEvent.h"
34 
35 //-----------------------------------------------------------
38 {
39  for (int n = 0; n < XXX_NUM_CHAN; n++) {
40  fCr1Ch[n] = nullptr;
41  fCr2Ch[n] = nullptr;
42  }
43 }
44 
45 //-----------------------------------------------------------
46 TXXXUnpackProc::TXXXUnpackProc(const char *name) :
47  TGo4EventProcessor(name)
48 {
49  for (int n = 0; n < XXX_NUM_CHAN; n++) {
50  fCr1Ch[n] = nullptr;
51  fCr2Ch[n] = nullptr;
52  }
53 
54  TGo4Log::Info("TXXXUnpackProc: Create");
55 
57  // create and load parameter here
58  // set_Par.C macro executed after parameter load from auto-save file
59  fParam = (TXXXParameter*) MakeParameter("XXXParameter", "TXXXParameter", "set_Par.C");
60 
61  // this one is created in TXXXAnalysis, because it is used in both steps
62  fWinCon1 = (TGo4WinCond *) GetAnalysisCondition("wincon1", "TGo4WinCond");
63 
64  if(fParam->fbHisto){
65 
66  TGo4Log::Info("TXXXUnpackProc: Produce histograms");
67 
68  for (int i = 0; i < XXX_NUM_CHAN; i++) {
69  TString hname = TString::Format("Crate1/Cr1Ch%02d", i + 1);
70  TString htitle = TString::Format("Crate 1 channel %2d", i+1);
71  fCr1Ch[i] = MakeTH1('I', hname.Data(), htitle.Data(), 5000, 1., 5001.);
72  hname = TString::Format("Crate2/Cr2Ch%02d",i+1);
73  htitle = TString::Format("Crate 2 channel %2d",i+1);
74  fCr2Ch[i] = MakeTH1('I', hname.Data(), htitle.Data(), 5000, 1., 5001.);
75  }
76 
77  fCr1Ch1x2 = MakeTH2('I', "Cr1Ch1x2","Crate 1 channel 1x2", 200, 1., 5001., 200, 1., 5001.);
78  fHis1 = MakeTH1('I', "His1","Condition histogram", 5000, 1., 5001.);
79  fHis2 = MakeTH1('I', "His2","Condition histogram", 5000, 1., 5001.);
80  fHis1gate = MakeTH1('I', "His1g","Gated histogram", 5000, 1., 5001.);
81  fHis2gate = MakeTH1('I', "His2g","Gated histogram", 5000, 1., 5001.);
82 
83 
84  fRollingGraph1 = MakeRollingGraph("myrollinggraphs/rolling1","Test of a rolling graph 1",10000,10);
85  fRollingGraph2 = MakeRollingGraph("myrollinggraphs/rolling2","Test of a rolling graph 2",1000,100);
86  fGraph = MakeGraph("sinus","graph from a function",new TF1("sinus","sin(x)",0, 4*TMath::Pi()));
87 
88  TGo4Log::Info("TXXXUnpackProc: Produce conditions");
89  // fWinCon1->PrintCondition(true);
90 
91  fWinCon2 = MakeWinCond("wincon2", 50, 70, 90, 120);
92  fconHis1 = MakeWinCond("cHis1", 100, 2000, "His1");
93  fconHis2 = MakeWinCond("cHis2", 100, 2000, "His2");
94 
95  Double_t cutpnts[3][2] = { {400, 800}, {700, 900}, {600, 1100} };
96  fPolyCon1 = MakePolyCond("polycon", 3, cutpnts, "Cr1Ch1x2");
97 
98  fEllipseCond = MakeEllipseCond("ellipsecond",0,3000,3000,300,800, 45, "Cr1Ch1x2");
99  //Int_t npoints, Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta, const char *HistoName
100 
101  fCircleCond = MakeCircleCond("circlecond",24,300,200,100, "Cr1Ch1x2");
102  //Int_t npoints, Double_t cx, Double_t cy, Double_t r, const char *HistoName
103 
104  fBoxCond = MakeBoxCond("boxcond",2000,2000,400,100, 30, "Cr1Ch1x2");
105 
106  fFreestyleCond = MakeFreeShapeCond("freecon", 3, cutpnts, "Cr1Ch1x2");
107 
108  fWhitelistCon = MakeListCond("Whitelist",1,42,2,"His1");
109 
111  if (!fConArr1) {
112  fConArr1 = new TGo4CondArray("winconar",30,"TGo4WinCond");
113  fConArr1->SetValues(100,500);
114  fConArr1->Disable(true);
115  ((*fConArr1)[0])->SetValues(200,400);
116  ((*fConArr1)[1])->SetValues(700,1000);
117  ((*fConArr1)[2])->SetValues(1500,2000);
118  fConArr1->SetHistogram("Sum3");
120  } else {
122  }
123 
125  if(!fConArr2) {
126  // This is example how to create condition array
127  TGo4Log::Info("TXXXUnpackProc: Create condition polyconar");
128  Double_t xvalues[4] = { 1000, 2000, 1500, 1000 };
129  Double_t yvalues[4] = { 1000, 1000, 3000, 1000 };
130  TCutG *mycut = new TCutG("cut2", 4, xvalues, yvalues);
131  fConArr2 = new TGo4CondArray("polyconar",4,"TGo4PolyCond");
132  fConArr2->SetValues(mycut);
133  fConArr2->Disable(true); // means: condition check always returns true
134  delete mycut; // mycat has been copied into the conditions
136  } else {
137  TGo4Log::Info("TXXXUnpackProc: Restore condition polyconar from autosave");
139  }
140 
141  // connect histograms to conditions. will be drawn when condition is edited.
142  fWinCon1->Enable();
143  fWinCon2->Disable(true); // return always true
144  fWinCon2->Invert(kTRUE);
145  fWinCon1->PrintCondition(true);
146  fconHis1->PrintCondition(true);
147  fconHis2->PrintCondition(true);
148  fPolyCon1->Enable();
149  fPolyCon1->PrintCondition(true);
150  ((*fConArr2)[0])->Enable();
151  ((*fConArr2)[1])->Enable(); // 2 and 3 remain disabled
152 
153  fcondSet = GetPicture("condSet");
154  if (!fcondSet) {
155  // in the upper two pads, the condition limits can be set,
156  // in the lower two pads, the resulting histograms are shown
157  fcondSet = new TGo4Picture("condSet","Set conditions");
158  fcondSet->SetDivision(2,2);
159  fcondSet->Pic(0,0)->AddObject(fHis1);
160  fcondSet->Pic(0,1)->AddObject(fHis2);
165  fcondSet->Pic(1,0)->SetFillAtt(4, 1001); // solid
166  fcondSet->Pic(1,0)->SetLineAtt(4,1,1);
167  fcondSet->Pic(1,1)->SetFillAtt(9, 1001); // solid
168  fcondSet->Pic(1,1)->SetLineAtt(9,1,1);
169  fcondSet->Pic(0,0)->SetTitleAttr(0.05, 0.85, 0.8, 0.95);
170 
174 // TF1 *fa1 = new TF1("fa1","1000*sin(x)/x",0,1000);
175 // fcondSet->Pic(0,0)->AddSpecialObject(fa1, "same");
176 
177 // TArc* arc = new TArc(0,0, 1000);
178 // fcondSet->Pic(0,1)->AddSpecialObject(arc);
179 
181  }
182 
183  fLaText = new TLatex(0.5,0.5,"-- demo text --");
184  fLaText->SetName("LatexObjectDemo");
185  fLaText->SetTextAlign(22);
186  fLaText->SetNDC();
187  AddObject(fLaText); // will replace old one of same name
188 
189  fPicture1 = GetPicture("Picture1");
190  if (!fPicture1) {
191  fPicture1 = new TGo4Picture("Picture1","Picture example");
192  fPicture1->SetLinesDivision(3, 2,3,1); // three rows, cols per row
193  // top row
194  fPicture1->LPic(0,0)->AddObject(fCr1Ch[0]);
195  fPicture1->LPic(0,0)->SetFillAtt(5, 3001); // pattern
196  fPicture1->LPic(0,0)->SetLineAtt(5,1,1);
197  fPicture1->LPic(0,0)->SetStatsAttr(0.1,0.6,0.4,0.9,101); // mean and name
198  fPicture1->LPic(0,0)->SetAxisLabelFontSize(0, 0.07, 0); // Go4 v4.2
199  fPicture1->LPic(0,0)->SetAxisLabelFontSize(1, 0.07, 0); // Go4 v4.2
200  fPicture1->LPic(0,0)->SetHisTitle(false);
201  fPicture1->LPic(0,0)->SetTitleAttr(0.1,0.75,0.7,0.9);
202 
204 
205  fPicture1->LPic(0,1)->AddObject(fCr1Ch[1]);
206  fPicture1->LPic(0,1)->SetFillAtt(4, 3001); // pattern
207  fPicture1->LPic(0,1)->SetLineAtt(4,1,1);
208  fPicture1->LPic(0,1)->SetStatsAttr(0.1,0.6,0.4,0.9,101); // mean and name
209  fPicture1->LPic(0,1)->SetAxisLabelFontSize(0, 0.07, 0); // Go4 v4.2
210  fPicture1->LPic(0,1)->SetAxisLabelFontSize(1, 0.07, 0); // Go4 v4.2
211  fPicture1->LPic(0,1)->SetHisTitle(false);
212  fPicture1->LPic(0,1)->SetTitleAttr(0.1,0.75,0.7,0.9);
213  // middle row
214  fPicture1->LPic(1,0)->AddObject(fCr1Ch[2]);
215  fPicture1->LPic(1,0)->SetFillAtt(6, 1001); // solid
216  fPicture1->LPic(1,0)->SetLineAtt(6,1,1);
217  fPicture1->LPic(1,0)->SetStatsAttr(0.1,0.6,0.4,0.9,101); // mean and name
218  fPicture1->LPic(1,0)->SetAxisLabelFontSize(0, 0.07, 0); // Go4 v4.2
219  fPicture1->LPic(1,0)->SetAxisLabelFontSize(1, 0.07, 0); // Go4 v4.2
220  fPicture1->LPic(1,0)->SetHisTitle(false);
221  fPicture1->LPic(1,0)->SetTitleAttr(0.1,0.75,0.7,0.9);
222 
223  fPicture1->LPic(1,1)->AddObject(fCr1Ch[3]);
224  fPicture1->LPic(1,1)->SetFillAtt(7, 1001); // solid
225  fPicture1->LPic(1,1)->SetLineAtt(7,1,1);
226  fPicture1->LPic(1,1)->SetStatsAttr(0.1,0.6,0.4,0.9,101); // mean and name
227  fPicture1->LPic(1,1)->SetAxisLabelFontSize(0, 0.07, 0); // Go4 v4.2
228  fPicture1->LPic(1,1)->SetAxisLabelFontSize(1, 0.07, 0); // Go4 v4.2
229  fPicture1->LPic(1,1)->SetHisTitle(false);
230  fPicture1->LPic(1,1)->SetTitleAttr(0.1,0.75,0.7,0.9);
231 
232  fPicture1->LPic(1,2)->AddObject(fCr1Ch[4]);
233  fPicture1->LPic(1,2)->SetStatsAttr(0.1,0.6,0.4,0.9,101); // mean and name
234  fPicture1->LPic(1,2)->SetAxisLabelFontSize(0, 0.07, 0); // Go4 v4.2
235  fPicture1->LPic(1,2)->SetAxisLabelFontSize(1, 0.07, 0); // Go4 v4.2
236  fPicture1->LPic(1,2)->SetHisTitle(false);
237  fPicture1->LPic(1,2)->SetTitleAttr(0.1,0.75,0.7,0.9);
238  // bottom row
240  fPicture1->LPic(2,0)->SetDrawOption("CONT");
241  fPicture1->LPic(2,0)->SetStatsAttr(0.1,0.6,0.4,0.9,101); // mean and name
242  fPicture1->LPic(2,0)->SetAxisLabelFontSize(0, 0.07, 0); // Go4 v4.2
243  fPicture1->LPic(2,0)->SetAxisLabelFontSize(1, 0.07, 0); // Go4 v4.2
244  fPicture1->LPic(2,0)->SetHisTitle(false);
245  fPicture1->LPic(2,0)->SetTitleAttr(0.1,0.75,0.7,0.9);
247  }
248  } // create histograms
249 
250  //ExecuteLine("$blabla.py"); // JAM test internal python call
251  //ExecutePython("blabla.py");
252 
253 }
254 
255 //-----------------------------------------------------------
257 {
258  TGo4Log::Info("TXXXUnpackProc: Delete");
259  if(fParam->fbHisto) {
260  fWinCon1->PrintCondition(true);
261  fPolyCon1->PrintCondition(true);
262  }
263 }
264 
265 //-----------------------------------------------------------
267 {
268  Bool_t isValid = kFALSE; // validity of output event
269 
270  TGo4MbsEvent *inp_evt = (TGo4MbsEvent *) GetInputEvent(); // from this
271  TXXXUnpackEvent* out_evt = (TXXXUnpackEvent*) dest;
272 
273  if (!inp_evt) {
274  TGo4Log::Error("XXXUnpackProc: no input event !");
275  out_evt->SetValid(isValid); // to store or not to store
276  // default calling Fill method will set validity of out_evt to return value!
277  return isValid;
278  }
279  isValid = kTRUE;
280 
282  // Some examples how to skip event processing or stop analysis by exception
283  // for convenience, we provide GO4_ macros to invoke appropriate exception throws
284  // NOTE: You need to //#include "TGo4UserException.h" for this feature
285  // static UInt_t count = 0;
286  // if((count++ % 100000) == 0 && count > 1) // user may put a real analysis condition here
287  // {
288  // // this macro will skip event and subsequent analysis steps and send specified message to gui log window:
289  // // GO4_SKIP_EVENT_MESSAGE("Skipped Event %d",count-1)
290  //
291  // // this macro will skip event and subsequent analysis steps without message:
292  // GO4_SKIP_EVENT
293  //
294  // // this macro will stop analysis and send specified message to gui log window:
295  // //GO4_STOP_ANALYSIS_MESSAGE("Stopped after Event %d",count-1)
296  //
297  // // this macro will stop analysis without message
298  // //GO4_STOP_ANALYSIS
299  // }
301 
302 
305  // s_filhe* head=inp_evt->GetMbsSourceHeader();
306  // if(head)
307  // {
308  // std::cout <<"found filhe structure:" << std::endl;
309  // std::cout <<"\tdatalen: "<<head->filhe_dlen << std::endl;
310  // std::cout <<"\tfilename_l: "<<head->filhe_file_l << std::endl;
311  // std::cout <<"\tfilename: "<<head->filhe_file << std::endl;
312  // std::cout <<"\ttype: "<<head->filhe_type << std::endl;
313  // std::cout <<"\tsubtype: "<<head->filhe_subtype << std::endl;
314  // std::cout <<"\t#commentlines: "<<head->filhe_lines << std::endl;
315  // }
316  // else
317  // {
318  // std::cout <<"zero file header" << std::endl;
319  // }
321 
324  // s_bufhe* head=inp_evt->GetMbsBufferHeader();
325  // if(head) {
326  // std::cout <<"\nfound bufhe structure:" << std::endl;
327  // std::cout <<"\tbuffernumber: "<<head->l_buf << std::endl;
328  // std::cout <<"\tdatalen: "<<head->l_dlen << std::endl;
329  // std::cout <<"\ttime lo: "<<head->l_time[0] << std::endl; // seconds since epoch 1970
330  // std::cout <<"\ttime hi: "<<head->l_time[1] << std::endl; // microseconds since time lo
331  // char sbuf[1000]; f_ut_utime(head->l_time[0], head->l_time[1], sbuf);
332  // std::cout <<"\ttimestring: " << sbuf << std::endl;
333  // std::cout <<"\ttype: "<<head->i_type << std::endl;
334  // std::cout <<"\tsubtype: "<<head->i_subtype << std::endl;
335  // }
336  // else
337  // {
338  // std::cout <<"zero buffer header" << std::endl;
339  // }
341 
342 
343  inp_evt->ResetIterator();
344  while (auto psubevt = inp_evt->NextSubEvent()) // subevent loop
345  {
346  if( psubevt->GetSubcrate() == 1)
347  {
348  Int_t *pdata = psubevt->GetDataField();
349  Int_t lwords = psubevt->GetIntLen();
350  if(lwords > XXX_NUM_CHAN) lwords = XXX_NUM_CHAN; // take only first 8 lwords
351  Int_t lastvalue = 0;
352  for(Int_t i = 0; i<lwords; ++i)
353  {
354  // Int_t index = *pdata&0xfff; // in case low word is index
355  // Int_t value = (*pdata>>16)&0xfff; // in case high word is data
356  if(*pdata != 0)
357  {
358  out_evt->fiCrate1[i] = *pdata; // fill output event
359 
360  if (fCr1Ch[i]) fCr1Ch[i]->Fill(*pdata);
361 
362  if(fParam->fbHisto) { // fill histograms
363  if(i == 0) // fill first channel
364  {
365  if(fconHis1->Test((Double_t) *pdata)) fHis1gate->Fill(*pdata);
366  fHis1->Fill(*pdata);
367  fWhitelistCon->Test(*pdata);
368  fRollingGraph1->Fill(*pdata);
369  fRollingGraph2->Fill(*pdata);
370  }
371  if(i == 1)
372  {
373  if(fconHis2->Test((Double_t) *pdata)) fHis2gate->Fill(*pdata);
374  fHis2->Fill(*pdata);
375  // fill Cr1Ch1x2 for three polygons:
376  if(fPolyCon1->Test(*pdata,lastvalue)) fCr1Ch1x2->Fill(*pdata, lastvalue);
377  if(((*fConArr2)[0])->Test(*pdata,lastvalue)) fCr1Ch1x2->Fill(*pdata, lastvalue);
378  if(((*fConArr2)[1])->Test(*pdata,lastvalue)) fCr1Ch1x2->Fill(*pdata, lastvalue);
379 
380  if(fEllipseCond->Test(*pdata,lastvalue)) fCr1Ch1x2->Fill(*pdata, lastvalue);
381  fCircleCond->Test(*pdata,lastvalue);
382  }
383  }
384  }
385  lastvalue = *pdata; // save for 2d histogram
386  pdata++;
387  } // for SEW LW
388  } // if (subcrate)
389  if( psubevt->GetSubcrate() == 2)
390  {
391  Int_t *pdata = psubevt->GetDataField();
392  Int_t lwords = psubevt->GetIntLen();
393  if(lwords > XXX_NUM_CHAN) lwords=XXX_NUM_CHAN;
394  for(Int_t i = 0; i<lwords; ++i) {
395  if(*pdata != 0) {
396  out_evt->fiCrate2[i] = *pdata;
397  if(fCr2Ch[i]) fCr2Ch[i]->Fill((Float_t)(*pdata));
398  }
399  pdata++;
400  } // for SEW LW
401  } // if (subcrate)
402  } // while
403 
404  if (fLaText) {
405  TString lbl = TString::Format("#scale[3.0]{#color[2]{Event number:%d}}",inp_evt->GetCount());
406  fLaText->SetText(0.5,0.5, lbl.Data());
407  }
408 
409  out_evt->SetValid(isValid); // to store or not to store
410  // default calling Fill method will set validity of out_evt to return value!
411 
412  return isValid; // this will overwrite out_evt->SetValid
413  // except one would have a Fill method implemented in the output event class!
414  // In this case the return value can be handled differently there.
415 }
TH1 * MakeTH1(char type, const char *fullname, const char *title, Int_t nbinsx, Double_t xlow, Double_t xup, const char *xtitle=nullptr, const char *ytitle=nullptr)
TGo4ShapedCond * MakeFreeShapeCond(const char *fullname, Int_t npoints, Double_t(*points) [2], const char *HistoName=nullptr)
void ResetCounts() override
void Disable(Bool_t result) override
virtual void Fill(Double_t value, Double_t xerror=-1, Double_t yerror=-1)
Fills a new value into the rolling graph.
void AddCondition(TNamed *cond=nullptr)
Int_t fiCrate1[XXX_NUM_CHAN]
void SetValid(Bool_t on)
TGo4Picture * GetPicture(const char *name)
Bool_t BuildEvent(TGo4EventElement *dest) override
TGo4RollingGraph * fRollingGraph1
static void Info(const char *text,...) GO4_PRINTF_ARGS
Definition: TGo4Log.cxx:294
TGo4RollingGraph * MakeRollingGraph(const char *fullname, const char *title, Int_t points=0, Int_t average=1)
Bool_t AddPicture(TGo4Picture *pic, const char *subfolder=nullptr)
TH1 * fCr2Ch[XXX_NUM_CHAN]
TH1 * fCr1Ch[XXX_NUM_CHAN]
void SetValues(Double_t low1, Double_t up1) override
TGo4CondArray * fConArr2
TGo4CondArray * fConArr1
TGo4RollingGraph * fRollingGraph2
void SetHisTitle(bool on)
TH2 * MakeTH2(char type, const char *fullname, const char *title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup, const char *xtitle=nullptr, const char *ytitle=nullptr, const char *ztitle=nullptr)
Int_t fiCrate2[XXX_NUM_CHAN]
void SetAxisLabelFontSize(Int_t naxis, Float_t LabelSize, Int_t index=UndefIndex)
void AddObject(TObject *obj, Option_t *DrawOption=nullptr)
Bool_t Test(Double_t x, Double_t y) override
TGo4Picture * Pic(Int_t posy, Int_t posx)
TGo4MbsSubEvent * NextSubEvent(Bool_t all=kFALSE)
virtual void Enable()
TGo4ListCond * fWhitelistCon
void SetDivision(Int_t ndivy, Int_t ndivx)
void SetStatsAttr(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Int_t optstat=1111, const char *statformat="6.4g", Int_t optfit=1111, const char *fitformat="5.4g")
TGo4ShapedCond * fCircleCond
TGo4Parameter * MakeParameter(const char *fullname, const char *classname, const char *newcmd=nullptr)
TGo4Picture * fcondSet
Bool_t Test(Double_t value) override
void PrintCondition(Bool_t full=kTRUE) override
TGo4ShapedCond * fBoxCond
void SetHistogram(const char *name)
TLatex * fLaText
virtual void Disable(Bool_t result)
TGo4ShapedCond * MakeBoxCond(const char *fullname, Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta, const char *HistoName=nullptr)
TGo4Condition * GetAnalysisCondition(const char *name, const char *cond_cl=nullptr)
TGo4WinCond * fconHis2
void SetLineAtt(Color_t color, Style_t style, Width_t width, Int_t index=UndefIndex)
void SetLinesDivision(Int_t numlines, const Int_t *numbers)
Int_t GetCount() const
Definition: TGo4MbsEvent.h:151
static void Error(const char *text,...) GO4_PRINTF_ARGS
Definition: TGo4Log.cxx:320
TGo4EventElement * GetInputEvent()
void SetDrawOption(Option_t *option="") override
Definition: TGo4Picture.h:138
TGo4WinCond * fWinCon1
TGo4WinCond * fconHis1
TGo4ShapedCond * fEllipseCond
void SetFillAtt(Color_t color, Style_t style, Int_t index=UndefIndex)
TGo4ShapedCond * fFreestyleCond
TGo4WinCond * fWinCon2
TXXXParameter * fParam
Bool_t AddAnalysisCondition(TGo4Condition *con, const char *subfolder=nullptr)
TGo4PolyCond * fPolyCon1
TGo4WinCond * MakeWinCond(const char *fullname, Double_t xmin, Double_t xmax, const char *HistoName=nullptr)
void ResetIterator()
Definition: TGo4MbsEvent.h:100
TGo4Picture * fPicture1
Bool_t Test(Double_t v1) override
Definition: TGo4WinCond.cxx:86
#define XXX_NUM_CHAN
Bool_t AddObject(TNamed *anything, const char *subfolder=nullptr)
TGo4ShapedCond * MakeCircleCond(const char *fullname, Int_t npoints, Double_t cx, Double_t cy, Double_t r, const char *HistoName=nullptr)
TGo4Picture * LPic(Int_t nline, Int_t ncol)
virtual ~TXXXUnpackProc()
TGo4ListCond * MakeListCond(const char *fullname, const Int_t num, const Int_t *values, const char *HistoName=nullptr)
TGraph * MakeGraph(const char *fullname, const char *title, Int_t points=0, Double_t *xvalues=nullptr, Double_t *yvalues=nullptr)
TGo4ShapedCond * MakeEllipseCond(const char *fullname, Int_t npoints, Double_t cx, Double_t cy, Double_t a1, Double_t a2, Double_t theta=0, const char *HistoName=nullptr)
TGo4PolyCond * MakePolyCond(const char *fullname, Int_t npoints, Double_t(*points) [2], const char *HistoName=nullptr)
void SetTitleAttr(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t textsize=0.)
virtual void Invert(Bool_t on)
void PrintCondition(Bool_t points=kTRUE) override