]> jspc29.x-matter.uni-frankfurt.de Git - mvd_soft.git/commitdiff
adding analysis and gui code
authorSamir Amar-Youcef <samir@ikf>
Fri, 19 Dec 2014 12:43:51 +0000 (13:43 +0100)
committerSamir Amar-Youcef <samir@ikf>
Fri, 19 Dec 2014 12:43:51 +0000 (13:43 +0100)
14 files changed:
s-curves/analysis_gui/ANA/Makefile [new file with mode: 0644]
s-curves/analysis_gui/ANA/Mi26Ana.cpp [new file with mode: 0644]
s-curves/analysis_gui/ANA/Mi26Ana.h [new file with mode: 0644]
s-curves/analysis_gui/ANA/ana.C [new file with mode: 0644]
s-curves/analysis_gui/ANA/help.h [new file with mode: 0644]
s-curves/analysis_gui/ANA/main.cpp [new file with mode: 0644]
s-curves/analysis_gui/GUI/Makefile [new file with mode: 0644]
s-curves/analysis_gui/GUI/main.cpp [new file with mode: 0644]
s-curves/analysis_gui/GUI/scurves.cpp [new file with mode: 0644]
s-curves/analysis_gui/GUI/scurves.h [new file with mode: 0644]
s-curves/analysis_gui/GUI/scurves.pro [new file with mode: 0644]
s-curves/analysis_gui/GUI/scurves.ui [new file with mode: 0644]
s-curves/analysis_gui/run.sh [new file with mode: 0755]
s-curves/analysis_gui/runana.sh [new file with mode: 0755]

