Index: fact/tools/rootmacros/FPulseTemplate.C
===================================================================
--- fact/tools/rootmacros/FPulseTemplate.C	(revision 12918)
+++ fact/tools/rootmacros/FPulseTemplate.C	(revision 12919)
@@ -13,7 +13,7 @@
 *************************************************************/
 
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 // root libraries
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 
 #include <TROOT.h>
@@ -41,7 +41,7 @@
 #define HAVE_ZLIB
 
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 // rootmacros
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 
 #include "fits.h"
@@ -62,10 +62,10 @@
 #include "SpikeRemoval.C"
 
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 // Decleration of global variables
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 
 bool breakout=false;
-
+bool UseThisPeak=false;
 int NEvents;
 vector<int16_t> AllPixelDataVector;
@@ -75,4 +75,5 @@
 UInt_t RegionOfInterest;
 UInt_t NumberOfPixels;
+TString histotitle;
 
 size_t TriggerOffsetROI, RC;
@@ -92,4 +93,14 @@
   float countOfMax;
   } OverlayMaximum;
+
+typedef struct{
+  TString name;
+  TString title;
+  TString Mname;
+  TString Mtitle;
+  float yMax;
+} hist_t;
+
+hist_t histSetting[4];
 
 vector<OverlayMaximum> SingleMaximum;
@@ -106,11 +117,12 @@
         Vcfd2_  = 6;
 
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 // Initialisation of histograms
-//-----------------------------------------------------------------------------
-
-TH1F* h;
-TH1F *debugHistos;
+//----------------------------------------------------------------------------
+
+TH1F* h= NULL;
+TH1F *debugHistos= NULL;
 TH2F *hOverlayTemp = NULL;
+TH2F *hPeakOverlay[4];//histogrammm for overlay of detected Peaks
 TH2F *hSinglePeakOverlay;//histogrammm for overlay of detected Peaks
 TH2F *hDoublePeakOverlay;
@@ -119,43 +131,47 @@
 
 TH1F *hMaximumTemp = NULL;
+TH1F *hPeakMaximum[4];
 TH1F *hSinglePeakMaximum;
 TH1F *hDoublePeakMaximum;
 TH1F *hTripplePeakMaximum;
 TH1F *hLargePeakMaximum;
-
-int hPeakOverlayXaxisLeft,hPeakOverlayXaxisRight; 
+TH1D *hProjPeak = NULL;
+int gPeakOverlayXaxisLeft;
+int hPeakOverlayXaxisRight;
 
 TObjArray hList;
 TObjArray hListBaseline;
 
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 // Functions
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 
 void BookHistos( );
 void SaveHistograms( const char * );
 
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 // MAIN - Funtion
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
 int FPulseTemplate(
-  char *datafilename    = "../data/2011/11/09/20111109_006.fits.gz",
-  const char *drsfilename = "../data/2011/11/09/20111109_003.drs.fits.gz",
-  const char *OutRootFileName = "../analysis/20111109_006.fits.gz.peaktypes.root",
-  int firstevent      = 0,
-  int nevents       = -1,
-  int firstpixel      = 0,
-  int npixel        = -1,
-  bool spikeDebug = false,
-  int avg1    = 14,
-  int avg2    = 8,
-  int OverlayWindowLeft = 50,
-  int OverlayWindowRight = 250,
-  int verbosityLevel = 1, // different verbosity levels can be implemented here
-  bool ProduceGraphic = true
-  )
-
+  char*         datafilename    = "../data/2011/11/10/20111110_005.fits.gz",
+  const char*   drsfilename     = "../data/2011/11/10/20111110_003.drs.fits.gz",
+  const char*   OutRootFileName = "../analysis/20111110_003.test.root",
+  bool          ProduceGraphic  = true,
+  bool          spikeDebug      = false,
+  bool          fitdata         = false,
+  int           verbosityLevel  = 1, // different verbosity levels can be implemented here
+  int           firstevent      = 0,
+  int           nevents         = -1,
+  int           firstpixel      = 400,
+  int           npixel          = 1,
+  int           PintervalWidth  = 5,
+  int           PintervalMin    = 8,
+  int           PintervalMax    = 32, //4 Histogramms will be drawn, decide how far pulsehights differ from eachother
+  int           avg1            = 14,
+  int           avg2            = 8,
+  int           OverlayWindowLeft = 70,
+  int           OverlayWindowRight = 230)
 {
 //-----------------------------------------------------------------------------
@@ -163,5 +179,5 @@
 //-----------------------------------------------------------------------------
 
-  hPeakOverlayXaxisLeft = OverlayWindowLeft;
+  gPeakOverlayXaxisLeft = OverlayWindowLeft;
   hPeakOverlayXaxisRight = OverlayWindowRight;
 
@@ -179,7 +195,25 @@
         }
         // Canvases to show the peak template
