ROOT logo
#include "Rtypes.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "MultiWF.h"
#include <string.h>
#include "TCanvas.h"
#include "TF1.h"

ClassImp(MultiWF)

MultiWF::MultiWF(Char_t *name, Float_t newt0,Int_t type)
{
  // constructor 
  //	 Char_t *name  ;  file name
  //	 Float_t newt0 ;  time shift to correct time scale 

 Int_t ok,i=0; 
 Float_t *buf=new Float_t[800];
 Date=TArrayF(5);
 if((in=fopen(name,"rb"))==NULL) {printf("Can't read file!!!!"); return;};
 
switch(type)
   {
   case 0:  // standard readout for single channel - signle bias
  HeaderSize=44;
  ok=fread(buf,sizeof(Float_t),11,in);
  swooip(buf,11);
  Date[0]=buf[0]; Date[1]=buf[1]; Date[2]=buf[2]; Date[3]=buf[3]; Date[4]=buf[4];
  t0=buf[5]; deltat=buf[6]; Points=(Int_t)buf[7]; Voltage=buf[8]; Current=buf[9]; Temperature=buf[10];
  Voltage=TArrayF(1); 
  Temperature=TArrayF(1);
  Current=TArrayF(1);
  NumU=1;
  NumCh=1;
 Events=-1;
  Voltage[0]=buf[8]; Current[0]=buf[9]; Temperature[0]=buf[10];
  break;
   case 1: // old standard
  HeaderSize=16;   
  ok=fread(buf,sizeof(Float_t),4,in); 
  swooip(buf,4); 
  for(i=0;i<5;i++) Date[i]=0;
  deltat=buf[1];
  Voltage=TArrayF(1);
  Temperature=TArrayF(1);
  Current=TArrayF(1);
  Voltage[0]=0; Current[0]=0; Temperature[0]=0;
  t0=buf[0]+deltat*buf[2];
  Points=(Int_t)(buf[3]-buf[2]); 
  NumU=1;
  NumCh=1;
  Events=-1;
  break;
   case 2: // diamond readout standard single channel multi U readout
  ok=fread(buf,sizeof(Float_t),10,in);
  swooip(buf,11);
  Date[0]=buf[0]; Date[1]=buf[1]; Date[2]=buf[2]; Date[3]=buf[3]; Date[4]=buf[4];
  t0=buf[5]; deltat=buf[6]; Points=(Int_t)buf[7]; NumU=(Int_t) buf[9]; NumUAver=(Int_t)buf[8]; 
  //  Points=500;
  HeaderSize=40+3*NumU*sizeof(Float_t);
  Voltage=TArrayF(NumU);
  Temperature=TArrayF(NumU);
  Current=TArrayF(NumU);
  //  Info();
  ok=fread(buf,sizeof(Float_t),NumU*3,in);
  swooip(buf,3*NumU);
  for(i=0;i<NumU;i++) {Voltage[i]=buf[i]; Current[i]=buf[i+NumU]; Temperature[i]=buf[i+NumU*2];}
  Events=-1;
  NumCh=1;
   break;

   case 3:  // channel used for multichannel readout NumU here actually means numner of channels. 
   HeaderSize=120;   
   ok=fread(buf,sizeof(Float_t),30,in); 
   //Read date
   for(i=0;i<5;i++) Date[i]=buf[i];
   //Read waveform info
   t0=buf[6];
   deltat=buf[7]*1e-9;
   Points=(Int_t) buf[8];
   NumU=(Int_t) buf[14];
   NumCh=NumU;
   Events=(Int_t) buf[17];
  
   Voltage=TArrayF(NumU);
   Temperature=TArrayF(NumU);
   Current=TArrayF(NumU);
   for(i=0;i<NumU;i++) Voltage[i]=buf[i+18];
   for(i=0;i<NumU;i++) Current[i]=buf[i+22];
   for(i=0;i<NumU;i++) Temperature[i]=buf[i+26];

   NumUAver=1;
   break;

   case 4:
   //Format 4 new standard - size of buffer 5kByte = 1024*5 = 5120 bytes
   //[0] ... [4] Date Time 
   //[5] ... Number of Active channels
   //[6] ... Number of Voltages -> default =1 -single voltage 
   //[7] ... Events/Voltage -> if default = total number of event
   //[8]
   //[9]
   //[10] ... t0
   //[11] ... delta t
   //[12] ... No points per waveform

   //[20] ... [100] reserved
   //[101] ... [300] Array of Voltages
   //[301] ... [500] Array of Currents
   //[501] ... [700] Array of temperatures 
   //[701] ... [2000] reserved 
   //[2001] ... [5000] Comment Text
   
   HeaderSize=3000;   
   ok=fread(buf,sizeof(Char_t),HeaderSize,in); 
   swooip(buf,250);
   //Read date
   for(i=0;i<5;i++) Date[i]=buf[i];
   //Read waveform info
   //
   Points=(Int_t) buf[10];
   //      Points=(Int_t) 500;
   t0=buf[11];
   deltat=buf[12]*1e-9;

   NumUAver=(Int_t) buf[7];
   NumU=(Int_t) buf[6];
   NumCh=(Int_t) buf[5];
   Events=(Int_t) NumU*NumUAver;
  
   Voltage=TArrayF(NumU);
   Temperature=TArrayF(NumU);
   Current=TArrayF(NumU);
   for(i=0;i<NumU;i++) {Voltage[i]=buf[25+i];   /*  printf("V(%d)=%f\n",Voltage[i]); */ }
   for(i=0;i<NumU;i++) {Current[i]=buf[85+i];    /*  printf("I(%d)=%f\n",Current[i]); */}
   for(i=0;i<NumU;i++) {Temperature[i]=buf[145+i]; /* printf("V(%d)=%f\n",Temperature[i]); */}

   Char_t *ddd=(Char_t *)&buf[250];
   for(int o=0;o<1999;o++) {Comment[o]=ddd[o]; /*printf("%c",ddd[o]);*/} Comment[1999]='\0';
   
   break;
   }
//Info();
  if(newt0!=-1111) {t0=newt0*1e-9; cm_mint=t0; cm_maxt=0; printf("User start time    : %e\n",t0);}
  //  chis=new TH1F("Event View","Event View",Points,t0*1e9,(t0+Points*deltat)*1e9);
  delete buf;
  CheckSize();
  CCmode=0;
  ///
  TimeC=0;
  TimeThr=-1e9;
  ////
  cevent=1;
  Info();

//   printf("DATE= %4.0f %4.0f %4.0f %4.0f %4.0f\n",Date[0],Date[1],Date[2],Date[3],Date[4]);
//   printf("Points per event   : %d\n",Points);
//   printf("Time between points: %e\n",deltat);
//   printf("Start time         : %e\n",t0);
//   printf("Num. of U [%d each]: %d\n",NumUAver,NumU);
//     printf("Voltage            : %4.3f,",Voltage[0]);
//   for(i=1;i<NumU;i++) printf("%4.3f,",Voltage[i]);
//   printf("\nCurrent            : %4.3e,",Current[0]);
//   for(i=1;i<NumU;i++) printf("%4.3e,",Current[i]);
//   printf("\nTemperature        : %4.3f,",Temperature[0]);
//   for(i=1;i<NumU;i++) printf("%4.3f,",Temperature[i]);
//   printf("\n");
  cmcut=1;
  Weight=1;
  /////////////////////////////////////////////////////////////
  /////////////////// FILTER //////////////////////////////////
  FOnOff=false;;
  Fxlow=-1e6; Fxhi=1e6; 
  Fylow=-1e6; Fyhi=1e6;
  FIntPass=-1e6;
  FIntPassHi=1e6;
  Fmaxlo=-1e6;
  Fmaxhi=1e6;
  /////////////////////////////////////////////////////////////
  cmcut_hi=1e6;
  cmcut_low=-1e6;
  /////////////////////////////////////////////////////////////
  SelPlot=0;
  Ebuf=new Float_t *[NumCh];
  hisa=new TH1F    *[NumCh];
  Cmode=new Float_t [NumCh];
  char txt[30];
   for(Int_t j=0;j<NumCh;j++)
     {
     Ebuf[j]=new Float_t [Points];
     sprintf(txt,"Event View Ch# %d",j);
     hisa[j]=new TH1F(txt,txt,Points,t0*1e9,(t0+Points*deltat)*1e9);
     }
   chis=hisa[SelPlot];
}


MultiWF::~MultiWF()
{ 
  //destructor
  if(in!=NULL) fclose(in);
  //if(pt!=NULL)  delete pt;
  if(chis!=NULL) delete chis;
  if(Ebuf!=NULL) delete Ebuf;
  delete [] Cmode;
 Clear();
}

void  MultiWF::swoo(char *a, char *b) {
  // byte swaping (LABVIEW,HPUX g++)<->(LINUX g++, WINNT cl) 
  char c = *a;
  *a = *b; *b = c;
}

void MultiWF::swooip(float *in, int s) {
 // byte swaping (LABVIEW,HPUX g++)<->(LINUX g++, WINNT cl) 
  char *sr, b;
  while(s--) {
    sr=(char *)in;
    swoo(&sr[0], &sr[3]);
    swoo(&sr[1], &sr[2]);
    in++;
  }
}

TH1F *MultiWF::AverPlot(Int_t num,Int_t mode, Int_t skip,Int_t Start,Int_t Stop)
{
  if(Start==-1) Start=1;
  if(Stop==-1) Stop=Events+1;
  Int_t inc=(Stop-Start)/num;
  Int_t step,k=0;
  TH1F *his;
  TH1F *plot=new TH1F("aveplot","aveplot",num,Start,Stop);


  
  for(int i=0;i<num;i++)
    {
      if(skip<0) step=inc; else step=skip;
      //      his=Average((i-1)*inc+1,step);// printf("i=%d, %f",k, his->GetMaximumBin());
      his=Average(i*inc+Start,i*inc+Start+step);// printf("i=%d, %f",k, his->GetMaximumBin());
      his->SetAxisRange(his->GetBinCenter(1),his->GetBinCenter(1024),"X");
      switch(mode)
      	{
	case 0: plot->SetBinContent(i+1, his->GetMaximum()); break;
	case 1: plot->SetBinContent(i+1, his->Integral()); break;
     	}

      delete his;
    }
  return plot;
}

