ARA ROOT v3.10 Software

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 doxygen 1.4.7