2683a7d36bda65da8554841f90006bcbfdbfdba7
[u/mrichter/AliRoot.git] / TPC / AliTPCv0.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, 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 /*
17 $Log$
18 Revision 1.11  1999/10/04 13:39:54  fca
19 Correct array index problem
20
21 Revision 1.10  1999/09/29 09:24:34  fca
22 Introduction of the Copyright and cvs Log
23
24 */
25
26 ///////////////////////////////////////////////////////////////////////////////
27 //                                                                           //
28 //  Time Projection Chamber version 0 -- "coarse" TPC                        //
29 //                                                                           //
30 //Begin_Html
31 /*
32 <img src="picts/AliTPCv0Class.gif">
33 */
34 //End_Html
35 //                                                                           //
36 //                                                                           //
37 ///////////////////////////////////////////////////////////////////////////////
38
39 #include <TMath.h>
40 #include <TGeometry.h>
41 #include <TNode.h>
42 #include <TTUBE.h>
43 #include "AliTPCv0.h"
44 #include "AliRun.h"
45 #include <iostream.h>
46 #include <fstream.h>
47
48 #include "AliMC.h"
49 #include "AliConst.h"
50
51 #include "AliTPCParam.h"
52 #include "AliTPCD.h"
53
54 ClassImp(AliTPCv0)
55  
56 //_____________________________________________________________________________
57 AliTPCv0::AliTPCv0(const char *name, const char *title) 
58          :AliTPC(name, title)
59 {
60   //
61   // Standard creator for TPC version 0
62   //
63 }
64
65 //_____________________________________________________________________________
66 void AliTPCv0::CreateGeometry()
67 {
68   //
69   // Creation of the TPC coarse geometry (version 0)
70   // Origin Marek Kowalski Crakow
71   //
72   //Begin_Html
73   /*
74     <img src="picts/AliTPCv0.gif">
75   */
76   //End_Html
77   //Begin_Html
78   /*
79     <img src="picts/AliTPCv0Tree.gif">
80   */
81   //End_Html
82
83   AliTPCParam * fTPCParam = &(fDigParam->GetParam());
84
85   Int_t *idtmed = fIdtmed->GetArray();
86
87   Float_t dm[21];
88   Int_t idrotm[120];
89
90   Int_t nRotMat = 0;
91
92
93   // ---------------------------------------------------- 
94   //          FIELD CAGE WITH ENDCAPS - G10
95   //          THIS IS ALSO A TPC MOTHER VOLUME 
96   // ---------------------------------------------------- 
97
98   dm[0] = 76.;
99   dm[1] = 278.;
100   dm[2] = 275.;
101
102   gMC->Gsvolu("TPC ", "TUBE", idtmed[8], dm, 3); 
103
104   //-----------------------------------------------------
105   //  Endcap cover c-fibre 0.86% X0
106   //-----------------------------------------------------
107
108   dm[0] = 78.;
109   dm[1] = 258.;
110   dm[2] = 0.95;
111
112   gMC->Gsvolu("TPEC","TUBE",idtmed[10],dm,3);
113
114   //-----------------------------------------------------
115   // Drift gas , leave 2 cm at the outer radius
116   // and inner raddius
117   //-----------------------------------------------------
118
119   dm[0] = 78.;
120   dm[1] = 258.;
121   dm[2] = 250.;
122
123   gMC->Gsvolu("TGAS", "TUBE", idtmed[3], dm, 3);
124
125
126   //------------------------------------------------------
127   //  membrane holder - carbon fiber
128   //------------------------------------------------------
129
130
131   gMC->Gsvolu("TPMH","TUBE",idtmed[6],dm,0);
132
133   dm[0] = 252.;
134   dm[1] = 258.;
135   dm[2] = 0.2;
136
137   gMC->Gsposp("TPMH",1,"TGAS",0.,0.,0.,0,"ONLY",dm,3);
138  
139   dm[0] = 78.;
140   dm[1] = 82.;
141   dm[2] = 0.1;
142
143   gMC->Gsposp("TPMH",2,"TGAS",0.,0.,0.,0,"ONLY",dm,3);
144
145   //----------------------------------------------------------
146   //  HV membrane - 25 microns of mylar
147   //----------------------------------------------------------
148
149   dm[0] = 82.;
150   dm[1] = 252.;
151   dm[2] = 0.00125;
152
153   gMC->Gsvolu("TPHV","TUBE",idtmed[5],dm,3);
154
155   gMC->Gspos("TPHV",1,"TGAS",0.,0.,0.,0,"ONLY");
156
157   gMC->Gspos("TGAS",1,"TPC ",0.,0.,0.,0,"ONLY");
158
159   //----------------------------------------------------------
160   // "side" gas volume, the same as the drift gas
161   // the readout chambers are placed there.  
162   //----------------------------------------------------------
163
164   dm[0] = 78.;
165   dm[1] = 258.;
166   dm[2] = 0.5*(275. - 250.);
167    
168   gMC->Gsvolu("TPSG", "TUBE", idtmed[2], dm, 3);
169
170   Float_t z_side = dm[2]; // 1/2 of the side gas thickness
171
172   //-----------------------------------------------------------
173   //   Readout chambers , 25% of X0, I use Al as the material
174   //-----------------------------------------------------------
175
176   Float_t InnerOpenAngle = fTPCParam->GetInnerAngle();
177   Float_t OuterOpenAngle = fTPCParam->GetOuterAngle();
178
179   Float_t InnerAngleShift = fTPCParam->GetInnerAngleShift();
180   Float_t OuterAngleShift = fTPCParam->GetOuterAngleShift();
181
182
183   Int_t nInnerSector = fTPCParam->GetNInnerSector()/2;
184   Int_t nOuterSector = fTPCParam->GetNOuterSector()/2;
185
186
187   Float_t InSecLowEdge = fTPCParam->GetInSecLowEdge();
188   Float_t InSecUpEdge =  fTPCParam->GetInSecUpEdge();
189
190   Float_t OuSecLowEdge = fTPCParam->GetOuSecLowEdge();
191   Float_t OuSecUpEdge = fTPCParam->GetOuSecUpEdge();
192
193   Float_t SecThick = 2.225; // Al
194
195   Float_t edge = fTPCParam->GetEdge();
196
197   //  S (Inner) sectors
198
199   dm[0] = InSecLowEdge*TMath::Tan(0.5*InnerOpenAngle)-edge;
200   dm[1] = InSecUpEdge*TMath::Tan(0.5*InnerOpenAngle)-edge;
201   dm[2] = SecThick;
202   dm[3] = 0.5*(InSecUpEdge-InSecLowEdge);
203
204   Float_t xCenterS = InSecLowEdge+dm[3];
205
206   gMC->Gsvolu("TRCS", "TRD1", idtmed[0], dm, 4); 
207
208   //  L (Outer) sectors
209
210   dm[0] = OuSecLowEdge*TMath::Tan(0.5*OuterOpenAngle)-edge;
211   dm[1] = OuSecUpEdge*TMath::Tan(0.5*OuterOpenAngle)-edge;
212   dm[2] = SecThick;
213   dm[3] = 0.5*(OuSecUpEdge-OuSecLowEdge);
214
215   Float_t xCenterL = OuSecLowEdge+dm[3];  
216
217   gMC->Gsvolu("TRCL", "TRD1", idtmed[0], dm, 4);
218
219   Float_t z1 = -z_side + SecThick*0.5;
220
221   //------------------------------------------------------------------
222   // Positioning of the S-sector readout chambers
223   //------------------------------------------------------------------
224
225   Int_t ns;
226   Float_t theta1,theta2,theta3;
227   Float_t phi1,phi2,phi3;
228   Float_t alpha;
229   Float_t x,y;
230
231   for(ns=0;ns<nInnerSector;ns++){
232     
233     phi1 = ns * InnerOpenAngle + 270.*kDegrad + InnerAngleShift;
234     phi1 *= kRaddeg; // in degrees
235
236     phi1 = (Float_t)TMath::Nint(phi1);
237
238     if (phi1 > 360.) phi1 -= 360.;
239       
240     theta1 = 90.;
241     phi2   = 90.;
242     theta2 = 180.;
243     phi3   = ns * InnerOpenAngle + InnerAngleShift;
244     phi3 *= kRaddeg; // in degrees
245
246     phi3 = (Float_t)TMath::Nint(phi3);
247       
248     if(phi3 > 360.) phi3 -= 360.;
249
250     theta3 = 90.;
251
252     alpha = phi3*kDegrad;
253
254     x = xCenterS * TMath::Cos(alpha);
255     y = xCenterS * TMath::Sin(alpha); 
256  
257     AliMatrix(idrotm[nRotMat], theta1, phi1, theta2, phi2, theta3, phi3);  
258      
259     gMC->Gspos("TRCS", ns+1, "TPSG", x, y, z1, idrotm[nRotMat], "ONLY");
260
261     nRotMat++;     
262
263   }
264     
265   //-------------------------------------------------------------------
266   //  Positioning of the L-sectors readout chambers
267   //-------------------------------------------------------------------
268     
269   for(ns=0;ns<nOuterSector;ns++){
270     phi1 = ns * OuterOpenAngle + 270.*kDegrad + OuterAngleShift;
271     phi1 *= kRaddeg; // in degrees
272
273     phi1 = (Float_t)TMath::Nint(phi1);
274     
275
276     if (phi1 > 360.) phi1 -= 360.;
277       
278     theta1 = 90.;
279     phi2   = 90.;
280     theta2 = 180.;
281     phi3   = ns * OuterOpenAngle+OuterAngleShift;
282     phi3 *= kRaddeg; // in degrees
283
284     phi3 = (Float_t)TMath::Nint(phi3);
285
286       
287     if(phi3 > 360.) phi3 -= 360.;
288
289     theta3 = 90.;
290
291     alpha = phi3*kDegrad;
292
293     x = xCenterL * TMath::Cos(alpha);
294     y = xCenterL * TMath::Sin(alpha); 
295  
296     AliMatrix(idrotm[nRotMat], theta1, phi1, theta2, phi2, theta3, phi3);  
297      
298
299     gMC->Gspos("TRCL", ns+1, "TPSG", x, y, z1, idrotm[nRotMat], "ONLY"); 
300
301     nRotMat++;   
302
303   }
304
305   Float_t z0 = z_side - 0.95;
306
307   gMC->Gspos("TPEC",1,"TPSG",0.,0.,z0,0,"ONLY");
308
309   // ========================================================== 
310   //                  wheels 
311   // ========================================================== 
312
313   //
314   //  auxilary structures
315   //
316
317
318   gMC->Gsvolu("TPWI","TUBE",idtmed[24],dm,0); // "air" 
319
320   // ---------------------------------------------------------- 
321   //       Large wheel -> positioned in the TPC 
322   // ---------------------------------------------------------- 
323   
324
325   z0 = 263.5; // TPC length - 1/2 spoke wheel width
326
327   dm[0] = 258.;
328   dm[1] = 278.;
329   dm[2] = 11.5;
330   
331   gMC->Gsvolu("TPWL", "TUBE", idtmed[0], dm, 3); 
332
333   dm[0] = dm[0]+2.;
334   dm[1] = 278.;
335   dm[2] = dm[2]-2.;
336
337   gMC->Gsposp("TPWI",1,"TPWL",0.,0.,0.,0,"ONLY",dm,3);
338
339   gMC->Gspos("TPWL", 1, "TPC ", 0, 0, z0, 0, "ONLY");
340   gMC->Gspos("TPWL", 2, "TPC ", 0, 0, -z0, 0, "ONLY");
341
342   //
343   //  Outer vessel + CO2 HV degrader
344   //
345
346   dm[0] = 260.;
347   dm[1] = 278.;
348   dm[2] = 252.;
349
350   gMC->Gsvolu("TPCO","TUBE",idtmed[12],dm,3);
351
352   dm[0] = 275.;
353   dm[1] = 278.;
354   
355   gMC->Gsvolu("TPOV","TUBE",idtmed[10],dm,3);
356
357   gMC->Gspos("TPOV",1,"TPCO",0.,0.,0.,0,"ONLY");
358
359
360   // G10 plugs
361
362   dm[0] = 258.;
363   dm[1] = 260.;
364   dm[2] = 1.;
365
366   gMC->Gsvolu("TPG1","TUBE",idtmed[8],dm,3);
367   gMC->Gspos("TPG1",1,"TPCO",0.,0.,251.,0,"ONLY");
368   gMC->Gspos("TPG1",2,"TPCO",0.,0.,-251.,0,"ONLY");  
369
370   gMC->Gspos("TPCO",1,"TPC ",0.,0.,0.,0,"ONLY");
371
372
373   //----------------------------------------------------------
374   //  Small wheel -> positioned in "side gas
375   //----------------------------------------------------------
376
377   dm[0] = 78.;
378   dm[1] = 82.;
379   dm[2] = 11.5;
380
381   gMC->Gsvolu("TPWS", "TUBE", idtmed[0], dm, 3);
382
383   dm[0] = 78.;
384   dm[1] = dm[1]-2;
385   dm[2] = dm[2]-2.;
386
387   gMC->Gsvolu("TPW1", "TUBE", idtmed[2], dm, 3);
388   
389   gMC->Gspos("TPW1", 1, "TPWS", 0., 0., 0., 0, "ONLY");
390
391   z0 = 1.; // spoke wheel is shifted w.r.t. center of the "side gas"
392
393   gMC->Gspos("TPWS", 1, "TPSG", 0, 0, z0, 0, "ONLY");
394
395
396   // to avoid overlaps
397
398   dm[0] = 76.;
399   dm[1] = 78.;
400   dm[2] = 11.5;
401
402   gMC->Gsvolu("TPS1","TUBE",idtmed[0],dm,3);
403
404   dm[2] = 9.5;
405
406   gMC->Gsvolu("TPS2","TUBE",idtmed[24],dm,3);
407
408   gMC->Gspos("TPS2",1,"TPS1",0.,0.,0.,0,"ONLY");
409
410   z0= 263.5;
411   
412   gMC->Gspos("TPS1",1,"TPC ",0.,0.,z0,0,"ONLY");
413   gMC->Gspos("TPS1",2,"TPC ",0.,0.,-z0,0,"ONLY");
414
415   // G10 plug
416
417   dm[0] = 76.;
418   dm[1] = 78.;
419   dm[2] = 1.;
420
421   gMC->Gsvolu("TPG2","TUBE",idtmed[8],dm,3);
422
423   z0 = 251.;
424
425   gMC->Gspos("TPG2",1,"TPC ",0.,0.,z0,0,"ONLY");
426   gMC->Gspos("TPG2",2,"TPC ",0.,0.,-z0,0,"ONLY");
427
428
429   //---------------------------------------------------------
430   //  central wheel  6 (radial direction) x 4 (along z) cm2
431   //---------------------------------------------------------
432
433   dm[0] = 140.;
434   dm[1] = 146.;
435   dm[2] = 2.;
436
437   gMC->Gsvolu("TPWC","TUBE",idtmed[0],dm,3);
438
439   dm[0] = dm[0] + 2.;
440   dm[1] = dm[1] - 2.;
441   dm[2] = dm[2] - 1.;
442
443   gMC->Gsposp("TPWI",2,"TPWC",0.,0.,0.,0,"ONLY",dm,3);
444
445   z0 = z_side - 1.9 - 2.;
446
447   gMC->Gspos("TPWC",1,"TPSG",0.,0.,z0,0,"ONLY");
448
449   //
450
451   gMC->Gsvolu("TPSE","BOX ",idtmed[24],dm,0); // "empty" part of the spoke 
452
453  
454   //---------------------------------------------------------
455   //  inner spokes (nSectorInner)
456   //---------------------------------------------------------
457
458   dm[0] = 0.5*(139.9-82.1);
459   dm[1] = 3.;
460   dm[2] = 2.;
461
462   Float_t x1 = dm[0]+82.;
463
464   gMC->Gsvolu("TPSI","BOX",idtmed[0],dm,3);
465
466   dm[1] = dm[1]-1.;
467   dm[2] = dm[2]-1.;
468
469   gMC->Gsposp("TPSE",1,"TPSI",0.,0.,0.,0,"ONLY",dm,3);
470
471   for(ns=0;ns<nInnerSector;ns++){
472
473     phi1 = 0.5*InnerOpenAngle + ns*InnerOpenAngle + InnerAngleShift;
474     theta1=90.;
475     phi1 *=kRaddeg;
476
477     phi1 = (Float_t)TMath::Nint(phi1);
478
479     phi2 = phi1+90.;
480     if(phi2>360.) phi2 -= 360.;
481     theta2=90.;
482     phi3=0.;
483     theta3=0.;
484
485     alpha = phi1 * kDegrad;
486     x     = x1 * TMath::Cos(alpha);
487     y     = x1 * TMath::Sin(alpha);    
488
489    AliMatrix(idrotm[nRotMat],theta1,phi1,theta2,phi2,theta3,phi3);
490
491    gMC->Gspos("TPSI",ns+1,"TPSG",x,y,z0,idrotm[nRotMat],"ONLY");  
492
493    nRotMat++;
494
495   }
496
497   //-------------------------------------------------------------
498   // outer spokes (nSectorOuter)
499   //-------------------------------------------------------------
500
501   dm[0] = 0.5*(257.9-146.1);
502   dm[1] = 3.;
503   dm[2] = 2.;
504
505   x1 = dm[0] + 146.;
506
507   gMC->Gsvolu("TPSO","BOX ",idtmed[0],dm,3);
508
509   dm[1] = dm[1] - 1.;
510   dm[2] = dm[2] - 1.;
511
512   gMC->Gsposp("TPSE",2,"TPSO",0.,0.,0.,0,"ONLY",dm,3);
513
514   for(ns=0;ns<nOuterSector;ns++){
515
516     phi1 = 0.5*OuterOpenAngle + ns*OuterOpenAngle + OuterAngleShift;
517     theta1=90.;
518     phi1 *=kRaddeg;
519
520     phi1 = (Float_t)TMath::Nint(phi1);
521
522     phi2 = phi1+90.;
523     if(phi2>360.) phi2 -= 360.;
524     theta2=90.;
525     phi3=0.;
526     theta3=0.;
527
528     alpha = phi1 * kDegrad;
529     x     = x1 * TMath::Cos(alpha);
530     y     = x1 * TMath::Sin(alpha);    
531
532    AliMatrix(idrotm[nRotMat],theta1,phi1,theta2,phi2,theta3,phi3);
533
534    gMC->Gspos("TPSO",ns+1,"TPSG",x,y,z0,idrotm[nRotMat],"ONLY");  
535
536    nRotMat++;
537
538   }  
539   
540
541   
542   // -------------------------------------------------------- 
543   //         put the readout chambers into the TPC 
544   // -------------------------------------------------------- 
545
546   theta1 = 90.;
547   phi1   = 0.;
548   theta2 = 90.;
549   phi2   = 270.;
550   theta3 = 180.;
551   phi3   = 0.;
552   
553   AliMatrix(idrotm[nRotMat], theta1, phi1, theta2, phi2, theta3, phi3);
554   
555   z0 = z_side + 250.;
556   
557   gMC->Gspos("TPSG", 1, "TPC ", 0, 0, z0, 0, "ONLY");
558   gMC->Gspos("TPSG", 2, "TPC ", 0, 0, -z0, idrotm[nRotMat], "ONLY");
559   
560   gMC->Gspos("TPC ", 1, "ALIC", 0, 0, 0, 0, "ONLY");
561
562   //----------------------------------------------------
563   //  Inner vessel and HV degrader
564   //----------------------------------------------------
565
566   dm[0] = 0.;
567   dm[1] = 360.;
568   dm[2] = 4.;
569   
570   dm[3] = -250.;
571   dm[4] = 74.4;
572   dm[5] = 76.;
573
574   dm[6] = -64.5;
575   dm[7] = 50.;
576   dm[8] = 76.;
577
578   dm[9] = 64.5;
579   dm[10] = 50.;
580   dm[11] = 76.;
581
582   dm[12] = 250.;
583   dm[13] = 74.4;
584   dm[14] = 76.;
585
586   gMC->Gsvolu("TPVD", "PCON", idtmed[12], dm, 15); // CO2
587
588   // cone parts
589
590   dm[0] = 0.;
591   dm[1] = 360.;
592   dm[2] = 2.;
593
594   dm[3] = 64.5;
595   dm[4] = 50.;
596   dm[5] = 51.6;
597  
598   dm[6] = 250.;
599   dm[7] = 74.4;
600   dm[8] = 76.;
601
602
603   gMC->Gsvolu("TIVC","PCON",idtmed[11],dm,9); // C-fibre
604
605   gMC->Gspos("TIVC",1,"TPVD",0.,0.,0.,0,"ONLY");
606   gMC->Gspos("TIVC",2,"TPVD",0.,0.,0.,idrotm[nRotMat],"ONLY");
607
608   // barrel part
609
610   dm[0] = 50.;
611   dm[1] = 50.5;
612   dm[2] = 32.25;
613
614   gMC->Gsvolu("TIVB","TUBE",idtmed[9],dm,3);
615
616   gMC->Gspos("TIVB",1,"TPVD",0.,0.,0.,0,"ONLY");
617
618   gMC->Gspos("TPVD",1,"ALIC",0.,0.,0.,0,"ONLY");
619
620   
621
622   
623
624   // --------------------------------------------------- 
625   //               volumes ordering 
626   // --------------------------------------------------- 
627   gMC->Gsord("TPSG", 6);
628  
629 } // end of function
630
631
632 //_____________________________________________________________________________
633 void AliTPCv0::CreateMaterials()
634 {
635   //
636   // Define materials for the TPC
637   //
638   AliTPC::CreateMaterials();
639 }
640
641 //_____________________________________________________________________________
642 void AliTPCv0::DrawDetector()
643 {
644   //
645   // Draw a shaded view of the Time Projection Chamber version 0
646   //
647
648   // Set everything unseen
649   gMC->Gsatt("*", "seen", -1);
650   // 
651   // Set ALIC mother transparent
652   gMC->Gsatt("ALIC","SEEN",0);
653   //
654   // Set the volumes visible
655   gMC->Gsatt("TPC","SEEN",0);
656   gMC->Gsatt("TGAS","SEEN",0);
657   gMC->Gsatt("TPSG","SEEN",0);
658   gMC->Gsatt("TPHV","SEEN",1);
659   gMC->Gsatt("TPMH","SEEN",1);
660   gMC->Gsatt("TPEC","SEEN",0);
661   gMC->Gsatt("TRCS","SEEN",1);
662   gMC->Gsatt("TRCL","SEEN",1);
663   gMC->Gsatt("TPWL","SEEN",1);
664   gMC->Gsatt("TPWI","SEEN",1);
665   gMC->Gsatt("TPWS","SEEN",1);
666   gMC->Gsatt("TPW1","SEEN",1);
667   gMC->Gsatt("TPS1","SEEN",1);
668   gMC->Gsatt("TPS2","SEEN",1);
669   gMC->Gsatt("TPG1","SEEN",1);
670   gMC->Gsatt("TPG2","SEEN",1);
671   gMC->Gsatt("TPWC","SEEN",1);
672   gMC->Gsatt("TPSI","SEEN",1); 
673   gMC->Gsatt("TPSO","SEEN",1);
674   gMC->Gsatt("TPCO","SEEN",1);
675   gMC->Gsatt("TPOV","SEEN",1);
676   gMC->Gsatt("TPVD","SEEN",1);
677   //
678   gMC->Gdopt("hide", "on");
679   gMC->Gdopt("shad", "on");
680   gMC->Gsatt("*", "fill", 7);
681   gMC->SetClipBox(".");
682   gMC->SetClipBox("*", 0, 1000, -1000, 1000, -1000, 1000);
683   gMC->DefaultRange();
684   gMC->Gdraw("alic", 40, 30, 0, 12, 9.5, .025, .025);
685   gMC->Gdhead(1111, "Time Projection Chamber");
686   gMC->Gdman(18, 4, "MAN");
687   gMC->Gdopt("hide","off");
688 }
689
690 //_____________________________________________________________________________
691 void AliTPCv0::Init()
692 {
693   //
694   // Initialise Time Projection Chamber version 0
695   //
696   printf("TPC version 0 initialized\n");
697 }
698
699 //_____________________________________________________________________________
700 void AliTPCv0::StepManager()
701 {
702   //
703   // Procedure called at each step in the TPC
704   //
705 }