ROOT logo
#include "Rtypes.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "KPad.h"
#include "KMaterial.h"

#define JMAX 40

ClassImp(KPad)
//////////////////////////////////////////////////////////////////////////
//                                                                      //
// KPad                                                                //
//                                                                      //
// Description of the Diode                                             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

KPad::KPad(Float_t x,Float_t y)
{
  //Constructor of the class KPad:
  //		Float_t x ; width of the diode in um. For the simulation it is not neccessary to put real dimensions
  //		Float_t y ; thickness in um
  Neff=NULL;
  CellX=x;  CellY=y;
}
 

void KPad::SetUpVolume(Float_t St1)
{
  nx=(Int_t) (CellX/St1);
  ny=(Int_t) (CellY/St1);
  nz=1;
  //Set the boundary condition matrix //
  EG=new TH3I("EG","EG",nx,0,CellX,ny,0,CellY,1,0,1);
  EG->GetXaxis()->SetTitle("x [#mum]");
  EG->GetYaxis()->SetTitle("y [#mum]");

  DM=new TH3I("DM","DM",nx,0,CellX,ny,0,CellY,1,0,1);
  DM->GetXaxis()->SetTitle("x [#mum]");
  DM->GetYaxis()->SetTitle("y [#mum]");
}

void KPad::SetUpElectrodes()
{
 
 for(int i=1;i<=nx;i++){ EG->SetBinContent(i,1,1,2);  EG->SetBinContent(i,ny,1,16385);} 
 KMaterial::Mat=0;
  //Default track
 enp[0]=CellX/2;  exp[0]=enp[0];
 enp[1]=1;        exp[1]=CellY;
 if(Neff!=NULL ) 
   {CalField(0); CalField(1);} 
 else 
   printf("Please define space charge function Neff before field calculation\n");
 
}


//_________________________________________________________________________________
Float_t  KPad::rtbis(float x1, float x2, float xacc)
{
	void nrerror(char error_text[]);
	int j;
	float dx,f,fmid,xmid,rtb;

	f=PoEqSolve(x1);
	fmid=PoEqSolve(x2);
	if (f*fmid >= 0.0) nrerror("Root must be bracketed for bisection in rtbis");
	rtb = f < 0.0 ? (dx=x2-x1,x1) : (dx=x1-x2,x2);
	for (j=1;j<=JMAX;j++) {
		fmid=PoEqSolve(xmid=rtb+(dx *= 0.5));
		if (fmid <= 0.0) rtb=xmid;
		if (fabs(dx) < xacc || fmid == 0.0) return rtb;
	}
	nrerror("Too many bisections in rtbis");
	return 0.0;
}
//___________________________________________________________________________________
void KPad::rk4(float y[], float dydx[], int n, float x, float h, float yout[])
{
        float *vector(long,long);
	void free_vector(float*,long,long);
	int i;
	float xh,hh,h6,*dym,*dyt,*yt;

	dym=vector(1,n);
	dyt=vector(1,n);
	yt=vector(1,n);
	hh=h*0.5;
	h6=h/6.0;
	xh=x+hh;
	for (i=1;i<=n;i++) yt[i]=y[i]+hh*dydx[i];
	Derivs(xh,yt,dyt);
	for (i=1;i<=n;i++) yt[i]=y[i]+hh*dyt[i];
	Derivs(xh,yt,dym);
	for (i=1;i<=n;i++) {
		yt[i]=y[i]+h*dym[i];
		dym[i] += dyt[i];
	}
	Derivs(x+h,yt,dyt);
	for (i=1;i<=n;i++)
		yout[i]=y[i]+h6*(dydx[i]+dyt[i]+2.0*dym[i]);
	free_vector(yt,1,n);
	free_vector(dyt,1,n);
	free_vector(dym,1,n);
}
//_______________________________________________________________________________

KPad::~KPad()
{
}

void KPad::Derivs(float x,float y[],float dydx[])
{
  //Double_t permMat=(material==0)?perm:permDi;
  Double_t permMat=Perm();
Double_t permV  = perm0*1e-6;;
dydx[1]=y[2];
dydx[2]=-Neff->Eval(x)*e_0/(permMat*permV); 
// if(x>150) dydx[2]*=permMat;
}

