Ignore:
Timestamp:
02/15/09 23:12:04 (16 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mjobs/MJSpectrum.cc

    r9335 r9343  
    6464
    6565// Spectrum
    66 #include "../mhflux/MAlphaFitter.h"
    67 #include "../mhflux/MHAlpha.h"
    68 #include "../mhflux/MHCollectionArea.h"
    69 #include "../mhflux/MHEnergyEst.h"
    70 #include "../mhflux/MMcSpectrumWeight.h"
     66#include "MAlphaFitter.h"
     67#include "MHAlpha.h"
     68#include "MHCollectionArea.h"
     69#include "MHEnergyEst.h"
     70#include "MMcSpectrumWeight.h"
     71#include "MHEffectiveOnTime.h"
    7172
    7273// Eventloop
     
    9192MJSpectrum::MJSpectrum(const char *name, const char *title)
    9293    : fCutQ(0), fCut0(0),fCut1(0), fCut2(0), fCut3(0), fCutS(0),
    93     fEstimateEnergy(0), fCalcHadronness(0),  fCalcDisp(0), fForceTheta(kFALSE)
     94    fEstimateEnergy(0), fCalcHadronness(0),  fCalcDisp(0),
     95    fForceTheta(kFALSE), fForceRunTime(kFALSE), fForceOnTimeFit(kFALSE)
    9496{
    9597    fName  = name  ? name  : "MJSpectrum";
     
    296298        return -1;
    297299
     300    // We don't have to proceed. We later overwrite the result anyway
     301    if (fForceOnTimeFit)
     302        return 0;
     303
    298304    const Double_t ufl = vstime->GetBinContent(0);
    299305    const Double_t ofl = vstime->GetBinContent(vstime->GetNbinsX()+1);
     
    750756    MFillH fill2(Form("HistE    [%s]", cls.Data()), "", "FillHistE");
    751757
     758    // Fill a new MHEffectiveOnTime. It can either be used to
     759    // re-calculate the on-time or just for manual cross check
     760    MFillH fillT("MHEffectiveOnTime", "MTime", "FillOnTime");
     761    fillT.SetNameTab("OnTime");
     762
    752763    MFDataMember f0("DataType.fVal", '<', 0.5, "FilterOffData");
    753764    MFDataMember f1("DataType.fVal", '>', 0.5, "FilterOnData");
     
    755766    fill1.SetFilter(&f0);
    756767    fill2.SetFilter(&f1);
     768    fillT.SetFilter(&f1);
    757769
    758770    tlist.AddToList(&read);
    759771    //tlist.AddToList(&taskenv0); // not necessary, stored in file!
    760772    //tlist.AddToList(&taskenv1); // not necessary, stored in file!
     773    tlist.AddToList(&f1);
     774    tlist.AddToList(&fillT);
    761775    tlist.AddToList(fCutS);
    762776    tlist.AddToList(&taskenv2);
    763777    tlist.AddToList(&f0);
    764     tlist.AddToList(&f1);
    765778    tlist.AddToList(&fill1);
    766779    tlist.AddToList(&fill2);
     
    15451558    // Read from the ganymed file
    15461559    TH1D htheta, size;
    1547     const Float_t ontime = ReadInput(plist, htheta, size);
     1560    Float_t ontime = ReadInput(plist, htheta, size);
    15481561    if (ontime<0)
    15491562    {
     
    15621575    }
    15631576    plist.AddToList(&bins2); // For later use in MC processing
     1577
     1578    // -------------- Fill excess events versus energy ---------------
     1579
     1580    TH1D excess;
     1581
     1582    if (fForceOnTimeFit)
     1583    {
     1584        // Refill excess histogram to determine the excess events
     1585        // If we use the eff. on-time fit we have to loop over the data first
     1586        // This is not really desired, because if something is wrong with
     1587        // the Monte Carlos the program runs quite long before it fails
     1588        if (!Refill(plist, excess))
     1589            return kFALSE;
     1590
     1591        // Print the setup and result of the MAlphaFitter, print used cuts
     1592        PrintSetup(fit);
     1593
     1594        // ------------ On user request redo eff. on-time fit ------------
     1595        const MHEffectiveOnTime *htime = (MHEffectiveOnTime*)plist.FindObject("MHEffectiveOnTime");
     1596        if (!htime)
     1597        {
     1598            // This should never happen, bt you never know
     1599            *fLog << err;
     1600            *fLog << "ERROR - Use of new effective on-time fit requested for on-time determination," << endl;
     1601            *fLog << "        but MHEffectiveOnTime not found in parameter list... aborting." << endl;
     1602            return kFALSE;
     1603        }
     1604
     1605        const TH1D &h = htime->GetHEffOnTheta();
     1606        /*
     1607        if (!htime->IsConsistent() || h.GetNbinsX()!=htheta.GetNbinsX())
     1608        {
     1609            *fLog << err << "ERROR - Effective on-time from newly filles MHEffectiveOnTime (Tab='OnTime) invalid... aborting." << endl;
     1610            return kFALSE;
     1611        }*/
     1612
     1613        *fLog << inf;
     1614        *fLog << "Using eff. on-time from new MHEffectiveOnTime (see also 'OnTime')" << endl;
     1615        *fLog << "   Orig. value: " << ontime << "s" << endl;
     1616
     1617        // Copy ontime from newly filled and fitted eff on-time histogram
     1618        ontime = htime->GetEffOnTime();
     1619
     1620        *fLog << "   New   value: " << ontime << "s" << endl;
     1621
     1622        h.Copy(htheta);           // Copy contents of newly filled hist into on-time vs. theta
     1623        htheta.SetName("Theta");  // Copy overwrites the name needed in DisplayResult
     1624        htheta.SetDirectory(0);   // Remove from global directory added by SetName
     1625    }
     1626
     1627    // ---------------------------------------------------------------
    15641628
    15651629    // Initialize weighting to a new spectrum as defined in the resource file
     
    16121676        return kFALSE;
    16131677
    1614     // -------------- Fill excess events versus energy ---------------
    1615 
    16161678    // Refill excess histogram to determine the excess events
    1617     TH1D excess;
    1618     if (!Refill(plist, excess))
    1619         return kFALSE;
    1620 
    1621     // Print the setup and result of the MAlphaFitter, print used cuts
    1622     PrintSetup(fit);
    1623 
     1679    if (!fForceOnTimeFit)
     1680    {
     1681        if (!Refill(plist, excess))
     1682            return kFALSE;
     1683
     1684        // Print the setup and result of the MAlphaFitter, print used cuts
     1685        PrintSetup(fit);
     1686    }
    16241687
    16251688    // ------------------------- Final loop --------------------------
     
    17681831    fillsp.SetWeight();
    17691832
    1770     // Try to find the class used to determine the signal!
    17711833    // FIXME: To be done: A task checking the lower 1% after the lower
    17721834    // energy limit!
     
    17891851        return kFALSE;
    17901852    par->SetVal(2);
     1853
     1854    // Not really necessary but for sanity
     1855    TObject *cam = plist.FindObject("MSrcPosCam");
     1856    if (cam)
     1857        cam->Clear();
    17911858
    17921859    tlist2.AddToList(&read);
Note: See TracChangeset for help on using the changeset viewer.