void MultiWF::SelectPlot(Int_t x)
{
  Int_t i;
  if(x>NumU || x<0) {printf("Selection out of range \n"); return;}
  SelPlot=x;
  for(i=1;i<=Points;i++){ chis->SetBinContent(i,Weight*Ebuf[SelPlot][i-1]);}
  if(CCmode) CommonMode(); 
}

void MultiWF::PlotEvent(Int_t x)
{
  Int_t i,p;
  Rewind(x); 
  //  TH1F *his[4];
  for(p=0;p<NumCh;p++) 
    {
  for(i=1;i<=Points;i++){ chis->SetBinContent(i,Weight*Ebuf[p][i-1]);}
  if(CCmode) CommonMode(); 
  chis->SetLineColor(p+1);
  if(p==0) chis->DrawCopy(); else chis->DrawCopy("SAME");
    }
}

Int_t MultiWF::CheckSize()
{
  // Retruns estimated number of events in the file
Int_t curpos=ftell(in);
 Int_t tempE;
fseek(in,0,SEEK_END);
Int_t filesize=ftell(in);
rewind(in);
fseek(in,curpos,SEEK_CUR);
 tempE=((filesize-HeaderSize)/(sizeof(float)*Points*NumCh));
 if(Events!=-1)
   {if(tempE!=Events) printf("Event number missmatch\n");} else Events=tempE;

if((filesize-HeaderSize)%(sizeof(float)*Points)==0) 
  {printf("Number of events in file=%d\n",Events); if(NumU==1) NumUAver=Events; return 0;} 
 else 
  {printf("Sucpicious file!!!!! Around %d events in the file!\n",tempE); return 1;}; 

}


void MultiWF::GetNextEvent()
{
  // Gets next event in the file 
  //	         Int_t CM   ; ignore=0  ,  correct common mode=1 (this is base line shift) 
  Int_t ok,i,j,Loop; 
  
  //  if(HeaderSize==120) Loop=NumU; else Loop=1;

  
  for(j=0;j<NumCh;j++)
    {
      ok=fread(Ebuf[j],sizeof(Float_t),Points,in);
      if(HeaderSize!=120) swooip(Ebuf[j],Points);
    }
  //  Float_t *buf=new Float_t[Points];
  //  ok=fread(buf,sizeof(Float_t),Points,in);
  if(TimeC) CorrectTime(0,TimeThr);

  for(j=0;j<NumCh;j++)
  for(i=1;i<=Points;i++)
    { 
      //    chis->SetBinContent(i,Weight*Ebuf[SelPlot][i-1]);
    hisa[j]->SetBinContent(i,Weight*Ebuf[j][i-1]);
    }// printf("%f ",buf[i-1]);} printf("\n");

      //   chis->SetBinContent(i,Weight*Ebuf[SelPlot][i-1]);
  chis=hisa[SelPlot];

  if(CCmode) CommonMode();
  cevent++;
}

void MultiWF::CommonMode()
{
  // Corrects base line shift
Int_t i=0,num=chis->GetNbinsX();
Int_t right,left;
Double_t cm;

 for(Int_t j=0;j<NumCh;j++)
     {
       //     Ebuf[j]=new Float_t [Points];
       //     sprintf(txt,"Event View Ch# %d",j);
       //     hisa[j]=new TH1F(txt,txt,Points,t0*1e9,(t0+Points*deltat)*1e9);
       //     }

       ///right=chis->GetXaxis()->FindBin(cm_maxt);
       //left=chis->GetXaxis()->FindBin(cm_mint);
       //cmode=chis->Integral(left,right);
       //cmode=cmode/((Float_t )right-(Float_t )left);
//printf("left bin=%d , right bin=%d , common mode=%f \n",left,right,cm);
///for(i=1;i<num;i++) 
//  chis->SetBinContent(i,chis->GetBinContent(i)-cmode);  	


       right=hisa[j]->GetXaxis()->FindBin(cm_maxt);
       left=hisa[j]->GetXaxis()->FindBin(cm_mint);
       Cmode[j]=hisa[j]->Integral(left,right);
       Cmode[j]=Cmode[j]/((Float_t )right-(Float_t )left);
       // printf("left bin=%d , right bin=%d , common mode=%f \n",left,right,cmode);
       num=hisa[j]->GetNbinsX();
for(i=1;i<num;i++) 
  hisa[j]->SetBinContent(i,hisa[j]->GetBinContent(i)-Cmode[j]);  	
     }
 cmode=Cmode[SelPlot];
 
}

Float_t MultiWF::Integral(Float_t mint,Float_t maxt)
{
  //Calculates integral of the current histogram (chis)!
  //		Float_t mint	; integration time interval
  //		Float_t maxt	;
Int_t left,right;
if(mint==-1111) left=1; else left=chis->GetXaxis()->FindBin(mint);
if(maxt==-1111) right=chis->GetNbinsX(); else right=chis->GetXaxis()->FindBin(maxt); 
//printf("left bin=%d , right bin=%d\n",left,right);
 return(chis->Integral(left,right)*deltat*1e9);
// return(chis->Integral(left,right)*chis->GetBinWidth(10));
}

void MultiWF::EShaping(Elec *el,TH1F *his,Int_t what)
{
  //copies the current histogram in TH1F *his and shapes it with Elec *el 
  // Int_t what; 0-> preamplifier->CR-RC^2 shaper ,  1->deconvolution for the TCT transfer function
  
chis->Copy(*his);
Double_t xmax,xmin;
switch(what)
  {
case 0: xmax=his->GetXaxis()->GetXmax();
        xmin=his->GetXaxis()->GetXmin();
        his->GetXaxis()->SetLimits(xmin*1e-9,xmax*1e-9);
        el->preamp(his);
        el->CRshape(his);
        el->RCshape(his);
        el->RCshape(his); 
	his->GetXaxis()->SetLimits(xmin*1e9,xmax*1e9);
	break;
case 1: el->Revpreamp(his,1e9); break;
  }
}	

void MultiWF::WF(Int_t start,Int_t end,Int_t step ,Float_t stime,Float_t etime,Int_t aver)
{
  // Display waveform dependence on time of the measurement
  //			Int_t start   ;   the first event to be displayed
  //			Int_t end     ;   the first event to be displayed
  //                    Int_t step    ;   step size between events
  //			Float_t stime ;   time window of display
  //			Float_t etime ;   time window of display
  //			Int_t aver    ;   number of events to average first event 
  //					  Average(start,start+aver) etc.
TH1F *his;
Int_t colori[]={1,2,3,4,5,6,7,13,28,30,34,38,40,31,46,49,1,2,3,4,5,6,7};
Int_t color,k=0;
  for(Int_t i=start;i<=end;i+=step)
    {
  his=Average(i,i+aver); 
  color=colori[k];
  his->SetLineColor(color);
  his->SetLineWidth(2);
  if(i==start) 
    {
    his->GetXaxis()->SetRange(his->GetXaxis()->FindBin(stime),his->GetXaxis()->FindBin(etime));
    his->SetTitle("Current shape dependence on time");
    his->SetXTitle("t[ns]");
    his->SetYTitle("I [V/50#Omega]");
    his->DrawCopy(); 
    Legend(his,start,end,step);
    } 
  else his->DrawCopy("SAME");
  k++;
    }
}

void MultiWF::Legend(TH1F *ch,Int_t start, Int_t end,Int_t Step)
{
  //Draws legend
Float_t minx,miny,maxy,maxx,x1,x2,y1,y2;
TString title,utit="t=";
Char_t v[7]; 
Int_t color,cii=0;;
Int_t colori[]={1,2,3,4,5,6,7,13,28,30,34,38,40,31,46,49,1,2,3,4,5,6,7};
TText *text;

minx=ch->GetXaxis()->GetBinCenter(ch->GetXaxis()->GetFirst());
maxx=ch->GetXaxis()->GetBinCenter(ch->GetXaxis()->GetLast());
miny=ch->GetMinimum();
maxy=ch->GetMaximum();

x1=(maxx-minx)*0.6+minx; 
x2=(maxx-minx)*0.9+minx;
y2=(maxy-miny)*0.35+miny;
y1=(maxy-miny)*0.95+miny;

//printf("coords: x1=%f y1=%f x2=%f y2=%f\n",x1,y1,x2,y2);


if(pt!=NULL) delete pt;
pt=new TPaveText(x1,y1,x2,y2);

for(Int_t i=start;i<=end;i+=Step)
  { 
   i2a(v,(Int_t) i,0); 
   //   color=i/7*40+i%7+1; 
   color=colori[cii];
   title=utit+v; title=title+" ";
   text=pt->AddText((const char *)title);
   text->SetTextColor((Color_t)color);
   text->SetTextSize(0.05);
   cii++;
  }
pt->Draw();

}



TH1F *MultiWF::Time(Float_t time,Float_t low, Float_t high,Int_t rebin,Float_t stime)
{
  // Used with known trigger interval period
  // Each event charge (integral) is drawn vs. time of its occurence
  //			Float_t time ; 1/frequency of repetition
  //			Float_t low  ; integration time interval
  //			Float_t high ;
  //			Int_t rebin  ; rebining factor (average charge is shown)
  //			Float_t stime ; start time of the histogram (used with delayed DAQ)
Int_t i,j;
Float_t sum=0;
Float_t etime=time*Events+stime;
TH1F *th=new TH1F("th","CCE vs. Time",Events/rebin,stime,etime);
if(low==-1111) high=chis->GetBinCenter(Points-1);
for(i=0;i<Events/rebin;i++)
  {
for(j=0;j<rebin;j++) {GetNextEvent(); sum+=Integral(low,high);} 
     sum/=rebin;
     th->SetBinContent(i,sum);
     sum=0;
  }

 th->SetXTitle("time[s]");
 th->SetYTitle("Charge [arb.]");
 th->SetLabelSize(0.045,"X");
 th->SetLabelSize(0.045,"Y"); 
 rewind(in);
 fseek(in,HeaderSize,SEEK_SET);
 cevent=1;
return th;
}

