Ignore:
Timestamp:
04/16/09 12:04:29 (15 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/msimcamera/MSimRandomPhotons.cc

    r9375 r9425  
    4343//  Output Containers:
    4444//   MPhotonEvent
     45//   AccidentalPhotonRate [MPedestalCam]
    4546//
    4647//////////////////////////////////////////////////////////////////////////////
     
    6263#include "MPhotonData.h"
    6364
     65#include "MPedestalCam.h"
     66#include "MPedestalPix.h"
     67
    6468#include "MCorsikaRunHeader.h"
     69
     70#include "MSpline3.h"
     71#include "MParSpline.h"
     72#include "MReflector.h"
    6573
    6674ClassImp(MSimRandomPhotons);
     
    7482MSimRandomPhotons::MSimRandomPhotons(const char* name, const char *title)
    7583    : fGeom(0), fEvt(0), fStat(0), /*fEvtHeader(0),*/ fRunHeader(0),
    76     fSimulateWavelength(kFALSE),  fNameGeomCam("MGeomCam")
     84    fRates(0), fSimulateWavelength(kFALSE),  fNameGeomCam("MGeomCam")
    7785{
    7886    fName  = name  ? name  : "MSimRandomPhotons";
     
    113121    }
    114122
     123    fRates = (MPedestalCam*)pList->FindCreateObj("MPedestalCam", "AccidentalPhotonRates");
     124    if (!fRates)
     125        return kFALSE;
     126
    115127    /*
    116128    fEvtHeader = (MCorsikaEvtHeader*)pList->FindObject("MCorsikaEvtHeader");
     
    132144    }
    133145
     146    MReflector *r = (MReflector*)pList->FindObject("Reflector", "MReflector");
     147    if (!r)
     148    {
     149        *fLog << err << "Reflector [MReflector] not found... aborting." << endl;
     150        return kFALSE;
     151    }
     152
     153    const MParSpline *s1 = (MParSpline*)pList->FindObject("PhotonDetectionEfficiency", "MParSpline");
     154    const MParSpline *s2 = (MParSpline*)pList->FindObject("ConesAngularAcceptance",    "MParSpline");
     155    const MParSpline *s3 = (MParSpline*)pList->FindObject("MirrorReflectivity",        "MParSpline");
     156
     157    const Double_t d2  = fGeom->GetCameraDist()*fGeom->GetCameraDist();
     158    const Double_t pde = s1 && s1->GetSpline() ? s1->GetSpline()->Integral() : 1;
     159    const Double_t sr  = s2 && s2->GetSpline() ? s2->GetSpline()->IntegralSolidAngle() : 1;
     160    const Double_t mir = s3 && s3->GetSpline() ? s3->GetSpline()->Integral() : 1;
     161    const Double_t Ar  = r->GetA()/1e4;
     162
     163    // Conversion factor to convert pixel area to steradians (because it
     164    // is a rather small area we can assume it is flat)
     165    const Double_t conv = fGeom->GetConvMm2Deg()*TMath::DegToRad();
     166
     167    // Multiply all relevant efficiencies
     168    MParSpline *s4 = (MParSpline*)s1->Clone();
     169    s4->Multiply(*s3->GetSpline());
     170
     171    const Double_t nm = s4 && s4->GetSpline() ? s4->GetSpline()->Integral() : 1;
     172
     173    delete s4;
     174
     175    // /100 to convert the pixel area from mm^2 to cm^2
     176    fScale =  nm * TMath::Min(Ar, sr*d2) * conv*conv;
     177
     178    *fLog << inf;
     179    *fLog << "Effective cone acceptance:      " << Form("%.2f", sr*d2) << "m^2" << endl;
     180    *fLog << "Reflector area:                 " << Form("%.2f", Ar) << "m^2" << endl;
     181    *fLog << "Resulting eff. collection area: " << Form("%.1f", TMath::Min(Ar, sr*d2)) << "m^2" << endl;
     182    *fLog << "Eff. wavelength band (PDE):     " << Form("%.1f", pde) << "nm" << endl;
     183    *fLog << "Eff. wavelength band (Mirror):  " << Form("%.1f", mir) << "nm" << endl;
     184    *fLog << "Eff. wavelength band (PDE+MIR): " << Form("%.1f", nm) << "nm" << endl;
     185    *fLog << "Pixel area of " << fNameGeomCam << "[0]: " << Form("%.2e", (*fGeom)[0].GetA()*conv*conv) << "sr" << endl;
     186    //*fLog << "Effective angular acceptance:     " << sr << "sr" << endl;
     187    //*fLog << "Resulting NSB frequency:           " << fFreqNSB*nm*Ar*1000 << "MHz/sr" << endl;
     188    *fLog << "Resulting Freq. in " << fNameGeomCam << "[0]: " << Form("%.2f", fFreqNSB*(*fGeom)[0].GetA()*fScale*1000) << "MHz" << endl;
     189
     190    // const MMcRunHeader *mcrunheader = (MMcRunHeader*)pList->FindObject("MMcRunHeader");
     191    // Set NumPheFromDNSB
     192
     193    // # Number of photons from the diffuse NSB (nphe / ns 0.1*0.1 deg^2 239 m^2) and
     194    // nsb_mean 0.20
     195    // Magic pixel: 0.00885361 deg
     196    // dnsbpix = 0.2*50/15
     197    // ampl = MMcFadcHeader->GetAmplitud()
     198    // sqrt(pedrms*pedrms + dnsbpix*ampl*ampl/ratio)
     199
     200    return kTRUE;
     201}
     202
     203Bool_t MSimRandomPhotons::ReInit(MParList *pList)
     204{
     205    // Overwrite the default set by MGeomApply
     206    fRates->Init(*fGeom);
    134207    return kTRUE;
    135208}
     
    160233    for (UInt_t idx=0; idx<npix; idx++)
    161234    {
    162         // Scale the rate with the pixel size. The rate must
    163         // always be given for the pixel with index 0.
    164         const Double_t avglen = 1./(fFreqFixed+fFreqNSB*(*fGeom)[idx].GetA()/100.);
     235        // Scale the rate with the pixel size.
     236        const Double_t rate = fFreqFixed+fFreqNSB*(*fGeom)[idx].GetA()*fScale;
     237
     238        (*fRates)[idx].SetPedestal(rate);
     239
     240        // Calculate the average distance between two consequtive photons
     241        const Double_t avglen = 1./rate;
    165242
    166243        // Start producing photons at time "start"
     
    215292//    FrequencyNSB:   0.040
    216293//
    217 // The frequency is given in units fitting the units of the time.
    218 // Usually the time is given in nanoseconds thus, e.g., 40 means 40MHz
     294// The fixed frequency is given in units fitting the units of the time.
     295// Usually the time is given in nanoseconds thus, e.g., 0.040 means 40MHz.
     296//
     297// The FrequencyNSB is scaled by the area of the pixel in cm^2. Therefore
     298// 0.040 would mean 40MHz/cm^2
    219299//
    220300Int_t MSimRandomPhotons::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
Note: See TracChangeset for help on using the changeset viewer.