1 ///////////////////////////////////////////////////////////////////////////////
3 // Time Projection Chamber version 2 -- detailed TPC and slow simulation //
7 <img src="picts/AliTPCv2Class.gif">
12 ///////////////////////////////////////////////////////////////////////////////
23 //_____________________________________________________________________________
24 AliTPCv2::AliTPCv2(const char *name, const char *title) :
28 // Standard constructor for Time Projection Chamber version 2
32 SetBufferSize(128000);
35 //_____________________________________________________________________________
36 void AliTPCv2::CreateGeometry()
39 // Create the geometry of Time Projection Chamber version 2
43 <img src="picts/AliTPCv2.gif">
48 <img src="picts/AliTPCv2Tree.gif">
52 Int_t *idtmed = fIdtmed->GetArray()-399;
54 AliTPCParam * fTPCParam = &(fDigParam->GetParam());
58 Float_t rlsl, wlsl, rssl, rlsu, wssl, wlsu, rssu, wssu;
60 Float_t alpha, x, y, z, sec_thick;
62 Float_t r1, r2, x1, z0, z1, x2, theta1, theta2, theta3, dm[21];
72 Int_t ifl1 = 0, ifl2 = 0;
73 Float_t phi1, phi2, phi3;
75 // ---------------------------------------------------
76 // sector specification check
77 // ---------------------------------------------------
81 for (i = 0; i < 6; ++i) {
82 if (fSecLows[i] > 0 && fSecLows[i] <25) {
84 printf("*** SECTOR %d selected\n",fSecLows[i]);
89 printf("*** ALL LOWER SECTORS SELECTED ***\n");
96 for (i = 0; i < 12; ++i) {
97 if (fSecUps[i] > 24 && fSecUps[i] < 73) {
99 printf("*** SECTOR %d selected\n",fSecUps[i]);
104 printf("*** ALL UPPER SECTORS SELECTED ***\n");
108 if (ifl1 == 0 && ifl2 == 0) {
109 printf("*** ERROR: AT LEAST ONE SECTOR MUST BE SPECIFIED ***\n");
110 printf("!!! PROGRAM STOPPED !!!\n");
114 if ((fSecAL < 0 || fSecAU < 0) && fSens >= 0) {
115 printf("** ERROR: STRIPS CANNOT BE SPECIFIED FOR ALL SECTORS **\n");
116 printf("!!! PROGRAM STOPPED !!!\n");
119 // ----------------------------------------------------
120 // FIELD CAGE WITH ENDCAPS - CARBON FIBER
121 // THIS IS ALSO A TPC MOTHER VOLUME
122 // ----------------------------------------------------
127 gMC->Gsvolu("TPC ", "TUBE", idtmed[407], dm, 3);
128 // -------------------------------------------------------
129 // drift gas Ne/CO2 (90/10 volume) - nonsensitive
130 // field cage thickness = 0.52% X0
131 // ----------------------------------------------------
136 gMC->Gsvolu("TGAS", "TUBE", idtmed[402], dm, 3);
137 // ------------------------------------------------------
138 // "side" gas volume (the same as drift gas),
139 // here the readout chambers are positioned
140 // ------------------------------------------------------
141 dm[2] = 0.5*(275.-250.);
144 gMC->Gsvolu("TPSG", "TUBE", idtmed[401], dm, 3);
145 // ------------------------------------------------------
146 // HV midplane - 20 microns of mylar
147 // -----------------------------------------------------
150 gMC->Gsvolu("TPHV", "TUBE", idtmed[405], dm, 3);
152 // ====================================================
153 // lower and upper readout chambers
154 // ====================================================
155 // sectros opening angles in degrees
156 // ---------------------------------------------------
159 thl = TMath::Tan(opl * .5 * kDegrad);
160 thu = TMath::Tan(opu * .5 * kDegrad);
161 // ---------------------------------------------------
162 // S and L-sectors radii
163 // ---------------------------------------------------
168 // --------------------------------------------------
170 // --------------------------------------------------
175 // ---------------------------------------------------
176 // Sector thickness 25% of X0 (Al)
177 // ---------------------------------------------------
179 // ---------------------------------------------------
180 // S-sectors (lower sectors)
181 // ---------------------------------------------------
184 dm[2] = sec_thick * .5;
185 dm[3] = (rssu - rssl) * .5;
189 gMC->Gsvolu("TRCS", "TRD1", idtmed[399], dm, 4);
190 // -----------------------------------------------------
191 // S-sectors --> "gas sectors" - sensitive
192 // -----------------------------------------------------
193 dm[2] = (250.-0.001)/2.;
194 gMC->Gsvolu("TSGA", "TRD1", idtmed[403], dm, 4);
195 // -------------------------------------------------------------
196 // Only for the debugging purpose and resolution calculation
197 // Sensitive strips at the pad-row center
198 // -------------------------------------------------------------
200 gMC->Gsvolu("TSST", "TRD1", idtmed[403], dm, 0);
203 z0 = rssl + (rssu - rssl) * .5;
205 for (iss = 0; iss < fTPCParam->GetNRowLow(); ++iss) {
206 r1 = fTPCParam->GetPadRowRadiiLow(iss);
207 r2 = r1 + dm[3] * 2.;
208 dm[0] = r1 * thl - 2.63;
209 dm[1] = r2 * thl - 2.63;
211 zz = -z0 + r1 +dm[3];
213 gMC->Gsposp("TSST", iss+1, "TSGA", 0, 0, zz, 0, "ONLY", dm, 4);
215 gMC->Gsord("TSGA", 3);
217 // ---------------------------------------------------
218 // L-sectors (upper sectors)
219 // ---------------------------------------------------
222 dm[2] = sec_thick * .5;
223 dm[3] = (rlsu - rlsl) * .5;
227 gMC->Gsvolu("TRCL", "TRD1", idtmed[399], dm, 4);
228 // -----------------------------------------------------
229 // L-sectors - "gas sectors" - sensitive!
230 // -----------------------------------------------------
231 dm[2] = (250.-0.001)/2.;
232 gMC->Gsvolu("TLGA", "TRD1", idtmed[403], dm, 4);
233 // -------------------------------------------------------------
234 // Only for the debugging purpose and resolution calculation
235 // Sensitive strips at the pad-row center
236 // -------------------------------------------------------------
238 gMC->Gsvolu("TLST", "TRD1", idtmed[403], dm, 0);
242 z0 = rlsl+ (rlsu - rlsl) * .5;
244 for (ils = 0; ils <fTPCParam->GetNRowUp(); ++ils) {
245 r1 = fTPCParam->GetPadRowRadiiUp(ils);
246 r2 = r1 + dm[3] * 2.;
247 dm[0] = r1 * thu - 2.63;
248 dm[1] = r2 * thu - 2.63;
250 zz = -z0 + r1 +dm[3];
252 gMC->Gsposp("TLST", ils+1, "TLGA", 0, 0, zz, 0, "ONLY", dm, 4);
254 gMC->Gsord("TLGA", 3);
256 // ******************************************************
257 // ------------------------------------------------
258 // positioning of lower sectors (1-12)*2
259 // rotation matrices 1-12
261 // the isec_al flag allows to select all (<0) or
262 // only a few (up to 6) sectors
263 // ------------------------------------------------
265 z1 = -z_side + sec_thick * .5;
267 for (il = 1; il <= 12; ++il) {
268 phi1 = (il - 1) * opl + 270.;
275 phi3 = (il - 1) * opl;
279 AliMatrix(idrotm[idr], theta1, phi1, theta2, phi2, theta3, phi3);
281 alpha = (il - 1) * opl * kDegrad;
282 x = x0l * TMath::Cos(alpha);
283 y = x0l * TMath::Sin(alpha);
286 // -----------------------------------------------------------
287 // position ALL lower sectors
288 // -----------------------------------------------------------
289 gMC->Gspos("TSGA", il, "TGAS", x, y, z, idrotm[idr], "ONLY");
290 gMC->Gspos("TSGA",il+12 , "TGAS", x, y, -z, idrotm[idr], "ONLY");
292 // -----------------------------------------------------------
293 // position selected lower sectors
294 // -----------------------------------------------------------
295 for (isll = 1; isll <= 6; ++isll) {
296 if (fSecLows[isll - 1] == il) {
297 gMC->Gspos("TSGA", il, "TGAS", x, y, z, idrotm[idr], "ONLY");
298 } else if (fSecLows[isll - 1] == il + 12) {
299 gMC->Gspos("TSGA",il+12 , "TGAS", x, y, -z, idrotm[idr],"ONLY");
304 gMC->Gspos("TRCS", il, "TPSG", x, y, z1, idrotm[idr], "ONLY");
307 // ----------------------------------------------------
308 // positioning of upper sectors (1-24)*2
309 // rotation matrices 13-36
310 // the isec_au flag allows to select all (<0) or
311 // only a few (up to 12) sectors
312 // ----------------------------------------------------
313 for (iu = 1; iu <= 24; ++iu) {
314 phi1 = (iu - 1) * opu + 270.;
321 phi3 = (iu - 1) * opu;
325 AliMatrix(idrotm[idr], theta1, phi1, theta2, phi2, theta3, phi3);
327 alpha = (iu - 1) * opu * kDegrad;
328 x = x0u * TMath::Cos(alpha);
329 y = x0u * TMath::Sin(alpha);
332 // -------------------------------------------------------------
333 // position ALL upper sectors
334 // -------------------------------------------------------------
335 gMC->Gspos("TLGA", iu, "TGAS", x, y, z, idrotm[idr], "ONLY");
336 gMC->Gspos("TLGA",iu+24 , "TGAS", x, y, -z, idrotm[idr], "ONLY");
338 // -------------------------------------------------------------
339 // position selected upper sectors
340 // -------------------------------------------------------------
341 for (isll = 1; isll <= 12; ++isll) {
342 if (fSecUps[isll - 1] == iu + 24) {
343 gMC->Gspos("TLGA", iu, "TGAS", x, y, z, idrotm[idr], "ONLY");
344 } else if (fSecUps[isll - 1] == iu + 48) {
345 gMC->Gspos("TLGA",iu+24 , "TGAS", x, y, -z, idrotm[idr],"ONLY");
350 gMC->Gspos("TRCL", iu, "TPSG", x, y, z1, idrotm[idr], "ONLY");
352 // --------------------------------------------------------
353 // Spoke wheel structures
354 // --------------------------------------------------------
355 gMC->Gsvolu("TSWS", "TUBE", idtmed[399], dm, 0);
363 gMC->Gsposp("TSWS", 1, "TPSG", 0, 0, z0, 0, "ONLY", dm, 3);
368 gMC->Gsposp("TSWS", 2, "TPSG", 0, 0, z0, 0, "ONLY", dm, 3);
373 gMC->Gsposp("TSWS", 3, "TPSG", 0, 0, z0, 0, "ONLY", dm, 3);
375 // -------------------------------------------------------
376 // this volumes are to avoid overlaping
377 // -------------------------------------------------------
383 gMC->Gsposp("TSWS", 4, "TPC ", 0, 0, z0, 0, "ONLY", dm, 3);
384 gMC->Gsposp("TSWS", 5, "TPC ", 0, 0, -z0, 0, "ONLY", dm, 3);
388 gMC->Gsposp("TSWS", 6, "TPC ", 0, 0, z0, 0, "ONLY", dm, 3);
389 gMC->Gsposp("TSWS", 7, "TPC ", 0, 0, -z0, 0, "ONLY", dm, 3);
392 dm[1] = 257.+0.09776;
397 gMC->Gsposp("TSWS", 8, "TPC ", 0, 0, z0, 0, "ONLY", dm, 3);
398 gMC->Gsposp("TSWS", 9, "TPC ", 0, 0, -z0, 0, "ONLY", dm, 3);
399 // ==========================================================
401 // ==========================================================
402 // ----------------------------------------------------------
403 // Large wheel -> positioned in the TPC
404 // ----------------------------------------------------------
405 dm[0] = 257.+0.09776;
408 gMC->Gsvolu("TPW1", "TUBE", idtmed[399], dm, 3);
414 gMC->Gsvolu("TPW2", "TUBE", idtmed[498], dm, 3);
416 gMC->Gspos("TPW2", 1, "TPW1", 0, 0, 0, 0, "ONLY");
418 gMC->Gspos("TPW1", 1, "TPC ", 0, 0, z0, 0, "ONLY");
419 gMC->Gspos("TPW1", 2, "TPC ", 0, 0, -z0, 0, "ONLY");
420 // -----------------------------------------------------------
421 // Small wheel -> positioned in the TPSG
422 // -----------------------------------------------------------
427 gMC->Gsvolu("TPW3", "TUBE", idtmed[399], dm, 3);
433 gMC->Gsvolu("TPW4", "TUBE", idtmed[401], dm, 3);
435 gMC->Gspos("TPW4", 1, "TPW3", 0, 0, 0, 0, "ONLY");
439 gMC->Gspos("TPW3", 1, "TPSG", 0, 0, z0, 0, "ONLY");
440 // ---------------------------------------------------------
441 // spokes, inner and outer, also the inner ring
442 // ---------------------------------------------------------
443 dm[0] = 0.5*(135.9-82.1);
449 gMC->Gsvolu("TSPI", "BOX ", idtmed[399], dm, 3);
454 gMC->Gsvolu("TSP1", "BOX ", idtmed[498], dm, 3);
456 gMC->Gspos("TSP1", 1, "TSPI", 0, 0, 0, 0, "ONLY");
458 dm[0] = 0.5*(256.9-142.1);
464 gMC->Gsvolu("TSPO", "BOX ", idtmed[399], dm, 3);
469 gMC->Gsvolu("TSP2", "BOX ", idtmed[498], dm, 3);
471 gMC->Gspos("TSP2", 1, "TSPO", 0, 0, 0, 0, "ONLY");
472 // --------------------------------------------------------
477 gMC->Gsvolu("TSWH", "TUBE", idtmed[399], dm, 3);
483 gMC->Gsvolu("TSW1", "TUBE", idtmed[498], dm, 3);
485 gMC->Gspos("TSW1", 1, "TSWH", 0, 0, 0, 0, "ONLY");
487 z0 = z_side - .16168 - 2.;
488 // --------------------------------------------------------
489 gMC->Gspos("TSWH", 1, "TPSG", 0, 0, z0, 0, "ONLY");
490 // -------------------------------------------------------
491 // posiioning of the inner spokes
492 // -------------------------------------------------------
493 for (il = 1; il <= 6; ++il) {
494 phi1 = opl * .5 + (il - 1) * 2. * opl;
496 phi2 = opl * .5 + 90. + (il - 1) * 2. * opl;
504 alpha = phi1 * kDegrad;
505 x = x1 * TMath::Cos(alpha);
506 y = x1 * TMath::Sin(alpha);
510 AliMatrix(idrotm[idr], theta1, phi1, theta2, phi2, theta3, phi3);
511 gMC->Gspos("TSPI", il, "TPSG", x, y, z0, idrotm[idr], "ONLY");
515 for (iu = 1; iu <= 12; ++iu) {
516 phi1 = opu * .5 + (iu - 1) * 2. * opu;
518 phi2 = opu * .5 + 90. + (iu - 1) * 2. * opu;
526 alpha = phi1 * kDegrad;
527 x = x2 * TMath::Cos(alpha);
528 y = x2 * TMath::Sin(alpha);
532 AliMatrix(idrotm[idr], theta1, phi1, theta2, phi2, theta3, phi3);
533 gMC->Gspos("TSPO", iu, "TPSG", x, y, z0, idrotm[idr], "ONLY");
535 // --------------------------------------------------------
536 // endcap cover (C, 0.86% X0)
537 // --------------------------------------------------------
542 gMC->Gsvolu("TCOV", "TUBE", idtmed[407], dm, 3);
546 gMC->Gspos("TCOV", 1, "TPSG", 0, 0, z0, 0, "ONLY");
547 // --------------------------------------------------------
548 // put the readout chambers into the TPC
549 // --------------------------------------------------------
557 AliMatrix(idrotm[55], theta1, phi1, theta2, phi2, theta3, phi3);
561 gMC->Gspos("TPSG", 1, "TPC ", 0, 0, z0, 0, "ONLY");
562 gMC->Gspos("TPSG", 2, "TPC ", 0, 0, -z0, idrotm[55], "ONLY");
563 // ---------------------------------------------------------
564 // outer gas insulation (CO2)
565 // ---------------------------------------------------------
566 dm[0] = 257.+0.09776;
567 dm[1] = 278.-0.25004;
570 gMC->Gsvolu("TPOI", "TUBE", idtmed[406], dm, 3);
572 gMC->Gspos("TPHV", 1, "TGAS", 0, 0, 0, 0, "ONLY");
573 gMC->Gspos("TGAS", 1, "TPC ", 0, 0, 0, 0, "ONLY");
574 gMC->Gspos("TPOI", 1, "TPC ", 0, 0, 0, 0, "ONLY");
576 gMC->Gspos("TPC ", 1, "ALIC", 0, 0, 0, 0, "ONLY");
577 // ======================================================
578 // all volumes below are positioned in ALIC
579 // ======================================================
580 // ------------------------------------------------------
581 // the last parts of the smaller wheel (TSWS)
582 // ------------------------------------------------------
589 gMC->Gsposp("TSWS", 10, "TPC ", 0, 0, z0, 0, "ONLY", dm, 3);
590 gMC->Gsposp("TSWS", 11, "TPC ", 0, 0, -z0, 0, "ONLY", dm, 3);
596 gMC->Gsposp("TSWS", 12, "TPC ", 0, 0, z0, 0, "ONLY", dm, 3);
597 gMC->Gsposp("TSWS", 13, "TPC ", 0, 0, -z0, 0, "ONLY", dm, 3);
598 // ----------------------------------------------------
599 // Inner vessel (PCON)
600 // This volume is to be positioned directly in ALIC
601 // ----------------------------------------------------
622 gMC->Gsvolu("TPIV", "PCON", idtmed[407], dm, 15);
623 // --------------------------------------------------------
624 // fill the inner vessel with CO2, (HV kDegrader)
625 // cone parts have different thickness
626 // than the central barrel, according to the TP
627 // --------------------------------------------------------
634 dm[3] = -(250.-0.2162);
635 dm[4] = (185.5-0.2126)*tana+0.2126;
654 dm[18] = (250.-0.2162);
655 dm[19] = (185.5-0.2126)*tana+0.2126;
658 gMC->Gsvolu("TPVD", "PCON", idtmed[406], dm, 21);
660 gMC->Gspos("TPVD", 1, "TPIV", 0, 0, 0, 0, "ONLY");
662 gMC->Gspos("TPIV", 1, "ALIC", 0, 0, 0, 0, "ONLY");
663 // ---------------------------------------------------
665 // ---------------------------------------------------
666 gMC->Gsord("TGAS", 6);
667 gMC->Gsord("TPSG", 6);
670 //_____________________________________________________________________________
671 void AliTPCv2::DrawDetector()
674 // Draw a shaded view of the Time Projection Chamber version 1
677 // Set everything unseen
678 gMC->Gsatt("*", "seen", -1);
680 // Set ALIC mother transparent
681 gMC->Gsatt("ALIC","SEEN",0);
683 // Set the volumes visible
684 gMC->Gsatt("TPC","SEEN",0);
685 gMC->Gsatt("TGAS","SEEN",0);
686 gMC->Gsatt("TPSG","SEEN",0);
687 gMC->Gsatt("TPHV","SEEN",1);
688 gMC->Gsatt("TRCS","SEEN",1);
689 gMC->Gsatt("TRCL","SEEN",1);
690 gMC->Gsatt("TSWS","SEEN",1);
691 gMC->Gsatt("TPW1","SEEN",1);
692 gMC->Gsatt("TPW3","SEEN",1);
693 gMC->Gsatt("TSPI","SEEN",1);
694 gMC->Gsatt("TSPO","SEEN",1);
695 gMC->Gsatt("TSWH","SEEN",1);
696 gMC->Gsatt("TPOI","SEEN",1);
697 gMC->Gsatt("TPIV","SEEN",1);
698 gMC->Gsatt("TPVD","SEEN",1);
700 gMC->Gdopt("hide", "on");
701 gMC->Gdopt("shad", "on");
702 gMC->Gsatt("*", "fill", 7);
703 gMC->SetClipBox(".");
704 gMC->SetClipBox("*", 0, 1000, -1000, 1000, -1000, 1000);
706 gMC->Gdraw("alic", 40, 30, 0, 12, 9.5, .025, .025);
707 gMC->Gdhead(1111, "Time Projection Chamber");
708 gMC->Gdman(18, 4, "MAN");
709 gMC->Gdopt("hide","off");
712 //_____________________________________________________________________________
713 void AliTPCv2::CreateMaterials()
716 // Define materials for version 2 of the Time Projection Chamber
720 // Increase maximum number of steps
721 gMC->SetMaxNStep(30000);
723 AliTPC::CreateMaterials();
726 //_____________________________________________________________________________
727 void AliTPCv2::Init()
730 // Initialises version 2 of the TPC after that it has been built
732 Int_t *idtmed = fIdtmed->GetArray()-399;
734 fIdSens1=gMC->VolId("TLGA"); // L-sector
735 fIdSens2=gMC->VolId("TSGA"); // S-sector
736 fIdSens3=gMC->VolId("TSST"); // strip - S-sector (not always used)
737 fIdSens4=gMC->VolId("TLST"); // strip - S-sector (not always used)
739 gMC->SetMaxNStep(30000); // max. number of steps increased
741 gMC->Gstpar(idtmed[403],"LOSS",5);
743 printf("*** TPC version 2 initialized ***\n");
744 printf("Maximum number of steps = %d\n",gMC->GetMaxNStep());
750 //_____________________________________________________________________________
751 void AliTPCv2::StepManager()
754 // Called for every step in the Time Projection Chamber
758 // parameters used for the energy loss calculations
760 const Float_t prim = 14.35; // number of primary collisions per 1 cm
761 const Float_t poti = 20.77e-9; // first ionization potential for Ne/CO2
762 const Float_t w_ion = 35.97e-9; // energy for the ion-electron pair creation
765 const Float_t big = 1.e10;
770 TClonesArray &lhits = *fHits;
777 gMC->SetMaxStep(big);
779 if(!gMC->IsTrackAlive()) return; // particle has disappeared
781 Float_t charge = gMC->TrackCharge();
783 if(TMath::Abs(charge)<=0.) return; // take only charged particles
786 id=gMC->CurrentVolID(copy);
788 // Check the sensitive volume
792 vol[0] = copy + 24; // L-sector number
794 else if(id == fIdSens2)
796 vol[0] = copy; // S-sector number
798 else if(id == fIdSens3 && gMC->IsTrackEntering())
800 vol[1] = copy; // row number
801 id = gMC->CurrentVolOffID(1,copy);
802 vol[0] = copy; // sector number (S-sector)
804 gMC->TrackPosition(pos);
808 hits[3]=0.; // this hit has no energy loss
809 new(lhits[fNhits++]) AliTPChit(fIshunt,gAlice->CurrentTrack(),vol,hits);
811 else if(id == fIdSens4 && gMC->IsTrackEntering())
813 vol[1] = copy; // row number
814 id = gMC->CurrentVolOffID(1,copy);
815 vol[0] = copy+24; // sector number (L-sector)
817 gMC->TrackPosition(pos);
821 hits[3]=0.; // this hit has no energy loss
822 new(lhits[fNhits++]) AliTPChit(fIshunt,gAlice->CurrentTrack(),vol,hits);
827 // charged particle is in the sensitive volume
830 if(gMC->TrackStep() > 0) {
832 Int_t nel = (Int_t)(((gMC->Edep())-poti)/w_ion) + 1;
833 nel=TMath::Min(nel,300); // 300 electrons corresponds to 10 keV
835 gMC->TrackPosition(pos);
839 hits[3]=(Float_t)nel;
843 new(lhits[fNhits++]) AliTPChit(fIshunt,gAlice->CurrentTrack(),vol,hits);
847 // Stemax calculation for the next step
851 gMC->TrackMomentum(mom);
852 Float_t ptot=mom.Rho();
853 Float_t beta_gamma = ptot/gMC->TrackMass();
855 if(gMC->TrackPid() <= 3 && ptot > 0.002)
857 pp = prim*1.58; // electrons above 20 MeV/c are on the plateau!
861 pp=prim*BetheBloch(beta_gamma);
862 if(TMath::Abs(charge) > 1.) pp *= (charge*charge);
866 gMC->Rndm(random,1); // good, old GRNDM from Geant3
868 Double_t rnd = (Double_t)random[0];
870 gMC->SetMaxStep(-TMath::Log(rnd)/pp);
874 //_____________________________________________________________________________
875 Float_t AliTPCv2::BetheBloch(Float_t bg)
878 // Bethe-Bloch energy loss formula
880 const Double_t p1=0.76176e-1;
881 const Double_t p2=10.632;
882 const Double_t p3=0.13279e-4;
883 const Double_t p4=1.8631;
884 const Double_t p5=1.9479;
886 Double_t dbg = (Double_t) bg;
888 Double_t beta = dbg/TMath::Sqrt(1.+dbg*dbg);
890 Double_t aa = TMath::Power(beta,p4);
891 Double_t bb = TMath::Power(1./dbg,p5);
893 bb=TMath::Log(p3+bb);
895 return ((Float_t)((p2-aa-bb)*p1/aa));