ROOT logo
#include "KGeometry.h"
#include "TMath.h"
#include "math.h"

ClassImp(KGeometry)
//////////////////////////////////////////////////////////////////////////
//                                                                      //
// KGeometry                                                            //
//                                                                      //
// Class for description of detector geometry                           //
// The class defines the geometry of the detector.                      //
// It is based upon two TH3S histograms                                 // 
// It contains some functions defined to design the electrodes          //  
//                                                                      //
//////////////////////////////////////////////////////////////////////////

KGeometry::KGeometry()
{
  EG=NULL;
  DM=NULL;
  nx=1;
  ny=1;
  nz=1;
}

KGeometry::~KGeometry()
{
  if(EG!=NULL) delete EG;
  if(DM!=NULL) delete DM;
}

void KGeometry::GetGrid(TH3I *x, Short_t which)
{
  // EG grid
  //bit 1 = 1  -> 1st electrode
  //bit 2 = 2  -> 2nd electrode
 
  switch(which)
    {
    case 0: 
      if(EG!=NULL) delete EG;
	EG=new TH3I(); x->Copy(*EG);
	nx=EG->GetNbinsX();
	ny=EG->GetNbinsY();
	nz=EG->GetNbinsZ();
      break;
    case 1:
      if(DM!=NULL) delete DM;
	DM=new TH3I(); x->Copy(*DM); 
      break;
    }

   if(DM!=NULL) if(DM->GetNbinsX()!=nx) printf("Warning: dimenssions mismatch - X !\n");
   if(DM!=NULL) if(DM->GetNbinsY()!=ny) printf("Warning: dimenssions mismatch - Y !\n");
   if(DM!=NULL) if(DM->GetNbinsZ()!=nz) printf("Warning: dimenssions mismatch - Z !\n");

}

void KGeometry::Reset(Int_t Which, Int_t What)
{
  Int_t i,j,k;
  for (k=1;k<=nz;k++)
        for (j=1;j<=ny;j++)
	  for(i=1;i<=nx;i++) 
	    if(Which) if(EG!=NULL) EG->SetBinContent(i,j,k,What); else 
		      if(DM!=NULL) DM->SetBinContent(i,j,k,What);   
  
}


Int_t KGeometry::SetBoundaryConditions()
{
 Int_t i,j,k,val,cval,nval;
 if(EG==NULL) {printf("Please set the geometry first ! \n"); return -1;}
 nx=EG->GetNbinsX();
 ny=EG->GetNbinsY();
 nz=EG->GetNbinsZ();

 //Bit 1 = 1 -> GND - 0 V bias
 //Bit 2 = 2 -> Voltage (usual bias volage)
 //Bit 15-32 = 32768 -> Additional Votlages 

  //Bits determining boundary conditions:
  //bit 2 = 4  -> down val
  //bit 3 = 8  -> up val 
  //bit 4 = 16 -> left val
  //bit 5 = 32 -> rigth val
  //bit 6 = 64  -> down der
  //bit 7 = 128  -> up der 
  //bit 8 = 256 -> left der
  //bit 9 = 512 -> rigth der
  //the 3D section is separated
  //bit 10= 1024 -> out val
  //bit 11= 2048 -> in val
  //bit 12= 4096 -> out der
  //bit 13= 8192 -> in der
  //bit 14= 16384-> read out node
for(k=1;k<=nz;k++)
    {
  for(j=1;j<=ny;j++)
    {
    for(i=1;i<=nx;i++)
      {
	cval=EG->GetBinContent(i,j,k);

	if(!(cval&1 || cval&2 || cval>=32768))
	  {

        nval=0;
	if(i+1<=nx) 
	  {
	    val=EG->GetBinContent(i+1,j,k);
	    if(val&1 || val&2 || val>=32768) nval|=32;
          }
	else nval|=512;

	if(i-1>0)   
	  {
	    val=EG->GetBinContent(i-1,j,k);
	    if(val&1 || val&2 || val>=32768) nval|=16;
	  }
	else nval|=256;

	if(j+1<=ny) 
	  {

	    val=EG->GetBinContent(i,j+1,k);
	    if(val&1 || val&2 || val>=32768) nval|=8;
	  }
	else nval|=128;

	if(j-1>0)   
	  {
	    
	    val=EG->GetBinContent(i,j-1,k); 
	    if(val&1 || val&2 || val>=32768)  nval|=4; 
	  }
	else nval|=64;

	
	if(k+1<=nz)
	  {
          val=EG->GetBinContent(i,j,k+1);
	  if(val&1 || val&2 || val>=32768) nval|=2048;
	  }
	else if(nz!=1) nval|=8192;

	if(k-1>0)   
	  {
	    val=EG->GetBinContent(i,j,k-1);
	    if(val&1 || val&2 || val>=32768) nval|=1024;
	  }
	else  if(nz!=1) nval|=4096;


	EG->SetBinContent(i,j,k,nval);
	//      	if(k==nz) printf("%d %d %d :: %d \n",i,j,k,nval);
	  }
	
      }
    }
    }

 return 0;
}


