Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.30 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <vector>
  6. #include <sstream>
  7. #include <time.h>
  8. #include <math.h>
  9. #include <iomanip>  
  10.  
  11. #include <TTree.h>
  12. #include <TF1.h>
  13. #include <TApplication.h>
  14. #include "TH2.h"
  15. #include "TCanvas.h"
  16. using namespace std;
  17.  
  18.  
  19.  
  20. int main()
  21. {
  22.     TApplication tapp("Test", 0, nullptr);
  23.     string fileName ="/home/kurbanov/dat-161208-230005.txt";
  24.     //cout << "Enter the path to the file " << endl;
  25.     //cin >> fileName;
  26.     ifstream fileData(fileName);
  27.     if (!fileData.is_open())
  28.     {
  29.         cout << "The file can not be opened, or it does not exist " << endl;
  30.         exit(EXIT_FAILURE);
  31.     }
  32.     cout << "Start reading the file..." << endl;
  33.     string currLine;
  34.     stringstream currLineStream;
  35.     vector<vector<double>> dataArr;
  36.     vector<vector<double>> noiseArr;
  37.     vector<vector<double>> prenoiseArr;
  38.     int numC = 1;
  39.     int tempBefore = 0;
  40.     vector<double> sumHist;
  41.     vector<double> rangStat;
  42.     vector<double> meanVar;
  43.     vector<double> meanRang;
  44.     vector<double> premeanVar;
  45.     vector<double> dispString;
  46.     vector<vector<double>> calibr;
  47.     int iter=1;
  48.  
  49.     calibr = {
  50.         { 0.000351  ,   1.091823 },
  51.         { 0.000426  ,   1.082093 },
  52.         { 0.000724  ,   1.992202 },
  53.         { 0.000451  ,   1.089559 },
  54.         { 0.00048   ,   1.993924 },
  55.         { 0.000446  ,   1.067797 },
  56.         { 0.000601  ,   1.986901 },
  57.         { 0.000507  ,   1.075548 },
  58.         { 0.000768  ,   1.966585 },
  59.         { 0.000443  ,   1.082903 },
  60.         { 0.001169  ,   1.966140 },
  61.         { 0.000434  ,   1.098456 },
  62.         { 0.000609  ,   2.002554 },
  63.         { 0.000365  ,   1.097464 },
  64.         { 0.00051   ,   2.027917 },
  65.         { 0.000341  ,   1.112693 },
  66.         { 0.000555  ,   2.011218 },
  67.         { 0.000409  ,   1.115200 },
  68.         { 0.001046  ,   1.965384 },
  69.         { 0.000738  ,   1.983089 },
  70.         { 0.000824  ,   1.995227 },
  71.         { 0.000605  ,   1.093794 },
  72.         { 0.000609  ,   2.038958 },
  73.         { 0 ,   0 },
  74.         { 0.000488  ,   1.104691 },
  75.         { 0 ,   0 } };
  76.     TH1D *chHist[26];
  77.     TH1* Hist =new TH1D("Sum", "Sum", 800, 0, 80);
  78.     //TH1* Stat =new TH1D("Rang", "Rang", 26, 0, 26);
  79.     //TH1D *Stat[100];
  80.     for (int i = 0; i<26; i++)
  81.     {
  82.         char buf[100];
  83.         sprintf(buf, "Channel %d", i);
  84.         chHist[i] = new TH1D(buf, buf, 1000, 0, 100);
  85.     }
  86.     /*for (int i = 0; i<100; i++)
  87.     {
  88.         char buf[100];
  89.         sprintf(buf, "String %d", i);
  90.         Stat[i] = new TH1D(buf, buf, 26, 0, 26);
  91.     }*/
  92.     while (!fileData.eof())
  93.     {
  94.         while (numC != 3)
  95.         {
  96.             getline(fileData, currLine);
  97.             if (fileData.eof())
  98.                 break;
  99.             if (currLine[0] == '#' || currLine[0] == '\t')
  100.             {
  101.                 continue;
  102.             }
  103.  
  104.             double temp;
  105.             vector<double> bufferData;
  106.             vector<double> bufferNoise;
  107.             currLineStream << currLine;
  108.             currLineStream >> temp;
  109.             currLineStream >> temp;
  110.             currLineStream >> temp;
  111.             int tempNow = temp;
  112.             if (tempNow != tempBefore)
  113.             {
  114.                 numC++;
  115.  
  116.             }
  117.  
  118.             tempBefore = temp;
  119.             if (temp == 0)
  120.             {
  121.                 while (!currLineStream.eof())
  122.                 {
  123.                     currLineStream >> temp;
  124.                     bufferData.push_back(temp);
  125.                 }
  126.                 dataArr.push_back(bufferData);
  127.             }
  128.             else
  129.             {
  130.                 while (!currLineStream.eof())
  131.                 {
  132.                     currLineStream >> temp;
  133.                     bufferNoise.push_back(temp);
  134.                 }
  135.                 noiseArr.push_back(bufferNoise);
  136.             }
  137.             currLineStream.str("");
  138.             currLineStream.clear();
  139.  
  140.         }
  141.         //cout << dataArr << endl;
  142.         if (numC == 3)
  143.         {
  144.             numC = 1;
  145.         }
  146.         //cout << noiseArr.size() << ebndl;
  147.         if (noiseArr.size() > 1)
  148.         {
  149.             for (int j = 0; j < 26; j++)
  150.             {
  151.                 double avgVar = 0;
  152.                 for (int i = 0; i < noiseArr.size(); i++)
  153.                 {
  154.                     avgVar += noiseArr[i][j];
  155.                 }
  156.                 avgVar /= noiseArr.size();
  157.                 meanVar.push_back(avgVar);
  158.             }
  159.         }
  160.         if (prenoiseArr.size() != 0 && noiseArr.size() > 1)
  161.         {
  162.             for (int j = 0; j < 26; j++)
  163.             {
  164.                 for (int i = 0; i < dataArr.size(); i++)
  165.                 {
  166.                     dataArr[i][j] = abs(dataArr[i][j] - meanVar[j] / 2. - premeanVar[j] / 2.);
  167.                 }
  168.             }
  169.         }
  170.         if (noiseArr.size() > 1 && prenoiseArr.size() == 0)
  171.         {
  172.             for (int j = 0; j < 26; j++)
  173.             {
  174.                 for (int i = 0; i < dataArr.size(); i++)
  175.                 {
  176.                     dataArr[i][j] = dataArr[i][j] - meanVar[j];
  177.                 }
  178.  
  179.             }
  180.         }
  181.         if (prenoiseArr.size() != 0 && noiseArr.size() < 2)
  182.         {
  183.             for (int j = 0; j < 26; j++)
  184.             {
  185.                 for (int i = 0; i < dataArr.size(); i++)
  186.                 {
  187.                     dataArr[i][j] = dataArr[i][j] - premeanVar[j];
  188.                 }
  189.  
  190.             }
  191.         }
  192.         for (int i = 0; i < dataArr.size(); i++)
  193.         {
  194.            
  195.             for (int j = 0; j < 26; j++)
  196.             {  
  197.                 if(dataArr[i][j] < 0)
  198.                     dataArr[i][j]=0;
  199.                 else
  200.                 dataArr[i][j] = dataArr[i][j] * calibr[j][0] + sqrt(dataArr[i][j])*calibr[j][1];
  201.                 //sum+=dataArr[i][j];
  202.                 //sum=sum/24.;
  203.                
  204.                 //rangStat.push_back(dataArr[0][j]);
  205.             }
  206.             //sumHist.push_back(sum);
  207.         }
  208.        
  209.         for(int j=0;j<dataArr.size();j++)
  210.         {
  211.             double mean=0;
  212.             for(int i=0;i<26;i++)
  213.             {  
  214.                 if ( i == 23 || i == 25 )
  215.                 continue;
  216.                 mean+=dataArr[j][i];
  217.             }
  218.             mean=mean/24.;
  219.             meanRang.push_back(mean);
  220.         }
  221.         for(int j=0;j<dataArr.size();j++)
  222.         {
  223.             double value=0;
  224.             for(int i=0;i<26;i++)  
  225.             {
  226.                 if ( i == 23 || i == 25 )
  227.                 continue;      
  228.                 value+=(dataArr[j][i]-meanRang[j])*(dataArr[j][i]-meanRang[j]);
  229.             }
  230.             value=sqrt(value/24.);
  231.             dispString.push_back(value);
  232.         }
  233.         //for(int i=0;i<10;i++){ cout<<dispString[i]<<"\t"; }
  234.         cout<<iter<<" Data pre "<<dataArr.size()<<endl;
  235.         for(int i=0; i<dataArr.size();i++)
  236.         {  
  237.             if(dispString[i]>0.6)
  238.             {
  239.                 dataArr.erase(dataArr.begin() + i);
  240.                 dispString.erase(dispString.begin()+i);
  241.                 i--;
  242.             }
  243.         }
  244.         cout<<" Data after "<<dataArr.size()<<endl;
  245.         for(int j=0;j<dataArr.size();j++)
  246.         {
  247.             double value=0;
  248.             for(int i=0;i<26;i++)  
  249.             {
  250.                 if ( i == 23 || i == 25 )
  251.                 continue;
  252.                 value+=dataArr[j][i];
  253.             }
  254.             value=value/24.;
  255.             sumHist.push_back(value);
  256.            
  257.         }
  258.         for (int i = 0; i<dataArr.size(); i++)
  259.         {
  260.            
  261.             Hist->Fill(sumHist[i]);
  262.            
  263.         }
  264.         //cout<<"size "<<dispString.size()<<endl;
  265.         /*if(iter==1)
  266.         {
  267.             for (int i=0; i<24;i++)
  268.             {  
  269.                
  270.                 for(int j=0;j<100;j++)
  271.                 {
  272.                 if(i==0)
  273.                 {
  274.                     //cout<<j<<" "<<dispString[j]<<endl; }
  275.                     Stat[j]->SetBinContent(i+1,dataArr[j][i]);
  276.                 }
  277.             }
  278.            
  279.         }
  280.        
  281.         /*for (int i = 0; i < dataArr.size(); i++)
  282.         {
  283.                 for (int j = 0; j < 8; j++)
  284.             {
  285.                 cout << dataArr[i][j] <<'\t';
  286.             }
  287.             cout << endl;
  288.         }
  289.        
  290.         for (Int_t i = 0; i<dataArr.size(); i++)
  291.         {
  292.             for (Int_t j = 0; j<26; j++)
  293.             {
  294.                 chHist[j]->Fill(dataArr[i][j]);
  295.             }
  296.            
  297.            
  298.         }*/
  299.        
  300.         prenoiseArr = noiseArr;
  301.         premeanVar = meanVar;
  302.         sumHist.clear();
  303.         meanVar.clear();
  304.         dataArr.clear();
  305.         noiseArr.clear();
  306.         dispString.clear();
  307.         meanRang.clear();
  308.        
  309.         iter++;
  310.         //if(iter==10){ break; }
  311.  
  312.     }
  313.     cout << "Reading file is complete." << endl;
  314.     cout << "Data size " << dataArr.size() << endl;
  315.     TCanvas c ( "test", "test" );
  316.    
  317.     /*chHist[0]->Draw();
  318.     c.SetGridx();
  319.         c.Print ( "/home/kurbanov/calibr.pdf(" );
  320.         for ( int i = 1; i < 25; i++ )
  321.           {
  322.         chHist[i]->Draw();
  323.         c.SetGridx();
  324.         c.Print ( "/home/kurbanov/calibr.pdf" );
  325.         }
  326.         chHist[25]->Draw();
  327.     c.SetGridx();
  328.         c.Print ( "/home/kurbanov/calibr.pdf)" );*/
  329.     Hist->Draw();
  330.     c.SetGridx();
  331.     c.Print ( "/home/kurbanov/sumcalibr.pdf");
  332.     /*Stat[0]->Draw();
  333.     c.SetGridx();
  334.     c.Print ( "/home/kurbanov/rang.pdf(");
  335.     for ( int i = 1; i < 99; i++ )
  336.           {
  337.         Stat[i]->Draw();
  338.         c.SetGridx();
  339.         c.Print ( "/home/kurbanov/rang.pdf" );
  340.         }
  341.         Stat[99]->Draw();
  342.     c.SetGridx();
  343.         c.Print ( "/home/kurbanov/rang.pdf)" );*/
  344.     tapp.Run();
  345.  
  346. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement