Changeset 20003 for trunk


Ignore:
Timestamp:
11/13/20 16:55:21 (4 years ago)
Author:
tbretz
Message:
New functions, more plots.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Mars/hawc/quality.C

    r19921 r20003  
    99#include "TText.h"
    1010#include "TLine.h"
     11#include "TStyle.h"
    1112
    1213#include "fits.h"
     
    1920#endif
    2021
    21 Bool_t Contains(TArrayD **vec, Double_t t0, Double_t range=0)
    22 {
    23     TArrayD *arr0 = vec[0];
    24     TArrayD *arr1 = vec[1];
    25     TArrayD *arr2 = vec[2];
    26 
    27     for (int i=0; i<arr0->GetSize(); i++)
    28     {
    29         Double_t start = (*arr1)[i];
    30         Double_t stop  = (*arr2)[i];
     22#include <numeric>
     23
     24Bool_t Contains(vector<double> *vec, Double_t t0, Double_t range=0)
     25{
     26    auto &arr0 = vec[0];
     27    auto &arr1 = vec[1];
     28    auto &arr2 = vec[2];
     29
     30    for (size_t i=0; i<arr0.size(); i++)
     31    {
     32        Double_t start = arr1[i];
     33        Double_t stop  = arr2[i];
    3134
    3235        if (stop>start+305./24/3600)
     
    3437
    3538        if (t0>start-range && t0<stop+range)
    36         //{
    37         //    if (fmod(t0, 1)>4./24 && fmod(t0,1)<4.1/24)
    38         //        cout << t0-start << " " <<t0 << " " << stop-t0 << " " << start-15779 << " " << stop-15779 << " " << (*arr0)[i] << endl;
     39        {
     40            //if (fmod(t0, 1)>4./24 && fmod(t0,1)<4.1/24)
     41            //    cout << t0-start << " " <<t0 << " " << stop-t0 << " " << start-15779 << " " << stop-15779 << " " << (*arr0)[i] << endl;
    3942            return kTRUE;
    40         //}
    41     }
    42 
    43     return arr0->GetSize()==0;
    44 }
    45 
    46 Int_t PlotThresholds(double start, TArrayD **vec, TString fname)
     43        }
     44    }
     45
     46    return arr0.empty();
     47}
     48
     49Int_t ReadRuns(vector<double> *vec, TString fname)
     50{
     51    fname += ".FAD_CONTROL_RUNS.fits";
     52
     53    fits file(fname.Data());
     54    if (!file)
     55    {
     56        cerr << fname << ": " << gSystem->GetError() << endl;
     57        return -2;
     58    }
     59
     60    //cout << fname << endl;
     61
     62    Double_t time;
     63    uint32_t qos, stats[2];
     64
     65    if (!file.SetPtrAddress("Time", &time))
     66        return -1;
     67    if (!file.SetPtrAddress("QoS", &qos))
     68        return -1;
     69    if (!file.SetPtrAddress("stats", stats))
     70        return -1;
     71
     72    int32_t run = -1;
     73    double start=0;
     74
     75    while (file.GetNextRow())
     76    {
     77        switch (qos)
     78        {
     79        case 1:
     80            start = time;
     81            run = stats[0];
     82            break;
     83        case 0:
     84            if (uint32_t(run)==stats[1] && stats[0]==stats[1])
     85            {
     86                vec[0].push_back(run);
     87                vec[1].push_back(start);
     88                vec[2].push_back(time);
     89                //cout << setw(3) << ": " << MTime(start) << " -- " << MTime(time) << endl;
     90            }
     91            run = -1;
     92            break;
     93        }
     94    }
     95
     96    return 0;
     97}
     98
     99
     100Int_t PlotThresholds(double start, vector<double> *vec, TString fname)
    47101{
    48102    fname += ".FTU_CONTROL_DAC.fits";
     
    103157}
    104158
    105 Int_t PlotCurrent(double start, TArrayD **vec, TString fname)
     159Int_t PlotCurrent(double start, vector<double> *vec, TString fname)
    106160{
    107161    fname += ".BIAS_CONTROL_AVERAGE_DATA.fits";
     
    121175    Float_t  Tpsu[2];
    122176    Float_t  Vavg[64];
     177    Float_t  Uavg[64];
    123178
    124179    if (!file.SetPtrAddress("Time", &time))
     
    136191    if (!file.SetPtrAddress("Vavg", Vavg))
    137192        return -1;
     193
     194    bool has_uset = true;
     195    try
     196    {
     197        has_uset = file.SetPtrAddress("Uavg", Uavg);
     198    }
     199    catch (const exception&)
     200    {
     201    }
    138202
    139203    TGraph g1;
     
    141205    TGraph g3;
    142206    TGraph g4;
     207    TGraph g5;
    143208    g1.SetName("CurrentAvg");
    144209    g2.SetName("TemperatureAvg");
    145210    g3.SetName("TempPSUavg");
    146211    g4.SetName("VoltageAvg");
     212    g5.SetName("UsetAvg");
    147213
    148214    while (file.GetNextRow())
     
    152218            sort(Tavg, Tavg+64);
    153219            sort(Vavg, Vavg+64);
     220            if (has_uset)
     221                sort(Uavg, Uavg+64);
    154222
    155223            g1.SetPoint(g1.GetN(), time*24*3600, Iavg[31]);
     
    157225            g3.SetPoint(g3.GetN(), time*24*3600, (Tpsu[0]+Tpsu[1])/2);
    158226            g4.SetPoint(g4.GetN(), time*24*3600, Vavg[31]);
     227            if (has_uset)
     228                g5.SetPoint(g5.GetN(), time*24*3600, Uavg[31]);
    159229        }
    160230
     
    176246    frame1.GetXaxis()->SetLabelSize(0.12);
    177247    frame1.GetYaxis()->SetLabelSize(0.1);
    178     frame1.GetYaxis()->SetTitle("CURRENT");
     248    frame1.GetYaxis()->SetTitle("CURRENT [#mu A]");
    179249    frame1.GetYaxis()->CenterTitle();
    180250    frame1.GetYaxis()->SetTitleOffset(0.2);
     
    203273    frame4.GetXaxis()->SetLabelSize(0.12);
    204274    frame4.GetYaxis()->SetLabelSize(0.1);
    205     frame4.GetYaxis()->SetTitle("VOLTAGE");
     275    frame4.GetYaxis()->SetTitle("BIAS VOLTAGE [V]");
    206276    frame4.GetYaxis()->CenterTitle();
    207277    frame4.GetYaxis()->SetTitleOffset(0.2);
     
    209279    frame4.DrawCopy();
    210280
     281    if (has_uset)
     282    {
     283        g5.SetMarkerColor(kBlue);
     284        g5.SetMarkerStyle(kFullDotMedium);
     285        g5.DrawClone("P");
     286    }
     287
    211288    g4.SetMarkerStyle(kFullDotMedium);
    212289    g4.DrawClone("P");
    213290
    214291
    215 
    216292    gROOT->SetSelectedPad(0);
    217293    gPad->GetCanvas()->cd(6);
     
    224300    TH1C frame2("Temperature_frame", "", 1000, (start+0.45)*24*3600, (start+1.025)*24*3600);
    225301    frame2.SetMinimum(0);
    226     frame2.SetMaximum(40);
     302    frame2.SetMaximum(65);
    227303    frame2.SetStats(kFALSE);
    228304    frame2.GetXaxis()->SetTimeDisplay(true);
     
    230306    frame2.GetXaxis()->SetLabelSize(0.12);
    231307    frame2.GetYaxis()->SetLabelSize(0.1);
    232     frame2.GetYaxis()->SetTitle("TEMPERATURE");
     308    frame2.GetYaxis()->SetTitle("TEMPERATURE [#circ C]");
    233309    frame2.GetYaxis()->CenterTitle();
    234310    frame2.GetYaxis()->SetTitleOffset(0.2);
     
    239315    g2.DrawClone("P");
    240316
    241     g3.SetMarkerColor(kBlue);
     317    g3.SetMarkerColor(kRed);
    242318    g3.SetMarkerStyle(kFullDotMedium);
    243319    g3.DrawClone("P");
     
    246322}
    247323
    248 Int_t PlotRate(double start, TArrayD **vec, TString fname)
    249 {
    250     fname += ".FTM_CONTROL_DATA.fits";
     324Int_t PlotDrsTemp(double /*start*/, vector<double> *vec, TString fname)
     325{
     326    fname += ".FAD_CONTROL_TEMPERATURE.fits";
    251327
    252328    fits file(fname.Data());
     
    260336
    261337    Double_t time;
    262     uint32_t trg_counter;
    263     uint32_t dead_time, run_time;
    264 
    265     if (!file.SetPtrAddress("Time",  &time))
    266         return -1;
    267 
    268     if (!file.SetPtrAddress("trg_counter", &trg_counter))
    269         return -1;
    270     if (!file.SetPtrAddress("dead_time", &dead_time))
    271         return -1;
    272     if (!file.SetPtrAddress("run_time", &run_time))
     338    uint16_t cnt;
     339    Float_t  temp[160];
     340
     341    if (!file.SetPtrAddress("Time", &time))
     342        return -1;
     343
     344    if (!file.SetPtrAddress("cnt", &cnt))
     345        return -1;
     346
     347    if (!file.SetPtrAddress("temp", temp))
    273348        return -1;
    274349
    275350    TGraph g1, g2;
    276     g1.SetName("TriggerRate");
    277     g2.SetName("RelOnTime");
    278 
    279     uint32_t prev = 0;
     351    g1.SetName("TempDRS1");
     352    g2.SetName("TempDRS2");
    280353
    281354    while (file.GetNextRow())
    282355        if (Contains(vec, time))
    283356        {
    284             g1.SetPoint(g1.GetN(), time*24*3600, 1e8*(trg_counter-prev)/(run_time-dead_time));
    285             g2.SetPoint(g2.GetN(), time*24*3600, 1.-float(dead_time)/run_time);
    286             prev = trg_counter;
     357            g1.SetPoint(g1.GetN(), time*24*3600, accumulate(temp,   temp+4, 0.)/4);
     358            g2.SetPoint(g2.GetN(), time*24*3600, accumulate(temp+4, temp+8, 0.)/4);
    287359        }
    288360
    289361
    290362    gROOT->SetSelectedPad(0);
     363    gPad->GetCanvas()->cd(6);
     364
     365    g1.SetMarkerColor(kBlue);
     366    g1.SetMarkerStyle(kFullDotMedium);
     367    g1.DrawClone("P");
     368
     369    g2.SetMarkerColor(kBlue);
     370    g2.SetMarkerStyle(kFullDotMedium);
     371    g2.DrawClone("P");
     372
     373    return 0;
     374}
     375
     376Int_t PlotPatchRate(double /*start*/, vector<double> *vec, TString fname)
     377{
     378    fname += ".FTU_CONTROL_DATA.fits";
     379
     380    fits file(fname.Data());
     381    if (!file)
     382    {
     383        cerr << fname << ": " << gSystem->GetError() << endl;
     384        return -2;
     385    }
     386
     387    //cout << fname << endl;
     388
     389    Double_t time;
     390    uint32_t qos;
     391    uint32_t counter_ch[8];
     392    float    dt_sec;
     393
     394    if (!file.SetPtrAddress("QoS",  &qos))
     395        return -1;
     396    if (!file.SetPtrAddress("Time",  &time))
     397        return -1;
     398
     399    if (!file.SetPtrAddress("counter_ch", counter_ch))
     400        return -1;
     401    if (!file.SetPtrAddress("dt_sec", &dt_sec))
     402        return -1;
     403
     404    TGraph g1, g2;
     405    g1.SetName("MinPatchRate");
     406    g2.SetName("MaxPatchRate");
     407
     408    while (file.GetNextRow())
     409        if (Contains(vec, time))
     410        {
     411            if (qos==0)   // Only automatic reports
     412                continue;
     413
     414            sort(counter_ch, counter_ch+8);
     415
     416            g1.SetPoint(g1.GetN(), time*24*3600, counter_ch[1]/dt_sec);
     417            g2.SetPoint(g2.GetN(), time*24*3600, counter_ch[7]/dt_sec);
     418        }
     419
     420
     421    gROOT->SetSelectedPad(0);
    291422    gPad->GetCanvas()->cd(3);
     423    /*
    292424    gPad->SetGrid();
    293425    gPad->SetTopMargin(0);
     
    305437    frame1.GetYaxis()->SetLabelSize(0.1);
    306438    frame1.GetYaxis()->SetTitle("TRIGGER RATE");
     439    frame1.GetYaxis()->CenterTitle();
     440    frame1.GetYaxis()->SetTitleOffset(0.2);
     441    frame1.GetYaxis()->SetTitleSize(0.1);
     442    frame1.DrawCopy();*/
     443
     444    g1.SetMarkerColor(kGreen);
     445    g1.SetMarkerStyle(kFullDotMedium);
     446    g1.DrawClone("P");
     447
     448    g2.SetMarkerColor(kRed);
     449    g2.SetMarkerStyle(kFullDotMedium);
     450    g2.DrawClone("P");
     451
     452    return 0;
     453}
     454
     455Int_t PlotCameraRate(double start, vector<double> *vec, TString fname)
     456{
     457    fname += ".FTM_CONTROL_DATA.fits";
     458
     459    fits file(fname.Data());
     460    if (!file)
     461    {
     462        cerr << fname << ": " << gSystem->GetError() << endl;
     463        return -2;
     464    }
     465
     466    //cout << fname << endl;
     467
     468    Double_t time;
     469    uint32_t trg_counter;
     470    uint32_t dead_time, run_time;
     471    float temp;
     472
     473    if (!file.SetPtrAddress("Time",  &time))
     474        return -1;
     475
     476    if (!file.SetPtrAddress("trg_counter", &trg_counter))
     477        return -1;
     478    if (!file.SetPtrAddress("dead_time", &dead_time))
     479        return -1;
     480    if (!file.SetPtrAddress("run_time", &run_time))
     481        return -1;
     482    if (!file.SetPtrAddress("temp", &temp))
     483        return -1;
     484
     485    TGraph g1, g2, g3;
     486    g1.SetName("TriggerRate");
     487    g2.SetName("RelOnTime");
     488    g3.SetName("TempFTM");
     489
     490
     491    uint32_t prev = 0;
     492
     493    while (file.GetNextRow())
     494        if (Contains(vec, time))
     495        {
     496            g1.SetPoint(g1.GetN(), time*24*3600, 1e8*(trg_counter-prev)/(run_time-dead_time));
     497            g2.SetPoint(g2.GetN(), time*24*3600, 1.-float(dead_time)/run_time);
     498            g3.SetPoint(g2.GetN(), time*24*3600, temp);
     499            prev = trg_counter;
     500        }
     501
     502
     503    gROOT->SetSelectedPad(0);
     504    gPad->GetCanvas()->cd(3);
     505    gPad->SetGrid();
     506    gPad->SetTopMargin(0);
     507    gPad->SetBottomMargin(0);
     508    gPad->SetRightMargin(0.001);
     509    gPad->SetLeftMargin(0.04);
     510
     511    TH1C frame1("Rate_frame", "", 1000, (start+0.45)*24*3600, (start+1.025)*24*3600);
     512    frame1.SetMinimum(0);
     513    frame1.SetMaximum(90);
     514    frame1.SetStats(kFALSE);
     515    frame1.GetXaxis()->SetTimeDisplay(true);
     516    frame1.GetXaxis()->SetTimeFormat("%H:%M %F1995-01-01 00:00:00 GMT");
     517    frame1.GetXaxis()->SetLabelSize(0.12);
     518    frame1.GetYaxis()->SetLabelSize(0.1);
     519    frame1.GetYaxis()->SetTitle("TRIGGER RATE [Hz]");
    307520    frame1.GetYaxis()->CenterTitle();
    308521    frame1.GetYaxis()->SetTitleOffset(0.2);
     
    340553    g2.DrawClone("P");
    341554
     555    gROOT->SetSelectedPad(0);
     556    gPad->GetCanvas()->cd(6);
     557
     558    g3.SetMarkerColor(kGreen);
     559    g3.SetMarkerStyle(kFullDotMedium);
     560    g3.DrawClone("P");
     561
    342562    return 0;
    343563}
    344564
    345 int quality(const char *basepath, UInt_t y=0, UInt_t m=0, UInt_t d=0, const char *outpath=0)
     565int quality(const char *basepath="/data/aux", UInt_t y=0, UInt_t m=0, UInt_t d=0, const char *outpath=0, const bool all=true)
    346566{
    347567    // To get correct dates in the histogram you have to add
     
    366586    cout << endl;
    367587
    368     double start = MTime(y, m, d).GetMjd()-40587;
    369 
    370     TArrayD run, beg, end;
    371 
    372     TArrayD *runs[3] = { &run, &beg, &end };
     588    const double start = MTime(y, m, d).GetMjd()-40587;
     589
     590    vector<double> runs[3]; // { &run, &beg, &end };
     591    if (!all)
     592        ReadRuns(runs, fname);
    373593
    374594    //check if the sqm was already installed on the telescope                                                                                                       
     
    378598    PlotThresholds(start, runs, fname);
    379599    PlotCurrent(start, runs, fname);
    380     PlotRate(start, runs, fname);
     600    PlotDrsTemp(start, runs, fname);
     601    PlotCameraRate(start, runs, fname);
     602    PlotPatchRate(start, runs, fname);
    381603
    382604    gROOT->SetSelectedPad(0);
     
    392614    frame1.SetStats(kFALSE);
    393615    frame1.GetXaxis()->SetTimeDisplay(true);
    394     frame1.GetXaxis()->SetTimeFormat("%H:%M %F1995-01-01 17:00:00 GMT");
     616    frame1.GetXaxis()->SetTimeFormat("%H:%M %F1995-01-01 00:00:00");// 18:00:00 GMT);
    395617    frame1.GetXaxis()->SetLabelSize(0.2);
    396618    frame1.GetXaxis()->SetTitleSize(0.2);
     
    400622
    401623    if (outpath)
    402         c->SaveAs(outpath);
     624        c->SaveAs(Form("%s/quality-%04d%02d%02d.pdf", outpath, y, m, d));
    403625
    404626    return 0;
    405627}
     628
     629int quality(UInt_t y, UInt_t m, UInt_t d, const char *outpath=0, const bool all=true)
     630{
     631    return quality("/data/aux", y, m, d, outpath, all);
     632}
Note: See TracChangeset for help on using the changeset viewer.