Changeset 2250
- Timestamp:
- 06/27/03 17:29:49 (22 years ago)
- Location:
- trunk/MagicSoft/Mars
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/Changelog
r2247 r2250 1 1 -*-*- END OF LINE -*-*- 2 3 2003/06/27: Abelardo Moralejo 4 5 * mmontecarlo/MMcCollectionAreaCalc.[h,cc]: 6 * mhistmc/MHMcCollectionAreaCalc.[h,cc]: 7 8 - Adapted to allow their use with multiple files containing 9 MC data generated with diffferent energy spectra, even with 10 camera files which have only triggered events inside. Now the 11 histogram containing all showers (before trigger) is filled 12 in the ReInit function, and calculation of collection area 13 is done by CalcEfficiency2(). Some simplifications and cleaning 14 are still possible. 2 15 3 16 2003/06/27: Thomas Bretz -
trunk/MagicSoft/Mars/mhistmc/MHMcCollectionArea.cc
r2173 r2250 237 237 // flag 238 238 // 239 void MHMcCollectionArea::CalcEfficiency (UInt_t numevts, Float_t emin, Float_t emax, Float_t index)239 void MHMcCollectionArea::CalcEfficiency2() 240 240 { 241 241 // Here we estimate the total number of showers in each energy bin … … 244 244 245 245 TH1D &histsel = *fHistSel->ProjectionX(); 246 247 TH1D histall; 246 TH1D &histall = *fHistAll->ProjectionX(); 248 247 249 248 TAxis &xaxis = *histsel.GetXaxis(); 250 251 MH::SetBinning(&histall, &xaxis);252 249 MH::SetBinning(fHistCol, &xaxis); 253 254 const Float_t expo = 1+index;255 256 const Float_t k = (Float_t)numevts / (pow(emax,expo) - pow(emin,expo));257 258 250 const Int_t nbinx = xaxis.GetNbins(); 259 260 for (Int_t i=1; i<=nbinx; i++)261 {262 const Float_t e1 = histall.GetBinLowEdge(i);263 const Float_t e2 = histall.GetBinLowEdge(i+1);264 265 if (e1 < emin || e2 > emax)266 continue;267 268 const Float_t events = k * (pow(e2, expo) - pow(e1, expo));269 270 histall.SetBinContent(i, events);271 histall.SetBinError(i, sqrt(events));272 273 }274 251 275 252 // ----------------------------------------------------------- … … 282 259 283 260 *fLog << warn << endl << dbginf << "WARNING! I will assume a maximum impact parameter of 300 meters for the MC events. Check that this is the true one!" <<endl<<endl; 284 const Float_t area = TMath::Pi() * (r2*r2 - r1*r1);261 const Float_t total_area = TMath::Pi() * (r2*r2 - r1*r1); 285 262 286 263 for (Int_t ix=1; ix<=nbinx; ix++) … … 303 280 304 281 const Double_t efferr = sqrt((1.-eff)*Ns)/Na; 305 306 fHistCol->SetBinContent(ix, eff*area); 307 fHistCol->SetBinError(ix, efferr*area); 282 283 const Float_t col_area = eff * total_area; 284 const Float_t col_area_error = efferr * total_area; 285 286 fHistCol->SetBinContent(ix, col_area); 287 fHistCol->SetBinError(ix, col_area_error); 308 288 } 309 289 -
trunk/MagicSoft/Mars/mhistmc/MHMcCollectionArea.h
r2036 r2250 35 35 const TH1D *GetHist() const { return fHistCol; } 36 36 37 TH2D *GetHistAll() { return fHistAll; } 38 37 39 void Draw(Option_t *option=""); 38 40 39 41 void CalcEfficiency(); 40 void CalcEfficiency (UInt_t allevts, Float_t emin, Float_t emax, Float_t index);42 void CalcEfficiency2(); 41 43 42 44 void Calc(const MHMcEnergyImpact &mcsel, const MHMcEnergyImpact &mcall); -
trunk/MagicSoft/Mars/mmontecarlo/MMcCollectionAreaCalc.cc
r2237 r2250 63 63 AddToBranchList("MMcEvt.fEnergy"); 64 64 AddToBranchList("MMcEvt.fImpact"); 65 66 fCorsikaVersion = 0; 67 fAllEvtsTriggered = kFALSE; 68 fTotalNumSimulatedShowers = 0; 69 fTheta = -1.; 70 65 71 } 66 72 … … 76 82 } 77 83 78 fCollArea = (MHMcCollectionArea*)pList->FindCreateObj("MHMcCollectionArea");79 if (!fCollArea)80 return kFALSE;81 82 fTheta = -1;83 fEmin = -1;84 fEmax = -1;85 fSlope = 0;86 fTotalNumSimulatedShowers = 0;87 fCorsikaVersion = 0;88 fAllEvtsTriggered = kFALSE;89 90 84 return kTRUE; 91 85 } … … 108 102 109 103 fTotalNumSimulatedShowers += runheader->GetNumSimulatedShowers(); 110 111 104 *fLog << inf << "Total Number of Simulated showers: " << fTotalNumSimulatedShowers << endl; 105 112 106 113 107 if (fTheta>=0 && fTheta!=runheader->GetTelesTheta()) … … 116 110 *fLog << fTheta << ", " << runheader->GetTelesTheta() << ")..." << endl; 117 111 } 118 119 112 fTheta = runheader->GetTelesTheta(); 113 120 114 121 115 if (fCorsikaVersion!=0 && fCorsikaVersion!=runheader->GetCorsikaVersion()) 122 116 *fLog << warn << dbginf << "Warning - Read files have different Corsika versions..." << endl; 123 124 117 fCorsikaVersion = runheader->GetCorsikaVersion(); 125 118 126 if ( fEmin > 0 &&127 (fEmin != corrunheader->GetELowLim() ||128 fEmax != corrunheader->GetEUppLim() ||129 fSlope != corrunheader->GetSlopeSpec()) )130 *fLog << warn << dbginf << "Warning - Read files have different energy distribution..." << endl;131 132 fEmin = corrunheader->GetELowLim();133 fEmax = corrunheader->GetEUppLim();134 fSlope = corrunheader->GetSlopeSpec();135 119 136 120 fAllEvtsTriggered |= runheader->GetAllEvtsTriggered(); 137 138 121 *fLog << inf << "Only triggered events avail: " << (fAllEvtsTriggered?"yes":"no") << endl; 139 122 123 124 fCollArea = (MHMcCollectionArea*)plist->FindCreateObj("MHMcCollectionArea"); 125 if (!fCollArea) 126 return kFALSE; 127 140 128 if (fAllEvtsTriggered) 129 { 130 // 131 // Calculate approximately the original number of events in each 132 // energy bin: 133 // 134 135 const Float_t emin = corrunheader->GetELowLim(); 136 const Float_t emax = corrunheader->GetEUppLim(); 137 const Float_t expo = 1 + corrunheader->GetSlopeSpec(); 138 const Float_t k = runheader->GetNumSimulatedShowers() / 139 (pow(emax,expo) - pow(emin,expo)) ; 140 141 const Int_t nbinx = fCollArea->GetHistAll()->GetNbinsX(); 142 143 for (Int_t i = 1; i <= nbinx; i++) 144 { 145 const Float_t e1 = fCollArea->GetHistAll()->GetXaxis()->GetBinLowEdge(i); 146 const Float_t e2 = fCollArea->GetHistAll()->GetXaxis()->GetBinLowEdge(i+1); 147 148 if (e1 < emin || e2 > emax) 149 continue; 150 151 const Float_t events = k * (pow(e2, expo) - pow(e1, expo)); 152 // 153 // We fill the ith energy bin, with the total number of events 154 // Second argument of Fill would be impact parameter of each 155 // event, but we don't really need it for the collection area, 156 // so we just put a dummy value (1.) 157 // 158 159 const Float_t energy = (e1+e2)/2.; 160 fCollArea->GetHistAll()->Fill(energy, 1., events); 161 } 162 141 163 return kTRUE; 164 } 142 165 143 166 fMcTrig = (MMcTrig*)plist->FindObject(fObjName); … … 190 213 { 191 214 *fLog << inf << "Total number of showers: " << fTotalNumSimulatedShowers << endl; 192 fCollArea->CalcEfficiency (fTotalNumSimulatedShowers, fEmin, fEmax, fSlope);193 } 194 195 return kTRUE; 196 } 197 215 fCollArea->CalcEfficiency2(); 216 } 217 218 return kTRUE; 219 } 220 -
trunk/MagicSoft/Mars/mmontecarlo/MMcCollectionAreaCalc.h
r2207 r2250 5 5 #include "MTask.h" 6 6 #endif 7 8 #include <TH2.h> 7 9 8 10 class MParList; … … 23 25 UInt_t fTotalNumSimulatedShowers; 24 26 UInt_t fCorsikaVersion; 27 Bool_t fAllEvtsTriggered; 25 28 Float_t fTheta; 26 Float_t fEmin;27 Float_t fEmax;28 Float_t fSlope;29 30 Bool_t fAllEvtsTriggered;31 29 32 30 Bool_t ReInit(MParList *plist);
Note:
See TracChangeset
for help on using the changeset viewer.