int quickLoopAndPlot(int event, int dda,int chan0, int chan1) { TFile *fp = new TFile("/Users/rjn/ara/data/ohio2011/root/run366/event366.root"); if(!fp) { std::cerr << "Can't open file\n"; return -1; } TTree *eventTree = (TTree*) fp->Get("eventTree"); if(!eventTree) { std::cerr << "Can't find eventTree\n"; return -1; } RawAraOneStationEvent *evPtr=0; eventTree->SetBranchAddress("event",&evPtr); Long64_t numEntries=eventTree->GetEntries(); Long64_t starEvery=numEntries/80; eventTree->GetEntry(event); UsefulAraOneStationEvent realEvent(evPtr,AraCalType::kNoCalib); TGraph *gr1 =realEvent.getGraphFromElecChan(chan0+8*dda); TGraph *gr2 =realEvent.getGraphFromElecChan(chan1+8*dda); TCanvas *can2 = new TCanvas("can2","can2",800,800); can2->Divide(1,2); can2->cd(1); gr1->Draw("alp"); gr1->GetXaxis()->SetTitle("Channel 0 Sample"); gr1->GetYaxis()->SetTitle("Channel 0 (ADC)"); can2->cd(2); gr2->GetXaxis()->SetTitle("Channel 1 Sample"); gr2->GetYaxis()->SetTitle("Channel 1 (ADC)"); gr2->Draw("alp"); TCanvas *can = new TCanvas("can","can"); TGraph *gr3= new TGraph(gr1->GetN(),gr1->GetY(),gr2->GetY()); gr3->SetMarkerStyle(22); gr3->Draw("ap"); gr3->GetXaxis()->SetTitle("Channel 0 (ADC)"); gr3->GetYaxis()->SetTitle("Channel 1 (ADC)"); }
TH2D *crossCorrelate(RawAnitaEvent *evPtr,RawAnitaHeader *hdPtr,Adu5Pat *patPtr){ gStyle->SetPalette(1); int triggeredPhi[16]; int triggeredAnt[32]; double thetaArray[NUM_BINS_THETA]; double phiArray[NUM_BINS_PHI]; double cosThetaArray[NUM_BINS_THETA]; double sinThetaArray[NUM_BINS_THETA]; double cosPhiArray[NUM_BINS_PHI]; double sinPhiArray[NUM_BINS_PHI]; PrettyAnitaEvent realEvent(evPtr,WaveCalType::kVTFullAGCrossCorClock,hdPtr); UsefulAdu5Pat usefulPat(patPtr); getTriggeredPhi(hdPtr,triggeredPhi); getTriggeredAnt(triggeredPhi,triggeredAnt); setupCosSinArray(thetaArray,phiArray,cosThetaArray,sinThetaArray,cosPhiArray,sinPhiArray); TGraph *grTemp[32]={0}; TGraph *grTemp2[32]={0}; TGraph *grTemp3[32]={0}; TGraph *grInt[32]={0}; TGraph *grCorr[528]={0}; double firstCorrTime[528]; double dummyY; Double_t deltaT=1/(2.6*8.); for(int ant=0;ant<32;ant++){ if(triggeredAnt[ant]){ //grInt[ant]=realEvent.getGraph(AnitaGeomTool::getChanIndexFromAntPol(ant,AnitaPol::kVertical)); grTemp[ant]=realEvent.getGraph(AnitaGeomTool::getChanIndexFromAntPol(ant,AnitaPol::kVertical)); grTemp2[ant]=FFTtools::simpleNotchFilter(grTemp[ant],370.,520.); grTemp3[ant]=FFTtools::simpleNotchFilter(grTemp2[ant],920.,980.); grInt[ant]=FFTtools::simpleNotchFilter(grTemp3[ant],1120,1220); } } int arrayRef=0; char canName[FILENAME_MAX]; TCanvas *canny[528]; for(int ant1=0;ant1<32;ant1++){ for(int ant2=ant1;ant2<32;ant2++){ if(triggeredAnt[ant1] && triggeredAnt[ant2] && ant1!=ant2){ grCorr[arrayRef]=FFTtools::getInterpolatedCorrelationGraph(grInt[ant1],grInt[ant2],deltaT); grCorr[arrayRef]->GetPoint(0,firstCorrTime[arrayRef],dummyY); /* sprintf(canName,"can%d",arrayRef); canny[arrayRef] = new TCanvas(canName,canName,800,600); canny[arrayRef]->Divide(1,3); canny[arrayRef]->cd(1); sprintf(canName,"ant %d (phi %d)",ant1+1,AnitaGeomTool::getPhiFromAnt(ant1)+1); grInt[ant1]->SetTitle(canName); grInt[ant1]->Draw("al"); canny[arrayRef]->cd(2); sprintf(canName,"ant %d (phi %d)",ant2+1,AnitaGeomTool::getPhiFromAnt(ant2)+1); grInt[ant2]->SetTitle(canName); grInt[ant2]->Draw("al"); canny[arrayRef]->cd(3); sprintf(canName,"corr %d %d",ant1+1,ant2+1); grCorr[arrayRef]->SetTitle(canName); grCorr[arrayRef]->Draw("al"); */ arrayRef++; } else{ if(ant1!=ant2) arrayRef++; } } } double deltaTarray[NUM_BINS_PHI][NUM_BINS_THETA]; double correlationArray[NUM_BINS_PHI][NUM_BINS_THETA]; for(int phi=0;phi<NUM_BINS_PHI;phi++){ for(int theta=0;theta<NUM_BINS_THETA;theta++){ deltaTarray[phi][theta]=0.; correlationArray[phi][theta]=0.; } } int getPoint; double xVal1; double xVal2; double weight1; double weight2; double pointVal1; double pointVal2; arrayRef=0; for(int ant1=0;ant1<32;ant1++){ for(int ant2=ant1;ant2<32;ant2++){ if(triggeredAnt[ant1] && triggeredAnt[ant2] && ant1!=ant2){// && ant1==2 && ant2==21){ for(int phi=0;phi<NUM_BINS_PHI;phi++){ for(int theta=0;theta<NUM_BINS_THETA;theta++){ //deltaTarray[phi][theta] = usefulPat.getDeltaTExpected(ant1,ant2,cosPhiArray[phi],sinPhiArray[phi],cosThetaArray[theta],sinThetaArray[theta]); deltaTarray[phi][theta] = usefulPat.getDeltaTExpected(ant1,ant2,phiArray[phi],thetaArray[theta]); getPoint=static_cast<int>((deltaTarray[phi][theta]-firstCorrTime[arrayRef])*1/deltaT); grCorr[arrayRef]->GetPoint(getPoint,xVal1,pointVal1); grCorr[arrayRef]->GetPoint(getPoint+1,xVal2,pointVal2); //std::cout << "delta T" << deltaTarray[phi][theta] << " xVal " << xVal1 << " xVal2 " << xVal2 << std::endl; weight1 = 1 - fabs(deltaTarray[phi][theta]-xVal1)/(deltaT); weight2 = 1 - fabs(deltaTarray[phi][theta]-xVal2)/(deltaT); correlationArray[phi][theta]+=(pointVal1*weight1+pointVal2*weight2); }//theta }//phi }//if if(ant1!=ant2) arrayRef++; }//ant2 }//ant1 char histName[FILENAME_MAX]; sprintf(histName,"sumCrossCorrs"); //H2D *sumCrossCorrs = new TH2D(histName,histName,NUM_BINS_PHI,2,17,NUM_BINS_THETA,-90,90); TH2D *sumCrossCorrs = new TH2D(histName,histName,NUM_BINS_PHI,0,360,NUM_BINS_THETA,-90,90); double phiscale = (15./360.); for(int phi=0;phi<NUM_BINS_PHI;phi++){ for(int theta=0;theta<NUM_BINS_THETA;theta++){ //sumCrossCorrs->Fill(phiArray[phi]*180/PI*phiscale+2.,thetaArray[theta]*180./PI,correlationArray[phi][theta]); if(thetaArray[theta]*180./PI < 50. && thetaArray[theta]*180./PI > -50.)// && phiArray[phi]*180./PI >270) sumCrossCorrs->Fill(phiArray[phi]*180./PI,thetaArray[theta]*180./PI,correlationArray[phi][theta]); } } //sprintf(histName,"crossCorrCan"); //TCanvas *crossCorrCan = new TCanvas(histName,histName,800,400); //sumCrossCorrs->Draw("aitoff"); //sumCrossCorrs->Draw("colz"); return sumCrossCorrs; }
void plotZC(int run, int startEntry, int numEntries) { gSystem->Load("libAnitaEvent.so"); char eventName[FILENAME_MAX]; char headerName[FILENAME_MAX]; char hkName[FILENAME_MAX]; sprintf(eventName,"/unix/anita1/webData/firstDay/run%d/eventFile%d*.root",run,run); sprintf(headerName,"/unix/anita1/webData/firstDay/run%d/timedHeadFile%d.root",run,run); sprintf(hkName,"/unix/anita1/webData/firstDay/run%d/prettyHkFile%d.root",run,run); RawAnitaEvent *event = 0; TimedAnitaHeader *header =0; PrettyAnitaHk *hk = 0; TChain *eventChain = new TChain("eventTree"); eventChain->Add(eventName); eventChain->SetBranchAddress("event",&event); TFile *fpHead = new TFile(headerName); TTree *headTree = (TTree*) fpHead->Get("headTree"); headTree->SetBranchAddress("header",&header); TFile *fpHk = new TFile(hkName); TTree *prettyHkTree = (TTree*) fpHk->Get("prettyHkTree"); prettyHkTree->SetBranchAddress("hk",&hk); //Friends only seem to work with TTree::Draw and similar commands //if you are manually calling GetEntry (i.e in a loop) you must call //the GetEntry for each tree separately. eventChain->AddFriend(headTree); eventChain->AddFriend(prettyHkTree); // TCanvas *canClock = (TCanvas*) gROOT->FindObject("canClock"); // if(!canClock) { // canClock = new TCanvas("canClock","canClock",800,800); // } char textLabel[180]; char pngName[180]; TGraph *gr[9]={0}; TH1F *histZc = new TH1F("histZc","histZc",1000,-100,100); TH1F *histCount = new TH1F("histCount","histCount",10,0,10); TH2F *hist2d = new TH2F("hist2d","hist2d",100,0,100,100,0,100); TH1F *histMvMax = new TH1F("histMvMax","histMvMax",1000,0,500); TH1F *histMvMin = new TH1F("histMvMin","histMvMin",1000,-500,0); TH2F *histMv2d = new TH2F("histMv2d","histMv2d",500,-500,0,500,0,500); for(int entry=startEntry;entry<startEntry+numEntries;entry++) { //Stupidly must do this to be perfectly safe eventChain->GetEntry(entry); headTree->GetEntry(entry); prettyHkTree->GetEntry(entry); UsefulAnitaEvent realEvent(event,WaveCalType::kVTFullJWPlus,hk); //Just SURF 0 for now. Double_t mean=TMath::Mean(realEvent.fNumPoints[8],realEvent.fVolts[8]); Int_t countZC[9]={0}; Double_t zcs[9][10]={0}; for(int surf=0;surf<9;surf++) { int ci=realEvent.getChanIndex(surf,8); countZC[surf]=0; for(int i=0;i<realEvent.fNumPoints[ci]-1;i++) { Double_t mv1=realEvent.fVolts[ci][i]-mean; Double_t mv2=realEvent.fVolts[ci][i+1]-mean; if(mv1<0 && mv2>0) { //ZC Double_t t1=realEvent.fTimes[ci][i]; Double_t t2=realEvent.fTimes[ci][i+1]; Double_t zct=t1 + (t2-t1)*(0-mv1)/(mv2-mv1); // cerr << surf << "\t" << countZC[surf] << endl; zcs[surf][countZC[surf]]=zct; countZC[surf]++; histMvMin->Fill(mv1); histMvMax->Fill(mv2); histMv2d->Fill(mv1,mv2); } } } histCount->Fill(countZC[1]); Int_t z1=1; Int_t z0=1; Double_t zcDiff=zcs[1][z1]-zcs[0][z0]; if(zcDiff>20) { z0++; zcDiff=zcs[1][z1]-zcs[0][z0]; } if(zcDiff<-20) { z1++; zcDiff=zcs[1][z1]-zcs[0][z0]; } histZc->Fill(zcs[1][z1]-zcs[0][z0]); hist2d->Fill(zcs[1][z1],zcs[0][z0]); } TCanvas *can = new TCanvas("can","can"); can->Divide(1,2); can->cd(1); histZc->Draw(); can->cd(2); hist2d->Draw(); TCanvas *can2 = new TCanvas("can2","can2"); can2->Divide(1,3); can2->cd(1); histMvMin->Draw(); can2->cd(2); histMvMax->Draw(); can2->cd(3); histMv2d->Draw(); }
void oindree_min_signal(int start_run, int end_run) { const int num_ant = 48; const int num_phi = 16; //double pkpk[num_ant]; double pkpk[num_phi]; int max_index; int min_index; double max; double min; AnitaVersion::set(4); AnitaPol::AnitaPol_t pol = AnitaPol::kHorizontal; AnitaRing::AnitaRing_t ring = AnitaRing::kBottomRing; //for (int i = 0; i < num_ant; i++) //{ //pkpk[i] = 0.0; //} for (int i = 0; i < num_phi; i++) { pkpk[i] = 0.0; } TChain headChain("headTree"); for (int run_number = start_run; run_number <= end_run; run_number++) { headChain.Add(TString::Format("$ANITA_ROOT_DATA/run%d/timedHeadFile%d.root",run_number,run_number)); } TimedAnitaHeader *header = NULL; headChain.SetBranchAddress("header",&header); int header_num_entries = headChain.GetEntries(); cout << "number of entries in header anita-4 is " << header_num_entries << endl; TChain eventChain("eventTree"); for (int run_number = start_run; run_number <= end_run; run_number++) { eventChain.Add(TString::Format("$ANITA_ROOT_DATA/run%d/eventFile%d.root",run_number,run_number)); } RawAnitaEvent *event = NULL; eventChain.SetBranchAddress("event",&event); int event_num_entries = eventChain.GetEntries(); cout << "number of entries in event anita-4 is " << event_num_entries << endl; TChain prettyChain("prettyHkTree"); for (int run_number = start_run; run_number <= end_run; run_number++) { prettyChain.Add(TString::Format("$ANITA_ROOT_DATA/run%d/prettyHkFile%d.root",run_number,run_number)); } PrettyAnitaHk *hk = NULL; prettyChain.SetBranchAddress("hk",&hk); int hk_num_entries = prettyChain.GetEntries(); cout << "number of entries in prettyHk anita-4 is " << hk_num_entries << endl; UInt_t count=0; TH1D *hmin_signal = new TH1D("hmin_signal",";MinOverPhiSectors(pk-pk voltage in mV);Number of Events",100,0,1000); for(int ientry=0; ientry < header_num_entries; ientry=ientry+1000) { eventChain.GetEntry(ientry); headChain.GetEntry(ientry); prettyChain.GetEntry(ientry); //cout << "realTime is " << header->realTime << endl; //cout << " here " << endl; //This step produces a calibrated UsefulAnitaEvent UsefulAnitaEvent realEvent(event,WaveCalType::kDefault,hk); //cout << " after useful " << endl; //cout << realEvent.eventNumber << " " << header->eventNumber << endl; // cout << realEvent.gotCalibTemp << " " << realEvent.calibTemp << endl; count++; //initialize double min_pkpk = 0.0; //for (int j = 0; j < num_ant; j++) //{ //pkpk[j] = 0.0; //} for (int j = 0; j < num_phi; j++) { pkpk[j] = 0.0; } //for (int iant = 0; iant < num_ant; iant++) //{ //TGraph *gr = new TGraph(0); // gr = realEvent.getGraph(iant,pol); //pkpk[iant] = (gr->GetY()[TMath::LocMax(gr->GetN(),gr->GetY())]) - (gr->GetY()[TMath::LocMin(gr->GetN(),gr->GetY())]); //cout << pkpk[iant] << endl; //delete gr; //} //loop over antennas max_index = 0; min_index = 0; max = 0.0; min = 0.0; for (int iphi = 0; iphi < num_phi; iphi++) { max_index = 0; min_index = 0; max = 0.0; min = 0.0; TGraph *gr = new TGraph(0); gr = realEvent.getGraph(ring,iphi,pol); max_index = TMath::LocMax(gr->GetN(),gr->GetY()); min_index = TMath::LocMin(gr->GetN(),gr->GetY()); max = gr->GetY()[max_index]; min = gr->GetY()[min_index]; pkpk[iphi] = max - min; //cout << pkpk[iphi] << endl; //cout << max << " " << min << endl; //cout << max_index << " " << min_index << endl; delete gr; } // loop over phi sectors //min_pkpk = pkpk[TMath::LocMin(num_ant,pkpk)]; min_pkpk = pkpk[TMath::LocMin(num_phi,pkpk)]; //cout << "min pkpk is " << min_pkpk << endl; hmin_signal->Fill(min_pkpk); if (min_pkpk < 50) { cout << "min pkpk is " << min_pkpk << "run is " << header->run << "event number is " << header->eventNumber << endl; } } //loop over events ends cerr << endl; cout << "Processed " << count << " events.\n"; //just to check how a graph looks //TCanvas *c = new TCanvas("c","c",1000,800); //gr->Draw("alp"); //gr->GetXaxis()->SetTitle("Time (ns)"); //gr->GetYaxis()->SetTitle("Voltage (mV)"); //gr->SetTitle("Voltage-time waveform using UsefulAnitaEvent"); //c->SaveAs("gr.png"); //delete c; TCanvas *h = new TCanvas("h","h",1000,800); h->SetLogy(); hmin_signal->SetStats(0); hmin_signal->Draw(""); hmin_signal->SaveAs(Form("hmin_signal_pol%iring%i.root",pol,ring)); h->SaveAs(Form("min_signal_pol%iring%i.png",pol,ring)); h->SaveAs(Form("min_signal_pol%iring%i.root",pol,ring)); }//end of macro
void quickPulserSearch(char *baseName, int run, int templateEntry,int startEntry, int numEntries) { char eventName[FILENAME_MAX]; char headerName[FILENAME_MAX]; // char hkName[FILENAME_MAX]; sprintf(eventName,"%s/run%d/eventFile%d.root",baseName,run,run); sprintf(headerName,"%s/run%d/headFile%d.root",baseName,run,run); // sprintf(hkName,"/unix/anita1/webData/firstDay/run%d/prettyHkFile%d.root",run,run); RawAnitaEvent *event = 0; RawAnitaHeader *header =0; // PrettyAnitaHk *hk = 0; TChain *eventChain = new TChain("eventTree"); eventChain->Add(eventName); eventChain->SetBranchAddress("event",&event); for(int extra=1;extra<100;extra++) { sprintf(eventName,"%s/run%d/eventFile%d_%d.root",baseName,run,run,extra); TFile *fpTest = TFile::Open(eventName); if(!fpTest) break; else { delete fpTest; eventChain->Add(eventName); } } TFile *fpHead = TFile::Open(headerName); TTree *headTree = (TTree*) fpHead->Get("headTree"); headTree->SetBranchAddress("header",&header); // TFile *fpHk = new TFile(hkName); // TTree *prettyHkTree = (TTree*) fpHk->Get("prettyHkTree"); // prettyHkTree->SetBranchAddress("hk",&hk); //Friends only seem to work with TTree::Draw and similar commands //if you are manually calling GetEntry (i.e in a loop) you must call //the GetEntry for each tree separately. // eventChain->AddFriend(headTree); // eventChain->AddFriend(prettyHkTree); // char textLabel[180]; // char pngName[180]; // TGraph *gr[9]={0}; Long64_t nentries=eventChain->GetEntries(); Long64_t maxEntry=startEntry+numEntries; if(nentries<maxEntry) maxEntry=nentries; char outName[180]; sprintf(outName,"corTree%d.root",run); TFile *fpOut = new TFile(outName,"RECREATE"); Double_t peakVal[4]; Int_t peakBin[4]; UInt_t triggerTime; UInt_t triggerTimeNs; UInt_t eventNumber=0; TTree *corTree = new TTree("corTree","Tree of correlations"); corTree->Branch("peakVal",&peakVal,"peakVal[4]/D"); corTree->Branch("peakBin",&peakBin,"peakBin[4]/I"); corTree->Branch("eventNumber",&eventNumber,"eventNumber/i"); corTree->Branch("triggerTime",&triggerTime,"triggerTime/i"); corTree->Branch("triggerTimeNs",&triggerTimeNs,"triggerTimeNs/i"); Double_t deltaT=1./(2.6*8); Long64_t starEvery=maxEntry/40; if(starEvery==0) starEvery++; Int_t antNums[4]={1,9,18,19}; TGraph *grTemplate[4]={0}; eventChain->GetEntry(templateEntry); UsefulAnitaEvent templateEvent(event,WaveCalType::kVoltageTime); for(int ant=0;ant<4;ant++) { grTemplate[ant]=templateEvent.getGraph(antNums[ant],AnitaPol::kVertical); } for(Long64_t entry=startEntry;entry<maxEntry;entry++) { if(entry%starEvery==0) cerr << "*"; //Stupidly must do this to be perfectly safe eventChain->GetEntry(entry); headTree->GetEntry(entry); // prettyHkTree->GetEntry(entry); UsefulAnitaEvent realEvent(event,WaveCalType::kVoltageTime); // if((entry-startEntry)%100==0) // cout << realEvent.eventNumber << endl; for(int ant=0;ant<4;ant++) { TGraph *grEvent=realEvent.getGraph(antNums[ant],AnitaPol::kVertical); // TGraph *grCor = FFTtools::getInterpolatedCorrelationGraph(grTemplate,grEvent,deltaT); TGraph *grCor = FFTtools::getCorrelationGraph(grTemplate[ant],grEvent); peakVal[ant]=FFTtools::getPeakVal(grCor); peakBin[ant]=FFTtools::getPeakBin(grCor); delete grEvent; delete grCor; } triggerTime=header->triggerTime; triggerTimeNs=header->triggerTimeNs; corTree->Fill(); } corTree->AutoSave(); }