Ignore:
Timestamp:
10/25/04 17:11:26 (20 years ago)
Author:
mazin
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mtemp/mmpi/MSkyPlot.cc

    r4830 r5313  
    115115#include "MSkyPlot.h"
    116116
     117#include <vector>
    117118#include <TF1.h>
    118119#include <TH2.h>
     
    190191    fHistOn.SetYTitle("y [\\circ]");
    191192
     193    fHistSignifGaus.SetName("SignifDistrib");
     194    fHistSignifGaus.SetTitle("Distribution of the significances from the sky plot");
     195    fHistSignifGaus.SetXTitle("significance");
     196    fHistSignifGaus.SetYTitle("counts");
     197
    192198    // set some values for the sky plot geometry:
    193199    fMinXGrid    =-1.;                  // [deg]
     
    274280    fDistLo[7] =  0.0;
    275281    }
     282
     283    fAlphaHName = "alphaplot.root";
     284    fSkyHName   = "skyplot.root";
    276285}
    277286
    278287void MSkyPlot::ReadCuts(const TString parSCinit="OptSCParametersONOFFThetaRange0_1570mRad.root")
    279288{
     289
     290cout << " parameters read from file: " << parSCinit << endl;
    280291    //--------------------------------
    281292    // create container for the supercut parameters
     
    390401    fRepDrive = (MReportDrive*)plist->FindObject(AddSerialNumber("MReportDrive"));
    391402    if (!fRepDrive)
    392         *fLog << warn << "MReportDrive not found... no sky map." << endl;
     403        *fLog << warn << "MReportDrive not found... could be problem for sky map." << endl;
    393404
    394405
     
    397408        *fLog << warn << "MSrcPosCam not found... no sky map." << endl;
    398409
     410/*
    399411    fPntPosCam = (MSrcPosCam*)plist->FindObject(AddSerialNumber("MPntPosCam"));
    400412    if (!fPntPosCam)
    401413        *fLog << warn << "MPntPosCam not found... no sky map." << endl;
     414*/
    402415
    403416    fPointPos = (MPointingPos*)plist->FindObject(AddSerialNumber("MPointingPos"));
     
    407420    fTime = (MTime*)plist->FindObject(AddSerialNumber("MTime"));
    408421    if (!fTime)
    409         *fLog << warn << "MTime not found... no sky map." << endl;
     422        *fLog << warn << "MTime not found... could be problem for sky map." << endl;
    410423
    411424    fObservatory = (MObservatory*)plist->FindObject(AddSerialNumber("MObservatory"));
     
    443456    fNumalphahist  =  (int) (fNumStepsX * fNumStepsY  + 0.5);
    444457
    445     fHistSignif.SetName("SPSignif2ndOrder");
    446     fHistSignif.SetTitle("Sky Plot of significance (2nd order fit)");
     458   // fHistSignif.SetName("SPSignif2ndOrder");
     459   // fHistSignif.SetTitle("Sky Plot of significance (2nd order fit)");
    447460    fHistSignif.SetBins(fNumStepsX, fMinXGrid-0.5*fBinStepGrid, fMaxXGrid+0.5*fBinStepGrid,
    448461                        fNumStepsY, fMinYGrid-0.5*fBinStepGrid, fMaxYGrid+0.5*fBinStepGrid);
    449     fHistSignif.SetDirectory(NULL);
     462   // fHistSignif.SetDirectory(NULL);
    450463    fHistSignif.SetFillStyle(4000);
    451464    fHistSignif.UseCurrentStyle();
    452465
    453     fHistNexcess.SetName("SPNex2ndOrder");
    454     fHistNexcess.SetTitle("Sky Plot of Number of excess events (2nd order fit)");
     466   // fHistNexcess.SetName("SPNex2ndOrder");
     467   // fHistNexcess.SetTitle("Sky Plot of Number of excess events (2nd order fit)");
    455468    fHistNexcess.SetBins(fNumStepsX, fMinXGrid-0.5*fBinStepGrid, fMaxXGrid+0.5*fBinStepGrid,
    456469                        fNumStepsY, fMinYGrid-0.5*fBinStepGrid, fMaxYGrid+0.5*fBinStepGrid);
    457     fHistNexcess.SetDirectory(NULL);
     470   // fHistNexcess.SetDirectory(NULL);
    458471    fHistNexcess.SetFillStyle(4000);
    459472    fHistNexcess.UseCurrentStyle();
    460473
    461     fHistOn.SetName("SPOnCounted");
    462     fHistOn.SetTitle("Sky Plot of ON events (counted)");
     474   // fHistOn.SetName("SPOnCounted");
     475   // fHistOn.SetTitle("Sky Plot of ON events (counted)");
    463476    fHistOn.SetBins(fNumStepsX, fMinXGrid-0.5*fBinStepGrid, fMaxXGrid+0.5*fBinStepGrid,
    464477                        fNumStepsY, fMinYGrid-0.5*fBinStepGrid, fMaxYGrid+0.5*fBinStepGrid);
    465     fHistOn.SetDirectory(NULL);
     478   // fHistOn.SetDirectory(NULL);
    466479    fHistOn.SetFillStyle(4000);
    467480    fHistOn.UseCurrentStyle();
    468481
     482    //fHistSignifGaus.SetName("SignifDistrib");
     483    fHistSignifGaus.SetTitle("Distribution of the significances from the sky plot");
     484    fHistSignifGaus.SetBins(100, -10., 10.);
    469485
    470486    // prepare alpha plots
    471487        // temp histogram for an alpha plot
    472     TH1I *temp = new TH1I("alphaplot","alphaplot",fNumBinsAlpha,fAlphaLeftEdge,fAlphaRightEdge);
     488    TH1D *temp = new TH1D("alphaplot","alphaplot",fNumBinsAlpha,fAlphaLeftEdge,fAlphaRightEdge);
    473489    temp->SetDirectory(NULL);
    474490    fHistAlphaBinWidth = temp->GetBinWidth(1);
     
    499515  if (fSetCenter==kTRUE)
    500516  {
    501      fRa0  = fRepDrive->GetRa();  // [h]
    502      fDec0 = fRepDrive->GetDec(); // [deg]
     517     if (fRepDrive)
     518     {
     519         fRa0  = fRepDrive->GetRa();  // [h]
     520         fDec0 = fRepDrive->GetDec(); // [deg]
     521         if (fRa0 < 0. || fRa0 > 24. || fDec0 < -90. || fDec0 > 90. || (fRa0==0 && fDec0==0)) return kTRUE;  // temp!, should be changed
     522     }
     523     else
     524     {
     525        fRa0 = fPointPos->GetRa();
     526        fDec0 = fPointPos->GetDec();
     527     }
     528     *fLog << inf << "Ra (center) = " << fRa0 << ", Dec = " << fDec0 << endl;
    503529     fSetCenter=kFALSE;
    504530  }
     
    518544    Double_t rho = 0;
    519545    if (fTime && fObservatory && fPointPos)
    520 {
     546    {
    521547        rho = fPointPos->RotationAngle(*fObservatory, *fTime);
    522 *fLog << inf << " rho = " << rho << ", Zd = " << fPointPos->GetZd() <<
    523                 ", Az = " << fPointPos->GetAz() << ", Ra = " << fPointPos->GetRa() << ", Dec = " << fPointPos->GetDec() << endl;
    524 }
    525     //if (fPointPos)
    526     //    rho = fPointPos->RotationAngle(*fObservatory);
     548//*fLog << inf << " rho = " << rho*180./TMath::Pi() << ", Zd = " << fPointPos->GetZd() <<
     549//                ", Az = " << fPointPos->GetAz() << ", Ra = " << fPointPos->GetRa() << ", Dec = " << fPointPos->GetDec() << endl;
     550
     551    // => coord. system: xtilde, ytilde with center in RA_0, DEC_0
     552
     553// Get Rot. Angle:
     554    cosgam = TMath::Cos(rho);
     555    singam = TMath::Sin(rho);
     556// Get x_0, y_0 for RA_0,DEC_0 of the current event
     557    }
     558    else
     559    {
     560//      rho = fPointPos->RotationAngle(*fObservatory);
     561      Double_t theta, phi, sing, cosg;
     562      theta = fPointPos->GetZd()*TMath::Pi()/180.;
     563      phi = fPointPos->GetAz()*TMath::Pi()/180.;
     564//   printf("theta: %5.3f, phi: %5.3f\n", theta*180./4.1415, phi*180./4.1415);
     565      fObservatory->RotationAngle(theta, phi, sing, cosg);       
     566      cosgam = cosg;
     567      singam = sing;
     568    }
     569   // if (fPointPos)
     570   //    rho = fPointPos->RotationAngle(*fObservatory);
     571
    527572/*
    528573//TEMP
     
    556601*/
    557602
    558     // => coord. system: xtilde, ytilde with center in RA_0, DEC_0
    559 
    560 // Get Rot. Angle:
    561         cosgam = TMath::Cos(rho);
    562         singam = TMath::Sin(rho);
    563 // Get x_0, y_0 for RA_0,DEC_0 of the current event
    564         x_0 = fPntPosCam->GetX()*fMm2Deg;
    565         y_0 = fPntPosCam->GetY()*fMm2Deg;
     603/*
     604    x_0 = fPntPosCam->GetX()*fMm2Deg;
     605    y_0 = fPntPosCam->GetY()*fMm2Deg;
     606*/     
     607    x_0 = 0.;
     608    y_0 = 0.;
    566609
    567610    Int_t index = 0;  // index for alpha histograms
     
    598641           lgsize = logsize-log3000;
    599642           lgsize2 = lgsize*lgsize;
    600            dist2 = (distpar-fDistOffset)*(distpar-fDistOffset);
     643           dist2 = distpar*distpar - fDistOffset*fDistOffset;
    601644
    602645           if ( (fHillas->GetLength()*fMm2Deg) < CalcLimit(fLengthUp, lgsize, lgsize2, dist2) &&
     
    609652           {
    610653// gamma candidates!
     654//*fLog <<  "Length : " << fHillas->GetLength()*fMm2Deg << ", Width : " << fHillas->GetWidth()*fMm2Deg << endl;
     655//*fLog <<  "distpar: " << distpar << ", Size : " << fHillas->GetSize() << endl;
    611656                fHistAlpha[index].Fill(alphapar);
    612                 index++;
    613657           }
     658           index++;
    614659        }
    615660     }
     
    628673    const Int_t onbinsalpha = TMath::Nint(fAlphaONMax/fHistAlphaBinWidth);
    629674
     675// fit with gaus
     676    fHistSignifGaus.Fit("gaus");
     677
    630678// fit function for the background
    631679    TF1 * fitbgpar = new TF1("fbgpar", "[0]*x*x + [1]", fAlphaBgLow, fAlphaBgUp);
     
    635683    numdegfreed = (fAlphaBgUp - fAlphaBgLow) / fHistAlphaBinWidth - 2.;
    636684
    637     vector <TH1I>::iterator alpha_iterator;
     685    vector <TH1D>::iterator alpha_iterator;
    638686    int index2 = 0;  // index of the TH2F histograms
    639687
     
    643691         // find the bin in the 2dim histogram
    644692         nrow    = index2/fHistOn.GetNbinsX() + 1;                    // row of the histogram (y)
    645          ncolumn = TMath::Nint(fmod(index2,fHistOn.GetNbinsX()))+1;   // column of the histogram (x)
     693         ncolumn = index2%fHistOn.GetNbinsX()+1;   // column of the histogram (x)
     694         //ncolumn = TMath::Nint(fmod(index2,fHistOn.GetNbinsX()))+1;   // column of the histogram (x)
    646695
    647696         // number of ON events below fAlphaONMax
     
    659708
    660709         // estimate Noff from the fit:
    661          Noff_fit = (1./3. * (fitbgpar->GetParameter(0)) * pow(fAlphaONMax,3.) +
     710         Noff_fit = (1./3. * (fitbgpar->GetParameter(0)) * TMath::Power(fAlphaONMax,3.) +
    662711                    (fitbgpar->GetParameter(1)) * fAlphaONMax) /  fHistAlphaBinWidth;
    663712
     
    671720
    672721         fHistSignif.SetBinContent(ncolumn, nrow, Sign);        // fill in the fHistSignif
     722         fHistSignifGaus.Fill(Sign);
    673723
    674724         alpha_iterator++;
     
    677727
    678728//temp
     729/*
    679730   Double_t decl, hang;
    680731   MStarCamTrans mstarc(*fGeomCam, *fObservatory);
     
    683734*fLog << warn << "MDrive, RA, DEC = " << fRepDrive->GetRa() << ", " << fRepDrive->GetDec() << endl;
    684735*fLog << warn << "MStarCamTrans, H angle , DEC = " << hang << ", " << decl << endl;
     736*/
    685737//endtemp
    686738
     739
    687740// save alpha plots:
    688   if(kSaveAlphaPlots==kTRUE) SaveAlphaPlots();
     741//  TString stri1 = "alphaplots.root";
     742  if(kSaveAlphaPlots==kTRUE) SaveAlphaPlots(fAlphaHName);
    689743
    690744// save sky plots:
    691   if(kSaveSkyPlots==kTRUE) SaveSkyPlots();
     745//  TString stri2 = "skyplots.root";
     746  if(kSaveSkyPlots==kTRUE) SaveSkyPlots(fSkyHName);
    692747
    693748  fHistAlpha.clear();
     
    721776
    722777
    723 void MSkyPlot::SaveSkyPlots(const TString skyplotfilename="skyplots.root")
     778void MSkyPlot::SaveSkyPlots(TString skyplotfilename)
    724779{
    725780   TFile rootfile(skyplotfilename, "RECREATE",
     
    728783     fHistNexcess.Write();
    729784     fHistOn.Write();
     785     fHistSignif.Write();
    730786
    731787// from Wolfgang:
     
    733789    // Dec-Hour lines
    734790    Double_t rho, sinrho, cosrho;
    735 //    if (fTime && fObservatory && fPointPos)
     791    Double_t theta, phi, sing, cosg;
     792// do I need it?
     793    if (fTime && fObservatory && fPointPos)
     794    {
    736795        rho = fPointPos->RotationAngle(*fObservatory, *fTime);
    737     sinrho=TMath::Sin(rho);
    738     cosrho=TMath::Cos(rho);
    739 
    740     Double_t theta, phi, sing, cosg;
    741     theta = fPointPos->GetZd()*TMath::Pi()/180.;
    742     phi = fPointPos->GetAz()*TMath::Pi()/180.;
     796        sinrho=TMath::Sin(rho);
     797        cosrho=TMath::Cos(rho);
     798    }
     799
     800       theta = fPointPos->GetZd()*TMath::Pi()/180.;
     801       phi = fPointPos->GetAz()*TMath::Pi()/180.;
    743802//   printf("theta: %5.3f, phi: %5.3f\n", theta*180./4.1415, phi*180./4.1415);
    744     fObservatory->RotationAngle(theta, phi, sing, cosg);
     803       fObservatory->RotationAngle(theta, phi, sing, cosg);
    745804
    746805*fLog << "1: sinrho, cosrho = " << sinrho << ", " << cosrho << endl;
    747806*fLog << "2: sinrho, cosrho = " << sing << ", " << cosg << endl;
     807       sinrho=sing;
     808       cosrho=cosg;
    748809
    749810    Double_t fDistCam = fGeomCam->GetCameraDist() * 1000.0;     //  [mm]
     
    756817    Double_t declin, hangle;  // [deg], [h]
    757818    MStarCamTrans mstarc(*fGeomCam, *fObservatory);
    758     mstarc.LocToCel(fRepDrive->GetNominalZd(),fRepDrive->GetNominalAz(),declin, hangle);
    759 
    760     TGraph *graph1;
     819    if (fRepDrive) mstarc.LocToCel(fRepDrive->GetNominalZd(),fRepDrive->GetNominalAz(),declin, hangle);
     820    else mstarc.LocToCel(theta*180./TMath::Pi(),phi*180./TMath::Pi(),declin, hangle); // NOT GOOD!
     821
     822//    std::vector <TGraph> graphvec;
    761823    TLatex *pix;
    762824
     
    776838    // direction for the center of the camera
    777839    Double_t dec0 = declin;
    778     Double_t h0   = hangle*360./24.;
     840    Double_t h0   = hangle*360./24.; //deg
     841    Double_t RaHOffset = fRepDrive->GetRa() - h0;
    779842    //trans.LocToCel(theta0, phi0, dec0, h0);
    780843
     844    gStyle->SetOptFit(0);
     845    gStyle->SetOptStat(0);
     846    gStyle->SetPalette(1);
    781847    TCanvas *c1 = new TCanvas("SPlotsRaDecLines","SPlotsRaDecLines", 400, 0, 700, 600);
     848    c1->Divide(2,2);
    782849    c1->cd(1);
     850    fHistSignif.Draw("colz");
     851    c1->cd(2);
     852    fHistNexcess.Draw("colz");
     853    c1->cd(3);
    783854    fHistOn.Draw("colz");
     855    c1->cd(4);
     856    gPad->SetLogy();
     857    fHistSignifGaus.Draw();
    784858
    785859    //-----   lines for fixed dec   ------------------------------------
     
    796870      dh = 360.0/((Double_t)(Nh-1));
    797871
    798 
     872// start to copy
    799873    for (Int_t j=0; j<Ndec; j++)
    800874    {
     
    810884    Double_t xh[Nh];
    811885    Double_t yh[Nh];
    812 
    813 
    814886
    815887    for (Int_t j=0; j<Ndec; j++)
     
    839911
    840912//      c1->cd(2);
    841       graph1 = new TGraph(Nh,xh,yh);
    842       graph1->SetLineColor(j+1);
     913      TGraph * graph1 = new TGraph(Nh,xh,yh);
     914      //graph1->SetLineColor(j+1);
     915      graph1->SetLineColor(36);
    843916      graph1->SetLineStyle(1);
    844       graph1->SetMarkerColor(j+1);
     917      graph1->SetLineWidth(1);
     918      //graph1->SetMarkerColor(j+1);
     919      graph1->SetMarkerColor(1);
    845920      graph1->SetMarkerSize(.2);
    846921      graph1->SetMarkerStyle(20);
    847       graph1->Draw("PL");
     922     
     923      c1->cd(1);
     924      graph1->Draw("L");
     925      c1->cd(2);
     926      graph1->Draw("L");
     927      c1->cd(3);
     928      graph1->Draw("L");
    848929      //delete graph1;
     930//      graphvec.push_back(*graph1);
     931//      graphvec[j].Draw("L");
    849932
    850933      sprintf(tit,"Dec = %6.2f", dec[j]);
     
    852935      ytxt = ylo + (yup-ylo)*0.80 - ((Double_t)j) *(yup-ylo)/20.0;
    853936      pix = new TLatex(xtxt, ytxt, tit);
    854       pix->SetTextColor(j+1);
     937      pix->SetTextColor(36);
    855938      pix->SetTextSize(.03);
    856       pix->Draw("");
     939      //pix->Draw("");
    857940      //delete pix;
    858941
    859942    }
    860 
     943//stop copy
    861944    //-----   lines for fixed hour angle   ------------------------------------
    862945
     
    872955      dh1 = 360.0/((Double_t)Nh1);
    873956
    874 
     957// start copy
    875958    for (Int_t j=0; j<Ndec1; j++)
    876959    {
     
    915998
    916999//      c1->cd(2);
    917       graph1 = new TGraph(count,xd,yd);
    918       graph1->SetLineColor(k+1);
    919       graph1->SetLineStyle(2);
    920       graph1->SetMarkerColor(k+1);
     1000      TGraph * graph1 = new TGraph(count,xd,yd);
     1001      //graph1->SetLineColor(k+1);
     1002      graph1->SetLineColor(36);
     1003      graph1->SetLineWidth(2);
     1004      graph1->SetLineStyle(1);
     1005      //graph1->SetMarkerColor(k+1);
     1006      graph1->SetMarkerColor(1);
    9211007      graph1->SetMarkerSize(.2);
    9221008      graph1->SetMarkerStyle(20);
    923       graph1->Draw("PL");
    924       //delete graph1;
    925 
    926       sprintf(tit,"H = %6.2f", h1[k]);
     1009      c1->cd(1);
     1010      graph1->Draw("L");
     1011      c1->cd(2);
     1012      graph1->Draw("L");
     1013      c1->cd(3);
     1014      graph1->Draw("L");
     1015
     1016      sprintf(tit,"RA = %6.2f", fRa0 + (h0 - h1[k]));
    9271017      Double_t xtxt = xlo + (xup-xlo)*0.75;
    9281018      Double_t ytxt = ylo + (yup-ylo)*0.80 - ((Double_t)k) *(yup-ylo)/20.0;
    9291019      pix = new TLatex(xtxt, ytxt, tit);
    930       pix->SetTextColor(k+1);
     1020      pix->SetTextColor(36);
    9311021      pix->SetTextSize(.03);
    932       pix->Draw("");
     1022      //pix->Draw("");
    9331023      //delete pix;
    9341024
     
    9361026
    9371027//    c1->cd(2);
    938     sprintf(tit,"Dec0 = %6.2f    H0 = %6.2f", dec0, h0);
    939     xtxt = xlo + (xup-xlo)*0.05;
    940     ytxt = ylo + (yup-ylo)*0.92;
     1028    sprintf(tit,"Dec0 = %6.2f [deg]   Ra0 = %6.2f [h]", dec0, fRa0);
     1029    xtxt = xlo + (xup-xlo)*0.05 + 0.80;
     1030    ytxt = ylo + (yup-ylo)*0.75;
    9411031    pix = new TLatex(xtxt, ytxt, tit);
    9421032    pix->SetTextColor(1);
    943     pix->SetTextSize(.06);
     1033    pix->SetTextSize(.05);
     1034    c1->cd(1);
     1035    pix->Draw("");
     1036    c1->cd(2);
     1037    pix->Draw("");
     1038    c1->cd(3);
    9441039    pix->Draw("");
    9451040    //delete pix;
    9461041
    947     sprintf(tit,"              [deg]             [deg]");
    948     xtxt = xlo + (xup-xlo)*0.05;
    949     ytxt = ylo + (yup-ylo)*0.86;
    950     pix = new TLatex(xtxt, ytxt, tit);
    951     pix->SetTextColor(1);
    952     pix->SetTextSize(.06);
    953     pix->Draw("");
    954 
    9551042    c1->Write();
     1043    // we suppose that the {skyplotfilename} ends with .root
     1044    Int_t sizeofout = skyplotfilename.Sizeof();
     1045    TString outps = skyplotfilename.Remove(sizeofout-5,5) + "ps";
     1046    c1->Print(outps);  // temporary!!!!!
    9561047
    9571048    TCanvas *c2 = new TCanvas("SkyPlotsWithRaDecLines","SkyPlotsWithRaDecLines", 0, 0, 300, 600);
     
    9671058   delete c1;
    9681059   delete c2;
    969    delete graph1;
    9701060   delete pix;
     1061
     1062
    9711063}
    9721064
    973 void MSkyPlot::SaveAlphaPlots(const TString alphaplotfilename="alphaplots.root")
     1065void MSkyPlot::SaveAlphaPlots(const TString alphaplotfilename)
    9741066{
    9751067   TFile rootfile(alphaplotfilename, "RECREATE",
    9761068                   "all the alpha plots");
    9771069
    978     vector <TH1I>::iterator alpha_iterator;
     1070    vector <TH1D>::iterator alpha_iterator;
    9791071    int index = 0;  // index of the TH2F histograms
    9801072    Char_t strtitle[100];
     
    9891081
    9901082          nrow    = index/fHistOn.GetNbinsX() + 1;                    // row of the histogram (y)
    991           ncolumn = TMath::Nint(fmod(index,fHistOn.GetNbinsX()))+1;   // column of the histogram (x)
     1083          //ncolumn = TMath::Nint(fmod(index,fHistOn.GetNbinsX()))+1;   // column of the histogram (x)
     1084          ncolumn = index%fHistOn.GetNbinsX()+1;   // column of the histogram (x)
    9921085          xpos    = fMinXGrid + fBinStepGrid*(ncolumn-1);
    9931086          ypos    = fMinYGrid + fBinStepGrid*(nrow-1);
Note: See TracChangeset for help on using the changeset viewer.