Ignore:
Timestamp:
04/15/04 19:54:59 (21 years ago)
Author:
gaug
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/macros/pedphotcalc.C

    r3438 r3760  
    2626!
    2727\* ======================================================================== */
    28 
     28/////////////////////////////////////////////////////////////////////////////
     29//
     30//  pedphotcalc.C
     31//
     32//  This macro is an example of the use of MPedPhotCalc. It computes
     33//  the pedestal mean and rms from pedestal files undergoing the
     34//  signal extraction + calibration chain, in units of photons. It
     35//  produces plots of the relevant computed quantities.
     36//
     37//  Needs as arguments the run number of a pedestal file ("*_P_*.root"),
     38//  one of a calibration file ("*_C_*.root").
     39//  performs the pedestal calculation, the calibration
     40/// constants calculation and the calibration of the pedestals.
     41//
     42//  The TString inpath has to be set correctly.
     43//
     44//  The macro searches for the pulser colour which corresponds to the calibration
     45//  run number. If the run number is smaller than 20000, pulser colour "CT1"
     46//  is assumed, otherwise, it searches for the strings "green", "blue", "uv" or
     47//  "ct1" in the filenames. If no colour or multiple colours are found, the
     48//  execution is aborted. 
     49//
     50////////////////////////////////////////////////////////////////////////////////////
    2951#include "MParList.h"
    3052#include "MTaskList.h"
     53#include "MJPedestal.h"
     54#include "MJCalibration.h"
    3155#include "MPedestalCam.h"
     56#include "MPedestalPix.h"
    3257#include "MReadMarsFile.h"
    3358#include "MGeomApply.h"
    34 #include "MPedCalcPedRun.h"
    3559#include "MGeomCamMagic.h"
    3660#include "MEvtLoop.h"
     61#include "MCalibrationCam.h"
    3762#include "MCalibrationChargeCam.h"
    38 #include "MHCalibrationChargeCam.h"
    39 #include "MCalibrationChargePINDiode.h"
    40 #include "MHCalibrationChargePINDiode.h"
    41 #include "MCalibrationChargeBlindPix.h"
    42 #include "MHCalibrationChargeBlindPix.h"
    43 #include "MCalibrationChargeCalc.h"
     63#include "MCalibrationChargePix.h"
     64#include "MCalibrationQECam.h"
     65#include "MCalibrationQEPix.h"
    4466#include "MExtractedSignalCam.h"
    4567#include "MExtractSignal.h"
    46 #include "MExtractedSignalPINDiode.h"
    47 #include "MExtractPINDiode.h"
    48 #include "MExtractedSignalBlindPixel.h"
    49 #include "MExtractBlindPixel.h"
    5068#include "MCerPhotEvt.h"
    5169#include "MCalibrate.h"
    5270#include "MPedPhotCalc.h"
    5371#include "MPedPhotCam.h"
    54 #include "MBadPixelsCam.h"
     72#include "MPedPhotPix.h"
     73#include "MHCamera.h"
     74#include "MRunIter.h"
     75#include "MDirIter.h"
     76#include "MStatusDisplay.h"
    5577#include "MHCamera.h"
    5678
     
    5880#include "TString.h"
    5981#include "TCanvas.h"
    60 
    61 #include <iostream>
    62 
    63 
    64 const TString pedfile="/disc02/Data/rootdata/Miscellaneous/2003_12_19/20031218_03522_P_Park_E.root";
    65 const TString calfile="/disc02/Data/rootdata/Miscellaneous/2003_12_19/20031218_03527_C_Park_E.root";
    66 
    67 void pedphotcalc(TString pedname=pedfile,TString calname=calfile)
     82#include "TStyle.h"
     83#include "TF1.h"
     84#include "TLegend.h"
     85
     86#include <iostream.h>
     87#include "Getline.h"
     88
     89const TString inpath = "/mnt/Data/rootdata/CrabNebula/2004_02_10/";
     90const Int_t dpedrun  = 14607;
     91const Int_t dcalrun1 = 14608;
     92const Int_t dcalrun2 = 0;
     93const Bool_t usedisplay = kTRUE;
     94
     95static MCalibrationCam::PulserColor_t FindColor(MDirIter* run)
    6896{
    6997 
    70   /*
    71     This macro is an example of the use of MPedPhotCalc. It computes
    72     the pedestal mean and rms from pedestal files undergoing the
    73     signal extraction + calibration chain, in units of photons. It
    74     produces plots of the relevant computed quantities.
    75   */
    76  
     98  MCalibrationCam::PulserColor_t col = MCalibrationCam::kNONE;
     99
     100  TString filenames;
     101
     102  while (!(filenames=run->Next()).IsNull())
     103    {
     104
     105      filenames.ToLower();
     106
     107      if (filenames.Contains("green"))
     108        if (col == MCalibrationCam::kNONE)
     109          {
     110            cout << "Found colour: Green  in " << filenames << endl;
     111            col = MCalibrationCam::kGREEN;
     112          }
     113        else if (col != MCalibrationCam::kGREEN)
     114          {
     115            cout << "Different colour found in " << filenames << "... abort" << endl;
     116            return MCalibrationCam::kNONE;
     117          }
     118
     119      if (filenames.Contains("blue"))
     120        if (col == MCalibrationCam::kNONE)
     121          {
     122            cout << "Found colour: Blue  in " << filenames << endl;
     123            col = MCalibrationCam::kBLUE;
     124          }
     125        else if (col != MCalibrationCam::kBLUE)
     126          {
     127            cout << "Different colour found in " << filenames << "... abort" << endl;
     128            return MCalibrationCam::kNONE;
     129          }
     130
     131      if (filenames.Contains("uv"))
     132        if (col == MCalibrationCam::kNONE)
     133          {
     134            cout << "Found colour: Uv  in " << filenames << endl;
     135            col = MCalibrationCam::kUV;
     136          }
     137        else if (col != MCalibrationCam::kUV)
     138          {
     139            cout << "Different colour found in " << filenames << "... abort" << endl;
     140            return MCalibrationCam::kNONE;
     141          }
     142
     143      if (filenames.Contains("ct1"))
     144        if (col == MCalibrationCam::kNONE)
     145          {
     146            cout << "Found colour: Ct1  in " << filenames << endl;
     147            col = MCalibrationCam::kCT1;
     148          }
     149        else if (col != MCalibrationCam::kCT1)
     150          {
     151            cout << "Different colour found in " << filenames << "... abort" << endl;
     152            return MCalibrationCam::kNONE;
     153          }
     154     
     155    }
     156 
     157
     158     
     159  if (col == MCalibrationCam::kNONE)
     160    cout <<  "No colour found in filenames of runs: " << ((MRunIter*)run)->GetRunsAsString()
     161         << "... abort" << endl;
     162 
     163  return col;     
     164}
     165
     166
     167
     168void DrawProjection(MHCamera *obj1, Int_t fit)
     169{
     170    TH1D *obj2 = (TH1D*)obj1->Projection(obj1->GetName());
     171    obj2->SetDirectory(0);
     172    obj2->Draw();
     173    obj2->SetBit(kCanDelete);
     174    gPad->SetLogy();
     175
     176    if (obj1->GetGeomCam().InheritsFrom("MGeomCamMagic"))
     177    {
     178        TArrayI s0(3);
     179        s0[0] = 6;
     180        s0[1] = 1;
     181        s0[2] = 2;
     182
     183        TArrayI s1(3);
     184        s1[0] = 3;
     185        s1[1] = 4;
     186        s1[2] = 5;
     187
     188        TArrayI inner(1);
     189        inner[0] = 0;
     190
     191        TArrayI outer(1);
     192        outer[0] = 1;
     193
     194        // Just to get the right (maximum) binning
     195        TH1D *half[4];
     196        half[0] = obj1->ProjectionS(s0, inner, "Sector 6-1-2 Inner");
     197        half[1] = obj1->ProjectionS(s1, inner, "Sector 3-4-5 Inner");
     198        half[2] = obj1->ProjectionS(s0, outer, "Sector 6-1-2 Outer");
     199        half[3] = obj1->ProjectionS(s1, outer, "Sector 3-4-5 Outer");
     200
     201        for (int i=0; i<4; i++)
     202        {
     203            half[i]->SetLineColor(kRed+i);
     204            half[i]->SetDirectory(0);
     205            half[i]->SetBit(kCanDelete);
     206            half[i]->Draw("same");
     207        }
     208    }
     209
     210    const Double_t min   = obj2->GetBinCenter(obj2->GetXaxis()->GetFirst());
     211    const Double_t max   = obj2->GetBinCenter(obj2->GetXaxis()->GetLast());
     212    const Double_t integ = obj2->Integral("width")/2.5066283;
     213    const Double_t mean  = obj2->GetMean();
     214    const Double_t rms   = obj2->GetRMS();
     215    const Double_t width = max-min;
     216
     217    if (rms==0 || width==0)
     218        return;
     219
     220    const TString dgausformula("([0]-[3])/[2]*exp(-0.5*(x-[1])*(x-[1])/[2]/[2])"
     221                               "+[3]/[5]*exp(-0.5*(x-[4])*(x-[4])/[5]/[5])");
     222
     223    TF1 *f=0;
     224    switch (fit)
     225    {
     226        // FIXME: MAYBE add function to TH1?
     227    case 0:
     228        f = new TF1("sgaus", "gaus(0)", min, max);
     229        f->SetLineColor(kYellow);
     230        f->SetBit(kCanDelete);
     231        f->SetParNames("Area", "#mu", "#sigma");
     232        f->SetParameters(integ/rms, mean, rms);
     233        f->SetParLimits(0, 0,   integ);
     234        f->SetParLimits(1, min, max);
     235        f->SetParLimits(2, 0,   width/1.5);
     236        obj2->Fit(f, "QLRM");
     237        break;
     238
     239    case 1:
     240        f = new TF1("dgaus", dgausformula, min, max);
     241        f->SetLineColor(kYellow);
     242        f->SetBit(kCanDelete);
     243        f->SetParNames("A_{tot}", "#mu_{1}", "#sigma_{1}", "A_{2}", "#mu_{2}", "#sigma_{2}");
     244        f->SetParameters(integ,         (min+mean)/2, width/4,
     245                         integ/width/2, (max+mean)/2, width/4);
     246        // The left-sided Gauss
     247        f->SetParLimits(0, integ-1.5,      integ+1.5);
     248        f->SetParLimits(1, min+(width/10), mean);
     249        f->SetParLimits(2, 0,              width/2);
     250        // The right-sided Gauss
     251        f->SetParLimits(3, 0,    integ);
     252        f->SetParLimits(4, mean, max-(width/10));
     253        f->SetParLimits(5, 0,    width/2);
     254        obj2->Fit(f, "QLRM");
     255        break;
     256
     257    default:
     258        obj2->Fit("gaus", "Q");
     259        obj2->GetFunction("gaus")->SetLineColor(kYellow);
     260        break;
     261    }
     262}
     263
     264void CamDraw(TCanvas &c, Int_t x, Int_t y, MHCamera &cam1, Int_t fit)
     265{
     266    c.cd(x);
     267    gPad->SetBorderMode(0);
     268    MHCamera *obj1=(MHCamera*)cam1.DrawCopy("hist");
     269
     270    c.cd(x+y);
     271    gPad->SetBorderMode(0);
     272    obj1->Draw();
     273
     274    c.cd(x+2*y);
     275    gPad->SetBorderMode(0);
     276    DrawProjection(obj1, fit);
     277}
     278
     279void pedphotcalc(const Int_t prun=dpedrun, // pedestal file
     280                 const Int_t crun1=dcalrun1, const Int_t crun2=dcalrun2 // calibration file(s)
     281                 )
     282{
     283 
     284  MRunIter pruns;
     285  MRunIter cruns;
     286
     287  pruns.AddRun(prun,inpath);
     288
     289  if (crun2==0)
     290    cruns.AddRun(crun1,inpath);
     291  else
     292    cruns.AddRuns(crun1,crun2,inpath);
     293
     294  MCalibrationCam::PulserColor_t color;
     295
     296  if (crun1 < 20000)
     297    color = MCalibrationCam::kCT1;
     298  else
     299    color = FindColor((MDirIter*)&cruns);
     300
     301  if (color == MCalibrationCam::kNONE)
     302    {
     303      TTimer timer("gSystem->ProcessEvents();", 50, kFALSE);
     304     
     305      while (1)
     306        {
     307          timer.TurnOn();
     308          TString input = Getline("Could not find the correct colour: Type 'q' to exit, "
     309                                  "green, blue, uv or ct1 to go on: ");
     310          timer.TurnOff();
     311         
     312          if (input=="q\n")
     313            return ;
     314         
     315          if (input=="green")
     316            color = MCalibrationCam::kGREEN;
     317          if (input=="blue")
     318            color = MCalibrationCam::kBLUE;
     319          if (input=="uv")
     320            color = MCalibrationCam::kUV;
     321          if (input=="ct1")
     322            color = MCalibrationCam::kCT1;
     323        }
     324    }
     325
     326  //
     327  // Now setup the tasks and tasklist for the pedestals:
     328  // ---------------------------------------------------
     329  //
     330  MGeomCamMagic     geomcam;
     331  MGeomApply        geomapl;
     332  MStatusDisplay   *display = NULL;
     333
    77334  /************************************/
    78335  /* FIRST LOOP: PEDESTAL COMPUTATION */
    79336  /************************************/
    80337 
    81   MParList plist;
    82   MTaskList tlist;
    83   plist.AddToList(&tlist);
    84  
    85   // containers
    86   MPedestalCam   pedcam;
    87   plist.AddToList(&pedcam);
    88    
    89   //tasks
    90   MReadMarsFile read("Events", pedname);
    91   MGeomApply     geomapl;
    92   MPedCalcPedRun pedcalc;
    93   MGeomCamMagic  geomcam;
    94 
    95   read.DisableAutoScheme();
    96    
    97   tlist.AddToList(&read);
    98   tlist.AddToList(&geomapl);
    99   tlist.AddToList(&pedcalc);
    100  
    101   // Create and execute the event looper
    102   MEvtLoop evtloop;
    103   evtloop.SetParList(&plist);
     338  MJPedestal pedloop;
     339  pedloop.SetInput(&pruns);
     340  if (usedisplay)
     341    {
     342      display = new MStatusDisplay;
     343      display->SetUpdateTime(3000);
     344      display->Resize(850,700);
     345      display->SetBit(kCanDelete);
     346      pedloop.SetDisplay(display);
     347    }
    104348 
    105349  cout << "*************************" << endl;
    106350  cout << "** COMPUTING PEDESTALS **" << endl;
    107351  cout << "*************************" << endl;
    108   if (!evtloop.Eventloop())
     352
     353  if (!pedloop.Process())
    109354    return;
    110  
    111   tlist.PrintStatistics();
     355
     356  MPedestalCam pedcam = pedloop.GetPedestalCam();
    112357
    113358  /****************************/
     
    115360  /****************************/
    116361 
    117   MParList  plist2;
    118   MTaskList tlist2;
    119   plist2.AddToList(&tlist2);
    120  
    121   // containers 
    122   MCalibrationChargeCam calcam;
    123   MExtractedSignalCam   sigcam;
    124   MBadPixelsCam         badcam;
    125 
    126   MCalibrationChargeCam        chargecam;
    127   MCalibrationChargePINDiode   chargepin;
    128   MCalibrationChargeBlindPixel chargeblind;
    129   chargeblind.SetColor(MCalibrationChargeBlindPix::kECT1);
    130   chargepin.SetColor(  MCalibrationChargePINDiode::kECT1);
    131   //
    132   plist2.AddToList(&geomcam);
    133   plist2.AddToList(&pedcam);
    134   plist2.AddToList(&calcam);
    135   plist2.AddToList(&sigcam);
    136   plist2.AddToList(&badcam); 
    137   plist2.AddToList(&chargecam);
    138   plist2.AddToList(&chargepin); 
    139   plist2.AddToList(&chargeblind); 
    140 
    141   //tasks
    142   MReadMarsFile read2("Events", calname);
    143   read2.DisableAutoScheme();
    144  
    145   MExtractPINDiode       pincalc;
    146   MExtractBlindPixel     blindcalc;
    147   MExtractSignal         sigcalc;
    148   MCalibrationChargeCalc calcalc;
    149  
    150   MFillH fillpin("MHCalibrationChargePINDiode",     "MExtractedSignalPINDiode");
    151   MFillH fillblind("MHCalibrationChargeBlindPixel", "MExtractedSignalBlindPixel");
    152   MFillH fillcam("MHCalibrationChargeCam"     ,     "MExtractedSignalCam");
    153   //
    154   // Apply a filter against cosmics
    155   // (was directly in MCalibrationChargeCalc in earlier versions)
    156   //
    157   MFCosmics            cosmics;
    158   MContinue            cont(&cosmics);
    159 
    160   tlist2.AddToList(&read2);
    161   tlist2.AddToList(&geomapl);
    162   tlist2.AddToList(&blindcalc);
    163   tlist2.AddToList(&pincalc);
    164   tlist2.AddToList(&sigcalc);
    165   //
    166   // In case, you want to skip the cosmics rejection,
    167   // uncomment the next line
    168   //
    169   tlist2.AddToList(&cont);
    170   //
    171   tlist2.AddToList(&fillpin);
    172   tlist2.AddToList(&fillblind);
    173   tlist2.AddToList(&fillcam);
    174   tlist2.AddToList(&calcalc);
    175  
    176   // Execute second loop (calibration)
    177   MEvtLoop evtloop2;
    178   evtloop2.SetParList(&plist2);
     362  //
     363  // Now setup the new tasks for the calibration:
     364  // ---------------------------------------------------
     365  //
     366  MJCalibration     calloop;
     367  calloop.SetColor(color);
     368  calloop.SetInput(&cruns);
     369  //
     370  // Use as signal extractor MExtractSignal:
     371  //
     372  calloop.SetExtractorLevel(1);
     373  //
     374  // The next two commands are for the display:
     375  //
     376  if (usedisplay)
     377    {
     378      calloop.SetDisplay(display);
     379      calloop.SetDataCheck();
     380    }
    179381 
    180382  cout << "***********************************" << endl;
    181383  cout << "** COMPUTING CALIBRATION FACTORS **" << endl;
    182384  cout << "***********************************" << endl;
    183   if (!evtloop2.Eventloop())
     385
     386  if (!calloop.Process(pedcam))
    184387    return;
    185388 
    186   tlist2.PrintStatistics();
    187 
    188  
     389  MCalibrationChargeCam &calcam = calloop.GetCalibrationCam();
     390  MCalibrationQECam     &qecam  = calloop.GetQECam();
     391
    189392  /************************************************************************/
    190393  /* THIRD LOOP: PEDESTAL COMPUTATION USING EXTRACTED SIGNAL (IN PHOTONS) */
     
    202405 
    203406  plist3.AddToList(&geomcam);
    204   plist3.AddToList(&pedcam);
    205   plist3.AddToList(&calcam);
     407  plist3.AddToList(&pedcam );
     408  plist3.AddToList(&calcam );
     409  plist3.AddToList(&qecam  );
    206410  plist3.AddToList(&photcam);
    207411  plist3.AddToList(&extedsig);
     
    209413 
    210414  //tasks
    211   MReadMarsFile read3("Events", pedname);
     415  MReadMarsFile read3("Events");
     416  read3.DisableAutoScheme();
     417  static_cast<MRead&>(read3).AddFiles(pruns); 
     418
     419  MExtractSignal  sigcalc;
    212420  MCalibrate      photcalc;
     421  photcalc.SetCalibrationMode(MCalibrate::kFfactor);
    213422  MPedPhotCalc    pedphotcalc; 
    214423
    215   read3.DisableAutoScheme();
    216  
    217424  tlist3.AddToList(&read3);
    218425  tlist3.AddToList(&geomapl);
     
    233440  tlist3.PrintStatistics();
    234441
    235 
    236442  /**********************/
    237443  /* PRODUCE NICE PLOTS */
    238444  /**********************/
    239445
     446  if (usedisplay)
     447    {
     448     
     449      MHCamera disp0(geomcam, "MPedPhotCam;ped", "Pedestals");
     450      MHCamera disp1(geomcam, "MPedPhotCam;rms", "Sigma Pedestal");
     451     
     452      disp0.SetCamContent(pedphotcam, 0);
     453      disp0.SetCamError  (pedphotcam, 1);
     454     
     455      disp1.SetCamContent(pedphotcam, 1);
     456     
     457      disp0.SetYTitle("Pedestal signal [photons]");
     458      disp1.SetYTitle("Pedestal signal RMS [photons]");
     459     
     460      //
     461      // Display data
     462      //
     463      TCanvas &c1 = display->AddTab("PedPhotCam");
     464      c1.Divide(2,3);
     465     
     466      CamDraw(c1, 1, 2, disp0, 0);
     467      CamDraw(c1, 2, 2, disp1, 1);
     468     
     469    }
     470 
     471
     472#if 0
    240473  const UShort_t npix = 577;
    241474
     
    250483  TH1F* calhist    = new TH1F("calhist","Calibration factors",npix,0,npix);
    251484  TH1F* caldist    = new TH1F("caldist","Calibration factors",100,0,1);
     485  TH1F* qehist     = new TH1F("qehist", "Quantrum efficiencies",npix,0,npix);
     486  TH1F* qedist     = new TH1F("qedist", "Quantrum efficiencies",100,0,1);
    252487
    253488  // pedestal signals
     
    260495  for(int i=0;i<npix;i++)
    261496    {
     497      MCalibrationChargePix &calpix = (MCalibrationChargePix&)calcam[i];
     498      MCalibrationQEPix     &qepix  = (MCalibrationQEPix&)    qecam[i];
     499
    262500      const Float_t ped        = pedcam[i].GetPedestal();
    263501      const Float_t pedrms     = pedcam[i].GetPedestalRms();
    264       const Float_t cal        = calcam[i].GetMeanConversionBlindPixelMethod();
    265       const Float_t calerr     = calcam[i].GetErrorConversionBlindPixelMethod();
     502      const Float_t cal        = calpix.GetMeanConvFADC2Phe();
     503      const Float_t qe         = qepix .GetQECascadesFFactor();
    266504      const Float_t pedphot    = pedphotcam[i].GetMean();
    267505      const Float_t pedphotrms = pedphotcam[i].GetRms();
     
    274512      calhist->Fill(i,cal);
    275513      caldist->Fill(cal);
     514      qehist->Fill(i,qe);
     515      qedist->Fill(qe);
    276516
    277517      pedphothist->Fill(i,pedphot);
     
    287527  canvas->SetBorderMode(0);    // Delete the Canvas' border line     
    288528  canvas->cd();
    289   canvas->SetBorderMode(0);
    290      
    291   canvas->Divide(2,4);
     529
     530  canvas->Divide(2,5);
    292531
    293532  // draw pedestal histo
     
    322561  pedrmsdist->Draw("same");
    323562
    324 
    325563  TLegend* leg2 = new TLegend(.14,.68,.39,.88);
    326564  leg2->SetHeader("");
     
    339577  calhist->SetMaximum(1);
    340578  calhist->SetMinimum(0);
    341   calhist->GetYaxis()->SetTitle("Calibration factor (photon/ADC count)");
     579  calhist->GetYaxis()->SetTitle("Calibration factor (phe/ADC count)");
    342580  calhist->SetStats(kFALSE);
    343581  calhist->Draw();
     
    347585  gPad->cd();
    348586  gPad->SetBorderMode(0);
    349   caldist->GetXaxis()->SetTitle("Calibration factor (photon/ADC count)");
     587  caldist->GetXaxis()->SetTitle("Calibration factor (phe/ADC count)");
    350588  caldist->Draw();
    351589
     590  // draw qe histo
     591  canvas->cd(5);
     592  gPad->cd();
     593  gPad->SetBorderMode(0);
     594  qehist->GetXaxis()->SetTitle("Pixel SW Id");
     595  qehist->SetMaximum(1);
     596  qehist->SetMinimum(0);
     597  qehist->GetYaxis()->SetTitle("Quantum efficiency for cascades");
     598  qehist->SetStats(kFALSE);
     599  qehist->Draw();
     600
     601  // draw qe distribution
     602  canvas->cd(6);
     603  gPad->cd();
     604  gPad->SetBorderMode(0);
     605  qedist->GetXaxis()->SetTitle("Quantum efficiency for cascades");
     606  qedist->Draw();
     607
    352608  // draw pedestal signal histo
    353   canvas->cd(5);
     609  canvas->cd(7);
    354610  gPad->cd();
    355611  gPad->SetBorderMode(0);
     
    360616
    361617  // draw pedestal signal distribution
    362   canvas->cd(6);
     618  canvas->cd(8);
    363619  gPad->cd();
    364620  gPad->SetBorderMode(0);
     
    367623
    368624  // draw pedestal signal rms histo
    369   canvas->cd(7);
     625  canvas->cd(9);
    370626  gPad->cd();
    371627  gPad->SetBorderMode(0);
     
    376632
    377633  // draw pedestal signal rms distribution
    378   canvas->cd(8);
     634  canvas->cd(10);
    379635  gPad->cd();
    380636  gPad->SetBorderMode(0);
     
    382638  pedphotrmsdist->Draw();
    383639
    384   return;
     640  canvas->SaveAs("pedphotcalc.root");
     641
     642#endif
    385643}
    386 
Note: See TracChangeset for help on using the changeset viewer.