TH3F *KGeometry::MapToGeometry(Double_t *x,Double_t Scale)
{
  TH3F *fhis=new TH3F();
  EG->Copy(*fhis);
  fhis->Reset();

// Map the array of values: E, U, W ... to the geometry.
   int i,j,k,n;
//   Double_t xb=EG->GetXaxis()->GetBinUpEdge(nx);
//   Double_t yb=EG->GetYaxis()->GetBinUpEdge(ny);
//   Double_t zb=EG->GetZaxis()->GetBinUpEdge(nz);
//   Double_t bx=EG->GetXaxis()->GetBinLowEdge(1);
//   Double_t by=EG->GetYaxis()->GetBinLowEdge(1);
//   Double_t bz=EG->GetZaxis()->GetBinLowEdge(1);

//   TH3F *fhis=new TH3F("Pot3d","Pot3d",nx,bx,xb,ny,by,yb,nz,bz,zb);

  for (k=1;k<=nz;k++)
        for (j=1;j<=ny;j++)
		for(i=1;i<=nx;i++)
		  {
 		    n=(k-1)*nx*ny+(j-1)*nx+i; 
		    fhis->SetBinContent(i,j,k,x[n]*Scale);
		  }
  return fhis;
}


Double_t KGeometry::GetStepSize(Int_t dir, Int_t i)
{
  Double_t Lo,Hi;
  Double_t ret;
  switch(dir)
    {
    case 0:
      Hi=fabs(EG->GetXaxis()->GetBinCenter(i+1)-EG->GetXaxis()->GetBinCenter(i));
      Lo=fabs(EG->GetXaxis()->GetBinCenter(i)-EG->GetXaxis()->GetBinCenter(i-1));
      break;
    case 1:
       Hi=fabs(EG->GetYaxis()->GetBinCenter(i+1)-EG->GetYaxis()->GetBinCenter(i));
       Lo=fabs(EG->GetYaxis()->GetBinCenter(i)-EG->GetYaxis()->GetBinCenter(i-1));
      break;
    case 2:
       Hi=fabs(EG->GetZaxis()->GetBinCenter(i+1)-EG->GetZaxis()->GetBinCenter(i));
       Lo=fabs(EG->GetZaxis()->GetBinCenter(i)-EG->GetZaxis()->GetBinCenter(i-1));
      break;
    default:
      Hi=-1; Lo=-1;
      break;
    }
  ret=0.5*Hi+0.5*Lo;
  return ret;
}

Double_t KGeometry::GetStepSize(Int_t dir, Float_t x)
{
  Int_t bin;
 switch(dir)
    {
    case 0:
      bin=EG->GetXaxis()->FindBin(x);
      break;
    case 1:
      bin=EG->GetYaxis()->FindBin(x);
      break;
    case 2:
      bin=EG->GetZaxis()->FindBin(x);
      break;
    default:
      bin=0;
      break;
    }
 return GetStepSize(dir, bin);
}

Float_t KGeometry::GetUpEdge(Int_t dir)
{
Float_t ret=0;
  switch(dir)
    {
    case 0: ret=EG->GetXaxis()->GetBinUpEdge(nx); break;
    case 1: ret=EG->GetYaxis()->GetBinUpEdge(ny); break;
    case 2: ret=EG->GetZaxis()->GetBinUpEdge(nz); break;
    default: printf("Index out of scope!\n"); ret=0; break;
    }
  return ret;
}

Float_t KGeometry::GetLowEdge(Int_t dir)
{
Float_t ret=0;
  switch(dir)
    {
    case 0: ret=EG->GetXaxis()->GetBinLowEdge(1); break;
    case 1: ret=EG->GetYaxis()->GetBinLowEdge(1); break;
    case 2: ret=EG->GetZaxis()->GetBinLowEdge(1); break;
    default: printf("Index out of scope!\n"); ret=0; break;
    }
  return ret;
}


