Index: /fact/tools/rootmacros/fana.C
===================================================================
--- /fact/tools/rootmacros/fana.C	(revision 12167)
+++ /fact/tools/rootmacros/fana.C	(revision 12168)
@@ -50,6 +50,6 @@
 
 vector<float> Vslide(FAD_MAX_SAMPLES);  // sliding average result
-vector<float> Vcfd(FAD_MAX_SAMPLES);  // CDF result
-vector<float> Vcfd_slide(FAD_MAX_SAMPLES);  // CDF result sliding averaged again
+vector<float> Vcfd(FAD_MAX_SAMPLES);    // CDF result
+vector<float> Vcfd2(FAD_MAX_SAMPLES);    // CDF result + 2nd sliding average
 
 #include "factfir.C"
@@ -60,12 +60,13 @@
 
 // histograms
-const int Ntypes = 6;
-const unsigned int  tAmeas = 0, 
+const int Ntypes = 7;
+const unsigned int  // arranged by Dominik
+	tAmeas 	= 0, 
 	tN1mean = 1, 
-	tVcorr = 2,  
-	tVslide = 3, 
-	tVcfd = 4, 
-	tVcfd_slide = 5;
-
+	tVcorr  = 2,
+	tVtest  = 3,
+	tVslide = 4,
+	tVcfd   = 5,
+	tVcfd2  = 6;
 
 TH1F* h;
@@ -78,14 +79,17 @@
 // Create a canvas
 TCanvas* CW;