Float_t KPad::PoEqSolve(Float_t der)
{
  //TArrayF PhyField(ny+2);
  //TArrayF PhyPot(ny+2);
  //Float_t Step=1;

Int_t i;
Float_t h,x=0;


Float_t y[3],dydx[3],yout[3];



     y[1]=Voltage;
     y[2]=der;
     PhyField[0]=y[2]; PhyPot[0]=y[1];   
     Derivs(x,y,dydx);
     for (i=1;i<=ny;i++) 
       {
	        h=GetStepSize(1,i);
      		rk4(y,dydx,2,x,h,yout);
		//printf("%f %f %f\n",x+h,yout[1],yout[2]);
		y[1]=yout[1];
		y[2]=yout[2]; 
       		PhyField[i]=y[2]; PhyPot[i]=y[1]; 
		x=x+h;
	       Derivs(x,y,dydx);
       }
     
     //     printf("y[1]=%f\n",xp1);
return y[1];
}

void KPad::GetRamoField()
{
  Int_t i,j;
  Double_t *x=new Double_t [nx*ny+1];
 for(j=1;j<=ny;j++)
    for(i=1;i<=nx;i++)
      x[i+(j-1)*nx]=(Double_t)(j-1)/(Double_t)(ny-1); 
 Ramo->U=MapToGeometry(x);
 Ramo->CalField();
 delete [] x;

}


void KPad::GetRamoField(TH1F *rf)
{

Int_t i,j;
 Double_t *x=new Double_t [nx*ny+1];

for(j=1;j<=ny;j++)

  for(i=1;i<=nx;i++)
    x[i+(j-1)*nx]=rf->GetBinContent(j); 
  
  Ramo->U=MapToGeometry(x);
  Ramo->CalField();
 delete [] x;
}


void KPad::GetField()
{
Int_t i,j;
//Float_t Step=1;
Float_t aa;
PhyPot=TArrayF(ny+2);
PhyField=TArrayF(ny+2);
 Double_t *x=new Double_t [nx*ny+1];
//TArrayD PhyPot2D(nx*ny+1);
//TArrayI StripPosition=TArrayI(2); StripPosition[0]=1; StripPosition[1]=nx; 

aa=rtbis(-100,100,0.000001);
//if(!Invert && GetDepletionVoltage()>Voltage) aa=rtbis(1,300,0.000001); else aa=rtbis(-10,10,0.000001);

for(j=1;j<=ny;j++)
  for(i=1;i<=nx;i++)
    {
      x[i+(j-1)*nx]=(Double_t)PhyPot[j-1];
    }
//Real=EField(PhyPot2D,nx,ny);
//Real->CalField(Step,1);

// for(i=0;i<nx*ny+1;i++)     {printf("%f ",PhyPot2D[i]); if(i%nx==0) printf("\n");}

 Real->U=MapToGeometry(x);
 Real->CalField();
 delete [] x;
}

void KPad::GetField(TH1F *rf)
{

Int_t i,j;
 Double_t *x=new Double_t [nx*ny+1];
 PhyPot=TArrayF(ny+2);
for(j=1;j<=ny;j++)

  for(i=1;i<=nx;i++)
    x[i+(j-1)*nx]=rf->GetBinContent(j); 
     PhyPot[j-1]=rf->GetBinContent(j); 
 Real->U=MapToGeometry(x);
  Real->CalField();
 delete [] x;
}

void KPad::GetField(TF1 *rf)
{

Int_t i,j;
 Double_t *x=new Double_t [nx*ny+1];
 PhyPot=TArrayF(ny+2); 
for(j=1;j<=ny;j++)

  for(i=1;i<=nx;i++)
    x[i+(j-1)*nx]=rf->Eval(EG->GetXaxis()->GetBinCenter(j));
    PhyPot[j-1]=rf->Eval(EG->GetXaxis()->GetBinCenter(j));
 Real->U=MapToGeometry(x);
 Real->CalField();
 delete [] x;
}


// void KPad::GetField(TF1 *potential)
//  {
//  //Set the field as defined in the potential function.
//  Int_t i,j,index;
//  Float_t aa,val;
//  Double_t abspot=0;
//  PhyPot=TArrayF(ny+2);
//  PhyField=TArrayF(ny+2);
//  TArrayD PhyPot2D(nx*ny+1);

