Changeset 9425 for trunk/MagicSoft/Mars/msimcamera/MSimRandomPhotons.cc
- Timestamp:
- 04/16/09 12:04:29 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/msimcamera/MSimRandomPhotons.cc
r9375 r9425 43 43 // Output Containers: 44 44 // MPhotonEvent 45 // AccidentalPhotonRate [MPedestalCam] 45 46 // 46 47 ////////////////////////////////////////////////////////////////////////////// … … 62 63 #include "MPhotonData.h" 63 64 65 #include "MPedestalCam.h" 66 #include "MPedestalPix.h" 67 64 68 #include "MCorsikaRunHeader.h" 69 70 #include "MSpline3.h" 71 #include "MParSpline.h" 72 #include "MReflector.h" 65 73 66 74 ClassImp(MSimRandomPhotons); … … 74 82 MSimRandomPhotons::MSimRandomPhotons(const char* name, const char *title) 75 83 : fGeom(0), fEvt(0), fStat(0), /*fEvtHeader(0),*/ fRunHeader(0), 76 f SimulateWavelength(kFALSE), fNameGeomCam("MGeomCam")84 fRates(0), fSimulateWavelength(kFALSE), fNameGeomCam("MGeomCam") 77 85 { 78 86 fName = name ? name : "MSimRandomPhotons"; … … 113 121 } 114 122 123 fRates = (MPedestalCam*)pList->FindCreateObj("MPedestalCam", "AccidentalPhotonRates"); 124 if (!fRates) 125 return kFALSE; 126 115 127 /* 116 128 fEvtHeader = (MCorsikaEvtHeader*)pList->FindObject("MCorsikaEvtHeader"); … … 132 144 } 133 145 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 203 Bool_t MSimRandomPhotons::ReInit(MParList *pList) 204 { 205 // Overwrite the default set by MGeomApply 206 fRates->Init(*fGeom); 134 207 return kTRUE; 135 208 } … … 160 233 for (UInt_t idx=0; idx<npix; idx++) 161 234 { 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; 165 242 166 243 // Start producing photons at time "start" … … 215 292 // FrequencyNSB: 0.040 216 293 // 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 219 299 // 220 300 Int_t MSimRandomPhotons::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
Note:
See TracChangeset
for help on using the changeset viewer.