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