| 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 | // - a kind of effective collection areas are calculated //
|
|---|
| 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 binning for the histograms
|
|---|
| 77 | //
|
|---|
| 78 | MBinning binswidth("BinningWidth");
|
|---|
| 79 | binswidth.SetEdges(100, 0, 1); // 100 bins from 0 to 1 deg
|
|---|
| 80 |
|
|---|
| 81 | MBinning binslength("BinningLength");
|
|---|
| 82 | binslength.SetEdges(100, 0, 1); // 100 bins from 0 to 1 deg
|
|---|
| 83 |
|
|---|
| 84 | MBinning binsdist("BinningDist");
|
|---|
| 85 | binsdist.SetEdges(100, 0, 2); // 100 bins from 0 to 2 deg
|
|---|
| 86 |
|
|---|
| 87 | MBinning binsalpha("BinningAlpha");
|
|---|
| 88 | binsalpha.SetEdges(45, -90, 90);
|
|---|
| 89 |
|
|---|
| 90 | MBinning binse("BinningE");
|
|---|
| 91 | binse.SetEdgesLog(10, 10, 1e3);
|
|---|
| 92 |
|
|---|
| 93 | MBinning binstheta("BinningTheta");
|
|---|
| 94 | binstheta.SetEdges(7, -2.5, 32.5);
|
|---|
| 95 |
|
|---|
| 96 | MBinning binstime("BinningTime");
|
|---|
| 97 | binstime.SetEdges(5, 0, 100);
|
|---|
| 98 |
|
|---|
| 99 | MBinning binsdifftime("BinningTimeDiff");
|
|---|
| 100 | binsdifftime.SetEdges(50, 0, 0.1);
|
|---|
| 101 |
|
|---|
| 102 |
|
|---|
| 103 | //--------------------------------------------------------------
|
|---|
| 104 | // Fill list of parameter containers
|
|---|
| 105 | //
|
|---|
| 106 |
|
|---|
| 107 | parlist.AddToList(&tasklist);
|
|---|
| 108 | parlist.AddToList(&geomcam);
|
|---|
| 109 |
|
|---|
| 110 | parlist.AddToList(&source);
|
|---|
| 111 | parlist.AddToList(&antisrc);
|
|---|
| 112 |
|
|---|
| 113 | parlist.AddToList(&binswidth);
|
|---|
| 114 | parlist.AddToList(&binslength);
|
|---|
| 115 | parlist.AddToList(&binsdist);
|
|---|
| 116 |
|
|---|
| 117 | parlist.AddToList(&binsalpha);
|
|---|
| 118 | parlist.AddToList(&binse);
|
|---|
| 119 | parlist.AddToList(&binstheta);
|
|---|
| 120 | parlist.AddToList(&binstime);
|
|---|
| 121 | parlist.AddToList(&binsdifftime);
|
|---|
| 122 |
|
|---|
| 123 | //--------------------------------------------------------------
|
|---|
| 124 | // Setup the tasks
|
|---|
| 125 | //
|
|---|
| 126 |
|
|---|
| 127 | //.....................................
|
|---|
| 128 | // input file
|
|---|
| 129 | //
|
|---|
| 130 | // next statement commented out
|
|---|
| 131 | // MReadMarsFile reader("Events", "~/data/Gamma*.root");
|
|---|
| 132 |
|
|---|
| 133 | //MReadMarsFile reader("Events", "/hd31/rkb/Camera/mpi/Gamma*.root");
|
|---|
| 134 | //reader.AddFile("/hd31/rkb/Camera/mpi/prot_N_*.root");
|
|---|
| 135 |
|
|---|
| 136 | // next 2 statements added
|
|---|
| 137 | MReadMarsFile reader("Events");
|
|---|
| 138 | reader.AddFile("protondata/gamma_10_cn*.root");
|
|---|
| 139 |
|
|---|
| 140 | reader.EnableBranch("MMcEvt.fTheta");
|
|---|
| 141 |
|
|---|
| 142 | //.....................................
|
|---|
| 143 | // generation of event time
|
|---|
| 144 | MMcTimeGenerate rand;
|
|---|
| 145 |
|
|---|
| 146 | //.....................................
|
|---|
| 147 | // collection area
|
|---|
| 148 | MMcCollectionAreaCalc acalc;
|
|---|
| 149 |
|
|---|
| 150 | MMcPedestalCopy pcopy;
|
|---|
| 151 | MMcPedestalNSBAdd pnsb;
|
|---|
| 152 | MCerPhotCalc ncalc;
|
|---|
| 153 | MImgCleanStd clean;
|
|---|
| 154 | MBlindPixelCalc blind;
|
|---|
| 155 |
|
|---|
| 156 | //.....................................
|
|---|
| 157 | // source independent image parameters
|
|---|
| 158 | MHillasCalc hcalc;
|
|---|
| 159 |
|
|---|
| 160 | //.....................................
|
|---|
| 161 | // source dependent image parameters
|
|---|
| 162 | MHillasSrcCalc hsrc1("Source", "HillasSrc");
|
|---|
| 163 | MHillasSrcCalc hsrc2("AntiSource", "HillasAntiSrc");
|
|---|
| 164 |
|
|---|
| 165 | //.....................................
|
|---|
| 166 | // energy estimation
|
|---|
| 167 | MEnergyEstimate estim;
|
|---|
| 168 |
|
|---|
| 169 | //.....................................
|
|---|
| 170 | // migration matrix (MC)
|
|---|
| 171 | MFillH eestetrue("MHMcEnergyMigration", "HillasSrc");
|
|---|
| 172 |
|
|---|
| 173 |
|
|---|
| 174 | //.....................................
|
|---|
| 175 | // plots of width and length
|
|---|
| 176 | MFillH hfill1h("MHHillas", "MHillas");
|
|---|
| 177 |
|
|---|
| 178 | //.....................................
|
|---|
| 179 | // star map
|
|---|
| 180 | MFillH hfill1m("MHStarMap", "MHillas");
|
|---|
| 181 |
|
|---|
| 182 | //.....................................
|
|---|
| 183 | // plots of alpha and dist
|
|---|
| 184 | MFillH hfill2s("HSource [MHHillasSrc]", "HillasSrc");
|
|---|
| 185 | MFillH hfill2a("HAntiSource [MHHillasSrc]", "HillasAntiSrc");
|
|---|
| 186 |
|
|---|
| 187 | //.....................................
|
|---|
| 188 | // filters
|
|---|
| 189 | MFTriggerLvl1 lvl1;
|
|---|
| 190 |
|
|---|
| 191 | const Float_t alpha0 = 15; // [deg]
|
|---|
| 192 | MFAlpha fsrc ("HillasSrc", '>', alpha0);
|
|---|
| 193 | MFAlpha fasrc("HillasAntiSrc", '>', alpha0);
|
|---|
| 194 |
|
|---|
| 195 | //.....................................
|
|---|
| 196 | // 1-D profile plots (<Theta>, time)
|
|---|
| 197 | // (<Theta>, Theta)
|
|---|
| 198 | MFillH fillthetabartime ("ThetabarTime [MHThetabarTime]", "MMcEvt");
|
|---|
| 199 | // fillthetabartime.SetFilter(&lvl1);
|
|---|
| 200 | MFillH fillthetabartheta("ThetabarTheta [MHThetabarTheta]", "MMcEvt");
|
|---|
| 201 | // fillthetabartheta.SetFilter(&lvl1);
|
|---|
| 202 |
|
|---|
| 203 | //.....................................
|
|---|
| 204 | // 2-D plots (Delta(time), time)
|
|---|
| 205 | // (Delta(time), Theta)
|
|---|
| 206 | MFillH filldtimetime ("EffOnTime [MHTimeDiffTime]", "MMcEvt");
|
|---|
| 207 | // filldtime.SetFilter(&lvl1);
|
|---|
| 208 | MFillH filldtimetheta("EffOnTheta [MHTimeDiffTheta]", "MMcEvt");
|
|---|
| 209 | // fillontheta.SetFilter(&lvl1);
|
|---|
| 210 |
|
|---|
| 211 | //.....................................
|
|---|
| 212 | // 3-D plots (alpha, E_est, time)
|
|---|
| 213 | MFillH fillsptime ("FluxSrcTime [MHAlphaEnergyTime]", "HillasSrc");
|
|---|
| 214 | fillsptime.SetFilter(&fasrc);
|
|---|
| 215 | MFillH fillasptime ("FluxASrcTime [MHAlphaEnergyTime]", "HillasAntiSrc");
|
|---|
| 216 | fillasptime.SetFilter(&fsrc);
|
|---|
| 217 |
|
|---|
| 218 | //.....................................
|
|---|
| 219 | // 3-D plots (alpha, E_est, Theta)
|
|---|
| 220 | MFillH fillsptheta ("FluxSrcTheta [MHAlphaEnergyTheta]", "HillasSrc");
|
|---|
| 221 | fillsptheta.SetFilter(&fasrc);
|
|---|
| 222 | MFillH fillasptheta("FluxASrcTheta [MHAlphaEnergyTheta]", "HillasAntiSrc");
|
|---|
| 223 | fillasptheta.SetFilter(&fsrc);
|
|---|
| 224 |
|
|---|
| 225 | //.....................................
|
|---|
| 226 | // MFillH fethetaall("AllTheta [MHEnergyTheta]", "MMcEvt");
|
|---|
| 227 | // MFillH fethetasel("SelTheta [MHEnergyTheta]", "MMcEvt");
|
|---|
| 228 | // fethetasel.SetFilter(&lvl1);
|
|---|
| 229 |
|
|---|
| 230 | // MFillH fetimeall ("AllTime [MHEnergyTime]", "MMcEvt");
|
|---|
| 231 | // MFillH fetimesel ("SelTime [MHEnergyTime]", "MMcEvt");
|
|---|
| 232 | // fetimesel.SetFilter(&lvl1);
|
|---|
| 233 |
|
|---|
| 234 |
|
|---|
| 235 | //---------------------------------------------------------------------
|
|---|
| 236 | // Setup the task list
|
|---|
| 237 | //
|
|---|
| 238 | tasklist.AddToList(&reader);
|
|---|
| 239 | tasklist.AddToList(&rand);
|
|---|
| 240 |
|
|---|
| 241 | tasklist.AddToList(&acalc);
|
|---|
| 242 |
|
|---|
| 243 | tasklist.AddToList(&pcopy);
|
|---|
| 244 | tasklist.AddToList(&pnsb);
|
|---|
| 245 | tasklist.AddToList(&ncalc);
|
|---|
| 246 | tasklist.AddToList(&clean);
|
|---|
| 247 | tasklist.AddToList(&blind);
|
|---|
| 248 | tasklist.AddToList(&hcalc);
|
|---|
| 249 | tasklist.AddToList(&hsrc1);
|
|---|
| 250 | tasklist.AddToList(&hsrc2);
|
|---|
| 251 | tasklist.AddToList(&estim);
|
|---|
| 252 | tasklist.AddToList(&eestetrue);
|
|---|
| 253 |
|
|---|
| 254 | tasklist.AddToList(&hfill1h);
|
|---|
| 255 | tasklist.AddToList(&hfill1m);
|
|---|
| 256 | tasklist.AddToList(&hfill2s);
|
|---|
| 257 | tasklist.AddToList(&hfill2a);
|
|---|
| 258 |
|
|---|
| 259 | tasklist.AddToList(&fillthetabartime);
|
|---|
| 260 | tasklist.AddToList(&fillthetabartheta);
|
|---|
| 261 |
|
|---|
| 262 | tasklist.AddToList(&filldtimetime);
|
|---|
| 263 | tasklist.AddToList(&filldtimetheta);
|
|---|
| 264 |
|
|---|
| 265 | // tasklist.AddToList(&lvl1);
|
|---|
| 266 |
|
|---|
| 267 | // tasklist.AddToList(&fethetaall);
|
|---|
| 268 | // tasklist.AddToList(&fethetasel);
|
|---|
| 269 | // tasklist.AddToList(&fetimeall);
|
|---|
| 270 | // tasklist.AddToList(&fetimesel);
|
|---|
| 271 |
|
|---|
| 272 | tasklist.AddToList(&fsrc);
|
|---|
| 273 | tasklist.AddToList(&fasrc);
|
|---|
| 274 |
|
|---|
| 275 | tasklist.AddToList(&fillsptime);
|
|---|
| 276 | tasklist.AddToList(&fillasptime);
|
|---|
| 277 |
|
|---|
| 278 | tasklist.AddToList(&fillsptheta);
|
|---|
| 279 | tasklist.AddToList(&fillasptheta);
|
|---|
| 280 |
|
|---|
| 281 |
|
|---|
| 282 | //----------------------------------------------------------------------
|
|---|
| 283 | // Event loop
|
|---|
| 284 | //
|
|---|
| 285 | MEvtLoop magic;
|
|---|
| 286 | magic.SetParList(&parlist);
|
|---|
| 287 |
|
|---|
| 288 | //
|
|---|
| 289 | // loop over all events
|
|---|
| 290 | //
|
|---|
| 291 | if (!magic.Eventloop())
|
|---|
| 292 | return;
|
|---|
| 293 | //----------------------------------------------------------------------
|
|---|
| 294 |
|
|---|
| 295 |
|
|---|
| 296 | tasklist.PrintStatistics(10);
|
|---|
| 297 |
|
|---|
| 298 | /*
|
|---|
| 299 | parlist.FindObject("HSource")->DrawClone();;
|
|---|
| 300 | parlist.FindObject("MHHillas")->DrawClone();
|
|---|
| 301 | */
|
|---|
| 302 | /*
|
|---|
| 303 | parlist.FindObject("MHStarMap")->DrawClone();
|
|---|
| 304 | */
|
|---|
| 305 | /*
|
|---|
| 306 | parlist.FindObject("HAntiSource")->DrawClone();
|
|---|
| 307 | */
|
|---|
| 308 | /*
|
|---|
| 309 | parlist.FindObject("MHMcCollectionArea")->DrawClone();
|
|---|
| 310 | */
|
|---|
| 311 |
|
|---|
| 312 | //----------------------------------------------------------------------
|
|---|
| 313 | // average Theta versus time
|
|---|
| 314 | // and versus Theta
|
|---|
| 315 | //
|
|---|
| 316 | MHThetabarTime *bartime = (MHThetabarTime*)parlist.FindObject("ThetabarTime");
|
|---|
| 317 | MHThetabarTheta *bartheta = (MHThetabarTheta*)parlist.FindObject("ThetabarTheta");
|
|---|
| 318 |
|
|---|
| 319 | /*
|
|---|
| 320 | bartime->DrawClone();
|
|---|
| 321 | bartheta->DrawClone();
|
|---|
| 322 | */
|
|---|
| 323 |
|
|---|
| 324 |
|
|---|
| 325 | //----------------------------------------------------------------------
|
|---|
| 326 | // this is something like the collection area
|
|---|
| 327 | // as a function of time
|
|---|
| 328 | // and as a function of Theta
|
|---|
| 329 | /*
|
|---|
| 330 | MHEnergyTime &alltime = *(MHEnergyTime*)parlist.FindObject("AllTime");
|
|---|
| 331 | MHEnergyTime &seltime = *(MHEnergyTime*)parlist.FindObject("SelTime");
|
|---|
| 332 | MHEnergyTime collareatime;
|
|---|
| 333 | collareatime.Divide(&seltime, &alltime);
|
|---|
| 334 |
|
|---|
| 335 | MHEnergyTheta &alltheta = *(MHEnergyTheta*)parlist.FindObject("AllTheta");
|
|---|
| 336 | MHEnergyTheta &seltheta = *(MHEnergyTheta*)parlist.FindObject("SelTheta");
|
|---|
| 337 | MHEnergyTheta collareatheta;
|
|---|
| 338 | collareatheta.Divide(&seltheta, &alltheta);
|
|---|
| 339 | */
|
|---|
| 340 |
|
|---|
| 341 | //----------------------------------------------------------------------
|
|---|
| 342 | // Effective on time
|
|---|
| 343 |
|
|---|
| 344 | //....................................
|
|---|
| 345 | // get plots of time differences for different intervals in time
|
|---|
| 346 | // and plots of time differences for different intervals in Theta
|
|---|
| 347 |
|
|---|
| 348 | MHTimeDiffTime *dtimetime = (MHTimeDiffTime*)parlist.FindObject("EffOnTime");
|
|---|
| 349 | MHTimeDiffTheta *dtimetheta = (MHTimeDiffTheta*)parlist.FindObject("EffOnTheta");
|
|---|
| 350 | /*
|
|---|
| 351 | dtimetime->DrawClone();
|
|---|
| 352 | dtimetheta->DrawClone();
|
|---|
| 353 | */
|
|---|
| 354 |
|
|---|
| 355 |
|
|---|
| 356 | //....................................
|
|---|
| 357 | // calculate effective on time for different intervals in time
|
|---|
| 358 | // and for different intervals in Theta
|
|---|
| 359 | MHEffOnTimeTime effontime;
|
|---|
| 360 | MHEffOnTimeTheta effontheta;
|
|---|
| 361 | effontime.SetupFill(&parlist);
|
|---|
| 362 | effontheta.SetupFill(&parlist);
|
|---|
| 363 |
|
|---|
| 364 | effontime.Calc(dtimetime->GetHist());
|
|---|
| 365 | effontheta.Calc(dtimetheta->GetHist());
|
|---|
| 366 |
|
|---|
| 367 | // plot effective on time versus time
|
|---|
| 368 | // and versus Theta
|
|---|
| 369 |
|
|---|
| 370 | effontime.DrawClone();
|
|---|
| 371 | effontheta.DrawClone();
|
|---|
| 372 |
|
|---|
| 373 |
|
|---|
| 374 |
|
|---|
| 375 | //----------------------------------------------------------------------
|
|---|
| 376 | // 3D-plots of alpha, E_est and time
|
|---|
| 377 | // and of alpha, E_est and Theta
|
|---|
| 378 | // with alpha calculated relative to the source position
|
|---|
| 379 | // and relative to the anti-source position
|
|---|
| 380 |
|
|---|
| 381 | MHAlphaEnergyTime *evtsptime = (MHAlphaEnergyTime*)parlist.FindObject("FluxSrcTime");
|
|---|
| 382 | MHAlphaEnergyTime *evtasptime = (MHAlphaEnergyTime*)parlist.FindObject("FluxASrcTime");
|
|---|
| 383 | MHAlphaEnergyTheta *evtsptheta = (MHAlphaEnergyTheta*)parlist.FindObject("FluxSrcTheta");
|
|---|
| 384 | MHAlphaEnergyTheta *evtasptheta = (MHAlphaEnergyTheta*)parlist.FindObject("FluxASrcTheta");
|
|---|
| 385 |
|
|---|
| 386 | /* this test shows that the addresses
|
|---|
| 387 | 'evtsptime' and '&evtspobj' are identical
|
|---|
| 388 | MHAlphaEnergyTime &evtspobj = *(MHAlphaEnergyTime*)parlist.FindObject("FluxSrcTime");
|
|---|
| 389 | cout << "evtsptime = " << evtsptime << endl;
|
|---|
| 390 | cout << "&evtspobj = " << &evtspobj << endl;
|
|---|
| 391 | */
|
|---|
| 392 |
|
|---|
| 393 | /*
|
|---|
| 394 | evtsptime->SetTitle("3D-plot Al-En-time, alpha\_{asp} .gt. alpha\_0");
|
|---|
| 395 | evtsptime->DrawClone();
|
|---|
| 396 | evtasptime->SetTitle("3D-plot Al-En-time, alpha\_{sp} .gt. alpha\_0");
|
|---|
| 397 | evtasptime->DrawClone();
|
|---|
| 398 |
|
|---|
| 399 | evtsptheta->SetTitle("3D-plot Al-En-Theta, alpha\_{asp} .gt. alpha\_0");
|
|---|
| 400 | evtsptheta->DrawClone();
|
|---|
| 401 | evtasptheta->SetTitle("3D-plot Al-En-Theta, alpha\_{sp} .gt. alpha\_0");
|
|---|
| 402 | evtasptheta->DrawClone();
|
|---|
| 403 | */
|
|---|
| 404 |
|
|---|
| 405 |
|
|---|
| 406 | //----------------------------------------------------------------------
|
|---|
| 407 | // Difference between source and antisource (= 'gamma' sample)
|
|---|
| 408 | // for 3D-plots of alpha, E_est and time
|
|---|
| 409 | // and of alpha, E_est and Theta
|
|---|
| 410 |
|
|---|
| 411 | MHAlphaEnergyTime gammatime("Al-En-time","3D-plot Al-En-time");
|
|---|
| 412 | MHAlphaEnergyTheta gammatheta("Al-En-Theta","3D-plot Al-En-Theta");
|
|---|
| 413 |
|
|---|
| 414 | gammatime.SetupFill(&parlist);
|
|---|
| 415 | gammatime.Subtract(evtsptime, evtasptime);
|
|---|
| 416 | gammatheta.SetupFill(&parlist);
|
|---|
| 417 | gammatheta.Subtract(evtsptheta, evtasptheta);
|
|---|
| 418 |
|
|---|
| 419 |
|
|---|
| 420 | /*
|
|---|
| 421 | gammatime.SetTitle("3D-plot Al-En-time for \'gamma\' sample");
|
|---|
| 422 | gammatime.DrawClone();
|
|---|
| 423 |
|
|---|
| 424 | gammatheta.SetTitle("3D-plot Al-En-Theta for \'gamma\' sample");
|
|---|
| 425 | gammatheta.DrawClone();
|
|---|
| 426 | */
|
|---|
| 427 |
|
|---|
| 428 | //----------------------------------------------------------------------
|
|---|
| 429 | // get number of 'gammas' in the alpha range (lo, up) as a function of
|
|---|
| 430 | // E_est and time
|
|---|
| 431 | // or E_est and Theta
|
|---|
| 432 |
|
|---|
| 433 | Axis_t lo = -10;
|
|---|
| 434 | Axis_t up = 10;
|
|---|
| 435 |
|
|---|
| 436 | // TH2D &evttime = *gammatime.GetAlphaProjection (lo, up);
|
|---|
| 437 | // TH2D &evttheta = *gammatheta.GetAlphaProjection(lo, up);
|
|---|
| 438 |
|
|---|
| 439 | TH2D *evttime = gammatime.DrawAlphaProjection (lo, up);
|
|---|
| 440 | TH2D *evttheta = gammatheta.DrawAlphaProjection(lo, up);
|
|---|
| 441 |
|
|---|
| 442 |
|
|---|
| 443 | //----------------------------------------------------------------------
|
|---|
| 444 | // plot migration matrix: E-true E-est Theta
|
|---|
| 445 |
|
|---|
| 446 | parlist.FindObject("MHMcEnergyMigration")->DrawClone();
|
|---|
| 447 |
|
|---|
| 448 | return;
|
|---|
| 449 |
|
|---|
| 450 | //----------------------------------------------------------------------
|
|---|
| 451 | for (int i=1; i<=binstime.GetNumBins(); i++)
|
|---|
| 452 | {
|
|---|
| 453 | if (effontime.GetHist()->GetBinContent(i)==0)
|
|---|
| 454 | continue;
|
|---|
| 455 |
|
|---|
| 456 | TH1D &hist = *evttime.ProjectionX("Number of Gammas vs. EnergyEst for a fixed time", i, i);
|
|---|
| 457 |
|
|---|
| 458 | /* UNFOLDING */
|
|---|
| 459 |
|
|---|
| 460 | //hist->Divide(collareatime);
|
|---|
| 461 | hist.Scale(1./effontime.GetHist()->GetBinContent(i));
|
|---|
| 462 |
|
|---|
| 463 | for (int j=1; j<=binse.GetNumBins(); j++)
|
|---|
| 464 | hist.SetBinContent(j, hist.GetBinContent(j)/hist.GetBinWidth(j));
|
|---|
| 465 |
|
|---|
| 466 | hist.SetName("Flux");
|
|---|
| 467 | hist.SetTitle("Flux[Gammas/s/m^2/GeV] vs. EnergyTrue for a fixed Time");
|
|---|
| 468 |
|
|---|
| 469 | char n[100];
|
|---|
| 470 | sprintf(n, "Canv%d", j);
|
|---|
| 471 | c= new TCanvas(n, "Title");
|
|---|
| 472 | /*
|
|---|
| 473 | hist.DrawCopy();
|
|---|
| 474 | */
|
|---|
| 475 | }
|
|---|
| 476 |
|
|---|
| 477 | delete &evttime;
|
|---|
| 478 | delete &evttheta;
|
|---|
| 479 |
|
|---|
| 480 | return;
|
|---|
| 481 |
|
|---|
| 482 | // ------------------------------------------
|
|---|
| 483 |
|
|---|
| 484 | MHMcCollectionArea carea;
|
|---|
| 485 | TH1D *collareatime = carea.GetHist(); // FIXME!
|
|---|
| 486 | TH1D *collareatheta = carea.GetHist(); // FIXME!
|
|---|
| 487 | }
|
|---|
| 488 | //===========================================================================
|
|---|
| 489 |
|
|---|
| 490 |
|
|---|