1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 Revision 1.3 2000/06/15 15:47:12 jbarbosa
19 Corrected compilation errors on HP-UX (replaced pow with TMath::Power)
21 Revision 1.2 2000/06/12 15:26:09 jbarbosa
24 Revision 1.1 2000/06/09 14:53:01 jbarbosa
25 Bari's pattern recognition algorithm
29 #include "AliRICHHit.h"
30 #include "AliRICHCerenkov.h"
31 #include "AliRICHPadHit.h"
32 #include "AliRICHDigit.h"
33 #include "AliRICHRawCluster.h"
34 #include "AliRICHRecHit.h"
36 #include "AliDetector.h"
38 #include "AliRICHPoints.h"
39 #include "AliRICHSegmentation.h"
40 #include "AliRICHPatRec.h"
42 #include "AliRICHConst.h"
43 #include "AliRICHPoints.h"
46 #include <TParticle.h>
53 ClassImp(AliRICHPatRec)
54 //___________________________________________
55 AliRICHPatRec::AliRICHPatRec() : TObject()
57 // Default constructor
61 //___________________________________________
62 AliRICHPatRec::AliRICHPatRec(const char *name, const char *title)
65 //Constructor for Bari's pattern recogniton method object
68 void AliRICHPatRec::PatRec()
71 // Pattern recognition algorithm
73 AliRICHChamber* iChamber;
74 AliRICHSegmentation* segmentation;
76 Int_t ntracks, ndigits[kNCH];
87 printf("PatRec started\n");
89 AliRICH *pRICH = (AliRICH*)gAlice->GetDetector("RICH");
90 TTree *treeH = gAlice->TreeH();
92 ntracks =(Int_t) treeH->GetEntries();
94 for (itr=0; itr<ntracks; itr++) {
96 status = TrackParam(itr,ich);
97 if(status==1) continue;
98 //printf(" theta %f phi %f track \n",fTrackTheta,fTrackPhi);
99 // ring->Fill(fTrackLoc[0],fTrackLoc[1],100.);
101 iChamber = &(pRICH->Chamber(ich));
102 segmentation=iChamber->GetSegmentationModel();
104 nent=(Int_t)gAlice->TreeD()->GetEntries();
105 gAlice->TreeD()->GetEvent(nent-1);
106 TClonesArray *pDigitss = pRICH->DigitsAddress(ich);
107 ndigits[ich] = pDigitss->GetEntriesFast();
108 printf("Digits in chamber %d: %d\n",ich,ndigits[ich]);
109 AliRICHDigit *padI = 0;
113 for (Int_t dig=0;dig<ndigits[ich];dig++) {
114 padI=(AliRICHDigit*) pDigitss->UncheckedAt(dig);
118 segmentation->GetPadCxy(x,y,rx,ry);
120 //printf("Pad coordinates x:%d, Real coordinates x:%f\n",x,rx);
121 //printf("Pad coordinates y:%d, Real coordinates y:%f\n",y,ry);
127 fCerenkovAnglePad = PhotonCerenkovAngle();
128 if(fCerenkovAnglePad==-999) continue;
130 if(!PhotonInBand()) continue;
135 segmentation->GetPadIxy(fXpad,fYpad,xpad,ypad);
137 padsUsedX[goodPhotons]=xpad;
138 padsUsedY[goodPhotons]=ypad;
141 fEtaPhotons[goodPhotons-1] = fCerenkovAnglePad;
143 fNumEtaPhotons = goodPhotons;
145 BackgroundEstimation();
148 //CerenkovRingDrawing();
152 rechit[2] = fThetaCerenkov;
153 rechit[3] = fXshift + fTrackLoc[0];
154 rechit[4] = fYshift + fTrackLoc[1];
155 rechit[5] = fEmissPoint;
156 rechit[6] = goodPhotons;
158 //printf("Center coordinates:%f %f\n",rechit[3],rechit[4]);
160 pRICH->AddRecHit(ich,rechit,fEtaPhotons,padsUsedX,padsUsedY);
164 gAlice->TreeR()->Fill();
166 for (i=0;i<kNCH;i++) {
167 fRec=pRICH->RecHitsAddress(i);
168 int ndig=fRec->GetEntriesFast();
169 printf ("Chamber %d, rings %d\n",i,ndig);
171 pRICH->ResetRecHits();
176 Int_t AliRICHPatRec::TrackParam(Int_t itr, Int_t &ich)
178 // Get Local coordinates of track impact
180 AliRICHChamber* iChamber;
181 AliRICHSegmentation* segmentation;
183 Float_t trackglob[3];
191 printf("Calling TrackParam\n");
194 TTree *treeH = gAlice->TreeH();
195 treeH->GetEvent(itr);
197 AliRICH *pRICH = (AliRICH*)gAlice->GetDetector("RICH");
198 AliRICHHit* mHit=(AliRICHHit*)pRICH->FirstHit(-1);
199 if(mHit==0) return 1;
200 ich = mHit->fChamber-1;
201 trackglob[0] = mHit->fX;
202 trackglob[1] = mHit->fY;
203 trackglob[2] = mHit->fZ;
207 fTrackMom = sqrt(TMath::Power(pX,2)+TMath::Power(pY,2)+TMath::Power(pZ,2));
208 thetatr = (mHit->fTheta)*(Float_t)kDegrad;
209 phitr = mHit->fPhi*(Float_t)kDegrad;
211 part = mHit->fParticle;
213 iChamber = &(pRICH->Chamber(ich));
214 iChamber->GlobaltoLocal(trackglob,trackloc);
216 segmentation=iChamber->GetSegmentationModel();
218 // retrieve geometrical params
220 AliRICHGeometry* fGeometry=iChamber->GetGeometryModel();
222 fRw = fGeometry->GetFreonThickness();
223 fQw = fGeometry->GetQuartzThickness();
224 fTgap = fGeometry->GetGapThickness();
225 Float_t radiatorToPads= fGeometry->GetRadiatorToPads();
226 //+ fGeometry->GetProximityGapThickness();
228 //printf("Distance to pads. From geometry:%f, From calculations:%f\n",radiatorToPads,fRw + fQw + fTgap);
230 //Float_t apar = (fRw + fQw + fTgap)*tan(thetatr);
231 Float_t apar = radiatorToPads*tan(thetatr);
232 fTrackLoc[0] = apar*cos(phitr);
233 fTrackLoc[1] = apar*sin(phitr);
234 //fTrackLoc[2] = fRw + fQw + fTgap;
235 fTrackLoc[2] = radiatorToPads;
236 fTrackTheta = thetatr;
239 fXshift = trackloc[0] - fTrackLoc[0];
240 fYshift = trackloc[2] - fTrackLoc[1];
245 Float_t AliRICHPatRec::EstimationAtLimits(Float_t lim, Float_t radius,
249 // Estimation of emission point
251 Float_t nquartz = 1.585;
253 Float_t nfreon = 1.295;
256 // printf("Calling EstimationLimits\n");
258 Float_t apar = (fRw -fEmissPoint + fQw + fTgap)*tan(fTrackTheta);
259 Float_t b1 = (fRw-fEmissPoint)*tan(lim);
260 Float_t b2 = fQw / sqrt(TMath::Power(nquartz,2)-TMath::Power(nfreon*sin(lim),2));
261 Float_t b3 = fTgap / sqrt(TMath::Power(ngas,2)-TMath::Power(nfreon*sin(lim),2));
262 Float_t bpar = b1 + nfreon*sin(lim)*(b2+b3);
263 value = TMath::Power(radius,2)
264 -TMath::Power((apar*cos(fTrackPhi)-bpar*cos(phiphot)),2)
265 -TMath::Power((apar*sin(fTrackPhi)-bpar*sin(phiphot)),2);
270 Float_t AliRICHPatRec::PhotonCerenkovAngle()
272 // Cherenkov pad angle reconstruction
276 Float_t cherMax = 0.8;
278 Float_t eps = 0.0001;
279 Int_t niterEmiss = 0;
280 Int_t niterEmissMax = 0;
281 Float_t x1,x2,x3=0,p1,p2,p3;
285 // printf("Calling PhotonCerenkovAngle\n");
287 radius = sqrt(TMath::Power(fTrackLoc[0]-fXpad,2)+TMath::Power(fTrackLoc[1]-fYpad,2));
288 fEmissPoint = fRw/2.; //Start value of EmissionPoint
290 while(niterEmiss<=niterEmissMax) {
293 argY = fYpad - fEmissPoint*tan(fTrackTheta)*sin(fTrackPhi);
294 argX = fXpad - fEmissPoint*tan(fTrackTheta)*cos(fTrackPhi);
295 phiphot = atan2(argY,argX);
296 p1 = EstimationAtLimits(cherMin,radius,phiphot);
297 p2 = EstimationAtLimits(cherMax,radius,phiphot);
300 // printf("PhotonCerenkovAngle failed\n");
304 //start to find the Cherenkov pad angle
308 p3 = EstimationAtLimits(x3,radius,phiphot);
309 while(TMath::Abs(p3)>eps){
313 p1 = EstimationAtLimits(x1,radius,phiphot);
316 p3 = EstimationAtLimits(x3,radius,phiphot);
320 // printf(" max iterations in PhotonCerenkovAngle\n");
324 // printf("niterFun %i \n",niterFun);
326 if (niterEmiss != niterEmissMax+1) EmissionPoint();
329 printf(" phiphot %f fXpad %f fYpad %f fEmiss %f \n",
330 phiphot,fXpad,fYpad,fEmissPoint);
338 void AliRICHPatRec::EmissionPoint()
341 // Find emission point
343 Float_t absorbtionLength=7.83*fRw; //absorption length in the freon (cm)
344 // 7.83 = -1/ln(T0) where
345 // T0->Trasmission freon at 180nm = 0.88 (Eph=6.85eV)
346 Float_t photonLength, photonLengthMin, photonLengthMax;
348 photonLength=exp(-fRw/(absorbtionLength*cos(fCerenkovAnglePad)));
349 photonLengthMin=fRw*photonLength/(1.-photonLength);
350 photonLengthMax=absorbtionLength*cos(fCerenkovAnglePad);
351 fEmissPoint = fRw + photonLengthMin - photonLengthMax;
355 void AliRICHPatRec::PhotonSelection(Int_t track, Int_t &nphot, Float_t &thetamean)
358 // not implemented yet
360 printf("Calling PhotonSelection\n");
363 void AliRICHPatRec::BackgroundEstimation()
366 // estimate background noise
368 Float_t stepEta = 0.001;
369 Float_t etaMinBkg = 0.72;
370 Float_t etaMaxBkg = 0.75;
372 Float_t etaMax = 0.75;
374 Float_t nfreon = 1.295;
376 Float_t etaStepMin,etaStepMax,etaStepAvg;
378 Int_t numPhotBkg, numPhotonStep;
379 Float_t funBkg,areaBkg,normBkg;
380 Float_t densityBkg,storeBkg,numStore;
386 nstep = (int)((etaMaxBkg-etaMinBkg)/stepEta);
388 for (i=0;i<fNumEtaPhotons;i++) {
390 if(fEtaPhotons[i]>etaMinBkg && fEtaPhotons[i]<etaMaxBkg) {
394 if (numPhotBkg == 0) {
395 for (i=0;i<fNumEtaPhotons;i++) {
396 fWeightPhotons[i] = 1.;
401 // printf(" numPhotBkg %i ",numPhotBkg);
403 for (i=0;i<nstep;i++) {
404 etaStepMin = etaMinBkg + (Float_t)(i)*stepEta;
405 etaStepMax = etaMinBkg + (Float_t)(i+1)*stepEta;
406 etaStepAvg = 0.5*(etaStepMax + etaStepMin);
408 funBkg = tan(etaStepAvg)*TMath::Power((1.+TMath::Power(tan(etaStepAvg),2)),
409 5.52)-7.803 + 22.02*tan(etaStepAvg);
411 thetaSig = asin(nfreon/ngas*sin(etaStepAvg));
412 funBkg = tan(thetaSig)*(1.+TMath::Power(tan(thetaSig),2))*nfreon
413 /ngas*cos(etaStepAvg)/cos(thetaSig);
414 areaBkg += stepEta*funBkg;
417 densityBkg = 0.95*(Float_t)(numPhotBkg)/areaBkg;
418 // printf(" densityBkg %f \n",densityBkg);
420 nstep = (int)((etaMax-etaMin)/stepEta);
423 for (i=0;i<nstep;i++) {
424 etaStepMin = etaMinBkg + (Float_t)(i)*stepEta;
425 etaStepMax = etaMinBkg + (Float_t)(i+1)*stepEta;
426 etaStepAvg = 0.5*(etaStepMax + etaStepMin);
428 funBkg = tan(etaStepAvg)*TMath::Power((1.+TMath::Power(tan(etaStepAvg),2)),
429 5.52)-7.803 + 22.02*tan(etaStepAvg);
432 thetaSig = asin(nfreon/ngas*sin(etaStepAvg));
433 funBkg = tan(thetaSig)*(1.+TMath::Power(tan(thetaSig),2))*nfreon
434 /ngas*cos(etaStepAvg)/cos(thetaSig);
436 areaBkg = stepEta*funBkg;
437 normBkg = densityBkg*areaBkg;
439 for (ip=0;ip<fNumEtaPhotons;ip++) {
440 if(fEtaPhotons[ip]>etaStepMin && fEtaPhotons[ip]<etaStepMax) {
444 if (numPhotonStep == 0) {
452 if (numPhotonStep == 0) continue;
453 for (ip=0;ip<fNumEtaPhotons;ip++) {
454 if(fEtaPhotons[ip]>etaStepMin && fEtaPhotons[ip]<etaStepMax) {
458 fWeightPhotons[ip] = 1. - normBkg/(Float_t)(numPhotonStep);
460 printf(" normBkg %f numPhotonStep %i fW %f \n",
461 normBkg, numPhotonStep, fWeightPhotons[ip]);
463 if(fWeightPhotons[ip]<0) fWeightPhotons[ip] = 0.;
470 void AliRICHPatRec::FlagPhotons(Int_t track, Float_t theta)
473 // not implemented yet
475 printf("Calling FlagPhotons\n");
479 //////////////////////////////////////////
485 Int_t AliRICHPatRec::PhotonInBand()
487 //0=label for parameters giving internal band ellipse
488 //1=label for parameters giving external band ellipse
490 Float_t imp[2], mass[2], energy[2], beta[2];
491 Float_t emissPointLength[2];
492 Float_t e1, e2, f1, f2;
493 Float_t nfreon[2], nquartz[2];
495 Float_t pointsOnCathode[3];
497 Float_t phpad, thetacer[2];
498 Float_t bandradius[2], padradius;
500 imp[0] = 5.0; //threshold momentum for the proton Cherenkov emission
503 mass[0] = 0.938; //proton mass
504 mass[1] = 0.139; //pion mass
506 emissPointLength[0] = fRw-0.0001; //at the beginning of the radiator
507 emissPointLength[1] = 0.;//at the end of radiator
509 //parameters to calculate freon window refractive index vs. energy
513 //parameters to calculate quartz window refractive index vs. energy
527 for (times=0; times<=1; times++) {
529 nfreon[times] = a+b*energy[times];
532 nquartz[times] = sqrt(1+(f1/(TMath::Power(e1,2)-TMath::Power(energy[times],2)))+
533 (f2/(TMath::Power(e2,2)-TMath::Power(energy[times],2))));
535 beta[times] = imp[times]/sqrt(TMath::Power(imp[times],2)+TMath::Power(mass[times],2));
537 thetacer[times] = CherenkovAngle( nfreon[times], beta[times]);
539 bandradius[times] = DistanceFromMip( nfreon[times], nquartz[times],
540 emissPointLength[times],
541 thetacer[times], phpad, pointsOnCathode);
542 //printf(" ppp %f %f %f \n",pointsOnCathode);
545 bandradius[0] -= 1.6;
546 bandradius[1] += 1.6;
547 padradius = sqrt(TMath::Power(fXpad,2)+TMath::Power(fYpad,2));
548 // printf(" rmin %f r %f rmax %f \n",bandradius[0],padradius,bandradius[1]);
550 if(padradius>=bandradius[0] && padradius<=bandradius[1]) return 1;
554 Float_t AliRICHPatRec::DistanceFromMip(Float_t nfreon, Float_t nquartz,
555 Float_t emissPointLength, Float_t thetacer,
556 Float_t phpad, Float_t pointsOnCathode[3])
559 // Find the distance to MIP impact
561 Float_t distanceValue;
563 TVector3 radExitPhot(1,1,1);//photon impact at the radiator exit with respect
564 //to local reference sistem with the origin in the MIP entrance
566 TVector3 vectEmissPointLength(1,1,1);
567 Float_t magEmissPointLenght;
569 TVector3 radExitPhot2(1,1,1);//photon impact at the radiator exit with respect
570 Float_t magRadExitPhot2;
571 //to a reference sistem with origin in the photon emission point and
572 //axes parallel to the MIP reference sistem
574 TVector3 quarExitPhot(1,1,1);//photon impact at the quartz exit with respect
575 Float_t magQuarExitPhot;
577 TVector3 gapExitPhot(1,1,1) ;
578 Float_t magGapExitPhot;
580 TVector3 PhotocatExitPhot(1,1,1);
582 Double_t thetarad , phirad ;
583 Double_t thetaquar, phiquar;
584 Double_t thetagap , phigap ;
588 magEmissPointLenght = emissPointLength/cos(fTrackTheta);
590 vectEmissPointLength.SetMag(magEmissPointLenght);
591 vectEmissPointLength.SetTheta(fTrackTheta);
592 vectEmissPointLength.SetPhi(fTrackPhi);
595 radExitPhot2.SetTheta(thetacer);
596 radExitPhot2.SetPhi(phpad);
603 r1. RotateY(fTrackTheta);
604 r2. RotateZ(fTrackPhi);
608 r = r2 * r1;//rotation about the y axis by MIP theta incidence angle
609 //following by a rotation about the z axis by MIP phi incidence angle;
612 radExitPhot2 = r * radExitPhot2;
613 theta2 = radExitPhot2.Theta();
614 magRadExitPhot2 = (fRw - vectEmissPointLength(2))/cos(theta2);
615 radExitPhot2.SetMag(magRadExitPhot2);
618 radExitPhot = vectEmissPointLength + radExitPhot2;
619 thetarad = radExitPhot.Theta();
620 phirad = radExitPhot.Phi(); //check on the original file //
622 thetaquar = SnellAngle( nfreon, nquartz, theta2);
623 phiquar = radExitPhot2.Phi();
624 if(thetaquar == 999.) return thetaquar;
625 magQuarExitPhot = fQw/cos(thetaquar);
626 quarExitPhot.SetMag( magQuarExitPhot);
627 quarExitPhot.SetTheta(thetaquar);
628 quarExitPhot.SetPhi(phiquar);
630 thetagap = SnellAngle( nquartz, ngas, thetaquar);
632 if(thetagap == 999.) return thetagap;
633 magGapExitPhot = fTgap/cos(thetagap);
634 gapExitPhot.SetMag( magGapExitPhot);
635 gapExitPhot.SetTheta(thetagap);
636 gapExitPhot.SetPhi(phigap);
638 PhotocatExitPhot = radExitPhot + quarExitPhot + gapExitPhot;
640 distanceValue = sqrt(TMath::Power(PhotocatExitPhot(0),2)
641 +TMath::Power(PhotocatExitPhot(1),2));
642 pointsOnCathode[0] = (Float_t) PhotocatExitPhot(0) + fXshift - fTrackLoc[0];
643 pointsOnCathode[1] = (Float_t) PhotocatExitPhot(1) + fYshift - fTrackLoc[1];
644 pointsOnCathode[2] = (Float_t) PhotocatExitPhot(2);
646 //printf(" point in Distance.2. %f %f %f \n",pointsOnCathode[0],pointsOnCathode[1],pointsOnCathode[2]);
648 return distanceValue;
652 Float_t AliRICHPatRec::PhiPad()
658 Float_t thetapad, phipad;
659 Float_t thetarot, phirot;
661 zpad = fRw + fQw + fTgap;
663 TVector3 photonPad(fXpad, fYpad, zpad);
664 thetapad = photonPad.Theta();
665 phipad = photonPad.Phi();
671 thetarot = - fTrackTheta;
672 phirot = - fTrackPhi;
674 r2. RotateY(thetarot);
676 r = r2 * r1;//rotation about the z axis by MIP -phi incidence angle
677 //following by a rotation about the y axis by MIP -theta incidence angle;
679 photonPad = r * photonPad;
681 phipad = photonPad.Phi();
686 Float_t AliRICHPatRec:: SnellAngle(Float_t n1, Float_t n2, Float_t theta1)
689 // Compute the Snell angle
691 Float_t sinrefractangle;
692 Float_t refractangle;
694 sinrefractangle = (n1/n2)*sin(theta1);
696 if(sinrefractangle>1.) {
701 refractangle = asin(sinrefractangle);
705 Float_t AliRICHPatRec::CherenkovAngle(Float_t n, Float_t beta)
708 // Compute the cerenkov angle
717 thetacer = acos (1./(n*beta));
721 Float_t AliRICHPatRec::BetaCerenkov(Float_t n, Float_t theta)
728 beta = 1./(n*cos(theta));
735 void AliRICHPatRec::HoughResponse()
739 // Implement Hough response pat. rec. method
744 int i, j, k, nCorrBand;
747 float angle, thetaCerMean;
752 float stepEta = 0.001;
753 float windowEta = 0.040;
757 float etaPeakPos = -1;
758 Int_t etaPeakCount = -1;
763 nBin = (int)(0.5+etaMax/(stepEta));
764 nCorrBand = (int)(0.5+ windowEta/(2 * stepEta));
765 memset ((void *)hcs, 0, etaBin*sizeof(int));
767 for (k=0; k< fNumEtaPhotons; k++) {
769 angle = fEtaPhotons[k];
771 if (angle>=etaMin && angle<= etaMax) {
772 bin = (int)(0.5+angle/(stepEta));
776 if (bin2>nBin) bin2=nBin;
778 for (j=bin1; j<bin2; j++) {
779 hcs[j] += fWeightPhotons[k];
782 thetaCerMean += angle;
786 thetaCerMean /= fNumEtaPhotons;
790 for (bin=0; bin <nBin; bin++) {
791 angle = (bin+0.5) * (stepEta);
792 if (hcs[bin] && hcs[bin] > etaPeakPos) {
794 etaPeakPos = hcs[bin];
798 if (hcs[bin] == etaPeakPos) {
799 etaPeak[++etaPeakCount] = angle;
804 for (i=0; i<etaPeakCount+1; i++) {
805 fThetaCerenkov += etaPeak[i];
807 if (etaPeakCount>=0) {
808 fThetaCerenkov /= etaPeakCount+1;
809 fThetaPeakPos = etaPeakPos;
814 void AliRICHPatRec::HoughFiltering(float hcs[])
820 float k[5] = {0.05, 0.25, 0.4, 0.25, 0.05};
827 float stepEta = 0.001;
829 nBin = (int)(1+etaMax/stepEta);
830 sizeHCS = etaBin*sizeof(float);
832 memset ((void *)hcsFilt, 0, sizeHCS);
834 for (nx = 0; nx < nBin; nx++) {
835 for (i = 0; i < 5; i++) {
837 if (nxDx> -1 && nxDx<nBin)
838 hcsFilt[nx] += hcs[nxDx] * k[i];
842 for (nx = 0; nx < nBin; nx++) {
843 hcs[nx] = hcsFilt[nx];
847 /*void AliRICHPatRec::CerenkovRingDrawing()
850 //to draw Cherenkov ring by known Cherenkov angle
855 Float_t nfreonave, nquartzave;
858 Float_t e1, e2, f1, f2;
861 //parameters to calculate freon window refractive index vs. energy
866 //parameters to calculate quartz window refractive index vs. energy
878 for (Nphpad=0; Nphpad<nmaxdegrees;Nphpad++) {
880 phpad = (360./(Float_t)nmaxdegrees)*(Float_t)Nphpad;
882 aveEnerg = (energy[0]+energy[1])/2.;
884 nfreonave = a+b*aveEnerg;
885 nquartzave = sqrt(1+(f1/(TMath::Power(e1,2)-TMath::Power(aveEnerg,2)))+
886 (f2/(TMath::Power(e2,2)-TMath::Power(aveEnerg,2))));
888 bandradius = DistanceFromMip(nfreonave, nquartzave,
889 fEmissPoint,fThetaCerenkov, phpad);
891 fCoordEllipse[0][Nphpad] = fOnCathode[0];
892 fCoordEllipse[1][Nphpad] = fOnCathode[1];
893 printf(" values %f %f \n",fOnCathode[0],fOnCathode[1]);