TH1F *MultiWF::Specter(Float_t low, Float_t high,Float_t weight,Int_t num,Float_t first,Float_t last,Int_t evfirst,Int_t evlast)
{
  // Specter of all recorded events 
  //			Float_t low   ; integration time interval
  //			Float_t high  ;
  //			Float_t weight; normalization
  //			Int_t num     ; number of bins
  //			Int_t first   ; histogram limits
  //			Int_t last    ; 
  //			Int_t evfirst   ; first event
  //			Int_t evlast    ; last event
  
Int_t i;
TH1F *spectrum=new TH1F("Spectrum","Spectrum",num,first,last);
if(low==-1111) high=chis->GetBinCenter(Points-1);
 if(evfirst==-1) evfirst=0; else Rewind(evfirst);
if(evlast==-1) evlast=Events;

for(i=evfirst;i<evlast;i++)
  {
    GetNextEvent();
    if((CCmode && cmode<cmcut_hi && cmode>cmcut_low) || CCmode==0) 
    if(FOnOff==true) 
      {
      if(Filter()) spectrum->Fill(Integral(low,high)*weight);
      }
    else spectrum->Fill(Integral(low,high)*weight);
  }
 spectrum->SetXTitle("Charge [arb.]");
 spectrum->SetYTitle("Entries");
 spectrum->SetLabelSize(0.045,"X");
 spectrum->SetLabelSize(0.045,"Y"); 
 rewind(in);
 fseek(in,HeaderSize,SEEK_SET);
 cevent=1;
return spectrum;
}

TH1F *MultiWF::CMHisto()
{
TH1F *cmodehis=new TH1F("CModeHis","CModeHis",500,-500e-3,500e-3);
Rewind();
for(Int_t i=0;i<Events;i++)
  {
    GetNextEvent();
    cmodehis->Fill(cmode);    
  }
 return cmodehis;
}

TH1F *MultiWF::PHSpecter(Float_t weight,Int_t num,Float_t first,Float_t last,Float_t time_lo,Float_t time_hi,Int_t mode, Int_t StartE,Int_t StopE)
{
  // Pulse height specter of all recorded events 
  //			Float_t weight; normalization
  //			Int_t num     ; number of bins
  //			Int_t first   ; histogram limits
  //			Int_t last    ;
  //                    Float_t time_lo; select the time windows of sampling
  //                    Float_t time_hi; select the time windows of sampling
  //                    Int_t mode=0  ; mode of sampling
  //			Int_t StartE=-1  ;  select which events (StartE=-1 means 1st event)
  //			Int_t StopE=-1   ;  StopE=-1 je last event

Int_t i,j;
Int_t timelo;
Int_t timehi;
Float_t val,max=-1e6;
Char_t xname[100];
Bool_t ok;


TH1F *spectrum=new TH1F("Spectrum","Spectrum",num,first,last);

if(time_lo==-1e6) timelo=1; 
else timelo=chis->GetXaxis()->FindBin(time_lo);
if(time_lo==-1e6) timehi=chis->GetNbinsX(); else 
timehi=chis->GetXaxis()->FindBin(time_hi);
// TF1 *maxf=new TF1("maxf","pol2",time_lo,time_hi);
 TF1 *maxf=new TF1("maxf","pol0",time_lo,time_hi);
printf("Time window selected: %d %d (bins)\n",timelo,timehi);
//		TCanvas *c1=new TCanvas("c1","c1",800,600);
 if(StopE==-1 || StopE>=Events) StopE=Events;
 if(StartE==-1) StartE=0;
 Rewind(StartE);
for(i=StartE;i<StopE;i++)
  {
    GetNextEvent();
 
   switch(cmcut)
      {
      case 0: ok=true; break;
       case 1: ok=(cmode<cmcut_hi && cmode>cmcut_low); break;
       case 2: ok=(cmode>cmcut_hi || cmode<cmcut_low); break;
      }


   if((ok && CCmode==1) || CCmode==0 )
      {
	    switch(mode)
	      {
	      case 0:	
        	for(j=timelo;j<=timehi;j++) 
	        {
                val=chis->GetBinContent(j);
	        max=max>val?max:val;
		//		printf("%d %d %f %f\n",i,cevent-1,max,cmode);
		}
	        break;
	      case 1:
		
		chis->Fit("maxf","RNQ");
		//			max=-TMath::Power(maxf->GetParameter(1),2)/(4*maxf->GetParameter(2))+maxf->GetParameter(0);
		max=maxf->GetParameter(0);
		//	
		//		printf("max=%f\n",max);
		//		c1->Update();
		//		while(!getchar());
	        break;
	      }
	    //	    chis->SetAxisRange(0,100);
	   
	    //	    if(chis->GetMaximumBin()==timelo)
	    // if(max>0.11) printf("%f %d\n",max,i);
	    if(FOnOff==true) {if(Filter()) spectrum->Fill(max*weight);} else spectrum->Fill(max*weight);
      }  
    //    spectrum->Fill(chis->GetMaximum()*weight);
    max=-1e6;
  }
sprintf(xname,"Signal [%4.1f mV]",1000./weight); 
 spectrum->SetXTitle(xname);
 spectrum->SetYTitle("Entries");
 spectrum->SetLabelSize(0.045,"X");
 spectrum->SetLabelSize(0.045,"Y"); 
 rewind(in);
 fseek(in,HeaderSize,SEEK_SET);
 cevent=1;
return spectrum;
}

TH1F *MultiWF::WaveHisto(Float_t weight,Int_t num,Float_t first,Float_t last,Int_t startbin,Int_t endbin)
{
  // Pulse height specter of all recorded events 
  //			Float_t weight; normalization
  //			Int_t num     ; number of bins
  //			Int_t first   ; histogram limits
  //			Int_t last    ; 
  //                    Int_t startbin; start bin of the waveform histogram
  //                    Int_t endbin;   end bin of the waveform histogram
Int_t i,j;
Char_t xname[100];
TH1F *spectrum=new TH1F("Spectrum","Spectrum",num,first,last);
 if(startbin==-1) startbin=0;
 if(endbin==-1) endbin=Points;
for(i=0;i<Events;i++)
  {
    GetNextEvent();
    for(j=startbin;j<endbin;j++) spectrum->Fill(chis->GetBinContent(j)*weight);
  }
sprintf(xname,"Signal [%4.1f mv]",1000./weight); 
 spectrum->SetXTitle(xname);
 spectrum->SetYTitle("Entries");
 spectrum->SetLabelSize(0.045,"X");
 spectrum->SetLabelSize(0.045,"Y"); 
 rewind(in);
 fseek(in,HeaderSize*sizeof(Float_t),SEEK_SET);
 cevent=1;
return spectrum;
}


void  MultiWF::SetNewFile(Char_t *name)
{
  if(in!=NULL) fclose(in);
  if((in=fopen(name,"rb"))==NULL) {printf("Can't read file!!!!"); return;};
  cevent=0;
}

void MultiWF::Rewind(Int_t index)
{
  //Rewinds the file poiter to the desired event
  //		      Int_t index ; event number (defualt=0, begining of the file)
  if(cevent>index) {rewind(in);  fseek(in,HeaderSize,SEEK_SET); cevent=1; GetNextEvent(); }
  if(cevent==index) return;
  while(cevent<index) GetNextEvent();
}

TH1F *MultiWF::Average(Int_t start, Int_t end)
{
  // Averaging events (Waveforms)
  //		Int_t start ; first event
  //		Int_t end   ; last event
  //		Function returns pointer to averaged histogram
  Bool_t ok;
Int_t i,ANum=0;
Rewind(start);
TH1F *ah=new TH1F("AverHis","Averaged Histograms",chis->GetNbinsX(),chis->GetXaxis()->GetXmin(),chis->GetXaxis()->GetXmax());
 for(i=start; i<=end; i++) 
   { 
     GetNextEvent(); 
  
     switch(cmcut)
      {
      case 0: ok=true; break;
       case 1: ok=(cmode<cmcut_hi && cmode>cmcut_low); break;
       case 2: ok=(cmode>cmcut_hi || cmode<cmcut_low); break;
      }


 if((ok && CCmode==1) || CCmode==0 )
       {
     //FILTER Function
     if(FOnOff==true) 
       {
	 if(Filter())
	   {
	 ah->Add(chis); 
         ANum++;
	   }
       } 
     else
       {
       ah->Add(chis);
       ANum++;
       }
       }
     //     prevint=chis->Integral();
   }

if(ANum!=0) ah->Scale(1/(Float_t) ANum);
 printf("Average events %d (start=%d, end=%d)\n", ANum, start,end);
return ah;
}

TH1F *MultiWF::Add(Int_t start, Int_t end)
{
  // Averaging events (Waveforms)
  //		Int_t start ; first event
  //		Int_t end   ; last event
  //		Function returns pointer to averaged histogram
Int_t i;
if(end==0) end=Events-1; 
if(start==0) start=1;
Rewind(start);
TH1F *ah=new TH1F("sum","Cumulative histogram",chis->GetNbinsX(),chis->GetXaxis()->GetXmin(),chis->GetXaxis()->GetXmax());
 for(i=start; i<=end; i++) { GetNextEvent(); ah->Add(chis); }
 printf("Total entries in the histogram : %d\n",ah->Integral());
return ah;
}



void MultiWF::Info()
{
  Int_t i=0;
  // Prints information about measurement
  printf("DATE= %4.0f %4.0f %4.0f %4.0f %4.0f\n",Date[0],Date[1],Date[2],Date[3],Date[4]);
  printf("Points per event   : %d\n",Points);
  printf("Time between points: %e\n",deltat);
  printf("Start time         : %e\n",t0);
  printf("Number of channels : %d\n",NumCh);
  printf("Num. of U [%d each]: %d\n",NumUAver,NumU);
  printf("Voltage            : %4.3f,",Voltage[0]);
  for(i=1;i<NumU;i++) printf("%4.3f,",Voltage[i]);
  printf("\nCurrent            : %4.3e,",Current[0]);
  for(i=1;i<NumU;i++) printf("%4.3e,",Current[i]);
  printf("\nTemperature        : %4.3f,",Temperature[0]);
  for(i=1;i<NumU;i++) printf("%4.3f,",Temperature[i]);
  printf("\n");
  printf("*********************************\n");
  if(Comment!=NULL)  printf("%s\n", Comment);
  printf("*********************************\n");
  printf("Current Event      : %d\n",cevent);
  printf("Common mode time   : [%4.2f, %4.2f] \n",cm_mint,cm_maxt);


}



Int_t MultiWF::i2a(Char_t *v,Float_t vol,Int_t sign)
{
  // int to ascii with signs (same as in MeasureWF)
Int_t k=0;
Int_t dec=10000;
       if(sign) if(vol>0) v[k++]='+'; else {v[k++]='-'; vol=-vol;}
       if(!sign) vol=vol>0?vol:-vol; 
     for(Int_t j=0;j<=2;j++) { if((Int_t) vol/dec!=0) v[k++]=(Char_t)(((Int_t) vol)/dec)+48; dec=dec/10;}
       v[k++]=(Char_t)(((Int_t) vol%100)/10)+48;
       v[k++]=(Char_t)((Int_t) vol%10)+48; 
       v[k++]='\0';
       return k-1;
}

