HARPO  5.1.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HarpoAnalyseTriggerTime.cxx
Go to the documentation of this file.
1 //
2 // File HarpoAnalyseTriggerTime.cxx
3 //
12 #include "HarpoConfig.h"
13 #include "HarpoDetSet.h"
14 #include "HarpoDebug.h"
15 #include "HarpoDccEvent.h"
16 #include "Pmm2Event.h"
17 #include "Pmm2Header.h"
18 #include "HarpoEvent.h"
19 #include "HarpoRecoEvent.h"
20 
21 #include "TFile.h"
22 #include "TStyle.h"
23 #include "TCanvas.h"
24 #include "TLatex.h"
25 #include "TGraph.h"
26 #include "TF1.h"
27 #include "TMath.h"
28 #include "TRandom.h"
29 #include "TSystem.h"
30 #include "MakeNiceHisto.h"
31 
32 #include <cstdlib>
33 #include <cstring>
34 #include <cassert>
35 #include <fstream>
36 #include <iostream>
37 
38 using namespace std;
39 ClassImp(HarpoAnalyseTriggerTime);
40 
42  {
43  unsigned int nd; // number of detectors
44  HarpoEventHeader *hdr = fEvt->GetHeader();
45 
46  assert(hdr != NULL);
47  hdr->print();
48 
49  for (nd = 0; nd < gkNDetectors; nd++) {
50  // if (fEvt->isdataExist(nd)) {
51  HarpoDccMap *plane = fEvt->GetDccMap(nd);
52  if (plane != NULL )plane->print();
53  }
54  }
55 
57 {
58  // Bool_t drawEvent = kFALSE;
59  nEvents++;
60 
61  if(!gHDetSet->isExist(PMM2)) return;
62  Fill();
63 }
64 
65 
67 {
68  Int_t i;
69  for(i=0;i<kNtriggerTypes;i++){
70  hdelta_t[i]= new TH1F(Form("hdelta_t[%d]",i),";#delta_{t}[ms];",1000,0.,200.);
71  hdelta_t[i]->SetStats(0);
72  fNevtTr[i]=0;
73  }
74 
75 h1dtUnkOther= new TH1F("h1dtUnkOther",";#delta_{t}[ms];",1000,0.,200.);
76 h1dtUnkOther->SetStats(0);
77 h1dtTwoOther= new TH1F("h1dtTwoOther",";#delta_{t}[ms];",1000,0.,200.);
78 h1dtTwoOther->SetStats(0);
79 
80  h2CorrVsFit= new TH2F("h2CorrVsFit",";;#tau/#tau';",16,-2,14,5,-5,5);
81  h2CorrVsFit->SetStats(0);
82  fTimestampOld = 0.;
83  t0 = 0.;
84  fTriggerOld = -2;
85 
86  fTree = new TTree("data","Harpo data");
87  fTree ->Branch("fAlignmentX",&fAlignmentX,"fAlignmentX/D");
88  fTree ->Branch("fAlignmentY",&fAlignmentY,"fAlignmentY/D");
89  fTree ->Branch("fAlignmentZ",&fAlignmentZ,"fAlignmentZ/D");
90  fTree ->Branch("ftriggerType",&ftriggerType,"ftriggerType/I");
91  fTree->Branch("fTimeStamp", &fTimeStamp,"fTimeStamp/D");
92  fTree ->Branch("fQx",&fQx,"fQx/I");
93  fTree ->Branch("fQy",&fQy,"fQy/I");
94 
95  fTree->Branch("fRateFit", &fRateFit,"fRateFit/D");
96  fTree->Branch("fRateCal", &fRateCal,"fRateCal/D");
97 
98  fTree->Branch("fRateFitNoUp", &fRateFitNoUp,"fRateFitNoUp/D");
99  fTree->Branch("fRateCalNoUp", &fRateCalNoUp,"fRateCalNoUp/D");
100  fTree->Branch("fRateFitNoL", &fRateFitNoL,"fRateFitNoL/D");
101  fTree->Branch("fRateCalNoL", &fRateCalNoL,"fRateCalNoL/D");
102  fTree->Branch("fRateFitTTZ", &fRateFitTTZ,"fRateFitTTZ/D");
103  fTree->Branch("fRateCalTTZ", &fRateCalTTZ,"fRateCalTTZ/D");
104 
105  fTree ->SetDirectory(0);
106 
107 
108 
109  //fTriggerCorr = -1;
110 }
111 
112 
114 {
115 
116  Double_t TimeStamp = fEvt->GetTimeStamp();
117 
118  if(nEvents==1){
119  t0 = TimeStamp;
120  Pmm2Header* pmm2Hdr = (Pmm2Header*)fRunHeader->GetHeader(PMM2);
121  fTriggerTimeTot = 0;
122 
123  for(Int_t i = 0; i<kNtriggerTypes; i++){
124  fTriggerTime[i] = 0;
125  fTriggerDownscaling[i] = 1;
126  if(pmm2Hdr == NULL) continue;
127  Pmm2Status* pmm2Stat = pmm2Hdr->getStatus();
128  if(pmm2Stat == NULL) continue;
129  unsigned int triggerinfo = pmm2Stat->getTrigger(i); // 32bits:
130 
131  // time (16bits * XXXms),
132  // downscaling (16bits)
133  fTriggerTime[i] = triggerinfo/65536;
134  fTriggerDownscaling[i] = triggerinfo%65536;
135  }
136 
137  for(Int_t i = 0; i<kNtriggerTypes; i++)
138  fTriggerTimeTot += fTriggerTime[i];
139  //Info("Init","TriggerTimeTot = %d", fTriggerTimeTot);
140 
141  for(Int_t i = 0; i<kNtriggerTypes; i++){
142  Double_t trigCorr = 1.;
143  fTriggerCorr[i] = 1.;
144  if(fTriggerTime[i])
145  trigCorr /= fTriggerTime[i]*1./fTriggerTimeTot;
146  if(fTriggerDownscaling[i])
147  trigCorr *= fTriggerDownscaling[i]*1.;
148  //if(fTriggerTime[i] && fTriggerDownscaling[i])
149  //trigCorr= fTriggerTime[i]/(fTriggerTimeTot*fTriggerDownscaling[i]);
150  //Info("Init","Trigger param %d %d => %g",fTriggerTime[i],fTriggerDownscaling[i],trigCorr);
151  fTriggerCorr[i]= trigCorr;
152  }
153 
154  }
155  // Int_t triggerType = -1;
156 
157  // Pmm2Event *anaEvt = static_cast<Pmm2Event *>(fEvt->GetDetEvent(PMM2));
158  // triggerType = anaEvt->GetTriggerType(); // Trigger line (with mesh, without, traversing tracks, ...)
159 
160 
161  if (!gHDetSet->isExist(XDCC)) return;
162  if (!gHDetSet->isExist(YDCC)) return;
163  // Process RAW data
164  HarpoDccMap* mX = fEvt->GetDccMap(XDCC);
165  HarpoDccMap* mY = fEvt->GetDccMap(YDCC);
166  if ( mX == NULL ) return;
167  if ( mY == NULL ) return;
168 
169  Int_t i2 = 0;
170  Double_t qTotX3 = 0, qTotY3 = 0;
171  Double_t meanX3 = 0, meanY3 = 0;
172  Double_t meanZX3 = 0, meanZY3 =0;
173  Double_t meanXevt = 0, meanYevt = 0, meanZevt=0;
174 
175  for(Int_t i=0;i<NADC;i++){ //Time bins
176  Double_t qTotX = 0, qTotY = 0;
177  Double_t meanX = 0, meanY = 0, meanZX=0, meanZY=0;
178  for(Int_t j=0;j<NCHAN;j++){ // Channels
179  Double_t qX = mX->GetData(j,i);
180  Double_t qY = mY->GetData(j,i);
181  if(qX > 0){
182  qTotX += qX;
183  meanX += j*qX;
184  qTotX3 += qX;
185  meanX3 += j*qX;
186  }
187  if(qY > 0){
188  qTotY += qY;
189  meanY += j*qY;
190  qTotY3 += qY;
191  meanY3 += j*qY;
192  }
193 
194  }
195 
196  if(qTotX*qTotY == 0) continue;
197  meanZX = i*qTotX;
198  meanZY = i*qTotY;
199  meanX /= qTotX;
200  meanY /= qTotY;
201  meanZX3+= meanZX;
202  meanZY3+= meanZY;
203 
204  if(i2 == 2){
205  meanXevt = meanX3/qTotX3;
206  meanYevt = meanY3/qTotY3;
207  meanZevt = 0.5*(meanZX3/qTotX3+meanZY3/qTotY3);
208  //meanZY3 = qTotY3;
209  // gVertex->SetPoint(gVertex->GetN(),i-1,meanXevt,meanYevt);
210  //if(i>=150) hVertex2->Fill(meanXevt,meanYevt);
211  // if(TMath::Abs(meanXevt-144)>10) break;
212  //if(TMath::Abs(meanYevt-144)>10) break;
213  }
214  i2++;
215  if(i2>kNhist) break;
216  if(i<150 && i2>2) break;
217  }
218 
219  Int_t triggerType = -1;
220  if(gHDetSet->isExist(PMM2)) {
221  //Info("process","PMM2 data");
222  Pmm2Event *anaEvt = static_cast<Pmm2Event *>(fEvt->GetDetEvent(PMM2));
223  triggerType = anaEvt->GetTriggerType();
224  }
225 
226  Int_t Qtx=0, Qty=0;
227  for(Int_t i=0;i<NADC;i++){ //Time bins
228  for(Int_t j=0;j<NCHAN;j++){ // Channels
229  if(mX->GetData(j,i)>0)
230  Qtx = Qtx + mX->GetData(j,i);
231  if(mY->GetData(j,i)>0)
232  Qty = Qty + mY->GetData(j,i);
233  }
234  }
235  fQx = Qtx;
236  fQy = Qty;
237 
238  ftriggerType=triggerType;
239  fTimeStamp= TimeStamp;
240  fAlignmentX =meanXevt;
241  fAlignmentY =meanYevt;
242  fAlignmentZ =meanZevt;
243 
244 
245  if(triggerType==-1) fNevtTr[0]++;
246  if(triggerType==0) fNevtTr[1]++;
247  if(triggerType==2) fNevtTr[2]++;
248  if(triggerType==3) fNevtTr[3]++;
249  if(triggerType==4) fNevtTr[4]++;
250 
251  if(triggerType==5) fNevtTr[5]++;
252  if(triggerType==7) fNevtTr[6]++;
253  if(triggerType==8) fNevtTr[7]++;
254 
255  if(triggerType==9) fNevtTr[8]++;
256  if(triggerType==10) fNevtTr[9]++;
257 
258  if(triggerType==11) fNevtTr[10]++;
259 
260  if(triggerType==12) fNevtTr[11]++;
261  if(triggerType==14) fNevtTr[12]++;
262 
263 
264  if(nEvents>1){
265  if(triggerType == -1 && fTriggerOld ==-1)
266  hdelta_t[0] ->Fill((TimeStamp-fTimestampOld)/100000.);
267 
268  if(triggerType==0 && fTriggerOld==0)
269  hdelta_t[1]->Fill((TimeStamp-fTimestampOld)/100000.);
270 
271  if(triggerType==2 && fTriggerOld==2)
272  hdelta_t[2]->Fill((TimeStamp-fTimestampOld)/100000.);
273 
274  if(triggerType==3 && fTriggerOld==3)
275  hdelta_t[3]->Fill((TimeStamp-fTimestampOld)/100000.);
276 
277  if(triggerType==4 && fTriggerOld==4)
278  hdelta_t[4]->Fill((TimeStamp-fTimestampOld)/100000.);
279 
280  if(triggerType==5 && fTriggerOld==5)
281  hdelta_t[5]->Fill((TimeStamp-fTimestampOld)/100000.);
282 
283  if(triggerType==7 && fTriggerOld==7)
284  hdelta_t[6]->Fill((TimeStamp-fTimestampOld)/100000.);
285 
286  if(triggerType==8 && fTriggerOld==8)
287  hdelta_t[7]->Fill((TimeStamp-fTimestampOld)/100000.);
288 
289  if(triggerType==9 && fTriggerOld==9)
290  hdelta_t[8]->Fill((TimeStamp-fTimestampOld)/100000.);
291 
292  if(triggerType==10 && fTriggerOld==10)
293  hdelta_t[9]->Fill((TimeStamp-fTimestampOld)/100000.);
294 
295  if(triggerType==11 && fTriggerOld==11)
296  hdelta_t[10]->Fill((TimeStamp-fTimestampOld)/100000.);
297 
298  if(triggerType==12 && fTriggerOld==12)
299  hdelta_t[11]->Fill((TimeStamp-fTimestampOld)/100000.);
300 
301  if(triggerType==14 && fTriggerOld==14)
302  hdelta_t[12]->Fill((TimeStamp-fTimestampOld)/100000.);
303 
304  if((triggerType==-1&&fTriggerOld!=-1)||(fTriggerOld==-1&&triggerType!=-1))
305  h1dtUnkOther->Fill((TimeStamp-fTimestampOld)/100000.);
306 
307  if(triggerType!= fTriggerOld &&triggerType!=-1 &&fTriggerOld!=-1)
308  h1dtTwoOther->Fill((TimeStamp-fTimestampOld)/100000.);
309 
310  if(nEvents%500==0) cout<<"nEvent= "<<nEvents<<endl;
311  }
312 
313  fTriggerOld = triggerType;
314  fTimestampOld = TimeStamp;
315 
316  fTree->Fill();
317 }
318 
319 
320 void HarpoAnalyseTriggerTime::Save(char * /* mode */)
321 {
322 
323 
324  Double_t ttot=(fTimestampOld - t0)/1e8;
325 
326  TF1* fExp = new TF1("fExp","expo",0.,200.);
327  fExp->SetLineColor(kRed);
328  TCanvas *tc[14];
329  for(Int_t i = 0; i<14; i++){
330  tc[i] = new TCanvas(Form("tc%d",i),"Event Map",700,500);
331  }
332 
333  for(Int_t i = 0; i<13; i++){
334  tc[i]->Divide(1,1);
335  tc[i]->cd();
336 
337  TText *tl;
338  //if(i==0) tl = new TText(0.02,0.955,Form("all TrLines: Nxt = %d; Nxn = %d; Nyt = %d; Nyn = %d", xt, bxt, yt,byt));
339  if(i==0) tl = new TText(0.2,0.9,"TrLine: Unknown");
340  if(i==1) tl = new TText(0.2,0.9,"TrLine: TTZ");
341  if(i==2) tl = new TText(0.2,0.9,"TrLine: Gamma");
342  if(i==3) tl = new TText(0.2,0.9,"TrLine: No Mesh");
343  if(i==4) tl = new TText(0.2,0.9,"TrLine: Inv Mesh");
344  if(i==5) tl = new TText(0.2,0.9,"TrLine: No Up");
345  if(i==6) tl = new TText(0.2,0.9,"TrLine: Gamma L");
346  if(i==7) tl = new TText(0.2,0.9,"TrLine: No Mesh L");
347  if(i==8) tl = new TText(0.2,0.9,"TrLine: Inv Mesh L");
348  if(i==9) tl = new TText(0.2,0.9,"TrLine: No Up L");
349  if(i==10) tl = new TText(0.2,0.9,"TrLine: No PM L");
350  if(i==11) tl = new TText(0.2,0.9,"TrLine: No L");
351  if(i==12) tl = new TText(0.2,0.9,"TrLines: Cosmic");
352 
353  tl->SetTextSize(0.04);
354  tl->Draw();
355  MakeNiceHisto(hdelta_t[i],tc[i]->GetPad(1),"");gPad->SetLogy();
356  if(hdelta_t[i]->GetMaximum()>0){
357  hdelta_t[i]->Fit(fExp);
358  Double_t A = fExp->GetParameter(0);
359  Double_t S = fExp->GetParameter(1);
360 
361  if(i==1) fRateFitTTZ = -1000*S;
362  if(i==6) fRateFit = -1000*S;
363  if(i==9) fRateFitNoUp = -1000*S;
364  if(i==11) fRateFitNoL = -1000*S;
365 
366 
367  TLatex *lmesh = new TLatex();
368  lmesh->SetTextFont(132);
369  lmesh->SetTextAlign(12);
370  lmesh->SetTextSize(0.05);
371  lmesh->SetTextColor(4);
372  lmesh->DrawLatex(100, 0.8*hdelta_t[i]->GetMaximum(),Form("F = exp[%.2f t+%.2f] ",S*1000,A));
373 
374  if(i==1){
375  lmesh->DrawLatex(100, 0.4*hdelta_t[i]->GetMaximum(),Form("taux_Corr: %.2f",fNevtTr[i]* fTriggerCorr[i-1]*1./ttot));
376  cout<<"i= "<<i-1<<" TriggerTime="<<fTriggerTime[i-1] << "N= "<<fNevtTr[i] <<" corr="<<fTriggerCorr[i-1] <<" tot="<<ttot<<endl;
377  h2CorrVsFit->Fill(i,(S*1000.*ttot)/(fNevtTr[i]*fTriggerCorr[i-1]));
378 
379  fRateCalTTZ = fNevtTr[i]* fTriggerCorr[i+1]*1./ttot;
380  }
381 
382  if(i>5){
383  lmesh->DrawLatex(100, 0.4*hdelta_t[i]->GetMaximum(),Form("taux_Corr: %.2f",fNevtTr[i]* fTriggerCorr[i+1]*1./ttot));
384 
385  if(i==6) fRateCal = fNevtTr[i]* fTriggerCorr[i+1]*1./ttot;
386  if(i==9) fRateCalNoUp = fNevtTr[i]* fTriggerCorr[i+1]*1./ttot;
387  if(i==11) fRateCalNoL = fNevtTr[i]* fTriggerCorr[i+1]*1./ttot;
388 
389  cout<<"i= "<<i<<" TriggerTime="<<fTriggerTime[i+1] << "N= "<<fNevtTr[i] <<" corr="<<fTriggerCorr[i+1] <<" tot="<<ttot<<endl;
390  // if(i==1)
391  // cout<<"i= "<<i-1<<" TriggerTime="<<fTriggerTime[i-1] << " N= "<<fNevtTr[i]<<endl;
392  // if(i==7)
393  //cout<<"i= "<<i<<" TriggerTime="<<fTriggerTime[i]<< " N= "<<fNevtTr[i-1]<<endl;
394  h2CorrVsFit->Fill(i,(-1000.*S*ttot)/(fNevtTr[i]*fTriggerCorr[i+1]));
395  }
396  }
397 
398  }
399  h2CorrVsFit->SetMarkerColor(kRed);
400  h2CorrVsFit->SetMarkerSize(40);
401  tc[13]->Divide(1,1);
402  MakeNiceHisto(h2CorrVsFit,tc[13]->GetPad(1),"");
403 
404  // tc[13]->Divide(1,1);
405  // tc[13]->cd();
406  // TText *t13;
407  // t13 = new TText(0.2,0.9,"TrLines: Unknow<->the Others");
408  // t13->SetTextSize(0.04);
409  // t13->Draw();
410  // MakeNiceHisto(h1dtUnkOther,tc[13]->GetPad(1),"");gPad->SetLogy();
411  // if(h1dtUnkOther->GetMaximum()>0){
412  // h1dtUnkOther->Fit(fExp);
413  // Double_t A = fExp->GetParameter(0);
414  // Double_t S = fExp->GetParameter(1);
415  // TLatex *lmesh = new TLatex();
416  // lmesh->SetTextFont(132);
417  // lmesh->SetTextAlign(12);
418  // lmesh->SetTextSize(0.05);
419  // lmesh->SetTextColor(4);
420  // lmesh->DrawLatex(100, 0.8*h1dtUnkOther->GetMaximum(),Form("F = exp[%.2f x+%.2f] ",S*1000,A));
421  // }
422 
423  // tc[14]->Divide(1,1);
424  // tc[14]->cd();
425  // TText *t14;
426  // t14 = new TText(0.2,0.9,"TrLines: Others(2 different trigger lines)");
427  // t14->SetTextSize(0.04);
428  // t14->Draw();
429  // MakeNiceHisto(h1dtTwoOther,tc[14]->GetPad(1),"");gPad->SetLogy();
430  // if(h1dtTwoOther->GetMaximum()>0){
431  // h1dtTwoOther->Fit(fExp);
432  // Double_t A = fExp->GetParameter(0);
433  // Double_t S = fExp->GetParameter(1);
434  // TLatex *lmesh = new TLatex();
435  // lmesh->SetTextFont(132);
436  // lmesh->SetTextAlign(12);
437  // lmesh->SetTextSize(0.05);
438  // lmesh->SetTextColor(4);
439  // lmesh->DrawLatex(100, 0.8*h1dtTwoOther->GetMaximum(),Form("F = exp[%.2f x+%.2f] ",S*1000,A));
440  // }
441 
442 
443  //<<<<<<< HEAD
444  tc[0]->SaveAs(Form("/home/wang/HarpoAnalysis/tauxR/Run%lli_TriggerTime.pdf[",gHConfig->GetRunNo()));
445  for(Int_t i = 0; i<14; i++)
446  tc[i]->SaveAs(Form("/home/wang/HarpoAnalysis/tauxR/Run%lli_TriggerTime.pdf",gHConfig->GetRunNo()));
447  tc[13]->SaveAs(Form("/home/wang/HarpoAnalysis/tauxR/Run%lli_TriggerTime.pdf]",gHConfig->GetRunNo()));
448  //=======
449  tc[0]->SaveAs(Form("/home/wang/HarpoAnalysis/taux/Run%lli_TriggerTime.pdf[",gHConfig->GetRunNo()));
450  for(Int_t i = 0; i<14; i++)
451  tc[i]->SaveAs(Form("/home/wang/HarpoAnalysis/taux/Run%lli_TriggerTime.pdf",gHConfig->GetRunNo()));
452  tc[13]->SaveAs(Form("/home/wang/HarpoAnalysis/taux/Run%lli_TriggerTime.pdf]",gHConfig->GetRunNo()));
453  //>>>>>>> 570a4a5a34c59eb712b4014a4e4885480a95f435
454 
455 
456  //TFile *hf =
457  OpenHistFile("triggertime");
458 
459  // fTree->Fill();
460 
461  fTree->Write();
462  Int_t i;
463  for(i=0;i<kNtriggerTypes;i++)
464  hdelta_t[i]->Write();
465 
466  h1dtUnkOther->Write();
467  h1dtTwoOther->Write();
468  h2CorrVsFit->Write();
469 
470 
471  // hf->Close();
472 
473 }
474 
Dcc Plane Y.
Definition: HarpoDet.h:20
Long64_t GetRunNo()
Set Run Number.
Definition: HarpoConfig.h:127
A class Pmm2Status is bits representation of pmm2 status register (0x400).
Definition: Pmm2Status.h:12
#define NCHAN
Definition: HarpoDccMap.h:16
char * GetHeader()
Double_t GetData(Int_t i, Int_t j)
Set/Get Data Cell.
Definition: HarpoDccMap.cxx:84
Bool_t isExist(ULong_t det)
Detecror date exist //! Number of Real Detectors.
Definition: HarpoDetSet.h:33
Dcc Plane X.
Definition: HarpoDet.h:19
A class hold HARPO run information.
Definition: Pmm2Header.h:17
unsigned int getTrigger(int trig) const
Definition: Pmm2Status.cxx:168
virtual void print()
FullEvent Header not scecific to the detectors The class is ....
Int_t GetTriggerType()
Definition: Pmm2Event.h:29
virtual void print()
Dummy analysis to run as test and example. Give basic histograms of the data.
unpacked dcc data The class contains the data map for DCC or Feminos The data is stored as a 2D TMatr...
Definition: HarpoDccMap.h:29
Pmm2Status * getStatus()
Definition: Pmm2Header.h:36
TVirtualPad * MakeNiceHisto(TH1 *hist, TVirtualPad *c1, const char *opt, Bool_t copy)
#define NADC
Definition: HarpoDccMap.h:18
TDirectory * OpenHistFile(Int_t run, const char *dir, const char *extra="", Int_t update=0)
Definition: HarpoTools.cxx:55
Unknown Detector.
Definition: HarpoDet.h:18
A class store HARPO raw PMM2 event buffer and header. End provide access metods to the row data...
Definition: Pmm2Event.h:19
const ULong_t gkNDetectors
Definition: HarpoDet.h:14
HarpoConfig * gHConfig
R__EXTERN HarpoDetSet * gHDetSet
Definition: HarpoDetSet.h:71