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