void KGeometry::ElLine(Float_t *r0,Float_t *r1, Float_t *W, Int_t Wei, Int_t Mat)
{
  Int_t i,j,q,k,Bx,By,Bz;
  Float_t t;
  Float_t p[3],r[3];

  for(i=0;i<3;i++) p[i]=r1[i]-r0[i];

  for(t=0;t<=1;t+=0.01)  
    {
      for(i=0;i<3;i++) r[i]=p[i]*t+r0[i];
      Bz=EG->GetZaxis()->FindBin(r[2]);
      By=EG->GetYaxis()->FindBin(r[1]);      
      Bx=EG->GetXaxis()->FindBin(r[0]);
     
      for(k=-(Int_t)(W[2]/GetStepSize(2,Bz))+Bz;k<=(Int_t)(W[2]/GetStepSize(2,Bz))+Bz;k++)
	  if(k<=nz && k>=1) 
	    {
	      for(j=-(Int_t)(W[1]/GetStepSize(1,By))+By;j<=(Int_t)(W[1]/GetStepSize(1,By))+By;j++)
		 if(j<=ny && j>=1)
		   for(q=-(Int_t)(W[0]/GetStepSize(0,Bx))+Bx;q<=(Int_t)(W[0]/GetStepSize(0,Bx))+Bx;q++)	   
		     if(j<=nx && j>=1) 
		       {
  		       if(EG!=NULL) EG->SetBinContent(q,j,k,Wei);
		       if(DM!=NULL) DM->SetBinContent(q,j,k,Mat);
		       }
	    }
    }  
}

void KGeometry::ElRectangle(Float_t *Pos, Float_t *Size, TH3F *his, Float_t val)
{
  // Sets Up 
    Int_t i,j,k,q;
  Int_t xpl,ypl,zpl,xpr,ypr,zpr;
  //Set up left edge of the box
           xpl=EG->GetXaxis()->FindBin(Pos[0]-Size[0]);
	  ypl=EG->GetYaxis()->FindBin(Pos[1]-Size[1]);
	   zpl=EG->GetZaxis()->FindBin(Pos[2]-Size[2]);
  //Set up rigth edge of the box	   
	   xpr=EG->GetXaxis()->FindBin(Pos[0]+Size[0]);
	   ypr=EG->GetYaxis()->FindBin(Pos[1]+Size[1]);
	   zpr=EG->GetZaxis()->FindBin(Pos[2]+Size[2]);
	   //	   printf("(%d %d),(%d %d),(%d %d)\n",xpl,xpr,ypl,ypr,zpl,zpr);
  // Fill the geometry histogram
  for(k=zpl;k<=zpr;k++)	   
    for(j=ypl;j<=ypr;j++)
      for(i=xpl;i<=xpr;i++)
	{
	  //	  if(x0+i>1 && x0+i<=nx && y0+i>1 && y0+i<=ny)
	  //	  printf("%d %d %d %d\n",i,j,k,Wei);
	  his->SetBinContent(i,j,k,val);
	}

}

void KGeometry::ElRectangle(Float_t *Pos, Float_t *Size, Int_t Wei, Int_t Mat)
{
  // Sets Up 
    Int_t i,j,k,q;
  Int_t xpl,ypl,zpl,xpr,ypr,zpr;
  //Set up left edge of the box
           xpl=EG->GetXaxis()->FindBin(Pos[0]-Size[0]);
	  ypl=EG->GetYaxis()->FindBin(Pos[1]-Size[1]);
	   zpl=EG->GetZaxis()->FindBin(Pos[2]-Size[2]);
  //Set up rigth edge of the box	   
	   xpr=EG->GetXaxis()->FindBin(Pos[0]+Size[0]);
	   ypr=EG->GetYaxis()->FindBin(Pos[1]+Size[1]);
	   zpr=EG->GetZaxis()->FindBin(Pos[2]+Size[2]);
	   //	   printf("(%d %d),(%d %d),(%d %d)\n",xpl,xpr,ypl,ypr,zpl,zpr);
  // Fill the geometry histogram
  for(k=zpl;k<=zpr;k++)	   
    for(j=ypl;j<=ypr;j++)
      for(i=xpl;i<=xpr;i++)
	{
	  //	  if(x0+i>1 && x0+i<=nx && y0+i>1 && y0+i<=ny)
	  //	  printf("%d %d %d %d\n",i,j,k,Wei);
	  if(EG!=NULL) EG->SetBinContent(i,j,k,Wei);
	  if(DM!=NULL) DM->SetBinContent(i,j,k,Mat);
	}

}