// void MultiWF::Persistance(Int_t start,Int_t end, Float_t Thresh, Float_t timelo, Float_t timehi, Int_t ShowPlot)
// {
//   Int_t tl,j,DSelPlot; 
//   Int_t th,totev=0;
//   Bool_t ok=false;
//   Float_t val,max=-1e10;

//   if(ShowPlot==-1111) {ShowPlot=SelPlot; DSelPlot=SelPlot;} else DSelPlot=SelPlot; 

//   if(Thresh!=-1111)
//     {
//   tl=chis->GetXaxis()->FindBin(timelo);
//   th=chis->GetXaxis()->FindBin(timehi);
//     }
//   Rewind(start); 
//   for(Int_t i=start;i<end;i++)
//     {
//       if(i==start) chis->Draw(); else
// 	{      
// 	  GetNextEvent(); 
// 	  if(Thresh!=-1111) 
// 	    {
// 	      for(j=tl;j<=th;j++) 
// 	        {
//                 val=chis->GetBinContent(j);
// 	        max=max>val?max:val;
// 		//		printf("%d %d %f %f\n",i,cevent-1,max,cmode);
// 		}
//        	  if(max>Thresh) ok=true; else ok=false;
// 	  max=-1e10;
// 	    }
// 	  else ok=true;

	
// 	  if(ok)
// 	    {
// 	  SelectPlot(ShowPlot);    
//           chis->SetLineColor(i%7+1);
// 	  chis->DrawCopy("SAME");
// 	  SelectPlot(DSelPlot);
// 	  totev++;
// 	    }
// 	}
//     }  
//   printf("Total events shown = %d\n",totev);
// }

void MultiWF::Persistance(Int_t start,Int_t end, Int_t ShowPlot)
{
  Int_t tl,j,DSelPlot; 
  Int_t th,totev=0;
  Bool_t ok=false;
  Float_t val,max=-1e10;
  SelectPlot(ShowPlot);
  Rewind(start); 
  for(Int_t i=start;i<end;i++)
      if(i==start) chis->Draw(); else
	{      
	  //	  printf("event %d\n",i);
	  GetNextEvent(); 
          chis->SetLineColor(i%7+1);
	  if(FOnOff==true) 
	    {if(Filter()) {chis->DrawCopy("SAME");  totev++; }}
	  else
	    {chis->DrawCopy("SAME");  totev++; }
	      
	}
  
  printf("Total events shown = %d\n",totev);
}


void MultiWF::FitShape(Int_t order,Float_t peaking_time)
{
  TF1 *fitf=new TF1("filter","[0]*((x-[1])*[2]/[3])^[2]*exp(-(x-[1])*[2]/[3])",0,1500);
  fitf->SetParameter(0,0.2);
  fitf->SetParameter(1,200);
  fitf->SetParameter(2,(Float_t )order);
  fitf->SetParLimits(2,-1,-1);
  fitf->SetParameter(3,peaking_time); 
  fitf->SetParLimits(3,-1,-1);
  chis->Fit("filter","R");
}


Double_t langaufun(Double_t *x, Double_t *par) {

   //Fit parameters:
   //par[0]=Width (scale) parameter of Landau density
   //par[1]=Most Probable (MP, location) parameter of Landau density
   //par[2]=Total area (integral -inf to inf, normalization constant)
   //par[3]=Width (sigma) of convoluted Gaussian function
   //
   //In the Landau distribution (represented by the CERNLIB approximation), 
   //the maximum is located at x=-0.22278298 with the location parameter=0.
   //This shift is corrected within this function, so that the actual
   //maximum is identical to the MP parameter.

      // Numeric constants
      Double_t invsq2pi = 0.3989422804014;   // (2 pi)^(-1/2)
      Double_t mpshift  = -0.22278298;       // Landau maximum location

      // Control constants
      Double_t np = 300.0;      // number of convolution steps
      Double_t sc =   5.0;      // convolution extends to +-sc Gaussian sigmas

      // Variables
      Double_t xx;
      Double_t mpc;
      Double_t fland;
      Double_t sum = 0.0;
      Double_t xlow,xupp;
      Double_t step;
      Double_t i;


      // MP shift correction
      mpc = par[1] - mpshift * par[0]; 

      // Range of convolution integral
      xlow = x[0] - sc * par[3];
      xupp = x[0] + sc * par[3];

      step = (xupp-xlow) / np;

      // Convolution integral of Landau and Gaussian by sum
      for(i=1.0; i<=np/2; i++) {
         xx = xlow + (i-.5) * step;
         fland = TMath::Landau(xx,mpc,par[0]) / par[0];
         sum += fland * TMath::Gaus(x[0],xx,par[3]);

         xx = xupp - (i-.5) * step;
         fland = TMath::Landau(xx,mpc,par[0]) / par[0];
         sum += fland * TMath::Gaus(x[0],xx,par[3]);
      }

      return (par[2] * step * sum * invsq2pi / par[3]);
}




MeasureWF *MultiWF::GetWF()
{
  // Function gets the wafeforms
  Float_t Delta;
  Int_t i=0,ix;
  MeasureWF *MWF=new MeasureWF(NumU);
  TH1F *his;
    for(i=0;i<NumU;i++)
        {
	his=Average(i*NumUAver+1,(i+1)*NumUAver);
	MWF->AddHisto(i,GetU(i),his);
	}  
    return MWF;
}


Bool_t MultiWF::Filter()
{
  // Function filters the histograms
  Int_t i,maxbin,tl,th,SP;
  Bool_t pass=true;
  Float_t val,max=-1e10;

   if(Fmode&1) //Omejevanje signala po trajanju
     { 
       pass=false;

   for(i=chis->FindBin(Fxlow);i<chis->FindBin(Fxhi);i++)
        {
	 
	  if(chis->GetBinContent(i) > Fylow && chis->GetBinContent(i) < Fyhi)
	    { pass=true; 
	      printf("Event: %d , Bin=%d  Value%f\n",cevent,i,chis->GetBinContent(i)); 
	      break;
	    }
     	}  
   
     }

   if(Fmode&2)   // Omejevanje signal po naboju
     if(TMath::Abs(chis->Integral()*chis->GetBinWidth(10))<FIntPass || TMath::Abs(chis->Integral()*chis->GetBinWidth(10))>FIntPassHi) pass=false;
  
   if(Fmode&4) //Omejevanje signala po peaking time
     {
       maxbin=TMath::Abs(chis->GetMaximum())>TMath::Abs(chis->GetMinimum())?chis->GetMaximumBin():chis->GetMinimumBin();
       if(chis->GetBinCenter(maxbin)<Fmaxlo || chis->GetBinCenter(maxbin)>Fmaxhi) pass=false;
     }
       
   if(Fmode&8) //selekcija signala po amplitudi v naprej dolocenem casovnem oknu
     {
       if(FIntPass!=SelPlot)
        {
	 SP=SelPlot;
         SelectPlot(FIntPass);
        }
         tl=chis->GetXaxis()->FindBin(Fxlow);
         th=chis->GetXaxis()->FindBin(Fxhi);
	 
	   for(Int_t j=tl;j<=th;j++) 
	        {
                val=chis->GetBinContent(j);
	        max=max>val?max:val;
		//		printf("%d %d %f %f\n",i,cevent-1,max,cmode);
		}
       	  if(max>Fyhi) pass=true; else pass=false;
	  
	 if(FIntPass!=SP) 
	 SelectPlot(SP);
     }
    if(Fmode&16) //Omejevanje signala po amplitudi in trajanju
     {
         tl=chis->GetXaxis()->FindBin(Fxlow);
         th=chis->GetXaxis()->FindBin(Fxhi);
	 Float_t valm=chis->GetBinContent(th);;
	   for(Int_t j=tl;j<=th;j++) 
	        {
                val=chis->GetBinContent(j);
	        max=max>val?max:val;
		//		printf("%d %d %f %f\n",i,cevent-1,max,cmode);
		}
       	  if(max>Fyhi && valm<Fylow) pass=true; else pass=false;
     }
return pass; 
}


MeasureWF *MultiWF::AverTime(Int_t Steps,Int_t Num)
{
 Float_t Delta;
  Int_t i=0,ix;
  MeasureWF *MWF=new MeasureWF(Steps);
  TH1F *his;
  
    for(i=0;i<Steps;i++)
        {
	his=Average(i*Events/Steps,i*Events/Steps+Num);
	MWF->AddHisto(i,i*Events/Steps,his);
	}  
    return MWF;
}

void MultiWF::DrawNextEvent()
{
GetNextEvent(); 
for(Int_t j=0;j<NumCh;j++)
  {
    hisa[j]->SetLineColor(j+1);
    if(j==0) hisa[j]->DrawCopy(); else hisa[j]->DrawCopy("SAME");
    //chis->DrawCopy(); 
  }
 printf("Event=%d :: Max signal=%f, Cmode=%f, Integral=%f\n",cevent,chis->GetMaximum(),cmode,chis->Integral());
}


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

