Ignore:
Timestamp:
12/03/12 20:38:22 (12 years ago)
Author:
tbretz
Message:
Made times consistent, added moon to ZA plot
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/makeplots.cc

    r14705 r14716  
    4141    return acos(arg) * 180/M_PI;
    4242}
     43
     44void CheckForGap(TCanvas &c, TGraph &g, double axis)
     45{
     46    if (g.GetN()==0 || axis-g.GetX()[g.GetN()-1]<450)
     47        return;
     48
     49    c.cd();
     50    ((TGraph*)g.DrawClone("C"))->SetBit(kCanDelete);
     51    while (g.GetN())
     52        g.RemovePoint(0);
     53}
     54
    4355
    4456// ========================================================================
     
    7183        "makeplots - The astronomy plotter\n"
    7284        "\n"
     85        "Calculates several plots for the sources in the database\n"
     86        "helpful or needed for scheduling. The Plot is always calculated\n"
     87        "for the night which starts at the same so. So no matter if\n"
     88        "you specify '1974-09-09 00:00:00' or '1974-09-09 21:56:00'\n"
     89        "the plots will refer to the night 1974-09-09/1974-09-10.\n"
     90        "The advantage is that specification of the date as in\n"
     91        "1974-09-09 is enough.\n"
     92        "\n"
    7393        "Usage: makeplots sql-datetime [--ra={ra} --dec={dec}]\n";
    7494    cout << endl;
     
    109129    const double no_limits   = conf.Get<bool>("no-limits");
    110130
    111     ln_rst_time sun_astronomical;
    112     ln_get_solar_rst_horizon(time.JD(), &observer, -12, &sun_astronomical);
    113 
    114     const double jd  = floor(time.JD());
    115     const double mjd = floor(time.Mjd())+49718-0.5;
    116 
    117     const double jd0 = fmod(sun_astronomical.set,  1);
    118     const double jd1 = fmod(sun_astronomical.rise, 1);
    119 
    120     cout << "JD0=" << jd+jd0 << endl;
    121     cout << "JD1=" << jd+jd1 << endl;
     131    // -12: astronomical twilight
     132    ln_rst_time sun_set;   // Sun set with the same date than th provided date
     133    ln_rst_time sun_rise;  // Sun rise on the following day
     134    ln_get_solar_rst_horizon(time.JD()-0.5, &observer, -12, &sun_set);
     135    ln_get_solar_rst_horizon(time.JD()+0.5, &observer, -12, &sun_rise);
     136
     137    const double jd  = floor(time.Mjd())+2400001;
     138    const double mjd = floor(time.Mjd())+49718+0.5;
     139
     140    cout << "Time: " << time << endl;
     141    cout << "Set:  " << Time(sun_set.set)   << endl;
     142    cout << "Rise: " << Time(sun_rise.rise) << endl;
     143
     144    const double jd0 = fmod(sun_set.set,   1);   // ~0.3
     145    const double jd1 = fmod(sun_rise.rise, 1);   // ~0.8
    122146
    123147    const string fDatabase = conf.Get<string>("source-database");
     
    188212    hframe.DrawCopy();
    189213
     214    TCanvas c4;
     215    gPad->SetLeftMargin(0.085);
     216    gPad->SetRightMargin(0.01);
     217    gPad->SetTopMargin(0.03);
     218    gPad->SetGrid();
     219    hframe.GetYaxis()->SetTitle("Distance to moon [deg]");
     220    hframe.SetMinimum(0);
     221    hframe.SetMaximum(180);
     222    hframe.DrawCopy();
     223
    190224    Int_t color[] = { kBlack, kRed, kBlue, kGreen, kCyan, kMagenta };
    191225    Int_t style[] = { kSolid, kDashed, kDotted };
     
    206240
    207241        // Create graphs
    208         TGraph g1, g2, g3;
     242        TGraph g1, g2, g3, g4, gm;
    209243        g1.SetName(name.data());
    210244        g2.SetName(name.data());
    211245        g3.SetName(name.data());
     246        g4.SetName(name.data());
    212247        g1.SetLineWidth(2);
    213248        g2.SetLineWidth(2);
    214249        g3.SetLineWidth(2);
     250        g4.SetLineWidth(2);
     251        gm.SetLineWidth(1);
    215252        g1.SetLineStyle(style[cnt/6]);
    216253        g2.SetLineStyle(style[cnt/6]);
    217254        g3.SetLineStyle(style[cnt/6]);
     255        g4.SetLineStyle(style[cnt/6]);
    218256        g1.SetLineColor(color[cnt%6]);
    219257        g2.SetLineColor(color[cnt%6]);
    220258        g3.SetLineColor(color[cnt%6]);
     259        g4.SetLineColor(color[cnt%6]);
     260        gm.SetLineColor(kYellow);
    221261
    222262        // Loop over 24 hours
     
    254294
    255295            // If there is a gap of more than one bin, start a new curve
    256             if (g1.GetN()>0 && axis-g1.GetX()[g1.GetN()-1]>450)
    257             {
    258                 c1.cd();
    259                 ((TGraph*)g1.DrawClone("C"))->SetBit(kCanDelete);
    260                 while (g1.GetN())
    261                     g1.RemovePoint(0);
    262             }
    263 
    264             if (g2.GetN()>0 && axis-g2.GetX()[g2.GetN()-1]>450)
    265             {
    266                 c2.cd();
    267                 ((TGraph*)g2.DrawClone("C"))->SetBit(kCanDelete);
    268                 while (g2.GetN())
    269                     g2.RemovePoint(0);
    270             }
    271 
    272             if (g3.GetN()>0 && axis-g3.GetX()[g3.GetN()-1]>450)
    273             {
    274                 c3.cd();
    275                 ((TGraph*)g3.DrawClone("C"))->SetBit(kCanDelete);
    276                 while (g3.GetN())
    277                     g3.RemovePoint(0);
    278             }
     296            CheckForGap(c1, g1, axis);
     297            CheckForGap(c1, gm, axis);
     298            CheckForGap(c2, g2, axis);
     299            CheckForGap(c3, g3, axis);
     300            CheckForGap(c4, g4, axis);
    279301
    280302            // Add data
     
    287309            if (no_limits || (cur<max_current && 90-hrz.alt<max_zd))
    288310                g3.SetPoint(g3.GetN(), axis, ratio*cur/7.7);
     311
     312            if (no_limits || (cur<max_current && 90-hrz.alt<max_zd))
     313                g4.SetPoint(g4.GetN(), axis, angle);
     314
     315            if (cnt==0)
     316                gm.SetPoint(gm.GetN(), axis, hrzm.alt);
    289317        }
    290318
    291319        // Add graphs to canvases and add corresponding entry to legend
    292         TGraph *g = 0;
    293 
    294320        c1.cd();
    295         g = (TGraph*)g1.DrawClone("C");
    296         g->SetBit(kCanDelete);
     321        if (cnt==0)
     322        {
     323            TGraph *g = (TGraph*)gm.DrawClone("C");
     324            g->SetBit(kCanDelete);
     325            leg.AddEntry(g, "Moon", "l");
     326        }
     327        ((TGraph*)g1.DrawClone("C"))->SetBit(kCanDelete);
    297328
    298329        c2.cd();
    299         g = (TGraph*)g2.DrawClone("C");
    300         g->SetBit(kCanDelete);
     330        ((TGraph*)g2.DrawClone("C"))->SetBit(kCanDelete);
    301331
    302332        c3.cd();
    303         g = (TGraph*)g3.DrawClone("C");
     333        ((TGraph*)g3.DrawClone("C"))->SetBit(kCanDelete);
     334
     335        c4.cd();
     336        TGraph *g = (TGraph*)g4.DrawClone("C");
    304337        g->SetBit(kCanDelete);
    305338
     
    307340    }
    308341
     342
    309343    // Save three plots
    310     TCanvas c4;
     344    TCanvas c5;
    311345    leg.Draw();
    312346
     
    314348    c2.SaveAs("test2.eps");
    315349    c3.SaveAs("test3.eps");
    316     c4.SaveAs("legend.eps");
     350    c4.SaveAs("test4.eps");
     351    c5.SaveAs("legend.eps");
    317352
    318353    c1.SaveAs("test1.root");
    319354    c2.SaveAs("test2.root");
    320355    c3.SaveAs("test3.root");
     356    c4.SaveAs("test4.root");
    321357
    322358    return 0;
Note: See TracChangeset for help on using the changeset viewer.