Esempio n. 1
0
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;

}
Esempio n. 3
0
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();

}