diff --git a/s-curves/analysis_gui/ANA/Makefile b/s-curves/analysis_gui/ANA/Makefile
new file mode 100644 (file)
index 0000000..0b7bb4f
--- /dev/null
@@ -0,0 +1,16 @@
+CC=g++\r
+CFLAGS=-c -g -Wall -std=c++11 `root-config --cflags`\r
+LDFLAGS=`root-config --glibs`\r
+CLDFLAGS = -std=c++11 `root-config --cflags --glibs` -lboost_system -lboost_filesystem \r
+SOURCES= main.cpp Mi26Ana.cpp Mi26Ana.h help.h\r
+OBJECTS=$(subst .cc,.o,$(SOURCES))\r
+EXECUTABLE=Mi26Ana\r
+\r
+all: $(SOURCES) $(EXECUTABLE)\r
+\r
+$(EXECUTABLE): $(OBJECTS)\r
+       $(CC) $(CLDFLAGS) $(OBJECTS) -o $@\r
+\r
+\r
+clean:\r
+       rm -f $(OBJS)\r
diff --git a/s-curves/analysis_gui/ANA/Mi26Ana.cpp b/s-curves/analysis_gui/ANA/Mi26Ana.cpp
new file mode 100644 (file)
index 0000000..8198408
--- /dev/null
@@ -0,0 +1,1059 @@
+#include "Mi26Ana.h"
+#include "help.h"
+
+
+//####################################################################
+
+Mi26Ana::Mi26Ana() {                                                                                                                                   // ok
+       
+
+       fInputRootFile  = "";
+       fInputPxFile    = "";
+       fNRndPx                 = 0;
+       fNPx                    = 0;
+       fCode                   = 0;
+       
+       fPixelprob      = new Float_t   [1152*576];
+//     fFrames         = new UShort_t  [576];
+}
+
+//####################################################################
+
+Mi26Ana::Mi26Ana( TString inFile, TString pxFile, int NRndPx, int NPx, int Code ) {            // ok
+       
+       fInputRootFile  = inFile;
+       fInputPxFile    = pxFile;
+       fNRndPx                 = NRndPx;
+       fNPx                    = NPx;
+       fCode                   = Code;
+       
+       fPixelprob      = new Float_t   [1152*576];
+//     fFrames         = new UShort_t  [576];
+}
+
+//####################################################################
+
+Mi26Ana::~Mi26Ana() {                                                                                                                                  // ok
+       
+       delete[] fPixelprob;
+//     delete[] fFrames;
+//     fFile->Close();
+}
+
+//####################################################################
+
+void Mi26Ana::Exec(int Mode) {                                                                                                                 // ok
+// Open Root-File
+       fFile   = new TFile(fInputRootFile);
+       fTree   = (TTree*)fFile->Get( "scurvesall" );
+       fTree -> SetBranchAddress       ("threshold"    , &fThreshold   );
+       fTree -> SetBranchAddress       ("pixelprob"    , fPixelprob    );
+//     fTree -> SetBranchAddress       ("frames"               , fFrames               );
+       
+       fNthr = fTree->GetEntries();
+       
+// Decode 'Code'
+       fPixSel         = ( (fCode/10000) &  1);
+       fMatrix[0]      = ( (fCode/1000) &  1);
+       fMatrix[1]      = ( (fCode/100) &  1);
+       fMatrix[2]      = ( (fCode/10) &  1);
+       fMatrix[3]      = ( (fCode/1) &  1);
+       
+       fMatrixActive = 0;
+       for(int i=0;i<4;i++) { fMatrixActive+=fMatrix[i]; }
+       
+// Read Pixel File
+       if( fPixSel ) { if( !readPxFile() ) { fPixSel=0; } }
+// fFilename
+       char    longFile[256]   = "";
+       char    shortFile[256]  = "";
+       
+       strcpy  (longFile, fInputRootFile);
+       
+       uint namelength = strlen(longFile);                     
+       uint pos = 0;
+       for(uint i=0;   i<namelength;i++)       { if ( longFile[i]=='/' ) { pos=i+1;} }
+       for(uint i=pos; i<namelength;i++)       { shortFile[i-pos]=longFile[i];          }
+       strcpy(fFilename, shortFile);
+       
+// Exec
+       if              ( Mode == 0 )   { rewrite();            }
+       else if ( Mode == 1 )   { plotsc();                     }
+       else if ( Mode == 2 )   { plotscsingle();       }
+       else if ( Mode == 3 )   { fitsc();                      }
+       else if ( Mode == 4 )   { fitscsingle();        }
+       else if ( Mode == 5 )   { sumup();                      }
+       else if ( Mode == 6 )   { fakes();                      }
+       else if ( Mode == 7 )   { empty1();                     }
+       else if ( Mode == 8 )   { empty2();                     }
+       
+       
+
+}
+
+//####################################################################
+
+void Mi26Ana::rewrite() {                                                                                                                              // ok evtl. check to which extend
+       
+       cout<<"-------------"<<endl;
+       cout<<"REWRITE FILE: "<<endl;
+//  --------------
+       if (fNthr % 4 != 0){
+               printf("Error: %d not divisible by 4!", fNthr);
+               exit(1);
+       }
+       
+// Variables
+       int             nthr            = fNthr/4;
+       Float_t*        pixelprobout= new Float_t       [1152*576];
+       
+// Determine Ouput Path
+       char    inputFile[256]          = "";
+       char    outputFile[256] = "";
+       
+       strcpy  (inputFile, fInputRootFile);
+       
+       uint namelength = strlen(inputFile);                    
+       
+       for(uint i=0; i<namelength-5;i++)
+       {
+               outputFile[i] = inputFile[i];
+       }
+       
+       strcat  (outputFile, "_re.root");
+
+       TFile*  fout            = new TFile(outputFile,"RECREATE");
+       TTree*  treeout         = new TTree( "scurvesall" , "scurvesall" );
+       
+       treeout -> Branch("threshold"   , &fThreshold           , "threshold/s"                 , 32000);
+       treeout -> Branch("pixelprob"   , pixelprobout          , "pixelprob[663552]/F" , 32000);
+       
+// Loop
+       for(int i=0;i<nthr;i++)
+       {
+               for(int j=0;j<4;j++)
+               {
+                       fTree->GetEntry(i+j*nthr);
+                       
+                       for(int pix=0;pix<1152*576;pix++)
+                       {
+                               if( pix%1152>=1152/4*(j) && pix%1152<1152/4*(j+1) )
+                               {
+                                       pixelprobout[pix] = fPixelprob[pix];
+                               }
+                       }
+               }
+               
+               cout<<"\rThreshold: "<<fThreshold<<" ( " <<i+1<<" of "<<nthr<<" ) ";
+               cout.flush();
+               treeout->Fill();
+       }
+       cout<<"\r ...done!                                       "<<endl;
+       cout<<"-------------"<<endl;
+       cout<<"\r Save File: "<<outputFile<<endl;
+       treeout -> Write("",TObject::kOverwrite);
+       fout->Save();
+       fout->Close();
+       cout<<"-------------"<<endl;
+}
+
+//####################################################################
+
+void Mi26Ana::plotsc() {                                                                                                                               // ok
+       
+       cout<<"-------------"<<endl;
+       cout<<"PLOT SCURVES: "<<endl;
+       
+       int row, column, matrix;
+       
+       TH2F * ploti[4];
+       for(int i=0;i<4;i++)            { ploti[i] = new TH2F( Form("Matrix %i",i), Form("Matrix %i",i), fNthr,0,255, 500,-0.05,1.05); }
+       
+       ULong_t progress_tmp=-1;
+       Float_t         progress;
+                       
+       for(int i=0;i<fNthr;i++)
+       {
+               progress = (Int_t)((i*100)/(fNthr-1)*10);
+               if(progress!=progress_tmp)      { print_progress( ((i*100.)/(fNthr-1)) ); progress_tmp=progress;}
+       
+               fTree->GetEntry(i);
+// fPixSel 0
+               if(!fPixSel)
+               {
+                       for(int pix=0;pix<1152*576;pix++)
+                       {
+                               column  = pix%1152;
+                               row             = (int)(pix/1152);
+                               matrix  = int(column/288);
+                               
+                               if(fMatrix[matrix])
+                               {
+//                                     if( row!=0 && row!=573 )
+//                                     {
+                                               ploti[matrix] ->Fill(fThreshold,fPixelprob[pix]);
+//                                     }
+                               }
+                       }
+               }
+// fPixSel 1
+               else
+               {
+                       int pix;
+                       for(int pi=0;pi<fNRndPx;pi++)
+                       {
+                               pix             = fRndPx[pi];
+                               column  = pix%288;
+                               row             = (int)(pix/288);
+                               
+                               for(matrix=0;matrix<4;matrix++)
+                               {
+                                       pix = 1152*row+column+288*matrix;
+                                       
+                                       if(fMatrix[matrix])
+                                       {
+//                                             if( row!=0 && row!=573 )
+//                                             {
+                                                       ploti[matrix] ->Fill(fThreshold,fPixelprob[pix]);
+//                                             }
+                                       }
+                               }
+                       }
+               }
+       }
+       
+       TCanvas* cm2 = new TCanvas("SCURVES",Form("SCURVES: %s", fFilename), 50,100,250*fMatrixActive,300);
+       cm2->Divide(fMatrixActive,1);
+       
+       int cdi = 1;
+       for(int i=0;i<4;i++)
+       {       
+               if( fMatrix[i] )
+               {
+                       cm2->cd(cdi);
+                       ploti[i]->SetStats(false);
+                       ploti[i]->SetMarkerColor(kRed);
+                       ploti[i]->Draw();
+                       cdi++;
+               }
+       }
+}
+
+//####################################################################
+
+void Mi26Ana::plotscsingle() {                                                                                                                 // ok
+       
+       cout<<"-------------"<<endl;
+       cout<<"PLOT SINGLE SCURVE: "<<endl;
+       
+       int row, column, matrix, pix;
+       
+       TH2F * ploti[4];
+       for(int i=0;i<4;i++)            { ploti[i] = new TH2F( Form("Matrix %i",i), Form("Matrix %i",i), fNthr,0,255, 500,-0.05,1.05); }
+       
+       ULong_t progress_tmp=-1;
+       Float_t         progress;
+                       
+       for(int i=0;i<fNthr;i++)
+       {
+               progress = (Int_t)((i*100)/(fNthr-1)*10);
+               if(progress!=progress_tmp)      { print_progress( ((i*100.)/(fNthr-1)) ); progress_tmp=progress;}
+       
+               fTree->GetEntry(i);
+               
+               pix             = fNPx;         
+               column  = pix%288;
+               row             = (int)(pix/288);
+                               
+               for(matrix=0;matrix<4;matrix++)
+               {
+                       pix = 1152*row+column+288*matrix;
+                       
+                       if(fMatrix[matrix])
+                       {
+                               ploti[matrix] ->Fill(fThreshold,fPixelprob[pix]);
+                       }
+               }
+       }
+       
+       TCanvas* cm2 = new TCanvas("SCURVE",Form("SCURVE (%i): %s", fNPx, fFilename), 50,100,250*fMatrixActive,300);
+       cm2->Divide(fMatrixActive,1);
+       
+       int cdi = 1;
+       for(int i=0;i<4;i++)
+       {       
+               if( fMatrix[i] )
+               {
+                       cm2->cd(cdi);
+                       ploti[i]->SetStats(false);
+                       ploti[i]->SetMarkerColor(kRed);
+                       ploti[i]->Draw();
+                       cdi++;
+               }
+       }
+}
+
+//####################################################################
+
+void Mi26Ana::fitsc() {                                                                                                                                        // ok
+               
+//  File OUT
+//     TString RootFileOut = "outputpara2.root";
+//     TFile*  fout = new TFile(RootFileOut,"RECREATE");
+//     TTree* paraTree[4];
+//     
+//     for(int ba=0;ba<4;ba++)
+//     {
+//             paraTree[ba] = new TTree( Form("para%i",ba), Form("para%i",ba));
+//             paraTree[ba] -> Branch("pixel"  , &pixel        , "pixel/i"     , 32000);
+//             paraTree[ba] -> Branch("row"    , &row          , "row/i"       , 32000);
+//             paraTree[ba] -> Branch("column" , &column       , "column/F"    , 32000);
+//             paraTree[ba] -> Branch("mean"   , &mean         , "mean/F"      , 32000);
+//             paraTree[ba] -> Branch("sigma"  , &sigma        , "sigma/F"     , 32000);
+//             paraTree[ba] -> Branch("chi2"   , &chi2         , "chi2/F"      , 32000);
+//     }
+//  --------------
+       float*  pixelprob_arr = new float       [fNthr*1152*576];
+       int*    threshold_arr = new int         [fNthr];
+       
+       TH1F *histos, *histo[12];
+       histos          = new TH1F( "test", "test"              , 255,0.,255.);
+       histo[0]        = new TH1F( "mean0"     , "mean"        , 510,0.,255.);
+       histo[1]        = new TH1F( "mean1"     , "mean1"       , 510,0.,255.);
+       histo[2]        = new TH1F( "mean2"     , "mean2"       , 510,0.,255.);
+       histo[3]        = new TH1F( "mean3"     , "mean3"       , 510,0.,255.);
+       histo[4]        = new TH1F( "sigma0", "sigma"   , 500,0.,100.);
+       histo[5]        = new TH1F( "sigma1", "sigma1"  , 500,0.,100.);
+       histo[6]        = new TH1F( "sigma2", "sigma2"  , 500,0.,100.);
+       histo[7]        = new TH1F( "sigma3", "sigma3"  , 500,0.,100.);
+       histo[8]        = new TH1F( "chi20"     , "chi2"        , 1000,0.,1.);
+       histo[9]        = new TH1F( "chi21"     , "chi21"       , 1000,0.,1.);
+       histo[10]       = new TH1F( "chi22"     , "chi22"       , 1000,0.,1.);
+       histo[11]       = new TH1F( "chi23"     , "chi23"       , 1000,0.,1.);
+       
+       TF1* erf = new TF1("erf","0.5*(1+TMath::Erf((-x+[0])/[1]))",0,100);
+       
+       float   mean = 0, sigma = 0, chi2 = 0;
+       int             chicount=0;
+       int             meanmin, meanmax;
+       float   meanmean;
+       float   vsigma;
+       float   vtmp=1;
+       int     column;
+       int             row;
+       int             matrix;
+       int             pixel;
+       float   MAXX[3] = {0, 0, 0};
+       double  MAXY[3] = {0, 0, 0};
+       
+//     ULong_t progress_tmp=-1;
+//     Float_t         progress;
+       
+       TCanvas* canv = new TCanvas("Error Function Fit","Error Function Fit",  50,100,750,300);
+       canv->Divide(3,1);
+       
+// Read TTree
+       for(int thr=0;thr<fNthr;thr++)
+       {
+               fTree->GetEntry(thr);
+               
+               for(int pix=0;pix<1152*576;pix++)
+               {
+                       pixelprob_arr[pix*fNthr+thr] = fPixelprob[pix];
+               }
+               
+               threshold_arr[thr] = (int)fThreshold;
+       }
+       
+// Fitting of Scurves
+       int*    RndPx;
+       int             pix;
+       int             nrpixels        = 1152*576;
+       
+       if(fPixSel)
+       {
+               nrpixels        = 4*fNRndPx;
+               RndPx           = new int[nrpixels];
+               
+               for(int i=0;i<fNRndPx;i++)
+               {
+                       pix             = fRndPx[i];
+                       row             = (int)(pix/288);
+                       column  = pix%288;
+                                       
+                       for(int j=0;j<4;j++)
+                       {
+                               RndPx[i*4+j] = 1152*row+column+288*j;
+                       }
+               }
+       }
+               
+       for(int i=0;i<nrpixels;i++)
+       {
+               if(!fPixSel)    { pix = i;                      }
+               else                    { pix = RndPx[i];       }
+//             progress = (Int_t)((pix*100)/(1152*576-1)*10);
+//             if(progress!=progress_tmp)      { print_progress( ((pix*100.)/(1152*576-1)) ); progress_tmp=progress;}          
+               
+               if( TMath::RMS(fNthr,&pixelprob_arr[pix*fNthr])!=0 )
+               {
+                       delete histos;
+                       histos  = new TH1F( "test", "test" , fNthr, threshold_arr[0],threshold_arr[fNthr-1]);
+// Estimate Fit Parameters
+                       meanmin=0;
+                       meanmax=255;
+                       
+                       for(int thr=0;thr<fNthr;thr++)
+                       {
+                               histos->Fill(threshold_arr[thr],pixelprob_arr[pix*fNthr+thr]);
+                               
+                               if( pixelprob_arr[pix*fNthr+thr]!=1 && meanmin==0       ) { meanmin=threshold_arr[thr]-1;       }
+                               if( pixelprob_arr[pix*fNthr+thr]==0 && vtmp!=0          ) { meanmax=threshold_arr[thr]; }
+                               vtmp = pixelprob_arr[pix*fNthr+thr];
+                       }
+                       
+                       vsigma          = (meanmax-meanmin)/2.;
+                       meanmean        = (meanmax+meanmin)/2.;
+                       erf->SetParameters(meanmean,vsigma);
+                       
+                       pixel   = pix;
+                       column  = pix%1152;
+                       row             = (int)(pix/1152);
+                       matrix  = int(column/288);
+                       
+//                     if( row!=0 && row!=1 && row!=573 && column<288)
+                       if( fMatrix[matrix] )
+                       {
+// Fit
+                               histos->Fit(erf,"QN");
+                       
+                               mean    = erf->GetParameter(0);
+                               sigma   = erf->GetParameter(1)/TMath::Sqrt(2);
+                               chi2    = erf->GetChisquare()/erf->GetNDF();
+// Check whether Fit Parameters are okay               
+                               chicount=0;
+                               
+                               if( mean<meanmin || mean>meanmax || sigma>75 || sigma<1 )
+                               {
+                                       chicount=0;
+                                       
+                                       while( (mean<meanmin || mean>meanmax || sigma>75 || sigma<0.0001) && chicount<10)
+                                       {
+                                               erf->SetParameters(meanmean,1.*(chicount+1));
+                                               histos->Fit(erf,"QMN");
+                                               pixel   = pix;
+                                               mean    = erf->GetParameter(0);
+                                               sigma   = erf->GetParameter(1)/TMath::Sqrt(2);
+                                               chi2    = erf->GetChisquare()/erf->GetNDF();
+                                               chicount++;
+                                               
+                                       }
+                               }
+                               
+                               histo[0+matrix]->Fill(mean);
+                               histo[4+matrix]->Fill(sigma);
+                               histo[8+matrix]->Fill(chi2);
+                               
+                               if( mean        > MAXX[0] )     { MAXX[0]=mean+1;       }
+                               if( sigma       > MAXX[1] )     { MAXX[1]=sigma+1;      }
+                               if( chi2        > MAXX[2] )     { MAXX[2]=chi2+0.01;    }
+                               
+//                             paraTree[matrix]->Fill();
+                       }
+                               
+                       if(i%100==0)
+                       {
+                               printf("\r Pixel: %6i - %3.1f %% - fit attempts:%2i - %6.2f %4.2f %6.5f", pix, 100.*i/(nrpixels), chicount, mean, sigma, chi2); fflush(stdout);
+                               
+                               if(i%5000==0)
+                               {
+                                       
+                                       if( histo[0]->GetBinContent(histo[0]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[0]->GetBinContent(histo[0]->GetMaximumBin())+1; }
+                                       if( histo[1]->GetBinContent(histo[1]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[1]->GetBinContent(histo[1]->GetMaximumBin())+1; }
+                                       if( histo[2]->GetBinContent(histo[2]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[2]->GetBinContent(histo[2]->GetMaximumBin())+1; }
+                                       if( histo[3]->GetBinContent(histo[3]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[3]->GetBinContent(histo[3]->GetMaximumBin())+1; }
+                                       
+                                       if( histo[4]->GetBinContent(histo[4]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[4]->GetBinContent(histo[4]->GetMaximumBin())+1; }
+                                       if( histo[5]->GetBinContent(histo[5]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[5]->GetBinContent(histo[5]->GetMaximumBin())+1; }
+                                       if( histo[6]->GetBinContent(histo[6]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[6]->GetBinContent(histo[6]->GetMaximumBin())+1; }
+                                       if( histo[7]->GetBinContent(histo[7]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[7]->GetBinContent(histo[7]->GetMaximumBin())+1; }
+                                       
+                                       if( histo[8]->GetBinContent(histo[8]->GetMaximumBin()) > MAXY[2] )              { MAXY[2] = histo[8]->GetBinContent(histo[8]->GetMaximumBin())+1; }
+                                       if( histo[9]->GetBinContent(histo[9]->GetMaximumBin()) > MAXY[2] )              { MAXY[2] = histo[9]->GetBinContent(histo[9]->GetMaximumBin())+1; }
+                                       if( histo[10]->GetBinContent(histo[10]->GetMaximumBin()) > MAXY[2] )    { MAXY[2] = histo[10]->GetBinContent(histo[10]->GetMaximumBin())+1; }
+                                       if( histo[11]->GetBinContent(histo[11]->GetMaximumBin()) > MAXY[2] )    { MAXY[2] = histo[11]->GetBinContent(histo[11]->GetMaximumBin())+1; }
+                                       
+                                       canv->cd(1);
+                                       histo[0]->SetLineColor(1);
+                                       histo[0]->SetStats(false);
+                                       histo[0]->Draw();
+                                       histo[0]->SetAxisRange(0,MAXX[0]);
+                                       histo[0]->SetMaximum(MAXY[0]);
+                                       histo[1]->SetLineColor(2);
+                                       histo[1]->SetStats(false);
+                                       histo[1]->Draw("same");
+                                       histo[2]->SetLineColor(3);
+                                       histo[2]->SetStats(false);
+                                       histo[2]->Draw("same");
+                                       histo[3]->SetLineColor(4);
+                                       histo[3]->SetStats(false);
+                                       histo[3]->Draw("same");
+                                       
+                                       canv->cd(2);
+                                       histo[4]->SetLineColor(1);
+                                       histo[4]->SetStats(false);
+                                       histo[4]->Draw();
+                                       histo[4]->SetAxisRange(0,MAXX[1]);
+                                       histo[4]->SetMaximum(MAXY[1]);
+                                       histo[5]->SetLineColor(2);
+                                       histo[5]->SetStats(false);
+                                       histo[5]->Draw("same");
+                                       histo[6]->SetLineColor(3);
+                                       histo[6]->SetStats(false);
+                                       histo[6]->Draw("same");
+                                       histo[7]->SetLineColor(4);
+                                       histo[7]->SetStats(false);
+                                       histo[7]->Draw("same");
+                                       
+                                       canv->cd(3);
+                                       histo[8]->SetLineColor(1);
+                                       histo[8]->SetStats(false);
+                                       histo[8]->Draw();
+                                       histo[8]->SetAxisRange(0,MAXX[2]);
+                                       histo[8]->SetMaximum(MAXY[2]);
+                                       histo[9]->SetLineColor(2);
+                                       histo[9]->SetStats(false);
+                                       histo[9]->Draw("same");
+                                       histo[10]->SetLineColor(3);
+                                       histo[10]->SetStats(false);
+                                       histo[10]->Draw("same");
+                                       histo[11]->SetLineColor(4);
+                                       histo[11]->SetStats(false);
+                                       histo[11]->Draw("same");
+       
+                                       canv->Update();
+                               }
+                       }
+               }
+       }
+       
+
+//     for(int ba=0;ba<4;ba++)
+//     {
+//             paraTree[ba]->Write("",TObject::kOverwrite);
+//     }
+       
+//     fout->Save();
+//     fout->Close();
+//     f->Close();
+       printf("\r Pixel: %6i - %3.1f %% - fit attempts:%2i - %6.2f %4.2f %6.5f", pix, 100., chicount, mean, sigma, chi2); fflush(stdout);
+       
+       if( histo[0]->GetBinContent(histo[0]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[0]->GetBinContent(histo[0]->GetMaximumBin())+1; }
+       if( histo[1]->GetBinContent(histo[1]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[1]->GetBinContent(histo[1]->GetMaximumBin())+1; }
+       if( histo[2]->GetBinContent(histo[2]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[2]->GetBinContent(histo[2]->GetMaximumBin())+1; }
+       if( histo[3]->GetBinContent(histo[3]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[3]->GetBinContent(histo[3]->GetMaximumBin())+1; }
+       
+       if( histo[4]->GetBinContent(histo[4]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[4]->GetBinContent(histo[4]->GetMaximumBin())+1; }
+       if( histo[5]->GetBinContent(histo[5]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[5]->GetBinContent(histo[5]->GetMaximumBin())+1; }
+       if( histo[6]->GetBinContent(histo[6]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[6]->GetBinContent(histo[6]->GetMaximumBin())+1; }
+       if( histo[7]->GetBinContent(histo[7]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[7]->GetBinContent(histo[7]->GetMaximumBin())+1; }
+       
+       if( histo[8]->GetBinContent(histo[8]->GetMaximumBin()) > MAXY[2] )              { MAXY[2] = histo[8]->GetBinContent(histo[8]->GetMaximumBin())+1; }
+       if( histo[9]->GetBinContent(histo[9]->GetMaximumBin()) > MAXY[2] )              { MAXY[2] = histo[9]->GetBinContent(histo[9]->GetMaximumBin())+1; }
+       if( histo[10]->GetBinContent(histo[10]->GetMaximumBin()) > MAXY[2] )    { MAXY[2] = histo[10]->GetBinContent(histo[10]->GetMaximumBin())+1; }
+       if( histo[11]->GetBinContent(histo[11]->GetMaximumBin()) > MAXY[2] )    { MAXY[2] = histo[11]->GetBinContent(histo[11]->GetMaximumBin())+1; }
+       
+       canv->cd(1);
+       histo[0]->SetLineColor(1);
+       histo[0]->SetStats(false);
+       histo[0]->Draw();
+       histo[0]->SetAxisRange(0,MAXX[0]);
+       histo[0]->SetMaximum(MAXY[0]);
+       histo[1]->SetLineColor(2);
+       histo[1]->SetStats(false);
+       histo[1]->Draw("same");
+       histo[2]->SetLineColor(3);
+       histo[2]->SetStats(false);
+       histo[2]->Draw("same");
+       histo[3]->SetLineColor(4);
+       histo[3]->SetStats(false);
+       histo[3]->Draw("same");
+       
+       canv->cd(2);
+       histo[4]->SetLineColor(1);
+       histo[4]->SetStats(false);
+       histo[4]->Draw();
+       histo[4]->SetAxisRange(0,MAXX[1]);
+       histo[4]->SetMaximum(MAXY[1]);
+       histo[5]->SetLineColor(2);
+       histo[5]->SetStats(false);
+       histo[5]->Draw("same");
+       histo[6]->SetLineColor(3);
+       histo[6]->SetStats(false);
+       histo[6]->Draw("same");
+       histo[7]->SetLineColor(4);
+       histo[7]->SetStats(false);
+       histo[7]->Draw("same");
+       
+       canv->cd(3);
+       histo[8]->SetLineColor(1);
+       histo[8]->SetStats(false);
+       histo[8]->Draw();
+       histo[8]->SetAxisRange(0,MAXX[2]);
+       histo[8]->SetMaximum(MAXY[2]);
+       histo[9]->SetLineColor(2);
+       histo[9]->SetStats(false);
+       histo[9]->Draw("same");
+       histo[10]->SetLineColor(3);
+       histo[10]->SetStats(false);
+       histo[10]->Draw("same");
+       histo[11]->SetLineColor(4);
+       histo[11]->SetStats(false);
+       histo[11]->Draw("same");
+
+       canv->Update();
+       cout<<"\n-------------"<<endl;
+}
+
+//####################################################################
+
+void Mi26Ana::fitscsingle() {                                                                                                                  // ok
+       
+       float*  pixelprob_arr = new float       [4*fNthr];
+       int*    threshold_arr = new int         [fNthr];
+       int             pix, row, col;
+       int             pixel[4];
+       float   mean = 0, sigma = 0, chi2 = 0;
+       int             chicount=0;
+       int             meanmin, meanmax;
+       float   meanmean;
+       float   vsigma;
+       float   vtmp=1;
+       
+       TH1F *histos[4];
+       TF1* erf = new TF1("erf","0.5*(1+TMath::Erf((-x+[0])/[1]))",0,100);
+//  --------------
+       col     = fNPx%288;
+       row     = (int)(fNPx/288);
+       
+       for(int i=0;i<4;i++)    { pixel[i]      = 1152*row+col+288*i; }
+       
+// Read TTree
+       for(int thr=0;thr<fNthr;thr++)
+       {
+               fTree->GetEntry(thr);
+               
+               for(pix=0;pix<4;pix++)
+               {
+                       pixelprob_arr[pix*fNthr+thr] = fPixelprob[pixel[pix]];
+               }
+               
+               threshold_arr[thr] = (int)fThreshold;
+       }
+       
+//     for(int i=0;i<4;i++)    { histos[i]     = new TH1F( Form("Matrix:%2i", i), Form("Matrix:%2i", i) , 255,0.,255.); }
+       for(int i=0;i<4;i++)    { histos[i]     = new TH1F( Form("Matrix:%2i", i), Form("Matrix:%2i", i) , fNthr, threshold_arr[0], threshold_arr[fNthr-1] ); }
+       
+       TCanvas* canv = new TCanvas( "Error Function Fit", Form("Error Function Fit: %i x %i",col,row),  50,100,250*fMatrixActive,300);
+       for(int pix=0;pix<4;pix++)
+       {
+// Estimate Fit Parameters
+               meanmin=0;
+               meanmax=255;
+               
+               for(int thr=0;thr<fNthr;thr++)
+               {
+                       histos[pix]->Fill(threshold_arr[thr],pixelprob_arr[pix*fNthr+thr]);
+                       
+                       if( pixelprob_arr[pix*fNthr+thr]!=1 && meanmin==0       ) { meanmin=threshold_arr[thr]-1;       }
+                       if( pixelprob_arr[pix*fNthr+thr]==0 && vtmp!=0          ) { meanmax=threshold_arr[thr]; }
+                       vtmp = pixelprob_arr[pix*fNthr+thr];
+               }
+               
+               vsigma          = (meanmax-meanmin)/2.;
+               meanmean        = (meanmax+meanmin)/2.;
+               erf->SetParameters(meanmean,vsigma);
+               
+               if( fMatrix[pix] )
+               {
+// Fit
+                       histos[pix]->Fit(erf,"Q");
+               
+                       mean    = erf->GetParameter(0);
+                       sigma   = erf->GetParameter(1)/TMath::Sqrt(2);
+                       chi2    = erf->GetChisquare()/erf->GetNDF();
+// Check whether Fit Parameters are okay               
+                       chicount=0;
+                       
+                       if( mean<meanmin || mean>meanmax || sigma>75 || sigma<1 )
+                       {
+                               chicount=0;
+                               
+                               while( (mean<meanmin || mean>meanmax || sigma>75 || sigma<0.0001) && chicount<10)
+                               {
+                                       erf->SetParameters(meanmean,1.*(chicount+1));
+                                       histos[pix]->Fit(erf,"QM");
+                                       mean    = erf->GetParameter(0);
+                                       sigma   = erf->GetParameter(1)/TMath::Sqrt(2);
+                                       chi2    = erf->GetChisquare()/erf->GetNDF();
+                                       chicount++;
+                                       
+                               }
+                       }
+                       printf("\r Pixel: %6i - fit attempts:%2i - %6.2f %4.2f %6.5f\n", pix, chicount, mean, sigma, chi2); fflush(stdout);
+               }
+       }
+       canv->Clear();
+       canv->Divide(fMatrixActive,1);
+       int cdi = 1;
+       for(int i=0;i<4;i++)
+       {       
+               if( fMatrix[i] )
+               {
+                       canv->cd(cdi);
+                       histos[i]->SetStats(false);
+                       histos[i]->Draw();
+                       cdi++;
+               }
+       }
+}
+
+//####################################################################
+
+void Mi26Ana::sumup() {                                                                                                                                        // ok
+       cout<<"-------------"<<endl;
+       cout<<"SUM UP:"<<endl;
+       
+       ULong_t progress_tmp=-1;
+       Float_t         progress;
+       int             column, row, matrix;
+       int*    RndPx;
+       int             pix;
+       int             nrpixels        = 1152*576;
+       
+       if(fPixSel)
+       {
+               nrpixels        = 4*fNRndPx;
+               RndPx           = new int[nrpixels];
+               
+               for(int i=0;i<fNRndPx;i++)
+               {
+                       pix             = fRndPx[i];
+                       row             = (int)(pix/288);
+                       column  = pix%288;
+                                       
+                       for(int j=0;j<4;j++)
+                       {
+                               RndPx[i*4+j] = 1152*row+column+288*j;
+                       }
+               }
+       }
+       
+       Float_t*        sum     = new Float_t   [nrpixels];
+       for(int i=0;i<nrpixels;i++) {sum[i]=0;}
+       
+       for(int nt=0;nt<fNthr;nt++)
+       {
+               progress = (Int_t)((nt*100)/(1152*576-1)*10);
+               if(progress!=progress_tmp)      { print_progress( ((nt*100.)/(1152*576-1)) ); progress_tmp=progress;}   
+               
+               fTree->GetEntry(nt);
+                               
+               for(int i=0;i<nrpixels;i++)
+               {
+                       if( !fPixSel )  { pix = i; }
+                       else                    { pix = RndPx[i]; }
+                       
+                       sum[i]+=fPixelprob[pix];
+               }
+       }
+       
+       TH1F *plot[4];
+       plot[0] =  new TH1F( "sum0","sum",2550,0,255);
+       plot[1] =  new TH1F( "sum1","sum1",2550,0,255);
+       plot[2] =  new TH1F( "sum2","sum2",2550,0,255);
+       plot[3] =  new TH1F( "sum3","sum3",2550,0,255);
+       TH2F* plot2 =  new TH2F( "sum2D0","sum2D",1152,0,1152,576,0,576);
+       
+       int MINX=fNthr,MAXX=0;
+       for(int i=0;i<nrpixels;i++)
+       {
+               if( !fPixSel )  { pix = i; }
+               else                    { pix = RndPx[i]; }
+                       
+               column  = (int)(pix%1152);
+               row             = (int)(pix/1152.);
+               matrix  = int(column/288);
+               
+               if( fMatrix[matrix] )
+               {
+                       if( sum[i] < MINX ) { MINX=sum[i]; }
+                       if( sum[i] > MAXX ) { MAXX=sum[i]; }
+                       
+                       plot[matrix]->Fill(sum[i]);
+                       plot2->Fill(column, row, sum[i]);
+               }
+               
+//             if(row==1)cout<<column<<" "<<row<<" "<<sum[pix]<<endl;
+       }
+       int MAXY = 0;
+       if( plot[0]->GetBinContent(plot[0]->GetMaximumBin()) > MAXY )           { MAXY = plot[0]->GetBinContent(plot[0]->GetMaximumBin())+1; }
+       if( plot[1]->GetBinContent(plot[1]->GetMaximumBin()) > MAXY )           { MAXY = plot[1]->GetBinContent(plot[1]->GetMaximumBin())+1; }
+       if( plot[2]->GetBinContent(plot[2]->GetMaximumBin()) > MAXY )           { MAXY = plot[2]->GetBinContent(plot[2]->GetMaximumBin())+1; }
+       if( plot[3]->GetBinContent(plot[3]->GetMaximumBin()) > MAXY )           { MAXY = plot[3]->GetBinContent(plot[3]->GetMaximumBin())+1; }
+       
+       TCanvas* cm2 = new TCanvas("SUM",Form("SUM: %s", fFilename), 50,100,250*2,300);
+       cm2->Divide(2,1);
+       cm2->cd(1);
+       plot[0]->SetStats(false);
+       plot[0]->SetAxisRange(MINX-5,MAXX+5);
+       plot[0]->SetMaximum(MAXY+10);
+       plot[0]->Draw();
+       cm2->cd(2);
+       plot2->SetStats(false);
+       plot2->Draw("colz");
+       
+       for(int i=1;i<4;i++)
+       {
+               cm2->cd(1);
+               plot[i]->SetStats(false);
+               plot[i]->SetLineColor(i);
+               plot[i]->Draw("same");
+       }
+       
+       
+       
+       
+       
+       cout<<"\r ...done for "<<fNthr<<" thresholds!                                       "<<endl;
+       cout<<"-------------"<<endl;
+//     f->Close();
+       cout<<"-------------"<<endl;
+}
+
+//####################################################################
+
+void Mi26Ana::fakes() {                                                                                                                                        // ok
+       
+       ULong_t progress_tmp=-1;
+       Float_t         progress;
+//  --------------
+       float*  pixelprob_arr = new float       [fNthr*1152*576];       
+// Read TTree
+       for(int thr=0;thr<fNthr;thr++)
+       {
+               progress = (Int_t)((thr*100)/(fNthr-1)*10);
+               if(progress!=progress_tmp)      { print_progress( ((thr*100.)/(fNthr-1)) ); progress_tmp=progress;}
+               
+               fTree->GetEntry(thr);
+               
+               for(int pix=0;pix<1152*576;pix++)
+               {
+                       pixelprob_arr[pix*fNthr+thr] = fPixelprob[pix];
+               }
+               
+//             threshold_arr[thr] = (int)fThreshold;
+       }
+       
+// Check whether RndPix
+       int             column, row, matrix;
+       int*    RndPx;
+       int             pix;
+       int             nrpixels        = 1152*576;
+       
+       if(fPixSel)
+       {
+               nrpixels        = 4*fNRndPx;
+               RndPx           = new int[nrpixels];
+               
+               for(int i=0;i<fNRndPx;i++)
+               {
+                       pix             = fRndPx[i];
+                       row             = (int)(pix/288);
+                       column  = pix%288;
+                                       
+                       for(int j=0;j<4;j++)
+                       {
+                               RndPx[i*4+j] = 1152*row+column+288*j;
+                       }
+               }
+       }
+       
+// Calc RMS
+       TH1F *plot[4];
+       plot[0] =  new TH1F( "RMS0","RMS",1000,-1,1);
+       plot[1] =  new TH1F( "RMS1","RMS1",1000,-1,1);
+       plot[2] =  new TH1F( "RMS2","RMS2",1000,-1,1);
+       plot[3] =  new TH1F( "RMS3","RMS3",1000,-1,1);
+       TH2F* plot2 =  new TH2F( "RMS2D0","RMS2D",1152,0,1152,576,0,576);
+       TH2F* plot2a =  new TH2F( "RMS","RMS==0",1152,0,1152,576,0,576);
+       
+       int MINX=fNthr,MAXX=0;
+       
+       progress_tmp=-1;
+       Float_t*        mean    = new Float_t   [nrpixels];
+       for(int i=0;i<nrpixels;i++) {mean[i]=0;}
+       
+       for(int i=0;i<nrpixels;i++)
+       {
+//             progress = (Int_t)((i*100)/(nrpixels-1)*10);
+//             if(progress!=progress_tmp)      { print_progress( ((i*100.)/(nrpixels-1)) ); progress_tmp=progress;}
+               
+               if( !fPixSel )  { pix = i; }
+               else                    { pix = RndPx[i]; }
+               
+               mean[i] = TMath::RMS(fNthr,&pixelprob_arr[pix*fNthr]);
+               
+               column  = (int)(pix%1152);
+               row             = (int)(pix/1152.);
+               matrix  = int(column/288);
+               
+               if( fMatrix[matrix] )
+               {
+                       if( mean[i] < MINX ) { MINX=mean[i]; }
+                       if( mean[i] > MAXX ) { MAXX=mean[i]; }
+                       
+                       plot[matrix]->Fill( mean[i] );
+                       plot2           ->Fill( column, row, mean[i] );
+                       
+                       if( mean[i]==0 && row!=573 && row!=0)
+                       {
+                               if(pixelprob_arr[pix*fNthr]==0) {pixelprob_arr[pix*fNthr]=0.01;}
+                               plot2a          ->Fill( column, row, pixelprob_arr[pix*fNthr] );
+                               cout<<"\r"<<column<<"\t"<<row<<"\t"<<pixelprob_arr[pix*fNthr]<<"\t"<<mean[i]  <<endl;
+                       }
+               }
+               
+       }
+       
+       int MAXY = 0;
+       if( plot[0]->GetBinContent(plot[0]->GetMaximumBin()) > MAXY )           { MAXY = plot[0]->GetBinContent(plot[0]->GetMaximumBin())+1; }
+       if( plot[1]->GetBinContent(plot[1]->GetMaximumBin()) > MAXY )           { MAXY = plot[1]->GetBinContent(plot[1]->GetMaximumBin())+1; }
+       if( plot[2]->GetBinContent(plot[2]->GetMaximumBin()) > MAXY )           { MAXY = plot[2]->GetBinContent(plot[2]->GetMaximumBin())+1; }
+       if( plot[3]->GetBinContent(plot[3]->GetMaximumBin()) > MAXY )           { MAXY = plot[3]->GetBinContent(plot[3]->GetMaximumBin())+1; }
+       
+       TCanvas* cm2 = new TCanvas("RMS",Form("RMS: %s", fFilename), 50,100,250*2,300*2);
+       cm2->Divide(2,2);
+       cm2->cd(1);
+       plot[0]->SetStats(false);
+       plot[0]->SetAxisRange(MINX,MAXX+1);
+       plot[0]->SetMaximum(MAXY+10);
+       plot[0]->Draw();
+       cm2->cd(2);
+       plot2->SetStats(false);
+       plot2->Draw("colz");
+       
+       cm2->cd(4);
+       plot2a->SetStats(false);
+       plot2a->Draw("colz");
+       
+       for(int i=1;i<4;i++)
+       {
+               cm2->cd(1);
+               plot[i]->SetStats(false);
+               plot[i]->SetLineColor(i);
+               plot[i]->Draw("same");
+       }
+       
+       
+       
+       
+       
+       cout<<"\r ...done for "<<fNthr<<" thresholds!                                       "<<endl;
+       cout<<"-------------"<<endl;
+//     f->Close();
+       cout<<"-------------"<<endl;
+}
+
+//####################################################################
+
+void Mi26Ana::empty1() {
+
+}
+
+//####################################################################
+
+void Mi26Ana::empty2() {
+
+}
+
+//####################################################################
+
+void Mi26Ana::sum() {                                                                                                                                  // ok
+//     Float_t*        sum     = new Float_t   [1152*576];
+//     for(int i=0;i<1152*576;i++) {sum[i]=0;}
+// //  if (nthr % 4 != 0){
+// //          printf("Error: %d not divisible by 4!", nthr);
+// //          exit(1);
+// //  }
+// //  nthr = nthr/4;
+//     
+//     for(int i=0;i<nthr;i++)
+//     {
+//             tree->GetEntry(i);
+//                             
+//             for(int pix=0;pix<1152*576;pix++)
+//             {
+//                     sum[pix]+=pixelprob[pix];
+//             }
+//     }
+//     
+//     float column, row;
+//     
+//     TH1F* plot =  new TH1F( "sum","sum",2550,0,255);
+//     TH2F* plot2 =  new TH2F( "sum2","sum2",1152,0,1152,576,0,576);
+//     
+//     for(int pix=0;pix<1152*576;pix++)
+//     {
+//             column  = (int)(pix%1152);
+//             row             = (int)(pix/1152.);
+//             
+//             plot->Fill(sum[pix]);
+//             plot2->Fill(column, row, sum[pix]);
+//             
+//             if(row==1)cout<<column<<" "<<row<<" "<<sum[pix]<<endl;
+//     }
+//     
+//     TCanvas* cm2 = new TCanvas("a","<", 50,100,900,600);
+//     cm2->Divide(2,1);
+//     cm2->cd(1);
+//     plot->Draw();
+//     cm2->cd(2);
+//     plot2->Draw("colz");
+//     
+//     cout<<"\r ...done for "<<nthr<<" thresholds!                                       "<<endl;
+//     cout<<"-------------"<<endl;
+// //  f->Close();
+//     cout<<"-------------"<<endl;
+       
+       
+}
+
+//####################################################################
+//####################################################################
+//####################################################################
+
+bool Mi26Ana::readPxFile() {
+       
+       ifstream myfile( fInputPxFile, std::ifstream::in );
+       
+       if(!myfile.good())      return 0;
+       
+       myfile >> fNRndPx;
+       fRndPx = new int[fNRndPx];
+       
+       int count=0;
+       int     pix;
+       
+       while( myfile.good() )
+       {
+               myfile >> pix;
+               if( count<fNRndPx )     { fRndPx[count] = pix; }
+               count++;
+       }
+       
+       if( count==fNRndPx )    { return 1; }
+       else                                    { return 0; }
+}
+
+//####################################################################
\ No newline at end of file
diff --git a/s-curves/analysis_gui/ANA/Mi26Ana.h b/s-curves/analysis_gui/ANA/Mi26Ana.h
new file mode 100644 (file)
index 0000000..3c42044
--- /dev/null
@@ -0,0 +1,82 @@
+#ifndef Mi26Ana_H
+#define Mi26Ana_H
+
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <iomanip> 
+#include <sstream>
+
+#include "TCanvas.h"
+#include "TRootCanvas.h"
+#include <TFile.h>
+#include <TH1F.h>
+#include <TH2F.h>
+#include "TH1.h"
+#include "TF1.h"
+#include "TSystem.h"
+#include <TTree.h>
+#include "TROOT.h"
+#include "TMath.h"
+// #include "TSystem.h"
+
+using namespace std;
+
+class Mi26Ana {
+       
+private:
+       void rewrite            ();
+       void plotsc                     ();
+       void plotscsingle       ();
+       void fitsc                      ();
+       void fitscsingle        ();
+       void sumup                      ();
+       void fakes                      ();
+       void empty1                     ();
+       void empty2                     ();
+       
+       void sum                ();
+//     void rewrite    ();
+       
+       bool readPxFile ();
+       
+       TString fInputRootFile;
+       TString fInputPxFile;
+       int             fNRndPx;
+       int*    fRndPx;
+       int             fNPx;
+       int             fCode;
+       
+       TFile*          fFile;
+       TTree*          fTree;
+       UShort_t        fThreshold;
+       Float_t*        fPixelprob;
+//     UShort_t*       fFrames;
+       int                     fNthr;
+       
+       bool            fPixSel;
+       bool            fMatrix[4];
+       int                     fMatrixActive;
+       char            fFilename[256];
+       
+public:
+       Mi26Ana();
+       Mi26Ana( TString, TString, int, int, int );
+       ~Mi26Ana();
+       
+       void Exec               (int);
+       
+       void setInFile  (TString name)  { fInputRootFile= name; }
+       void setPxFile  (TString name)  { fInputPxFile  = name; }
+       void setNRndPx  (int val)               { fNRndPx               = val;  }
+       void setNPx             (int val)               { fNPx                  = val;  }
+       void setCode    (int val)               { fCode                 = val;  }
+};
+
+#endif // Mi26Ana_H
\ No newline at end of file
diff --git a/s-curves/analysis_gui/ANA/ana.C b/s-curves/analysis_gui/ANA/ana.C
new file mode 100644 (file)
index 0000000..2319bde
--- /dev/null
@@ -0,0 +1,524 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <algorithm>
+#include <TTree.h>
+#include <TFile.h>
+#include "TROOT.h"
+#include "TObject.h"
+#include "TBrowser.h"
+#include "TH1F.h"
+#include "TMath.h"
+#include "TF1.h"
+#include "TH2F.h"
+#include "TCanvas.h"
+#include "TGraph.h"
+
+
+void plotsc();
+//####################################################################
+
+void ana( ) {
+       
+       plotsc();
+
+       
+//     if(i==0)        { plotsc(); }
+}
+
+void sum() {
+       cout<<"-------------"<<endl;
+       cout<<"SUM UP:"<<endl;
+       UShort_t        threshold;
+       Float_t*        pixelprob       = new Float_t   [1152*576];
+       UShort_t*       frames          = new UShort_t  [576];
+       
+       Float_t*        sum     = new Float_t   [1152*576];
+       
+       for(int i=0;i<1152*576;i++) {sum[i]=0;}
+       
+//  File IN
+       TString RootFile = "messung.root";
+       TFile*  f               = new TFile(RootFile);
+       TTree* tree     = (TTree*)f->Get( "scurvesall" );
+       
+       tree -> SetBranchAddress        ("threshold"    , &threshold    );
+       tree -> SetBranchAddress        ("pixelprob"    , pixelprob     );
+       tree -> SetBranchAddress        ("frames"       , frames                );
+
+//  --------------
+       Int_t nthr = tree->GetEntries();
+//     if (nthr % 4 != 0){
+//             printf("Error: %d not divisible by 4!", nthr);
+//             exit(1);
+//     }
+//     nthr = nthr/4;
+       
+       for(int i=0;i<nthr;i++)
+       {
+               tree->GetEntry(i);
+                               
+               for(int pix=0;pix<1152*576;pix++)
+               {
+                       sum[pix]+=pixelprob[pix];
+               }
+       }
+       
+       float column, row;
+       
+       TH1F* plot =  new TH1F( "sum","sum",2550,0,255);
+       TH2F* plot2 =  new TH2F( "sum2","sum2",1152,0,1152,576,0,576);
+       
+       for(int pix=0;pix<1152*576;pix++)
+       {
+               column  = (int)(pix%1152);
+               row             = (int)(pix/1152.);
+               
+               plot->Fill(sum[pix]);
+               plot2->Fill(column, row, sum[pix]);
+               
+               if(row==1)cout<<column<<" "<<row<<" "<<sum[pix]<<endl;
+       }
+       
+       TCanvas* cm2 = new TCanvas("a","<", 50,100,900,600);
+       cm2->Divide(2,1);
+       cm2->cd(1);
+       plot->Draw();
+       cm2->cd(2);
+       plot2->Draw("colz");
+       
+       cout<<"\r ...done for "<<nthr<<" thresholds!                                       "<<endl;
+       cout<<"-------------"<<endl;
+//     f->Close();
+       cout<<"-------------"<<endl;
+}
+
+//####################################################################
+
+void rewrite() {
+       cout<<"-------------"<<endl;
+       cout<<"REWRITE FILE:"<<endl;
+       UShort_t        threshold;
+       Int_t*          pixel           = new Int_t             [1152*576];
+       Float_t*                pixelprob       = new Float_t   [1152*576];
+       Float_t*                pixelprobout    = new Float_t   [1152*576];
+       UShort_t*       frames          = new UShort_t  [576];
+       
+       for(int i=0;i<1152*576;i++)     { pixel[i]=i; }
+       
+//  File IN
+       TString RootFile = "output.root";
+       TFile*  f               = new TFile(RootFile);
+       TTree* tree     = (TTree*)f->Get( "scurvesall" );
+       
+       tree -> SetBranchAddress        ("threshold"    , &threshold    );
+       tree -> SetBranchAddress        ("pixelprob"    , pixelprob     );
+       tree -> SetBranchAddress        ("frames"       , frames                );
+
+//  File OUT
+       TString RootFileOut = "outputsc.root";
+       TFile*  fout = new TFile(RootFileOut,"RECREATE");
+       TTree* treeout = new TTree( "scurvesall" , "scurvesall" );
+       
+       treeout -> Branch("threshold"   , &threshold            , "threshold/s"                 , 32000);
+//     treeout -> Branch("pixel"               , pixel                 , "pixel[663552]/I"                     , 32000);
+       treeout -> Branch("pixelprob"   , pixelprobout  , "pixelprob[663552]/F" , 32000);
+//  --------------
+       Int_t nthr = tree->GetEntries();
+       if (nthr % 4 != 0){
+               printf("Error: %d not divisible by 4!", nthr);
+               exit(1);
+       }
+       nthr = nthr/4;
+       
+       for(int i=0;i<nthr;i++)
+       {
+               for(int j=0;j<4;j++)
+               {
+                       tree->GetEntry(i+j*nthr);
+                       
+                       for(int pix=0;pix<1152*576;pix++)
+                       {
+                               if( pix%1152>=1152/4*(j) && pix%1152<1152/4*(j+1) )
+                               {
+                                       pixelprobout[pix] = pixelprob[pix];
+                               }
+                       }
+               }
+               
+               cout<<"\rThreshold: "<<threshold<<" ( " <<i+1<<" of "<<nthr<<" ) ";
+               cout.flush();
+               treeout->Fill();
+       }
+       cout<<"\r ...done!                                       "<<endl;
+       cout<<"-------------"<<endl;
+       printf("\r Save File!\n");
+       treeout -> Write("",TObject::kOverwrite);
+       fout->Save();
+       fout->Close();
+       f->Close();
+       cout<<"-------------"<<endl;
+}
+
+//####################################################################
+
+void plotsc() {
+       
+       UShort_t        threshold;
+//     Int_t*          pixel           = new Int_t             [1152*576];
+       Float_t*                pixelprob       = new Float_t   [1152*576];
+       
+//  File IN
+       TString RootFile = "/local/samir/data/G03_testmessung_01.root";
+       TFile*  f               = new TFile(RootFile);
+       TTree* tree     = (TTree*)f->Get( "scurvesall" );
+       
+       tree -> SetBranchAddress        ("threshold"    , &threshold    );
+//     tree -> SetBranchAddress        ("pixel"                , pixel );
+       tree -> SetBranchAddress        ("pixelprob"    , pixelprob     );
+//  --------------
+       Int_t nthr = tree->GetEntries();
+       
+       int row, column;
+       int matrix;
+       
+       TH1F* plot[1152*576];
+       for(int i=0;i<1152*576;i++)
+       {
+               plot[i] = new TH1F( Form("plot%i",i), Form("plot%i",i), nthr,0,255);
+       }
+       
+       TH2F * ploti[4];
+       for(int i=0;i<4;i++)
+       {       
+               ploti[i] = new TH2F( Form("ploti%i",i), Form("ploti%i",i), nthr,0,255, 500,0,1.05);
+       }
+       
+       for(int i=0;i<nthr;i++)
+       {
+               tree->GetEntry(i);
+               
+               for(int pix=0;pix<1152*576;pix++)
+               {
+                       column  = pix%1152;
+                       row             = (int)(pix/1152);
+                       
+                       matrix = int(column/288);
+               
+                       plot[pix] ->Fill(threshold,pixelprob[pix]);
+                       
+                       if( row!=0 && row!=573 )
+                       {
+                               ploti[matrix] ->Fill(threshold,pixelprob[pix]);
+                       }
+                       
+                       if(pix==1152) {         cout<<threshold<<"\t"<<pix<<"\t"<<pixelprob[1152]<<"\t"<<endl; }
+               }
+       }
+       
+       TCanvas* cm2 = new TCanvas("a","<", 50,100,900,600);
+       cm2->Divide(4,1);
+       
+       /*
+       bool FIRST[4]= {0,0,0,0};
+       for(int pix=0;pix<1152*576;pix++)
+       {
+               
+               column  = pix%1152;
+               row             = (int)(pix/1152);
+               
+               matrix = int(column/288);
+               
+               if(1)           // Choose your conditions for which pixel you want to plot the scurves
+               {
+                       
+                       if( row!=0 && row!=573 )
+                       {
+                               cm2->cd(matrix+1);
+                               
+       //                      if(row<288)
+       //                      {
+                                       plot[pix]->SetLineColor(2);
+       //                      }
+       //                      else
+       //                      {
+       //                              plot[pix]->SetLineColor(3);
+       //                      }
+                               
+                               if( FIRST[matrix] )
+                               {
+                                       plot[pix]->Draw("same");
+                               }
+                               else
+                               {
+                                       plot[pix]->Draw();
+                                       FIRST[matrix] = 1;
+                               }
+                       }
+               }
+       }
+       cm2->SaveAs("file.pdf");
+       */
+       
+       
+       for(int i=0;i<4;i++)
+       {
+               cm2->cd(i+1);
+               ploti[i]->Draw();
+       }
+       
+//     f->Close();
+}
+
+//####################################################################
+
+void calcpara() {
+       
+       UShort_t        threshold;
+       Int_t           pixel, row, column;
+//     Int_t*          pixel           = new Int_t             [1152*576];
+       Float_t*        pixelprob       = new Float_t   [1152*576];
+       Float_t         mean, sigma, chi2;
+       
+//  File IN
+//     TString RootFile = "outputsc.root";
+       TString RootFile = "messung.root";
+       TFile*  f               = new TFile(RootFile);
+       TTree* tree     = (TTree*)f->Get( "scurvesall" );
+       
+       tree -> SetBranchAddress        ("threshold"    , &threshold    );
+//     tree -> SetBranchAddress        ("pixel"                , pixel                 );
+       tree -> SetBranchAddress        ("pixelprob"    , pixelprob             );
+       
+//  File OUT
+       TString RootFileOut = "outputpara2.root";
+//     TFile*  fout = new TFile(RootFileOut,"RECREATE");
+       TTree* paraTree[4];
+       
+       for(int ba=0;ba<4;ba++)
+       {
+               paraTree[ba] = new TTree( Form("para%i",ba), Form("para%i",ba));
+               paraTree[ba] -> Branch("pixel"  , &pixel        , "pixel/i"     , 32000);
+               paraTree[ba] -> Branch("row"    , &row          , "row/i"       , 32000);
+               paraTree[ba] -> Branch("column" , &column       , "column/F"    , 32000);
+               paraTree[ba] -> Branch("mean"   , &mean         , "mean/F"      , 32000);
+               paraTree[ba] -> Branch("sigma"  , &sigma        , "sigma/F"     , 32000);
+               paraTree[ba] -> Branch("chi2"   , &chi2         , "chi2/F"      , 32000);
+       }
+//  --------------
+       Int_t entries = tree->GetEntries();
+       
+       printf("\n-------------\n");
+       printf("Found thresholds: %i\n",entries);
+       printf("-------------\n");
+       
+       Float_t*        pixelprob_arr = new Float_t[entries*1152*576];
+       Int_t*  threshold_arr = new Int_t[entries];
+       
+       TH1F *histos, *histo[12];
+       histos  = new TH1F( "test", "test" , entries,0.,255.);
+       histo[0]        = new TH1F( "mean0"     , "mean0"       , 2550,0.,255.);
+       histo[1]        = new TH1F( "mean1"     , "mean1"       , 2550,0.,255.);
+       histo[2]        = new TH1F( "mean2"     , "mean2"       , 2550,0.,255.);
+       histo[3]        = new TH1F( "mean3"     , "mean3"       , 2550,0.,255.);
+       histo[4]        = new TH1F( "sigma0", "sigma0"  , 1000,0.,100.);
+       histo[5]        = new TH1F( "sigma1", "sigma1"  , 1000,0.,100.);
+       histo[6]        = new TH1F( "sigma2", "sigma2"  , 1000,0.,100.);
+       histo[7]        = new TH1F( "sigma3", "sigma3"  , 1000,0.,100.);
+       histo[8]        = new TH1F( "chi20"     , "chi20"       , 1000,0.,1.);
+       histo[9]        = new TH1F( "chi21"     , "chi21"       , 1000,0.,1.);
+       histo[10]       = new TH1F( "chi22"     , "chi22"       , 1000,0.,1.);
+       histo[11]       = new TH1F( "chi23"     , "chi23"       , 1000,0.,1.);
+       
+       TF1* erf = new TF1("erf","0.5*(1+TMath::Erf((-x+[0])/[1]))",0,100);
+       
+       int chicount=0;
+       int meanmin, meanmax;
+       float meanmean;
+       float vsigma;
+       float vtmp=1;
+//     int  column;
+//     int row;
+       int matrix;
+       float MAXX[3] = {0, 0, 0};
+       double MAXY[3] = {0, 0, 0};
+       
+       TCanvas* canv = new TCanvas("sc","sc", 50,100,900,600);
+       canv->Divide(3,1);
+
+       printf("Perform fitting of S-Curces:\n");
+               
+       for(int thr=0;thr<entries;thr++)
+       {
+               tree->GetEntry(thr);
+               
+               for(int pix=0;pix<1152*576;pix++)
+               {
+                       pixelprob_arr[pix*entries+thr] = pixelprob[pix];
+               }
+               
+               threshold_arr[thr] = (int)threshold;
+               
+       }
+       
+       for(int pix=0;pix<1152*576;pix++)
+       {
+//             if(pix%100==0) {
+//                     printf("\r -  %6.1f %% - %5i  -", 100.*pix/(1152*576), pix);
+// //                  canv->Update();
+//                     fflush(stdout);
+//             }
+               
+               if( TMath::RMS(entries,&pixelprob_arr[pix*entries])!=0 )
+               {
+                       delete histos;
+                       histos  = new TH1F( "test", "test" , entries,0.,255.);
+                       
+                       meanmin=0;
+                       meanmax=255;
+                       
+                       for(int thr=0;thr<entries;thr++)
+                       {
+                               histos->Fill(threshold_arr[thr],pixelprob_arr[pix*entries+thr]);
+                               
+                               if( pixelprob_arr[pix*entries+thr]!=1 && meanmin==0             ) { meanmin=threshold_arr[thr]-1;       }
+                               if( pixelprob_arr[pix*entries+thr]==0 && vtmp!=0                ) { meanmax=threshold_arr[thr]; }
+                               vtmp = pixelprob_arr[pix*entries+thr];
+                       }
+                       
+                       vsigma          = (meanmax-meanmin)/2.;
+                       meanmean        = (meanmax+meanmin)/2.;
+                       erf->SetParameters(meanmean,vsigma);
+                       
+                       pixel   = pix;
+                       column  = pix%1152;
+                       row             = (int)(pix/1152);
+                       matrix  = int(column/288);
+                       
+                       if( row!=0 && row!=1 && row!=573 && column<288)
+                       {
+                               histos->Fit(erf,"QN");
+                       
+                               mean    = erf->GetParameter(0);
+                               sigma   = erf->GetParameter(1)/TMath::Sqrt(2);
+                               chi2    = erf->GetChisquare()/erf->GetNDF();
+                               
+                               chicount=0;
+                               
+                               if( mean<meanmin || mean>meanmax || sigma>75 || sigma<1 )
+                               {
+                                       chicount=0;
+                                       //printf("\r-----                                       \n");
+                                       //printf("%7i (%10i) %10.2f (%10i) %10.2f (%10f) %10.3f\n", pixel, meanmin, mean,meanmax, sigma,vsigma, chi2);
+                                       
+                                       while( (mean<meanmin || mean>meanmax || sigma>75 || sigma<0.0001) && chicount<10)
+                                       {
+                                               erf->SetParameters(meanmean,1.*(chicount+1));
+                                               histos->Fit(erf,"QMN");
+                                               pixel   = pix;
+                                               mean    = erf->GetParameter(0);
+                                               sigma   = erf->GetParameter(1)/TMath::Sqrt(2);
+                                               chi2    = erf->GetChisquare()/erf->GetNDF();
+                                               chicount++;
+                                               
+       //                                      printf("%7i (%10i) %10.2f (%10i) %10.2f (%10f) %10.3f\n", pixel, meanmin, mean,meanmax, sigma,vsigma, chi2);
+                                       }
+                               }
+                               
+                               histo[0+matrix]->Fill(mean);
+                               histo[4+matrix]->Fill(sigma);
+                               histo[8+matrix]->Fill(chi2);
+                               
+                               if( mean        > MAXX[0] )     { MAXX[0]=mean+1;       }
+                               if( sigma       > MAXX[1] )     { MAXX[1]=sigma+1;      }
+                               if( chi2        > MAXX[2] )     { MAXX[2]=chi2+0.01;    }
+                               
+                               if(pix%100==0)
+                               {
+                                       printf("\r Pixel: %5i - %6.1f %% - fit attempts: %5i - %6.2f %6.2f %6.5f", pix, 100.*pix/(1152*576), chicount, mean, sigma, chi2); fflush(stdout);
+                                       
+                                       if(pix%5000==0)
+                                       {
+                                               
+                                               if( histo[0]->GetBinContent(histo[0]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[0]->GetBinContent(histo[0]->GetMaximumBin())+1; }
+                                               if( histo[1]->GetBinContent(histo[1]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[1]->GetBinContent(histo[1]->GetMaximumBin())+1; }
+                                               if( histo[2]->GetBinContent(histo[2]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[2]->GetBinContent(histo[2]->GetMaximumBin())+1; }
+                                               if( histo[3]->GetBinContent(histo[3]->GetMaximumBin()) > MAXY[0] )              { MAXY[0] = histo[3]->GetBinContent(histo[3]->GetMaximumBin())+1; }
+                                               
+                                               if( histo[4]->GetBinContent(histo[4]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[4]->GetBinContent(histo[4]->GetMaximumBin())+1; }
+                                               if( histo[5]->GetBinContent(histo[5]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[5]->GetBinContent(histo[5]->GetMaximumBin())+1; }
+                                               if( histo[6]->GetBinContent(histo[6]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[6]->GetBinContent(histo[6]->GetMaximumBin())+1; }
+                                               if( histo[7]->GetBinContent(histo[7]->GetMaximumBin()) > MAXY[1] )              { MAXY[1] = histo[7]->GetBinContent(histo[7]->GetMaximumBin())+1; }
+                                               
+                                               if( histo[8]->GetBinContent(histo[8]->GetMaximumBin()) > MAXY[2] )              { MAXY[2] = histo[8]->GetBinContent(histo[8]->GetMaximumBin())+1; }
+                                               if( histo[9]->GetBinContent(histo[9]->GetMaximumBin()) > MAXY[2] )              { MAXY[2] = histo[9]->GetBinContent(histo[9]->GetMaximumBin())+1; }
+                                               if( histo[10]->GetBinContent(histo[10]->GetMaximumBin()) > MAXY[2] )    { MAXY[2] = histo[10]->GetBinContent(histo[10]->GetMaximumBin())+1; }
+                                               if( histo[11]->GetBinContent(histo[11]->GetMaximumBin()) > MAXY[2] )    { MAXY[2] = histo[11]->GetBinContent(histo[11]->GetMaximumBin())+1; }
+                                               
+                                               canv->cd(1);
+                                               histo[0]->SetLineColor(1);
+                                               histo[0]->Draw();
+                                               histo[0]->SetAxisRange(0,MAXX[0]);
+                                               histo[0]->SetMaximum(MAXY[0]);
+                                               histo[1]->SetLineColor(2);
+                                               histo[1]->Draw("same");
+                                               histo[2]->SetLineColor(3);
+                                               histo[2]->Draw("same");
+                                               histo[3]->SetLineColor(4);
+                                               histo[3]->Draw("same");
+                                               
+                                               canv->cd(2);
+                                               histo[4]->SetLineColor(1);
+                                               histo[4]->Draw();
+                                               histo[4]->SetAxisRange(0,MAXX[1]);
+                                               histo[4]->SetMaximum(MAXY[1]);
+                                               histo[5]->SetLineColor(2);
+                                               histo[5]->Draw("same");
+                                               histo[6]->SetLineColor(3);
+                                               histo[6]->Draw("same");
+                                               histo[7]->SetLineColor(4);
+                                               histo[7]->Draw("same");
+                                               
+                                               canv->cd(3);
+                                               histo[8]->SetLineColor(1);
+                                               histo[8]->Draw();
+                                               histo[8]->SetAxisRange(0,MAXX[2]);
+                                               histo[8]->SetMaximum(MAXY[2]);
+                                               histo[9]->SetLineColor(2);
+                                               histo[9]->Draw("same");
+                                               histo[10]->SetLineColor(3);
+                                               histo[10]->Draw("same");
+                                               histo[11]->SetLineColor(4);
+                                               histo[11]->Draw("same");
+               
+                                               canv->Update();
+                                       }
+                               }
+                               
+                               paraTree[matrix]->Fill();
+                       }
+               }
+       }
+       
+
+       for(int ba=0;ba<4;ba++)
+       {
+               paraTree[ba]->Write("",TObject::kOverwrite);
+       }
+       
+//     fout->Save();
+//     fout->Close();
+//     f->Close();
+       cout<<"\n-------------"<<endl;
+}
+
+//####################################################################
+
+// void ana() {
+// 
+// //  rewrite();
+//             plotsc();
+// //  calcpara();
+// }
+
+//####################################################################
\ No newline at end of file
diff --git a/s-curves/analysis_gui/ANA/help.h b/s-curves/analysis_gui/ANA/help.h
new file mode 100644 (file)
index 0000000..5ee6558
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef HELP_H
+#define HELP_H
+
+#include <iostream>
+#include <cstdlib>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "TStopwatch.h"
+
+//####################################################################
+
+Int_t print_progress(Float_t ProgressInPercent) {
+       
+       Int_t nCharacter = printf("\r [");
+       Int_t iBlock;
+       
+       for( iBlock=0; iBlock<ProgressInPercent/2; ++iBlock )
+       {
+               putchar( '=' );
+               nCharacter++;
+       }
+       
+       for( ; iBlock<100/2; ++iBlock )
+       {
+               putchar( ' ' );
+               nCharacter++;
+       }
+       
+//     Int_t sec       = TimeInSec%60;
+//     Int_t min       = TimeInSec/60;
+//     Int_t hours     = TimeInSec/3600;
+       
+       nCharacter += printf( "] %4.0f%%", ProgressInPercent);
+       fflush( stdout );
+       
+       if((Int_t)ProgressInPercent==100) 
+       {
+               printf("\r");
+               for(Int_t i=0; i<nCharacter; i++)
+               {
+                       putchar( ' ' );
+               }
+               printf("\r ... done! \n");
+       }
+       
+       return nCharacter;
+}
+
+//####################################################################
+
+Int_t print_progress(Float_t ProgressInPercent, Int_t TimeInSec) {
+       
+       Int_t nCharacter = printf("\r [");
+       Int_t iBlock;
+       
+       for( iBlock=0; iBlock<ProgressInPercent/2; ++iBlock )
+       {
+               putchar( '=' );
+               nCharacter++;
+       }
+       
+       for( ; iBlock<100/2; ++iBlock )
+       {
+               putchar( ' ' );
+               nCharacter++;
+       }
+       
+       Int_t sec       = TimeInSec%60;
+       Int_t min       = TimeInSec/60;
+       Int_t hours     = TimeInSec/3600;
+       
+       nCharacter += printf( "] %6.2f%% \t %3i:%02i:%02i   ", ProgressInPercent, hours, min, sec );
+       fflush( stdout );
+       
+       if(ProgressInPercent==100) 
+       {
+               printf("\r");
+               for(Int_t i=0; i<nCharacter; i++)
+               {
+                       putchar( ' ' );
+               }
+               printf("\r ...done! \t ( %i:%02i:%02i ) \n", hours, min, sec );
+       }
+       
+       return nCharacter;
+}
+
+//####################################################################
+#endif
\ No newline at end of file
diff --git a/s-curves/analysis_gui/ANA/main.cpp b/s-curves/analysis_gui/ANA/main.cpp
new file mode 100644 (file)
index 0000000..0ef5e10
--- /dev/null
@@ -0,0 +1,51 @@
+#include "Mi26Ana.h"
+#include "TApplication.h"
+
+
+int main(int argc, char** argv) {
+       
+       gROOT->Reset();
+       
+       const char* InFile;
+       const char* PxFile;
+       int                     Mode;
+       int                     NPx;            // Pixelnummer
+       int                     NRndPx;         // Amount of random pixels
+       int                     Code;
+       
+       stringstream strValue;
+       
+       if (argc>1) InFile      = argv[1];
+       if (argc>2) PxFile      = argv[2];
+       if (argc>3) strValue<<argv[3]; strValue >> Mode;        strValue.clear();
+       if (argc>4) strValue<<argv[4]; strValue >> NPx;         strValue.clear();
+       if (argc>5) strValue<<argv[5]; strValue >> NRndPx;      strValue.clear();
+       if (argc>6) strValue<<argv[6]; strValue >> Code;        strValue.clear();
+       
+//     cout<<" -- main 1 -- "<<endl;
+//     for(int i=0;i<7;i++)
+//     {
+//             cout<<i<<"\t"<<argc<<"\t"<<argv[i]<<endl;
+//     }
+//     cout<<" -- main 2 --"<<endl;
+//     cout<<InFile<<endl;
+//     cout<<PxFile<<endl;
+//     cout<<Mode<<endl;
+//     cout<<NRndPx<<endl;
+//     cout<<NPx<<endl;
+//     cout<<Code<<endl;
+//     
+//     
+//     cout<<"-------------"<<endl;
+       TApplication theApp("Analysis", &argc, argv);
+       
+       Mi26Ana* ana = new Mi26Ana();
+       ana->setInFile  (InFile);
+       ana->setPxFile  (PxFile);
+       ana->setNRndPx  (NRndPx);
+       ana->setNPx             (NPx);
+       ana->setCode    (Code);
+       ana->Exec               (Mode);
+       delete ana;
+       theApp.Run();
+}
\ No newline at end of file
diff --git a/s-curves/analysis_gui/GUI/Makefile b/s-curves/analysis_gui/GUI/Makefile
new file mode 100644 (file)
index 0000000..cff0ab3
--- /dev/null
@@ -0,0 +1,240 @@
+#############################################################################
+# Makefile for building: scurves
+# Generated by qmake (2.01a) (Qt 4.8.5) on: Wed Oct 8 16:06:56 2014
+# Project:  scurves.pro
+# Template: app
+# Command: /usr/bin/qmake -o Makefile scurves.pro
+#############################################################################
+
+####### Compiler, tools and options
+
+CC            = gcc
+CXX           = g++
+DEFINES       = -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
+CFLAGS        = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
+CXXFLAGS      = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
+INCPATH       = -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I$(ROOTSYS)/include -I. -I.
+LINK          = g++
+LFLAGS        = -Wl,-O1
+LIBS          = $(SUBLIBS)  -L/usr/lib64 -L$(ROOTSYS)/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lGui -lRGL -lQtGui -L/usr/lib64 -L/usr/X11R6/lib -lQtCore -lpthread 
+AR            = ar cqs
+RANLIB        = 
+QMAKE         = /usr/bin/qmake
+TAR           = tar -cf
+COMPRESS      = gzip -9f
+COPY          = cp -f
+SED           = sed
+COPY_FILE     = $(COPY)
+COPY_DIR      = $(COPY) -r
+STRIP         = strip
+INSTALL_FILE  = install -m 644 -p
+INSTALL_DIR   = $(COPY_DIR)
+INSTALL_PROGRAM = install -m 755 -p
+DEL_FILE      = rm -f
+SYMLINK       = ln -f -s
+DEL_DIR       = rmdir
+MOVE          = mv -f
+CHK_DIR_EXISTS= test -d
+MKDIR         = mkdir -p
+
+####### Output directory
+
+OBJECTS_DIR   = ./
+
+####### Files
+
+SOURCES       = main.cpp \
+               scurves.cpp moc_scurves.cpp
+OBJECTS       = main.o \
+               scurves.o \
+               moc_scurves.o
+DIST          = /usr/share/qt4/mkspecs/common/unix.conf \
+               /usr/share/qt4/mkspecs/common/linux.conf \
+               /usr/share/qt4/mkspecs/common/gcc-base.conf \
+               /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
+               /usr/share/qt4/mkspecs/common/g++-base.conf \
+               /usr/share/qt4/mkspecs/common/g++-unix.conf \
+               /usr/share/qt4/mkspecs/qconfig.pri \
+               /usr/share/qt4/mkspecs/modules/qt_phonon.pri \
+               /usr/share/qt4/mkspecs/modules/qt_webkit.pri \
+               /usr/share/qt4/mkspecs/features/qt_functions.prf \
+               /usr/share/qt4/mkspecs/features/qt_config.prf \
+               /usr/share/qt4/mkspecs/features/exclusive_builds.prf \
+               /usr/share/qt4/mkspecs/features/default_pre.prf \
+               /usr/share/qt4/mkspecs/features/release.prf \
+               /usr/share/qt4/mkspecs/features/default_post.prf \
+               /usr/share/qt4/mkspecs/features/shared.prf \
+               /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
+               /usr/share/qt4/mkspecs/features/warn_on.prf \
+               /usr/share/qt4/mkspecs/features/qt.prf \
+               /usr/share/qt4/mkspecs/features/unix/thread.prf \
+               /usr/share/qt4/mkspecs/features/moc.prf \
+               /usr/share/qt4/mkspecs/features/resources.prf \
+               /usr/share/qt4/mkspecs/features/uic.prf \
+               /usr/share/qt4/mkspecs/features/yacc.prf \
+               /usr/share/qt4/mkspecs/features/lex.prf \
+               /usr/share/qt4/mkspecs/features/include_source_dir.prf \
+               scurves.pro
+QMAKE_TARGET  = scurves
+DESTDIR       = 
+TARGET        = scurves
+
+first: all
+####### Implicit rules
+
+.SUFFIXES: .o .c .cpp .cc .cxx .C
+
+.cpp.o:
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cc.o:
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cxx.o:
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.C.o:
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.c.o:
+       $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
+
+####### Build rules
+
+all: Makefile $(TARGET)
+
+$(TARGET): ui_scurves.h $(OBJECTS)  
+       $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: scurves.pro  /usr/share/qt4/mkspecs/default/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \
+               /usr/share/qt4/mkspecs/common/linux.conf \
+               /usr/share/qt4/mkspecs/common/gcc-base.conf \
+               /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
+               /usr/share/qt4/mkspecs/common/g++-base.conf \
+               /usr/share/qt4/mkspecs/common/g++-unix.conf \
+               /usr/share/qt4/mkspecs/qconfig.pri \
+               /usr/share/qt4/mkspecs/modules/qt_phonon.pri \
+               /usr/share/qt4/mkspecs/modules/qt_webkit.pri \
+               /usr/share/qt4/mkspecs/features/qt_functions.prf \
+               /usr/share/qt4/mkspecs/features/qt_config.prf \
+               /usr/share/qt4/mkspecs/features/exclusive_builds.prf \
+               /usr/share/qt4/mkspecs/features/default_pre.prf \
+               /usr/share/qt4/mkspecs/features/release.prf \
+               /usr/share/qt4/mkspecs/features/default_post.prf \
+               /usr/share/qt4/mkspecs/features/shared.prf \
+               /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
+               /usr/share/qt4/mkspecs/features/warn_on.prf \
+               /usr/share/qt4/mkspecs/features/qt.prf \
+               /usr/share/qt4/mkspecs/features/unix/thread.prf \
+               /usr/share/qt4/mkspecs/features/moc.prf \
+               /usr/share/qt4/mkspecs/features/resources.prf \
+               /usr/share/qt4/mkspecs/features/uic.prf \
+               /usr/share/qt4/mkspecs/features/yacc.prf \
+               /usr/share/qt4/mkspecs/features/lex.prf \
+               /usr/share/qt4/mkspecs/features/include_source_dir.prf \
+               /usr/lib64/libQtGui.prl \
+               /usr/lib64/libQtCore.prl
+       $(QMAKE) -o Makefile scurves.pro
+/usr/share/qt4/mkspecs/common/unix.conf:
+/usr/share/qt4/mkspecs/common/linux.conf:
+/usr/share/qt4/mkspecs/common/gcc-base.conf:
+/usr/share/qt4/mkspecs/common/gcc-base-unix.conf:
+/usr/share/qt4/mkspecs/common/g++-base.conf:
+/usr/share/qt4/mkspecs/common/g++-unix.conf:
+/usr/share/qt4/mkspecs/qconfig.pri:
+/usr/share/qt4/mkspecs/modules/qt_phonon.pri:
+/usr/share/qt4/mkspecs/modules/qt_webkit.pri:
+/usr/share/qt4/mkspecs/features/qt_functions.prf:
+/usr/share/qt4/mkspecs/features/qt_config.prf:
+/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
+/usr/share/qt4/mkspecs/features/default_pre.prf:
+/usr/share/qt4/mkspecs/features/release.prf:
+/usr/share/qt4/mkspecs/features/default_post.prf:
+/usr/share/qt4/mkspecs/features/shared.prf:
+/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
+/usr/share/qt4/mkspecs/features/warn_on.prf:
+/usr/share/qt4/mkspecs/features/qt.prf:
+/usr/share/qt4/mkspecs/features/unix/thread.prf:
+/usr/share/qt4/mkspecs/features/moc.prf:
+/usr/share/qt4/mkspecs/features/resources.prf:
+/usr/share/qt4/mkspecs/features/uic.prf:
+/usr/share/qt4/mkspecs/features/yacc.prf:
+/usr/share/qt4/mkspecs/features/lex.prf:
+/usr/share/qt4/mkspecs/features/include_source_dir.prf:
+/usr/lib64/libQtGui.prl:
+/usr/lib64/libQtCore.prl:
+qmake:  FORCE
+       @$(QMAKE) -o Makefile scurves.pro
+
+dist: 
+       @$(CHK_DIR_EXISTS) .tmp/scurves1.0.0 || $(MKDIR) .tmp/scurves1.0.0 
+       $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/scurves1.0.0/ && $(COPY_FILE) --parents scurves.h .tmp/scurves1.0.0/ && $(COPY_FILE) --parents main.cpp scurves.cpp .tmp/scurves1.0.0/ && $(COPY_FILE) --parents scurves.ui .tmp/scurves1.0.0/ && (cd `dirname .tmp/scurves1.0.0` && $(TAR) scurves1.0.0.tar scurves1.0.0 && $(COMPRESS) scurves1.0.0.tar) && $(MOVE) `dirname .tmp/scurves1.0.0`/scurves1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/scurves1.0.0
+
+
+clean:compiler_clean 
+       -$(DEL_FILE) $(OBJECTS)
+       -$(DEL_FILE) *~ core *.core
+
+
+####### Sub-libraries
+
+distclean: clean
+       -$(DEL_FILE) $(TARGET) 
+       -$(DEL_FILE) Makefile
+
+
+check: first
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_moc_header_make_all: moc_scurves.cpp
+compiler_moc_header_clean:
+       -$(DEL_FILE) moc_scurves.cpp
+moc_scurves.cpp: ui_scurves.h \
+               scurves.h
+       /usr/bin/moc $(DEFINES) $(INCPATH) scurves.h -o moc_scurves.cpp
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+       -$(DEL_FILE) qmake_image_collection.cpp
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all: ui_scurves.h
+compiler_uic_clean:
+       -$(DEL_FILE) ui_scurves.h
+ui_scurves.h: scurves.ui
+       /usr/bin/uic scurves.ui -o ui_scurves.h
+
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean compiler_uic_clean 
+
+####### Compile
+
+main.o: main.cpp scurves.h \
+               ui_scurves.h
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
+
+scurves.o: scurves.cpp scurves.h \
+               ui_scurves.h
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o scurves.o scurves.cpp
+
+moc_scurves.o: moc_scurves.cpp 
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_scurves.o moc_scurves.cpp
+
+####### Install
+
+install:   FORCE
+
+uninstall:   FORCE
+
+FORCE:
+
diff --git a/s-curves/analysis_gui/GUI/main.cpp b/s-curves/analysis_gui/GUI/main.cpp
new file mode 100644 (file)
index 0000000..59db195
--- /dev/null
@@ -0,0 +1,22 @@
+// --- main.cpp - start ---
+
+#include "scurves.h"
+#include <QApplication>
+#include <TApplication.h>
+
+int main( int argc, char* argv[] )
+{
+       TApplication* gMyRootApp = new TApplication("My ROOT Application", &argc, argv);
+       gMyRootApp->SetReturnFromRun(true);
+//     gMyRootApp->Run(kTRUE);
+   
+       QApplication a(argc, argv);
+       scurves w;
+       w.show();
+       
+       w.setWindowTitle(QString::fromUtf8("S-Curves GUI"));
+//         QObject::connect( qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit()) );
+       return a.exec();
+}
+
+// --- main.cpp - end ---
diff --git a/s-curves/analysis_gui/GUI/scurves.cpp b/s-curves/analysis_gui/GUI/scurves.cpp
new file mode 100644 (file)
index 0000000..6f0f4b5
--- /dev/null
@@ -0,0 +1,660 @@
+// --- scurves.cpp - start --- 
+#include "scurves.h"
+#include <QtGui>
+#include <QtCore>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <time.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <iomanip> 
+#include <sstream>
+
+#include "TCanvas.h"
+#include "TRootCanvas.h"
+#include <TFile.h>
+#include <TH1F.h>
+#include <TH2F.h>
+#include "TH1.h"
+#include "TF1.h"
+#include "TSystem.h"
+#include <TTree.h>
+#include "TROOT.h"
+// #include "TSystem.h"
+
+
+
+using namespace std;
+
+//####################################################################
+
+scurves::scurves(QMainWindow *parent) : QMainWindow(parent) {
+       
+       setupUi(this);
+// Init inputs
+       initGUI();
+       childcount=0;
+//             TApplication* gMyRootApp = new TApplication("My ROOT Application", &argc, argv);
+//     gMyRootApp->SetReturnFromRun(true);
+       
+       connect(pushSave                        ,SIGNAL( clicked() )                    ,this   ,SLOT(  Save() )                        );
+       connect(pushFindNew                     ,SIGNAL( clicked() )                    ,this   ,SLOT(  Newest() )                      );
+       connect(pushUnpack                      ,SIGNAL( clicked() )                    ,this   ,SLOT(  Unpack() )                      );
+       connect(pushIdentRandPix        ,SIGNAL( clicked() )                    ,this   ,SLOT(  RandPix() )                     );
+       connect(pushClose                       ,SIGNAL( clicked() )                    ,this   ,SLOT(  Close() )                       );
+       connect(pushOpenBrowser         ,SIGNAL( clicked() )                    ,this   ,SLOT(  OpenBrowser() )         );
+       connect(lineDir                         ,SIGNAL( textChanged(QString) ) ,this   ,SLOT(  clickDir() )            );
+       connect(lineFile                        ,SIGNAL( textChanged(QString) ) ,this   ,SLOT(  clickFile() )           );
+       connect(spinRow                         ,SIGNAL( valueChanged(int) )    ,this   ,SLOT(  calcPix(int) )          );
+       connect(spinCol                         ,SIGNAL( valueChanged(int) )    ,this   ,SLOT(  calcPix(int) )          );
+       connect(spinPix                         ,SIGNAL( valueChanged(int) )    ,this   ,SLOT(  calcRC(int) )           );
+       
+       QSignalMapper *signalMapper             = new QSignalMapper(this);
+       QSignalMapper *signalMapper2    = new QSignalMapper(this);
+       
+       signalMapper    ->setMapping( pushRewrite               , 0);
+       signalMapper    ->setMapping( pushPlotSc                , 1);
+       signalMapper    ->setMapping( pushPlotScSingle  , 2);
+       signalMapper    ->setMapping( pushFitSc                 , 3);
+       signalMapper    ->setMapping( pushFitScSingle   , 4);
+       signalMapper    ->setMapping( pushSum                   , 5);
+       signalMapper    ->setMapping( pushFakes                 , 6);
+       signalMapper    ->setMapping( pushEmpty1                , 7);
+       signalMapper    ->setMapping( pushEmpty2                , 8);
+       signalMapper2   ->setMapping( pushFindBack              , -1);
+       signalMapper2   ->setMapping( pushFindForth             , 1);
+       
+       connect(pushRewrite                     ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushPlotSc                      ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushPlotScSingle        ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushFitSc                       ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushFitScSingle         ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushSum                         ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushFakes                       ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushEmpty1                      ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushEmpty2                      ,SIGNAL( clicked(bool) )                ,signalMapper,  SLOT( map() )           );
+       connect(pushFindBack            ,SIGNAL( clicked(bool) )                ,signalMapper2, SLOT( map() )           );
+       connect(pushFindForth           ,SIGNAL( clicked(bool) )                ,signalMapper2, SLOT( map() )           );
+       
+       connect(signalMapper            ,SIGNAL( mapped(int) )                  ,this   ,SLOT( RunAna   (int) )                 );
+       connect(signalMapper2           ,SIGNAL( mapped(int) )                  ,this   ,SLOT( NextFile (int) )                 );
+       
+// checkRandPix
+// checkBank1
+// checkBank2
+// checkBank3
+// checkBank4
+// spinRandPix
+
+}
+
+//####################################################################
+
+scurves::~scurves() {
+       
+       Save();
+       Close();
+}
+
+//####################################################################
+
+void scurves::initGUI() {
+       
+       ifstream myfile ( "scurves.ini");
+       string line;
+       int para;
+       
+       if (myfile.is_open())
+       {
+               getline( myfile, line );
+               lineDir         -> insert( QString::fromStdString(line) );
+               getline( myfile, line );
+               lineFile                -> insert( QString::fromStdString(line) );
+               
+               myfile >> para;
+               if( para )      { checkBank1    -> setChecked(true); }
+               myfile >> para;
+               if( para )      { checkBank2    -> setChecked(true); }
+               myfile >> para;
+               if( para )      { checkBank3    -> setChecked(true); }
+               myfile >> para;
+               if( para )      { checkBank4    -> setChecked(true); }
+               myfile >> para;
+               if( para )      { checkRandPix  -> setChecked(true); }
+               myfile >> para;
+               radioHld                -> setChecked(true);
+               if( para )      { radioRoot             -> setChecked(true); }
+               
+               
+               myfile >> para;
+               spinRandPix     -> setValue( para );
+               myfile >> para;
+               spinPix         -> setValue( para );    calcRC(para);
+
+               
+       }
+       
+}
+
+//####################################################################
+
+bool scurves:: checkDir() {
+       
+       QString text            = lineDir ->text();
+       QByteArray bytes        = text.toAscii();
+       char *Dir                       = bytes.data();
+       
+// Add '/' at the end of Dir
+       if( Dir[strlen(Dir)-1] != '/' )
+       {
+               strcat(Dir, "/" );
+               lineDir -> clear();
+               lineDir -> insert( QString(Dir) );
+       }
+       
+// Check whether Dir exists
+       DIR* dpdf = opendir(Dir);
+       
+       if (dpdf != NULL)       { lineDir->setStyleSheet("QLineEdit { color:black; }");  return true;   }
+       else                            { lineDir->setStyleSheet("QLineEdit { color:red; }");  return false;    }
+}
+       
+//####################################################################
+
+bool scurves:: checkFile() {
+       
+       if(checkDir())
+       {
+               QString text;
+               QByteArray bytes;
+               char *Dir;
+               char *File;
+               
+               text    = lineDir ->text();
+               bytes   = text.toAscii();
+               Dir             = bytes.data();
+               
+               text    = lineFile ->text();
+               bytes   = text.toAscii();
+               File    = bytes.data();
+               
+               char Filecurr           [256];
+               strcpy  (Filecurr, Dir); 
+               strcat  (Filecurr, File);
+               
+               struct stat buffer;
+
+               if( stat (Filecurr, &buffer) == 0)      { lineFile->setStyleSheet("QLineEdit { color:black; }");        return true;    }
+               else                                                            { lineFile->setStyleSheet("QLineEdit { color:red; }");          return false;   }
+       }
+
+       return 0;
+}
+       
+//####################################################################
+
+void scurves::Save() {
+       
+       
+       checkDir();
+       checkFile();
+       
+       fstream myfile;
+       myfile.open( "scurves.ini" , ios::out );
+       myfile << ( lineDir             -> text()).toStdString()        <<endl;
+       myfile << ( lineFile    -> text()).toStdString()        <<endl;
+       myfile << checkBank1            ->  isChecked() <<"  ";
+       myfile << checkBank2            ->  isChecked() <<"  ";
+       myfile << checkBank3            ->  isChecked() <<"  ";
+       myfile << checkBank4            ->  isChecked() <<"  ";
+       myfile << checkRandPix          ->  isChecked() <<"  ";
+       myfile << radioRoot                     ->  isChecked() <<"  ";
+       myfile <<endl;
+       
+       myfile <<  spinRandPix  ->value()       <<" ";
+       myfile <<  spinPix                      ->value()       <<" ";
+       myfile <<endl;
+       
+       myfile.close();
+}
+
+//####################################################################
+
+void scurves::NextFile(int sign) {
+       
+       if(checkDir())
+       {
+               QString text;
+               QByteArray bytes;
+               char *Dir;
+               char *File;
+               
+               text    = lineDir ->text();
+               bytes   = text.toAscii();
+               Dir             = bytes.data();
+               
+               text    = lineFile ->text();
+               bytes   = text.toAscii();
+               File    = bytes.data();
+               
+               time_t timeref  = 0;
+               time_t timecurr = 0;
+               time_t timenew  = 2000000000;
+               if(sign==-1)    {timenew        = -2000000000;}
+               
+               char Fileref            [256];
+               char Filecurr           [256];
+               char Filenew            [256]   = "";
+               
+               strcpy  (Fileref, Dir); 
+               strcat  (Fileref, File);
+               
+               struct stat buff;
+               if( stat (Fileref, &buff) == 0 )        { lineFile->setStyleSheet("QLineEdit { color:black; }");        timeref = buff.st_mtime;                        }
+               else                                                            { lineFile->setStyleSheet("QLineEdit { color:red; }");          timeref = timenew; sign=-1*sign; timenew= -1*timenew;   }
+               
+               text    = lineDir ->text();
+               bytes   = text.toAscii();
+               Dir             = bytes.data();
+               
+               text    = lineFile ->text();
+               bytes   = text.toAscii();
+               File    = bytes.data();
+               
+               char Ending [4];
+               if( radioRoot -> isChecked() )  { strcpy        (Ending, "root"); }
+               else                                                    { strcpy        (Ending, "hld"); }
+               
+               uint Endinglength = strlen(Ending);
+
+               DIR* dpdf;
+               struct dirent* epdf;
+               struct stat s;
+               uint namelength;
+               bool Endingcorr;
+                               
+               dpdf = opendir(Dir);
+// init File_new
+//             strcpy  (File_new, "");
+
+               if (dpdf != NULL)
+               {       
+                       while ( (epdf = readdir(dpdf)) != NULL )
+                       {
+                               if( (string) epdf->d_name != "."   &&   (string) epdf->d_name != ".." )
+                               {
+                                       strcpy  (Filecurr, Dir); 
+                                       strcat  (Filecurr, epdf->d_name);
+                                       
+                                       stat    (Filecurr, &s);
+                                       timecurr        = s.st_mtime;
+                                       namelength      = strlen(Filecurr);
+                                       Endingcorr      = true;
+                                       
+                                       if(namelength>Endinglength)
+                                       {
+                                               for(uint i=0; i<Endinglength;i++)
+                                               {
+                                                       if( Filecurr[namelength-Endinglength+i] != Ending[i] )  { Endingcorr=false; break; }
+                                               }
+                                                       
+                                               if(Endingcorr && sign*timecurr>sign*timeref )
+                                               {
+//                                                     cout<<left<<setw(3)<< Endingcorr; 
+//                                                     cout<<left<<setw(50)<< Filecurr;
+//                                                     cout<<left<<setw(10)<< timecurr;
+//                                                     cout<<left<<setw(5)<< namelength;
+//                                                     cout<<left<<setw(15)<< ctime(&s.st_mtime);
+                                                       
+                                                       if( timenew!=0 && sign*timenew>sign*timecurr)
+                                                       {
+                                                               strcpy  (Filenew, epdf->d_name);
+                                                               timenew = timecurr;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+               
+               if              ( strlen(Filenew)!=0 )
+               {
+                       lineFile                -> clear();
+                       lineFile                -> insert( QString(Filenew) );
+               }
+//             else
+//             {
+//                     pushFindBack    ->setStyleSheet("* { background-color: red }");
+//                     pushFindForth   ->setStyleSheet("* { background-color: red }");
+//                     pushFindBack    ->setStyleSheet("* { background-color: lightGray }");
+//                     pushFindForth   ->setStyleSheet("* { background-color: lightGray }");
+//             }
+       }
+}
+
+//####################################################################
+
+void scurves::Newest() {
+       
+       if(checkDir())
+       {
+               QString text            = lineDir-> text();
+               QByteArray bytes        = text.toAscii();
+               char *Dir                       = bytes.data();
+               
+               time_t timecurr = 0;
+               time_t timenew  = 0;    
+               char Filecurr           [256];
+               char Filenew            [256]   = "";
+               
+               char Ending [4];
+               if( radioRoot -> isChecked() )  { strcpy        (Ending, "root"); }
+               else                                                    { strcpy        (Ending, "hld"); }
+               
+               uint Endinglength = strlen(Ending);
+
+               DIR* dpdf;
+               struct dirent* epdf;
+               struct stat s;
+               uint namelength;
+               bool Endingcorr;
+       
+               dpdf = opendir(Dir);
+// init File_new
+//             strcpy  (File_new, "");
+       
+               if (dpdf != NULL)
+               {
+                       while ( (epdf = readdir(dpdf)) != NULL )
+                       {
+                               if( (string) epdf->d_name != "."   &&   (string) epdf->d_name != ".." )
+                               {
+                                       strcpy  (Filecurr, Dir); 
+                                       strcat  (Filecurr, epdf->d_name);
+
+                                       stat    (Filecurr, &s);
+                                       timecurr = s.st_mtime;
+                                       namelength = strlen(Filecurr);
+                                       
+                                       Endingcorr = true;
+                                       
+                                       if(namelength>Endinglength)
+                                       {
+                                               for(uint i=0; i<Endinglength;i++)
+                                               {
+                                                       if( Filecurr[namelength-Endinglength+i] != Ending[i] )  { Endingcorr=false; break; }
+                                               }
+                                               
+                                               if(Endingcorr && timenew<timecurr)
+                                               {
+//                                                     cout<<left<<setw(3)<< Endingcorr; 
+//                                                     cout<<left<<setw(50)<< Filecurr;
+//                                                     cout<<left<<setw(10)<< timecurr;
+//                                                     cout<<left<<setw(5)<< namelength;
+//                                                     cout<<left<<setw(15)<< ctime(&s.st_mtime);
+                                               
+                                                       strcpy  (Filenew, epdf->d_name);
+                                                       timenew = timecurr;
+                                               }
+                                       }
+                               }
+                       }
+               }
+               
+               if( strlen(Filenew)!=0 )
+               {
+                       lineFile                -> clear();
+                       lineFile                -> insert( QString(Filenew) );
+               }
+               else
+               {
+                       lineFile->setStyleSheet("QLineEdit { color:red; }"); 
+               }
+               
+       }
+}
+
+//####################################################################
+
+void scurves::Unpack() {
+       
+       QString text;
+       QByteArray bytes;
+       char *Dir;
+       char *File;
+       char Filein [256] = "";
+       char Fileout[256] = "";
+       
+       text    = lineDir ->text();
+       bytes   = text.toAscii();
+       Dir             = bytes.data();
+       
+       text    = lineFile ->text();
+       bytes   = text.toAscii();
+       File    = bytes.data();
+       
+       
+       strcpy  (Filein, Dir); 
+       strcat  (Filein, File);
+       
+       uint namelength = strlen(Filein);                       
+       
+       for(uint i=0; i<namelength-3;i++)
+       {
+               Fileout[i] = Filein[i];
+       }
+       
+       strcat  (Fileout, "root");
+
+       string command = "";
+       command += "xterm -hold -geometry 130x10+10+10 -e ./run.sh ";
+       command += Filein;
+       command += " ";
+       command += ".png";
+       command += " ";
+       command += "mystem";
+       command += " ";
+       command += Fileout;
+       
+       const char *ptr = command.c_str() ;
+                       
+       child[childcount] = new QProcess();
+//     connect(child[childcount], SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(isFinished( int, QProcess::ExitStatus )));
+       child[childcount]->start(ptr);
+       childcount++;
+       
+}
+
+//####################################################################
+
+void scurves::OpenBrowser() {
+       
+       QString text;
+       QByteArray bytes;
+       char *Dir;
+       char *File;
+       char Filein [256] = "";
+       
+       text    = lineDir ->text();
+       bytes   = text.toAscii();
+       Dir             = bytes.data();
+       
+       text    = lineFile ->text();
+       bytes   = text.toAscii();
+       File    = bytes.data();
+       
+       strcpy  (Filein, Dir); 
+       strcat  (Filein, File);
+
+       string command = "";
+       command += "xterm -geometry 130x10+10+10 -e root -l ";
+       command += Filein;
+       
+       const char *ptr = command.c_str() ;
+                       
+       child[childcount] = new QProcess();
+//     connect(child[childcount], SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(isFinished( int, QProcess::ExitStatus )));
+       child[childcount]->start(ptr);
+       childcount++;
+       
+}
+
+//####################################################################
+
+void scurves::RandPix() {
+       
+       int randPixel = spinRandPix->value();
+       int arr[randPixel];
+       
+       srand( (unsigned) time(NULL) ) ;
+       
+       int rndnum;
+       int count = 0;
+       int loop;
+       
+       fstream myfile;
+       myfile.open( "rndmpxl.ini" , ios::out );
+       
+       myfile << randPixel <<endl;
+       
+       while( count<randPixel )
+       {
+               rndnum = rand()%(1152*576/4);
+               
+               if( rndnum>5*1152/4 && rndnum<(576-5)*1152/4 )
+               {
+                       for(loop=0;loop<count;loop++)
+                       {
+                               if( rndnum == arr[loop] ) break;
+                       }
+                       
+                       if(loop==count)
+                       {
+                               myfile << " " << rndnum;
+//                             cout    << count<<" \t "<< rndnum  <<endl;
+                               
+                               arr[count] = rndnum;
+                               count++;
+                       }
+               }
+       }
+       
+       myfile.close();
+       
+//     cout<<"done "<< count <<endl;
+       
+}
+
+//####################################################################
+
+void scurves::clickDir() {
+        lineDir->setStyleSheet("QLineEdit { color:black; }");
+}
+
+//####################################################################
+
+void scurves::clickFile() {
+        lineFile->setStyleSheet("QLineEdit { color:black; }");
+}
+
+//####################################################################
+
+void scurves::calcPix(int) {
+       
+       spinPix         -> setValue( (288*spinRow->value())+spinCol->value() );
+}
+
+//####################################################################
+
+void scurves::calcRC(int pix) {
+       
+       int row         = (int)(pix/288);
+       int col         = pix%288;
+                       
+       spinRow         -> setValue( row );
+       spinCol         -> setValue( col );
+}
+       
+//####################################################################
+
+void scurves::Close() {
+
+       
+       for(int i=0;i<childcount;i++)
+       {
+                       child[i]->close();
+       }
+       
+       childcount=0;
+       
+}
+
+//####################################################################
+
+void scurves::Error() {
+               
+       QMessageBox* box = new QMessageBox();
+       box->setWindowTitle(QString("Error"));
+//     box->setText(QString("Current Text:\""+text+"\""));
+       box->setText(QString("Directory not found!"));
+       box->show();
+}
+
+//####################################################################
+
+void scurves::RunAna(int method) {
+       
+
+       string dirPath  = ( lineDir     -> text() ).toStdString();
+       string filePath = ( lineFile-> text() ).toStdString();
+       
+//     xterm -geometry 65x10+10+10 -e root -l "runreadgui.C+(\""3"\",\"/local/samir/test.root\","0","what","what","0")"
+       
+       std::stringstream strstr1;
+       strstr1.str("");
+       strstr1 << method;
+       
+       std::stringstream strstr2;
+       strstr2.str("");
+       strstr2 << spinPix->value();
+       
+       std::stringstream strstr3;
+       strstr3.str("");
+       strstr3 << spinRandPix->value();
+       
+       std::stringstream strstr4;
+       strstr4.str("");
+       strstr4 << checkRandPix->isChecked();
+       strstr4 << checkBank1->isChecked();
+       strstr4 << checkBank2->isChecked();
+       strstr4 << checkBank3->isChecked();
+       strstr4 << checkBank4->isChecked();
+       
+       string command = "xterm -geometry 65x10+10+10 -e ./runana.sh ";
+       command += " ";
+       command += dirPath + filePath;
+       command += " ";
+       command += strstr1.str();
+       command += " ";
+       command += strstr2.str();
+       command += " ";
+       command += strstr3.str();
+       command += " ";
+       command += strstr4.str();
+       
+       const char *ptr = command.c_str() ;
+//     cout<<command<<endl;
+       
+       child[childcount] = new QProcess();
+//     connect(child[childcount], SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(isFinished( int, QProcess::ExitStatus )));
+       child[childcount]->start(ptr);
+       childcount++;
+
+}
+
+//####################################################################
+// --- scurves.cpp - end --- 
diff --git a/s-curves/analysis_gui/GUI/scurves.h b/s-curves/analysis_gui/GUI/scurves.h
new file mode 100644 (file)
index 0000000..a03662f
--- /dev/null
@@ -0,0 +1,45 @@
+// --- Anaint.h - start --- 
+
+#ifndef SCURVES_H
+#define SCURVES_H
+
+#include "ui_scurves.h"
+#include "TCanvas.h"
+#include <QProcess>
+
+class scurves : public QMainWindow, public Ui::MainWindow {
+       
+       Q_OBJECT
+       
+public:
+       scurves(QMainWindow *parent=0);
+       ~scurves();
+       
+public slots:
+       void Error              ();
+       void Unpack             ();
+       void OpenBrowser();
+       void Save               ();
+       void Newest             ();
+       void RandPix    ();
+       void Close              ();
+       void clickDir   ();
+       void clickFile  ();
+       void calcPix    (int);
+       void calcRC             (int);
+       void RunAna             (int);
+       void NextFile   (int);
+       
+private:
+       void initGUI();
+       bool checkDir();
+       bool checkFile();
+       
+       QProcess* child[1000];
+       int childcount;
+};
+
+#endif // SCURVES_H
+
+// --- scurves.h - end --- 
diff --git a/s-curves/analysis_gui/GUI/scurves.pro b/s-curves/analysis_gui/GUI/scurves.pro
new file mode 100644 (file)
index 0000000..b176ae1
--- /dev/null
@@ -0,0 +1,14 @@
+######################################################################
+# Automatically generated by qmake (2.01a) Wed Oct 8 15:34:41 2014
+######################################################################
+
+TEMPLATE = app
+TARGET = 
+DEPENDPATH += .
+INCLUDEPATH += $(ROOTSYS)/include
+LIBS += -L$(ROOTSYS)/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lGui -lRGL
+
+# Input
+HEADERS += scurves.h
+FORMS += scurves.ui
+SOURCES += main.cpp scurves.cpp
\ No newline at end of file
diff --git a/s-curves/analysis_gui/GUI/scurves.ui b/s-curves/analysis_gui/GUI/scurves.ui
new file mode 100644 (file)
index 0000000..781dbd9
--- /dev/null
@@ -0,0 +1,588 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>595</width>
+    <height>336</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <widget class="QLineEdit" name="lineDir">
+    <property name="geometry">
+     <rect>
+      <x>59</x>
+      <y>12</y>
+      <width>391</width>
+      <height>26</height>
+     </rect>
+    </property>
+   </widget>
+   <widget class="QLineEdit" name="lineFile">
+    <property name="geometry">
+     <rect>
+      <x>59</x>
+      <y>42</y>
+      <width>391</width>
+      <height>26</height>
+     </rect>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label">
+    <property name="geometry">
+     <rect>
+      <x>19</x>
+      <y>18</y>
+      <width>41</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>DIR</string>
+    </property>
+   </widget>
+   <widget class="QLabel" name="label_2">
+    <property name="geometry">
+     <rect>
+      <x>19</x>
+      <y>48</y>
+      <width>41</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>FILE</string>
+    </property>
+   </widget>
+   <widget class="QFrame" name="frame">
+    <property name="geometry">
+     <rect>
+      <x>198</x>
+      <y>80</y>
+      <width>251</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="frameShape">
+     <enum>QFrame::StyledPanel</enum>
+    </property>
+    <property name="frameShadow">
+     <enum>QFrame::Raised</enum>
+    </property>
+    <widget class="QSpinBox" name="spinRandPix">
+     <property name="geometry">
+      <rect>
+       <x>30</x>
+       <y>3</y>
+       <width>101</width>
+       <height>26</height>
+      </rect>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="maximum">
+      <number>165888</number>
+     </property>
+    </widget>
+    <widget class="QPushButton" name="pushIdentRandPix">
+     <property name="geometry">
+      <rect>
+       <x>140</x>
+       <y>3</y>
+       <width>101</width>
+       <height>25</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Rand. Pixels</string>
+     </property>
+    </widget>
+    <widget class="QCheckBox" name="checkRandPix">
+     <property name="geometry">
+      <rect>
+       <x>5</x>
+       <y>5</y>
+       <width>21</width>
+       <height>23</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>CheckBox</string>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QFrame" name="frame_2">
+    <property name="geometry">
+     <rect>
+      <x>198</x>
+      <y>110</y>
+      <width>251</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="frameShape">
+     <enum>QFrame::StyledPanel</enum>
+    </property>
+    <property name="frameShadow">
+     <enum>QFrame::Raised</enum>
+    </property>
+    <widget class="QLabel" name="label_3">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>6</y>
+       <width>54</width>
+       <height>16</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Bank(s)</string>
+     </property>
+    </widget>
+    <widget class="QCheckBox" name="checkBank1">
+     <property name="geometry">
+      <rect>
+       <x>65</x>
+       <y>5</y>
+       <width>41</width>
+       <height>23</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>1</string>
+     </property>
+    </widget>
+    <widget class="QCheckBox" name="checkBank2">
+     <property name="geometry">
+      <rect>
+       <x>113</x>
+       <y>5</y>
+       <width>41</width>
+       <height>23</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>2</string>
+     </property>
+    </widget>
+    <widget class="QCheckBox" name="checkBank3">
+     <property name="geometry">
+      <rect>
+       <x>161</x>
+       <y>5</y>
+       <width>41</width>
+       <height>23</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>3</string>
+     </property>
+    </widget>
+    <widget class="QCheckBox" name="checkBank4">
+     <property name="geometry">
+      <rect>
+       <x>209</x>
+       <y>5</y>
+       <width>41</width>
+       <height>23</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>4</string>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QPushButton" name="pushPlotSc">
+    <property name="geometry">
+     <rect>
+      <x>100</x>
+      <y>150</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Plot 
+ S-Curves</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushFitSc">
+    <property name="geometry">
+     <rect>
+      <x>200</x>
+      <y>150</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Fit 
+ S-Curves</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushOpenBrowser">
+    <property name="geometry">
+     <rect>
+      <x>400</x>
+      <y>150</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Open 
+ Browser</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushSave">
+    <property name="geometry">
+     <rect>
+      <x>470</x>
+      <y>15</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Save</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushEmpty1">
+    <property name="geometry">
+     <rect>
+      <x>500</x>
+      <y>150</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Empty 1</string>
+    </property>
+   </widget>
+   <widget class="QFrame" name="frame_3">
+    <property name="geometry">
+     <rect>
+      <x>97</x>
+      <y>201</y>
+      <width>201</width>
+      <height>111</height>
+     </rect>
+    </property>
+    <property name="frameShape">
+     <enum>QFrame::StyledPanel</enum>
+    </property>
+    <property name="frameShadow">
+     <enum>QFrame::Raised</enum>
+    </property>
+    <widget class="QSpinBox" name="spinPix">
+     <property name="geometry">
+      <rect>
+       <x>114</x>
+       <y>80</y>
+       <width>81</width>
+       <height>26</height>
+      </rect>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="maximum">
+      <number>165887</number>
+     </property>
+     <property name="value">
+      <number>0</number>
+     </property>
+    </widget>
+    <widget class="QPushButton" name="pushFitScSingle">
+     <property name="geometry">
+      <rect>
+       <x>103</x>
+       <y>3</y>
+       <width>95</width>
+       <height>51</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Fit 
+ S-Curve</string>
+     </property>
+    </widget>
+    <widget class="QPushButton" name="pushPlotScSingle">
+     <property name="geometry">
+      <rect>
+       <x>3</x>
+       <y>3</y>
+       <width>95</width>
+       <height>51</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Plot 
+ S-Curve</string>
+     </property>
+    </widget>
+    <widget class="QSpinBox" name="spinRow">
+     <property name="geometry">
+      <rect>
+       <x>34</x>
+       <y>56</y>
+       <width>61</width>
+       <height>26</height>
+      </rect>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="maximum">
+      <number>575</number>
+     </property>
+     <property name="value">
+      <number>0</number>
+     </property>
+    </widget>
+    <widget class="QLabel" name="label_4">
+     <property name="geometry">
+      <rect>
+       <x>5</x>
+       <y>62</y>
+       <width>31</width>
+       <height>16</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Row</string>
+     </property>
+    </widget>
+    <widget class="QSpinBox" name="spinCol">
+     <property name="geometry">
+      <rect>
+       <x>34</x>
+       <y>80</y>
+       <width>61</width>
+       <height>26</height>
+      </rect>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="maximum">
+      <number>287</number>
+     </property>
+     <property name="value">
+      <number>0</number>
+     </property>
+    </widget>
+    <widget class="QLabel" name="label_5">
+     <property name="geometry">
+      <rect>
+       <x>5</x>
+       <y>86</y>
+       <width>31</width>
+       <height>16</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Col</string>
+     </property>
+    </widget>
+    <widget class="QLabel" name="label_6">
+     <property name="geometry">
+      <rect>
+       <x>119</x>
+       <y>67</y>
+       <width>31</width>
+       <height>16</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Pix</string>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QPushButton" name="pushClose">
+    <property name="geometry">
+     <rect>
+      <x>470</x>
+      <y>71</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Close 
+ windows</string>
+    </property>
+   </widget>
+   <widget class="QFrame" name="frame_4">
+    <property name="geometry">
+     <rect>
+      <x>59</x>
+      <y>80</y>
+      <width>135</width>
+      <height>61</height>
+     </rect>
+    </property>
+    <property name="frameShape">
+     <enum>QFrame::StyledPanel</enum>
+    </property>
+    <property name="frameShadow">
+     <enum>QFrame::Raised</enum>
+    </property>
+    <widget class="QRadioButton" name="radioHld">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>6</y>
+       <width>51</width>
+       <height>21</height>
+      </rect>
+     </property>
+     <property name="layoutDirection">
+      <enum>Qt::RightToLeft</enum>
+     </property>
+     <property name="text">
+      <string>hld</string>
+     </property>
+    </widget>
+    <widget class="QRadioButton" name="radioRoot">
+     <property name="geometry">
+      <rect>
+       <x>62</x>
+       <y>6</y>
+       <width>51</width>
+       <height>21</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>root</string>
+     </property>
+    </widget>
+    <widget class="QPushButton" name="pushFindNew">
+     <property name="geometry">
+      <rect>
+       <x>27</x>
+       <y>26</y>
+       <width>81</width>
+       <height>31</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Find Newest</string>
+     </property>
+    </widget>
+    <widget class="QPushButton" name="pushFindBack">
+     <property name="geometry">
+      <rect>
+       <x>3</x>
+       <y>26</y>
+       <width>21</width>
+       <height>31</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>&lt;</string>
+     </property>
+    </widget>
+    <widget class="QPushButton" name="pushFindForth">
+     <property name="geometry">
+      <rect>
+       <x>111</x>
+       <y>26</y>
+       <width>21</width>
+       <height>31</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>&gt;</string>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QPushButton" name="pushUnpack">
+    <property name="geometry">
+     <rect>
+      <x>0</x>
+      <y>150</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Unpack</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushRewrite">
+    <property name="geometry">
+     <rect>
+      <x>0</x>
+      <y>205</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Rewrite</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushEmpty2">
+    <property name="geometry">
+     <rect>
+      <x>500</x>
+      <y>205</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Empty 2</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushSum">
+    <property name="geometry">
+     <rect>
+      <x>300</x>
+      <y>150</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Sum</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushFakes">
+    <property name="geometry">
+     <rect>
+      <x>300</x>
+      <y>205</y>
+      <width>95</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>RMS</string>
+    </property>
+   </widget>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>595</width>
+     <height>20</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/s-curves/analysis_gui/run.sh b/s-curves/analysis_gui/run.sh
new file mode 100755 (executable)
index 0000000..3173fa5
--- /dev/null
@@ -0,0 +1,11 @@
+# export LD_LIBRARY_PATH=/d/jspc22/dabc/lib/:$LD_LIBRARY_PATH
+# echo "Input:  $1"
+# echo "Output: $4"
+# ./unpacker $1 $2 $3 $4
+# echo "Finished!"
+
+
+echo "Input:  $1"
+# echo "Output: $4"
+./unpackerB $1
+echo "Finished!"
diff --git a/s-curves/analysis_gui/runana.sh b/s-curves/analysis_gui/runana.sh
new file mode 100755 (executable)
index 0000000..feb8a1b
--- /dev/null
@@ -0,0 +1,15 @@
+echo "Input: $1"
+# echo "Mode:   $2"
+rndmpxl=`pwd`/rndmpxl.ini
+time ./Mi26Ana $1 $rndmpxl $2 $3 $4 $5
+# echo "Finished!"
+# 
+# echo "./Mi26Ana $1 $rndmpxl $2 $3 $4 $5"
+# echo "--- runana ---"
+# echo $1
+# echo $rndmpxl
+# echo $2 
+# echo $3
+# echo $4
+# echo $5
+# echo "---------"
\ No newline at end of file