void KGeometry::ElCylinder(Float_t *Pos,Float_t R, Float_t L,Int_t O, Int_t Wei, Int_t Mat)
{
  // Cylindrical electrode 
  // Float_t *Pos;  - postion of the cone center 
  Float_t Dist,D,x,y,z,Bu,Bd;
  Int_t i,j,k,q;

  for(k=1;k<=nz;k++)
    for(j=1;j<=ny;j++)
      for(i=1;i<=nx;i++)
	{
	   x=EG->GetXaxis()->GetBinCenter(i);
	   y=EG->GetYaxis()->GetBinCenter(j);
	   z=EG->GetZaxis()->GetBinCenter(k);

	   switch(O)
	     {
	     case 3:   D=TMath::Sqrt(TMath::Power(x-Pos[0],2)+TMath::Power(y-Pos[1],2))-R; break;
	     case 2:   D=TMath::Sqrt(TMath::Power(x-Pos[0],2)+TMath::Power(z-Pos[2],2))-R; break;
	     case 1:   D=TMath::Sqrt(TMath::Power(y-Pos[1],2)+TMath::Power(z-Pos[2],2))-R; break;
	     }

    	    if(D<=0)
	      {
		 switch(O)
		   {
		   case 3:   Dist=EG->GetZaxis()->GetBinCenter(k); 
            		     Bu=Pos[2]+L; Bd=Pos[2]-L; break;
		   case 2:   Dist=EG->GetYaxis()->GetBinCenter(j); 
		             Bu=Pos[1]+L; Bd=Pos[1]-L; break;
		   case 1:   Dist=EG->GetXaxis()->GetBinCenter(i); 
		             Bu=Pos[0]+L; Bd=Pos[0]-L; break;
		   }


		 if(Dist<=Bu && Dist>=Bd)
		   {
		    if(EG!=NULL) EG->SetBinContent(i,j,k,Wei); 
		    if(DM!=NULL) DM->SetBinContent(i,j,k,Mat);
		   }

	      }


	}
}




//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

TH2F *KHisProject(void *hisIn,Int_t axis,Int_t Bin1)
{ 
  //Projects any quantity maped to geometry in different views
  Int_t i;
  TH2F *his2D;
  TH3F *his=(TH3F *) hisIn;

  Int_t Nx=his->GetNbinsX();
  Int_t Ny=his->GetNbinsY();
  Int_t Nz=his->GetNbinsZ();

  Double_t *Xbins=new Double_t [Nx+1];
  Double_t *Ybins=new Double_t [Ny+1];;
  Double_t *Zbins=new Double_t [Nz+1];;

  //  printf("%d %d %d\n", Nx,Ny,Nz);
  for(i=0;i<=Nx;i++) 
    {
      Xbins[i]=his->GetXaxis()->GetBinLowEdge(i+1);
      //   printf("x:: %d %f\n",i,Xbins[i]);
    }
  for(i=0;i<=Ny;i++) 
    {
      Ybins[i]=his->GetYaxis()->GetBinLowEdge(i+1);
      //   printf("x:: %d %f\n",i,Ybins[i]);
    }

  for(i=0;i<=Nz;i++) 
    {
      Zbins[i]=his->GetZaxis()->GetBinLowEdge(i+1);
      //    printf("x:: %d %f\n",i,Zbins[i]);
    }

  switch(axis)
    {
    case 1:
      his2D=new TH2F("YZ plane","YZ",Ny,Ybins,Nz,Zbins);
      for(int i=1;i<=Ny;i++)
         for(int j=1;j<=Nz;j++)
           his2D->SetBinContent(i,j,his->GetBinContent(Bin1,i,j));
           his2D->GetXaxis()->SetTitle("y [#mum]");
           his2D->GetYaxis()->SetTitle("z [#mum]");
      break;
    case 2:
      his2D=new TH2F("XZ plane","XZ",Nx,Xbins,Nz,Zbins);
      for(int i=1;i<=Nx;i++)
         for(int j=1;j<=Nz;j++)
           his2D->SetBinContent(i,j,his->GetBinContent(i,Bin1,j));
           his2D->GetXaxis()->SetTitle("x [#mum]");
           his2D->GetYaxis()->SetTitle("z [#mum]");
      break;
    case 3:
      his2D=new TH2F("XY plane","XY",Nx,Xbins,Ny,Ybins);
      for(int i=1;i<=Nx;i++)
         for(int j=1;j<=Ny;j++)
           his2D->SetBinContent(i,j,his->GetBinContent(i,j,Bin1));
           his2D->GetXaxis()->SetTitle("x [#mum]");
           his2D->GetYaxis()->SetTitle("y [#mum]");
      break;
    }
  return his2D;
}

