- Timestamp:
- 04/16/09 12:04:29 (16 years ago)
- Location:
- trunk/MagicSoft/Mars
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/mjobs/MJSimulation.cc
r9420 r9425 108 108 #include "MReflector.h" 109 109 #include "MParEnv.h" 110 #include "MPulseShape.h" 110 #include "MSpline3.h" 111 #include "MParSpline.h" 111 112 #include "MGeomCam.h" 112 113 … … 152 153 //cont.Add(const_cast<MSequence*>(&fSequence)); 153 154 154 cont.Add(plist.FindObject(" MPulseShape"));155 cont.Add(plist.FindObject("PulseShape")); 155 156 cont.Add(plist.FindObject("Reflector")); 156 157 cont.Add(plist.FindObject("MGeomCam")); … … 185 186 hist.SetLog(kTRUE, kTRUE, kFALSE); 186 187 187 hist.AddHist("-MCorsikaEvtHeader.fX/100","-MCorsikaEvtHeader.fY/100"); 188 hist.SetDrawOption("colz"); 189 hist.InitName("Impact;Impact;Impact"); 190 hist.InitTitle("Impact;West <--> East [m];South <--> North [m]"); 188 /* 189 hist.AddHist("-MCorsikaEvtHeader.fX/100","-MCorsikaEvtHeader.fY/100"); 190 hist.SetDrawOption("colz"); 191 hist.InitName("Impact;Impact;Impact"); 192 hist.InitTitle("Impact;West <--> East [m];South <--> North [m]"); 193 hist.SetAutoRange(); 194 */ 195 196 hist.AddHist("MCorsikaEvtHeader.GetImpact/100"); 197 hist.InitName("Impact"); 198 hist.InitTitle("Impact;Impact [m]"); 191 199 hist.SetAutoRange(); 192 200 … … 197 205 hist.AddHist("(MCorsikaEvtHeader.fAz+MCorsikaRunHeader.fMagneticFieldAz)*TMath::RadToDeg()", "MCorsikaEvtHeader.fZd*TMath::RadToDeg()"); 198 206 hist.InitName("SkyOrigin;Az;Zd"); 199 hist.InitTitle("Sky Origin;Az [ deg];Zd [deg]");207 hist.InitTitle("Sky Origin;Az [\\deg];Zd [\\deg]"); 200 208 hist.SetDrawOption("colz"); 201 209 hist.SetAutoRange(); … … 279 287 plist.FindCreateObj("MPedPhotCam", "MPedPhotFromExtractorRndm"); 280 288 281 MP ulseShape shape;289 MParSpline shape("PulseShape"); 282 290 plist.AddToList(&shape); 283 291 … … 325 333 read.SetForceMode(fForceMode); 326 334 327 for (int i=0; i<args.GetNumArguments(); i++)335 for (int i=0; i<args.GetNumArguments(); i++) 328 336 read.AddFile(args.GetArgumentStr(i)); 329 337 330 338 MSimMMCS simmmcs; 331 339 340 MParSpline splinepde("PhotonDetectionEfficiency"); 341 MParSpline splinemirror("MirrorReflectivity"); 342 MParSpline splinecones("ConesAngularAcceptance"); 343 plist.AddToList(&splinepde); 344 plist.AddToList(&splinemirror); 345 plist.AddToList(&splinecones); 346 332 347 MSimAtmosphere simatm; 333 MSimAbsorption absapd("PhotonDetectionEfficiency"); 334 MSimAbsorption absmir("MirrorReflectivity"); 335 MSimAbsorption cones("ConesAngularAcceptance"); 348 MSimAbsorption absapd("SimPhotonDetectionEfficiency"); 349 MSimAbsorption absmir("SimMirrorReflectivity"); 350 MSimAbsorption cones("SimConesAngularAcceptance"); 351 absapd.SetParName("PhotonDetectionEfficiency"); 352 absmir.SetParName("MirrorReflectivity"); 353 cones.SetParName("ConesAngularAcceptance"); 336 354 cones.SetUseTheta(); 337 355 … … 344 362 MContinue cont1("MPhotonEvent.GetNumPhotons<1", "ContEmpty1"); 345 363 MContinue cont2("MPhotonEvent.GetNumPhotons<1", "ContEmpty2"); 364 MContinue cont3("MPhotonEvent.GetNumPhotons<2", "ContEmpty3"); 346 365 347 366 // ------------------------------------------------------------------- 348 367 349 368 MBinning binse( 100, 1, 100000, "BinningEnergy", "log"); 350 MBinning binsth( 35, 0.9, 900000, "BinningThreshold", "log");369 MBinning binsth( 70, 0.9, 900000, "BinningThreshold", "log"); 351 370 MBinning binsee( 35, 0.9, 900000, "BinningEnergyEst", "log"); 352 371 MBinning binss( 100, 1, 10000000, "BinningSize", "log"); 353 MBinning binsi( 100, -500, 500, "BinningImpact"); 372 // MBinning binsi( 100, -500, 500, "BinningImpact"); 373 MBinning binsi( 55, 0, 1100, "BinningImpact"); 354 374 MBinning binsh( 150, 0, 50, "BinningHeight"); 355 375 MBinning binsaz(720, -360, 360, "BinningAz"); … … 377 397 plist.AddToList(&binsd0); 378 398 379 MHn mhn1, mhn2, mhn3 ;399 MHn mhn1, mhn2, mhn3, mhn4; 380 400 SetupHist(mhn1); 381 401 SetupHist(mhn2); 382 402 SetupHist(mhn3); 383 384 MH3 mhtp("TriggerPos.fVal-IntendedPulsePos.fVal-MPulseShape.GetPulseWidth"); 403 SetupHist(mhn4); 404 405 MH3 mhtp("TriggerPos.fVal-IntendedPulsePos.fVal-PulseShape.GetWidth"); 385 406 mhtp.SetName("TrigPos"); 386 407 mhtp.SetTitle("Trigger position w.r.t. the first photon hitting a detector"); … … 397 418 MFillH fillh2(&mhn2, "", "FillH2"); 398 419 MFillH fillh3(&mhn3, "", "FillH3"); 420 MFillH fillh4(&mhn4, "", "FillH4"); 399 421 MFillH filltp(&mhtp, "", "FillTriggerPos"); 400 422 MFillH fillew(&mhew, "", "FillEvtWidth"); … … 403 425 fillh2.SetNameTab("Detectable", "Distribution of events hit the detector"); 404 426 fillh3.SetNameTab("Triggered", "Distribution of triggered events"); 427 fillh4.SetNameTab("Cleaned", "Distribution after cleaning and cuts"); 405 428 filltp.SetNameTab("TrigPos", "TriggerPosition w.r.t the first photon"); 406 429 fillew.SetNameTab("EvtWidth", "Time between first and last photon hitting a detector"); … … 491 514 simcal.SetNameGeomCam("GeomCones"); 492 515 493 // Dark Current: 4MHz = 0.004 GHz494 // Light of night sky at La Palma: ~ 0.2 ph / cm^2 / sr / ns495 // 5deg camera: 6e-3 sr496 // NSB = 0.2*6e-3497 498 // MAGIC: 84MHz / Pixel499 // DWARF: 14MHz-25Mhz / APD500 501 516 // FIXME: Simulate photons before cones and QE! 502 517 503 518 MSimRandomPhotons simnsb; 504 simnsb.SetFreq( 0.0015, 0.04); // 1.5MHz dark count rate, 40MHZ/cm^2 NSB519 simnsb.SetFreq(5.8, 0.004); // ph/m^2/nm/sr/ns NSB, 4MHz dark count rate 505 520 simnsb.SetNameGeomCam("GeomCones"); 506 521 … … 509 524 510 525 MSimAPD simapd; 511 //simapd.SetFreq(0.04); // Must be identical to MSimRandomPhotons!!512 526 simapd.SetNameGeomCam("GeomCones"); 513 527 … … 555 569 MFillH fillx0d(&evt0d, "MSignalCam", "FillArrTm"); 556 570 MFillH fillx1("MHHillas", "MHillas", "FillHillas"); 557 //MFillH fillx2("MHHillasExt", "", "FillHillasExt");558 571 MFillH fillx3("MHHillasSrc", "MHillasSrc", "FillHillasSrc"); 572 MFillH fillx4("MHNewImagePar", "MNewImagePar", "FillNewImagePar"); 559 573 MFillH fillth("MHThreshold", "", "FillThreshold"); 560 574 MFillH fillca("MHCollectionArea", "", "FillTrigArea"); 561 //MFillH fillx4("MHImagePar", "MImagePar", "FillImagePar");562 //MFillH fillx5("MHNewImagePar", "MNewImagePar", "FillNewImagePar");563 575 564 576 fillth.SetNameTab("Threshold"); … … 603 615 } 604 616 tasks.AddToList(&cones); 605 tasks.AddToList(&fillF2);606 617 //if (header.IsPointRun()) 607 618 // tasks.AddToList(&fillP); 608 619 tasks.AddToList(&cont1); 609 if (!header.IsPointRun())610 tasks.AddToList(&fillh2);611 620 } 612 621 // ------------------------------- … … 617 626 tasks.AddToList(&simgeom); 618 627 tasks.AddToList(&cont2); 628 if (!header.IsPointRun()) 629 { 630 tasks.AddToList(&fillF2); 631 tasks.AddToList(&fillh2); 632 } 633 tasks.AddToList(&cont3); 619 634 } 620 635 if (fCamera) … … 669 684 //tasks.AddToList(&fillx2); 670 685 tasks.AddToList(&fillx3); 671 //tasks.AddToList(&fillx4);686 tasks.AddToList(&fillx4); 672 687 //tasks.AddToList(&fillx5); 673 688 } 674 689 if (header.IsDataRun()) 675 690 { 691 tasks.AddToList(&fillh4); 676 692 tasks.AddToList(&fillth); 677 693 tasks.AddToList(&fillca); … … 695 711 696 712 if (binstr.IsDefault()) 697 binstr.SetEdgesLin(150, -shape.Get PulseWidth(),698 header.GetFreqSampling()/1000.*header.GetNumSamples()+shape.Get PulseWidth());713 binstr.SetEdgesLin(150, -shape.GetWidth(), 714 header.GetFreqSampling()/1000.*header.GetNumSamples()+shape.GetWidth()); 699 715 700 716 if (binsd.IsDefault() && cam) … … 731 747 gROOT->SetSelectedPad(0); 732 748 static_cast<MReflector*>(env0.GetCont())->DrawClone("line")->SetBit(kCanDelete); 733 734 749 } 735 750 … … 749 764 c->SetBit(kCanDelete); 750 765 c->Draw(); 751 752 766 } 753 767 … … 767 781 } 768 782 } 783 784 TCanvas &d = fDisplay->AddTab("Info2"); 785 d.Divide(2,2); 786 787 d.cd(1); 788 gPad->SetBorderMode(0); 789 gPad->SetFrameBorderMode(0); 790 gPad->SetGridx(); 791 gPad->SetGridy(); 792 gROOT->SetSelectedPad(0); 793 splinepde.DrawClone()->SetBit(kCanDelete); 794 795 d.cd(2); 796 gPad->SetBorderMode(0); 797 gPad->SetFrameBorderMode(0); 798 gPad->SetGridx(); 799 gPad->SetGridy(); 800 gROOT->SetSelectedPad(0); 801 splinemirror.DrawClone()->SetBit(kCanDelete); 802 803 d.cd(3); 804 gPad->SetBorderMode(0); 805 gPad->SetFrameBorderMode(0); 806 gPad->SetGridx(); 807 gPad->SetGridy(); 808 gROOT->SetSelectedPad(0); 809 splinecones.DrawClone()->SetBit(kCanDelete); 810 811 d.cd(4); 812 gPad->SetBorderMode(0); 813 gPad->SetFrameBorderMode(0); 814 gPad->SetGridx(); 815 gPad->SetGridy(); 816 gROOT->SetSelectedPad(0); 817 MParSpline *all = (MParSpline*)splinepde.DrawClone(); 818 //all->SetTitle("Combined acceptance"); 819 all->SetBit(kCanDelete); 820 all->Multiply(*splinemirror.GetSpline()); 769 821 } 770 822 -
trunk/MagicSoft/Mars/msim/MSimAbsorption.cc
r9348 r9425 30 30 // 31 31 // Input Containers: 32 // fParName [MParSpline] 32 33 // MPhotonEvent 33 34 // MCorsikaEvtHeader … … 43 44 44 45 #include <TRandom.h> 45 #include <TSpline.h>46 46 47 47 #include "MLog.h" … … 50 50 #include "MParList.h" 51 51 52 #include "MBinning.h" 53 #include "MArrayD.h" 54 55 #include "MSpline3.h" 52 #include "MParSpline.h" 56 53 57 54 #include "MCorsikaEvtHeader.h" … … 69 66 // 70 67 MSimAbsorption::MSimAbsorption(const char* name, const char *title) 71 : fEvt(0), fHeader(0), fSpline(0), f UseTheta(kFALSE)68 : fEvt(0), fHeader(0), fSpline(0), fParName("MParSpline"), fUseTheta(kFALSE) 72 69 { 73 70 fName = name ? name : "MSimAbsorption"; 74 71 fTitle = title ? title : "Task to calculate wavelength dependent absorption"; 75 }76 77 // --------------------------------------------------------------------------78 //79 // Calls Clear()80 //81 MSimAbsorption::~MSimAbsorption()82 {83 Clear();84 }85 86 // --------------------------------------------------------------------------87 //88 // Delete fSpline and set to 0.89 //90 void MSimAbsorption::Clear(Option_t *)91 {92 if (fSpline)93 delete fSpline;94 fSpline=0;95 }96 97 // --------------------------------------------------------------------------98 //99 // Read a TGraph from a file and return a newly allocated MSpline3.100 //101 MSpline3 *MSimAbsorption::ReadSpline(const char *fname)102 {103 *fLog << inf << "Reading spline from " << fname << endl;104 105 TGraph g(fname);106 if (g.GetN()==0)107 {108 *fLog << err << "ERROR - No data points from " << fname << "." << endl;109 return 0;110 }111 112 // option: b1/e1 b2/e2 (first second derivative?)113 // option: valbeg/valend (first second derivative?)114 115 return new MSpline3(g);116 }117 118 // --------------------------------------------------------------------------119 //120 // Initializes a spline from min to max with n points with 1.121 //122 void MSimAbsorption::InitUnity(UInt_t n, Float_t min, Float_t max)123 {124 // Delete the existing spline125 Clear();126 127 // We need at least two points (the edges)128 if (n<2)129 return;130 131 // Initialize an array with the x-values132 const MBinning bins(n-1, min, max);133 134 // Initialize an array with all one135 MArrayD y(n);136 y.Reset(1);137 138 // Set the spline139 fSpline = new MSpline3(bins.GetEdges(), y.GetArray(), n);140 }141 142 // --------------------------------------------------------------------------143 //144 // Takes the existing fSpline and multiplies it with the given spline.145 // As x-points the values from fSpline are used.146 //147 void MSimAbsorption::Multiply(const TSpline3 &spline)148 {149 if (!fSpline)150 {151 Clear();152 // WARNING WARNING WARNING: This is a very dangerous cast!153 fSpline = (MSpline3*)spline.Clone();154 return;155 }156 157 // Initialize a TGraph with the number of knots from a TSpline158 TGraph g(fSpline->GetNp());159 160 // Loop over all knots161 for (int i=0; i<fSpline->GetNp(); i++)162 {163 // Get th i-th knot164 Double_t x, y;165 fSpline->GetKnot(i, x, y);166 167 // Multiply y by the value from the given spline168 y *= spline.Eval(x);169 170 // push the point "back"171 g.SetPoint(i, x, y);172 }173 174 // Clear the spline and initialize a new one from the updated TGraph175 Clear();176 fSpline = new MSpline3(g);177 }178 179 // --------------------------------------------------------------------------180 //181 // Initializes a TSpline3 with n knots x and y. Call Multiply for it.182 //183 void MSimAbsorption::Multiply(UInt_t n, const Double_t *x, const Double_t *y)184 {185 const TSpline3 spline("Spline", const_cast<Double_t*>(x), const_cast<Double_t*>(y), n);186 Multiply(spline);187 }188 189 // --------------------------------------------------------------------------190 //191 // Read a Spline from a file using ReadSpline.192 // Call Multiply for it.193 //194 void MSimAbsorption::Multiply(const char *fname)195 {196 const MSpline3 *spline = ReadSpline(fname);197 if (!spline)198 return;199 200 fFileName = "";201 202 Multiply(*spline);203 204 delete spline;205 }206 207 // --------------------------------------------------------------------------208 //209 // Read a spline from a file and set fSpline accfordingly.210 //211 Bool_t MSimAbsorption::ReadFile(const char *fname)212 {213 if (fname)214 fFileName = fname;215 216 MSpline3 *spline = ReadSpline(fFileName);217 if (!spline)218 return kFALSE;219 220 221 // option: b1/e1 b2/e2 (first second derivative?)222 // option: valbeg/valend (first second derivative?)223 224 Clear();225 fSpline = spline;226 227 return kTRUE;228 72 } 229 73 … … 235 79 Int_t MSimAbsorption::PreProcess(MParList *pList) 236 80 { 237 if (fFileName.IsNull())238 {239 *fLog << inf << "No file given... skipping." << endl;240 return kSKIP;241 }242 243 81 fEvt = (MPhotonEvent*)pList->FindObject("MPhotonEvent"); 244 82 if (!fEvt) 245 83 { 246 84 *fLog << err << "MPhotonEvent not found... aborting." << endl; 85 return kFALSE; 86 } 87 88 fSpline = (MParSpline*)pList->FindObject(fParName, "MParSpline"); 89 if (!fSpline) 90 { 91 *fLog << err << fParName << " [MParSpline] not found... aborting." << endl; 92 return kFALSE; 93 } 94 95 if (!fSpline->IsValid()) 96 { 97 *fLog << err << "Spline in " << fParName << " is inavlid... aborting." << endl; 247 98 return kFALSE; 248 99 } … … 257 108 *fLog << inf << "Using " << (fUseTheta?"Theta":"Wavelength") << " for absorption." << endl; 258 109 259 return ReadFile();110 return kTRUE; 260 111 } 261 112 … … 331 182 { 332 183 Bool_t rc = kFALSE; 333 if (IsEnvDefined(env, prefix, " FileName", print))184 if (IsEnvDefined(env, prefix, "ParName", print)) 334 185 { 335 186 rc = kTRUE; 336 Set FileName(GetEnvValue(env, prefix, "FileName", fFileName));187 SetParName(GetEnvValue(env, prefix, "ParName", fParName)); 337 188 } 338 189 -
trunk/MagicSoft/Mars/msim/MSimAbsorption.h
r9232 r9425 6 6 #endif 7 7 8 class TSpline3;9 10 8 class MParList; 11 class M Spline3;9 class MParSpline; 12 10 class MPhotonEvent; 13 11 class MCorsikaEvtHeader; … … 19 17 MCorsikaEvtHeader *fHeader; //! Header storing event information 20 18 21 M Spline3*fSpline; //! Spline to interpolate wavelength or incident angle19 MParSpline *fSpline; //! Spline to interpolate wavelength or incident angle 22 20 23 TString f FileName; // FileName of the file containing the curve21 TString fParName; // Container name of the spline containing the curve 24 22 Bool_t fUseTheta; // Switches between using wavelength or incident angle 25 23 … … 32 30 Int_t Process(); 33 31 34 // MSimAbsorption35 MSpline3 *ReadSpline(const char *fname);36 37 32 public: 38 33 MSimAbsorption(const char *name=NULL, const char *title=NULL); 39 ~MSimAbsorption();40 34 41 35 // MSimAbsorption 42 Bool_t ReadFile(const char *fname=0); 43 void SetFileName(const char *fname) { fFileName=fname; } 36 void SetParName(const char *name) { fParName=name; } 44 37 45 38 void SetUseTheta(Bool_t b=kTRUE) { fUseTheta = b; } 46 47 void InitUnity(UInt_t n, Float_t min, Float_t max);48 49 void Multiply(const char *fname);50 void Multiply(const TSpline3 &spline);51 void Multiply(UInt_t n, const Double_t *x, const Double_t *y);52 53 // TObject54 void Clear(Option_t *o="");55 39 56 40 ClassDef(MSimAbsorption, 0) // Task to calculate wavelength or incident angle dependent absorption -
trunk/MagicSoft/Mars/msimcamera/MSimCalibrationSignal.cc
r9378 r9425 61 61 62 62 #include "MGeomCam.h" 63 #include "MP ulseShape.h"63 #include "MParSpline.h" 64 64 #include "MTriggerPattern.h" 65 65 … … 136 136 } 137 137 138 fPulse = (MP ulseShape*)pList->FindObject("MPulseShape");138 fPulse = (MParSpline*)pList->FindObject("PulseShape", "MParSpline"); 139 139 if (!fPulse) 140 140 { 141 *fLog << err << " MPulsShapenot found... aborting." << endl;141 *fLog << err << "PulsShape [MParSpline] not found... aborting." << endl; 142 142 return kFALSE; 143 143 } … … 173 173 } 174 174 175 // FIXME: Is there a way to write them as LAST entry in the file? 175 176 fRunHeader->SetReadyToSave(); 176 177 … … 195 196 for (UInt_t idx=0; idx<fGeom->GetNumPixels(); idx++) 196 197 { 198 // FIXME: Scale number of photons with the pixel size! 197 199 const Int_t num = TMath::Nint(gRandom->Gaus(fNumPhotons, fNumPhotons/10)); 198 200 … … 229 231 // Length (ns), Pulse position (Units ns) 230 232 const Float_t pp = fPulsePos->GetVal(); 231 const Float_t pw = fPulse->Get PulseWidth();233 const Float_t pw = fPulse->GetWidth(); 232 234 233 235 const Float_t first = cnt>0 ? fEvt->GetFirst()->GetTime() : 0; -
trunk/MagicSoft/Mars/msimcamera/MSimCalibrationSignal.h
r9306 r9425 8 8 class MGeomCam; 9 9 class MParList; 10 class MP ulseShape;10 class MParSpline; 11 11 class MPhotonEvent; 12 12 class MPhotonStatistics; … … 20 20 MParList *fParList; //! Store pointer to MParList for initializing ReInit 21 21 MGeomCam *fGeom; //! Camera geometry to know the number of expected pixels 22 MP ulseShape*fPulse; //! Pulse Shape to get pulse width from22 MParSpline *fPulse; //! Pulse Shape to get pulse width from 23 23 MParameterD *fPulsePos; //! Expected position at which the pulse should be 24 24 MParameterD *fTrigger; //! Position in analog channels at which the triggersignal is raised -
trunk/MagicSoft/Mars/msimcamera/MSimCamera.cc
r9413 r9425 48 48 49 49 #include "MSpline3.h" 50 #include "MP ulseShape.h"50 #include "MParSpline.h" 51 51 52 52 #include "MParList.h" 53 //#include "MParameters.h"54 53 55 54 #include "MPhotonEvent.h" … … 134 133 return kFALSE; 135 134 136 MP ulseShape *pulse = (MPulseShape*)pList->FindObject("MPulseShape");135 MParSpline *pulse = (MParSpline*)pList->FindObject("PulseShape", "MParSpline"); 137 136 if (!pulse) 138 137 { 139 *fLog << err << " MPulseShapenot found... aborting." << endl;138 *fLog << err << "PulseShape [MParSpline] not found... aborting." << endl; 140 139 return kFALSE; 141 140 } -
trunk/MagicSoft/Mars/msimcamera/MSimCamera.h
r9328 r9425 28 28 MMcEvt *fMcEvt; //! For information stored in MMcEvt 29 29 30 MSpline3 *fSpline;// Pusle Shape30 const MSpline3 *fSpline; // Pusle Shape 31 31 32 32 Bool_t fBaselineGain; // Should the gain be applied to baseline and electronic noise? -
trunk/MagicSoft/Mars/msimcamera/MSimGeomCam.cc
r9374 r9425 60 60 61 61 #include "MParameters.h" 62 #include "MParSpline.h" 62 63 #include "MRawRunHeader.h" 63 64 #include "MPulseShape.h"65 64 66 65 ClassImp(MSimGeomCam); … … 106 105 } 107 106 108 fPulse = (MP ulseShape*)pList->FindObject("MPulseShape");107 fPulse = (MParSpline*)pList->FindObject("PulseShape", "MParSpline"); 109 108 /* 110 109 if (!fPulse) … … 191 190 192 191 // Length (ns), Pulse position (Units ns) 193 const Float_t pp = fPulsePos ? fPulsePos->GetVal() 194 const Float_t pw = fPulse ? fPulse->Get PulseWidth(): 0;192 const Float_t pp = fPulsePos ? fPulsePos->GetVal() : 0; 193 const Float_t pw = fPulse ? fPulse->GetWidth() : 0; 195 194 196 195 fStat->SetTimeMedDev(fEvt->GetTimeMedianDev()); -
trunk/MagicSoft/Mars/msimcamera/MSimGeomCam.h
r9274 r9425 13 13 class MParameterD; 14 14 class MRawRunHeader; 15 class MP ulseShape;15 class MParSpline; 16 16 17 17 class MSimGeomCam : public MTask … … 23 23 MParameterD *fPulsePos; //! Intended pulse position in digitization window [ns] 24 24 MRawRunHeader *fHeader; //! Length of digitization window 25 MP ulseShape *fPulse; //!25 MParSpline *fPulse; //! 26 26 27 27 TString fNameGeomCam; -
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) -
trunk/MagicSoft/Mars/msimcamera/MSimRandomPhotons.h
r9241 r9425 12 12 //class MCorsikaEvtHeader; 13 13 class MCorsikaRunHeader; 14 class MPedestalCam; 14 15 15 16 class MSimRandomPhotons : public MTask … … 21 22 // MCorsikaEvtHeader *fEvtHeader; //! Header storing event information 22 23 MCorsikaRunHeader *fRunHeader; //! Header storing run information 23 24 MPedestalCam *fRates; // Random count rate per pixel 24 25 25 26 // FIXME: Make this a single number per Pixel/APD 26 27 Double_t fFreqFixed; // [1/ns] A fixed frequency per pixel 27 28 Double_t fFreqNSB; // [1/ns/cm^2] A frequency depending on area 29 30 Double_t fScale; 28 31 29 32 Bool_t fSimulateWavelength; … … 32 35 33 36 // MTask 34 Int_t PreProcess(MParList *pList); 35 Int_t Process(); 37 Int_t PreProcess(MParList *pList); 38 Bool_t ReInit(MParList *pList); 39 Int_t Process(); 36 40 37 41 // MParContainer
Note:
See TracChangeset
for help on using the changeset viewer.