//  Real=EField(PhyPot2D,nx,ny);
//   abspot=potential->Integral(0,300);// printf("napetost=%e\n",abspot);
//  for(j=1;j<=ny;j++)
//    {
//    for(i=1;i<=nx;i++)
//      {
//        index=i+(j-1)*nx;
//        Real->SetEfx(index,0);
//        Real->SetEfy(index,-potential->Eval((Double_t)(ny-j)));
//        Real->SetEf (index,-potential->Eval((Double_t)(ny-j)));	  
//      }  
//    PhyField[j]=-potential->Eval((Double_t)(ny-j));
//    if(j==1) PhyPot[j]=abspot; else
//     PhyPot[j]=potential->Integral((Double_t)(ny-j),(Double_t)(ny-j-1))+PhyPot[j-1]; 
//   }
// //Real=EField(PhyPot2D,nx,ny,StripPosition);
// //Real->CalField(Step,1);

// // for(i=0;i<nx*ny+1;i++)     {printf("%f ",PhyPot2D[i]); if(i%nx==0) printf("\n");}
// }



TGraph *KPad::DrawPad(char *option)
{
  //Draws potential "p" or  electric field "f"
Char_t Opt[10];
TGraph *gr;
TArrayF xx=TArrayF(ny+1);
 for(Int_t i=0;i<=ny;i++) xx[i]=(Float_t)i*GetStepSize(1,i);

if(strchr(option,'p')!=NULL) gr=new TGraph(ny+1,xx.GetArray(),PhyPot.GetArray());
if(strchr(option,'f')!=NULL) gr=new TGraph(ny+1,xx.GetArray(),PhyField.GetArray());
if(strchr(option,'s')!=NULL) sprintf(Opt,"CP"); else  sprintf(Opt,"ACP"); 
//if(! strcmp(option,"p")) gr=new TGraph(ny,xx.GetArray(),PhyPot.GetArray());
//if(! strcmp(option,"f")) gr=new TGraph(ny,xx.GetArray(),PhyField.GetArray());
gr->Draw(Opt);
gr->GetHistogram()->Draw();
gr->Draw(Opt);
return gr;
}

Double_t laser(Double_t *x, Double_t *par)
{
   Double_t dvg=0;
   dvg=par[0]*TMath::Exp(- TMath::Power((*x-par[1]),2)/par[2])+par[3]+par[4]*(*x)+par[5]*TMath::Power(*x,2);
   return dvg;
}

// void KPad::LaserV(float *enp, float *exip, int div,Float_t lambda)
// {
//   // The simulation of the drift for the red laser illumination! 
//   // A penetration profile  is devided into Int_ div buckets. Each bucket is drifted in the field. The
//   // induced currents for each carrier is calculated as the sum  all buckets. 

// TH1F trn[4],trp[4];
// Float_t sp[3];;
// DStruct seg;
// Double_t MaxPudu=2.7,pudu=0.;
// Int_t PuduStep=27;
// int i,ii=0,j,k=0,z,cutoff=27,shiftn,shiftp;
// //void printsegdrift(struct segdrift *);
// Double_t *cc= new Double_t[cutoff]; 
// Double_t *tt= new Double_t[cutoff]; 
// Double_t cd;

// float xe,xs;//= new Double_t[cutoff]; 
//  TH1F *histop  = new TH1F("chl+","charge+",200,0,STEPH);
//  TH1F *histon  = new TH1F("chl-","charge-",200,0,STEPH);
//  TH1F *outhisp,*outhisn;

//  Double_t par[6]={-0.038553,1.07634,1.14664,1.54445e-2,-6.08484e-3,6.08802e-4};
//  TF1 *las=new TF1("laser",laser,0,5,6);
//  las->SetParameters(par);

// while(pudu<MaxPudu) 
//   {
//    cc[k]=las->Integral(pudu,pudu+MaxPudu/PuduStep)/las->Integral(MaxPudu/PuduStep,MaxPudu);
//    tt[k]=pudu*1e-9;
//    //  printf("%e %e\n",cc[k],tt[k]);
//    pudu+=MaxPudu/PuduStep; k++; 
//   } 

// sum->Reset(); pos->Reset(); neg->Reset();
//   for(i=0;i<div;i++) 
//   {
//      for(j=0;j<3;j++) sp[j]=((exip[j]-enp[j])/div)*i+enp[j]+(exip[j]-enp[j])/(2*div);
//      xs=((exip[1]-enp[1])/div)*i; 
//      xe=xs+(exip[1]-enp[1])/div;
//      cd=(TMath::Exp(-fabs(xs)/lambda)-TMath::Exp(-fabs(xe)/lambda));
 
