263 parameter(nwpaw=4000000)
264 common/
pawc/paw(nwpaw)
266 INTEGER IQ(2), LQ(8000)
268 equivalence(lq(1),paw(11)),(iq(1),paw(19)),(q(1),paw(19))
270 INTEGER JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART
271 + ,JROTM ,JRUNG ,JSET ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX
272 + ,JVOLUM,JXYZ ,JGPAR ,JGPAR2,JSKLT
274 common/gclink/jdigi ,jdraw ,jhead ,jhits ,jkine ,jmate ,jpart
275 + ,jrotm ,jrung ,jset ,jstak ,jgstat,jtmed ,jtrack,jvertx
276 + ,jvolum,jxyz ,jgpar ,jgpar2,jsklt
279 common/gcnum/nmate ,nvolum,nrotm,ntmed,ntmult,ntrack,npart
280 + ,nstmax,nvertx,nhead,nbit
285 parameter(maxpos=250000)
287 common/cnpos/nodepos(maxpos),nodediv(maxpos),nvflags(maxpos),
288 +npflags(maxpos),nppflags(maxpos)
290 CHARACTER*4 KSHAP(30),klshap(30)
291 character*20 matname,medname
292 character*16 cname,mname,pname, rname
296 character*16 astring,astring2,ptrname
300 DATA kshap/
'BRIK',
'TRD1',
'TRD2',
'TRAP',
'TUBE',
'TUBS',
'CONE',
301 +
'CONS',
'SPHE',
'PARA',
'PGON',
'PCON',
'ELTU',
'HYPE',
302 + 13*
' ',
'GTRA',
'CTUB',
' '/
306 open(unit=51,
file=fname,status=
'unknown')
311 idot=index(fname,
'.')
313 write(51,1111)fname(1:nct)
3141111
format(
'void ',
a,
'()',/,
'{',/,
316 +
'// This file has been generated automatically via the root',/,
317 +
'// utility g2root from an interactive version of GEANT',/,
318 +
'// (see ROOT class TGeoManager for an example of use)',/,
320 +
'R__ASSERT(gSystem->Load("libGeom") >= 0);',/,
321 +
'TGeoRotation *rot;',/,
322 +
'TGeoNode *Node, *Node1;')
326 call cutol(klshap(i))
335 write(51,490)fname(1:nct),fname(1:nct),fname(1:nch)
336 490
format(/,
'TGeoManager *',
a,
' = new TGeoManager("',
a,
'","',
a,
'");'
338 IF(jvolum.NE.0 ) nvolum = iq(jvolum-2)
339 IF(jmate.NE.0 ) nmate = iq(jmate-2)
340 IF(jtmed.NE.0 ) ntmed = iq(jtmed-2)
341 IF(jrotm.NE.0 ) nrotm = iq(jrotm-2)
346 +
'//-----------List of Materials and Mixtures--------------',/)
349 if(jma.eq.0)
go to 300
351 call uhtoc(iq(jma+1),4,matname,20)
353 call toint(imat,astring,nc)
357 call toreals(3,q(jma+6),creals,ncr)
358 if(q(jma+6).lt.1.and.q(jma+7).lt.1)
then
363 write(line,3000)astring(1:nc),matname(1:ncn),creals(1:ncr)
364 3000
format(
'TGeoMaterial *mat',
a,
' = new TGeoMaterial("',
a,
367 write(51,
'(a)')line(1:nch)
368 write(line,3005) astring(1:nc),imat
369 3005
format(4x,
'mat',
a,
'->SetUniqueID(',i4,
');')
371 write(51,
'(a)')line(1:nch)
374 call toint(nm,creals,ncm)
379 mname=
'-'//creals(1:ncm)
383 write(line,3010)astring(1:nc),matname(1:ncn),mname(1:ncm),
385 3010
format(
'TGeoMixture *mat',
a,
' = new TGeoMixture("',
a,
'",',
a,
388 write(51,
'(a)')line(1:nch)
389 write(line,3011) astring(1:nc),imat
390 3011
format(4x,
'mat',
a,
'->SetUniqueID(',i4,
');')
392 write(51,
'(a)')line(1:nch)
394 call toint(im-1,astring2,nc2)
395 pmixt(1) = q(jmixt+im)
396 pmixt(2) = q(jmixt+nm+im)
397 pmixt(3) = q(jmixt+2*nm+im)
398 call toreals(3,pmixt,creals,ncr)
400 write(line,3020)astring(1:nc),astring2(1:nc2),
402 3020
format(4x,
'mat',
a,
'->DefineElement(',
a,
a,
');')
404 write(51,
'(a)')line(1:nch)
412 +
'//-----------List of Tracking Media--------------',/)
415 if(jtm.eq.0)
go to 350
417 call toint(imat,astring2,ncm)
418 call uhtoc(iq(jtm+1),4,medname,20)
420 call toint(itmed,astring,nc)
421 call toreals(8,q(jtm+7),creals,ncr)
423 write(line,3050)astring(1:nc),medname(1:ncn),astring(1:nc),
424 + astring2(1:ncm),creals(1:ncr)
425 3050
format(
'TGeoMedium *med',
a,
' = new TGeoMedium("',
a,
'",',
a,
428 write(51,
'(a)')line(1:nch)
433 3021
format(/,
'//-----------List of Rotation matrices--------------',/)
437 call toint(irot,astring,nc)
438 call toreals(6,q(jr+11),creals,ncr)
440 ptrname =
'rot'//astring(1:nc)
442 write(line,1000)ptrname(1:nch),ptrname(1:nch),
444 1000
format(
'TGeoRotation *',
a,
445 +
' = new TGeoRotation("',
a,
'"',
a,
');')
447 write(51,
'(a)')line(1:nch)
453 3022
format(/,
'//-----------List of Volumes--------------',/)
454 print *,
' nvolum= ',nvolum,
' jvolum=',jvolum
459 if (lq(jvolum-ivo).eq.0)
go to 50
462 call uhtoc(iq(jvolum+ivo),4,cname,4)
464 if (ichar(cname(i:i)).eq.0)cname(i:i) =
' '
479 do 200 ivo = 1,nvolum
480 if (nvflags(ivo).eq.2)
goto 200
482 if (jv.eq.0)
go to 200
484 if(.not.map_found(iq(jvolum+ivo),cname))
then
485 write(cname,
'(a4)')iq(jvolum+ivo)
487 call volume(cname,q(jv+1),0,0)
500 if (nvolum.gt.0)
then
503 3023
format(/,
'//-----------List of Nodes--------------',/)
5122223
format(
' gGeoManager->CloseGeometry();')
526 parameter(nwpaw=4000000)
527 parameter(maxpos=250000)
528 common/
pawc/paw(nwpaw)
530 INTEGER IQ(2), LQ(8000)
532 equivalence(lq(1),paw(11)),(iq(1),paw(19)),(q(1),paw(19))
534 INTEGER JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART
535 + ,JROTM ,JRUNG ,JSET ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX
536 + ,JVOLUM,JXYZ ,JGPAR ,JGPAR2,JSKLT
538 common/gclink/jdigi ,jdraw ,jhead ,jhits ,jkine ,jmate ,jpart
539 + ,jrotm ,jrung ,jset ,jstak ,jgstat,jtmed ,jtrack,jvertx
540 + ,jvolum,jxyz ,jgpar ,jgpar2,jsklt
543 common/clevel/nodeold(20),nlevel
545 common/cnpos/nodepos(maxpos),nodediv(maxpos),nvflags(maxpos),
546 +npflags(maxpos),nppflags(maxpos)
552 nodeold(nlevel) = nnodes
561 call cdnode(nodeold(nlevel))
563 if (nvflags(ivo).ne.0)
then
572 jinvom = lq(jvolum-ivom)
575 write(cname,
'(a4)')iq(jvolum+ivom)
579 if (nnodes.gt.maxpos)
then
580 print *,
'Too many nodes =',nnodes
583 if (nodepos(nnodes).eq.0)
then
593 if (nodediv(nnodes).eq.0)
then
598 if (nvflags(ivod).gt.0)
goto 996
600 write(cname,
'(a4)')iq(jvolum+ivod)
602 print 200, cname(1:n1)
603 200
format(
'Division volume', a4)
610 if (nlevel.gt.0)
call cdnode(nodeold(nlevel))
613 subroutine volume(cname,qjv,iposp,ifirst)
615 parameter(nwpaw=4000000)
616 parameter(maxpos=250000)
617 common/
pawc/paw(nwpaw)
619 INTEGER IQ(2), LQ(8000)
621 equivalence(lq(1),paw(11)),(iq(1),paw(19)),(q(1),paw(19))
623 INTEGER JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART
624 + ,JROTM ,JRUNG ,JSET ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX
625 + ,JVOLUM,JXYZ ,JGPAR ,JGPAR2,JSKLT
627 common/gclink/jdigi ,jdraw ,jhead ,jhits ,jkine ,jmate ,jpart
628 + ,jrotm ,jrung ,jset ,jstak ,jgstat,jtmed ,jtrack,jvertx
629 + ,jvolum,jxyz ,jgpar ,jgpar2,jsklt
631 common/cnpos/nodepos(maxpos),nodediv(maxpos),nvflags(maxpos),
632 +npflags(maxpos),nppflags(maxpos)
634 character*16 astring,cmater, pname, rname
638 double precision RADDEG
639 dimension dummypars(100)
641 CHARACTER*6 KSHAP(30)
642 data dummypars/100*0./
644 DATA kshap/
'Box',
'Trd1',
'Trd2',
'Trap',
'Tube',
'Tubs',
'Cone',
645 +
'Cons',
'Sphere',
'Para',
'Pgon',
'Pcon',
'Eltu',
'Hype',
646 + 13*
' ',
'Gtra',
'Ctub',
' '/
647 DATA npars/3,4,5,11,3,5,5,7,6,6,10,9,3,4,13*0,12,11,0/
651 raddeg = 57.2957795130823209
657 jtm = lq(jtmed-numed)
658 call toint(numed,astring,nc)
659 cmater=
'med'//astring(1:nc)
664 npar0 = npars(ishape)
667 if (ishape.eq.4)
then
669 if (qjv(jpar+2).ne.0.)ph=atan2(qjv(jpar+3),qjv(jpar+2))*raddeg
670 tt = sqrt(qjv(jpar+2)**2+qjv(jpar+3)**2)
671 qjv(jpar+2) = atan(tt)*raddeg
672 if (ph.lt.0.0) ph = ph+360.0
674 qjv(jpar+7) = atan(qjv(jpar+7))*raddeg
675 if (qjv(jpar+7).gt.90.0) qjv(jpar+7) = qjv(jpar+7)-180.0
676 qjv(jpar+11)= atan(qjv(jpar+11))*raddeg
677 if (qjv(jpar+11).gt.90.0) qjv(jpar+11) = qjv(jpar+11)-180.0
680 if (ishape.eq.10)
then
682 if (qjv(jpar+5).ne.0.)ph=atan2(qjv(jpar+6),qjv(jpar+5))*raddeg
683 tt = sqrt(qjv(jpar+5)**2+qjv(jpar+6)**2)
684 qjv(jpar+4) = atan(qjv(jpar+4))*raddeg
685 if (qjv(jpar+4).gt.90.0) qjv(jpar+4) = qjv(jpar+4)-180.0
686 qjv(jpar+5) = atan(tt)*raddeg
687 if (ph.lt.0.0) ph = ph+360.0
690 if(ishape.eq.11)npar0=4
691 if(ishape.eq.12)npar0=3
693 if (ishape.eq.14)
then
698 dummypars(1) = hyrmin
700 dummypars(3) = hyrmax
714 call toreals(-npar0,dummypars(1),creals,ncr)
716 call toreals(npar0,qjv(7),creals,ncr)
719 nshape =
lenocc(kshap(ishape))
725 write(line,2000)pname(1:np),kshap(ishape)(1:nshape)
726 + ,rname(1:nrr),cmater(1:ncmat),creals(1:ncr)
728 if (ifirst.eq.1)
then
729 write(line,2001)pname(1:np),rname(1:nrr),cmater(1:ncmat)
731 write(51,
'(a)')line(1:nch)
734 write(line,2002)pname(1:np),kshap(ishape)(1:nshape)
735 + ,rname(1:nrr),cmater(1:ncmat),creals(1:ncr)
737 write(51,
'(a)')line(1:nch)
740 +
'TGeoVolume',
' *',
a,
' = gGeoManager->Make',
a,
'("',
a,
'",'
7422001
format(
'TGeoVolumeMulti *',
a,
' = gGeoManager->MakeVolumeMulti("'
7442002
format(
' ',
a,
'->AddVolume(gGeoManager->Make',
a,
'("',
a,
'",',
747 if (iposp.eq.0)
write(51,
'(a)')line(1:nch)
751 call toreals(3,qjv(11+(iz-1)*3),creals,ncr)
753 call toint(iz-1,astring,nci)
755 write(line,2010)pname(1:np),astring(1:nci),creals(1:ncr)
757 write(line,2011)pname(1:np),astring(1:nci),creals(1:ncr)
760 write(51,
'(a)')line(1:nch)
766 call toreals(3,qjv(10+(iz-1)*3),creals,ncr)
768 call toint(iz-1,astring,nci)
770 write(line,2010)pname(1:np),astring(1:nci),creals(1:ncr)
772 write(line,2011)pname(1:np),astring(1:nci),creals(1:ncr)
775 write(51,
'(a)')line(1:nch)
7782010
format(2x,
'((TGeoPcon*)',
a,
'->GetShape())->DefineSection(',
7802011
format(2x,
'((TGeoPcon*)',
a,
'->GetLastShape())->DefineSection(',
785 lwidth = qjv(npar+10)
786 lcolor = qjv(npar+11)
788 if (lstyle.le.0) lstyle = 1
789 if (lwidth.le.0) lwidth = 1
790 if (lcolor.lt.0) lcolor = 1
791 if (lfill.lt.0) lfill = 0
797 if ((iposp.eq.0).or.(ifirst.eq.1))
then
799 call toint(lseen,creals,ncr)
800 write(51,195)pname(1:np),creals(1:ncr)
801195
format(2x,
a,
'->SetVisibility(',
a,
');')
804 call toint(lstyle,creals,ncr)
805 write(51,196)pname(1:np),creals(1:ncr)
806196
format(2x,
a,
'->SetLineStyle(',
a,
');')
809 call toint(lwidth,creals,ncr)
810 write(51,197)pname(1:np),creals(1:ncr)
811197
format(2x,
a,
'->SetLineWidth(',
a,
');')
814 call toint(lcolor,creals,ncr)
815 write(51,198)pname(1:np),creals(1:ncr)
816198
format(2x,
a,
'->SetLineColor(',
a,
');')
819 call toint(lfill,creals,ncr)
820 write(51,199)pname(1:np),creals(1:ncr)
821199
format(2x,
a,
'->SetFillStyle(',
a,
');')
832 Subroutine node(ivo,nuserm,iposp)
836 parameter(nwpaw=4000000)
837 parameter(maxpos=250000)
838 common/
pawc/paw(nwpaw)
840 INTEGER IQ(2), LQ(8000)
842 equivalence(lq(1),paw(11)),(iq(1),paw(19)),(q(1),paw(19))
844 INTEGER JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART
845 + ,JROTM ,JRUNG ,JSET ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX
846 + ,JVOLUM,JXYZ ,JGPAR ,JGPAR2,JSKLT
848 common/gclink/jdigi ,jdraw ,jhead ,jhits ,jkine ,jmate ,jpart
849 + ,jrotm ,jrung ,jset ,jstak ,jgstat,jtmed ,jtrack,jvertx
850 + ,jvolum,jxyz ,jgpar ,jgpar2,jsklt
853 common/clevel/nodeold(20),nlevel
855 common/cnpos/nodepos(maxpos),nodediv(maxpos),nvflags(maxpos),
856 +npflags(maxpos),nppflags(maxpos)
859 character*16 cnode,cname,mname,anode,mother,pname, rname
863 character*16 astring,astring1
865 character*256 matrixs
872 nodeold(nlevel) = nnodes
877 if(.not.map_found(iq(jvolum+ivo),mname))
then
878 write(mname,
'(a4)')iq(jvolum+ivo)
881 call toint(nuserm,astring,nci)
883 call ptname(mname, mother)
885 if((ivo.eq.1).and.(iposp.eq.0))
then
886 write(51,510)mother(1:nmother)
888510
format(
'gGeoManager->SetTopVolume(',
a,
');')
8922346
format(
'Processing node:',a4,
' nin=',i4)
897 call cdnode(nodeold(nlevel))
899520
format(
'mother ',
a,
' index ',i9)
901 if (nvflags(ivo).ne.0)
then
916 jinvom = lq(jvolum-ivom)
920 if(.not.map_found(iq(jvolum+ivom),cname))
then
921 write(cname,
'(a4)')iq(jvolum+ivom)
929 if (npflags(ivom).eq.0)
then
933 npflags(ivom) = npflags(ivom)+1
936 icurrent = nppflags(ivom)
937 call toint(icurrent,astring1,nci1)
939 nppflags(ivom) = nppflags(ivom)+1
942 call ucopy(q(jinvom+1),qjv(1),6)
944 call ucopy(q(jin+10),qjv(7),npar)
945 call ucopy(q(jinvom+7),qjv(7+npar),6)
946 call toint(in,astring,nci)
947 mname=cname(1:n1)//astring(1:nci)
948 if (iposp.eq.1)
call volume(cname,qjv,iposp,ifirst)
952 if (nnodes.gt.maxpos)
then
953 print *,
'Too many nodes =',nnodes
956 call toint(nnodes,anode,ncd)
957 cnode =
'Node'//anode(1:ncd)
958 if (nodepos(nnodes).eq.0)
then
960 4444
format(
a,
'TNode *Node',
a,
';')
967 call toreals(3,q(jin+5),creals,ncr)
969 if ((abs(q(jin+5)).lt.1
e-30).and.
970 + (abs(q(jin+6)).lt.1
e-30).and.
971 + (abs(q(jin+7)).lt.1
e-30))
then
979 if (itrans.eq.0)
then
980 matrixs=
'gGeoIdentity'
982 matrixs=
'new TGeoTranslation('//creals(2:ncr)//
')'
985 call toint(irot,astring,nci)
986 matrix=
'rot'//astring(1:nci)
988 if (itrans.eq.0)
then
989 matrixs=matrix(1:ncmatrix)
991 matrixs=
'new TGeoCombiTrans('//creals(2:ncr)//
','//
992 + matrix(1:ncmatrix)//
')'
995 call toint(nuser,astring,nci)
997 mname=cname(1:n1)//astring(1:nci)
1002 call ptname(cname, pname)
1004 if (imany.eq.1)
then
1005 if (imulti.eq.0)
then
1006 write(line,3000)cblank(1:nlevel),mother(1:nmother),
1007 + pname(1:np), astring(1:nci), matrixs(1:ncmats)
1008 3000
format(
a,
a,
'->AddNode(',
a,
',',
a,
',',
a,
');')
1010 write(line,3002)cblank(1:nlevel),mother(1:nmother),
1011 + pname(1:np), astring1(1:nci1),astring(1:nci),
1013 3002
format(
a,
a,
'->AddNode(',
a,
'->GetVolume(',
a,
'),',
a
1017 if (imulti.eq.0)
then
1018 write(line,3001)cblank(1:nlevel),mother(1:nmother),
1019 + pname(1:np), astring(1:nci), matrixs(1:ncmats)
1020 3001
format(
a,
a,
'->AddNodeOverlap(',
a,
',',
a,
',',
a,
');')
1022 write(line,3003)cblank(1:nlevel),mother(1:nmother),
1023 + pname(1:np), astring1(1:nci1), astring(1:nci),
1025 3003
format(
a,
a,
'->AddNodeOverlap(',
a,
'->GetVolume(',
a,
'),',
a
1030 if (iposp.eq.0)
write(51,
'(a)')line(1:nch)
1032 if(ninvom.ne.0)
then
1033 call node2(ivom,nuser,iposp)
1040 call toint(nnodes,anode,ncd)
1041 cnode =
'Nodiv'//anode(1:ncd)
1043 if (nodediv(nnodes).eq.0)
then
1048 if (nvflags(ivod).eq.1)
goto 996
1051 write(cname,
'(a4)')iq(jvolum+ivod)
1054 4445
format(
'daughter division', a4)
1062 call toint(iaxis,astring,nci)
1063 call toreals(3,q(jin+3),creals,ncr)
1065 call ptname(cname, pname)
1069 write(line,995)cblank(1:nlevel),pname(1:np),mother(1:nmother),
1070 + rname(1:nrr),astring(1:nci), creals(1:ncr)
1071 995
format(
a,
'TGeoVolume *',
a,
' = ',
a,
'->Divide("',
a,
'",',
a,
a,
');')
1073 if (iposp.eq.0)
write(51,
'(a)')line(1:nch)
1075 call node2(ivod,0,iposp)
1081 if (nlevel.gt.0)
call cdnode(nodeold(nlevel))
1534 parameter(nwpaw=4000000)
1535 common/
pawc/paw(nwpaw)
1537 INTEGER IQ(2), LQ(8000)
1539 equivalence(lq(1),paw(11)),(iq(1),paw(19)),(q(1),paw(19))
1541 INTEGER JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART
1542 + ,JROTM ,JRUNG ,JSET ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX
1543 + ,JVOLUM,JXYZ ,JGPAR ,JGPAR2,JSKLT
1545 common/gclink/jdigi ,jdraw ,jhead ,jhits ,jkine ,jmate ,jpart
1546 + ,jrotm ,jrung ,jset ,jstak ,jgstat,jtmed ,jtrack,jvertx
1547 + ,jvolum,jxyz ,jgpar ,jgpar2,jsklt
1549 common/
quest/iquest(100)
1550 parameter(nlinit=9,nmkey=22)
1551 dimension jnames(20),keys(2),linit(nlinit)
1552 dimension link(nmkey)
1553 equivalence(jnames(1),jdigi)
1554 CHARACTER*4 CKEY,KNAMES(NMKEY)
1556 DATA knames/
'DIGI',
'DRAW',
'HEAD',
'HITS',
'KINE',
'MATE',
'PART',
1557 +
'ROTM',
'RUNG',
'SETS',
'STAK',
'STAT',
'TMED',
'NULL',
'VERT',
1558 +
'VOLU',
'JXYZ',
'NULL',
'NULL',
'NULL',
'SCAN',
'NULL'/
1559 DATA linit/2,6,7,8,9,10,13,16,21/
1563 print *,
' In g2rin, iquest(13)=',iquest(13)
1567 CALL vzero(jnames,20)
1571 CALL mzlink(0,
'/GCLINK/',jdigi,jsklt,jdigi)
1581 CALL rzink(ikey,0,
'S')
1582 print *,
' after rzink, ikey=',ikey,
'iquest(1)=',iquest(1)
1583 IF(iquest(1).NE.0)
THEN
1584 print *,
' nkeys=',iquest(7),
' nwkey=',iquest(8)
1585 if (iquest(1).ne.11)
then
1591 CALL uhtoc(indkey,4,ckey,4)
1592 print *,
'trying to read:',ckey
1595 IF(ckey.EQ.knames(nkey))
THEN
1599 IF(jnames(nkey).NE.0)
THEN
1600 CALL mzdrop(idiv,jnames(nkey),
'L')
1603 CALL rzin(idiv,jnames(nkey),1,keys,0,
' ')