-		TCanvas *cPulsetypes = NULL;
-		cPulsetypes = new TCanvas("cPulsetypes", "Overlay of detected Peaks", 1, 1, 1400, 700);
-		cPulsetypes->Divide(4,2);
+        TCanvas *cPulsetypes = NULL;
+        cPulsetypes = new TCanvas("cPulsetypes", "Overlay of detected Peaks", 1, 1, 1400, 700);
+        cPulsetypes->Divide(4,2);
+
+
+        for (int stepper = 0; stepper < 4; stepper++){
+          if (stepper == 0) histSetting[stepper].yMax = PintervalMin;
+          else if (stepper == 3) histSetting[stepper].yMax = PintervalMax;
+          else histSetting[stepper].yMax = ((PintervalMax-PintervalMin)*(stepper)/3)+PintervalMin;
+          cout << "Max @ " << histSetting[stepper].yMax << endl;
+          histSetting[stepper].name = "hPeakOverlay";
+          histSetting[stepper].name += stepper;
+          histSetting[stepper].title = "PeakOverlay with Amplitude around ";
+          histSetting[stepper].title += histSetting[stepper].yMax;
+          histSetting[stepper].title += " mV";
+          histSetting[stepper].Mname = "hPeakMaximum";
+          histSetting[stepper].Mname += stepper;
+          histSetting[stepper].Mtitle = "Peak (approx) derived with Maximum of above Spektrum with Max of ";
+          histSetting[stepper].Mtitle += histSetting[stepper].yMax;
+          histSetting[stepper].Mtitle += " mV";
+        }
 
 //-----------------------------------------------------------------------------