TH3F *KGeometry::GetGeom()
{
 // Map the array of values: E, U, W ... to the geometry.
 //
  int i,j,k,n,bin,col;
  TH3F *dhis=new TH3F();
  EG->Copy(*dhis);

  for (k=1;k<=nz;k++)
        for (j=1;j<=ny;j++)
		for(i=1;i<=nx;i++)
		  {
	  	  bin=dhis->GetBinContent(i,j,k);
		  col=0;
	  	  if(bin>=32768) col=1; 
		  if(bin==1 || bin==2) col=2;
		  if(bin==16385) col=3;		 
		  dhis->SetBinContent(i,j,k,col);
		  }
  //  dhis->Draw("glbox");
  return dhis;
}

 KGeometry.cxx:1
 KGeometry.cxx:2
 KGeometry.cxx:3
 KGeometry.cxx:4
 KGeometry.cxx:5
 KGeometry.cxx:6
 KGeometry.cxx:7
 KGeometry.cxx:8
 KGeometry.cxx:9
 KGeometry.cxx:10
 KGeometry.cxx:11
 KGeometry.cxx:12
 KGeometry.cxx:13
 KGeometry.cxx:14
 KGeometry.cxx:15
 KGeometry.cxx:16
 KGeometry.cxx:17
 KGeometry.cxx:18
 KGeometry.cxx:19
 KGeometry.cxx:20
 KGeometry.cxx:21
 KGeometry.cxx:22
 KGeometry.cxx:23
 KGeometry.cxx:24
 KGeometry.cxx:25
 KGeometry.cxx:26
 KGeometry.cxx:27
 KGeometry.cxx:28
 KGeometry.cxx:29
 KGeometry.cxx:30
 KGeometry.cxx:31
 KGeometry.cxx:32
 KGeometry.cxx:33
 KGeometry.cxx:34
 KGeometry.cxx:35
 KGeometry.cxx:36
 KGeometry.cxx:37
 KGeometry.cxx:38
 KGeometry.cxx:39
 KGeometry.cxx:40
 KGeometry.cxx:41
 KGeometry.cxx:42
 KGeometry.cxx:43
 KGeometry.cxx:44
 KGeometry.cxx:45
 KGeometry.cxx:46
 KGeometry.cxx:47
 KGeometry.cxx:48
 KGeometry.cxx:49
 KGeometry.cxx:50
 KGeometry.cxx:51
 KGeometry.cxx:52
 KGeometry.cxx:53
 KGeometry.cxx:54
 KGeometry.cxx:55
 KGeometry.cxx:56
 KGeometry.cxx:57
 KGeometry.cxx:58
 KGeometry.cxx:59
 KGeometry.cxx:60
 KGeometry.cxx:61
 KGeometry.cxx:62
 KGeometry.cxx:63
 KGeometry.cxx:64
 KGeometry.cxx:65
 KGeometry.cxx:66
 KGeometry.cxx:67
 KGeometry.cxx:68
 KGeometry.cxx:69
 KGeometry.cxx:70
 KGeometry.cxx:71
 KGeometry.cxx:72
 KGeometry.cxx:73
 KGeometry.cxx:74
 KGeometry.cxx:75
 KGeometry.cxx:76
 KGeometry.cxx:77
 KGeometry.cxx:78
 KGeometry.cxx:79
 KGeometry.cxx:80
 KGeometry.cxx:81
 KGeometry.cxx:82
 KGeometry.cxx:83
 KGeometry.cxx:84
 KGeometry.cxx:85
 KGeometry.cxx:86
 KGeometry.cxx:87
 KGeometry.cxx:88
 KGeometry.cxx:89
 KGeometry.cxx:90
 KGeometry.cxx:91
 KGeometry.cxx:92
 KGeometry.cxx:93
 KGeometry.cxx:94
 KGeometry.cxx:95
 KGeometry.cxx:96
 KGeometry.cxx:97
 KGeometry.cxx:98
 KGeometry.cxx:99
 KGeometry.cxx:100
 KGeometry.cxx:101
 KGeometry.cxx:102
 KGeometry.cxx:103
 KGeometry.cxx:104
 KGeometry.cxx:105
 KGeometry.cxx:106
 KGeometry.cxx:107
 KGeometry.cxx:108
 KGeometry.cxx:109
 KGeometry.cxx:110
 KGeometry.cxx:111
 KGeometry.cxx:112
 KGeometry.cxx:113
 KGeometry.cxx:114
 KGeometry.cxx:115
 KGeometry.cxx:116
 KGeometry.cxx:117
 KGeometry.cxx:118
 KGeometry.cxx:119
 KGeometry.cxx:120
 KGeometry.cxx:121
 KGeometry.cxx:122
 KGeometry.cxx:123
 KGeometry.cxx:124
 KGeometry.cxx:125
 KGeometry.cxx:126
 KGeometry.cxx:127
 KGeometry.cxx:128
 KGeometry.cxx:129
 KGeometry.cxx:130
 KGeometry.cxx:131
 KGeometry.cxx:132
 KGeometry.cxx:133
 KGeometry.cxx:134
 KGeometry.cxx:135
 KGeometry.cxx:136
 KGeometry.cxx:137
 KGeometry.cxx:138
 KGeometry.cxx:139
 KGeometry.cxx:140
 KGeometry.cxx:141
 KGeometry.cxx:142
 KGeometry.cxx:143
 KGeometry.cxx:144
 KGeometry.cxx:145
 KGeometry.cxx:146
 KGeometry.cxx:147
 KGeometry.cxx:148
 KGeometry.cxx:149
 KGeometry.cxx:150
 KGeometry.cxx:151
 KGeometry.cxx:152
 KGeometry.cxx:153
 KGeometry.cxx:154
 KGeometry.cxx:155
 KGeometry.cxx:156
 KGeometry.cxx:157
 KGeometry.cxx:158
 KGeometry.cxx:159
 KGeometry.cxx:160
 KGeometry.cxx:161
 KGeometry.cxx:162
 KGeometry.cxx:163
 KGeometry.cxx:164
 KGeometry.cxx:165
 KGeometry.cxx:166
 KGeometry.cxx:167
 KGeometry.cxx:168
 KGeometry.cxx:169
 KGeometry.cxx:170
 KGeometry.cxx:171
 KGeometry.cxx:172
 KGeometry.cxx:173
 KGeometry.cxx:174
 KGeometry.cxx:175
 KGeometry.cxx:176
 KGeometry.cxx:177
 KGeometry.cxx:178
 KGeometry.cxx:179
 KGeometry.cxx:180
 KGeometry.cxx:181
 KGeometry.cxx:182
 KGeometry.cxx:183
 KGeometry.cxx:184
 KGeometry.cxx:185
 KGeometry.cxx:186
 KGeometry.cxx:187
 KGeometry.cxx:188
 KGeometry.cxx:189
 KGeometry.cxx:190
 KGeometry.cxx:191
 KGeometry.cxx:192
 KGeometry.cxx:193
 KGeometry.cxx:194
 KGeometry.cxx:195
 KGeometry.cxx:196
 KGeometry.cxx:197
 KGeometry.cxx:198
 KGeometry.cxx:199
 KGeometry.cxx:200
 KGeometry.cxx:201
 KGeometry.cxx:202
 KGeometry.cxx:203
 KGeometry.cxx:204
 KGeometry.cxx:205
 KGeometry.cxx:206
 KGeometry.cxx:207
 KGeometry.cxx:208
 KGeometry.cxx:209
 KGeometry.cxx:210
 KGeometry.cxx:211
 KGeometry.cxx:212
 KGeometry.cxx:213
 KGeometry.cxx:214
 KGeometry.cxx:215
 KGeometry.cxx:216
 KGeometry.cxx:217
 KGeometry.cxx:218
 KGeometry.cxx:219
 KGeometry.cxx:220
 KGeometry.cxx:221
 KGeometry.cxx:222
 KGeometry.cxx:223
 KGeometry.cxx:224
 KGeometry.cxx:225
 KGeometry.cxx:226
 KGeometry.cxx:227
 KGeometry.cxx:228
 KGeometry.cxx:229
 KGeometry.cxx:230
 KGeometry.cxx:231
 KGeometry.cxx:232
 KGeometry.cxx:233
 KGeometry.cxx:234
 KGeometry.cxx:235
 KGeometry.cxx:236
 KGeometry.cxx:237
 KGeometry.cxx:238
 KGeometry.cxx:239
 KGeometry.cxx:240
 KGeometry.cxx:241
 KGeometry.cxx:242
 KGeometry.cxx:243
 KGeometry.cxx:244
 KGeometry.cxx:245
 KGeometry.cxx:246
 KGeometry.cxx:247
 KGeometry.cxx:248
 KGeometry.cxx:249
 KGeometry.cxx:250
 KGeometry.cxx:251
 KGeometry.cxx:252
 KGeometry.cxx:253
 KGeometry.cxx:254
 KGeometry.cxx:255
 KGeometry.cxx:256
 KGeometry.cxx:257
 KGeometry.cxx:258
 KGeometry.cxx:259
 KGeometry.cxx:260
 KGeometry.cxx:261
 KGeometry.cxx:262
 KGeometry.cxx:263
 KGeometry.cxx:264
 KGeometry.cxx:265
 KGeometry.cxx:266
 KGeometry.cxx:267
 KGeometry.cxx:268
 KGeometry.cxx:269
 KGeometry.cxx:270
 KGeometry.cxx:271
 KGeometry.cxx:272
 KGeometry.cxx:273
 KGeometry.cxx:274
 KGeometry.cxx:275
 KGeometry.cxx:276
 KGeometry.cxx:277
 KGeometry.cxx:278
 KGeometry.cxx:279
 KGeometry.cxx:280
 KGeometry.cxx:281
 KGeometry.cxx:282
 KGeometry.cxx:283
 KGeometry.cxx:284
 KGeometry.cxx:285
 KGeometry.cxx:286
 KGeometry.cxx:287
 KGeometry.cxx:288
 KGeometry.cxx:289
 KGeometry.cxx:290
 KGeometry.cxx:291
 KGeometry.cxx:292
 KGeometry.cxx:293
 KGeometry.cxx:294
 KGeometry.cxx:295
 KGeometry.cxx:296
 KGeometry.cxx:297
 KGeometry.cxx:298
 KGeometry.cxx:299
 KGeometry.cxx:300
 KGeometry.cxx:301
 KGeometry.cxx:302
 KGeometry.cxx:303
 KGeometry.cxx:304
 KGeometry.cxx:305
 KGeometry.cxx:306
 KGeometry.cxx:307
 KGeometry.cxx:308
 KGeometry.cxx:309
 KGeometry.cxx:310
 KGeometry.cxx:311
 KGeometry.cxx:312
 KGeometry.cxx:313
 KGeometry.cxx:314
 KGeometry.cxx:315
 KGeometry.cxx:316
 KGeometry.cxx:317
 KGeometry.cxx:318
 KGeometry.cxx:319
 KGeometry.cxx:320
 KGeometry.cxx:321
 KGeometry.cxx:322
 KGeometry.cxx:323
 KGeometry.cxx:324
 KGeometry.cxx:325
 KGeometry.cxx:326
 KGeometry.cxx:327
 KGeometry.cxx:328
 KGeometry.cxx:329
 KGeometry.cxx:330
 KGeometry.cxx:331
 KGeometry.cxx:332
 KGeometry.cxx:333
 KGeometry.cxx:334
 KGeometry.cxx:335
 KGeometry.cxx:336
 KGeometry.cxx:337
 KGeometry.cxx:338
 KGeometry.cxx:339
 KGeometry.cxx:340
 KGeometry.cxx:341
 KGeometry.cxx:342
 KGeometry.cxx:343
 KGeometry.cxx:344
 KGeometry.cxx:345
 KGeometry.cxx:346
 KGeometry.cxx:347
 KGeometry.cxx:348
 KGeometry.cxx:349
 KGeometry.cxx:350
 KGeometry.cxx:351
 KGeometry.cxx:352
 KGeometry.cxx:353
 KGeometry.cxx:354
 KGeometry.cxx:355
 KGeometry.cxx:356
 KGeometry.cxx:357
 KGeometry.cxx:358
 KGeometry.cxx:359
 KGeometry.cxx:360
 KGeometry.cxx:361
 KGeometry.cxx:362
 KGeometry.cxx:363
 KGeometry.cxx:364
 KGeometry.cxx:365
 KGeometry.cxx:366
 KGeometry.cxx:367
 KGeometry.cxx:368
 KGeometry.cxx:369
 KGeometry.cxx:370
 KGeometry.cxx:371
 KGeometry.cxx:372
 KGeometry.cxx:373
 KGeometry.cxx:374
 KGeometry.cxx:375
 KGeometry.cxx:376
 KGeometry.cxx:377
 KGeometry.cxx:378
 KGeometry.cxx:379
 KGeometry.cxx:380
 KGeometry.cxx:381
 KGeometry.cxx:382
 KGeometry.cxx:383
 KGeometry.cxx:384
 KGeometry.cxx:385
 KGeometry.cxx:386
 KGeometry.cxx:387
 KGeometry.cxx:388
 KGeometry.cxx:389
 KGeometry.cxx:390
 KGeometry.cxx:391
 KGeometry.cxx:392
 KGeometry.cxx:393
 KGeometry.cxx:394
 KGeometry.cxx:395
 KGeometry.cxx:396
 KGeometry.cxx:397
 KGeometry.cxx:398
 KGeometry.cxx:399
 KGeometry.cxx:400
 KGeometry.cxx:401
 KGeometry.cxx:402
 KGeometry.cxx:403
 KGeometry.cxx:404
 KGeometry.cxx:405
 KGeometry.cxx:406
 KGeometry.cxx:407
 KGeometry.cxx:408
 KGeometry.cxx:409
 KGeometry.cxx:410
 KGeometry.cxx:411
 KGeometry.cxx:412
 KGeometry.cxx:413
 KGeometry.cxx:414
 KGeometry.cxx:415
 KGeometry.cxx:416
 KGeometry.cxx:417
 KGeometry.cxx:418
 KGeometry.cxx:419
 KGeometry.cxx:420
 KGeometry.cxx:421
 KGeometry.cxx:422
 KGeometry.cxx:423
 KGeometry.cxx:424
 KGeometry.cxx:425
 KGeometry.cxx:426
 KGeometry.cxx:427
 KGeometry.cxx:428
 KGeometry.cxx:429
 KGeometry.cxx:430
 KGeometry.cxx:431
 KGeometry.cxx:432
 KGeometry.cxx:433
 KGeometry.cxx:434
 KGeometry.cxx:435
 KGeometry.cxx:436
 KGeometry.cxx:437
 KGeometry.cxx:438
 KGeometry.cxx:439
 KGeometry.cxx:440
 KGeometry.cxx:441
 KGeometry.cxx:442
 KGeometry.cxx:443
 KGeometry.cxx:444
 KGeometry.cxx:445
 KGeometry.cxx:446
 KGeometry.cxx:447
 KGeometry.cxx:448
 KGeometry.cxx:449
 KGeometry.cxx:450
 KGeometry.cxx:451
 KGeometry.cxx:452
 KGeometry.cxx:453
 KGeometry.cxx:454
 KGeometry.cxx:455
 KGeometry.cxx:456
 KGeometry.cxx:457
 KGeometry.cxx:458
 KGeometry.cxx:459
 KGeometry.cxx:460
 KGeometry.cxx:461
 KGeometry.cxx:462
 KGeometry.cxx:463
 KGeometry.cxx:464
 KGeometry.cxx:465
 KGeometry.cxx:466
 KGeometry.cxx:467
 KGeometry.cxx:468
 KGeometry.cxx:469
 KGeometry.cxx:470
 KGeometry.cxx:471
 KGeometry.cxx:472
 KGeometry.cxx:473
 KGeometry.cxx:474
 KGeometry.cxx:475
 KGeometry.cxx:476
 KGeometry.cxx:477
 KGeometry.cxx:478
 KGeometry.cxx:479
 KGeometry.cxx:480
 KGeometry.cxx:481
 KGeometry.cxx:482
 KGeometry.cxx:483
 KGeometry.cxx:484
 KGeometry.cxx:485
 KGeometry.cxx:486
 KGeometry.cxx:487
 KGeometry.cxx:488
 KGeometry.cxx:489
 KGeometry.cxx:490
 KGeometry.cxx:491
 KGeometry.cxx:492
 KGeometry.cxx:493
 KGeometry.cxx:494