HYDRA_development_version
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
hmdcbitflipcor.cc
Go to the documentation of this file.
1 //*-- AUTHOR : Y.C.Pachmayer
2 //*-- Modified :
3 //_HADES_CLASS_DESCRIPTION
4 ///////////////////////////////////////////////////////////////////////////////
5 //
6 // HMdcBitFlipCor
7 // corrects bitflips of a whole mbo
8 //
9 ///////////////////////////////////////////////////////////////////////////////
10 
11 using namespace std;
12 #include "hmdcbitflipcor.h"
13 #include "TROOT.h"
14 #include "hmdcdef.h"
15 #include "hmdcbitflipcorpar.h"
16 #include "hmdcgeompar.h"
17 #include "hspecgeompar.h"
18 #include "hiterator.h"
19 #include "hcategory.h"
20 #include "hruntimedb.h"
21 #include "hmdcdetector.h"
22 #include "hades.h"
23 #include "heventheader.h"
24 #include "hevent.h"
25 #include "hmdcraweventheader.h"
26 #include "hmdcraw.h"
27 #include "hmdcrawcor.h"
28 #include "hlocation.h"
29 #include "hspectrometer.h"
30 #include "hmatrixcategory.h"
31 
33 
34 
35 HMdcBitFlipCor::HMdcBitFlipCor(const Text_t *name,const Text_t *title, Int_t PHist, Int_t PRawCor) : HReconstructor(name,title) {
36  initVariables();
37  phist=PHist;
38  prawcor=PRawCor;
39 }
40 
41 HMdcBitFlipCor::HMdcBitFlipCor(void) : HReconstructor("HMdcBitFlipCor","HMdcBitFlipCor") {
42  initVariables();
43  phist=0;
44  prawcor=0;
45 }
46 
48  if (mdcrawiter) delete mdcrawiter;
49 }
50 
52 {
53 
54  if(name.CompareTo("")==0)
55  {
56  Error("HMdcCosmicsSimul:setRootOutPutFilename()","NO ROOT OUTPUT SPEZIFIED!");
57  exit(1);
58  }
59  else
60  {
62  }
63 }
64 
66 {
67 
68  if(name.CompareTo("")==0)
69  {
70  Error("HMdcCosmicsSimul:setAsciiOutPutFilename()","NO ASCII OUTPUT SPEZIFIED!");
71  exit(1);
72  }
73  else
74  {
76  }
77 }
78 
80 {
81  catmHMdcRaw=0;
82  mdcraw=0;
83  mdcrawiter=0;
84 
85 
86  rawREH=0;
87  iterREH=0;
88 
89  rawcorCat=0;
90  rawcor=0;
91  loc.set(4,0,0,0,0);
92 
95 
96  for(Int_t s=0;s<6;s++)
97  {
98  for(Int_t m=0; m<4; m++)
99  {
100  for(Int_t mbo=0; mbo<16;mbo++)
101  {
102  for(Int_t v=0; v<9;v++)
103  {
104  paramsbitcorrection[s][m][mbo][v]=-10;
105  }
106  }
107  }
108  }
109 
110  for(Int_t s=0;s<6;s++)
111  {
112  for(Int_t m=0; m<4; m++)
113  {
114  for(Int_t mbo=0; mbo<16; mbo++)
115  {
116  counterevents[s][m][mbo]=0;
117  countersavedtime1[s][m][mbo]=0;
118  countersavedtime2[s][m][mbo]=0;
119 
120  histtime1b[s][m][mbo]=0;
121  histtime1g[s][m][mbo]=0;
122  histtime2b[s][m][mbo]=0;
123  histtime2g[s][m][mbo]=0;
124  }
125  }
126  }
127 
128 }
129 
131 {
132  // hists are created
133 
134  for(Int_t s=0;s<6;s++)
135  {
136  for(Int_t m=0; m<4; m++)
137  {
138  for(Int_t mbo=0; mbo<16; mbo++)
139  {
140  sprintf(title, "time1 raw before bitshift corrs%im%imbo%i",s,m,mbo);
141  sprintf(name, "time1rawbeforebitcors%im%imbo%i",s,m,mbo);
142  sprintf(xtitle, "time1 [ch]");
143  sprintf(ytitle, "#");
144  histtime1b[s][m][mbo] = new TH1F(name, title, 1024, 0, 2048);
145  histtime1b[s][m][mbo] -> SetXTitle(xtitle);
146  histtime1b[s][m][mbo] -> SetYTitle(ytitle);
147 
148  sprintf(title, "time1 raw after bitshift corrs%im%imbo%i",s,m,mbo);
149  sprintf(name, "time1rawafterbitcors%im%imbo%i",s,m,mbo);
150  sprintf(xtitle, "time1 [ch]");
151  sprintf(ytitle, "#");
152  histtime1g[s][m][mbo] = new TH1F(name, title, 1024, 0, 2048);
153  histtime1g[s][m][mbo] -> SetXTitle(xtitle);
154  histtime1g[s][m][mbo] -> SetYTitle(ytitle);
155 
156 
157  sprintf(title, "time2 raw before bitshift corrs%im%imbo%i",s,m,mbo);
158  sprintf(name, "time2rawbeforebitcors%im%imbo%i",s,m,mbo);
159  sprintf(xtitle, "time2 [ch]");
160  sprintf(ytitle, "#");
161  histtime2b[s][m][mbo] = new TH1F(name, title, 1024, 0, 2048);
162  histtime2b[s][m][mbo] -> SetXTitle(xtitle);
163  histtime2b[s][m][mbo] -> SetYTitle(ytitle);
164 
165  sprintf(title, "time2 raw after bitshift corrs%im%imbo%i",s,m,mbo);
166  sprintf(name, "time2rawafterbitcors%im%imbo%i",s,m,mbo);
167  sprintf(xtitle, "time2 [ch]");
168  sprintf(ytitle, "#");
169  histtime2g[s][m][mbo] = new TH1F(name, title, 1024, 0, 2048);
170  histtime2g[s][m][mbo] -> SetXTitle(xtitle);
171  histtime2g[s][m][mbo] -> SetYTitle(ytitle);
172 
173  }
174  }
175  }
176 
177 
178 
179 }
180 
181 Bool_t HMdcBitFlipCor::init(void) {
182 
184 
186  if (!catmHMdcRaw) {
187  Error("HMdcBitFlipCor::init()","NO HMDCRAW FOUND!");
188  return kFALSE;
189  }
190  mdcrawiter=(HIterator *)catmHMdcRaw->MakeIterator();
191  if(!mdcrawiter)
192  {
193  return kFALSE;
194  }
195 
197  if (!catmHMdcRawEventHeader) {
198  Error("HMdcBitFlipCor::init()","NO HMDCRAW FOUND!");
199  return kFALSE;
200  }
201  iterREH=(HIterator *)catmHMdcRawEventHeader->MakeIterator();
202  if(!iterREH)
203  {
204  return kFALSE;
205  }
206 
207  if(phist==1)
208  {
209  createHists();
210  }
211 
213 
214  if(prawcor==1)
215  {
216  rawcorCat=(HCategory*)((HMdcDetector*)(((HSpectrometer*)(gHades->getSetup()))->getDetector("Mdc"))->buildCategory(catMdcRawCor));
217  if (!rawcorCat) return kFALSE;
218  else ((HEvent*)(gHades->getCurrentEvent()))->addCategory(catMdcRawCor,rawcorCat,"Mdc");
219  }
220 
221 
222  return kTRUE;
223 
224 }
225 
227 {
228  fMdcBitFlipCorPar=(HMdcBitFlipCorPar*)rtdb->getContainer("MdcBitFlipCorPar");
229  if(!fMdcBitFlipCorPar)
230  {
231  Error("HMdcBitFlipCorPar:getParameterContainer()","ZERO POINTER FOR HMDCBITFLIPCORPAR RECIEVED!");
232  exit(1);
233  }
234 }
235 
238 
239  return kTRUE;
240 }
241 
243 {
244  if(fMdcBitFlipCorPar==0){printf("Error fMdcBitFlipCorPar ... not found \n");}
245  for(Int_t s=0;s<6;s++)
246  {
247  for(Int_t m=0; m<4; m++)
248  {
249  for(Int_t mbo=0; mbo<16;mbo++)
250  {
251  for(Int_t v=0; v<9;v++)
252  {
254  }
255  }
256  }
257  }
258  //fMdcBitFlipCorPar->printParam();
259  return kTRUE;
260 
261 }
262 
264 
265  resetVar();
266  iterREH->Reset();
267  while ( (rawREH=(HMdcRawEventHeader *)iterREH->Next()) != 0 ){
269  }
270 
271  mdcrawiter->Reset();
272  while ( (mdcraw=(HMdcRaw *)mdcrawiter->Next()) != 0 )
273  {
274  if(trigtype!=9)
275  {
277 
278  loc[0]=sector;
279  loc[1]=module;
280  loc[2]=mbo;
281  loc[3]=tdc;
282 
283  if(prawcor==1)
284  {
285  rawcor=(HMdcRawCor *)rawcorCat->getSlot(loc);
288  }
289 
290  time1=mdcraw->getTime(1);
291  time2=mdcraw->getTime(2);
293  {
295  if(phist==1)
296  {
297  histtime1b[sector][module][mbo]->Fill(time1);
298  histtime2b[sector][module][mbo]->Fill(time2);
299  }
300 
302  {
303  if(prawcor==1)
304  {
306  rawcor->setFlagRaw(1);
307  }
309  if(phist==1)
310  {
312  }
314  }
315  else
316  {
317  if(time1<paramsbitcorrection[sector][module][mbo][1])
318  {
319  if(prawcor==1)
320  {
322  rawcor->setFlagRaw(1);
323  }
325  if(phist==1)
326  {
328  }
330  }
331  else
332  {
333  if(prawcor==1)
334  {
335  rawcor->setTimeShift(0,1);
336  rawcor->setFlagRaw(0);
337  }
338  if(phist==1)
339  {
340  histtime1g[sector][module][mbo]->Fill(time1);
341  }
342  }
343  }
344 
345 
346  if(time2>paramsbitcorrection[sector][module][mbo][6])
347  {
348  if(prawcor==1)
349  {
351  if(rawcor->getFlagRaw()>-1)
352  {
353  rawcor->setFlagRaw(3);
354  }
355  else
356  {
357  rawcor->setFlagRaw(2);
358  }
359  }
361 
362  if(phist==1)
363  {
365  }
367  }
368  else
369  {
370  if(time2<paramsbitcorrection[sector][module][mbo][5])
371  {
372  if(prawcor==1)
373  {
375  if(rawcor->getFlagRaw()>-1)
376  {
377  rawcor->setFlagRaw(3);
378  }
379  else
380  {
381  rawcor->setFlagRaw(2);
382  }
383  }
385  if(phist==1)
386  {
388  }
390  }
391  else
392  {
393  if(prawcor==1)
394  {
395  rawcor->setTimeShift(0,2);
396  rawcor->setFlagRaw(0);
397  }
398  if(phist==1)
399  {
400  histtime2g[sector][module][mbo]->Fill(time2);
401  }
402  }
403  }
404  }
405  else
406  {
407  if(prawcor==1)
408  {
409  rawcor->setFlagRaw(0);
410  rawcor->setTimeShift(0,1);
411  rawcor->setTimeShift(0,2);
412  }
413  }
414 
415  }
416  }
417 
418  return 0;
419 
420 }
421 
422 
424  if(phist==1)
425  {
426  asciioutputfile = fopen(asciioutputfilename.Data(),"w");
427  }
428 
429  for(Int_t s=0;s<6;s++)
430  {
431  for(Int_t m=0; m<4; m++)
432  {
433  for(Int_t mbo=0; mbo<16; mbo++)
434  {
435  if(counterevents[s][m][mbo]!=0)
436  {
437  cout << " sector " << s << " module " << m << " mbo " << mbo << endl;
438  cout << " number of events " << counterevents[s][m][mbo] << endl;
439  cout << " number of events which were rescued due to time1 correction " << countersavedtime1[s][m][mbo] << endl;
440  cout << " number of events which were rescued due to time2 correction " << countersavedtime2[s][m][mbo] << endl;
441  Float_t savedevents1=(Float_t) countersavedtime1[s][m][mbo]/counterevents[s][m][mbo];
442  Float_t savedevents2=(Float_t) countersavedtime2[s][m][mbo]/counterevents[s][m][mbo];
443  cout << " % of rescued time1 events " << savedevents1*100 << endl;
444  cout << " % of rescued time2 events " << savedevents2*100 << endl;
445 
446  if(phist==1)
447  {
448  fprintf(asciioutputfile,"%s%i%s%i%s%i%s%i%s%i%s%i\n","sector ",s," module ",m," mbo ", mbo," no of events " , counterevents[s][m][mbo], " saved time1 " , countersavedtime1[s][m][mbo], " saved time2 ", countersavedtime2[s][m][mbo]);
449  }
450  }
451  }
452  }
453  }
454 
455  if(phist==1)
456  {
457  fclose(asciioutputfile);
458 
459 
460 
461  rootoutputfile=new TFile(rootoutputfilename.Data(),"RECREATE");
462  rootoutputfile->cd();
463 
464 
465  for(Int_t s=0;s<6;s++)
466  {
467  for(Int_t m=0; m<4; m++)
468  {
469  for(Int_t mbo=0; mbo<16; mbo++)
470  {
471  if((histtime1b[s][m][mbo]->GetEntries())>0)
472  {
473  histtime1b[s][m][mbo]->Write();
474  }
475  if(histtime1g[s][m][mbo]->GetEntries()>0)
476  {
477  histtime1g[s][m][mbo]->Write();
478  }
479  if(histtime2b[s][m][mbo]->GetEntries()>0)
480  {
481  histtime2b[s][m][mbo]->Write();
482  }
483  if(histtime2g[s][m][mbo]->GetEntries()>0)
484  {
485  histtime2g[s][m][mbo]->Write();
486  }
487  }
488  }
489  }
490 
491  rootoutputfile->Save();
492  rootoutputfile->Close();
493  }
494 
495  return kTRUE;
496 
497 }
498 
499 
const Cat_t catMdcRaw
Definition: hmdcdef.h:5
Int_t getTriggerType(void)
Int_t countersavedtime1[6][4][16]
Definition: hevent.h:17
TString asciioutputfilename
Int_t getBitFlipCorParameter(Int_t s, Int_t m, Int_t mbo, Int_t v)
Bool_t reinit(void)
TH1F * histtime1g[6][4][16]
Int_t execute(void)
TH1F * histtime2b[6][4][16]
Int_t getTime(const Int_t n) const
Definition: hmdcraw.cc:155
Bool_t finalize(void)
TH1F * histtime2g[6][4][16]
HLocation loc
pointer to raw data word
HRuntimeDb * getRuntimeDb(void)
Definition: hades.h:111
HEvent *& getCurrentEvent(void)
Definition: hades.cc:422
Char_t name[300]
histrogram title
HRuntimeDb * rtdb
Char_t title[300]
Bool_t setTimeNew(const Int_t time, const Int_t nrtime)
Definition: hmdcraw.cc:171
Char_t ytitle[300]
histogram xaxis title
void setTimeShift(const Int_t sh, const Int_t nsh)
Definition: hmdcrawcor.h:56
HCategory * catmHMdcRawEventHeader
seg iterator
const Cat_t catMdcRawEventHeader
Definition: hmdcdef.h:12
TH1F * histtime1b[6][4][16]
histogram zaxis title
HSpectrometer * getSetup(void)
Definition: hades.h:112
Int_t paramsbitcorrection[6][4][16][9]
ClassImp(HMdcBitFlipCor) HMdcBitFlipCor
HIterator * mdcrawiter
seg data level
HMdcRawCor * rawcor
pointer to the raw data
void setAddress(const Int_t s, const Int_t m, const Int_t mb, const Int_t t)
Definition: hmdcrawcor.h:42
HMdcRaw * mdcraw
HMdcSeg Category.
Hades * gHades
Definition: hades.cc:1213
Int_t getFlagRaw(void)
Definition: hmdcrawcor.h:53
Bool_t fparamsbitcorrection()
HParSet * getContainer(const Text_t *)
Definition: hruntimedb.cc:124
TFile * rootoutputfile
Int_t counterevents[6][4][16]
Bool_t init(void)
HMdcRawEventHeader * rawREH
HMdcSeg Category.
HIterator * iterREH
seg data level
const Cat_t catMdcRawCor
Definition: hmdcdef.h:16
void setAsciiOutputFilename(TString)
HCategory * catmHMdcRaw
virtual HCategory * getCategory(Cat_t aCat)=0
void getParameterContainers()
Char_t xtitle[300]
histogram name
Int_t countersavedtime2[6][4][16]
void getAddress(Int_t &s, Int_t &m, Int_t &mb, Int_t &t)
Definition: hmdcraw.h:73
void setRootOutputFilename(TString)
void setFlagRaw(const Int_t f)
Definition: hmdcrawcor.h:49
HCategory * rawcorCat
seg iterator
TString rootoutputfilename
FILE * asciioutputfile
HMdcBitFlipCorPar * fMdcBitFlipCorPar
location for new object.