| 1 | /* ======================================================================== *\
|
|---|
| 2 | !
|
|---|
| 3 | ! *
|
|---|
| 4 | ! * This file is part of MARS, the MAGIC Analysis and Reconstruction
|
|---|
| 5 | ! * Software. It is distributed to you in the hope that it can be a useful
|
|---|
| 6 | ! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
|
|---|
| 7 | ! * It is distributed WITHOUT ANY WARRANTY.
|
|---|
| 8 | ! *
|
|---|
| 9 | ! * Permission to use, copy, modify and distribute this software and its
|
|---|
| 10 | ! * documentation for any purpose is hereby granted without fee,
|
|---|
| 11 | ! * provided that the above copyright notice appear in all copies and
|
|---|
| 12 | ! * that both that copyright notice and this permission notice appear
|
|---|
| 13 | ! * in supporting documentation. It is provided "as is" without express
|
|---|
| 14 | ! * or implied warranty.
|
|---|
| 15 | ! *
|
|---|
| 16 | !
|
|---|
| 17 | !
|
|---|
| 18 | ! Author(s): Wolfgang Wittek 4/2002 <mailto:wittek@mppmu.mpg.de>
|
|---|
| 19 | !
|
|---|
| 20 | ! Copyright: MAGIC Software Development, 2000-2002
|
|---|
| 21 | !
|
|---|
| 22 | !
|
|---|
| 23 | \* ======================================================================== */
|
|---|
| 24 | //////////////////////////////////////////////////////////////////////////////
|
|---|
| 25 | // //
|
|---|
| 26 | // This macro calculates photon fluxes as a function of //
|
|---|
| 27 | // - energy and time //
|
|---|
| 28 | // - energy and Theta //
|
|---|
| 29 | // //
|
|---|
| 30 | // It is assumed that the data have been taken in the wobble mode. //
|
|---|
| 31 | // This means that there is only one set of data, from which both //
|
|---|
| 32 | // 'on' and 'off' data are constructed. //
|
|---|
| 33 | // //
|
|---|
| 34 | // Necessary input from MC : //
|
|---|
| 35 | // - migration matrix (E_est, E_true) as a functioin of Theta //
|
|---|
| 36 | // - effective collection areas as a function of energy and Theta //
|
|---|
| 37 | // //
|
|---|
| 38 | // //
|
|---|
| 39 | // The input from MC has to refer to the wobble mode too. //
|
|---|
| 40 | // //
|
|---|
| 41 | // The macro includes : //
|
|---|
| 42 | // - the calculation of Hillas parameters //
|
|---|
| 43 | // - the calculation of the effective on time //
|
|---|
| 44 | // - the unfolding of the distributions in the estimated energy E_est //
|
|---|
| 45 | // //
|
|---|
| 46 | // For testing purposes (as long as no real data, no energy estimator, //
|
|---|
| 47 | // no migration matrices and no effective collection areas are available) //
|
|---|
| 48 | // - event times are generated (according to a Poissonian with dead time)//
|
|---|
| 49 | // - a dummy energy estimator is provided //
|
|---|
| 50 | // - migration matrices are generated //
|
|---|
| 51 | // - dummy effective collection areas are used //
|
|---|
| 52 | // //
|
|---|
| 53 | //////////////////////////////////////////////////////////////////////////////
|
|---|
| 54 | void flux()
|
|---|
| 55 | {
|
|---|
| 56 | //--------------------------------------------------------------
|
|---|
| 57 | // empty lists of parameter containers and tasks
|
|---|
| 58 | //
|
|---|
| 59 | MParList parlist;
|
|---|
| 60 | MTaskList tasklist;
|
|---|
| 61 |
|
|---|
| 62 | //--------------------------------------------------------------
|
|---|
| 63 | // Geometry information of the MAGIC camera
|
|---|
| 64 | //
|
|---|
| 65 | MGeomCamMagic geomcam;
|
|---|
| 66 |
|
|---|
| 67 | //--------------------------------------------------------------
|
|---|
| 68 | // Define the two source positions
|
|---|
| 69 | //
|
|---|
| 70 | MSrcPosCam source("Source");
|
|---|
| 71 | MSrcPosCam antisrc("AntiSource");
|
|---|
| 72 | source.SetXY(0, 0);
|
|---|
| 73 | antisrc.SetXY(+240, 0);
|
|---|
| 74 |
|
|---|
| 75 | //--------------------------------------------------------------
|
|---|
| 76 | // Setup the binning for the histograms
|
|---|
| 77 | //
|
|---|
| 78 |
|
|---|
| 79 | //...............................................................
|
|---|
| 80 | // These are NOT the binnings for the flux determination
|
|---|
| 81 |
|
|---|
| 82 | MBinning binswidth("BinningWidth");
|
|---|
| 83 | binswidth.SetEdges(100, 0, 0.5); // 100 bins from 0 to 0.5 deg
|
|---|
| 84 |
|
|---|
| 85 | MBinning binslength("BinningLength");
|
|---|
| 86 | binslength.SetEdges(100, 0, 1); // 100 bins from 0 to 1 deg
|
|---|
| 87 |
|
|---|
| 88 | MBinning binscamera("BinningCamera");
|
|---|
| 89 | binscamera.SetEdges(90, -2.25, 2.25); // 90 bins from -2.25 to 2.25 deg
|
|---|
| 90 |
|
|---|
| 91 | MBinning binsdist("BinningDist");
|
|---|
| 92 | binsdist.SetEdges(90, 0, 2.25); // 90 bins from 0 to 2.25 deg
|
|---|
| 93 |
|
|---|
| 94 | MBinning binsalpha("BinningAlpha");
|
|---|
| 95 | binsalpha.SetEdges(100, -100, 100);
|
|---|
| 96 |
|
|---|
| 97 | MBinning binsasym("BinningAsym");
|
|---|
| 98 | binsasym.SetEdges(100, -0.5, 0.5); // 100 bins from -0.5 to 0.5 deg
|
|---|
| 99 |
|
|---|
| 100 | MBinning binsasymn("BinningAsymn");
|
|---|
| 101 | binsasymn.SetEdges(100, -0.005, 0.005); // 100 bins from -0.005 to 0.005 deg
|
|---|
| 102 |
|
|---|
| 103 | MBinning binsm3long("BinningM3Long");
|
|---|
| 104 | binsm3long.SetEdges(100, -0.5, 0.5); // 100 bins from -0.5 to 0.5 deg
|
|---|
| 105 |
|
|---|
| 106 | MBinning binsm3trans("BinningM3Trans");
|
|---|
| 107 | binsm3trans.SetEdges(100, -0.5, 0.5); // 100 bins from -0.5 to 0.5 deg
|
|---|
| 108 |
|
|---|
| 109 | //...............................................................
|
|---|
| 110 | // These ARE the binnings for the flux determination
|
|---|
| 111 |
|
|---|
| 112 | MBinning binsalphaflux("BinningAlphaFlux");
|
|---|
| 113 | binsalphaflux.SetEdges(100, 0, 100);
|
|---|
| 114 |
|
|---|
| 115 | MBinning binse("BinningE");
|
|---|
| 116 | binse.SetEdgesLog(10, 10, 1e3);
|
|---|
| 117 |
|
|---|
| 118 | MBinning binstheta("BinningTheta");
|
|---|
| 119 | binstheta.SetEdges(7, -2.5, 32.5);
|
|---|
| 120 |
|
|---|
| 121 | MBinning binstime("BinningTime");
|
|---|
| 122 | binstime.SetEdges(5, 0, 100);
|
|---|
| 123 |
|
|---|
| 124 | MBinning binsdifftime("BinningTimeDiff");
|
|---|
| 125 | binsdifftime.SetEdges(50, 0, 0.1);
|
|---|
| 126 |
|
|---|
| 127 |
|
|---|
| 128 | //--------------------------------------------------------------
|
|---|
| 129 | // Fill list of parameter containers
|
|---|
| 130 | //
|
|---|
| 131 |
|
|---|
| 132 | parlist.AddToList(&tasklist);
|
|---|
| 133 | parlist.AddToList(&geomcam);
|
|---|
| 134 |
|
|---|
| 135 | parlist.AddToList(&source);
|
|---|
| 136 | parlist.AddToList(&antisrc);
|
|---|
| 137 |
|
|---|
| 138 | parlist.AddToList(&binswidth);
|
|---|
| 139 | parlist.AddToList(&binslength);
|
|---|
| 140 | parlist.AddToList(&binscamera);
|
|---|
| 141 |
|
|---|
| 142 | parlist.AddToList(&binsdist);
|
|---|
| 143 |
|
|---|
| 144 | parlist.AddToList(&binsalpha);
|
|---|
| 145 |
|
|---|
| 146 | parlist.AddToList(&binsasym);
|
|---|
| 147 | parlist.AddToList(&binsasymn);
|
|---|
| 148 | parlist.AddToList(&binsm3long);
|
|---|
| 149 | parlist.AddToList(&binsm3trans);
|
|---|
| 150 |
|
|---|
| 151 | parlist.AddToList(&binsalphaflux);
|
|---|
| 152 | parlist.AddToList(&binse);
|
|---|
| 153 | parlist.AddToList(&binstheta);
|
|---|
| 154 | parlist.AddToList(&binstime);
|
|---|
| 155 | parlist.AddToList(&binsdifftime);
|
|---|
| 156 |
|
|---|
| 157 | //--------------------------------------------------------------
|
|---|
| 158 | // Setup the tasks
|
|---|
| 159 | //
|
|---|
| 160 |
|
|---|
| 161 | //.....................................
|
|---|
| 162 | // input file
|
|---|
| 163 | //
|
|---|
| 164 | // next statement commented out
|
|---|
| 165 | // MReadMarsFile reader("Events", "~/data/Gamma*.root");
|
|---|
| 166 |
|
|---|
| 167 | MReadMarsFile reader("Events");
|
|---|
| 168 |
|
|---|
| 169 | //reader.AddFile("/hd31/rkb/Camera/mpi/Gamma*.root");
|
|---|
| 170 | //reader.AddFile("/hd31/rkb/Camera/mpi/prot_N_*.root");
|
|---|
| 171 | //reader.AddFile("/hd31/rkb/Camera/mpi/prot_NS_*.root");
|
|---|
| 172 | //reader.AddFile("protondata/gamma_10_n*.root");
|
|---|
| 173 | reader.AddFile("protondata/gamma_10_cn*.root");
|
|---|
| 174 |
|
|---|
| 175 | reader.EnableBranch("MMcEvt.fTheta");
|
|---|
| 176 |
|
|---|
| 177 | //.....................................
|
|---|
| 178 | // filters
|
|---|
| 179 | MFTriggerLvl1 lvl1;
|
|---|
| 180 |
|
|---|
| 181 | //.....................................
|
|---|
| 182 | // generation of event time
|
|---|
| 183 | MMcTimeGenerate rand;
|
|---|
| 184 |
|
|---|
| 185 | //.....................................
|
|---|
| 186 | MMcPedestalCopy pcopy;
|
|---|
| 187 | MMcPedestalNSBAdd pnsb;
|
|---|
| 188 | MCerPhotCalc ncalc;
|
|---|
| 189 | MImgCleanStd clean;
|
|---|
| 190 | MBlindPixelCalc blind;
|
|---|
| 191 |
|
|---|
| 192 | //.....................................
|
|---|
| 193 | // source independent image parameters
|
|---|
| 194 | MHillasCalc hcalc;
|
|---|
| 195 | MHillasExt hext;
|
|---|
| 196 | parlist.AddToList(&hext);
|
|---|
| 197 |
|
|---|
| 198 | //.....................................
|
|---|
| 199 | // source dependent image parameters
|
|---|
| 200 | MHillasSrcCalc hsrc1("Source", "HillasSrc");
|
|---|
| 201 | MHillasSrcCalc hsrc2("AntiSource", "HillasAntiSrc");
|
|---|
| 202 |
|
|---|
| 203 | //.....................................
|
|---|
| 204 | // energy estimation
|
|---|
| 205 | MEnergyEstimate estim;
|
|---|
| 206 |
|
|---|
| 207 | //.....................................
|
|---|
| 208 | // migration matrix (MC)
|
|---|
| 209 | MFillH eestetrue("MHMcEnergyMigration", "HillasSrc");
|
|---|
| 210 | eestetrue.SetTitle("Task to determine the migration matrix for the energy");
|
|---|
| 211 |
|
|---|
| 212 | //.....................................
|
|---|
| 213 | // plots of source independent parameters (length, width, delta, size, center)
|
|---|
| 214 | MFillH hfill1h("MHHillas", "MHillas");
|
|---|
| 215 | hfill1h.SetTitle("Task to plot the source independent image parameters");
|
|---|
| 216 | hfill1h.SetFilter(&lvl1);
|
|---|
| 217 |
|
|---|
| 218 | MFillH hfill1x("MHHillasExt", "MHillas");
|
|---|
| 219 | hfill1x.SetTitle("Task to plot the extended image parameters");
|
|---|
| 220 | hfill1x.SetFilter(&lvl1);
|
|---|
| 221 |
|
|---|
| 222 | //.....................................
|
|---|
| 223 | // plots of source dependent parameters (alpha, dist)
|
|---|
| 224 | MFillH hfill2s("HSource [MHHillasSrc]", "HillasSrc");
|
|---|
| 225 | hfill2s.SetTitle("Task to plot the source dependent image parameters (Source)");
|
|---|
| 226 | hfill2s.SetFilter(&lvl1);
|
|---|
| 227 | MFillH hfill2a("HAntiSource [MHHillasSrc]", "HillasAntiSrc");
|
|---|
| 228 | hfill2a.SetTitle("Task to plot the source dependent image parameters (AntiSource)");
|
|---|
| 229 | hfill2a.SetFilter(&lvl1);
|
|---|
| 230 |
|
|---|
| 231 | //.....................................
|
|---|
| 232 | // star map
|
|---|
| 233 | MFillH hfill1m("MHStarMap", "MHillas");
|
|---|
| 234 | hfill1m.SetTitle("Task to plot the Star map");
|
|---|
| 235 |
|
|---|
| 236 | //.....................................
|
|---|
| 237 | const Float_t alpha0 = 15; // [deg]
|
|---|
| 238 | MFAlpha fsrc ("HillasSrc", '>', alpha0);
|
|---|
| 239 | fsrc.SetTitle("Task to check alphaSrc > alpha0");
|
|---|
| 240 |
|
|---|
| 241 | MFAlpha fasrc("HillasAntiSrc", '>', alpha0);
|
|---|
| 242 | fasrc.SetTitle("Task to check alphaAntiSrc > alpha0");
|
|---|
| 243 |
|
|---|
| 244 | //.....................................
|
|---|
| 245 | // 1-D profile plots (<Theta>, time)
|
|---|
| 246 | // (<Theta>, Theta)
|
|---|
| 247 | MFillH fillthetabartime ("ThetabarTime [MHThetabarTime]", "MMcEvt");
|
|---|
| 248 | fillthetabartime.SetTitle("Task to plot <Theta> vs time");
|
|---|
| 249 | // fillthetabartime.SetFilter(&lvl1);
|
|---|
| 250 |
|
|---|
| 251 | MFillH fillthetabartheta("ThetabarTheta [MHThetabarTheta]", "MMcEvt");
|
|---|
| 252 | fillthetabartheta.SetTitle("Task to plot <Theta> vs theta");
|
|---|
| 253 | // fillthetabartheta.SetFilter(&lvl1);
|
|---|
| 254 |
|
|---|
| 255 | //.....................................
|
|---|
| 256 | // 2-D plots (Delta(time), time)
|
|---|
| 257 | // (Delta(time), Theta)
|
|---|
| 258 | MFillH filldtimetime ("EffOnTime [MHTimeDiffTime]", "MMcEvt");
|
|---|
| 259 | filldtimetime.SetTitle("Task to plot Delta(time) vs time");
|
|---|
| 260 | // filldtime.SetFilter(&lvl1);
|
|---|
| 261 |
|
|---|
| 262 | MFillH filldtimetheta("EffOnTheta [MHTimeDiffTheta]", "MMcEvt");
|
|---|
| 263 | filldtimetheta.SetTitle("Task to plot Delta(time) vs theta");
|
|---|
| 264 | // fillontheta.SetFilter(&lvl1);
|
|---|
| 265 |
|
|---|
| 266 | //.....................................
|
|---|
| 267 | // 3-D plots (alpha, E_est, time)
|
|---|
| 268 | MFillH fillsptime ("SrcTime [MHAlphaEnergyTime]", "HillasSrc");
|
|---|
| 269 | fillsptime.SetTitle("Task for 3D plots (alpha, E_est, time) (Source)");
|
|---|
| 270 | fillsptime.SetFilter(&fasrc);
|
|---|
| 271 |
|
|---|
| 272 | MFillH fillasptime ("ASrcTime [MHAlphaEnergyTime]", "HillasAntiSrc");
|
|---|
| 273 | fillasptime.SetTitle("Task for 3D plots (alpha, E_est, time) (AntiSource)");
|
|---|
| 274 | fillasptime.SetFilter(&fsrc);
|
|---|
| 275 |
|
|---|
| 276 | //.....................................
|
|---|
| 277 | // 3-D plots (alpha, E_est, Theta)
|
|---|
| 278 | MFillH fillsptheta ("SrcTheta [MHAlphaEnergyTheta]", "HillasSrc");
|
|---|
| 279 | fillsptheta.SetTitle("Task for 3D plots (alpha, E_est, Theta) (Source)");
|
|---|
| 280 | fillsptheta.SetFilter(&fasrc);
|
|---|
| 281 |
|
|---|
| 282 | MFillH fillasptheta("ASrcTheta [MHAlphaEnergyTheta]", "HillasAntiSrc");
|
|---|
| 283 | fillasptheta.SetTitle("Task for 3D plots (alpha, E_est, Theta) (AntiSource)");
|
|---|
| 284 | fillasptheta.SetFilter(&fsrc);
|
|---|
| 285 |
|
|---|
| 286 | //.....................................
|
|---|
| 287 | // MFillH fethetaall("AllTheta [MHEnergyTheta]", "MMcEvt");
|
|---|
| 288 | // MFillH fethetasel("SelTheta [MHEnergyTheta]", "MMcEvt");
|
|---|
| 289 | // fethetasel.SetFilter(&lvl1);
|
|---|
| 290 |
|
|---|
| 291 | // MFillH fetimeall ("AllTime [MHEnergyTime]", "MMcEvt");
|
|---|
| 292 | // MFillH fetimesel ("SelTime [MHEnergyTime]", "MMcEvt");
|
|---|
| 293 | // fetimesel.SetFilter(&lvl1);
|
|---|
| 294 |
|
|---|
| 295 |
|
|---|
| 296 | //---------------------------------------------------------------------
|
|---|
| 297 | // Setup the task list
|
|---|
| 298 | //
|
|---|
| 299 | tasklist.AddToList(&reader);
|
|---|
| 300 |
|
|---|
| 301 | tasklist.AddToList(&lvl1);
|
|---|
| 302 | tasklist.AddToList(&rand);
|
|---|
| 303 |
|
|---|
| 304 | tasklist.AddToList(&pcopy);
|
|---|
| 305 | tasklist.AddToList(&pnsb);
|
|---|
| 306 | tasklist.AddToList(&ncalc);
|
|---|
| 307 | tasklist.AddToList(&clean);
|
|---|
| 308 | tasklist.AddToList(&blind);
|
|---|
| 309 |
|
|---|
| 310 | tasklist.AddToList(&hcalc);
|
|---|
| 311 |
|
|---|
| 312 | tasklist.AddToList(&hsrc1);
|
|---|
| 313 | tasklist.AddToList(&hsrc2);
|
|---|
| 314 | tasklist.AddToList(&estim);
|
|---|
| 315 | tasklist.AddToList(&eestetrue);
|
|---|
| 316 |
|
|---|
| 317 | tasklist.AddToList(&hfill1h);
|
|---|
| 318 | tasklist.AddToList(&hfill1x);
|
|---|
| 319 |
|
|---|
| 320 | tasklist.AddToList(&hfill1m);
|
|---|
| 321 | tasklist.AddToList(&hfill2s);
|
|---|
| 322 | tasklist.AddToList(&hfill2a);
|
|---|
| 323 |
|
|---|
| 324 | tasklist.AddToList(&fillthetabartime);
|
|---|
| 325 | tasklist.AddToList(&fillthetabartheta);
|
|---|
| 326 |
|
|---|
| 327 | tasklist.AddToList(&filldtimetime);
|
|---|
| 328 | tasklist.AddToList(&filldtimetheta);
|
|---|
| 329 |
|
|---|
| 330 |
|
|---|
| 331 |
|
|---|
| 332 | // tasklist.AddToList(&fethetaall);
|
|---|
| 333 | // tasklist.AddToList(&fethetasel);
|
|---|
| 334 | // tasklist.AddToList(&fetimeall);
|
|---|
| 335 | // tasklist.AddToList(&fetimesel);
|
|---|
| 336 |
|
|---|
| 337 | tasklist.AddToList(&fsrc);
|
|---|
| 338 | tasklist.AddToList(&fasrc);
|
|---|
| 339 |
|
|---|
| 340 | tasklist.AddToList(&fillsptime);
|
|---|
| 341 | tasklist.AddToList(&fillasptime);
|
|---|
| 342 |
|
|---|
| 343 | tasklist.AddToList(&fillsptheta);
|
|---|
| 344 | tasklist.AddToList(&fillasptheta);
|
|---|
| 345 |
|
|---|
| 346 |
|
|---|
| 347 | //----------------------------------------------------------------------
|
|---|
| 348 | // Event loop
|
|---|
| 349 | //
|
|---|
| 350 | MEvtLoop magic;
|
|---|
| 351 | magic.SetParList(&parlist);
|
|---|
| 352 |
|
|---|
| 353 | //
|
|---|
| 354 | // loop over all events
|
|---|
| 355 | //
|
|---|
| 356 | if (!magic.Eventloop())
|
|---|
| 357 | return;
|
|---|
| 358 | //----------------------------------------------------------------------
|
|---|
| 359 |
|
|---|
| 360 |
|
|---|
| 361 | tasklist.PrintStatistics(10);
|
|---|
| 362 |
|
|---|
| 363 |
|
|---|
| 364 | MHHillas *mhhillas = (MHHillas*)parlist.FindObject("MHHillas");
|
|---|
| 365 | mhhillas->SetTitle("Source indep. image parameters");
|
|---|
| 366 | mhhillas->DrawClone();
|
|---|
| 367 |
|
|---|
| 368 |
|
|---|
| 369 |
|
|---|
| 370 | MHHillasExt *mhhillasext = (MHHillasExt*)parlist.FindObject("MHHillasExt");
|
|---|
| 371 | mhhillasext->SetTitle("Extended image parameters");
|
|---|
| 372 | mhhillasext->DrawClone();
|
|---|
| 373 |
|
|---|
| 374 |
|
|---|
| 375 | MHHillasSrc *hsource = (MHHillasSrc*)parlist.FindObject("HSource");
|
|---|
| 376 | hsource->SetTitle("Source dependent image parameters (Source)");
|
|---|
| 377 | hsource->DrawClone();
|
|---|
| 378 |
|
|---|
| 379 | MHHillasSrc *hantisource = (MHHillasSrc*)parlist.FindObject("HAntiSource");
|
|---|
| 380 | hantisource->SetTitle("Source dependent image parameters (AntiSource)");
|
|---|
| 381 | hantisource->DrawClone();
|
|---|
| 382 |
|
|---|
| 383 |
|
|---|
| 384 | /*
|
|---|
| 385 | parlist.FindObject("MHStarMap")->DrawClone();
|
|---|
| 386 | */
|
|---|
| 387 |
|
|---|
| 388 | //----------------------------------------------------------------------
|
|---|
| 389 | // average Theta versus time
|
|---|
| 390 | // and versus Theta
|
|---|
| 391 | // This is needed for selecting later the right collection area
|
|---|
| 392 | // (at the right Theta) for each bin in time or Theta
|
|---|
| 393 | //
|
|---|
| 394 | MHThetabarTime *bartime = (MHThetabarTime*)parlist.FindObject("ThetabarTime");
|
|---|
| 395 | MHThetabarTheta *bartheta = (MHThetabarTheta*)parlist.FindObject("ThetabarTheta");
|
|---|
| 396 |
|
|---|
| 397 | /*
|
|---|
| 398 | bartime->DrawClone();
|
|---|
| 399 | bartheta->DrawClone();
|
|---|
| 400 | */
|
|---|
| 401 |
|
|---|
| 402 | //----------------------------------------------------------------------
|
|---|
| 403 | // Effective on time
|
|---|
| 404 |
|
|---|
| 405 | //....................................
|
|---|
| 406 | // get plots of time differences for different intervals in time
|
|---|
| 407 | // and plots of time differences for different intervals in Theta
|
|---|
| 408 |
|
|---|
| 409 | MHTimeDiffTime *dtimetime = (MHTimeDiffTime*)parlist.FindObject("EffOnTime");
|
|---|
| 410 | MHTimeDiffTheta *dtimetheta = (MHTimeDiffTheta*)parlist.FindObject("EffOnTheta");
|
|---|
| 411 |
|
|---|
| 412 | /*
|
|---|
| 413 | dtimetime->DrawClone();
|
|---|
| 414 | dtimetheta->DrawClone();
|
|---|
| 415 | */
|
|---|
| 416 |
|
|---|
| 417 |
|
|---|
| 418 | //....................................
|
|---|
| 419 | // calculate effective on time for different intervals in Time
|
|---|
| 420 | // and for different intervals in Theta
|
|---|
| 421 |
|
|---|
| 422 | MHEffOnTime effontime ("Time", "[s]");
|
|---|
| 423 | MHEffOnTime effontheta("Theta", "[\\circ]");
|
|---|
| 424 |
|
|---|
| 425 | effontime.SetupFill(&parlist);
|
|---|
| 426 | effontheta.SetupFill(&parlist);
|
|---|
| 427 |
|
|---|
| 428 |
|
|---|
| 429 | // Draw == 0 don't draw the individual distributions of time differences
|
|---|
| 430 | // != 0 draw them
|
|---|
| 431 | Bool_t draw=kFALSE;
|
|---|
| 432 | effontime.Calc (dtimetime->GetHist(), draw);
|
|---|
| 433 | effontheta.Calc(dtimetheta->GetHist(),draw);
|
|---|
| 434 |
|
|---|
| 435 |
|
|---|
| 436 | // plot effective on time versus Time
|
|---|
| 437 | // and versus Theta
|
|---|
| 438 | /*
|
|---|
| 439 | effontime.DrawClone();
|
|---|
| 440 | effontheta.DrawClone();
|
|---|
| 441 | */
|
|---|
| 442 |
|
|---|
| 443 |
|
|---|
| 444 | //======================================================================
|
|---|
| 445 | //
|
|---|
| 446 | // A : fully differential plots (Alpha, E-est, Var)
|
|---|
| 447 | //
|
|---|
| 448 | //----------------------------------------------------------------------
|
|---|
| 449 | // 3D-plots of alpha, E_est and time
|
|---|
| 450 | // and of alpha, E_est and Theta
|
|---|
| 451 | // with alpha calculated relative to the source position
|
|---|
| 452 | // and relative to the anti-source position
|
|---|
| 453 |
|
|---|
| 454 | MHAlphaEnergyTime *evtsptime = (MHAlphaEnergyTime*)parlist.FindObject("SrcTime");
|
|---|
| 455 | MHAlphaEnergyTime *evtasptime = (MHAlphaEnergyTime*)parlist.FindObject("ASrcTime");
|
|---|
| 456 | MHAlphaEnergyTheta *evtsptheta = (MHAlphaEnergyTheta*)parlist.FindObject("SrcTheta");
|
|---|
| 457 | MHAlphaEnergyTheta *evtasptheta = (MHAlphaEnergyTheta*)parlist.FindObject("ASrcTheta");
|
|---|
| 458 |
|
|---|
| 459 |
|
|---|
| 460 | /*
|
|---|
| 461 | evtsptime->SetTitle("Source : 3D-plot Al-En-time, alpha\_{asp} .gt. alpha\_0");
|
|---|
| 462 | evtsptime->DrawClone();
|
|---|
| 463 | evtasptime->SetTitle("AntiSource : 3D-plot Al-En-time, alpha\_{sp} .gt. alpha\_0");
|
|---|
| 464 | evtasptime->DrawClone();
|
|---|
| 465 |
|
|---|
| 466 | evtsptheta->SetTitle("Source : 3D-plot Al-En-Theta, alpha\_{asp} .gt. alpha\_0");
|
|---|
| 467 | evtsptheta->DrawClone();
|
|---|
| 468 | evtasptheta->SetTitle("AntiSource : 3D-plot Al-En-Theta, alpha\_{sp} .gt. alpha\_0");
|
|---|
| 469 | evtasptheta->DrawClone();
|
|---|
| 470 | */
|
|---|
| 471 |
|
|---|
| 472 | //----------------------------------------------------------------------
|
|---|
| 473 | // Difference between source and antisource (= 'gamma' sample)
|
|---|
| 474 | // for 3D-plots of alpha, E_est and time
|
|---|
| 475 | // and of alpha, E_est and Theta
|
|---|
| 476 | // 3rd and 4th argument are name and title of the resulting histogram
|
|---|
| 477 |
|
|---|
| 478 | MHGamma gamma;
|
|---|
| 479 |
|
|---|
| 480 | TH3D *hsubtime = gamma.Subtract( evtsptime->GetHist(),
|
|---|
| 481 | evtasptime->GetHist(),
|
|---|
| 482 | "Al-En-time", "3D-plot of Alpha,E-est,time", draw);
|
|---|
| 483 |
|
|---|
| 484 | TH3D *hsubtheta = gamma.Subtract( evtsptheta->GetHist(),
|
|---|
| 485 | evtasptheta->GetHist(),
|
|---|
| 486 | "Al-En-time", "3D-plot of Alpha,E-est,Theta", draw);
|
|---|
| 487 |
|
|---|
| 488 |
|
|---|
| 489 | //----------------------------------------------------------------------
|
|---|
| 490 | // get number of 'gammas' in the alpha range (lo, up) as a function of
|
|---|
| 491 | // E_est and time
|
|---|
| 492 | // or E_est and Theta
|
|---|
| 493 |
|
|---|
| 494 | Axis_t lo = 0; // [deg]
|
|---|
| 495 | Axis_t up = 10; // [deg]
|
|---|
| 496 | const TH2D &evttime = *(gamma.GetAlphaProjection(hsubtime,
|
|---|
| 497 | lo, up, draw));
|
|---|
| 498 |
|
|---|
| 499 | const TH2D &evttheta = *(gamma.GetAlphaProjection(hsubtheta,
|
|---|
| 500 | lo, up, draw));
|
|---|
| 501 |
|
|---|
| 502 |
|
|---|
| 503 | //----------------------------------------------------------------------
|
|---|
| 504 | // plot migration matrix: E-true E-est Theta
|
|---|
| 505 |
|
|---|
| 506 |
|
|---|
| 507 | /*
|
|---|
| 508 | MHMcEnergyMigration *migrationmatrix =
|
|---|
| 509 | (MHMcEnergyMigration*)parlist.FindObject("MHMcEnergyMigration");
|
|---|
| 510 | migrationmatrix->SetTitle("Migration matrix");;
|
|---|
| 511 | migrationmatrix->DrawClone();
|
|---|
| 512 | */
|
|---|
| 513 |
|
|---|
| 514 |
|
|---|
| 515 | //----------------------------------------------------------------------
|
|---|
| 516 | // determine gamma flux from distributions of E-est :
|
|---|
| 517 | // - do unfolding to get the distributions in E-unfold
|
|---|
| 518 | // - divide by bin width in energy
|
|---|
| 519 | // effective ontime and
|
|---|
| 520 | // effective collection area
|
|---|
| 521 | // to get the absolute gamma flux
|
|---|
| 522 |
|
|---|
| 523 | //.............................................
|
|---|
| 524 | // get flux spectrum for different bins in Time
|
|---|
| 525 | //
|
|---|
| 526 | // use dummy histogram *aeff which eventually will contain
|
|---|
| 527 | // the effective collection area as a function of Etrue and Theta
|
|---|
| 528 | TH2D aeff;
|
|---|
| 529 |
|
|---|
| 530 | // arguments of MHFlux constructor are :
|
|---|
| 531 | // - 2D histogram containing the no.of gammas as a function of
|
|---|
| 532 | // E-est and Var
|
|---|
| 533 | // - name of variable Var ("Time" or "Theta")
|
|---|
| 534 | // - units of variable Var ( "[s]" or "[\\circ]")
|
|---|
| 535 |
|
|---|
| 536 | // Draw == kTRUE draw the no.of photons vs. E-est
|
|---|
| 537 | // for the individual bins of the variable Var
|
|---|
| 538 | draw=kTRUE;
|
|---|
| 539 | MHFlux fluxtime(evttime, draw, "Time", "[s]");
|
|---|
| 540 | fluxtime.Unfold(draw);
|
|---|
| 541 | fluxtime.CalcFlux(effontime.GetHist(), bartime.GetHist(),
|
|---|
| 542 | &aeff, draw);
|
|---|
| 543 |
|
|---|
| 544 | fluxtime.DrawClone();
|
|---|
| 545 |
|
|---|
| 546 |
|
|---|
| 547 |
|
|---|
| 548 | //..............................................
|
|---|
| 549 | // get flux spectrum for different bins in Theta
|
|---|
| 550 | MHFlux fluxtheta(evttheta, draw, "Theta", "[\\circ]");
|
|---|
| 551 | fluxtheta.Unfold(draw);
|
|---|
| 552 | fluxtheta.CalcFlux(effontheta.GetHist(), bartheta.GetHist(),
|
|---|
| 553 | &aeff, draw);
|
|---|
| 554 |
|
|---|
| 555 | fluxtheta.DrawClone();
|
|---|
| 556 |
|
|---|
| 557 |
|
|---|
| 558 | return;
|
|---|
| 559 | //----------------------------------------------------------------------
|
|---|
| 560 |
|
|---|
| 561 |
|
|---|
| 562 | //======================================================================
|
|---|
| 563 | //
|
|---|
| 564 | // B : plots integrated over E-est
|
|---|
| 565 | //
|
|---|
| 566 | //----------------------------------------------------------------------
|
|---|
| 567 | // integrate 3D-plot of (alpha, E_est and Time) over E-est
|
|---|
| 568 | // to get 2D-plot of (alpha, Time)
|
|---|
| 569 |
|
|---|
| 570 | Draw = kFALSE;
|
|---|
| 571 | TH2D *evttimesp = evtsptime.IntegrateEest ("AlphaSP vs. Time", Draw);
|
|---|
| 572 | TH2D *evttimeasp = evtasptime.IntegrateEest("AlphaASP vs. Time",Draw);
|
|---|
| 573 |
|
|---|
| 574 |
|
|---|
| 575 | //======================================================================
|
|---|
| 576 | //
|
|---|
| 577 | // C : plots integrated over Time
|
|---|
| 578 | //
|
|---|
| 579 | //----------------------------------------------------------------------
|
|---|
| 580 | // integrate 3D-plot of (alpha, E_est and Time) over the Time
|
|---|
| 581 | // to get 2D-plot of (alpha, E_est)
|
|---|
| 582 |
|
|---|
| 583 | Draw = kFALSE;
|
|---|
| 584 | TH2D *evteestsp = evtsptime.IntegrateTime ("AlphaSP vs. E-est", Draw);
|
|---|
| 585 | TH2D *evteestasp = evtasptime.IntegrateTime("AlphaASP vs. E-est",Draw);
|
|---|
| 586 |
|
|---|
| 587 |
|
|---|
| 588 |
|
|---|
| 589 | //======================================================================
|
|---|
| 590 | //
|
|---|
| 591 | // D : plots integrated over E-est and Time
|
|---|
| 592 | //
|
|---|
| 593 |
|
|---|
| 594 | //----------------------------------------------------------------------
|
|---|
| 595 | // integrate 3D-plot of (alpha, E_est and Time) over E-est and Time
|
|---|
| 596 | // to get 1D-plot of (alpha)
|
|---|
| 597 |
|
|---|
| 598 | Draw = kFALSE;
|
|---|
| 599 | TH1D *evtalphasp = evtsptime.IntegrateEestTime ("AlphaSP", Draw);
|
|---|
| 600 | TH1D *evtalphaasp = evtasptime.IntegrateEestTime("AlphaASP",Draw);
|
|---|
| 601 |
|
|---|
| 602 | //----------------------------------------------------------------------
|
|---|
| 603 | // list of tasks for processing
|
|---|
| 604 |
|
|---|
| 605 | cout << " " << endl;
|
|---|
| 606 | cout << "List of tasks for processing :" << endl;
|
|---|
| 607 | cout << "==============================" << endl;
|
|---|
| 608 | cout << " " << endl;
|
|---|
| 609 |
|
|---|
| 610 | // was folgt geht nicht :
|
|---|
| 611 |
|
|---|
| 612 | // Error: Function Next() is not defined in current scope FILE:macros/flux.C LINE:636
|
|---|
| 613 |
|
|---|
| 614 | //while ( (task=(MTask*)Next()) )
|
|---|
| 615 | //{
|
|---|
| 616 | // cout << tasklist.GetName() << " : " << tasklist.GetTitle() << endl;
|
|---|
| 617 | //}
|
|---|
| 618 |
|
|---|
| 619 | return;
|
|---|
| 620 |
|
|---|
| 621 | //======================================================================
|
|---|
| 622 | }
|
|---|
| 623 | //===========================================================================
|
|---|
| 624 |
|
|---|
| 625 |
|
|---|