-
-int spikeDebug = 0;
-
-
-int fana( const char *datafilename = "/media/daten_platte/FACT/data/20111009_013.fits", 
-	const char *drsfilename = "/media/daten_platte/FACT/data/20111009_009.drs.fits", 
-	int pixelnr = 0, 
-	int firstevent = 0, 
-	int nevents = -1 )
-{
+TCanvas* cFilter;
+
+int spikeDebug = 1;
+
+
+int fana( 
+	char *datafilename 		= "../raw/20110916_025.fits",
+	const char *drsfilename = "../raw/20110916_024.drs.fits",
+	int pixelnr 			= 0,
+	int firstevent 			= 0, 
+	int nevents 			= -1 ){
+// read and analyze FACT raw data
+
 // sliding window filter settings
 	int k_slide = 16;
@@ -100,10 +104,8 @@
 	a_cfd[k_cfd-1]=-1.;
 
-
 // 2nd slinding window filter
 	int ks2 = 16;
 	vector<double> as2(ks2, 1);
 	double bs2 = ks2;
-
 	gROOT->SetStyle("Plain");
 	
@@ -148,14 +150,14 @@
 
     float value;
-		float integral =0;
-
-		TH1F * sp = new TH1F("spektrum", "test of Stepktrum", 256, -0.5, 63.5);
+	TH1F * sp = new TH1F("spektrum", "test of Stepktrum", 256, -0.5, 63.5);
 
     for ( int ev = firstevent; ev < firstevent + nevents; ev++) {
 
 	    datafile.GetRow( ev );
-	    if (ev % 50 ==0)
-				cout << "Event number: " << data_num << endl;
-
+		
+		if (ev % 50 ==0){
+			cout << "Event number: " << data_num << endl;
+		}
+		
         for ( int pix = 0; pix < 1440; pix++ ){
             hStartCell->Fill( pix, data_offset[pix] );
@@ -177,66 +179,31 @@
         }   
 
-				// calculate sliding mean using FIR filter function
-				factfir(b_slide , a_slide, k_slide, Vcorr, Vslide);
-				// calculate CDF
-				factfir(b_cfd , a_cfd, k_cfd, Vslide, Vcfd);
-				// calculate i2nd sliding mean
-				factfir(b_slide , a_slide, k_slide, Vcfd, Vcfd_slide);
+		// filter Vcorr with sliding average using FIR filter function
+		factfir(b_slide , a_slide, k_slide, Vcorr, Vslide);
+				
+		// filter Vslide with CFD using FIR filter function
+		factfir(b_cfd , a_cfd, k_cfd, Vslide, Vcfd);
+		// filter Vcfd with sliding average using FIR filter function
+        factfir(b_slide , a_slide, k_slide, Vcfd, Vcfd2);
+
+		if ( spikeDebug ){
+			for ( unsigned int sl = 0; sl < data_roi; sl++){
+				h[tVslide].SetBinContent( sl, Vslide[sl] );
+				h[tVcfd].SetBinContent( sl, Vcfd[sl] );
+				h[tVcfd2].SetBinContent( sl, Vcfd2[sl] );
+			}   
+        }
+		
+		vector<int> * zeros = zerosearch( Vcfd2, -1, 10, 20 );
+		if (zeros->size() == 0 ){
+			continue;
+        }
+		// check value of Vside at zero position	
+		for ( int i=0; i<zeros->size(); i++){
+			cout << zeros->at(i) << ":\t" << Vslide[ zeros->at(i) ]<<endl;
+			sp->Fill(Vslide[zeros->at(i)]);
+		}
         
-				for ( unsigned int sl = 0; sl < data_roi; sl++){
-            h[tVcfd].SetBinContent(sl, Vcfd[sl]);
-            h[tVslide].SetBinContent(sl, Vslide[sl]);
-            h[tVcfd_slide].SetBinContent(sl, Vcfd_slide[sl]);
-        } 
-
-
-				vector<int> * zeros = zerosearch(Vcfd_slide,-1,10,20);
-				if (zeros->size() ==0)
-					continue;
-
-				// check value of Vside at zero position	
-				for ( int i=0; i<zeros->size(); i++){
-					cout << zeros->at(i) << ":\t" << Vslide[zeros->at(i)]<<endl;
-					sp->Fill(Vslide[zeros->at(i)]);
-				}
-
-/*
-
-				vector<int> goodzeros;
-				if (zeros->size() > 1){
-				for ( int i=0; i<zeros->size(); i++){
-					if (i==0) {
-						if ( abs(zeros->at(i) - zeros->at(i+1)) > 90 )
-							goodzeros.push_back(zeros->at(i));
-					} else if ( i==zeros->size()-1){
-						if (abs(zeros->at(i) - zeros->at(i-1)) > 90)
-							goodzeros.push_back(zeros->at(i));
-					} else {
-						if (abs(zeros->at(i) - zeros->at(i-1)) > 90 && 
-							abs(zeros->at(i) - zeros->at(i+1)) > 90 ) 
-								goodzeros.push_back(zeros->at(i));
-					}
-				}
-				} else {
-					goodzeros.push_back(zeros->at(0));
-				}
-				
-				// compute integrals around the good zeros.
-				// from -30 to +80 around it.
-				for (int i=0; i<goodzeros.size(); i++){
-//					cout << goodzeros[i];
-					integral =0;
-					for (int sl = goodzeros[i]-30; sl < goodzeros[i]+80; sl++){
-						if ( Ameas[sl] > integral)
-							integral = Ameas[sl];
-					} 
-//					cout << "\t-->" << integral << endl;
-					sp->Fill(integral);	
-				}      
-
-*/			 
- 
-        
-				if ( spikeDebug ){
+		if ( spikeDebug ){
 
             CW->cd( tAmeas + 1);
@@ -252,21 +219,31 @@
             h[tVcorr].Draw();
 
-        		CW->cd( tVslide + 1);
-		        gPad->SetGrid();
-    		    h[tVslide].Draw();
+           	// CW->cd( tVtest + 1);
+		    // gPad->SetGrid();
+   		    // h[tVtest].Draw();
+
+       		cFilter->cd( Ntypes - tVslide );
+            cFilter->cd(1);
+	        gPad->SetGrid();
+   		    h[tVslide].Draw();
         
-        		CW->cd( tVcfd + 1);
-		        gPad->SetGrid();
-    		    h[tVcfd].Draw();
-						TLine zeroline(0,0,1024,0);
-						zeroline.SetLineColor(kBlue);
-						zeroline.Draw();
+       		cFilter->cd( Ntypes - tVcfd );
+	        cFilter->cd(2);
+            gPad->SetGrid();
+   		    h[tVcfd].Draw();
+
+			TLine zeroline(0, 0, 1024, 0);
+   			zeroline.SetLineColor(kBlue);
+			zeroline.Draw();
+
+            cFilter->cd( Ntypes - tVcfd2 );
+            cFilter->cd(3);
+            gPad->SetGrid();
+            h[tVcfd2].Draw();
+
+            zeroline.Draw();
         
-        		CW->cd( tVcfd_slide + 1);
-		        gPad->SetGrid();
-    		    h[tVcfd_slide].Draw();
-						zeroline.Draw();
-				    
-						CW->Update();
+			CW->Update();
+            cFilter->Update();
 
             //Process gui events asynchronously during input 
@@ -284,11 +261,11 @@
     cSpektrum->cd();
     sp->Draw();
-    
-
-		TCanvas * cStartCell = new TCanvas();
+    TCanvas * cStartCell = new TCanvas();
     cStartCell->cd();
     hStartCell->Draw();
     hPixelCellData.Draw();
-		delete cStartCell;
+
+	delete cStartCell;
+	
 	return( 0 );
 }
@@ -410,5 +387,7 @@
     }
     CW = new TCanvas("CW","DRS Waveform",10,10,800,600);
-    CW->Divide(1, Ntypes);
+    CW->Divide(1, 3);
+    cFilter = new TCanvas("cFilter","filtered DRS Waveforms",10,10,800,600);
+    cFilter->Divide(1, 3);
 
     hStartCell = new TH2F("StartCell", "StartCell", 1440, 0., 1440., 1024, 0., 1024);
