Ignore:
Timestamp:
06/13/02 08:54:51 (23 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/WuerzburgSoft/Thomas/mphys
Files:
5 edited

Legend:

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

    r1359 r1360  
    11                                                                  -*-*- END -*-*-
     2 2002/06/13: Thomas Bretz
     3
     4   * MParticle.h:
     5     - Implemented Set/IsPrimary
     6
     7   * energyloss.C:
     8     - changed output range for ZofR
     9
     10   * phys.C:
     11     - changed energy randomizer
     12     - added root file output
     13
     14
     15
    216 2002/06/12: Thomas Bretz
    317
  • trunk/WuerzburgSoft/Thomas/mphys/MParticle.h

    r1357 r1360  
    1616public:
    1717    typedef enum { kEGamma, kEElectron, kEPositron } ParticleType_t;
     18    enum { kEIsPrimary = BIT(14) };
    1819
    1920private:
    20     const ParticleType_t fPType;
     21    const ParticleType_t fPType; //! Particle type
    2122
    2223protected:
     
    4546    }
    4647
     48    void SetIsPrimary(Bool_t is=kTRUE) { is ? SetBit(kEIsPrimary) : ResetBit(kEIsPrimary); }
     49    Bool_t IsPrimary() const { return TestBit(kEIsPrimary); }
     50
     51    // ----------------------------------------------------------------
     52
    4753    virtual Double_t GetInteractionLength() const = 0;
    4854
  • trunk/WuerzburgSoft/Thomas/mphys/MPhoton.h

    r1356 r1360  
    99{
    1010public:
    11     MPhoton(Double_t e=0, Double_t z=0) : MParticle(MParticle::kEGamma)
     11
     12    MPhoton(Double_t e=0, Double_t z=0)
     13        : MParticle(MParticle::kEGamma)
    1214    {
    1315        fEnergy = e;
  • trunk/WuerzburgSoft/Thomas/mphys/energyloss.C

    r1356 r1360  
    449449    new TCanvas("RZ", "r and z");
    450450
    451     TF1 f1("ZofR", MParticle::ZofR, 0, 4.5e5, 0);
     451    TF1 f1("ZofR", MParticle::ZofR, 0, 7.1e6, 0);
    452452    TF1 f2("RofZ", MParticle::RofZ, 0, 5,     0);
    453453
     
    479479void energyloss()
    480480{
    481     EnergyLossRate();
    482 
    483     MH::MakeDefCanvas();
     481//    EnergyLossRate();
    484482
    485483    DrawRZ();
  • trunk/WuerzburgSoft/Thomas/mphys/phys.C

    r1358 r1360  
    88#include <TH2.h>
    99#include <TList.h>
     10#include <TFile.h>
     11#include <TTree.h>
     12#include <TBranch.h>
    1013#include <TStyle.h>
    1114#include <TRandom.h>
     
    6467}
    6568
     69Double_t GetEnergy(Int_t n, Double_t lo, Double_t hi)
     70{
     71    static int bin=0;
     72    static TRandom rnd(0);
     73
     74    Double_t w = log10(hi/lo)/n;
     75
     76    Double_t E = lo*pow(10, rnd.Uniform(w) + w*bin);
     77
     78    //cout << endl << w << " " << n << " " << w*bin << " " << E << endl;
     79
     80    if (++bin==n)
     81        bin=0;
     82
     83    return E;
     84
     85    /*
     86    // TF1 src ("PrimarySpectrum", PrimSpect, log10(lo), log10(hi), 1); // 10GeV-1000PeV
     87    // src.SetParameter(0, 0);
     88    // Double_t E = pow(10, src.GetRandom());
     89
     90    //
     91    // 0: 11111111111111|22222222222222   2   2^0 + 1    1
     92    // 1: 11111111|22222222222|33333333   3   2^1 + 1    2
     93    // 2: 11111|22222|33333|44444|55555   5   2^2 + 1    7
     94    // 3:  |     | |   | |  |  |   |                    15
     95    //
     96
     97    static int run=0;
     98    static int num=1;
     99
     100    Double_t w = log10(hi/lo)/((1<<run) + 1);
     101
     102    Double_t E = lo*pow(10, num*w);
     103
     104    if (num == (1<<run))
     105    {
     106        run++;
     107        num=1;
     108    }
     109    else
     110        num++;
     111
     112        return E;
     113        */
     114}
     115
    66116void DoIt()
    67117{
     
    75125    MPairProduction pair;
    76126
    77     Double_t runtime = 30*60; // [s]
     127    Double_t runtime = 15*60; // [s]
    78128
    79129    Double_t lo = 1e4;
     
    81131    Double_t alpha = -2;
    82132
    83     Double_t nbins = 24; //4*log10(hi/lo);
    84 
    85     TF1 src ("PrimarySpectrum", PrimSpect, log10(lo), log10(hi), 1); // 10GeV-1000PeV
    86     src.SetParameter(0, 0);
     133    Int_t nbins = 18; //4*log10(hi/lo);
    87134
    88135    TH1D hist;
     
    150197    hist.Draw("Csame");
    151198
    152     ofstream fsrc("source.dat");
    153     ofstream fcas("cascade.dat");
     199    // ------------------------------
     200
     201    MPhoton *p4file  = NULL;
     202    MElectron *e4file  = NULL;
     203
     204    TFile file("cascade.root", "RECREATE", "Intergalactic cascade", 9);
     205    TTree *T  = new TTree("Photons",   "Photons from Cascade");
     206    TTree *T2 = new TTree("Electrons", "Electrons in the Cascade");
     207    TBranch *B =T ->Branch("MPhoton.",   "MPhoton",   &p4file, 32000);
     208    TBranch *B2=T2->Branch("MElectron.", "MElectron", &e4file, 32000);
    154209
    155210    // ------------------------------
     
    163218    Double_t starttime = TStopwatch::GetRealTime(); // s
    164219    while (TStopwatch::GetRealTime()<starttime+runtime)
     220        for (int i=0; i<nbins; i++)
    165221    {
    166222        n++;
    167223
    168         Double_t E = pow(10, src.GetRandom());
     224        Double_t E = GetEnergy(nbins, lo, hi);
    169225        Double_t weight = pow(E, alpha);
    170 
    171226        histsrc.Fill(E, E*E * weight);
    172227
    173         fsrc << E << endl;
     228        MPhoton *gamma=new MPhoton(E, startz);
     229        gamma->SetIsPrimary();
     230        listg.Add(gamma);
     231
     232        B->SetAddress(&gamma);
     233        T->Fill();
    174234
    175235        cout << "--> " << n << ". " << Form("%d: %3.1e", (int)(starttime+runtime-TStopwatch::GetRealTime()), E) << flush;
    176 
    177         MPhoton *gamma=new MPhoton(E, startz);
    178         listg.Add(gamma);
    179236
    180237        while (1)
     
    185242            TIter NextP(&listg);
    186243            MPhoton *p = NULL;
     244            B->SetAddress(&p);
    187245            while ((p=(MPhoton*)NextP()))
    188246            {
     
    199257                    hista.Fill(p->GetTheta()*kRad2Deg, weight);
    200258
    201                     fcas << Eg << endl;
     259                    T->Fill();
     260
    202261                    delete listg.Remove(p);
    203262                    continue;
     
    242301            TIter Next(&liste);
    243302            MElectron *e = NULL;
     303            B2->SetAddress(&e);
    244304            while ((e=(MElectron*)Next()))
    245305            {
     306                e->SetIsPrimary();
     307                T2->Fill();
     308                e->SetIsPrimary(kFALSE);
     309
    246310                if (e->GetEnergy()<lo)
    247311                    continue;
     
    259323                    Double_t theta = rand.Uniform(TMath::Pi()*2);
    260324                    MPhoton *p = e->DoInvCompton(theta);
     325
     326                    T2->Fill();
    261327
    262328                    if (fabs(p->GetTheta()*3437)<1 &&  // < 1min
     
    300366    clock.Print();
    301367
     368    file.Write();
     369
    302370    cout << "Created " << n << " gammas from source with E^" << alpha << endl;
    303371    cout << "Processed " << Form("%.1f", n/(TStopwatch::GetRealTime()-starttime)) << " gammas/sec." << endl;
Note: See TracChangeset for help on using the changeset viewer.