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