//      //      printf("%f %f %f %f %f\n",sp[0],sp[1],fabs(xs),fabs(xe),cd); 

//      for(ii=0;ii<average;ii++)
//        {
//      Drift(sp[0],sp[1],1,&seg,MobMod);
//      seg.GetCH(histop,1); 
//      Drift(sp[0],sp[1],-1,&seg,MobMod);
//      seg.GetCH(histon,1); 
//        }
//      histop->Scale(1/(Float_t)average); histon->Scale(1/(Float_t)average); 
//       // pad2->cd(); histon->Draw(); c1->Update();   printf("%d %e\n",i,histon->Integral());

//      if(trapping) {
//        ht->Trapping(histop,trp);  outhisp=&trp[3];
//        et->Trapping(histon,trn); outhisn=&trn[3]; 
//        //pad2->cd(); histon->Draw(); c1->Update();  
//                   } 
//      else {outhisp=histop; outhisn=histon;}

//      shiftp=(Int_t) (MaxPudu*1e-9/outhisp->GetBinWidth(1))+1;
//      shiftn=(Int_t) (MaxPudu*1e-9/outhisn->GetBinWidth(1))+1;
//      //printf("%d %d\n",shiftp,shiftn);
//      for(k=0;k<PuduStep;k++)
//      {
//      for(j=1;j<=outhisn->GetNbinsX()-shiftn;j++) {z=(Int_t)(tt[k]/histon->GetBinWidth(1)); neg->AddBinContent(j+z,outhisn->GetBinContent(j)*cd*fabs(cc[k]));}
//      for(j=1;j<=outhisp->GetNbinsX()-shiftp;j++) {z=(Int_t)(tt[k]/histop->GetBinWidth(1)); pos->AddBinContent(j+z,outhisp->GetBinContent(j)*cd*fabs(cc[k]));}
//      }
//      histon->Reset(); histop->Reset();
//   }
     
// sum->Add(neg);
// sum->Add(pos);   
// delete histon;
// delete histop;
// delete cc;
// delete tt;
// delete las;
// //shapper(taush,cht);
// }









// void KPad::CalM(DStruct *seg, Double_t *data)
//     {
//       Int_t i,j,numreg=0;
//       Double_t *M=new Double_t [seg->Steps+1];
//       Double_t *DIF=new Double_t [seg->Steps+1];
//       Double_t dx,dy,sum=1.,sum2=0,sum1=0,dif,dif1,dif2;
//       printf("Number of Steps=%d\n",seg->Steps);




    
//       for(i=1; i<seg->Steps;i++)
// 	{
// 	  //	  if(i==seg->Steps) DIF[i]=0;
// 	  dx=TMath::Sqrt(TMath::Power((seg->Xtrack[i+1]-seg->Xtrack[i]),2)+TMath::Power((seg->Ytrack[i+1]-seg->Ytrack[i]),2));
// 	  dif=Real->alpha(0.5*(seg->Efield[i+1]+seg->Efield[i]));
// 	  sum*=(1+dif*dx);
// 	  DIF[i]=sum;
// 	}

//       for(i=1;i<seg->Steps;i++) { printf("Step=%d [%f %f], E=%f , a[i]=%f M(i)=%f\n",i,seg->Xtrack[i],seg->Ytrack[i],seg->Efield[i],Real->alpha(seg->Efield[i]),DIF[i]); }


//       data[0]=DIF[seg->Steps-1]; data[1]=0; data[2]=0; data[3]=0;
//       printf("KKK %f\n",data[0]);
//       for(i=1;i<seg->Steps;i++) 
// 	{
// 	  if(DIF[i]>data[0]*0.2) 
// 	    {
// 	      data[1]+=seg->Xtrack[i]; data[2]+=seg->Ytrack[i]; numreg++;
// 	      data[3]+=seg->Time[i];
// 	       printf("::::: %e %e %e %d\n",data[1],data[2],data[3],numreg); 	      
// 	    }
// 	}
//    data[1]/=numreg; data[2]/=numreg; data[3]/=numreg; 


        
//     }

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