HARPO  5.1.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HarpoAnalyseVertex.cxx
Go to the documentation of this file.
1 //
2 // File HarpoAnalyseVertex.cxx
3 //
11 #include "HarpoAnalyseVertex.h"
12 #include "HarpoConfig.h"
13 #include "HarpoDetSet.h"
14 #include "HarpoDebug.h"
15 #include "HarpoDccEvent.h"
16 #include "Pmm2Event.h"
17 #include "HarpoEvent.h"
18 #include "HarpoRecoEvent.h"
19 
20 #include "TFile.h"
21 #include "TStyle.h"
22 #include "TCanvas.h"
23 #include "TLatex.h"
24 #include "TGraph.h"
25 #include "TF1.h"
26 #include "TMath.h"
27 #include "TSystem.h"
28 
29 #include <cstdlib>
30 #include <cstring>
31 #include <cassert>
32 #include <fstream>
33 #include <iostream>
34 
35 ClassImp(HarpoAnalyseVertex);
36 
38  {
39  unsigned int nd; // number of detectors
41 
42  assert(hdr != NULL);
43  hdr->print();
44 
45  for (nd = 0; nd < gkNDetectors; nd++) {
46  // if (fEvt->isdataExist(nd)) {
47  HarpoDccMap *plane = fEvt->GetDccMap(nd);
48  if (plane != NULL )plane->print();
49  }
50  }
51 
53 {
54  // Bool_t drawEvent = kFALSE;
55  nEvents++;
56  if (!gHDetSet->isExist(XDCC)) return;
57  if (!gHDetSet->isExist(YDCC)) return;
58  // Process RAW data
61  if ( mX == NULL ) return;
62  if ( mY == NULL ) return;
63 
64  Int_t i2 = 0;
65  Double_t qTotX3 = 0, qTotY3 = 0;
66  Double_t meanX3 = 0, meanY3 = 0;
67  Double_t meanXevt = 0, meanYevt = 0;
68 
69  Int_t triggerType = -1;
70  if(gHDetSet->isExist(PMM2)) {
71  Pmm2Event *anaEvt = static_cast<Pmm2Event *>(fEvt->GetDetEvent(PMM2));
72  triggerType = anaEvt->GetTriggerType();
73  }
74  Float_t data[7];
75  for(Int_t i = 0; i<7; i++) data[i] = -1000;
76  data[0] = triggerType;
77 
78  for(Int_t i=0;i<NADC;i++){ //Time bins
79  Double_t qTotX = 0, qTotY = 0;
80  Double_t meanX = 0, meanY = 0;
81  for(Int_t j=0;j<NCHAN;j++){ // Channels
82  Double_t qX = mX->GetData(j,i);
83  Double_t qY = mY->GetData(j,i);
84  if(qX > 0){
85  qTotX += qX;
86  meanX += j*qX;
87  qTotX3 += qX;
88  meanX3 += j*qX;
89  }
90  if(qY > 0){
91  qTotY += qY;
92  meanY += j*qY;
93  qTotY3 += qY;
94  meanY3 += j*qY;
95  }
96  }
97  if(qTotX*qTotY == 0) continue;
98  meanX /= qTotX;
99  meanY /= qTotY;
100  if(i2 == 2){
101  meanXevt = meanX3/qTotX3;
102  meanYevt = meanY3/qTotY3;
103  //gVertex->SetPoint(gVertex->GetN(),i-1,meanXevt,meanYevt);
104  data[1] = i-1;
105  data[2] = meanXevt;
106  data[3] = meanYevt;
107  if(i>=150) hVertex2->Fill(meanXevt,meanYevt);
108  if(TMath::Abs(meanXevt-144)>10) break;
109  if(TMath::Abs(meanYevt-144)>10) break;
110  }
111  i2++;
112  if(i<150 && i2>2) break;
113  // if(i2>kNhist) break;
114  if(i2 == 3){
115  // gVertex2->SetPoint(gVertex2->GetN(),i-1,meanXevt,meanYevt);
116  data[4] = i-1;
117  data[5] = meanXevt;
118  data[6] = meanYevt;
119 
120  Double_t xMin = 400, yMin = 400, xMax = -1, yMax = -1;
121  for(Int_t J=0;J<NCHAN;J++){ // Channels
122  Double_t qXch = 0, qYch = 0;
123  for(Int_t I=i-1;I<i+100 && I<NADC;I++){ //Time bins
124  Double_t qX = mX->GetData(J,I);
125  Double_t qY = mY->GetData(J,I);
126  if(qX > 0)
127  qXch += qX;
128  if(qY > 0)
129  qYch += qY;
130  }
131  if(qXch>1000 && J<xMin) xMin = J;
132  if(qYch>1000 && J<yMin) yMin = J;
133  if(qXch>1000 && J>xMax) xMax = J;
134  if(qYch>1000 && J>yMax) yMax = J;
135  }
136  //std::cout << xMin << " " << yMin << " " << xMax << " " <<yMax << std::endl;
137  Double_t widthX = xMax-xMin+1;
138  Double_t widthY = yMax-yMin+1;
139  hWidthXvsY->Fill(widthX,widthY);
140  if(widthX > 1 && widthY > 1){
141  hWidthRatio->Fill(widthX/widthY);
142  hWidthRatioLog->Fill(TMath::Log(widthX/widthY));
143  }
144  }
145  // for(Int_t jX=0;jX<NCHAN;jX++){ // Channels
146  // Double_t qX = mX->GetData(jX,i);
147  // if(qX <= 0) continue;
148  // qX /= qTotX;
149  // for(Int_t jY=0;jY<NCHAN;jY++){ // Channels
150  // Double_t qY = mY->GetData(jY,i);
151  // if(qY <= 0) continue;
152  // qY /= qTotY;
153  // if(i2-1<kNhist)
154  // hVertex[i2-1]->Fill(jX-meanX,jY-meanY,qX*qY);
155  // }
156  // }
157 
158 
159  }
160 
161 
162  fNtuple->Fill(data);
163 
164 
165 }
166 
168  {
169 
170  fNtuple = new TNtuple("fNtuple","vertex data","trigger:T:X:Y:T2:X2:Y2");
171  fNtuple->SetDirectory(0);
172 
173  hVertex2 = new TH2F("hVertex",";X;Y",576,0,288,576,0,288);
174 
175  hWidthRatio = new TH1F("hWidthRatio","",1000,0,10);
176  hWidthRatioLog = new TH1F("hWidthRatioLog","",1000,-2,2);
177 
178  hWidthXvsY = new TH2F("hWidthXvsY",";w_{X};w_{Y};",288,0,288,288,0,288);
179  }
180 
181 void HarpoAnalyseVertex::Save(char * /* mode */)
182  {
183 
184  /* TFile *hf = */ OpenHistFile("vertex");
185 
186  // Save histograms here
187  hVertex2->Write();
188 
189 
190  fNtuple->Write("fNtuple");
191  hWidthRatio->Write();
192  hWidthRatioLog->Write();
193  hWidthXvsY->Write();
194 
195 
196  }
197 
Dcc Plane Y.
Definition: HarpoDet.h:20
#define NCHAN
Definition: HarpoDccMap.h:16
Dummy analysis to run as test and example. Give basic histograms of the data.
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
virtual void print()
FullEvent Header not scecific to the detectors The class is ....
Int_t GetTriggerType()
Definition: Pmm2Event.h:29
virtual void print()
TFile * OpenHistFile(const char *ananame)
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
HarpoDetEvent * GetDetEvent(Long_t plane=XDCC)
Definition: HarpoEvent.cxx:93
#define NADC
Definition: HarpoDccMap.h:18
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
HarpoEventHeader * GetHeader()
Definition: HarpoEvent.cxx:80
HarpoEvent * fEvt
Definition: HarpoAnalyse.h:70
ULong_t nEvents
Definition: HarpoAnalyse.h:75
void Save(char *mode=NULL)
void print()
Overloaded method which do all job.
const ULong_t gkNDetectors
Definition: HarpoDet.h:14
HarpoDccMap * GetDccMap(Long_t plane=XDCC)
Definition: HarpoEvent.cxx:108
R__EXTERN HarpoDetSet * gHDetSet
Definition: HarpoDetSet.h:71