@@ -246,24 +280,40 @@
        for ( int pix = firstpixel; pix < firstpixel + npixel; pix++ ){
            if (verbosityLevel > 0){
-           if (pix == firstpixel){
-               cout << "Processing Event: " << CurrentEventID << "/" << nevents << endl;
+             cout << endl;
+             if (pix == firstpixel){
+                 cout << "...processing Event: " << CurrentEventID << "/" << nevents << endl;
+             }
            }
-       }
-
+
+//-------------------------------------
+// Apply Filters
+//-------------------------------------
+       cout << "...applying DrsCalibration";
        applyDrsCalibration( Ameas,pix,12,12,
            drs_basemean, drs_gainmean, drs_triggeroffsetmean,
            RegionOfInterest, AllPixelDataVector, StartCellVector);
+       cout << "...done " << endl;
 
        // finds spikes in the raw data, and interpolates the value
        // spikes are: 1 or 2 slice wide, positive non physical artifacts
+       cout << "...removeing Spikes";
        removeSpikes (Ameas, Vcorr);
-
+       cout << "...done " << endl;
        // filter Vcorr with sliding average using FIR filter function
+       cout << "...applying sliding average filter";
        sliding_avg(Vcorr, Vslide, avg1);
+       cout << "...done " << endl;
        // filter Vslide with CFD using FIR filter function
+       cout << "...apllying factfir filter";
        factfir(b_cfd , a_cfd, k_cfd, Vslide, Vcfd);
+       cout << "...done " << endl;
        // filter Vcfd with sliding average using FIR filter function
+       cout << "...applying 2nd sliding average filter";
        sliding_avg(Vcfd, Vcfd2, avg2);
-
+       cout << "...done " << endl;
+
+//-------------------------------------
+// Search vor Zero crossings
+//-------------------------------------
        // peaks in Ameas[] are found by searching for zero crossings
        // in Vcfd2
@@ -292,16 +342,36 @@
            if (Right > (int)Vcorr.size() )
                Right=Vcorr.size() ;
-		   if (Vslide[it->maxPos] >= 5 && Vslide[it->maxPos] < 13) hOverlayTemp = &*hSinglePeakOverlay;
-		   else if (Vslide[it->maxPos] >= 13 && Vslide[it->maxPos] < 23) hOverlayTemp = hDoublePeakOverlay;
-		   else if (Vslide[it->maxPos] >= 23 && Vslide[it->maxPos] < 33) hOverlayTemp = hTripplePeakOverlay;
-		   else if (Vslide[it->maxPos] >= 33) hOverlayTemp = hLargePeakOverlay;
-
-           for ( int pos = Left; pos < Right; pos++){
-//			 if (Vslide[it->maxPos] >= 5 && Vslide[it->maxPos] < 15) hSinglePeakOverlay->Fill( pos - (it->maxPos), Vslide[pos]);
-//			 else if (Vslide[it->maxPos] >= 15 && Vslide[it->maxPos] < 25) hDoublePeakOverlay->Fill( pos - (it->maxPos), Vslide[pos]);
-//			 else if (Vslide[it->maxPos] >= 25 && Vslide[it->maxPos] < 35) hTripplePeakOverlay->Fill( pos - (it->maxPos), Vslide[pos]);
-//			 else if (Vslide[it->maxPos] >= 35) hOverlayTemp = hLargePeakOverlay;
-				hOverlayTemp->Fill( pos - (it->maxPos), Vslide[pos]) ;
+
+           cout << "...choosing Histogram" ;
+           for(int stepper = 0; stepper < 4; stepper++){
+             if (Vslide[it->maxPos] >= (histSetting[stepper].yMax - (PintervalWidth/2)) && Vslide[it->maxPos] < (histSetting[stepper].yMax + PintervalWidth/2)){
+               hOverlayTemp = hPeakOverlay[stepper];
+               cout << "...#" << stepper ;
+               UseThisPeak = true;
+               break;
+             }
+             else if (stepper > 2){
+               UseThisPeak = false;
+               cout << "...NONE" << endl ;
+             }
            }
+
+//		   if (Vslide[it->maxPos] >= 5 && Vslide[it->maxPos] < 13) hOverlayTemp = &*hSinglePeakOverlay;
+//		   else if (Vslide[it->maxPos] >= 13 && Vslide[it->maxPos] < 23) hOverlayTemp = hDoublePeakOverlay;
+//		   else if (Vslide[it->maxPos] >= 23 && Vslide[it->maxPos] < 33) hOverlayTemp = hTripplePeakOverlay;
+//		   else if (Vslide[it->maxPos] >= 33) hOverlayTemp = hLargePeakOverlay;
+            if (UseThisPeak){
+            cout << "...filling" ;
+             for ( int pos = Left; pos < Right; pos++){
+  //			 if (Vslide[it->maxPos] >= 5 && Vslide[it->maxPos] < 15) hSinglePeakOverlay->Fill( pos - (it->maxPos), Vslide[pos]);
+  //			 else if (Vslide[it->maxPos] >= 15 && Vslide[it->maxPos] < 25) hDoublePeakOverlay->Fill( pos - (it->maxPos), Vslide[pos]);
+  //			 else if (Vslide[it->maxPos] >= 25 && Vslide[it->maxPos] < 35) hTripplePeakOverlay->Fill( pos - (it->maxPos), Vslide[pos]);
+  //			 else if (Vslide[it->maxPos] >= 35) hOverlayTemp = hLargePeakOverlay;
+
+                  hOverlayTemp->Fill( pos - (it->maxPos), Vslide[pos]) ;
+             }
+             cout << "...done" << endl;
+            }
+
        }
 
@@ -310,12 +380,12 @@
 //-----------------------------------------------------------------------------
        if ( spikeDebug ){
-          // TODO do this correct. The vectors should be the rigt ones... this is just luck 
+          // TODO do this correct. The vectors should be the rigt ones... this is just luck
           debugHistos[Ameas_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
-	  debugHistos[Vcorr_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
-	  debugHistos[Vslide_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
-	  debugHistos[Vcfd_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
-	  debugHistos[Vcfd2_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
-
-	  for ( unsigned int sl = 0; sl < RegionOfInterest; sl++){
+      debugHistos[Vcorr_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
+      debugHistos[Vslide_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
+      debugHistos[Vcfd_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
+      debugHistos[Vcfd2_].GetXaxis()->Set(Ameas.size() , -0.5 , Ameas.size()-0.5);
+
+      for ( unsigned int sl = 0; sl < RegionOfInterest; sl++){
                debugHistos[Ameas_].SetBinContent(sl, Ameas[sl]);
                debugHistos[Vcorr_].SetBinContent(sl, Vcorr[sl]);
@@ -360,22 +430,29 @@
 
                                 //OVERLAY PEAKS
-								cPulsetypes->cd(1);
-								gPad->SetGrid();
-								hSinglePeakOverlay->Draw("COLZ");
-
-								cPulsetypes->cd(2);
-								gPad->SetGrid();
-								hDoublePeakOverlay->Draw("COLZ");
-
-								cPulsetypes->cd(3);
-								gPad->SetGrid();
-								hTripplePeakOverlay->Draw("COLZ");
-
-								cPulsetypes->cd(4);
-								gPad->SetGrid();
-								hLargePeakOverlay->Draw("COLZ");
-
-								cPulsetypes->Modified();
-								cPulsetypes->Update();
+                                for(int stepper = 0; stepper < 4; stepper++){
+                                cPulsetypes->cd(stepper+1);
+                                gPad->SetGrid();
+                                hPeakOverlay[stepper]->Draw("COLZ");
+                                }
+
+
+//								cPulsetypes->cd(1);
+//								gPad->SetGrid();
+//								hSinglePeakOverlay->Draw("COLZ");
+//
+//								cPulsetypes->cd(2);
+//								gPad->SetGrid();
+//								hDoublePeakOverlay->Draw("COLZ");
+//
+//								cPulsetypes->cd(3);
+//								gPad->SetGrid();
+//								hTripplePeakOverlay->Draw("COLZ");
+//
+//								cPulsetypes->cd(4);
+//								gPad->SetGrid();
+//								hLargePeakOverlay->Draw("COLZ");
+
+                                cPulsetypes->Modified();
+                                cPulsetypes->Update();
 
                                 //Process gui events asynchronously during input
@@ -402,29 +479,37 @@
         // end of loop over pixels
         //-------------------------------------
-				if (ProduceGraphic){
-                        if (ev % 500 == 0){
+                if (ProduceGraphic){
+                        if (ev % 50 == 0){
 
                     //OVERLAY PEAKS
-						  cPulsetypes->cd(1);
-						  gPad->SetGrid();
-						  hSinglePeakOverlay->Draw("COLZ");
-
-						  cPulsetypes->cd(2);
-						  gPad->SetGrid();
-						  hDoublePeakOverlay->Draw("COLZ");
-
-						  cPulsetypes->cd(3);
-						  gPad->SetGrid();
-						  hTripplePeakOverlay->Draw("COLZ");
-
-						  cPulsetypes->cd(4);
-						  gPad->SetGrid();
-						  hLargePeakOverlay->Draw("COLZ");
-				  //  cPulsetypes->cd(5);
-				  //  hSinglePeakMaximum->Draw("");
-					cPulsetypes->Modified();
-					cPulsetypes->Update();
+                          cout << "...drawing histograms after Loop over Pixels" ;
+                          for(int stepper = 0; stepper < 4; stepper++){
+                          cPulsetypes->cd(stepper+1);
+                          gPad->SetGrid();
+                          hPeakOverlay[stepper]->Draw("COLZ");
+                          cout << "..." << stepper << "/3" ;
+                          }
+//						  cPulsetypes->cd(1);
+//						  gPad->SetGrid();
+//						  hSinglePeakOverlay->Draw("COLZ");
+//
+//						  cPulsetypes->cd(2);
+//						  gPad->SetGrid();
+//						  hDoublePeakOverlay->Draw("hLargePeakOverlayCOLZ");
+//
+//						  cPulsetypes->cd(3);
+//						  gPad->SetGrid();
+//						  hTripplePeakOverlay->Draw("COLZ");
+//
+//						  cPulsetypes->cd(4);
+//						  gPad->SetGrid();
+//						  hLargePeakOverlay->Draw("COLZ");
+                  //  cPulsetypes->cd(5);
+                  //  hSinglePeakMaximum->Draw("");
+                          cout << "...done" << endl;
+                    cPulsetypes->Modified();
+                    cPulsetypes->Update();
                   }
-				}
+                }
                 if (breakout)
                         break;
@@ -438,37 +523,44 @@
 // Histogramm of Maximas in Overlay Spectra
 //-------------------------------------
-cout << "producing...Maximum peaks" << endl;
-   for (unsigned int cnt = 1 ; cnt <= 4 ; cnt ++){
-	 cout << "peak type: " << cnt << endl;
-	 if (cnt == 1){
-	   hMaximumTemp = hSinglePeakMaximum;
-	   hOverlayTemp = hSinglePeakOverlay;
-	 }
-	 else if (cnt == 2){
-	   hMaximumTemp = hDoublePeakMaximum;
-	   hOverlayTemp = hDoublePeakOverlay;
-	 }
-	 else if (cnt == 3){
-	   hMaximumTemp = hTripplePeakMaximum;
-	   hOverlayTemp = hTripplePeakOverlay;
-	 }
-	 else if (cnt == 4){
-	   hMaximumTemp = hLargePeakMaximum;
-	   hOverlayTemp = hLargePeakOverlay;
-	 }
+   cout << "...producing Maximum peaks:" << endl;
+   for (unsigned int cnt = 0 ; cnt < 4 ; cnt ++){
+     cout << "\t ...peak type " << cnt;
+     hOverlayTemp = hPeakOverlay[cnt];
+     hMaximumTemp = hPeakMaximum[cnt];
+//	 if (cnt == 1){
+//	   hMaximumTemp = hSinglePeakMaximum;
+//	   hOverlayTemp = hSinglePeakOverlay;
+//	 }
+//	 else if (cnt == 2){
+//	   hMaximumTemp = hDoublePeakMaximum;
+//	   hOverlayTemp = hDoublePeakOverlay;
+//	 }
+//	 else if (cnt == 3){
+//	   hMaximumTemp = hTripplePeakMaximum;
+//	   hOverlayTemp = hTripplePeakOverlay;
+//	 }
+//	 else if (cnt == 4){
+//	   hMaximumTemp = hLargePeakMaximum;
+//	   hOverlayTemp = hLargePeakOverlay;
+//	 }
    // resize vector SingleMaximum to number of timeslices in Overlay Spectra
-	  SingleMaximum.resize(hOverlayTemp->GetNbinsX());
+      SingleMaximum.resize(hOverlayTemp->GetNbinsX());
+      cout << "\t ...peak type " << cnt;
       //put maximumvalue of every Y-projection of every timeslice into vector
-	  for (int TimeSlice = 0; TimeSlice <= hOverlayTemp->GetNbinsX(); TimeSlice++ ){
-		TString histotitle;
-		histotitle += "hproj_py";
-		histotitle += cnt ;
-		TH1D* hProjPeak =	hOverlayTemp->ProjectionY(histotitle, TimeSlice, TimeSlice, "");
-		SingleMaximum[ TimeSlice ].maxAmpl = (hProjPeak->GetMaximumBin() * 0.5) - 3.5;
+      for (int TimeSlice = 0; TimeSlice <= hOverlayTemp->GetNbinsX(); TimeSlice++ ){
+        histotitle = "hproj_py";
+        histotitle += cnt ;
+        hProjPeak =	hOverlayTemp->ProjectionY(histotitle, TimeSlice, TimeSlice, "");
+        SingleMaximum[ TimeSlice ].maxAmpl = (hProjPeak->GetMaximumBin() * 0.5) - 3.5;
         SingleMaximum[ TimeSlice ].countOfMax = hProjPeak->GetBinContent( hProjPeak->GetMaximumBin() );
-		hMaximumTemp->SetBinContent(TimeSlice, SingleMaximum[ TimeSlice ].maxAmpl );
+        hMaximumTemp->SetBinContent(TimeSlice, SingleMaximum[ TimeSlice ].maxAmpl );
       }
-	  hMaximumTemp->Fit("landau", "", "", -50, 250);
-	}
+      cout << "...done" << endl;
+      if (fitdata){
+        cout << "...calculating Landaufit" ;
+        hMaximumTemp->Fit("landau", "", "", -50, 250);
+        cout << "...done" << endl;
+        }
+    }
 //-------------------------------------
 // Draw Histograms
@@ -476,47 +568,64 @@
         if (ProduceGraphic){
             //OVERLAY PEAKS
-cout << "producing...So" << endl;
-		  cPulsetypes->cd(1);
-		  gPad->SetGrid();
-		  hSinglePeakOverlay->ResetStats();
-		  hSinglePeakOverlay->Draw("COLZ");
-cout << "producing...DO" << endl;
-		  cPulsetypes->cd(2);
-		  gPad->SetGrid();
-		  hDoublePeakOverlay->ResetStats();
-		  hDoublePeakOverlay->Draw("COLZ");
-cout << "producing...TO" << endl;
-		  cPulsetypes->cd(3);
-		  gPad->SetGrid();
-		  hTripplePeakOverlay->ResetStats();
-		  hTripplePeakOverlay->Draw("COLZ");
-cout << "producing...LO" << endl;
-		  cPulsetypes->cd(4);
-		  gPad->SetGrid();
-		  hLargePeakOverlay->ResetStats();
-		  hLargePeakOverlay->Draw("COLZ");
-cout << "producing...SM" << endl;
-		  cPulsetypes->cd(5);
-		  hSinglePeakMaximum->ResetStats();
-		  hSinglePeakMaximum->Draw("");
-cout << "producing...DM" << endl;
-		  cPulsetypes->cd(6);
-		  hDoublePeakMaximum->ResetStats();
-		  hDoublePeakMaximum->Draw("");
-cout << "producing...TM" << endl;
-		  cPulsetypes->cd(7);
-		  hTripplePeakMaximum->ResetStats();
-		  hTripplePeakMaximum->Draw("");
-cout << "producing...LM" << endl;
-		  cPulsetypes->cd(8);
-		  hLargePeakMaximum->ResetStats();
-		  hLargePeakMaximum->Draw("");
-cout << "producing...Done" << endl;
-
-
-
-
-		  cPulsetypes->Modified();
-		  cPulsetypes->Update();
+          cout << "...drawing overlay histograms" ;
+          for(int stepper = 0; stepper < 4; stepper++){
+          cPulsetypes->cd(stepper+1);
+          gPad->SetGrid();
+          hPeakOverlay[stepper]->ResetStats();
+          hPeakOverlay[stepper]->Draw("COLZ");
+          }
+          cout << "...done" << endl;
+          cout << "...drawing peak-shape histograms" ;
+          for(int stepper = 0; stepper < 4; stepper++){
+          cPulsetypes->cd(5+stepper);
+          gPad->SetGrid();
+          hPeakMaximum[stepper]->ResetStats();
+          hPeakMaximum[stepper]->Draw();
+          }
+          cout << "...done" << endl;
+
+//cout << "producing...So" << endl;
+//		  cPulsetypes->cd(1);
+//		  gPad->SetGrid();
+//		  hSinglePeakOverlay->ResetStats();
+//		  hSinglePeakOverlay->Draw("COLZ");
+//cout << "producing...DO" << endl;
+//		  cPulsetypes->cd(2);
+//		  gPad->SetGrid();
+//		  hDoublePeakOverlay->ResetStats();
+//		  hDoublePeakOverlay->Draw("COLZ");
+//cout << "producing...TO" << endl;
+//		  cPulsetypes->cd(3);
+//		  gPad->SetGrid();
+//		  hTripplePeakOverlay->ResetStats();
+//		  hTripplePeakOverlay->Draw("COLZ");
+//cout << "producing...LO" << endl;
+//		  cPulsetypes->cd(4);
+//		  gPad->SetGrid();
+//		  hLargePeakOverlay->ResetStats();
+//		  hLargePeakOverlay->Draw("COLZ");
+//cout << "producing...SM" << endl;
+//		  cPulsetypes->cd(5);
+//		  hSinglePeakMaximum->ResetStats();
+//		  hSinglePeakMaximum->Draw("");
+//cout << "producing...DM" << endl;
+//		  cPulsetypes->cd(6);
+//		  hDoublePeakMaximum->ResetStats();
+//		  hDoublePeakMaximum->Draw("");
+//cout << "producing...TM" << endl;
+//		  cPulsetypes->cd(7);
+//		  hTripplePeakMaximum->ResetStats();
+//		  hTripplePeakMaximum->Draw("");
+//cout << "producing...LM" << endl;
+//		  cPulsetypes->cd(8);
+//		  hLargePeakMaximum->ResetStats();
+//		  hLargePeakMaximum->Draw("");
+//cout << "producing...Done" << endl;
+
+
+
+
+          cPulsetypes->Modified();
+          cPulsetypes->Update();
 
 //            cPixelPeakOverlay->cd();
@@ -572,87 +681,114 @@
         }
 */
-//-----------------------------------------------------------------------------
-	  hSinglePeakOverlay = new TH2F("hSinglePeakOverlay", "Overlay of detected Single Photon Peaks",
-               hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*hPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
-			   512, -55.5, 300.5);
-	  hSinglePeakOverlay->SetAxisRange(-5.5, 35.5, "Y");
-		hSinglePeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
-		hSinglePeakOverlay->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
-		//hSinglePeakOverlay->SetBit(TH2F::kCanRebin);
-		hList.Add( hSinglePeakOverlay );
-
-	  hSinglePeakMaximum = new TH1F("hSinglePeakMaximum", "Single Peak derived with Maximum of above Spektrum",
-               hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
-               (-1*hPeakOverlayXaxisLeft)-0.5,
+
+//-----------------------------------------------------------------------------
+
+        for (int stepper = 0; stepper < 4; stepper ++){
+      hPeakOverlay[stepper] = new TH2F(histSetting[stepper].name, histSetting[stepper].title,
+               gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*gPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
+               512, -55.5, 300.5);
+      hPeakOverlay[stepper]->SetAxisRange(-5.5, histSetting[stepper].yMax+ 25.5, "Y");
+        hPeakOverlay[stepper]->GetXaxis()->SetTitle( "Timeslices" );
+        hPeakOverlay[stepper]->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+        //hSinglePeakOverlay->SetBit(TH2F::kCanRebin);
+        hList.Add( hPeakOverlay[stepper] );
+
+      hPeakMaximum[stepper] = new TH1F(histSetting[stepper].Mname, histSetting[stepper].Mtitle,
+               gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
+               (-1*gPeakOverlayXaxisLeft)-0.5,
                hPeakOverlayXaxisRight-0.5
                 );
-	  hSinglePeakMaximum->SetAxisRange(-0.5, 25.5, "Y");
-		hSinglePeakMaximum->GetXaxis()->SetTitle( "Timeslices" );
-		hSinglePeakMaximum->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
-		hList.Add( hSinglePeakMaximum );
-//-----------------------------------------------------------------------------
-
-		hDoublePeakOverlay = new TH2F("hDoublePeakOverlay", "Overlay of detected Double Photon Peaks",
-		hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*hPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
-		512, -55.5, 300.5);
-		hDoublePeakOverlay->SetAxisRange(-5.5, 35.5, "Y");
-		hDoublePeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
-		hDoublePeakOverlay->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
-		//hSinglePeakOverlay->SetBit(TH2F::kCanRebin);
-		hList.Add( hDoublePeakOverlay );;
-
-		hDoublePeakMaximum = new TH1F("hSinglePeakMaximum", "Double Peak derived with Maximum of above Spektrum",
-				 hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
-				 (-1*hPeakOverlayXaxisLeft)-0.5,
-				 hPeakOverlayXaxisRight-0.5
-				  );
-		hDoublePeakMaximum->SetAxisRange(-0.5, 25.5, "Y");
-		  hDoublePeakMaximum->GetXaxis()->SetTitle( "Timeslices" );
-		  hDoublePeakMaximum->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
-		  hList.Add( hDoublePeakMaximum );
+      hPeakMaximum[stepper]->SetAxisRange(-0.5, histSetting[stepper].yMax + 15.5, "Y");
+        hPeakMaximum[stepper]->GetXaxis()->SetTitle( "Timeslices" );
+        hPeakMaximum[stepper]->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+        hList.Add( hPeakMaximum[stepper] );
+      }
+//-----------------------------------------------------------------------------
+
+
+
+//-----------------------------------------------------------------------------
+      hSinglePeakOverlay = new TH2F("hSinglePeakOverlay", "Overlay of detected Single Photon Peaks",
+               gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*gPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
+               512, -55.5, 300.5);
+      hSinglePeakOverlay->SetAxisRange(-5.5, 35.5, "Y");
+        hSinglePeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
+        hSinglePeakOverlay->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+        //hSinglePeakOverlay->SetBit(TH2F::kCanRebin);
+        hList.Add( hSinglePeakOverlay );
+
+      hSinglePeakMaximum = new TH1F("hSinglePeakMaximum", "Single Peak derived with Maximum of above Spektrum",
+               gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
+               (-1*gPeakOverlayXaxisLeft)-0.5,
+               hPeakOverlayXaxisRight-0.5
+                );
+      hSinglePeakMaximum->SetAxisRange(-0.5, 25.5, "Y");
+        hSinglePeakMaximum->GetXaxis()->SetTitle( "Timeslices" );
+        hSinglePeakMaximum->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+        hList.Add( hSinglePeakMaximum );
+//-----------------------------------------------------------------------------
+
+        hDoublePeakOverlay = new TH2F("hDoublePeakOverlay", "Overlay of detected Double Photon Peaks",
+        gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*gPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
+        512, -55.5, 300.5);
+        hDoublePeakOverlay->SetAxisRange(-5.5, 35.5, "Y");
+        hDoublePeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
+        hDoublePeakOverlay->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+        //hSinglePeakOverlay->SetBit(TH2F::kCanRebin);
+        hList.Add( hDoublePeakOverlay );;
+
+        hDoublePeakMaximum = new TH1F("hSinglePeakMaximum", "Double Peak derived with Maximum of above Spektrum",
+                 gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
+                 (-1*gPeakOverlayXaxisLeft)-0.5,
+                 hPeakOverlayXaxisRight-0.5
+                  );
+        hDoublePeakMaximum->SetAxisRange(-0.5, 25.5, "Y");
+          hDoublePeakMaximum->GetXaxis()->SetTitle( "Timeslices" );
+          hDoublePeakMaximum->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+          hList.Add( hDoublePeakMaximum );
   //-----------------------------------------------------------------------------
 
-		hTripplePeakOverlay= new TH2F("hTripplePeakOverlay", "Overlay of detected Tripple Photon Peaks",
-		hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*hPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
-		512, -55.5, 300.5);
-		hTripplePeakOverlay->SetAxisRange(-5.5, 35.5, "Y");
-		hTripplePeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
-		hTripplePeakOverlay->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
-		//hTripplePeakOverlay->SetBit(TH2F::kCanRebin);
-		hList.Add( hTripplePeakOverlay );;
-
-		hTripplePeakMaximum = new TH1F("hSinglePeakMaximum", "Triple Peak derived with Maximum of above Spektrum",
-				 hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
-				 (-1*hPeakOverlayXaxisLeft)-0.5,
-				 hPeakOverlayXaxisRight-0.5
-				  );
-		hTripplePeakMaximum->SetAxisRange(-0.5, 25.5, "Y");
-		  hTripplePeakMaximum->GetXaxis()->SetTitle( "Timeslices" );
-		  hTripplePeakMaximum->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
-		  hList.Add( hTripplePeakMaximum );
+        hTripplePeakOverlay= new TH2F("hTripplePeakOverlay", "Overlay of detected Tripple Photon Peaks",
+        gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*gPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
+        512, -55.5, 300.5);
+        hTripplePeakOverlay->SetAxisRange(-5.5, 35.5, "Y");
+        hTripplePeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
+        hTripplePeakOverlay->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+        //hTripplePeakOverlay->SetBit(TH2F::kCanRebin);
+        hList.Add( hTripplePeakOverlay );;
+
+        hTripplePeakMaximum = new TH1F("hSinglePeakMaximum", "Triple Peak derived with Maximum of above Spektrum",
+                 gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
+                 (-1*gPeakOverlayXaxisLeft)-0.5,
+                 hPeakOverlayXaxisRight-0.5
+                  );
+        hTripplePeakMaximum->SetAxisRange(-0.5, 25.5, "Y");
+          hTripplePeakMaximum->GetXaxis()->SetTitle( "Timeslices" );
+          hTripplePeakMaximum->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+          hList.Add( hTripplePeakMaximum );
   //-----------------------------------------------------------------------------
 
-		hLargePeakOverlay= new TH2F("hLargePeakOverlay", "Overlay of detected Multi Photon Peaks",
-		hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*hPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
-		512, -5.5, 300.5 );
-		hLargePeakOverlay->SetAxisRange(-5.5, 200.5, "Y");
-		hLargePeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
-		hLargePeakOverlay->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
-		//hLargePeakOverlay->SetBit(TH2F::kCanRebin);
-		hList.Add( hLargePeakOverlay );;
-
-		hLargePeakMaximum = new TH1F("hLargePeakMaximum", "Peak derived with Maximum of above Spektrum",
-				 hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
-				 (-1*hPeakOverlayXaxisLeft)-0.5,
-				 hPeakOverlayXaxisRight-0.5
-				  );
-		hLargePeakMaximum->SetAxisRange(-0.5, 50.5, "Y");
-		  hLargePeakMaximum->GetXaxis()->SetTitle( "Timeslices" );
-		  hLargePeakMaximum->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
-		  hList.Add( hLargePeakMaximum );
+        hLargePeakOverlay= new TH2F("hLargePeakOverlay", "Overlay of detected Multi Photon Peaks",
+        gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*gPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
+        512, -5.5, 300.5 );
+        hLargePeakOverlay->SetAxisRange(-5.5, 200.5, "Y");
+        hLargePeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
+        hLargePeakOverlay->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+        //hLargePeakOverlay->SetBit(TH2F::kCanRebin);
+        hList.Add( hLargePeakOverlay );;
+
+        hLargePeakMaximum = new TH1F("hLargePeakMaximum", "Peak derived with Maximum of above Spektrum",
+                 gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight ,
+                 (-1*gPeakOverlayXaxisLeft)-0.5,
+                 hPeakOverlayXaxisRight-0.5
+                  );
+        hLargePeakMaximum->SetAxisRange(-0.5, 50.5, "Y");
+          hLargePeakMaximum->GetXaxis()->SetTitle( "Timeslices" );
+          hLargePeakMaximum->GetYaxis()->SetTitle( "Amplitude [a.u.]" );
+          hList.Add( hLargePeakMaximum );
   //-----------------------------------------------------------------------------
 
 //        hPixelPeakOverlay = new TH2F("hPixelPeakOverlay", "Maximum of Statistic of overlayed Peaks",
-//               hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*hPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
+//               gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*gPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
 //               512, -55.5, 200.5 );
 //        hPixelPeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
@@ -661,5 +797,5 @@
 
 //        hEventPeakOverlay = new TH2F("hEventPeakOverlay", "Overlay of detected Peaks of all Pixel of one Event",
-//               hPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*hPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
+//               gPeakOverlayXaxisLeft + hPeakOverlayXaxisRight , (-1*gPeakOverlayXaxisLeft)-0.5, hPeakOverlayXaxisRight-0.5 ,
 //               4096, -48.5, 200.5 );
 //        hEventPeakOverlay->GetXaxis()->SetTitle( "Timeslices" );
