Changes between Version 4 and Version 5 of DatabaseBasedAnalysis/Examples


Ignore:
Timestamp:
08/12/18 14:02:23 (6 years ago)
Author:
tbretz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseBasedAnalysis/Examples

    v4 v5  
     1[[TOC]]
     2
     3
     4== Optimize Area-cut ==
     5
    16Assume you have written a large data set of good-weather, low zenith-distance Crab data with the following query to a file. The following will give you a few example of how you can make use of that in your analysis. To speed up things or decrease the file size (715MB), you might want to add additional cuts depending on your analysis. If you want to apply a Theta-square cut, please refer to DatabaseBasedAnalysis#Dataretrieval.
    27
     
    3338}}}
    3439
     40{{{!#cpp
     41#include <iostream>
     42#include <iomanip>
     43
     44#include <TMath.h>
     45#include <TH1.h>
     46#include <TH2.h>
     47#include <TProfile.h>
     48#include <TChain.h>
     49#include <TGraph.h>
     50#include <TCanvas.h>
     51
     52Double_t LiMa(Double_t s, Double_t b, Double_t alpha=0.2)
     53{
     54    const Double_t sum = s+b;
     55
     56    if (s<0 || b<0 || alpha<=0)
     57        return -1;
     58
     59    const Double_t l = s==0 ? 0 : s*TMath::Log(s/sum*(alpha+1)/alpha);
     60    const Double_t m = b==0 ? 0 : b*TMath::Log(b/sum*(alpha+1)      );
     61
     62    return l+m<0 ? 0 : TMath::Sqrt((l+m)*2);
     63}
     64
     65void optimarea()
     66{
     67    // Create chain for the tree Result
     68    // This is just easier than using TFile/TTree
     69    TChain c("Result");
     70
     71    // Add the input file to the
     72    c.AddFile("crab2018.root");
     73
     74    // Define variables for all leaves to be accessed
     75    // By definition rootifysql writes only doubles
     76    double X, Y, MeanX, MeanY, Width, Length, CosDelta, SinDelta,
     77        M3Long, SlopeLong, Leakage1, Size,
     78        ConcCore, ConcCOG, NumIslands, NumUsedPixels, Zd;
     79
     80    // Connect the variables to the cordesponding leaves
     81    c.SetBranchAddress("X", &X);
     82    c.SetBranchAddress("Y", &Y);
     83    c.SetBranchAddress("MeanX", &MeanX);
     84    c.SetBranchAddress("MeanY", &MeanY);
     85    c.SetBranchAddress("Width", &Width);
     86    c.SetBranchAddress("Length", &Length);
     87    c.SetBranchAddress("CosDelta", &CosDelta);
     88    c.SetBranchAddress("SinDelta", &SinDelta);
     89    c.SetBranchAddress("M3Long", &M3Long);
     90    c.SetBranchAddress("SlopeLong", &SlopeLong);
     91    c.SetBranchAddress("Leakage1", &Leakage1);
     92    c.SetBranchAddress("NumIslands", &NumIslands);
     93    c.SetBranchAddress("NumUsedPixels", &NumUsedPixels);
     94    c.SetBranchAddress("Size", &Size);
     95
     96    // Set some constants (they could be included in the database
     97    // in the future)
     98    double mm2deg = +0.0117193246260285378;
     99
     100    // -------------------- Source dependent parameter calculation -------------------
     101
     102    // Create a histogram for on- and off-data
     103    TH1F hold("old",  "", 100, 0, 1);
     104    TH1F hnew("onew", "", 100, 0, 1);
     105
     106    TH2F h2area_on( "H_AvsS_on",   "", 24, 1.5, 4.5, 200, -2, 0);
     107    TH2F h2area_of( "H_AvsS_of",   "", 24, 1.5, 4.5, 200, -2, 0);
     108    TH2F h2area_sig("H_AvsS_sig",  "", 24, 1.5, 4.5, 200, -2, 0);
     109
     110    // Loop over all events
     111    for (int i=0; i<c.GetEntries(); i++)
     112    {
     113        // read the i-th event from the file
     114        c.GetEntry(i);
     115
     116        // First calculate all cuts to speedup the analysis
     117        double area = TMath::Pi()*Width*Length;
     118
     119        bool cutq = NumIslands<3.5 && NumUsedPixels>5.5 && Leakage1<0.1;
     120        if (!cutq)
     121            continue;
     122
     123        // Loop over all wobble positions in the camera
     124        for (int angle=0; angle<360; angle+=60)
     125        {
     126
     127        // -------------------- Source dependent parameter calculation -------------------
     128
     129            double cr = cos(angle*TMath::DegToRad());
     130            double sr = sin(angle*TMath::DegToRad());
     131
     132            double px = cr*X-sr*Y;
     133            double py = cr*Y+sr*X;
     134
     135            double dx = MeanX - px*1.022;
     136            double dy = MeanY - py*1.022;
     137
     138            double norm = sqrt(dx*dx + dy*dy);
     139            double dist = norm*mm2deg;
     140
     141            double lx = min(max((CosDelta*dy - SinDelta*dx)/norm, -1.), 1.);
     142            double ly = min(max((CosDelta*dx + SinDelta*dy)/norm, -1.), 1.);
     143
     144            double alpha = asin(lx);
     145            double sgn   = TMath::Sign(1., ly);
     146
     147            // ------------------------------- Application ----------------------------------
     148
     149            double m3l   = M3Long*sgn*mm2deg;
     150            double slope = SlopeLong*sgn/mm2deg;
     151
     152            // --------------------------------- Analysis -----------------------------------
     153
     154            double xi = 1.340   + 0.0755  *slope + 1.67972 *(1-1/(1+4.86232*Leakage1));
     155
     156            double sign1 = m3l+0.07;
     157            double sign2 = (dist-0.5)*7.2-slope;
     158
     159            double disp  = (sign1<0 || sign2<0 ? -xi : xi)*(1-Width/Length);
     160
     161            double thetasq = disp_old*disp_old + dist*dist - 2*disp_old*dist*sqrt(1-lx*lx);
     162
     163            if (thetasq>0.024)
     164                continue;
     165
     166            if (angle==0)
     167                h2area_on.Fill(log10(Size), log10(area*mm2deg*mm2deg));
     168            else
     169                h2area_of.Fill(log10(Size), log10(area*mm2deg*mm2deg));
     170        }
     171    }
     172
     173    for (int x=1; x<=h2area_sig.GetNbinsX(); x++)
     174        for (int y=1; y<=h2area_sig.GetNbinsY(); y++)
     175        {
     176            double on = h2area_on.Integral(x, x, 1, y);
     177            double of = h2area_of.Integral(x, x, 1, y);
     178
     179            h2area_sig.SetBinContent(x, y, Error(on, of));
     180        }
     181
     182    TGraph gmax;
     183    for (int x=1; x<=h2area_sig.GetNbinsX(); x++)
     184    {
     185        TH1D *p = h2area_sig.ProjectionY("_py", x, x);
     186        double max = p->GetXaxis()->GetBinCenter(p->GetMaximumBin());
     187        delete p;
     188
     189        gmax.SetPoint(gmax.GetN(),
     190                      h2area_sig.GetXaxis()->GetBinCenter(x),
     191                      max);
     192    }
     193
     194    clock.Print();
     195
     196    h2area_on.SetStats(kFALSE);
     197    h2area_of.SetStats(kFALSE);
     198    h2area_sig.SetStats(kFALSE);
     199
     200    TCanvas *canv = new TCanvas;
     201    canv->Divide(2,2);
     202
     203    canv->cd(1);
     204    h2area_on.DrawCopy("colz");
     205    gmax.DrawClone("*");
     206
     207    canv->cd(2);
     208    h2area_sig.DrawCopy("colz");
     209    gmax.DrawClone("*");
     210
     211    canv->cd(3);
     212    h2area_of.DrawCopy("colz");
     213    gmax.DrawClone("*");
     214
     215    canv->cd(4);
     216}
     217}}}
     218
    35219== Optimize Disp ==
    36220