ARA ROOT v3.10 Software

calibration/ATRI/voltageCalib/getCalibNumbers.cxx

00001 #include "TFile.h"
00002 #include "TChain.h"
00003 #include "TMath.h"
00004 
00005 #include "araSoft.h"
00006 
00007 #include <iostream>
00008 #include <fstream>
00009 
00010 TChain *chain = new TChain("fitTree");
00011 
00012 void getCalibNumbers(char *baseDir, char *outFileName, bool debug=false){
00013 
00014 
00015 
00016   char fileName[FILENAME_MAX];
00017   for(int block=0;block<BLOCKS_PER_DDA; block++){
00018     sprintf(fileName, "%s/ADCmVConversion_block%i.root", baseDir, block);
00019     chain->Add(fileName);
00020   }
00021   
00022   Int_t numEntries = chain->GetEntries();
00023 
00024 
00025   Int_t dda=0, chan=0, sample=0, block=0, posNeg=0;
00026   Double_t p0=0, p1=0, p2=0, p3=0;
00027 
00028   chain->SetBranchAddress("dda", &dda);
00029   chain->SetBranchAddress("chan", &chan);
00030   chain->SetBranchAddress("sample", &sample);
00031   chain->SetBranchAddress("block", &block);
00032   chain->SetBranchAddress("posNeg", &posNeg);
00033 
00034   chain->SetBranchAddress("p0", &p0);
00035   chain->SetBranchAddress("p1", &p1);
00036   chain->SetBranchAddress("p2", &p2);
00037   chain->SetBranchAddress("p3", &p3);
00038 
00039   Double_t ****negP1= new Double_t***[DDA_PER_ATRI];
00040   Double_t ****posP1= new Double_t***[DDA_PER_ATRI];
00041   Double_t ****posP2= new Double_t***[DDA_PER_ATRI];
00042   Double_t ****posP3= new Double_t***[DDA_PER_ATRI];
00043 
00044   Double_t ****negP1_in= new Double_t***[DDA_PER_ATRI];
00045   Double_t ****posP1_in= new Double_t***[DDA_PER_ATRI];
00046   Double_t ****posP2_in= new Double_t***[DDA_PER_ATRI];
00047   Double_t ****posP3_in= new Double_t***[DDA_PER_ATRI];
00048   
00049   Int_t firstBadSample=0;
00050 
00051   printf("Initialise Arrays\n");
00052 
00053    for(dda=0;dda<DDA_PER_ATRI;dda++){
00054      negP1[dda] = new Double_t**[RFCHAN_PER_DDA];
00055      posP1[dda] = new Double_t**[RFCHAN_PER_DDA];
00056      posP2[dda] = new Double_t**[RFCHAN_PER_DDA];
00057      posP3[dda] = new Double_t**[RFCHAN_PER_DDA];
00058 
00059      negP1_in[dda] = new Double_t**[RFCHAN_PER_DDA];
00060      posP1_in[dda] = new Double_t**[RFCHAN_PER_DDA];
00061      posP2_in[dda] = new Double_t**[RFCHAN_PER_DDA];
00062      posP3_in[dda] = new Double_t**[RFCHAN_PER_DDA];
00063 
00064      for(chan=0;chan<RFCHAN_PER_DDA;chan++){
00065        negP1[dda][chan] = new Double_t*[BLOCKS_PER_DDA];
00066        posP1[dda][chan] = new Double_t*[BLOCKS_PER_DDA];
00067        posP2[dda][chan] = new Double_t*[BLOCKS_PER_DDA];
00068        posP3[dda][chan] = new Double_t*[BLOCKS_PER_DDA];
00069 
00070        negP1_in[dda][chan] = new Double_t*[BLOCKS_PER_DDA];
00071        posP1_in[dda][chan] = new Double_t*[BLOCKS_PER_DDA];
00072        posP2_in[dda][chan] = new Double_t*[BLOCKS_PER_DDA];
00073        posP3_in[dda][chan] = new Double_t*[BLOCKS_PER_DDA];
00074 
00075        for(block=0;block<BLOCKS_PER_DDA;block++){
00076          negP1[dda][chan][block] = new Double_t[SAMPLES_PER_BLOCK];
00077          posP1[dda][chan][block] = new Double_t[SAMPLES_PER_BLOCK];
00078          posP2[dda][chan][block] = new Double_t[SAMPLES_PER_BLOCK];
00079          posP3[dda][chan][block] = new Double_t[SAMPLES_PER_BLOCK];
00080 
00081          negP1_in[dda][chan][block] = new Double_t[SAMPLES_PER_BLOCK];
00082          posP1_in[dda][chan][block] = new Double_t[SAMPLES_PER_BLOCK];
00083          posP2_in[dda][chan][block] = new Double_t[SAMPLES_PER_BLOCK];
00084          posP3_in[dda][chan][block] = new Double_t[SAMPLES_PER_BLOCK];
00085 
00086          for(sample=0;sample<SAMPLES_PER_BLOCK;sample++){
00087            negP1[dda][chan][block][sample]=1;
00088            posP1[dda][chan][block][sample]=1;
00089            posP2[dda][chan][block][sample]=0;
00090            posP3[dda][chan][block][sample]=0;
00091          }
00092        }
00093      }
00094    }
00095   
00096 
00097 
00098   Int_t starEvery = numEntries/80;
00099   for(int entry=0;entry<numEntries;entry++){
00100     if(entry%starEvery==0) std::cerr << "*";
00101     chain->GetEntry(entry);
00102     if(posNeg==+1){
00103       posP1[dda][chan][block][sample]=p1;
00104       posP2[dda][chan][block][sample]=p2;
00105       posP3[dda][chan][block][sample]=p3;
00106       if(firstBadSample==0){
00107         if(posP1[dda][chan][block][sample]!=posP1[dda][chan][block][sample] ||
00108            posP2[dda][chan][block][sample]!=posP2[dda][chan][block][sample] ||
00109            posP3[dda][chan][block][sample]!=posP3[dda][chan][block][sample]        
00110            ){
00111           
00112           firstBadSample=1;
00113           printf("%i %i %i %i\n", dda, chan, block, sample);
00114         }        
00115       }
00116         
00117       
00118     }
00119     else if(posNeg==-1){
00120       negP1[dda][chan][block][sample]=p1;
00121       if(firstBadSample==0){
00122         if(negP1[dda][chan][block][sample]!=negP1[dda][chan][block][sample]){
00123           
00124           firstBadSample=1;
00125           printf("%i %i %i %i\n", dda, chan, block, sample);
00126         }        
00127       }
00128 
00129     }
00130   }
00131   std::cerr << "\n";
00132 
00133 
00134   
00135   
00136   
00137   //Save values;
00138 
00139   std::ofstream outFile(outFileName);
00140   int entry=0;
00141   starEvery=(DDA_PER_ATRI*RFCHAN_PER_DDA*BLOCKS_PER_DDA*SAMPLES_PER_BLOCK)/80;
00142    for(dda=0;dda<DDA_PER_ATRI;dda++){
00143      for(chan=0;chan<RFCHAN_PER_DDA;chan++){
00144        
00145        for(block=0;block<BLOCKS_PER_DDA;block++){
00146          outFile << dda << "\t" << chan << "\t" << block << "\t";
00147         for(sample=0;sample<SAMPLES_PER_BLOCK;sample++){
00148           entry++;
00149           if(entry%starEvery==0) std::cerr << "*";
00150           if( ((dda==0 || dda==3) && (chan < 6)) || ((dda==1 || dda==2) && (chan < 4))){
00151             outFile << negP1[dda][chan][block][sample] << " ";
00152             outFile << posP1[dda][chan][block][sample] << " ";
00153             outFile << posP2[dda][chan][block][sample] << " ";
00154             outFile << posP3[dda][chan][block][sample] << " ";
00155             
00156           }
00157           else{
00158             outFile << "1" << " ";
00159             outFile << "1" << " ";
00160             outFile << "0" << " ";
00161             outFile << "0" << " ";
00162           }
00163 
00164         }
00165         outFile << "\n";
00166        }
00167      }
00168    }
00169    std::cerr << "\n";
00170 
00171    outFile.close();
00172 
00173  
00174    if(debug){
00175      //Load values;
00176      entry=0;
00177      std::ifstream inFile(outFileName);
00178      
00179      while(inFile >> dda >> chan >> block){
00180        for(sample=0;sample<SAMPLES_PER_BLOCK;sample++){
00181          entry++;
00182          if(entry%starEvery==0) std::cerr << "*";
00183          inFile >> negP1_in[dda][chan][block][sample];
00184          inFile >> posP1_in[dda][chan][block][sample];
00185          inFile >> posP2_in[dda][chan][block][sample];
00186          inFile >> posP3_in[dda][chan][block][sample];
00187          
00188          Double_t precision=1e-5;
00189          if(TMath::Abs(negP1_in[dda][chan][block][sample] - negP1[dda][chan][block][sample]) / negP1[dda][chan][block][sample] > precision  ) fprintf(stderr, "%i %i %i %i\n", dda, chan, block, sample);
00190          if(TMath::Abs(posP1_in[dda][chan][block][sample] - posP1[dda][chan][block][sample]) / posP1[dda][chan][block][sample] > precision  ) fprintf(stderr, "%i %i %i %i\n", dda, chan, block, sample);
00191          if(TMath::Abs(posP2_in[dda][chan][block][sample] - posP2[dda][chan][block][sample]) / posP2[dda][chan][block][sample] > precision  ) fprintf(stderr, "%i %i %i %i\n", dda, chan, block, sample);
00192          if(TMath::Abs(posP3_in[dda][chan][block][sample] - posP3[dda][chan][block][sample]) / posP3[dda][chan][block][sample] > precision  ) fprintf(stderr, "%i %i %i %i\n", dda, chan, block, sample);
00193          
00194        }
00195      }
00196      std::cerr << "\n";   
00197      inFile.close();
00198    }
00199 
00200 
00201 
00202    
00203 
00204 }

Generated on Tue Jul 16 16:58:02 2013 for ARA ROOT v3.10 Software by doxygen 1.4.7