void MultiWF::CorrectTime(Int_t wfnum,Float_t level)
{
  Int_t i,j;
  Float_t time;
  Int_t shift;
  for(i=0;i<Points;i++) 
    {
    if(Ebuf[wfnum][i]<level) break; //{ printf("%d %f\n", i, Ebuf[wfnum][i]); break;}
  //    else printf("%d %f\n", i, Ebuf[wfnum][i]);
    }
  time=i*deltat+t0;
  shift=(Int_t)(time/deltat);
  //  printf("i=%d time=%e shift=%d\n",i,time,shift);
  if(shift>0) 
    {
      for(j=0;j<NumU;j++) for(i=0;i<Points;i++) 
			    {
			      if(i<Points-shift)
			      Ebuf[j][i]=Ebuf[j][i+shift];
			      else
			      Ebuf[j][i]=0;
			    }
    }
  else
    {
      for(j=0;j<NumU;j++) for(i=Points-1;i>=0;i--)
			    {
 			      if(i>-shift)
			      Ebuf[j][i]=Ebuf[j][i+shift];
			      else
			      Ebuf[j][i]=0;
			    }

   }

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////// SECTION ON MULTIPLE WAVEFORMS ////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// void MultiWF::PHSpecterMulti(Int_t Ch,Float_t *Thresh,Float_t=10, Int_t=180,Float_t=0,Float_t=6,Float_t=-1e6,Float_t=-1e6,Int_t mode=0)
// {
//   // Pulse height specter of all recorded events 
//   //			Float_t weight; normalization
//   //			Int_t num     ; number of bins
//   //			Int_t first   ; histogram limits
//   //			Int_t last    ; 

// Int_t i,j;
// Int_t timelo;
// Int_t timehi;
// Float_t val,max=-1e6;
// Char_t xname[100];
// Bool_t ok;


// TH1F *spectrum=new TH1F("Spectrum","Spectrum",num,first,last);

// if(time_lo==-1e6) timelo=1; 
// else timelo=chis->GetXaxis()->FindBin(time_lo);
// if(time_lo==-1e6) timehi=chis->GetNbinsX(); else 
// timehi=chis->GetXaxis()->FindBin(time_hi);
// // TF1 *maxf=new TF1("maxf","pol2",time_lo,time_hi);
//  TF1 *maxf=new TF1("maxf","pol0",time_lo,time_hi);
// printf("Time window selected: %d %d (bins)\n",timelo,timehi);
// //		TCanvas *c1=new TCanvas("c1","c1",800,600);
// for(i=0;i<Events;i++)
//   {
//     GetNextEvent();
 
//    switch(cmcut)
//       {
//       case 0: ok=true; break;
//        case 1: ok=(cmode<cmcut_hi && cmode>cmcut_low); break;
//        case 2: ok=(cmode>cmcut_hi || cmode<cmcut_low); break;
//       }


//    if((ok && CCmode==1) || CCmode==0 )
//       {
// 	    switch(mode)
// 	      {
// 	      case 0:	
//         	for(j=timelo;j<=timehi;j++) 
// 	        {
//                 val=chis->GetBinContent(j);
// 	        max=max>val?max:val;
// 		//		printf("%d %d %f %f\n",i,cevent-1,max,cmode);
// 		}
// 	        break;
		
// 	      case 1:
		
// 		chis->Fit("maxf","RNQ");
// 		//			max=-TMath::Power(maxf->GetParameter(1),2)/(4*maxf->GetParameter(2))+maxf->GetParameter(0);
// 		max=maxf->GetParameter(0);
// 		//	
// 		//		printf("max=%f\n",max);
// 		//		c1->Update();
// 		//		while(!getchar());
// 	        break;
// 	      }
// 	    //	    chis->SetAxisRange(0,100);
	   
// 	    //	    if(chis->GetMaximumBin()==timelo)
// 	    // if(max>0.11) printf("%f %d\n",max,i);
// 	spectrum->Fill(max*weight);
//       }  
//     //    spectrum->Fill(chis->GetMaximum()*weight);
//     max=-1e6;
//   }
// sprintf(xname,"Signal [%4.1f mV]",1000./weight); 
//  spectrum->SetXTitle(xname);
//  spectrum->SetYTitle("Entries");
//  spectrum->SetLabelSize(0.045,"X");
//  spectrum->SetLabelSize(0.045,"Y"); 
//  rewind(in);
//  fseek(in,HeaderSize,SEEK_SET);
//  cevent=1;
// return spectrum;
// }




 MultiWF.cxx:1
 MultiWF.cxx:2
 MultiWF.cxx:3
 MultiWF.cxx:4
 MultiWF.cxx:5
 MultiWF.cxx:6
 MultiWF.cxx:7
 MultiWF.cxx:8
 MultiWF.cxx:9
 MultiWF.cxx:10
 MultiWF.cxx:11
 MultiWF.cxx:12
 MultiWF.cxx:13
 MultiWF.cxx:14
 MultiWF.cxx:15
 MultiWF.cxx:16
 MultiWF.cxx:17
 MultiWF.cxx:18
 MultiWF.cxx:19
 MultiWF.cxx:20
 MultiWF.cxx:21
 MultiWF.cxx:22
 MultiWF.cxx:23
 MultiWF.cxx:24
 MultiWF.cxx:25
 MultiWF.cxx:26
 MultiWF.cxx:27
 MultiWF.cxx:28
 MultiWF.cxx:29
 MultiWF.cxx:30
 MultiWF.cxx:31
 MultiWF.cxx:32
 MultiWF.cxx:33
 MultiWF.cxx:34
 MultiWF.cxx:35
 MultiWF.cxx:36
 MultiWF.cxx:37
 MultiWF.cxx:38
 MultiWF.cxx:39
 MultiWF.cxx:40
 MultiWF.cxx:41
 MultiWF.cxx:42
 MultiWF.cxx:43
 MultiWF.cxx:44
 MultiWF.cxx:45
 MultiWF.cxx:46
 MultiWF.cxx:47
 MultiWF.cxx:48
 MultiWF.cxx:49
 MultiWF.cxx:50
 MultiWF.cxx:51
 MultiWF.cxx:52
 MultiWF.cxx:53
 MultiWF.cxx:54
 MultiWF.cxx:55
 MultiWF.cxx:56
 MultiWF.cxx:57
 MultiWF.cxx:58
 MultiWF.cxx:59
 MultiWF.cxx:60
 MultiWF.cxx:61
 MultiWF.cxx:62
 MultiWF.cxx:63
 MultiWF.cxx:64
 MultiWF.cxx:65
 MultiWF.cxx:66
 MultiWF.cxx:67
 MultiWF.cxx:68
 MultiWF.cxx:69
 MultiWF.cxx:70
 MultiWF.cxx:71
 MultiWF.cxx:72
 MultiWF.cxx:73
 MultiWF.cxx:74
 MultiWF.cxx:75
 MultiWF.cxx:76
 MultiWF.cxx:77
 MultiWF.cxx:78
 MultiWF.cxx:79
 MultiWF.cxx:80
 MultiWF.cxx:81
 MultiWF.cxx:82
 MultiWF.cxx:83
 MultiWF.cxx:84
 MultiWF.cxx:85
 MultiWF.cxx:86
 MultiWF.cxx:87
 MultiWF.cxx:88
 MultiWF.cxx:89
 MultiWF.cxx:90
 MultiWF.cxx:91
 MultiWF.cxx:92
 MultiWF.cxx:93
 MultiWF.cxx:94
 MultiWF.cxx:95
 MultiWF.cxx:96
 MultiWF.cxx:97
 MultiWF.cxx:98
 MultiWF.cxx:99
 MultiWF.cxx:100
 MultiWF.cxx:101
 MultiWF.cxx:102
 MultiWF.cxx:103
 MultiWF.cxx:104
 MultiWF.cxx:105
 MultiWF.cxx:106
 MultiWF.cxx:107
 MultiWF.cxx:108
 MultiWF.cxx:109
 MultiWF.cxx:110
 MultiWF.cxx:111
 MultiWF.cxx:112
 MultiWF.cxx:113
 MultiWF.cxx:114
 MultiWF.cxx:115
 MultiWF.cxx:116
 MultiWF.cxx:117
 MultiWF.cxx:118
 MultiWF.cxx:119
 MultiWF.cxx:120
 MultiWF.cxx:121
 MultiWF.cxx:122
 MultiWF.cxx:123
 MultiWF.cxx:124
 MultiWF.cxx:125
 MultiWF.cxx:126
 MultiWF.cxx:127
 MultiWF.cxx:128
 MultiWF.cxx:129
 MultiWF.cxx:130
 MultiWF.cxx:131
 MultiWF.cxx:132
 MultiWF.cxx:133
 MultiWF.cxx:134
 MultiWF.cxx:135
 MultiWF.cxx:136
 MultiWF.cxx:137
 MultiWF.cxx:138
 MultiWF.cxx:139
 MultiWF.cxx:140
 MultiWF.cxx:141
 MultiWF.cxx:142
 MultiWF.cxx:143
 MultiWF.cxx:144
 MultiWF.cxx:145
 MultiWF.cxx:146
 MultiWF.cxx:147
 MultiWF.cxx:148
 MultiWF.cxx:149
 MultiWF.cxx:150
 MultiWF.cxx:151
 MultiWF.cxx:152
 MultiWF.cxx:153
 MultiWF.cxx:154
 MultiWF.cxx:155
 MultiWF.cxx:156
 MultiWF.cxx:157
 MultiWF.cxx:158
 MultiWF.cxx:159
 MultiWF.cxx:160
 MultiWF.cxx:161
 MultiWF.cxx:162
 MultiWF.cxx:163
 MultiWF.cxx:164
 MultiWF.cxx:165
 MultiWF.cxx:166
 MultiWF.cxx:167
 MultiWF.cxx:168
 MultiWF.cxx:169
 MultiWF.cxx:170
 MultiWF.cxx:171
 MultiWF.cxx:172
 MultiWF.cxx:173
 MultiWF.cxx:174
 MultiWF.cxx:175
 MultiWF.cxx:176
 MultiWF.cxx:177
 MultiWF.cxx:178
 MultiWF.cxx:179
 MultiWF.cxx:180
 MultiWF.cxx:181
 MultiWF.cxx:182
 MultiWF.cxx:183
 MultiWF.cxx:184
 MultiWF.cxx:185
 MultiWF.cxx:186
 MultiWF.cxx:187
 MultiWF.cxx:188
 MultiWF.cxx:189
 MultiWF.cxx:190
 MultiWF.cxx:191
 MultiWF.cxx:192
 MultiWF.cxx:193
 MultiWF.cxx:194
 MultiWF.cxx:195
 MultiWF.cxx:196
 MultiWF.cxx:197
 MultiWF.cxx:198
 MultiWF.cxx:199
 MultiWF.cxx:200
 MultiWF.cxx:201
 MultiWF.cxx:202
 MultiWF.cxx:203
 MultiWF.cxx:204
 MultiWF.cxx:205
 MultiWF.cxx:206
 MultiWF.cxx:207
 MultiWF.cxx:208
 MultiWF.cxx:209
 MultiWF.cxx:210
 MultiWF.cxx:211
 MultiWF.cxx:212
 MultiWF.cxx:213
 MultiWF.cxx:214
 MultiWF.cxx:215
 MultiWF.cxx:216
 MultiWF.cxx:217
 MultiWF.cxx:218
 MultiWF.cxx:219
 MultiWF.cxx:220
 MultiWF.cxx:221
 MultiWF.cxx:222
 MultiWF.cxx:223
 MultiWF.cxx:224
 MultiWF.cxx:225
 MultiWF.cxx:226
 MultiWF.cxx:227
 MultiWF.cxx:228
 MultiWF.cxx:229
 MultiWF.cxx:230
 MultiWF.cxx:231
 MultiWF.cxx:232
 MultiWF.cxx:233
 MultiWF.cxx:234
 MultiWF.cxx:235
 MultiWF.cxx:236
 MultiWF.cxx:237
 MultiWF.cxx:238
 MultiWF.cxx:239
 MultiWF.cxx:240
 MultiWF.cxx:241
 MultiWF.cxx:242
 MultiWF.cxx:243
 MultiWF.cxx:244
 MultiWF.cxx:245
 MultiWF.cxx:246
 MultiWF.cxx:247
 MultiWF.cxx:248
 MultiWF.cxx:249
 MultiWF.cxx:250
 MultiWF.cxx:251
 MultiWF.cxx:252
 MultiWF.cxx:253
 MultiWF.cxx:254
 MultiWF.cxx:255
 MultiWF.cxx:256
 MultiWF.cxx:257
 MultiWF.cxx:258
 MultiWF.cxx:259
 MultiWF.cxx:260
 MultiWF.cxx:261
 MultiWF.cxx:262
 MultiWF.cxx:263
 MultiWF.cxx:264
 MultiWF.cxx:265
 MultiWF.cxx:266
 MultiWF.cxx:267
 MultiWF.cxx:268
 MultiWF.cxx:269
 MultiWF.cxx:270
 MultiWF.cxx:271
 MultiWF.cxx:272
 MultiWF.cxx:273
 MultiWF.cxx:274
 MultiWF.cxx:275
 MultiWF.cxx:276
 MultiWF.cxx:277
 MultiWF.cxx:278
 MultiWF.cxx:279
 MultiWF.cxx:280
 MultiWF.cxx:281
 MultiWF.cxx:282
 MultiWF.cxx:283
 MultiWF.cxx:284
 MultiWF.cxx:285
 MultiWF.cxx:286
 MultiWF.cxx:287
 MultiWF.cxx:288
 MultiWF.cxx:289
 MultiWF.cxx:290
 MultiWF.cxx:291
 MultiWF.cxx:292
 MultiWF.cxx:293
 MultiWF.cxx:294
 MultiWF.cxx:295
 MultiWF.cxx:296
 MultiWF.cxx:297
 MultiWF.cxx:298
 MultiWF.cxx:299
 MultiWF.cxx:300
 MultiWF.cxx:301
 MultiWF.cxx:302
 MultiWF.cxx:303
 MultiWF.cxx:304
 MultiWF.cxx:305
 MultiWF.cxx:306
 MultiWF.cxx:307
 MultiWF.cxx:308
 MultiWF.cxx:309
 MultiWF.cxx:310
 MultiWF.cxx:311
 MultiWF.cxx:312
 MultiWF.cxx:313
 MultiWF.cxx:314
 MultiWF.cxx:315
 MultiWF.cxx:316
 MultiWF.cxx:317
 MultiWF.cxx:318
 MultiWF.cxx:319
 MultiWF.cxx:320
 MultiWF.cxx:321
 MultiWF.cxx:322
 MultiWF.cxx:323
 MultiWF.cxx:324
 MultiWF.cxx:325
 MultiWF.cxx:326
 MultiWF.cxx:327
 MultiWF.cxx:328
 MultiWF.cxx:329
 MultiWF.cxx:330
 MultiWF.cxx:331
 MultiWF.cxx:332
 MultiWF.cxx:333
 MultiWF.cxx:334
 MultiWF.cxx:335
 MultiWF.cxx:336
 MultiWF.cxx:337
 MultiWF.cxx:338
 MultiWF.cxx:339
 MultiWF.cxx:340
 MultiWF.cxx:341
 MultiWF.cxx:342
 MultiWF.cxx:343
 MultiWF.cxx:344
 MultiWF.cxx:345
 MultiWF.cxx:346
 MultiWF.cxx:347
 MultiWF.cxx:348
 MultiWF.cxx:349
 MultiWF.cxx:350
 MultiWF.cxx:351
 MultiWF.cxx:352
 MultiWF.cxx:353
 MultiWF.cxx:354
 MultiWF.cxx:355
 MultiWF.cxx:356
 MultiWF.cxx:357
 MultiWF.cxx:358
 MultiWF.cxx:359
 MultiWF.cxx:360
 MultiWF.cxx:361
 MultiWF.cxx:362
 MultiWF.cxx:363
 MultiWF.cxx:364
 MultiWF.cxx:365
 MultiWF.cxx:366
 MultiWF.cxx:367
 MultiWF.cxx:368
 MultiWF.cxx:369
 MultiWF.cxx:370
 MultiWF.cxx:371
 MultiWF.cxx:372
 MultiWF.cxx:373
 MultiWF.cxx:374
 MultiWF.cxx:375
 MultiWF.cxx:376
 MultiWF.cxx:377
 MultiWF.cxx:378
 MultiWF.cxx:379
 MultiWF.cxx:380
 MultiWF.cxx:381
 MultiWF.cxx:382
 MultiWF.cxx:383
 MultiWF.cxx:384
 MultiWF.cxx:385
 MultiWF.cxx:386
 MultiWF.cxx:387
 MultiWF.cxx:388
 MultiWF.cxx:389
 MultiWF.cxx:390
 MultiWF.cxx:391
 MultiWF.cxx:392
 MultiWF.cxx:393
 MultiWF.cxx:394
 MultiWF.cxx:395
 MultiWF.cxx:396
 MultiWF.cxx:397
 MultiWF.cxx:398
 MultiWF.cxx:399
 MultiWF.cxx:400
 MultiWF.cxx:401
 MultiWF.cxx:402
 MultiWF.cxx:403
 MultiWF.cxx:404
 MultiWF.cxx:405
 MultiWF.cxx:406
 MultiWF.cxx:407
 MultiWF.cxx:408
 MultiWF.cxx:409
 MultiWF.cxx:410
 MultiWF.cxx:411
 MultiWF.cxx:412
 MultiWF.cxx:413
 MultiWF.cxx:414
 MultiWF.cxx:415
 MultiWF.cxx:416
 MultiWF.cxx:417
 MultiWF.cxx:418
 MultiWF.cxx:419
 MultiWF.cxx:420
 MultiWF.cxx:421
 MultiWF.cxx:422
 MultiWF.cxx:423
 MultiWF.cxx:424
 MultiWF.cxx:425
 MultiWF.cxx:426
 MultiWF.cxx:427
 MultiWF.cxx:428
 MultiWF.cxx:429
 MultiWF.cxx:430
 MultiWF.cxx:431
 MultiWF.cxx:432
 MultiWF.cxx:433
 MultiWF.cxx:434
 MultiWF.cxx:435
 MultiWF.cxx:436
 MultiWF.cxx:437
 MultiWF.cxx:438
 MultiWF.cxx:439
 MultiWF.cxx:440
 MultiWF.cxx:441
 MultiWF.cxx:442
 MultiWF.cxx:443
 MultiWF.cxx:444
 MultiWF.cxx:445
 MultiWF.cxx:446
 MultiWF.cxx:447
 MultiWF.cxx:448
 MultiWF.cxx:449
 MultiWF.cxx:450
 MultiWF.cxx:451
 MultiWF.cxx:452
 MultiWF.cxx:453
 MultiWF.cxx:454
 MultiWF.cxx:455
 MultiWF.cxx:456
 MultiWF.cxx:457
 MultiWF.cxx:458
 MultiWF.cxx:459
 MultiWF.cxx:460
 MultiWF.cxx:461
 MultiWF.cxx:462
 MultiWF.cxx:463
 MultiWF.cxx:464
 MultiWF.cxx:465
 MultiWF.cxx:466
 MultiWF.cxx:467
 MultiWF.cxx:468
 MultiWF.cxx:469
 MultiWF.cxx:470
 MultiWF.cxx:471
 MultiWF.cxx:472
 MultiWF.cxx:473
 MultiWF.cxx:474
 MultiWF.cxx:475
 MultiWF.cxx:476
 MultiWF.cxx:477
 MultiWF.cxx:478
 MultiWF.cxx:479
 MultiWF.cxx:480
 MultiWF.cxx:481
 MultiWF.cxx:482
 MultiWF.cxx:483
 MultiWF.cxx:484
 MultiWF.cxx:485
 MultiWF.cxx:486
 MultiWF.cxx:487
 MultiWF.cxx:488
 MultiWF.cxx:489
 MultiWF.cxx:490
 MultiWF.cxx:491
 MultiWF.cxx:492
 MultiWF.cxx:493
 MultiWF.cxx:494
 MultiWF.cxx:495
 MultiWF.cxx:496
 MultiWF.cxx:497
 MultiWF.cxx:498
 MultiWF.cxx:499
 MultiWF.cxx:500
 MultiWF.cxx:501
 MultiWF.cxx:502
 MultiWF.cxx:503
 MultiWF.cxx:504
 MultiWF.cxx:505
 MultiWF.cxx:506
 MultiWF.cxx:507
 MultiWF.cxx:508
 MultiWF.cxx:509
 MultiWF.cxx:510
 MultiWF.cxx:511
 MultiWF.cxx:512
 MultiWF.cxx:513
 MultiWF.cxx:514
 MultiWF.cxx:515
 MultiWF.cxx:516
 MultiWF.cxx:517
 MultiWF.cxx:518
 MultiWF.cxx:519
 MultiWF.cxx:520
 MultiWF.cxx:521
 MultiWF.cxx:522
 MultiWF.cxx:523
 MultiWF.cxx:524
 MultiWF.cxx:525
 MultiWF.cxx:526
 MultiWF.cxx:527
 MultiWF.cxx:528
 MultiWF.cxx:529
 MultiWF.cxx:530
 MultiWF.cxx:531
 MultiWF.cxx:532
 MultiWF.cxx:533
 MultiWF.cxx:534
 MultiWF.cxx:535
 MultiWF.cxx:536
 MultiWF.cxx:537
 MultiWF.cxx:538
 MultiWF.cxx:539
 MultiWF.cxx:540
 MultiWF.cxx:541
 MultiWF.cxx:542
 MultiWF.cxx:543
 MultiWF.cxx:544
 MultiWF.cxx:545
 MultiWF.cxx:546
 MultiWF.cxx:547
 MultiWF.cxx:548
 MultiWF.cxx:549
 MultiWF.cxx:550
 MultiWF.cxx:551
 MultiWF.cxx:552
 MultiWF.cxx:553
 MultiWF.cxx:554
 MultiWF.cxx:555
 MultiWF.cxx:556
 MultiWF.cxx:557
 MultiWF.cxx:558
 MultiWF.cxx:559
 MultiWF.cxx:560
 MultiWF.cxx:561
 MultiWF.cxx:562
 MultiWF.cxx:563
 MultiWF.cxx:564
 MultiWF.cxx:565
 MultiWF.cxx:566
 MultiWF.cxx:567
 MultiWF.cxx:568
 MultiWF.cxx:569
 MultiWF.cxx:570
 MultiWF.cxx:571
 MultiWF.cxx:572
 MultiWF.cxx:573
 MultiWF.cxx:574
 MultiWF.cxx:575
 MultiWF.cxx:576
 MultiWF.cxx:577
 MultiWF.cxx:578
 MultiWF.cxx:579
 MultiWF.cxx:580
 MultiWF.cxx:581
 MultiWF.cxx:582
 MultiWF.cxx:583
 MultiWF.cxx:584
 MultiWF.cxx:585
 MultiWF.cxx:586
 MultiWF.cxx:587
 MultiWF.cxx:588
 MultiWF.cxx:589
 MultiWF.cxx:590
 MultiWF.cxx:591
 MultiWF.cxx:592
 MultiWF.cxx:593
 MultiWF.cxx:594
 MultiWF.cxx:595
 MultiWF.cxx:596
 MultiWF.cxx:597
 MultiWF.cxx:598
 MultiWF.cxx:599
 MultiWF.cxx:600
 MultiWF.cxx:601
 MultiWF.cxx:602
 MultiWF.cxx:603
 MultiWF.cxx:604
 MultiWF.cxx:605
 MultiWF.cxx:606
 MultiWF.cxx:607
 MultiWF.cxx:608
 MultiWF.cxx:609
 MultiWF.cxx:610
 MultiWF.cxx:611
 MultiWF.cxx:612
 MultiWF.cxx:613
 MultiWF.cxx:614
 MultiWF.cxx:615
 MultiWF.cxx:616
 MultiWF.cxx:617
 MultiWF.cxx:618
 MultiWF.cxx:619
 MultiWF.cxx:620
 MultiWF.cxx:621
 MultiWF.cxx:622
 MultiWF.cxx:623
 MultiWF.cxx:624
 MultiWF.cxx:625
 MultiWF.cxx:626
 MultiWF.cxx:627
 MultiWF.cxx:628
 MultiWF.cxx:629
 MultiWF.cxx:630
 MultiWF.cxx:631
 MultiWF.cxx:632
 MultiWF.cxx:633
 MultiWF.cxx:634
 MultiWF.cxx:635
 MultiWF.cxx:636
 MultiWF.cxx:637
 MultiWF.cxx:638
 MultiWF.cxx:639
 MultiWF.cxx:640
 MultiWF.cxx:641
 MultiWF.cxx:642
 MultiWF.cxx:643
 MultiWF.cxx:644
 MultiWF.cxx:645
 MultiWF.cxx:646
 MultiWF.cxx:647
 MultiWF.cxx:648
 MultiWF.cxx:649
 MultiWF.cxx:650
 MultiWF.cxx:651
 MultiWF.cxx:652
 MultiWF.cxx:653
 MultiWF.cxx:654
 MultiWF.cxx:655
 MultiWF.cxx:656
 MultiWF.cxx:657
 MultiWF.cxx:658
 MultiWF.cxx:659
 MultiWF.cxx:660
 MultiWF.cxx:661
 MultiWF.cxx:662
 MultiWF.cxx:663
 MultiWF.cxx:664
 MultiWF.cxx:665
 MultiWF.cxx:666
 MultiWF.cxx:667
 MultiWF.cxx:668
 MultiWF.cxx:669
 MultiWF.cxx:670
 MultiWF.cxx:671
 MultiWF.cxx:672
 MultiWF.cxx:673
 MultiWF.cxx:674
 MultiWF.cxx:675
 MultiWF.cxx:676
 MultiWF.cxx:677
 MultiWF.cxx:678
 MultiWF.cxx:679
 MultiWF.cxx:680
 MultiWF.cxx:681
 MultiWF.cxx:682
 MultiWF.cxx:683
 MultiWF.cxx:684
 MultiWF.cxx:685
 MultiWF.cxx:686
 MultiWF.cxx:687
 MultiWF.cxx:688
 MultiWF.cxx:689
 MultiWF.cxx:690
 MultiWF.cxx:691
 MultiWF.cxx:692
 MultiWF.cxx:693
 MultiWF.cxx:694
 MultiWF.cxx:695
 MultiWF.cxx:696
 MultiWF.cxx:697
 MultiWF.cxx:698
 MultiWF.cxx:699
 MultiWF.cxx:700
 MultiWF.cxx:701
 MultiWF.cxx:702
 MultiWF.cxx:703
 MultiWF.cxx:704
 MultiWF.cxx:705
 MultiWF.cxx:706
 MultiWF.cxx:707
 MultiWF.cxx:708
 MultiWF.cxx:709
 MultiWF.cxx:710
 MultiWF.cxx:711
 MultiWF.cxx:712
 MultiWF.cxx:713
 MultiWF.cxx:714
 MultiWF.cxx:715
 MultiWF.cxx:716
 MultiWF.cxx:717
 MultiWF.cxx:718
 MultiWF.cxx:719
 MultiWF.cxx:720
 MultiWF.cxx:721
 MultiWF.cxx:722
 MultiWF.cxx:723
 MultiWF.cxx:724
 MultiWF.cxx:725
 MultiWF.cxx:726
 MultiWF.cxx:727
 MultiWF.cxx:728
 MultiWF.cxx:729
 MultiWF.cxx:730
 MultiWF.cxx:731
 MultiWF.cxx:732
 MultiWF.cxx:733
 MultiWF.cxx:734
 MultiWF.cxx:735
 MultiWF.cxx:736
 MultiWF.cxx:737
 MultiWF.cxx:738
 MultiWF.cxx:739
 MultiWF.cxx:740
 MultiWF.cxx:741
 MultiWF.cxx:742
 MultiWF.cxx:743
 MultiWF.cxx:744
 MultiWF.cxx:745
 MultiWF.cxx:746
 MultiWF.cxx:747
 MultiWF.cxx:748
 MultiWF.cxx:749
 MultiWF.cxx:750
 MultiWF.cxx:751
 MultiWF.cxx:752
 MultiWF.cxx:753
 MultiWF.cxx:754
 MultiWF.cxx:755
 MultiWF.cxx:756
 MultiWF.cxx:757
 MultiWF.cxx:758
 MultiWF.cxx:759
 MultiWF.cxx:760
 MultiWF.cxx:761
 MultiWF.cxx:762
 MultiWF.cxx:763
 MultiWF.cxx:764
 MultiWF.cxx:765
 MultiWF.cxx:766
 MultiWF.cxx:767
 MultiWF.cxx:768
 MultiWF.cxx:769
 MultiWF.cxx:770
 MultiWF.cxx:771
 MultiWF.cxx:772
 MultiWF.cxx:773
 MultiWF.cxx:774
 MultiWF.cxx:775
 MultiWF.cxx:776
 MultiWF.cxx:777
 MultiWF.cxx:778
 MultiWF.cxx:779
 MultiWF.cxx:780
 MultiWF.cxx:781
 MultiWF.cxx:782
 MultiWF.cxx:783
 MultiWF.cxx:784
 MultiWF.cxx:785
 MultiWF.cxx:786
 MultiWF.cxx:787
 MultiWF.cxx:788
 MultiWF.cxx:789
 MultiWF.cxx:790
 MultiWF.cxx:791
 MultiWF.cxx:792
 MultiWF.cxx:793
 MultiWF.cxx:794
 MultiWF.cxx:795
 MultiWF.cxx:796
 MultiWF.cxx:797
 MultiWF.cxx:798
 MultiWF.cxx:799
 MultiWF.cxx:800
 MultiWF.cxx:801
 MultiWF.cxx:802
 MultiWF.cxx:803
 MultiWF.cxx:804
 MultiWF.cxx:805
 MultiWF.cxx:806
 MultiWF.cxx:807
 MultiWF.cxx:808
 MultiWF.cxx:809
 MultiWF.cxx:810
 MultiWF.cxx:811
 MultiWF.cxx:812
 MultiWF.cxx:813
 MultiWF.cxx:814
 MultiWF.cxx:815
 MultiWF.cxx:816
 MultiWF.cxx:817
 MultiWF.cxx:818
 MultiWF.cxx:819
 MultiWF.cxx:820
 MultiWF.cxx:821
 MultiWF.cxx:822
 MultiWF.cxx:823
 MultiWF.cxx:824
 MultiWF.cxx:825
 MultiWF.cxx:826
 MultiWF.cxx:827
 MultiWF.cxx:828
 MultiWF.cxx:829
 MultiWF.cxx:830
 MultiWF.cxx:831
 MultiWF.cxx:832
 MultiWF.cxx:833
 MultiWF.cxx:834
 MultiWF.cxx:835
 MultiWF.cxx:836
 MultiWF.cxx:837
 MultiWF.cxx:838
 MultiWF.cxx:839
 MultiWF.cxx:840
 MultiWF.cxx:841
 MultiWF.cxx:842
 MultiWF.cxx:843
 MultiWF.cxx:844
 MultiWF.cxx:845
 MultiWF.cxx:846
 MultiWF.cxx:847
 MultiWF.cxx:848
 MultiWF.cxx:849
 MultiWF.cxx:850
 MultiWF.cxx:851
 MultiWF.cxx:852
 MultiWF.cxx:853
 MultiWF.cxx:854
 MultiWF.cxx:855
 MultiWF.cxx:856
 MultiWF.cxx:857
 MultiWF.cxx:858
 MultiWF.cxx:859
 MultiWF.cxx:860
 MultiWF.cxx:861
 MultiWF.cxx:862
 MultiWF.cxx:863
 MultiWF.cxx:864
 MultiWF.cxx:865
 MultiWF.cxx:866
 MultiWF.cxx:867
 MultiWF.cxx:868
 MultiWF.cxx:869
 MultiWF.cxx:870
 MultiWF.cxx:871
 MultiWF.cxx:872
 MultiWF.cxx:873
 MultiWF.cxx:874
 MultiWF.cxx:875
 MultiWF.cxx:876
 MultiWF.cxx:877
 MultiWF.cxx:878
 MultiWF.cxx:879
 MultiWF.cxx:880
 MultiWF.cxx:881
 MultiWF.cxx:882
 MultiWF.cxx:883
 MultiWF.cxx:884
 MultiWF.cxx:885
 MultiWF.cxx:886
 MultiWF.cxx:887
 MultiWF.cxx:888
 MultiWF.cxx:889
 MultiWF.cxx:890
 MultiWF.cxx:891
 MultiWF.cxx:892
 MultiWF.cxx:893
 MultiWF.cxx:894
 MultiWF.cxx:895
 MultiWF.cxx:896
 MultiWF.cxx:897
 MultiWF.cxx:898
 MultiWF.cxx:899
 MultiWF.cxx:900
 MultiWF.cxx:901
 MultiWF.cxx:902
 MultiWF.cxx:903
 MultiWF.cxx:904
 MultiWF.cxx:905
 MultiWF.cxx:906
 MultiWF.cxx:907
 MultiWF.cxx:908
 MultiWF.cxx:909
 MultiWF.cxx:910
 MultiWF.cxx:911
 MultiWF.cxx:912
 MultiWF.cxx:913
 MultiWF.cxx:914
 MultiWF.cxx:915
 MultiWF.cxx:916
 MultiWF.cxx:917
 MultiWF.cxx:918
 MultiWF.cxx:919
 MultiWF.cxx:920
 MultiWF.cxx:921
 MultiWF.cxx:922
 MultiWF.cxx:923
 MultiWF.cxx:924
 MultiWF.cxx:925
 MultiWF.cxx:926
 MultiWF.cxx:927
 MultiWF.cxx:928
 MultiWF.cxx:929
 MultiWF.cxx:930
 MultiWF.cxx:931
 MultiWF.cxx:932
 MultiWF.cxx:933
 MultiWF.cxx:934
 MultiWF.cxx:935
 MultiWF.cxx:936
 MultiWF.cxx:937
 MultiWF.cxx:938
 MultiWF.cxx:939
 MultiWF.cxx:940
 MultiWF.cxx:941
 MultiWF.cxx:942
 MultiWF.cxx:943
 MultiWF.cxx:944
 MultiWF.cxx:945
 MultiWF.cxx:946
 MultiWF.cxx:947
 MultiWF.cxx:948
 MultiWF.cxx:949
 MultiWF.cxx:950
 MultiWF.cxx:951
 MultiWF.cxx:952
 MultiWF.cxx:953
 MultiWF.cxx:954
 MultiWF.cxx:955
 MultiWF.cxx:956
 MultiWF.cxx:957
 MultiWF.cxx:958
 MultiWF.cxx:959
 MultiWF.cxx:960
 MultiWF.cxx:961
 MultiWF.cxx:962
 MultiWF.cxx:963
 MultiWF.cxx:964
 MultiWF.cxx:965
 MultiWF.cxx:966
 MultiWF.cxx:967
 MultiWF.cxx:968
 MultiWF.cxx:969
 MultiWF.cxx:970
 MultiWF.cxx:971
 MultiWF.cxx:972
 MultiWF.cxx:973
 MultiWF.cxx:974
 MultiWF.cxx:975
 MultiWF.cxx:976
 MultiWF.cxx:977
 MultiWF.cxx:978
 MultiWF.cxx:979
 MultiWF.cxx:980
 MultiWF.cxx:981
 MultiWF.cxx:982
 MultiWF.cxx:983
 MultiWF.cxx:984
 MultiWF.cxx:985
 MultiWF.cxx:986
 MultiWF.cxx:987
 MultiWF.cxx:988
 MultiWF.cxx:989
 MultiWF.cxx:990
 MultiWF.cxx:991
 MultiWF.cxx:992
 MultiWF.cxx:993
 MultiWF.cxx:994
 MultiWF.cxx:995
 MultiWF.cxx:996
 MultiWF.cxx:997
 MultiWF.cxx:998
 MultiWF.cxx:999
 MultiWF.cxx:1000
 MultiWF.cxx:1001
 MultiWF.cxx:1002
 MultiWF.cxx:1003
 MultiWF.cxx:1004
 MultiWF.cxx:1005
 MultiWF.cxx:1006
 MultiWF.cxx:1007
 MultiWF.cxx:1008
 MultiWF.cxx:1009
 MultiWF.cxx:1010
 MultiWF.cxx:1011
 MultiWF.cxx:1012
 MultiWF.cxx:1013
 MultiWF.cxx:1014
 MultiWF.cxx:1015
 MultiWF.cxx:1016
 MultiWF.cxx:1017
 MultiWF.cxx:1018
 MultiWF.cxx:1019
 MultiWF.cxx:1020
 MultiWF.cxx:1021
 MultiWF.cxx:1022
 MultiWF.cxx:1023
 MultiWF.cxx:1024
 MultiWF.cxx:1025
 MultiWF.cxx:1026
 MultiWF.cxx:1027
 MultiWF.cxx:1028
 MultiWF.cxx:1029
 MultiWF.cxx:1030
 MultiWF.cxx:1031
 MultiWF.cxx:1032
 MultiWF.cxx:1033
 MultiWF.cxx:1034
 MultiWF.cxx:1035
 MultiWF.cxx:1036
 MultiWF.cxx:1037
 MultiWF.cxx:1038
 MultiWF.cxx:1039
 MultiWF.cxx:1040
 MultiWF.cxx:1041
 MultiWF.cxx:1042
 MultiWF.cxx:1043
 MultiWF.cxx:1044
 MultiWF.cxx:1045
 MultiWF.cxx:1046
 MultiWF.cxx:1047
 MultiWF.cxx:1048
 MultiWF.cxx:1049
 MultiWF.cxx:1050
 MultiWF.cxx:1051
 MultiWF.cxx:1052
 MultiWF.cxx:1053
 MultiWF.cxx:1054
 MultiWF.cxx:1055
 MultiWF.cxx:1056
 MultiWF.cxx:1057
 MultiWF.cxx:1058
 MultiWF.cxx:1059
 MultiWF.cxx:1060
 MultiWF.cxx:1061
 MultiWF.cxx:1062
 MultiWF.cxx:1063
 MultiWF.cxx:1064
 MultiWF.cxx:1065
 MultiWF.cxx:1066
 MultiWF.cxx:1067
 MultiWF.cxx:1068
 MultiWF.cxx:1069
 MultiWF.cxx:1070
 MultiWF.cxx:1071
 MultiWF.cxx:1072
 MultiWF.cxx:1073
 MultiWF.cxx:1074
 MultiWF.cxx:1075
 MultiWF.cxx:1076
 MultiWF.cxx:1077
 MultiWF.cxx:1078
 MultiWF.cxx:1079
 MultiWF.cxx:1080
 MultiWF.cxx:1081
 MultiWF.cxx:1082
 MultiWF.cxx:1083
 MultiWF.cxx:1084
 MultiWF.cxx:1085
 MultiWF.cxx:1086
 MultiWF.cxx:1087
 MultiWF.cxx:1088
 MultiWF.cxx:1089
 MultiWF.cxx:1090
 MultiWF.cxx:1091
 MultiWF.cxx:1092
 MultiWF.cxx:1093
 MultiWF.cxx:1094
 MultiWF.cxx:1095
 MultiWF.cxx:1096
 MultiWF.cxx:1097
 MultiWF.cxx:1098
 MultiWF.cxx:1099
 MultiWF.cxx:1100
 MultiWF.cxx:1101
 MultiWF.cxx:1102
 MultiWF.cxx:1103
 MultiWF.cxx:1104
 MultiWF.cxx:1105
 MultiWF.cxx:1106
 MultiWF.cxx:1107
 MultiWF.cxx:1108
 MultiWF.cxx:1109
 MultiWF.cxx:1110
 MultiWF.cxx:1111
 MultiWF.cxx:1112
 MultiWF.cxx:1113
 MultiWF.cxx:1114
 MultiWF.cxx:1115
 MultiWF.cxx:1116
 MultiWF.cxx:1117
 MultiWF.cxx:1118
 MultiWF.cxx:1119
 MultiWF.cxx:1120
 MultiWF.cxx:1121
 MultiWF.cxx:1122
 MultiWF.cxx:1123
 MultiWF.cxx:1124
 MultiWF.cxx:1125
 MultiWF.cxx:1126
 MultiWF.cxx:1127
 MultiWF.cxx:1128
 MultiWF.cxx:1129
 MultiWF.cxx:1130
 MultiWF.cxx:1131
 MultiWF.cxx:1132
 MultiWF.cxx:1133
 MultiWF.cxx:1134
 MultiWF.cxx:1135
 MultiWF.cxx:1136
 MultiWF.cxx:1137
 MultiWF.cxx:1138
 MultiWF.cxx:1139
 MultiWF.cxx:1140
 MultiWF.cxx:1141
 MultiWF.cxx:1142
 MultiWF.cxx:1143
 MultiWF.cxx:1144
 MultiWF.cxx:1145
 MultiWF.cxx:1146
 MultiWF.cxx:1147
 MultiWF.cxx:1148
 MultiWF.cxx:1149
 MultiWF.cxx:1150
 MultiWF.cxx:1151
 MultiWF.cxx:1152
 MultiWF.cxx:1153
 MultiWF.cxx:1154
 MultiWF.cxx:1155
 MultiWF.cxx:1156
 MultiWF.cxx:1157
 MultiWF.cxx:1158
 MultiWF.cxx:1159
 MultiWF.cxx:1160
 MultiWF.cxx:1161
 MultiWF.cxx:1162
 MultiWF.cxx:1163
 MultiWF.cxx:1164
 MultiWF.cxx:1165
 MultiWF.cxx:1166
 MultiWF.cxx:1167
 MultiWF.cxx:1168
 MultiWF.cxx:1169
 MultiWF.cxx:1170
 MultiWF.cxx:1171
 MultiWF.cxx:1172
 MultiWF.cxx:1173
 MultiWF.cxx:1174
 MultiWF.cxx:1175
 MultiWF.cxx:1176
 MultiWF.cxx:1177
 MultiWF.cxx:1178
 MultiWF.cxx:1179
 MultiWF.cxx:1180
 MultiWF.cxx:1181
 MultiWF.cxx:1182
 MultiWF.cxx:1183
 MultiWF.cxx:1184
 MultiWF.cxx:1185
 MultiWF.cxx:1186