New geometry files from R.Barbera
[u/mrichter/AliRoot.git] / TGeant3 / THIGZ.cxx
CommitLineData
fe4da5cc 1///////////////////////////////////////////////////////////////////////////////
2// //
3// Interface to the HIGZ package for the GEANT drawing package //
4// //
5//Begin_Html
6/*
1439f98e 7<img src="picts/THIGZClass.gif">
fe4da5cc 8*/
9//End_Html
10// //
11// //
12///////////////////////////////////////////////////////////////////////////////
13
14#include "TROOT.h"
15#include "THIGZ.h"
16#include "TGeant3.h"
17#include "TGraph.h"
18#include "TColor.h"
19#include "TLine.h"
20#include "TPolyLine.h"
21#include "TPolyMarker.h"
22#include "TPaveLabel.h"
23#include "TText.h"
24#include "Rtypes.h"
25#include "AliCallf77.h"
26#include "TPaveTree.h"
27#include <string.h>
28#include <ctype.h>
29
30#ifndef WIN32
31# define hplint hplint_
32# define hplend hplend_
33# define hplfra hplfra_
34# define igmeta igmeta_
35# define iselnt iselnt_
36# define igiwty igiwty_
37# define igqwk igqwk_
38
39# define iacwk iacwk_
40# define iclrwk iclrwk_
41# define iclwk iclwk_
42# define idawk idawk_
43# define ifa ifa_
44# define igbox igbox_
45# define ightor ightor_
46# define igpave igpave_
47# define igpid igpid_
48# define igq igq_
49# define igrng igrng_
50# define igsa igsa_
51# define igset igset_
52# define igterm igterm_
53# define iopwk iopwk_
54# define ipl ipl_
55# define ipm ipm_
56# define irqlc irqlc_
57# define iscr iscr_
58# define isfaci isfaci_
59# define isfais isfais_
60# define isln isln_
61# define ismk ismk_
62# define islwsc islwsc_
63# define isplci isplci_
64# define ispmci ispmci_
65# define istxci istxci_
66# define isvp isvp_
67# define iswn iswn_
68# define itx itx_
69
70#else
71# define iacwk IACWK
72# define iclrwk ICLRWK
73# define iclwk ICLWK
74# define idawk IDAWK
75# define ifa IFA
76# define igbox IGBOX
77# define ightor IGHTOR
78# define igpave IGPAVE
79# define igpid IGPID
80# define igq IGQ
81# define igrng IGRNG
82# define igsa IGSA
83# define igset IGSET
84# define igterm IGTERM
85# define iopwk IOPWK
86# define ipl IPL
87# define ipm IPM
88# define irqlc IRQLC
89# define iscr ISCR
90# define isfaci ISFACI
91# define isfais ISFAIS
92# define isln ISLN
93# define ismk ISMK
94# define islwsc ISLWSC
95# define isplci ISPLCI
96# define ispmci ISPMCI
97# define istxci ISTXCI
98# define isvp ISVP
99# define iswn ISWN
100# define itx ITX
101#endif
102
103static Int_t npid = 0;
104static char cpar[1200];
cfce8870 105static TGeant3 *geant3=(TGeant3*)gMC;
fe4da5cc 106
107THIGZ *higz = 0;
108
109ClassImp(THIGZ)
110
111//_______________________________________________________________
112THIGZ::THIGZ()
113 :TCanvas()
114{
115}
116
117//_______________________________________________________________
118THIGZ::THIGZ(Int_t size)
119 :TCanvas("higz","higz",size,size)
120{
121 higz = this;
122 Reset();
123 SetFillColor(10);
124}
125//_______________________________________________________________
126THIGZ::~THIGZ()
127{
128}
129//_______________________________________________________________
130Float_t THIGZ::Get(const char *name)
131{
132 if (!strcmp(name,"FAIS")) return fFAIS;
133 if (!strcmp(name,"FASI")) return fFASI;
134 if (!strcmp(name,"LTYP")) return fLTYP;
135 if (!strcmp(name,"BASL")) return fBASL;
136 if (!strcmp(name,"LWID")) return fLWID;
137 if (!strcmp(name,"MTYP")) return fMTYP;
138 if (!strcmp(name,"MSCF")) return fMSCF;
139 if (!strcmp(name,"PLCI")) return fPLCI;
140 if (!strcmp(name,"PMCI")) return fPMCI;
141 if (!strcmp(name,"FACI")) return fFACI;
142 if (!strcmp(name,"TXCI")) return fTXCI;
143 if (!strcmp(name,"TXAL")) return fTXAL;
144 if (!strcmp(name,"CHHE")) return fCHHE*fY2;
145 if (!strcmp(name,"TANG")) return fTANG;
146 if (!strcmp(name,"TXFP")) return fTXFP;
147 if (!strcmp(name,"BORD")) return fBORD;
148 if (!strcmp(name,"NCOL")) return fNCOL;
149 if (!strcmp(name,"DRMD")) return fDRMD;
150 if (!strcmp(name,"SYNC")) return fSYNC;
151 if (!strcmp(name,"CLIP")) return fCLIP;
152 if (!strcmp(name,"2BUF")) return f2BUF;
153 return -1;
154}
155//_______________________________________________________________
156void THIGZ::Set(const char *name, Float_t val)
157{
158 if (!strcmp(name,"FAIS")) {fFAIS = Int_t(val); return;}
159 if (!strcmp(name,"FASI")) {fFASI = Int_t(val); return;}
160 if (!strcmp(name,"LTYP")) {fLTYP = Int_t(val); return;}
161 if (!strcmp(name,"BASL")) {fBASL = val; return;}
162 if (!strcmp(name,"LWID")) {fLWID = val; if (val <= 0) fLWID=1; return;}
163 if (!strcmp(name,"MTYP")) {fMTYP = Int_t(val); return;}
164 if (!strcmp(name,"MSCF")) {fMSCF = val; return;}
165 if (!strcmp(name,"PLCI")) {fPLCI = Int_t(val); return;}
166 if (!strcmp(name,"PMCI")) {fPMCI = Int_t(val); return;}
167 if (!strcmp(name,"FACI")) {fFACI = Int_t(val)%1000; return;}
168 if (!strcmp(name,"TXCI")) {fTXCI = Int_t(val); return;}
169 if (!strcmp(name,"TXAL")) {
170 Int_t align = Int_t(val);
171 Int_t aligh = align/10;
172 Int_t aligv = align%10;
173 Int_t ah = aligh;
174 Int_t av = aligv;
175 if (aligh == 0) ah = 1;
176 if (aligv == 1 || aligh == 2) av = 3;
177 if (aligv == 3) av = 2;
178 if (aligv == 0) av = 1;
179 fTXAL = 10*ah + av;
180 return;
181 }
182 if (!strcmp(name,"CHHE")) {fCHHE = val/fY2; if (fCHHE <= 0) fCHHE = 0.03; return;}
183 if (!strcmp(name,"TANG")) {fTANG = val; return;}
184 if (!strcmp(name,"TXFP")) {fTXFP = Int_t(val); return;}
185 if (!strcmp(name,"BORD")) {fBORD = Int_t(val); return;}
186 if (!strcmp(name,"NCOL")) {fNCOL = Int_t(val); return;}
187 if (!strcmp(name,"DRMD")) {fDRMD = Int_t(val); return;}
188 if (!strcmp(name,"SYNC")) {fSYNC = Int_t(val); return;}
189 if (!strcmp(name,"CLIP")) {fCLIP = Int_t(val); return;}
190 if (!strcmp(name,"2BUF")) {f2BUF = Int_t(val); return;}
191}
192//_______________________________________________________________
193void THIGZ::Reset(Option_t *)
194{
195 fFAIS = 0;
196 fFASI = 1;
197 fLTYP = 1;
198 fBASL = 1;
199 fLWID = 1;
200 fMTYP = 1;
201 fMSCF = 1;
202 fPLCI = 1;
203 fPMCI = 1;
204 fFACI = 1;
205 fTXCI = 1;
206 fTXAL = 12;
207 fCHHE = 0.03;
208 fTANG = 0;
209 fTXFP = 62;
210 fBORD = 0;
211 fNCOL = 8;
212 fDRMD = 1;
213 fSYNC = 1;
214 fCLIP = 0;
215 f2BUF = 0;
216 fPID = 0;
217 fPname= "";
218}
219//___________________________________________
220void THIGZ::Gsatt(const char *name, const char *att, Int_t val)
221{
222// NAME Volume name
223// IOPT Name of the attribute to be set
224// IVAL Value to which the attribute is to be set
225//
226// name= "*" stands for all the volumes.
227// iopt can be chosen among the following :
228// see TGeant3::Gsatt for more details
229//
230
cfce8870 231 gMC->Gsatt(name,att,val);
fe4da5cc 232}
233
234//___________________________________________
235void THIGZ::Gdopt(const char *name,const char *value)
236{
237// NAME Option name
238// VALUE Option value
239//
240// To set/modify the drawing options.
241// see TGeant3::Gdopt for more details
242//
cfce8870 243 gMC->Gdopt(name,value);
fe4da5cc 244}
245
246
247//___________________________________________
248void THIGZ::Gdraw(const char *name,Float_t theta, Float_t phi, Float_t psi,Float_t u0,Float_t v0,Float_t ul,Float_t vl)
249{
250// NAME Volume name
251// +
252// THETA Viewing angle theta (for 3D projection)
253// PHI Viewing angle phi (for 3D projection)
254// PSI Viewing angle psi (for 2D rotation)
255// U0 U-coord. (horizontal) of volume origin
256// V0 V-coord. (vertical) of volume origin
257// SU Scale factor for U-coord.
258// SV Scale factor for V-coord.
259// see TGeant3::Gdraw for more details
260//
261
cfce8870 262 gMC->Gdraw(name,theta,phi,psi,u0,v0,ul,vl);
fe4da5cc 263}
264
265
266//___________________________________________
267void THIGZ::Gdrawc(const char *name,Int_t axis, Float_t cut,Float_t u0,Float_t v0,Float_t ul,Float_t vl)
268{
269// NAME Volume name
270// CAXIS Axis value
271// CUTVAL Cut plane distance from the origin along the axis
272// +
273// U0 U-coord. (horizontal) of volume origin
274// V0 V-coord. (vertical) of volume origin
275// SU Scale factor for U-coord.
276// SV Scale factor for V-coord.
277// see TGeant3::Gdrawc for more details
278//
279
fe4da5cc 280 geant3->Gdrawc(name,axis,cut,u0,v0,ul,vl);
281}
282
283
284//___________________________________________
285void THIGZ::Gdspec(const char *name)
286{
287// NAME Volume name
288//
289// Shows 3 views of the volume (two cut-views and a 3D view), together with
290// its geometrical specifications. The 3D drawing will
291// be performed according the current values of the options HIDE and
292// SHAD and according the current CVOL clipping parameters for that
293// volume.
294// see TGeant3::Gdspec for more details
295//
296
fe4da5cc 297 geant3->Gdspec(name);
298}
299
300
301//___________________________________________
302void THIGZ::Gdtree(const char *name,Int_t levmax, Int_t isel)
303{
304// NAME Volume name
305// LEVMAX Depth level
306// ISELT Options
307//
308// This function draws the logical tree,
309// Each volume in the tree is represented by a TPaveTree object.
310// Double-clicking on a TPaveTree draws the specs of the corresponding volume.
311// Use TPaveTree pop-up menu to select:
312// - drawing specs
313// - drawing tree
314// - drawing tree of parent
315//
316
fe4da5cc 317 geant3->Gdtree(name,levmax,isel);
318}
319
320
321//______________________________________________________________________________
322void THIGZ::SetBOMB(Float_t boom)
323{
324// BOOM : Exploding factor for volumes position
325//
326// To 'explode' the detector. If BOOM is positive (values smaller
327// than 1. are suggested, but any value is possible)
328// all the volumes are shifted by a distance
329// proportional to BOOM along the direction between their centre
330// and the origin of the MARS; the volumes which are symmetric
331// with respect to this origin are simply not shown.
332// BOOM equal to 0 resets the normal mode.
333// A negative (greater than -1.) value of
334// BOOM will cause an 'implosion'; for even lower values of BOOM
335// the volumes' positions will be reflected respect to the origin.
336// This command can be useful to improve the 3D effect for very
337// complex detectors. The following commands will make explode the
338// detector:
339
fe4da5cc 340 geant3->SetBOMB(boom);
341}
342
343//_______________________________________________________________
344extern "C" void type_of_call iacwk(Int_t &)
345{
346// printf("iacwk called,wid=%d\n",wid);
347}
348
349//_______________________________________________________________
350extern "C" void type_of_call iclrwk(Int_t &,Int_t &)
351{
352// printf("iclrwk called\n");
353 higz->Clear();
354}
355
356//_______________________________________________________________
357extern "C" void type_of_call iclwk(Int_t &,Int_t &)
358{
359// printf("iclwk called\n");
360
361}
362
363//_______________________________________________________________
364extern "C" void type_of_call idawk(Int_t &)
365{
366// printf("idawk called\n");
367}
368
369//_______________________________________________________________
370extern "C" void type_of_call ifa(Int_t &n,Float_t *x, Float_t *y)
371{
372// printf("ifa called, n=%d, pname=%s, pid=%d, x1=%f, y1=%f,x2=%f, y2=%f, x3=%f, y3=%f\n",n,higz->fPname.Data(),higz->fPID,x[0],y[0],x[1],y[1],x[2],y[2]);
373 TGraph *gr = new TGraph(n,x,y);
374 gr->SetFillColor(higz->fFACI);
375 gr->Draw("f");
376}
377
378//_______________________________________________________________
379extern "C" void type_of_call igbox(Float_t &x1,Float_t &x2,Float_t &y1,Float_t &y2)
380{
381 printf("igbox called, x1=%f, y1=%f, x2=%f, y2=%f\n",x1,y1,x2,y2);
382 TBox *box = new TBox(x1,y1,x2,y2);
383 box->SetLineColor(higz->fPLCI);
384 box->SetFillColor(higz->fFACI);
385 box->SetFillStyle(higz->fFASI);
386 box->Draw();
387}
388
389//_______________________________________________________________
390extern "C" void type_of_call ightor(Float_t &h,Float_t &l,Float_t &s,Float_t &r,Float_t &g,Float_t &b)
391{
392// printf("ightor called\n");
393 TColor *col1 = gROOT->GetColor(1);
394 if (col1) col1->HLStoRGB(h,l,s,r,g,b);
395}
396
397//_______________________________________________________________
398extern "C" void type_of_call igpave(Float_t &x1,Float_t &x2,Float_t &yy1,Float_t &yy2,Float_t &,Int_t &isbox,Int_t &isfram,const char *, const Int_t)
399{
400 char text[5];
401 strncpy(text,(char*)&higz->fPID,4);
402 text[4] = 0;
403 Float_t y1 = yy1;
404 Float_t y2 = yy2;
405 if (y1 > y2) { y1 = yy2; y2 = yy1;}
406 Float_t y = 0.5*(y1+y2);
407 Float_t dymax = 0.06*(higz->GetY2()-higz->GetY1());
408 Float_t dymin = -higz->PixeltoY(12);
409 if (y2-y1 > dymax) {
410 y1 = y - 0.5*dymax;
411 y2 = y + 0.5*dymax;
412 }
413 if (y2-y1 < dymin) {
414 y1 = y - 0.5*dymin;
415 y2 = y + 0.5*dymin;
416 }
417 TPaveTree *pt = new TPaveTree(x1,y1,x2,y2,text);
418 pt->SetTextColor(5);
419 pt->SetFillColor(isbox%1000);
420 pt->SetLineColor(isfram%1000);
421 pt->Draw();
422// printf("igpave called, text=%s, Pname=%s, x1=%f, y1=%f, x2=%f, y2=%f, isbox=%d, isfram=%d\n",text,higz->fPname.Data(),x1,y1,x2,y2,isbox,isfram);
423}
424
425//_______________________________________________________________
426#ifndef WIN32
427extern "C" void type_of_call igpid(Int_t &,const char *name,Int_t &pid,const char *, const Int_t l1, const Int_t)
428#else
429extern "C" void type_of_call igpid(Int_t &,const char *name,const Int_t l1, Int_t &pid,const char *, const Int_t)
430#endif
431{
432 npid++;
433// if(npid&100 == 0) printf("igpid called, npid=%d\n",npid);
434 strncpy(cpar,name,l1); cpar[l1] = 0;
435 higz->fPname = cpar;
436 higz->fPID = pid;
437
438// char text[5];
439// strncpy(text,(char*)&higz->fPID,4);
440// text[4] = 0;
441// printf("igpid called, level=%d, name=%s, pid=%d, cpid=%s\n",level,cpar,pid,text);
442}
443
444//_______________________________________________________________
445#ifndef WIN32
446extern "C" void type_of_call igq(const char *name,Float_t &rval, const Int_t l1)
447#else
448extern "C" void type_of_call igq(const char *name,const Int_t l1, Float_t &rval)
449#endif
450{
451 strncpy(cpar,name,l1); cpar[l1] = 0;
452// printf("igq called, name=%s\n",cpar);
453 rval = higz->Get(cpar);
454}
455
456//_______________________________________________________________
457extern "C" void type_of_call igrng(Float_t &xsize,Float_t &ysize)
458{
459// printf("igrng called, xsize=%f, ysize=%f\n",xsize,ysize);
460 higz->Range(0,0,xsize,ysize);
461}
462
463//_______________________________________________________________
464extern "C" void type_of_call igsa(Int_t &)
465{
466// printf("igsa called, iwk=%d\n",iwk);
467}
468
469//_______________________________________________________________
470#ifndef WIN32
471extern "C" void type_of_call igset(const char *name,Float_t &rval, const Int_t l1)
472#else
473extern "C" void type_of_call igset(const char *name, const Int_t l1,Float_t &rval)
474#endif
475{
476 strncpy(cpar,name,l1); cpar[l1] = 0;
477// printf("igset called, name=%s, rval=%f\n",cpar,rval);
478 higz->Set(cpar,rval);
479}
480
481//_______________________________________________________________
482extern "C" void type_of_call igterm()
483{
484 printf("igterm called\n");
485}
486
487//_______________________________________________________________
488extern "C" void type_of_call iopwk(Int_t &iwkid,Int_t &iconid,Int_t &iwtypi)
489{
490 printf("iopwk called, iwkid=%d, iconid=%d, iwtypi=%d\n",iwkid,iconid,iwtypi);
491}
492
493//_______________________________________________________________
494extern "C" void type_of_call ipl(Int_t &n,Float_t *x,Float_t *y)
495{
496// printf("ipl called, n=%d, x[0]=%f,y[0]=%f, x[1]=%f, y[1]=%f\n",n,x[0],y[0],x[1],y[1]);
497 if (n <= 2) {
498 TLine *l = new TLine(x[0],y[0],x[1],y[1]);
499 l->SetLineColor(higz->fPLCI);
500 l->SetLineStyle(higz->fLTYP);
501 l->SetLineWidth(Short_t(higz->fLWID));
502 l->Draw();
503 } else {
504 TPolyLine *pl = new TPolyLine(n,x,y);
505 pl->SetLineColor(higz->fPLCI);
506 pl->SetLineStyle(higz->fLTYP);
507 pl->SetLineWidth(Short_t(higz->fLWID));
508 pl->Draw();
509 }
510}
511
512//_______________________________________________________________
513extern "C" void type_of_call ipm(Int_t &n,Float_t *x,Float_t *y)
514{
515 printf("ipm called, n=%d\n",n);
516 TPolyMarker *pm = new TPolyMarker(n,x,y);
517 pm->SetMarkerColor(higz->fPMCI);
518 pm->SetMarkerStyle(higz->fMTYP);
519 pm->SetMarkerSize(higz->fMSCF);
520 pm->Draw();
521}
522
523//_______________________________________________________________
524extern "C" void type_of_call irqlc(Int_t&, Int_t&, Int_t&, Int_t&, Float_t&, Float_t&)
525
526{
527 printf("irqlc called\n");
528}
529
530//_______________________________________________________________
531extern "C" void type_of_call iscr(Int_t &,Int_t &ici,Float_t &r,Float_t &g,Float_t &b)
532{
533// printf("iscr called, ici=%d, r=%f, g=%f, b=%f\n",ici,r,g,b);
534 Int_t color = ici;
535// if (color > 10) color += 35;
536 TColor *col = gROOT->GetColor(color);
537 if (!col) {
538 col = new TColor(color,r,g,b);
539 return;
540 } else {
541 col->SetRGB(r,g,b);
542 }
543}
544
545//_______________________________________________________________
546extern "C" void type_of_call isfaci(Int_t &col)
547{
548// printf("isfaci called, col=%d\n",col);
549 Int_t color = col%1000;
550// if (color > 10) color += 35;
551 higz->fFACI = color;
552}
553
554//_______________________________________________________________
555extern "C" void type_of_call isfais(Int_t &is)
556{
557// printf("isfais called, is=%d\n",is);
558 higz->fFAIS = is;
559}
560
561//_______________________________________________________________
562extern "C" void type_of_call isln(Int_t &ln)
563{
564// printf("isln called, ln=%d\n",ln);
565 higz->fLTYP = ln;
566}
567
568//_______________________________________________________________
569extern "C" void type_of_call ismk(Int_t &mk)
570{
571// printf("ismk called, mk=%d\n",mk);
572 higz->fMTYP = mk;
573}
574
575//_______________________________________________________________
576extern "C" void type_of_call islwsc(Float_t &wl)
577{
578// printf("islwsc called, wl=%f\n",wl);
579 higz->fLWID = wl;
580}
581
582//_______________________________________________________________
583extern "C" void type_of_call isplci(Int_t &col)
584{
585// printf("isplci called, col=%d\n",col);
586 Int_t color = col%1000;
587// if (color > 10) color += 35;
588 higz->fPLCI = color;
589}
590
591//_______________________________________________________________
592extern "C" void type_of_call ispmci(Int_t &col)
593{
594// printf("ispmci called, col=%d\n",col);
595 Int_t color = col%1000;
596// if (color > 10) color += 35;
597 higz->fPMCI = color;
598}
599
600//_______________________________________________________________
601extern "C" void type_of_call istxci(Int_t &col)
602{
603// printf("istxci called, col=%d\n",col);
604 Int_t color = col%1000;
605// if (color > 10) color += 35;
606 higz->fTXCI = color;
607}
608
609//_______________________________________________________________
610extern "C" void type_of_call isvp(Int_t &,Float_t &,Float_t &,Float_t &,Float_t &)
611{
612// printf("isvp called, nt=%d, x1=%f, y1=%f, x2=%f, y2=%f\n",nt,x1,y1,x2,y2);
613}
614
615//_______________________________________________________________
616extern "C" void type_of_call iswn(Int_t &,Float_t &x1,Float_t &x2,Float_t &y1,Float_t &y2)
617
618{
619// printf("iswn called, nt=%d, x1=%f, y1=%f, x2=%f, y2=%f\n",nt,x1,y1,x2,y2);
620 higz->Range(x1,y1,x2,y2);
621}
622
623//_______________________________________________________________
624extern "C" void type_of_call itx(Float_t &x,Float_t &y,const char *ptext, const Int_t l1p)
625{
626 if (higz->fPname == "Tree") return;
627 Int_t l1=l1p;
628 strncpy(cpar,ptext,l1); cpar[l1] = 0;
629//printf("itx called, x=%f, y=%f, text=%s, l1=%d\n",x,y,cpar,l1);
630 while(l1) {
631 if (cpar[l1-1] != ' ' && cpar[l1-1] != '$') break;
632 l1--;
633 cpar[l1] = 0;
634 }
635 char *small = strstr(cpar,"<");
636 while(small && *small) {
637 small[0] = tolower(small[1]);
638 small++;
639 }
640 TText *text = new TText(x,y,cpar);
641 text->SetTextColor(higz->fTXCI);
642 text->SetTextSize(higz->fCHHE);
643 text->SetTextFont(higz->fTXFP);
644 text->SetTextAlign(higz->fTXAL);
645 text->SetTextAngle(higz->fTANG);
646 text->Draw();
647}
648
649//_______________________________________________________________
650extern "C" void type_of_call hplint(Int_t &)
651{
652 printf("hplint called\n");
653 new THIGZ(600);
654}
655
656//_______________________________________________________________
657extern "C" void type_of_call hplend()
658{
659 printf("hplend called\n");
660}
661
662//_______________________________________________________________
663extern "C" void type_of_call hplfra(Float_t &x1,Float_t &x2,Float_t &y1, Float_t &y2,const char *, const Int_t)
664{
665// printf("hplfra called, x1=%f, y1=%f, x2=%f, y2=%f\n",x1,y1,x2,y2);
666 higz->Clear();
667 higz->Range(x1,y1,x2,y2);
668}
669
670//_______________________________________________________________
671extern "C" void type_of_call igmeta(Int_t &, Int_t &)
672{
673 printf("igmeta called\n");
674}
675
676//_______________________________________________________________
677extern "C" void type_of_call iselnt(Int_t &)
678{
679// printf("iselnt called, nt=%d\n",nt);
680}
681
682//_______________________________________________________________
683extern "C" Int_t type_of_call igiwty(Int_t &)
684{
685// printf("igiwty called, wid=%d\n",wid);
686 return 1;
687}
688
689//_______________________________________________________________
690extern "C" void type_of_call igqwk(Int_t &, const char *name, Float_t &rval, const Int_t l1)
691{
692 strncpy(cpar,name,l1); cpar[l1] = 0;
693// printf("igqwk called, wid=%d, pname=%s\n",wid,cpar);
694 rval = higz->Get(cpar);
695}
696