- include option to avoid multiple reconstruction of tracklets in the
[u/mrichter/AliRoot.git] / ITS / AliITSRecoParam.cxx
1 /**************************************************************************
2  * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 #include "AliITSRecoParam.h"
17
18 /* $Id$ */
19
20 ///////////////////////////////////////////////////////////////////////////////
21 //                                                                           //
22 // Class with ITS reconstruction parameters                                  //
23 // Origin: andrea.dainese@lnl.infn.it                                        //
24 //                                                                           //
25 ///////////////////////////////////////////////////////////////////////////////
26
27
28
29 ClassImp(AliITSRecoParam)
30
31 const Int_t AliITSRecoParam::fgkLayersNotToSkip[AliITSgeomTGeo::kNLayers]={0,0,0,0,0,0};
32 const Int_t AliITSRecoParam::fgkLastLayerToTrackTo=0;
33 const Int_t AliITSRecoParam::fgkMaxDetectorPerLayer=1000;
34 const Double_t AliITSRecoParam::fgkriw=80.0;
35 const Double_t AliITSRecoParam::fgkdiw=0.0053;
36 const Double_t AliITSRecoParam::fgkX0iw=30.0;
37 const Double_t AliITSRecoParam::fgkrcd=61.0;
38 const Double_t AliITSRecoParam::fgkdcd=0.0053;
39 const Double_t AliITSRecoParam::fgkX0cd=30.0;
40 const Double_t AliITSRecoParam::fgkyr=12.8;
41 const Double_t AliITSRecoParam::fgkdr=0.03;
42 const Double_t AliITSRecoParam::fgkzm=0.2;
43 const Double_t AliITSRecoParam::fgkdm=0.40;
44 const Double_t AliITSRecoParam::fgkrs=50.0;
45 const Double_t AliITSRecoParam::fgkds=0.001;
46 const Double_t AliITSRecoParam::fgkrInsideITSscreen=49.0;
47 const Double_t AliITSRecoParam::fgkrInsideSPD1=3.7;
48 const Double_t AliITSRecoParam::fgkrPipe=3.;
49 const Double_t AliITSRecoParam::fgkrInsidePipe=2.7;
50 const Double_t AliITSRecoParam::fgkrOutsidePipe=3.3;
51 const Double_t AliITSRecoParam::fgkdPipe=0.0028;
52 const Double_t AliITSRecoParam::fgkrInsideShield[2]={7.5,25.0};
53 const Double_t AliITSRecoParam::fgkrOutsideShield[2]={10.5,30.0};
54 const Double_t AliITSRecoParam::fgkdshield[2]={0.0097,0.0034};
55 const Double_t AliITSRecoParam::fgkX0shield[2]={38.6,42.0};
56 const Double_t AliITSRecoParam::fgkX0Air=21.82;
57 const Double_t AliITSRecoParam::fgkX0Be=65.19;
58 const Double_t AliITSRecoParam::fgkBoundaryWidth=0.2;
59 const Double_t AliITSRecoParam::fgkDeltaXNeighbDets=0.5;
60 const Double_t AliITSRecoParam::fgkSPDdetzlength=6.960; // 7.072-2*0.056
61 const Double_t AliITSRecoParam::fgkSPDdetxlength=1.298; // 1.410-2*0.056
62
63 //_____________________________________________________________________________
64 AliITSRecoParam::AliITSRecoParam() : AliDetectorRecoParam(),
65 fTracker(0),
66 fITSonly(kFALSE),
67 fVertexer(0),
68 fClusterFinder(0),
69 fPID(0),
70 fVtxr3DZCutWide(0.),
71 fVtxr3DRCutWide(0.),
72 fVtxr3DZCutNarrow(0.),
73 fVtxr3DRCutNarrow(0.),
74 fVtxr3DPhiCutLoose(0.),
75 fVtxr3DPhiCutTight(0.),
76 fVtxr3DDCACut(0.),
77 fMaxSnp(1.),
78 fNSigmaYLayerForRoadY(0),
79 fNSigmaRoadY(0),
80 fNSigmaZLayerForRoadZ(0),
81 fNSigmaRoadZ(0),
82 fNSigma2RoadZC(0),
83 fNSigma2RoadYC(0),
84 fNSigma2RoadZNonC(0),
85 fNSigma2RoadYNonC(0),
86 fRoadMisal(0),
87 fMaxNormChi2NonCForHypothesis(0),
88 fMaxChi2(0),
89 fMaxRoad(0),
90 fMaxChi2In(0),
91 fChi2PerCluster(0),
92 fXV(0), 
93 fYV(0),
94 fZV(0),
95 fSigmaXV(0),
96 fSigmaYV(0),
97 fSigmaZV(0),
98 fVertexCut(0),
99 fMaxDZforPrimTrk(0),
100 fMaxDZToUseConstraint(0), 
101 fMaxDforV0dghtrForProlongation(0),
102 fMaxDForProlongation(0),
103 fMaxDZForProlongation(0),
104 fMinPtForProlongation(0),
105 fAddVirtualClustersInDeadZone(kFALSE),
106 fZWindowDeadZone(0),
107 fSigmaXDeadZoneHit2(0),
108 fSigmaZDeadZoneHit2(0),
109 fXPassDeadZoneHits(0),
110 fUseTGeoInTracker(3),
111 fAllowSharedClusters(kTRUE),
112 fClusterErrorsParam(1),
113 fComputePlaneEff(kFALSE),
114 fHistoPlaneEff(kFALSE),
115 fIPlanePlaneEff(0),
116 fReadPlaneEffFromOCDB(kFALSE),
117 fMinPtPlaneEff(0),
118 fMaxMissingClustersPlaneEff(0),
119 fRequireClusterInOuterLayerPlaneEff(kFALSE),
120 fRequireClusterInInnerLayerPlaneEff(kFALSE),
121 fOnlyConstraintPlaneEff(kFALSE),
122 fExtendedEtaAcceptance(kFALSE),
123 fUseBadZonesFromOCDB(kFALSE),
124 fUseSingleBadChannelsFromOCDB(kFALSE),
125 fMinFractionOfBadInRoad(0),
126 fAllowProlongationWithEmptyRoad(kFALSE),
127 fOuterStartLayerSA(0),
128 fFactorSAWindowSizes(1.),
129 fNLoopsSA(33),
130 fMinPhiSA(0.002),
131 fMaxPhiSA(0.0145),
132 fMinLambdaSA(0.003),
133 fMaxLambdaSA(0.008),
134 fSAOnePointTracks(kFALSE),
135 fSAUseAllClusters(kFALSE),
136 fFindV0s(kTRUE),
137 fUseUnfoldingInClusterFinderSPD(kFALSE),
138 fUseUnfoldingInClusterFinderSDD(kTRUE),
139 fUseUnfoldingInClusterFinderSSD(kTRUE),
140 fUseChargeMatchingInClusterFinderSSD(kTRUE),
141 fTrackleterOnlyOneTrackletPerC2(kTRUE),
142 fTrackleterPhiWindow(0.08),
143 fTrackleterZetaWindow(1.00),
144 fTrackleterRemoveClustersFromOverlaps(kFALSE),
145 fTrackleterPhiOverlapCut(0.005),
146 fTrackleterZetaOverlapCut(0.05)
147 {
148   //
149   // constructor
150   //
151   SetName("ITS");
152   SetTitle("ITS");
153
154   SetLayersParameters();
155   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) fLayersToSkip[i]=0;
156   SetUseTGeoInTracker(3);
157   SetAllowSharedClusters(kTRUE);
158   SetFindV0s(kTRUE);
159   SetAddVirtualClustersInDeadZone(kFALSE);
160   SetUseAmplitudeInfo(kTRUE);
161   SetClusterErrorsParam(1);
162   SetClusterMisalError(0.);
163   SetVertexer3DDefaults();
164 }
165 //_____________________________________________________________________________
166 AliITSRecoParam::~AliITSRecoParam() 
167 {
168   //
169   // destructor
170   //  
171 }
172 //_____________________________________________________________________________
173 AliITSRecoParam *AliITSRecoParam::GetHighFluxParam() 
174 {
175   //
176   // make default reconstruction  parameters for hig  flux env.
177   //
178   AliITSRecoParam *param = new AliITSRecoParam();
179   param->SetVertexer3DDefaults();
180
181   param->fMaxSnp = 0.95;
182
183   param->fNSigmaYLayerForRoadY = 4.;
184   param->fNSigmaRoadY = 7.5;
185   param->fNSigmaZLayerForRoadZ = 4.;
186   param->fNSigmaRoadZ = 7.5;
187
188   param->fNSigma2RoadZC = 60.; //7.75^2
189   param->fNSigma2RoadYC = 60.; //7.75^2
190   param->fNSigma2RoadZNonC = 50.; //7.07^2
191   param->fNSigma2RoadYNonC = 50.; //7.07^2
192
193   param->fMaxChi2PerCluster[0] = 11.; //7
194   param->fMaxChi2PerCluster[1] = 12.; //5
195   param->fMaxChi2PerCluster[2] = 12.; //8
196   param->fMaxChi2PerCluster[3] = 5.;  //8
197   param->fMaxChi2PerCluster[4] = 12.; //6.5
198
199   param->fMaxNormChi2NonC[0] = 7.;
200   param->fMaxNormChi2NonC[1] = 8.;
201   param->fMaxNormChi2NonC[2] = 8.;
202   param->fMaxNormChi2NonC[3] = 11.;
203   param->fMaxNormChi2NonC[4] = 14.;
204   param->fMaxNormChi2NonC[5] = 25.;
205
206   param->fMaxNormChi2C[0] = 11.;
207   param->fMaxNormChi2C[1] = 13.;
208   param->fMaxNormChi2C[2] = 15.;
209   param->fMaxNormChi2C[3] = 18.;
210   param->fMaxNormChi2C[4] = 30.;
211   param->fMaxNormChi2C[5] = 35.;
212
213   param->fMaxNormChi2NonCForHypothesis = 7.;
214   
215   param->fMaxChi2 = 35.;
216
217   param->fMaxChi2s[0] = 25.; //40   
218   param->fMaxChi2s[1] = 25.; //40   
219   param->fMaxChi2s[2] = 25.; //40   
220   param->fMaxChi2s[3] = 25.; //40   
221   param->fMaxChi2s[4] = 40.; //40   
222   param->fMaxChi2s[5] = 50.; //40
223
224   param->fMaxRoad = 6.;
225
226   // not used
227   param->fMaxChi2In = 16.;
228    
229   param->fMaxChi2sR[0] = 10.;   
230   param->fMaxChi2sR[1] = 10.;   
231   param->fMaxChi2sR[2] = 10.;   
232   param->fMaxChi2sR[3] = 10.;   
233   param->fMaxChi2sR[4] = 30.;   
234   param->fMaxChi2sR[5] = 40.;   
235
236   param->fChi2PerCluster = 9.;
237   // not used
238
239   param->fXV = 0.;
240   param->fYV = 0.;
241   param->fZV = 0.;
242   param->fSigmaXV = 0.0050;
243   param->fSigmaYV = 0.0050;
244   param->fSigmaZV = 0.0100;
245
246   param->fVertexCut = 25.;
247
248   param->fMaxDZforPrimTrk = 0.4;
249   param->fMaxDZToUseConstraint = 3.;
250
251   param->fMaxDforV0dghtrForProlongation = 30.;
252   param->fMaxDForProlongation = 40.;//10.;
253   param->fMaxDZForProlongation = 60.;//20.;
254   param->fMinPtForProlongation = 0.120;
255
256   param->fZWindowDeadZone = 2.0;
257   param->fSigmaXDeadZoneHit2 = 0.004/12.;
258   param->fSigmaZDeadZoneHit2 = 0.001/12.;
259   param->fXPassDeadZoneHits = 0.018;
260   
261   return param;
262 }
263 //_____________________________________________________________________________
264 AliITSRecoParam *AliITSRecoParam::GetLowFluxParam() 
265 {
266   //
267   // make default reconstruction  parameters for low  flux env.
268   //
269   AliITSRecoParam *param = new AliITSRecoParam();
270   param->SetVertexer3DDefaults();
271
272   param->fMaxSnp = 0.95;
273
274   param->fNSigmaYLayerForRoadY = 4.;
275   param->fNSigmaRoadY = 7.5;
276   param->fNSigmaZLayerForRoadZ = 4.;
277   param->fNSigmaRoadZ = 7.5;
278
279   param->fNSigma2RoadZC = 60.; //7.75^2
280   param->fNSigma2RoadYC = 60.; //7.75^2
281   param->fNSigma2RoadZNonC = 50.; //7.07^2
282   param->fNSigma2RoadYNonC = 50.; //7.07^2
283
284   param->fMaxChi2PerCluster[0] = 11.; //7
285   param->fMaxChi2PerCluster[1] = 12.; //5
286   param->fMaxChi2PerCluster[2] = 12.; //8
287   param->fMaxChi2PerCluster[3] = 5.;  //8
288   param->fMaxChi2PerCluster[4] = 12.; //6.5
289
290   param->fMaxNormChi2NonC[0] = 7.;
291   param->fMaxNormChi2NonC[1] = 8.;
292   param->fMaxNormChi2NonC[2] = 8.;
293   param->fMaxNormChi2NonC[3] = 11.;
294   param->fMaxNormChi2NonC[4] = 14.;
295   param->fMaxNormChi2NonC[5] = 25.;
296
297   param->fMaxNormChi2C[0] = 11.;
298   param->fMaxNormChi2C[1] = 13.;
299   param->fMaxNormChi2C[2] = 15.;
300   param->fMaxNormChi2C[3] = 18.;
301   param->fMaxNormChi2C[4] = 30.;
302   param->fMaxNormChi2C[5] = 35.;
303
304   param->fMaxNormChi2NonCForHypothesis = 7.;
305   
306   param->fMaxChi2 = 35.;
307
308   param->fMaxChi2s[0] = 25.; //40   
309   param->fMaxChi2s[1] = 25.; //40   
310   param->fMaxChi2s[2] = 25.; //40   
311   param->fMaxChi2s[3] = 25.; //40   
312   param->fMaxChi2s[4] = 40.; //40   
313   param->fMaxChi2s[5] = 50.; //40
314
315   param->fMaxRoad = 6.;
316
317   // not used
318   param->fMaxChi2In = 16.;
319    
320   param->fMaxChi2sR[0] = 10.;   
321   param->fMaxChi2sR[1] = 10.;   
322   param->fMaxChi2sR[2] = 10.;   
323   param->fMaxChi2sR[3] = 10.;   
324   param->fMaxChi2sR[4] = 30.;   
325   param->fMaxChi2sR[5] = 40.;   
326
327   param->fChi2PerCluster = 9.;
328   // not used
329
330   param->fXV = 0.;
331   param->fYV = 0.;
332   param->fZV = 0.;
333   param->fSigmaXV = 0.0050;
334   param->fSigmaYV = 0.0050;
335   param->fSigmaZV = 0.0100;
336
337   param->fVertexCut = 25.;
338
339   param->fMaxDZforPrimTrk = 0.4;
340   param->fMaxDZToUseConstraint = 3.;
341
342   param->fMaxDforV0dghtrForProlongation = 30.;
343   param->fMaxDForProlongation = 40.;//10.;
344   param->fMaxDZForProlongation = 60.;//20.;
345   param->fMinPtForProlongation = 0.120;
346
347   param->fZWindowDeadZone = 2.0;
348   param->fSigmaXDeadZoneHit2 = 0.004/12.;
349   param->fSigmaZDeadZoneHit2 = 0.001/12.;
350   param->fXPassDeadZoneHits = 0.018;
351   param->SetNLoopsSA(10);
352
353   return param;
354 }
355 //_____________________________________________________________________________
356 AliITSRecoParam *AliITSRecoParam::GetCosmicTestParam() 
357 {
358   //
359   // make default reconstruction  parameters for cosmics
360   //
361   AliITSRecoParam *param = new AliITSRecoParam();
362
363   // vertexer for cosmics
364   param->SetVertexer(2);
365
366   // find independently ITS SA tracks 
367   param->SetSAUseAllClusters();
368   param->SetOuterStartLayerSA(AliITSgeomTGeo::GetNLayers()-2);
369
370   // larger seach windows for SA (in case of large misalignments)
371   param->SetFactorSAWindowSizes(3.); 
372
373   param->fMaxSnp = 0.95;
374
375   param->fNSigmaYLayerForRoadY = 4.;
376   param->fNSigmaRoadY = 7.5;
377   param->fNSigmaZLayerForRoadZ = 4.;
378   param->fNSigmaRoadZ = 7.5;
379
380   param->fNSigma2RoadZC = 60.; //7.75^2
381   param->fNSigma2RoadYC = 60.; //7.75^2
382   param->fNSigma2RoadZNonC = 50.; //7.07^2
383   param->fNSigma2RoadYNonC = 50.; //7.07^2
384
385   param->fMaxChi2PerCluster[0] = 11.; //7
386   param->fMaxChi2PerCluster[1] = 12.; //5
387   param->fMaxChi2PerCluster[2] = 12.; //8
388   param->fMaxChi2PerCluster[3] = 5.;  //8
389   param->fMaxChi2PerCluster[4] = 12.; //6.5
390
391   param->fMaxNormChi2NonC[0] = 7.;
392   param->fMaxNormChi2NonC[1] = 8.;
393   param->fMaxNormChi2NonC[2] = 8.;
394   param->fMaxNormChi2NonC[3] = 11.;
395   param->fMaxNormChi2NonC[4] = 14.;
396   param->fMaxNormChi2NonC[5] = 25.;
397
398   param->fMaxNormChi2C[0] = 11.;
399   param->fMaxNormChi2C[1] = 13.;
400   param->fMaxNormChi2C[2] = 15.;
401   param->fMaxNormChi2C[3] = 18.;
402   param->fMaxNormChi2C[4] = 30.;
403   param->fMaxNormChi2C[5] = 35.;
404
405   param->fMaxNormChi2NonCForHypothesis = 7.;
406   
407   param->fMaxChi2 = 35.;
408
409   param->fMaxChi2s[0] = 25.; //40   
410   param->fMaxChi2s[1] = 25.; //40   
411   param->fMaxChi2s[2] = 25.; //40   
412   param->fMaxChi2s[3] = 25.; //40   
413   param->fMaxChi2s[4] = 40.; //40   
414   param->fMaxChi2s[5] = 50.; //40
415
416   param->fMaxRoad = 6.;
417
418   // not used
419   param->fMaxChi2In = 16.;
420    
421   param->fMaxChi2sR[0] = 10.;   
422   param->fMaxChi2sR[1] = 10.;   
423   param->fMaxChi2sR[2] = 10.;   
424   param->fMaxChi2sR[3] = 10.;   
425   param->fMaxChi2sR[4] = 30.;   
426   param->fMaxChi2sR[5] = 40.;   
427
428   param->fChi2PerCluster = 9.;
429   // not used
430
431   param->fXV = 0.;
432   param->fYV = 0.;
433   param->fZV = 0.;
434   param->fSigmaXV = 0.0050;
435   param->fSigmaYV = 0.0050;
436   param->fSigmaZV = 0.0100;
437
438   param->fVertexCut = 25.;
439
440   param->fMaxDZforPrimTrk = 0.4;
441   param->fMaxDZToUseConstraint = 3.;
442
443   param->fMaxDforV0dghtrForProlongation = 30.;
444   param->fMaxDForProlongation = 10.;
445   param->fMaxDZForProlongation = 20.;
446   param->fMinPtForProlongation = 0.120;
447
448   param->fZWindowDeadZone = 2.0;
449   param->fSigmaXDeadZoneHit2 = 0.004/12.;
450   param->fSigmaZDeadZoneHit2 = 0.001/12.;
451   param->fXPassDeadZoneHits = 0.018;
452
453   
454   return param;
455 }
456 //_____________________________________________________________________________
457 AliITSRecoParam *AliITSRecoParam::GetPlaneEffParam(Int_t i)
458 {
459   //
460   // make special reconstruction parameters for Plane Efficiency study on layer i
461   //
462   if (i<0 || i>=AliITSgeomTGeo::kNLayers) {
463     printf("AliITSRecoParam::GetPlaneEffParam: index of ITS Plane not in the range [0,5]\n");
464     printf("returning null pointer");
465     return NULL;
466   }
467   AliITSRecoParam *param;
468   param = GetHighFluxParam();
469   param->SetComputePlaneEff();
470   param->SetLayerToSkip(i);
471   param->SetIPlanePlaneEff(i);
472   // optimized setting for SPD0 (i==0)
473   if (i==0 || i==1) {
474     param->fMinPtPlaneEff = 0.200; // high pt particles
475     param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
476     param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SPD1 must be
477     //param->fOnlyConstraintPlaneEff = kTRUE;
478   }
479   if (i==2 || i==3) {
480     param->fMinPtPlaneEff = 0.200; // high pt particles
481     param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
482     param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
483     //param->fOnlyConstraintPlaneEff = kTRUE;
484   }
485   if (i==4) {
486     param->fMinPtPlaneEff = 0.200; // high pt particles
487     param->fMaxMissingClustersPlaneEff = 0; // at most 1 layer out of 5 without cluster
488     param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
489     //param->fOnlyConstraintPlaneEff = kTRUE;
490   }
491   if (i==5) {
492     param->fMinPtPlaneEff = 0.200; // high pt particles
493   }
494   //
495   return param;
496 }
497 //_____________________________________________________________________________
498 void AliITSRecoParam::SetLayersParameters() 
499 {
500   //
501   // number of layers and layers spatial resolutions
502   //
503
504   // spatial resolutions of the detectors
505   // y: 12 12 38 38 20 20 micron
506   fSigmaY2[0]=1.44e-6;
507   fSigmaY2[1]=1.44e-6;
508   fSigmaY2[2]=1.444e-5;
509   fSigmaY2[3]=1.444e-5;
510   fSigmaY2[4]=4.0e-6;
511   fSigmaY2[5]=4.0e-6;
512   // z: 120 120 28 28 830 830 micron
513   fSigmaZ2[0]=1.44e-4;
514   fSigmaZ2[1]=1.44e-4;
515   fSigmaZ2[2]=7.84e-6;
516   fSigmaZ2[3]=7.84e-6;
517   fSigmaZ2[4]=6.889e-3;
518   fSigmaZ2[5]=6.889e-3;
519
520   return;
521 }
522 //_____________________________________________________________________________
523 void AliITSRecoParam::PrintParameters() const 
524 {
525   //
526   // print parameters
527   //
528
529   printf("=============================  AliITSRecoParam::PrintParameters ");
530   printf("============================= \n\n");
531   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) {
532     if(!fLayersToSkip[i]) {
533       printf("ITS Traking: using layer %d\n",i);
534     } else {
535       printf("ITS Traking: skipping layer %d\n",i);
536     }
537   }
538   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++) {
539     if(fUseAmplitudeInfo[i]) {
540       printf("ITS Traking: use amplitude info for layer %d\n",i);
541     } else {
542       printf("ITS Traking: don't use amplitude info for layer %d\n",i);
543     }
544   }
545   for(Int_t i=0; i<AliITSgeomTGeo::kNLayers; i++)
546     printf("Layer %d:\n  sigmaY2 %f, sigmaZ2 %f\n  sigmaMisalY %f, sigmaMisalZ %f\n  max norm chi2 for non constrained tracks %f\n  max norm chi2 for constrained tracks %f\n  max predicted chi2 (cluster & track prol.) %f\n",i,fSigmaY2[i],fSigmaZ2[i],fClusterMisalErrorY[i],fClusterMisalErrorZ[i],fMaxNormChi2NonC[i],fMaxNormChi2C[i],fMaxChi2s[i]);
547
548
549   Dump();
550
551   return;
552 }