CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiPixelRecHitModule.cc
Go to the documentation of this file.
6 // STL
7 #include <vector>
8 #include <memory>
9 #include <string>
10 #include <iostream>
11 #include <stdlib.h>
12 
13 // Data Formats
20 //
21 // Constructors
22 //
26  id_(id)
27 {
28 }
29 
30 //
31 // Destructor
32 //
34 //
35 // Book histograms
36 //
38  bool twoD, bool reducedSet, bool isUpgrade) {
39 
40  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
41  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
42  bool isHalfModule = false;
43  if(barrel){
44  if (!isUpgrade) {
45  isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule();
46  } else if (isUpgrade) {
47  isHalfModule = PixelBarrelNameUpgrade(DetId(id_)).isHalfModule();
48  }
49  }
50 
51  std::string hid;
52  // Get collection name and instantiate Histo Id builder
53  edm::InputTag src = iConfig.getParameter<edm::InputTag>( "src" );
54  // Get DQM interface
55  DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
56 
57 
58  if(type==0){
59  SiPixelHistogramId* theHistogramId = new SiPixelHistogramId( src.label() );
60  if(!reducedSet)
61  {
62  if(twoD){
63  // XYPosition
64  hid = theHistogramId->setHistoId("xypos",id_);
65  meXYPos_ = theDMBE->book2D(hid,"XY Position",100,-1.,1,100,-4,4);
66  meXYPos_->setAxisTitle("X Position",1);
67  meXYPos_->setAxisTitle("Y Position",2);
68  }
69  else{
70  // projections of XYPosition
71  hid = theHistogramId->setHistoId("xypos",id_);
72  meXYPos_px_ = theDMBE->book1D(hid+"_px","X Position",100,-1.,1);
73  meXYPos_px_->setAxisTitle("X Position",1);
74  meXYPos_py_ = theDMBE->book1D(hid+"_py","Y Position",100,-4,4);
75  meXYPos_py_->setAxisTitle("Y Position",1);
76  }
77  }
78  hid = theHistogramId->setHistoId("ClustX",id_);
79  meClustX_ = theDMBE->book1D(hid, "RecHit X size", 10, 0., 10.);
80  meClustX_->setAxisTitle("RecHit size X dimension", 1);
81  hid = theHistogramId->setHistoId("ClustY",id_);
82  meClustY_ = theDMBE->book1D(hid, "RecHit Y size", 15, 0., 15.);
83  meClustY_->setAxisTitle("RecHit size Y dimension", 1);
84 
85  hid = theHistogramId->setHistoId("ErrorX",id_);
86  meErrorX_ = theDMBE->book1D(hid, "RecHit error X", 100,0.,0.02);
87  meErrorX_->setAxisTitle("RecHit error X", 1);
88  hid = theHistogramId->setHistoId("ErrorY",id_);
89  meErrorY_ = theDMBE->book1D(hid, "RecHit error Y", 100,0.,0.02);
90  meErrorY_->setAxisTitle("RecHit error Y", 1);
91 
92  //Removed to save offline memory
93  //hid = theHistogramId->setHistoId("nRecHits",id_);
94  //menRecHits_ = theDMBE->book1D(hid, "# of rechits in this module", 8, 0, 8);
95  //menRecHits_->setAxisTitle("number of rechits",1);
96  delete theHistogramId;
97  }
98 
99  if(type==1 && barrel){
100  uint32_t DBladder;
101  if (!isUpgrade) { DBladder = PixelBarrelName(DetId(id_)).ladderName(); }
102  else { DBladder = PixelBarrelNameUpgrade(DetId(id_)).ladderName(); }
103  char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
104  hid = src.label() + "_" + sladder;
105  if(isHalfModule) hid += "H";
106  else hid += "F";
107  if(!reducedSet)
108  {
109  if(twoD){
110  meXYPosLad_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
111  meXYPosLad_->setAxisTitle("X Position",1);
112  meXYPosLad_->setAxisTitle("Y Position",2);
113  }
114  else{
115  // projections of XYPosition
116  meXYPosLad_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
117  meXYPosLad_px_->setAxisTitle("X Position",1);
118  meXYPosLad_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
119  meXYPosLad_py_->setAxisTitle("Y Position",1);
120  }
121  }
122  meClustXLad_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
123  meClustXLad_->setAxisTitle("RecHit size X dimension", 1);
124  meClustYLad_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
125  meClustYLad_->setAxisTitle("RecHit size Y dimension", 1);
126  meErrorXLad_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
127  meErrorXLad_->setAxisTitle("RecHit error X", 1);
128  meErrorYLad_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
129  meErrorYLad_->setAxisTitle("RecHit error Y", 1);
130  menRecHitsLad_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
131  menRecHitsLad_->setAxisTitle("number of rechits",1);
132 
133  }
134 
135  if(type==2 && barrel){
136 
137  uint32_t DBlayer;
138  if (!isUpgrade) { DBlayer = PixelBarrelName(DetId(id_)).layerName(); }
139  else { DBlayer = PixelBarrelNameUpgrade(DetId(id_)).layerName(); }
140  char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
141  hid = src.label() + "_" + slayer;
142 
143  if(!reducedSet)
144  {
145  if(twoD){
146  meXYPosLay_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
147  meXYPosLay_->setAxisTitle("X Position",1);
148  meXYPosLay_->setAxisTitle("Y Position",2);
149  }
150  else{
151  // projections of XYPosition
152  meXYPosLay_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
153  meXYPosLay_px_->setAxisTitle("X Position",1);
154  meXYPosLay_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
155  meXYPosLay_py_->setAxisTitle("Y Position",1);
156  }
157  }
158 
159  meClustXLay_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
160  meClustXLay_->setAxisTitle("RecHit size X dimension", 1);
161  meClustYLay_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
162  meClustYLay_->setAxisTitle("RecHit size Y dimension", 1);
163  meErrorXLay_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
164  meErrorXLay_->setAxisTitle("RecHit error X", 1);
165  meErrorYLay_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
166  meErrorYLay_->setAxisTitle("RecHit error Y", 1);
167  menRecHitsLay_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
168  menRecHitsLay_->setAxisTitle("number of rechits",1);
169 
170  }
171 
172  if(type==3 && barrel){
173  uint32_t DBmodule;
174  if (!isUpgrade) { DBmodule = PixelBarrelName(DetId(id_)).moduleName(); }
175  else { DBmodule = PixelBarrelNameUpgrade(DetId(id_)).moduleName(); }
176  char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
177  hid = src.label() + "_" + smodule;
178 
179  if(!reducedSet)
180  {
181  if(twoD){
182  meXYPosPhi_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
183  meXYPosPhi_->setAxisTitle("X Position",1);
184  meXYPosPhi_->setAxisTitle("Y Position",2);
185  }
186  else{
187  // projections of XYPosition
188  meXYPosPhi_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
189  meXYPosPhi_px_->setAxisTitle("X Position",1);
190  meXYPosPhi_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
191  meXYPosPhi_py_->setAxisTitle("Y Position",1);
192  }
193  }
194  meClustXPhi_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
195  meClustXPhi_->setAxisTitle("RecHit size X dimension", 1);
196  meClustYPhi_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
197  meClustYPhi_->setAxisTitle("RecHit size Y dimension", 1);
198  meErrorXPhi_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
199  meErrorXPhi_->setAxisTitle("RecHit error X", 1);
200  meErrorYPhi_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
201  meErrorYPhi_->setAxisTitle("RecHit error Y", 1);
202  menRecHitsPhi_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
203  menRecHitsPhi_->setAxisTitle("number of rechits",1);
204 
205  }
206 
207  if(type==4 && endcap){
208  uint32_t blade;
209  if (!isUpgrade) { blade= PixelEndcapName(DetId(id_)).bladeName(); }
210  else { blade= PixelEndcapNameUpgrade(DetId(id_)).bladeName(); }
211 
212  char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
213  hid = src.label() + "_" + sblade;
214 // meXYPosBlade_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
215 // meXYPosBlade_->setAxisTitle("X Position",1);
216 // meXYPosBlade_->setAxisTitle("Y Position",2);
217 
218  meClustXBlade_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
219  meClustXBlade_->setAxisTitle("RecHit size X dimension", 1);
220  meClustYBlade_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
221  meClustYBlade_->setAxisTitle("RecHit size Y dimension", 1);
222  meErrorXBlade_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
223  meErrorXBlade_->setAxisTitle("RecHit error X", 1);
224  meErrorYBlade_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
225  meErrorYBlade_->setAxisTitle("RecHit error Y", 1);
226  menRecHitsBlade_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
227  menRecHitsBlade_->setAxisTitle("number of rechits",1);
228 
229  }
230  if(type==5 && endcap){
231  uint32_t disk;
232  if (!isUpgrade) { disk = PixelEndcapName(DetId(id_)).diskName(); }
233  else { disk = PixelEndcapNameUpgrade(DetId(id_)).diskName(); }
234 
235  char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
236  hid = src.label() + "_" + sdisk;
237 // meXYPosDisk_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
238 // meXYPosDisk_->setAxisTitle("X Position",1);
239 // meXYPosDisk_->setAxisTitle("Y Position",2);
240 
241  meClustXDisk_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
242  meClustXDisk_->setAxisTitle("RecHit size X dimension", 1);
243  meClustYDisk_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
244  meClustYDisk_->setAxisTitle("RecHit size Y dimension", 1);
245  meErrorXDisk_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
246  meErrorXDisk_->setAxisTitle("RecHit error X", 1);
247  meErrorYDisk_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
248  meErrorYDisk_->setAxisTitle("RecHit error Y", 1);
249  menRecHitsDisk_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
250  menRecHitsDisk_->setAxisTitle("number of rechits",1);
251 
252  }
253 
254  if(type==6 && endcap){
255  uint32_t panel;
256  uint32_t module;
257  if (!isUpgrade) {
258  panel= PixelEndcapName(DetId(id_)).pannelName();
260  } else {
263  }
264 
265  char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
266  hid = src.label() + "_" + slab;
267 
268  if(!reducedSet)
269  {
270  if(twoD){
271  meXYPosRing_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
272  meXYPosRing_->setAxisTitle("X Position",1);
273  meXYPosRing_->setAxisTitle("Y Position",2);
274  }
275  else{
276  // projections of XYPosition
277  meXYPosRing_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
278  meXYPosRing_px_->setAxisTitle("X Position",1);
279  meXYPosRing_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
280  meXYPosRing_py_->setAxisTitle("Y Position",1);
281  }
282  }
283  meClustXRing_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
284  meClustXRing_->setAxisTitle("RecHit size X dimension", 1);
285  meClustYRing_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
286  meClustYRing_->setAxisTitle("RecHit size Y dimension", 1);
287  meErrorXRing_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
288  meErrorXRing_->setAxisTitle("RecHit error X", 1);
289  meErrorYRing_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
290  meErrorYRing_->setAxisTitle("RecHit error Y", 1);
291  menRecHitsRing_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
292  menRecHitsRing_->setAxisTitle("number of rechits",1);
293 
294  }
295 
296 }
297 //
298 // Fill histograms
299 //
300 void SiPixelRecHitModule::fill(const float& rechit_x, const float& rechit_y,
301  const int& sizeX, const int& sizeY,
302  const float& lerr_x, const float& lerr_y,
303  bool modon, bool ladon, bool layon, bool phion,
304  bool bladeon, bool diskon, bool ringon,
305  bool twoD, bool reducedSet) {
306 
307  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
308  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
309 
310  //std::cout << rechit_x << " " << rechit_y << " " << sizeX << " " << sizeY << std::endl;
311  if(modon){
312  meClustX_->Fill(sizeX);
313  meClustY_->Fill(sizeY);
314  meErrorX_->Fill(lerr_x);
315  meErrorY_->Fill(lerr_y);
316  if(!reducedSet)
317  {
318  if(twoD) meXYPos_->Fill(rechit_x, rechit_y);
319  else {
320  meXYPos_px_->Fill(rechit_x);
321  meXYPos_py_->Fill(rechit_y);
322  }
323  }
324  }
325  //std::cout<<"number of detector units="<<numberOfDetUnits<<std::endl;
326 
327  if(ladon && barrel){
328  meClustXLad_->Fill(sizeX);
329  meClustYLad_->Fill(sizeY);
330  meErrorXLad_->Fill(lerr_x);
331  meErrorYLad_->Fill(lerr_y);
332  if(!reducedSet)
333  {
334  if(twoD) meXYPosLad_->Fill(rechit_x, rechit_y);
335  else{
336  meXYPosLad_px_->Fill(rechit_x);
337  meXYPosLad_py_->Fill(rechit_y);
338  }
339  }
340  }
341 
342  if(layon && barrel){
343  meClustXLay_->Fill(sizeX);
344  meClustYLay_->Fill(sizeY);
345  meErrorXLay_->Fill(lerr_x);
346  meErrorYLay_->Fill(lerr_y);
347  if(!reducedSet)
348  {
349  if(twoD) meXYPosLay_->Fill(rechit_x, rechit_y);
350  else{
351  meXYPosLay_px_->Fill(rechit_x);
352  meXYPosLay_py_->Fill(rechit_y);
353  }
354  }
355  }
356 
357  if(phion && barrel){
358  meClustXPhi_->Fill(sizeX);
359  meClustYPhi_->Fill(sizeY);
360  meErrorXPhi_->Fill(lerr_x);
361  meErrorYPhi_->Fill(lerr_y);
362  if(!reducedSet)
363  {
364  if(twoD) meXYPosPhi_->Fill(rechit_x, rechit_y);
365  else{
366  meXYPosPhi_px_->Fill(rechit_x);
367  meXYPosPhi_py_->Fill(rechit_y);
368  }
369  }
370  }
371 
372  if(bladeon && endcap){
373  //meXYPosBlade_->Fill(rechit_x, rechit_y);
374  meClustXBlade_->Fill(sizeX);
375  meClustYBlade_->Fill(sizeY);
376  meErrorXBlade_->Fill(lerr_x);
377  meErrorYBlade_->Fill(lerr_y);
378  }
379 
380  if(diskon && endcap){
381  //meXYPosDisk_->Fill(rechit_x, rechit_y);
382  meClustXDisk_->Fill(sizeX);
383  meClustYDisk_->Fill(sizeY);
384  meErrorXDisk_->Fill(lerr_x);
385  meErrorYDisk_->Fill(lerr_y);
386  }
387 
388  if(ringon && endcap){
389  meClustXRing_->Fill(sizeX);
390  meClustYRing_->Fill(sizeY);
391  meErrorXRing_->Fill(lerr_x);
392  meErrorYRing_->Fill(lerr_y);
393  if(!reducedSet)
394  {
395  if(twoD) meXYPosRing_->Fill(rechit_x, rechit_y);
396  else{
397  meXYPosRing_px_->Fill(rechit_x);
398  meXYPosRing_py_->Fill(rechit_y);
399  }
400  }
401  }
402 }
403 
404 void SiPixelRecHitModule::nfill(const int& nrec, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon) {
405 
406  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
407  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
408 
409  //if(modon) menRecHits_->Fill(nrec);
410  //barrel
411  if(ladon && barrel) menRecHitsLad_->Fill(nrec);
412  if(layon && barrel) menRecHitsLay_->Fill(nrec);
413  if(phion && barrel) menRecHitsPhi_->Fill(nrec);
414  //endcap
415  if(bladeon && endcap) menRecHitsBlade_->Fill(nrec);
416  if(diskon && endcap) menRecHitsDisk_->Fill(nrec);
417  if(ringon && endcap) menRecHitsRing_->Fill(nrec);
418 }
int plaquetteName() const
plaquetteId (in pannel)
MonitorElement * menRecHitsLay_
type
Definition: HCALResponse.h:21
T getParameter(std::string const &) const
MonitorElement * meXYPosPhi_px_
MonitorElement * meClustYRing_
MonitorElement * meClustXLay_
MonitorElement * meXYPosPhi_
void nfill(const int &nrec, bool modon=true, bool ladon=false, bool layon=false, bool phion=false, bool bladeon=false, bool diskon=false, bool ringon=false)
MonitorElement * meXYPosPhi_py_
MonitorElement * meErrorXDisk_
MonitorElement * meClustYPhi_
SiPixelRecHitModule()
Default constructor.
int moduleName() const
module id (index in z)
MonitorElement * meXYPosLay_py_
MonitorElement * meClustXDisk_
MonitorElement * meClustYDisk_
MonitorElement * meErrorY_
MonitorElement * meErrorYRing_
bool isHalfModule() const
full or half module
~SiPixelRecHitModule()
Destructor.
MonitorElement * meClustXLad_
MonitorElement * meErrorYPhi_
int plaquetteName() const
plaquetteId (in pannel)
MonitorElement * meXYPosRing_px_
MonitorElement * meXYPosLay_
MonitorElement * meErrorXLad_
MonitorElement * meClustX_
void Fill(long long x)
MonitorElement * meClustXBlade_
MonitorElement * meClustXPhi_
MonitorElement * meXYPosLad_px_
int bladeName() const
blade id
MonitorElement * meErrorXBlade_
bool isHalfModule() const
full or half module
MonitorElement * meXYPosRing_
MonitorElement * meErrorYLad_
MonitorElement * menRecHitsRing_
MonitorElement * meXYPosLay_px_
int bladeName() const
blade id
MonitorElement * meClustXRing_
MonitorElement * meXYPos_py_
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
MonitorElement * meErrorYLay_
MonitorElement * meXYPos_
int diskName() const
disk id
std::string setHistoId(std::string variable, uint32_t &rawId)
Set Histogram Id.
Definition: DetId.h:18
int ladderName() const
ladder id (index in phi)
int ladderName() const
ladder id (index in phi)
void book(const edm::ParameterSet &iConfig, int type=0, bool twoD=true, bool reducedSet=false, bool isUpgrade=false)
Book histograms.
MonitorElement * meXYPosLad_
int moduleName() const
module id (index in z)
int layerName() const
layer id
MonitorElement * meErrorYDisk_
MonitorElement * menRecHitsDisk_
std::string const & label() const
Definition: InputTag.h:42
MonitorElement * meErrorX_
MonitorElement * menRecHitsPhi_
int pannelName() const
pannel id
MonitorElement * menRecHitsLad_
MonitorElement * meClustYLad_
MonitorElement * meClustY_
MonitorElement * meXYPosRing_py_
int diskName() const
disk id
int pannelName() const
pannel id
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * meXYPosLad_py_
MonitorElement * meErrorXLay_
int layerName() const
layer id
MonitorElement * menRecHitsBlade_
MonitorElement * meClustYBlade_
void fill(const float &rechit_x, const float &rechit_y, const int &sizeX, const int &sizeY, const float &lerr_x, const float &lerr_y, bool modon=true, bool ladon=false, bool layon=false, bool phion=false, bool bladeon=false, bool diskon=false, bool ringon=false, bool twoD=true, bool reducedSet=false)
Fill histograms.
MonitorElement * meClustYLay_
MonitorElement * meXYPos_px_
MonitorElement * meErrorXRing_
MonitorElement * meErrorYBlade_
MonitorElement * meErrorXPhi_