Changes between Version 1 and Version 2 of DatabaseBasedAnalysis/Examples


Ignore:
Timestamp:
08/12/18 13:53:59 (7 years ago)
Author:
tbretz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseBasedAnalysis/Examples

    v1 v2  
    3232   fR750Cor>0.9*fR750Ref
    3333}}}
     34
     35== Optimize Disp ==
     36
     37The following root-macro (to be compiled!)
     38
     39{{{!cpp
     40#include <iostream>
     41#include <iomanip>
     42
     43#include <TMath.h>
     44#include <TH1.h>
     45#include <TH2.h>
     46#include <TProfile.h>
     47#include <TChain.h>
     48#include <TGraph.h>
     49#include <TCanvas.h>
     50#include <TStopwatch.h>
     51
     52void optimdisp()
     53{
     54    // Create chain for the tree Result
     55    // This is just easier than using TFile/TTree
     56    TChain c("Result");
     57
     58    // Add the input file to the
     59    c.AddFile("simulation.root");
     60
     61    // Define variables for all leaves to be accessed
     62    // By definition rootifysql writes only doubles
     63    double X, Y, MeanX, MeanY, Width, Length, CosDelta, SinDelta,  M3Long, SlopeLong,
     64       Leakage1, Size, ConcCore, ConcCOG, NumIslands, NumUsedPixels, Zd;
     65
     66    // Connect the variables to the cordesponding leaves
     67    c.SetBranchAddress("X", &X);
     68    c.SetBranchAddress("Y", &Y);
     69    c.SetBranchAddress("MeanX", &MeanX);
     70    c.SetBranchAddress("MeanY", &MeanY);
     71    c.SetBranchAddress("Width", &Width);
     72    c.SetBranchAddress("Length", &Length);
     73    c.SetBranchAddress("CosDelta", &CosDelta);
     74    c.SetBranchAddress("SinDelta", &SinDelta);
     75    c.SetBranchAddress("M3Long", &M3Long);
     76    c.SetBranchAddress("SlopeLong", &SlopeLong);
     77    c.SetBranchAddress("Leakage1", &Leakage1);
     78    c.SetBranchAddress("NumIslands", &NumIslands);
     79    c.SetBranchAddress("NumUsedPixels", &NumUsedPixels);
     80    c.SetBranchAddress("Size", &Size);
     81    c.SetBranchAddress("Zd", &Zd);
     82
     83    // Set some constants (they could be included in the database
     84    // in the future)
     85    double mm2deg = +0.0117193246260285378;
     86
     87    // -------------------- Source dependent parameter calculation -------------------
     88
     89    // Create a histogram for on- and off-data
     90    TH1F hold("old",  "", 100, 0, 1);
     91    TH1F hnew("onew", "", 100, 0, 1);
     92
     93    TH2F     h2slope("H_VsSlope",   "", 75, -8,     7,    100, -2.5, 1.5);
     94    TProfile p2slope("P_VsSlope",   "", 75, -8,     7);
     95    TH2F     h2leak( "H_VsLeakage", "", 75,  0,     0.15, 100, -2.5, 1.5);
     96    TH2F     h2m3l(  "H_M3long",    "", 75, -0.2,   0.6,  100, -2.5, 1.5);
     97    TH2F     h2zd(   "H_Zd",        "", 30, 30,    60,    100, -2.5, 1.5);
     98    TH2F     h2ni(   "H_NumIsl",    "", 10,  0.5,  10.5,  100, -2.5, 1.5);
     99    TH2F     h2np(   "H_NumPix",    "", 10,  0.5, 100.5,  100, -2.5, 1.5);
     100    TH2F     h2size( "H_Size",      "", 30,  1.5,   4.5,  100, -2.5, 1.5);
     101
     102    // Loop over all wobble positions in the camera
     103    for (int i=0; i<c.GetEntries(); i++)
     104    {
     105        // read the i-th event from the file
     106        c.GetEntry(i);
     107
     108        // First calculate all cuts to speedup the analysis
     109        double area = TMath::Pi()*Width*Length;
     110
     111        bool cutq = NumIslands<3.5 && NumUsedPixels>5.5 && Leakage1<0.1;
     112        if (!cutq)
     113            continue;
     114
     115        bool cut0 = area < log10(Size)*898-1535;
     116        if (!cut0)
     117            continue;
     118
     119        // -------------------- Source dependent parameter calculation -------------------
     120
     121        int angle = 0;
     122
     123        double cr = cos(angle*TMath::DegToRad());
     124        double sr = sin(angle*TMath::DegToRad());
     125
     126        double px = cr*X-sr*Y;
     127        double py = cr*Y+sr*X;
     128
     129        double dx = MeanX - px*1.022;
     130        double dy = MeanY - py*1.022;
     131
     132        double norm = sqrt(dx*dx + dy*dy);
     133        double dist = norm*mm2deg;
     134
     135        double lx = min(max((CosDelta*dy - SinDelta*dx)/norm, -1.), 1.);
     136        double ly = min(max((CosDelta*dx + SinDelta*dy)/norm, -1.), 1.);
     137
     138        double alpha = asin(lx);
     139        double sgn   = TMath::Sign(1., ly);
     140
     141        // ------------------------------- Application ----------------------------------
     142
     143        double m3l   = M3Long*sgn*mm2deg;
     144        double slope = SlopeLong*sgn/mm2deg;
     145
     146        // --------------------------------- Analysis -----------------------------------
     147
     148        //double xi = 1.34723 + 0.15214 *slope + 0.970704*(1-1/(1+8.89826*Leakage1));
     149        double xi_old = 1.39252 + 0.154247*slope + 1.67972 *(1-1/(1+4.86232*Leakage1));
     150        double xi_new = 1.340   + 0.0755  *slope + 1.67972 *(1-1/(1+4.86232*Leakage1));
     151
     152        double sign1 = m3l+0.07;
     153        double sign2 = (dist-0.5)*7.2-slope;
     154
     155        double disp_old  = (sign1<0 || sign2<0 ? -xi_old : xi_old)*(1-Width/Length);
     156        double disp_new  = (sign1<0 || sign2<0 ? -xi_new : xi_new)*(1-Width/Length);
     157
     158        double thetasq_old = disp_old*disp_old + dist*dist - 2*disp_old*dist*sqrt(1-lx*lx);
     159        double thetasq_new = disp_new*disp_new + dist*dist - 2*disp_new*dist*sqrt(1-lx*lx);
     160
     161        // Fill the on- and off-histograms
     162        hold.Fill(thetasq_old);
     163        hnew.Fill(thetasq_new);
     164
     165        double residual = xi_new-dist/(1-Width/Length);
     166
     167        h2slope.Fill(slope,        residual);
     168        p2slope.Fill(slope,        residual);
     169
     170        h2leak.Fill(Leakage1,      residual);
     171        h2m3l.Fill( m3l,           residual);
     172        h2zd.Fill(  Zd,            residual);
     173        h2ni.Fill(  NumIslands,    residual);
     174        h2np.Fill(  NumUsedPixels, residual);
     175        h2size.Fill(log10(Size),   residual);
     176    }
     177
     178    cout << hnew.GetBinContent(1) << endl;
     179
     180    clock.Print();
     181
     182    TCanvas *canv = new TCanvas;
     183    canv->Divide(2,2);
     184
     185    canv->cd(1);
     186    gPad->SetGridy();
     187    h2slope.DrawCopy("colz");
     188    p2slope.DrawCopy("same");
     189
     190    canv->cd(2);
     191    gPad->SetGridy();
     192    h2leak.DrawCopy("colz");
     193
     194    canv->cd(3);
     195    gPad->SetGridy();
     196    //h2m3l.DrawCopy("colz");
     197    h2zd.DrawCopy("colz");
     198    //h2ni.DrawCopy("colz");
     199    //h2np.DrawCopy("colz");
     200    //h2size.DrawCopy("colz");
     201
     202    canv->cd(4);
     203    // Plot the result
     204    hold.SetLineColor(kRed);
     205    hnew.SetMinimum(0);
     206    hnew.DrawCopy();
     207    hold.DrawCopy("same");
     208}
     209}}}