debugging/data_lines/makeAdcTree.cxx
00001 //makePedTree -- Run through a pedestal run and put the ADC values in a tree 00002 00003 #include "TFile.h" 00004 #include "TTree.h" 00005 #include "TGraph.h" 00006 #include "TCanvas.h" 00007 #include "TH1.h" 00008 #include "TH2.h" 00009 00010 #include "RawAtriStationEvent.h" 00011 #include "UsefulAtriStationEvent.h" 00012 00013 #include <iostream> 00014 #include <stdio.h> 00015 #include <stdlib.h> 00016 00017 TGraph *getBlockGraph(TGraph*, Int_t); 00018 00019 int main(int argc, char **argv){ 00020 00021 if(argc<4){ 00022 00023 printf("Usage : %s <runFile> <outPutFile> <is mATRI>\n", argv[0]); 00024 return -1; 00025 00026 } 00027 00028 char runFileName[FILENAME_MAX]; 00029 sprintf(runFileName, "%s", argv[1]); 00030 char outFileName[FILENAME_MAX]; 00031 sprintf(outFileName, "%s", argv[2]); 00032 Int_t is_mATRI=atoi(argv[3]); 00033 Int_t no_ddas=4; 00034 if(is_mATRI) no_ddas=1; 00035 printf("inFileName %s\noutFileName %s\n", runFileName, outFileName); 00036 00037 TFile *fp = new TFile(runFileName); 00038 if(!fp) { 00039 std::cerr << "Can't open file\n"; 00040 return -1; 00041 } 00042 TTree *eventTree = (TTree*) fp->Get("eventTree"); 00043 if(!eventTree) { 00044 std::cerr << "Can't find eventTree\n"; 00045 return -1; 00046 } 00047 RawAtriStationEvent *evPtr=0; 00048 UsefulAtriStationEvent *realEvPtr=0; 00049 eventTree->SetBranchAddress("event",&evPtr); 00050 00051 TFile *outFile = new TFile(outFileName, "RECREATE"); 00052 TTree *outTree = new TTree("adcTree", "adcTree"); 00053 Int_t blockId=0,channel=0,dda=0,sample=0, eventBlockNum=0, entry=0; 00054 Double_t adc=0; 00055 outTree->Branch("blockId", &blockId, "blockId/I"); 00056 outTree->Branch("channel", &channel, "channel/I"); 00057 outTree->Branch("dda", &dda, "dda/I"); 00058 outTree->Branch("sample", &sample, "sample/I"); 00059 outTree->Branch("entry", &entry, "entry/I"); 00060 outTree->Branch("adc", &adc, "adc/D"); 00061 outTree->Branch("eventBlockNum", &eventBlockNum, "eventBlockNum/I"); 00062 00063 Int_t numEntries = eventTree->GetEntries(); 00064 if(numEntries>2000) numEntries=2000; 00065 Int_t starEvery = numEntries/80; 00066 00067 if(!starEvery) starEvery = 1; 00068 00069 for(entry=100;entry<numEntries;entry++){ 00070 if((entry%starEvery)==0) fprintf(stderr, "*"); 00071 eventTree->GetEntry(entry); 00072 00073 realEvPtr = new UsefulAtriStationEvent(evPtr, AraCalType::kNoCalib); 00074 for(dda=0;dda<no_ddas;dda++){ 00075 for(channel=0;channel<RFCHAN_PER_DDA;channel++){ 00076 TGraph *grChannel = realEvPtr->getGraphFromElecChan(channel+dda*RFCHAN_PER_DDA); 00077 Int_t numBlocks = grChannel->GetN() / SAMPLES_PER_BLOCK; 00078 for(eventBlockNum=0;eventBlockNum<numBlocks;eventBlockNum++){ 00079 blockId = evPtr->blockVec[no_ddas*eventBlockNum+dda].getBlock(); 00080 Int_t dda_test = evPtr->blockVec[no_ddas*eventBlockNum+dda].getDda(); 00081 00082 if(dda!=dda_test) fprintf(stderr, "wrong dda\n"); 00083 00084 TGraph *grBlock = getBlockGraph(grChannel, eventBlockNum); 00085 Double_t *yVals = grBlock->GetY(); 00086 for(sample=0;sample<SAMPLES_PER_BLOCK;sample++){ 00087 adc = yVals[sample]; 00088 outTree->Fill(); 00089 }//sample 00090 if(grBlock) delete grBlock; 00091 }//block 00092 if(grChannel) delete grChannel; 00093 }//channel 00094 } 00095 00096 delete realEvPtr; 00097 00098 }//entry 00099 fprintf(stderr, "\n"); 00100 00101 00102 00103 outTree->Write(); 00104 outFile->Write(); 00105 outFile->Close(); 00106 delete outFile; 00107 00108 TFile *inFile=new TFile(outFileName, "UPDATE"); 00109 TTree *adcTree = (TTree*) gDirectory->Get("adcTree"); 00110 TH1* hists[4]={0}; 00111 for(dda=0;dda<4;dda++){ 00112 char exp[100]; 00113 sprintf(exp, "adc:sample>>tempHist"); 00114 char cut[100]; 00115 sprintf(cut, "dda==%i&&channel==1", dda); 00116 adcTree->Draw(exp, cut, "COLZ"); 00117 hists[dda] = (TH1*) gDirectory->Get("tempHist"); 00118 char histName[100]; 00119 sprintf(histName, "adc_vs_sample_dda_%i", dda); 00120 hists[dda]->SetName(histName); 00121 hists[dda]->SetTitle(histName); 00122 char xAxis[100]; 00123 sprintf(xAxis, "Sample #"); 00124 hists[dda]->GetXaxis()->SetTitle(xAxis); 00125 char yAxis[100]; 00126 sprintf(yAxis, "ADC"); 00127 hists[dda]->GetYaxis()->SetTitle(yAxis); 00128 00129 hists[dda]->Write(); 00130 } 00131 TH1 *hStuckBit[4][11]; 00132 TCanvas *canStuckBit[4]; 00133 char canName[100]; 00134 for(int dda=0;dda<4;dda++){ 00135 sprintf(canName, "dda_%i", dda); 00136 canStuckBit[dda] = new TCanvas(canName, canName); 00137 canStuckBit[dda]->Divide(3,4); 00138 for(int bit=0;bit<11;bit++){ 00139 canStuckBit[dda]->cd(bit+1); 00140 char histName[100]; 00141 sprintf(histName, "dda_%i_bits_%i_&_%i", dda, bit, bit+1); 00142 char histExp[110]; 00143 sprintf(histExp, "(adc&%i)/%i:(adc&%i)/%i>>tempHist(2,-0.5,1.5,2,-0.5,1.5)", 1<<bit, 1<<bit, 1<<(bit+1), 1<<(bit+1)); 00144 char histCut[110]; 00145 sprintf(histCut, "channel==1&&dda==%i", dda); 00146 char histYaxisTitle[100]; 00147 sprintf(histYaxisTitle, "bit %i", bit); 00148 char histXaxisTitle[100]; 00149 sprintf(histXaxisTitle, "bit %i", bit+1); 00150 adcTree->Draw(histExp, histCut, "COLZTEXT"); 00151 00152 hStuckBit[dda][bit] = (TH1*) gDirectory->Get("tempHist"); 00153 hStuckBit[dda][bit]->SetName(histName); 00154 hStuckBit[dda][bit]->SetTitle(histName); 00155 hStuckBit[dda][bit]->SetMarkerColor(kBlack); 00156 hStuckBit[dda][bit]->SetMarkerSize(4); 00157 hStuckBit[dda][bit]->GetYaxis()->SetTitle(histYaxisTitle); 00158 hStuckBit[dda][bit]->GetXaxis()->SetTitle(histXaxisTitle); 00159 hStuckBit[dda][bit]->GetYaxis()->CenterTitle(); 00160 hStuckBit[dda][bit]->GetXaxis()->CenterTitle(); 00161 Double_t maxZ = hStuckBit[dda][bit]->GetEntries(); 00162 hStuckBit[dda][bit]->GetZaxis()->SetRangeUser(0,maxZ); 00163 00164 hStuckBit[dda][bit]->Draw("COLZTEXT"); 00165 delete (TH1*) gDirectory->Get("tempHist"); 00166 00167 }//bit 00168 canStuckBit[dda]->Write(); 00169 }//dda 00170 00171 00172 return 0; 00173 } 00174 00175 TGraph *getBlockGraph(TGraph *fullEventGraph, Int_t block){ 00176 Int_t numSamples = fullEventGraph->GetN(); 00177 Int_t numBlocks = numSamples / SAMPLES_PER_BLOCK; 00178 if(block > numBlocks) return NULL; 00179 Double_t *fullX = fullEventGraph->GetX(); 00180 Double_t *fullY = fullEventGraph->GetY(); 00181 Double_t *blockX = new Double_t[SAMPLES_PER_BLOCK]; 00182 Double_t *blockY = new Double_t[SAMPLES_PER_BLOCK]; 00183 for(int sample=0;sample<SAMPLES_PER_BLOCK; sample++){ 00184 blockY[sample] = fullY[sample + block*SAMPLES_PER_BLOCK]; 00185 blockX[sample] = fullX[sample + block*SAMPLES_PER_BLOCK]; 00186 } 00187 TGraph *blockGraph = new TGraph(SAMPLES_PER_BLOCK, blockX, blockY); 00188 delete blockX; 00189 delete blockY; 00190 return blockGraph; 00191 } 00192
Generated on Tue Jul 16 16:58:02 2013 for ARA ROOT v3.10 Software by
