Ignore:
Timestamp:
06/21/02 08:28:43 (23 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/WuerzburgSoft/Thomas/mphys
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WuerzburgSoft/Thomas/mphys/Changelog

    r1373 r1374  
    11                                                                  -*-*- END -*-*-
     2 2002/06/20: Thomas Bretz
     3
     4   * analp.C:
     5     - clean up the code
     6     - added the point-spread histograms from different directions
     7 
     8   * mphys.C:
     9     - removed the angular histograms
     10     - added the plot spectral index
     11     - added the timer to get a usable ubdated window
     12
     13
     14
    215 2002/06/20: Thomas Bretz
    316
  • trunk/WuerzburgSoft/Thomas/mphys/analp.C

    r1370 r1374  
    22
    33#include <float.h>
     4
    45Double_t GetMin(TH1 *h)
    56{
     
    1314}
    1415
    15 void GetRange(TChain *chain, const char *name, Double_t &min, Double_t &max)
     16void GetRange(TChain *chain, const char *name, Int_t &nbins, Double_t &min, Double_t &max, Double_t conv=1)
    1617{
    1718    TString str("MPhoton.MParticle.");
     
    3233        if (!leaf)
    3334            return 0;
     35
    3436        Double_t val = leaf->GetValue();
    3537
     
    4244            max = val;
    4345    }
     46
     47    min *= conv;
     48    max *= conv;
     49
     50    chain.GetPlayer();
     51    TTreePlayer &play = *chain.GetPlayer();
     52
     53    Int_t n;
     54    play.FindGoodLimits(nbins, n, min, max, kFALSE);
     55    nbins = n;
    4456}
    4557
     
    4759{
    4860    TChain chain("Photons");
    49     // chain.Add("cascade_100kpc_a_1e6.root");
    50     // chain.Add("cascade_100kpc_b_1e6.root");
    51     // chain.Add("cascade_500kpc_0*.root");
    52     chain.Add("cascade_500kpc_21d_0*.root");
    53     // chain.Add("cascade_100kpc_0*.root");
    54     // chain.Add("cascade_100kpc_14*.root");
    55     // chain.Add("cascade_100kpc_0*.root");
    56     // chain.Add("cascade_500kpc_21d_*.root");
    57     // chain.Add("cascade_100kpc_4*.root");
    58     // chain.Add("cascade_500kpc_21d_B1e-18_*.root");
    59 
     61    chain.Add("cascade_500kpc_*.root");
     62
     63    MBinning binsx;
     64    binsx.SetEdgesLog(21, 1e4, 1e11);
     65
     66    Double_t alpha = -1.8;
     67    Double_t plot  =  1.8;
     68
     69    Int_t nbins = 20;
     70
     71    // ------------------------------
    6072
    6173    Int_t n = chain.GetEntries();
    6274
    63     cout << "Found " << n << " entries." << endl;
     75    cout << endl << "Found " << n << " entries." << endl;
    6476
    6577    if (n==0)
    6678        return;
    67 
    68     MBinning binsx;
    69     binsx.SetEdgesLog(21, 1e4, 1e11);
    7079
    7180    MBinning binspolx;
     
    7483    binspolx.SetEdges(16, -180, 180);
    7584
    76     const Double_t ls = 299792458;         // [m/s]
    77     const Double_t ly = 3600.*24.*365.*ls; // [m/ly]
    78     const Double_t pc = 1./3.258;          // [pc/ly]
    79 
    80     Double_t max;
    81     Double_t min;
    82     Int_t nbins=20;
    83 
    84     TTreePlayer &play = *chain.GetPlayer();
    85 
    86     GetRange(&chain, "fTheta", min, max);
    87     Double_t conv = kRad2Deg*60;
    88     min *= conv;
    89     max *= conv;
    90     cout << "fTheta: " << min  << " < " << max  << " [']" << endl;
    91     play.FindGoodLimits(10, nbins, min, max, kFALSE);
    92     cout << "    " << nbins << ": " << min << " < " << max << endl;
     85    Double_t min, max;
     86    GetRange(&chain, "fTheta", nbins, min, max, kRad2Deg*60);
    9387    binspola.SetEdges(nbins, min, max);
    94 
    95     GetRange(&chain, "fR", min, max);
    96     max/=4;
    97     cout << "fR:     " << min  << " < " << max  << " [kpc]" << endl;
    98     play.FindGoodLimits(10, nbins, min, max, kFALSE);
    99     cout << "    " << nbins << ": " << min << " < " << max << endl;
     88    cout << "fTheta, " << nbins << ": " << min << " ... " << max << " [']" << endl;
     89
     90    GetRange(&chain, "fR", nbins, min, max);
    10091    binspolr.SetEdges(nbins, min, max);
     92    cout << "fR,     " << nbins << ": " << min << " ... " << max << " [kpc]" << endl;
    10193
    10294    TH1D h;
    103     h.SetName("Photons");
     95    TH1D prim;
    10496    MH::SetBinning(&h, &binsx);
    105 
    106     TH1D prim;
    10797    MH::SetBinning(&prim, &binsx);
    10898
     
    115105    chain.SetBranchAddress("MPhoton.", &p);
    116106
    117     Double_t weight =  0;
    118     Double_t alpha  = -2;
    119     Double_t plot   =  2;
    120     Double_t E;
     107    chain.GetEntry(0);
     108    if (!p->IsPrimary())
     109        return;
     110
     111    Double_t z = p->GetZ();
     112    Double_t R = MParticle::RofZ(&z);
     113
     114    cout << "Z = " << z << endl;
     115    cout << "R = " << R << "kpc" << endl;
     116
     117    Double_t weight = 0;
     118
    121119    for (int i=0; i<n; i++)
    122120    {
     
    125123        Double_t Ep = p->GetEnergy();
    126124
    127         if (i==0)
    128             weight = pow(Ep, alpha);
    129 
    130125        if (p->IsPrimary())
    131126        {
    132127            weight = pow(Ep, alpha);
    133             prim.Fill(Ep, pow(Ep,plot) * weight);
    134             E = Ep;
     128            prim.Fill(Ep, pow(Ep, plot+alpha));
    135129            continue;
    136130        }
    137131
    138         //if (Ep==E)
    139         //    continue;
    140 
    141132        h.Fill(Ep, pow(Ep,plot) * weight);
    142         Double_t v = p->GetPhi()*kRad2Deg;
    143         r.Fill(fmod(v+180, 360)-180, p->GetR(), weight);
    144         v = p->GetPsi()*kRad2Deg;
    145         a.Fill(fmod(v+180, 360)-180, p->GetTheta()*kRad2Deg*60, weight);
     133
     134        Double_t phi = fmod(p->GetPhi()*kRad2Deg+180, 360)-180;
     135        Double_t psi = fmod(p->GetPsi()*kRad2Deg+180, 360)-180;
     136
     137        r.Fill(phi, p->GetR(),                 weight);
     138        a.Fill(psi, p->GetTheta()*kRad2Deg*60, weight);
    146139    }
    147140
     
    163156    c->Divide(2,2);
    164157
     158    gStyle->SetPalette(1, 0);
     159
    165160    c->cd(1);
    166     gPad->SetLogy();
    167     gPad->SetLogz();
    168     gPad->SetTheta(70);
    169     gPad->SetPhi(90);
    170     h.SetTitle(Form(" E^{%.1f}  Spectra ", alpha));
    171     h.SetXTitle("E\\gamma [GeV]");
    172     h.SetYTitle(Form("E^{%.1f} * Counts", plot));
    173161    r.SetTitle(" Distance from Observer ");
    174162    r.GetXaxis()->SetLabelOffset(-0.015);
     
    177165    r.SetXTitle("\\Phi [\\circ]");
    178166    r.SetYTitle("R [kpc]");
    179     r.DrawCopy("surf1pol");
     167    TPad &pad = *gPad;
     168    pad.Divide(2,2);
     169    pad.cd(1);
     170    gPad->SetLogy();
     171    gPad->SetLogz();
     172    gPad->SetTheta(0);
     173    gPad->SetPhi(90);
     174    g = r.DrawCopy("surf1pol");
     175    pad.cd(2);
     176    gPad->SetLogy();
     177    gPad->SetLogz();
     178    gPad->SetTheta(70);
     179    gPad->SetPhi(90);
     180    g->Draw("surf1pol");
     181    pad.cd(3);
     182    gPad->SetLogy();
     183    gPad->SetLogz();
     184    gPad->SetTheta(90);
     185    gPad->SetPhi(90);
     186    g->Draw("surf1pol");
     187    pad.cd(4);
     188    gPad->SetLogy();
     189    gPad->SetLogz();
     190    gPad->SetTheta(20);
     191    gPad->SetPhi(90);
     192    g->Draw("surf1pol");
    180193
    181194    c->cd(2);
    182     gPad->SetLogy();
    183     gPad->SetLogz();
    184     gPad->SetTheta(70);
    185     gPad->SetPhi(90);
    186195    a.SetTitle(" Hit Angle for Observer ");
    187196    a.GetXaxis()->SetLabelOffset(-0.015);
     
    190199    a.SetXTitle("\\Psi [\\circ]");
    191200    a.SetYTitle("\\Theta [']");
    192     a.DrawCopy("surf1pol");
     201    TPad &pad = *gPad;
     202    pad.Divide(2,2);
     203    pad.cd(1);
     204    gPad->SetLogy();
     205    gPad->SetLogz();
     206    gPad->SetTheta(0);
     207    gPad->SetPhi(90);
     208    g = a.DrawCopy("surf1pol");
     209    pad.cd(2);
     210    gPad->SetLogy();
     211    gPad->SetLogz();
     212    gPad->SetTheta(70);
     213    gPad->SetPhi(90);
     214    g->Draw("surf1pol");
     215    pad.cd(3);
     216    gPad->SetLogy();
     217    gPad->SetLogz();
     218    gPad->SetTheta(90);
     219    gPad->SetPhi(90);
     220    g->Draw("surf1pol");
     221    pad.cd(4);
     222    gPad->SetLogy();
     223    gPad->SetLogz();
     224    gPad->SetTheta(20);
     225    gPad->SetPhi(90);
     226    g->Draw("surf1pol");
    193227
    194228    c->cd(3);
     
    227261    gPad->SetLogx();
    228262    gPad->SetLogy();
    229     prim.SetFillStyle(0);
    230263    h.SetFillStyle(0);
     264    h.SetName("Photons");
     265    h.SetTitle(Form(" E^{%.1f}  Spectra ", alpha));
     266    h.SetXTitle("E\\gamma [GeV]");
     267    h.SetYTitle(Form("E^{%.1f} * Counts", plot));
    231268    h.GetXaxis()->SetLabelOffset(-0.015);
    232269    h.GetXaxis()->SetTitleOffset(1.1);
    233 //    h.GetXaxis()->SetRangeUser(1e4, 1e9);
     270    h.SetMarkerStyle(kMultiply);
     271    prim.SetFillStyle(0);
    234272    prim.SetMarkerStyle(kPlus);
    235     h.SetMarkerStyle(kMultiply);
    236273    prim.SetMarkerColor(kRed);
    237274    prim.SetLineColor(kRed);
    238 
    239     h.DrawCopy("P");
    240     prim.DrawCopy("Psame");
    241     prim.DrawCopy("Csame");
    242     h.DrawCopy("Csame");
     275    TH1 &g1=*h.DrawCopy("P");
     276    TH1 &g2=*prim.DrawCopy("Psame");
     277    g2.Draw("Csame");
     278    g1.Draw("Csame");
    243279 
    244280    c->cd(2);
  • trunk/WuerzburgSoft/Thomas/mphys/phys.C

    r1373 r1374  
    1010#include <TFile.h>
    1111#include <TTree.h>
     12#include <TTimer.h>
     13#include <TStyle.h>
    1214#include <TBranch.h>
    13 #include <TStyle.h>
    1415#include <TRandom.h>
    1516#include <TCanvas.h>
     
    121122    Double_t startz = MParticle::ZofR(&R);
    122123
    123     const char *filename = "data/cascade_delme.root";
     124    const char *filename = "cascade_delme.root";
    124125
    125126    const Double_t B = 0;
     
    128129    cout << "Z = " << startz << endl;
    129130
    130     static TRandom rand(0);
    131131    MPairProduction pair;
    132132
    133     Double_t runtime = 60; // [s]
     133    Double_t runtime = 5*60; // [s]
    134134
    135135    Double_t lo = 1e4;
    136136    Double_t hi = 1e11;
    137137    Double_t alpha = -2;
     138    Double_t plot  =  2;
    138139
    139140    Int_t nbins = 21; //4*log10(hi/lo);
     
    142143    TH1D histsrc;
    143144
    144     hist.SetMinimum(lo*lo * pow(lo, alpha)/10);
    145     histsrc.SetMinimum(lo*lo * pow(lo, alpha)/10);
     145    hist.SetMinimum(pow(lo, plot+alpha)/10);
     146    histsrc.SetMinimum(pow(lo, plot+alpha)/10);
    146147
    147148    TList listg;
     
    152153
    153154    gStyle->SetOptStat(10);
    154 
    155     TH2D position;
    156     TH2D angle;
    157     TH1D histpos;
    158     TH1D hista;
    159 
    160     MBinning binspolx;
    161     MBinning binspoly1;
    162     MBinning binspoly2;
    163     binspolx.SetEdges(16, -180, 180);
    164     binspoly1.SetEdges(20, 0, 5e-6);
    165     binspoly2.SetEdges(20, 0, 1e-5);
    166     MH::SetBinning(&angle,    &binspolx, &binspoly1);
    167     MH::SetBinning(&position, &binspolx, &binspoly2);
    168     MH::SetBinning(&hista,    &binspoly1);
    169     MH::SetBinning(&histpos,  &binspoly2);
    170 
    171     hista.SetTitle("Particle Angle");
    172     angle.SetTitle("Particle Angle");
    173     histpos.SetTitle("Particle Position");
    174     position.SetTitle("Particle Position");
    175155
    176156    //
     
    190170    MH::SetBinning(&histsrc, &bins);
    191171
    192     MH::MakeDefCanvas();
     172    TCanvas *c=MH::MakeDefCanvas();
    193173
    194174    gPad->SetGrid();
     
    196176    gPad->SetLogy();
    197177
    198     histsrc.SetName("Spectrum");
    199     histsrc.SetXTitle("E [GeV]");
    200     histsrc.SetYTitle("E^{2}\\dotCounts");
    201     histsrc.GetXaxis()->SetLabelOffset(-0.015);
    202     histsrc.GetXaxis()->SetTitleOffset(1.1);
    203 
    204     histsrc.Draw("P");
    205     hist.Draw("Psame");
    206     histsrc.Draw("Csame");
    207     hist.Draw("Csame");
     178    hist.SetName("Spectrum");
     179    hist.SetXTitle("E [GeV]");
     180    hist.SetYTitle(Form("E^{%.1f} Counts", plot));
     181    hist.GetXaxis()->SetLabelOffset(-0.015);
     182    hist.GetXaxis()->SetTitleOffset(1.1);
     183
     184    hist.Draw("P");
     185    histsrc.Draw("Psame");
     186    histsrc.Draw("same");
     187    hist.Draw("same");
    208188
    209189    // ------------------------------
    210190
    211     MPhoton *p4file  = NULL;
    212     MElectron *e4file  = NULL;
    213 
     191    void *ptr = NULL;
    214192    TFile file(filename, "RECREATE", "Intergalactic cascade", 9);
    215     TTree *T1 = new TTree("Photons",   "Photons from Cascade");
    216     TTree *T2 = new TTree("Electrons", "Electrons in the Cascade");
    217     TBranch *B1 = T1->Branch("MPhoton.",   "MPhoton",   &p4file, 32000);
    218     TBranch *B2 = T2->Branch("MElectron.", "MElectron", &e4file, 32000);
     193    TTree   *T1 = new TTree ("Photons",    "Photons from Cascade");
     194    TTree   *T2 = new TTree ("Electrons", "Electrons in the Cascade");
     195    TBranch *B1 = T1->Branch("MPhoton.",   "MPhoton",   &ptr);
     196    TBranch *B2 = T2->Branch("MElectron.", "MElectron", &ptr);
    219197
    220198    // ------------------------------
     199
     200    TTimer timer("gSystem->ProcessEvents();", 250, kFALSE);
     201    timer.TurnOn();
    221202
    222203    TStopwatch clock;
    223204    clock.Start();
    224 
    225     Int_t timer = 0;
    226205
    227206    Int_t n=0;
     
    234213        Double_t E = GetEnergy(nbins, lo, hi);
    235214        Double_t weight = pow(E, alpha);
    236         histsrc.Fill(E, E*E * weight);
     215        histsrc.Fill(E, pow(E, plot) * weight);
    237216
    238217        MPhoton *gamma=new MPhoton(E, startz);
     
    248227        Double_t Esum=0;
    249228        Double_t Emis=0;
    250 
    251229        while (1)
    252230        {
     
    265243                    cout << "!" << flush;
    266244
    267                     hist.Fill(Eg, Eg*Eg*weight);
    268                     position.Fill(p->GetPhi()*kRad2Deg, p->GetR(), weight);
    269                     angle.Fill(p->GetPsi()*kRad2Deg, p->GetTheta()*kRad2Deg, weight);
    270                     histpos.Fill(p->GetR(), weight);
    271                     hista.Fill(p->GetTheta()*kRad2Deg, weight);
     245                    hist.Fill(Eg, pow(Eg, plot)*weight);
    272246
    273247                    p->SetIsPrimary(kFALSE);
     
    286260                phot.SetParameter(0, Eg);
    287261                phot.SetParameter(1, p->GetZ());
    288                 /*
    289                 if (phot.Integral(-log10(Eg)-8, -10.5, (Double_t*)NULL, 1e-2)==0)
    290                 {
    291                     cout << "z" << flush;
    292                     continue;
    293                 }
    294                 */
     262
    295263                Double_t Ep    = pow(10, phot.GetRandom());
    296264                if (Ep==pow(10,0))
     
    327295            while ((e=(MElectron*)Next()))
    328296            {
    329                 e->SetIsPrimary();
     297                e->SetIsPrimary(kTRUE);
    330298                T2->Fill();
    331299                e->SetIsPrimary(kFALSE);
     
    340308                    {
    341309                        cout << "!" << flush;
    342                         Esum += e->GetEnergy();
    343                         Emis += e->GetEnergy();
    344310                        break;
    345311                    }
    346312
    347313                    // WRONG!
    348                     Double_t theta = 0; //rand.Uniform(TMath::Pi()/2)+TMath::Pi()*3/4;
    349                     MPhoton *p = e->DoInvCompton(theta);
     314                    MPhoton *p = e->DoInvCompton(0);
    350315
    351316                    T2->Fill();
     
    371336                    {
    372337                        cout << "T" << flush;
    373                         Esum += e->GetEnergy();
    374                         Emis += e->GetEnergy();
    375338                        break;
    376339                    }
     
    379342                    {
    380343                        cout << "E" << flush;
    381                         Esum += e->GetEnergy();
    382                         Emis += e->GetEnergy();
    383344                        break;
    384345                    }
    385346                }
     347                Esum += e->GetEnergy();
     348                Emis += e->GetEnergy();
    386349            }
    387350            liste.Delete();
     
    389352        cout << " ----> " << Form("%3.1f %3.1e / %3.1f %3.1e", Emis/E, Emis, Esum/E, Esum) << endl;
    390353
    391         Int_t now = (int)(TStopwatch::GetRealTime()- starttime)/5;
    392         if (now!=timer || n<10)
    393         {
    394             histsrc.SetTitle(Form("E^%.1f, z=%f, T=%d'%d\", N=%d", alpha, startz,
    395                                   (int)runtime/60, (int)runtime%60, hist.GetEntries()));
    396             gPad->Modified();
    397             gPad->Update();
    398             timer = now;
    399         }
     354        hist.SetTitle(Form("E^{%.1f}  z=%f  T=%d'%d\"  N=%d", alpha, startz,
     355                              (int)runtime/60, (int)runtime%60, n));
     356
     357        timer.Stop();
     358        c->Update();
     359        timer.Start(250);
    400360
    401361    }
     
    405365    clock.Print();
    406366
     367    timer.Stop();
     368
    407369    file.Write();
    408370
     
    414376    gPad->Clear();
    415377
    416     hist.SetTitle(Form("E^%.1f, z=%f, T=%d'%d\", N=%d", alpha, startz, (int)runtime/60, (int)runtime%60, n));
    417     gPad->Modified();
    418     gPad->Update();
    419 
    420     hist.DrawCopy("P");
    421     histsrc.DrawCopy("Psame");
    422     hist.DrawCopy("Csame");
    423     histsrc.DrawCopy("Csame");
    424 
    425     gPad->SetGrid();
    426     gPad->SetLogx();
    427     gPad->SetLogy();
    428 
    429     MH::MakeDefCanvas();
    430     position.SetXTitle("Pos: \\Phi [\\circ]");
    431     position.SetYTitle("Pos: R [kpc]");
    432     position.DrawCopy("surf1pol");
    433     //gPad->SetLogy();
    434 
    435     MH::MakeDefCanvas();
    436     angle.SetXTitle("Angle: \\Psi [\\circ]");
    437     angle.SetYTitle("Angle: \\Theta [\\circ]");
    438     angle.DrawCopy("surf1pol");
    439     //gPad->SetLogy();
    440 
    441     MH::MakeDefCanvas();
    442     histpos.SetXTitle("R [kpc]");
    443     histpos.SetYTitle("Counts");
    444     histpos.DrawCopy();
    445     gPad->SetLogx();
    446 
    447     MH::MakeDefCanvas();
    448     hista.SetXTitle("\\Theta [\\circ]");
    449     hista.SetYTitle("Counts");
    450     hista.DrawCopy();
    451     gPad->SetLogx();
     378    hist.SetTitle(Form("E^{%.1f}  z=%f  T=%d'%d\"  N=%d", alpha, startz, (int)runtime/60, (int)runtime%60, n));
     379
     380    TH1 &h1 = *hist.DrawCopy("P");
     381    TH1 &h2 = *histsrc.DrawCopy("Psame");
     382    h2.Draw("Csame");
     383    h1.Draw("Csame");
    452384}
    453385
Note: See TracChangeset for help on using the changeset viewer.