// Author: Gero Flucke <mailto:flucke@mail.desy.de>
//____________________________________
// GFDstarRunPeriods
//   Author:      Gero Flucke
//   Date:        May 14th, 2002
//   last update: $Date: 2004/08/27 12:30:55 $  
//   by:          $Author: flucke $
//

#include <iostream>

#include <TROOT.h>
#include <TFile.h>
#include <TH1.h>
#include <TH2.h>
#include <TF1.h>
#include <TString.h>
#include <TAxis.h>
#include <TObjArray.h>

#include "GFDstarRunPeriods.h"

using namespace std;

ClassImp(GFDstarRunPeriods)

const Double_t GFDstarRunPeriods::fgStartDmSignal = 0.142501;
const Double_t GFDstarRunPeriods::fgEndDmSignal   = 0.148499;
const Double_t GFDstarRunPeriods::fgStartDmBackgr = 0.150501;
const Double_t GFDstarRunPeriods::fgEndDmBackgr   = 0.167499;

 GFDstarRunPeriods::GFDstarRunPeriods(Int_t trigger, const char* period)
{
  // period may contain '99ePlus', '2000'
  this->SetTrigger(trigger, period);
}


//____________________________________
 GFDstarRunPeriods::~GFDstarRunPeriods()
{

}

//____________________________________
 Bool_t GFDstarRunPeriods::SetTrigger(Int_t trigger, const char* period)
{
  // period may contain '99ePlus', '2000'
  TString per(period);
  if(trigger == 84){
    Int_t first = 0, last = 17;
    Double_t runsDataLumi[18]; Int_t runs[19]; Double_t prescales[18];

    // values: cf. log book 19.6.2002/13.1.2003/10.6.2004

    static Int_t count = 0;
    if(count++ < 10){
      if(count == 10) this->Warning("SetTrigger", "last show up:");
      this->Warning("SetTrigger", "outdated lumis of runperiods for ST84!");
    }
    // 99ePlus
    runsDataLumi[0] = 0.0;           runs[0] = 246156;  prescales[0] = -1.; // no YECL bank
    runsDataLumi[1] = 685.51;        runs[1] = 246605;  prescales[1] = 1.61;
    runsDataLumi[2] = 726.54;        runs[2] = 248679;  prescales[2] = 1.59;
    runsDataLumi[3] = 445.882;       runs[3] = 251080;  prescales[3] = 1.82;
    runsDataLumi[4] = 944.401;       runs[4] = 251662;  prescales[4] = 2.18;
    runsDataLumi[5] = 1839.529;      runs[5] = 253307;  prescales[5] = 1.94;
    runsDataLumi[6] = 148.403;       runs[6] = 256936;  prescales[6] = 2.30;
    runsDataLumi[7] = 860.893;       runs[7] = 258544;  prescales[7] = 1.76;
    runsDataLumi[8] = 089.864;       runs[8] = 259438;  prescales[8] = 1.76;
    // 2000
    runsDataLumi[9]  = 1252.430;     runs[9]  = 262204; prescales[9]  = 1.52;
    runsDataLumi[10] = 2235.716;     runs[10] = 263381; prescales[10] = 4.24;
    runsDataLumi[11] = 1667.577;     runs[11] = 267501; prescales[11] = 5.95;
    runsDataLumi[12] = 2563.670;     runs[12] = 271601; prescales[12] = 4.05;
    runsDataLumi[13] = 537.004;      runs[13] = 274881; prescales[13] = 6.43;
    runsDataLumi[14] = 1523.78;      runs[14] = 275801; prescales[14] = 4.92;
    runsDataLumi[15] = 558.839;      runs[15] = 277601; prescales[15] = 6.02;
    runsDataLumi[16] = 0.0;          runs[16] = 278691; prescales[16] = -1.; // sh. vertex
    runsDataLumi[17] = 123.097;      runs[17] = 278995; prescales[17] = 7.30;
                                     runs[18] = 279216;

    if(per.Contains("99eplus", TString::kIgnoreCase)) last = 8;
    if(per.Contains("2000")) first = 9;
    Int_t nPer = last - first;

    fRuns.Set(nPer + 2);   // first run numbers of different LET1 parametrisations
    fRunsDataLumi.Set(nPer + 1); // [i] is lumi for fRuns[i] => fRuns[i+1]
    fPrescales.Set(nPer + 1);

    for(Int_t i = 0; i <= nPer; ++i){
      fRunsDataLumi[i] = runsDataLumi[i+first];
      fRuns[i] = runs[i+first];
      fPrescales[i] = prescales[i+first];
    }
    fRuns[nPer+1] = runs[nPer+first+1];

    return kTRUE;
  } else if(trigger == 83){

//     ///// old starts
//     Int_t first = 0, last = 2;
//     Double_t runsDataLumi[3]; Int_t runs[4]; Double_t prescales[3];

//     // values: cf. log book 19.6.2002/13.1.2003/10.6.2004:

//     // 99ePlus
//     runsDataLumi[0] = 0.0;            runs[0] = 246156;  prescales[0] = -1.; // no YECL bank
//     runsDataLumi[1] = 12679.;         runs[1] = 246605;  prescales[1] = 1.04;
//     // 2000
//     runsDataLumi[2] = 38357.;         runs[2] = 262204; prescales[2]  = 1.20;
//                                       runs[3] = 279216;
//     //runsDataLumi[3] = 0.0;     runs[3] = 278691; prescales[3] = -1.; // sh. vertex ignored
//     if(per.Contains("99eplus", TString::kIgnoreCase)) last = 1;
//     if(per.Contains("2000")) first = 2;
//     ///// old ends
    ///// new starts

    Int_t first = 0, last = 16;
    Double_t runsDataLumi[17]; Int_t runs[18]; Double_t prescales[17];

    runsDataLumi[0]  = 0.0;       runs[0]  = 244968; prescales[0] = -1.; //no YECL
    runsDataLumi[1]  = 1.035e+03; runs[1]  = 246605; prescales[1] = 1.06;
    runsDataLumi[2]  = 1.118e+03; runs[2]  = 248679; prescales[2] = 1.04;
    runsDataLumi[3]  = 1.179e+03; runs[3]  = 251080; prescales[3] = 1.06;
    runsDataLumi[4]  = 4.399e+03; runs[4]  = 252100; prescales[4] = 1.05; 
    runsDataLumi[5]  = 3.526e+03; runs[5]  = 256000; prescales[5] = 1.02; 
    runsDataLumi[6]  = 1.440e+03; runs[6]  = 258200; prescales[6] = 1.04; 
    runsDataLumi[7]  = 0.0;       runs[7]  = 259487; prescales[7] = -1.; // min bias     
    // 2000
    runsDataLumi[8]  = 1.732e+03; runs[8]  = 262101; prescales[8] = 1.03; 
    runsDataLumi[9]  = 2.262e+03; runs[9]  = 263381; prescales[9] = 1.30; 
    runsDataLumi[10] = 5.043e+03; runs[10] = 264901; prescales[10] = 1.20;
    runsDataLumi[11] =17.170e+03; runs[11] = 267501; prescales[11] = 1.18;
    runsDataLumi[12] = 2.504e+03; runs[12] = 274881; prescales[12] = 1.37;
    runsDataLumi[13] = 6.304e+03; runs[13] = 275801; prescales[13] = 1.18;
    runsDataLumi[14] = 2.685e+03; runs[14] = 277601; prescales[14] = 1.25;
    runsDataLumi[15] = 0.;        runs[15] = 278687; prescales[15] = -1.; //shifted vert
    runsDataLumi[16] = 0.658e+03; runs[16] = 278981; prescales[16] = 1.38;
                                  runs[17] = 279215+1;
    if(per.Contains("99eplus", TString::kIgnoreCase)) last = 7;
    if(per.Contains("2000")) first = 8;

    ///// new ends

    Int_t nPer = last - first;
    fRuns.Set(nPer + 2);   // first run numbers 
    fRunsDataLumi.Set(nPer + 1); // [i] is lumi for fRuns[i] => fRuns[i+1]
    fPrescales.Set(nPer + 1);

    for(Int_t i = 0; i <= nPer; ++i){
      fRunsDataLumi[i] = runsDataLumi[i+first];
      fRuns[i] = runs[i+first];
      fPrescales[i] = prescales[i+first];
    }
    fRuns[nPer+1] = runs[nPer+first+1];

    return kTRUE;
  } else {
    this->Warning("GFDstarRunPeriods", "trigger %d not supported!", trigger);
    fRuns.Set(0);
    fRunsDataLumi.Set(0);
    fPrescales.Set(0);
    return kFALSE;
  }
}

//____________________________________
 Int_t GFDstarRunPeriods::GetFirstRun(Int_t period) const
{
  if(CheckPeriod("GetFirstRun", period)) return fRuns.At(period);//[period];
  else return 0;
}

//____________________________________
   Int_t GFDstarRunPeriods::GetLastRun(Int_t period) const
{
  if(CheckPeriod("GetLastRun", period)) return fRuns.At(period+1);//[period+1];
  else return 0;
}

//____________________________________
 Double_t GFDstarRunPeriods::GetLumi(Int_t period) const
{
  if(CheckPeriod("GetLumi", period)) return fRunsDataLumi.At(period);//[period];
  else return 0.;
}

//____________________________________
 Double_t GFDstarRunPeriods::GetPrescale(Int_t period) const
{
  if(CheckPeriod("GetPrescale", period)) return fPrescales.At(period);//[period];
  else return 0.;
}


//____________________________________
 Int_t GFDstarRunPeriods::GetPeriod(Int_t run) const
{
  // return period that run belongs to, -1 in case no period found
  for(Int_t i = 0; i < this->GetNumPeriods(); ++i){
    if(fRuns.At(i) <= run && fRuns.At(i+1) > run) return i;
  }
  return -1;
}

//____________________________________
 Bool_t GFDstarRunPeriods::OutOfBounds(const char* method, Int_t period) const
{
  // unused 'method'
  this->Warning("OutOfBounds", "Period %d does not exist, possible are (0-%d)",
		period, fRuns.GetSize()-1);
  return kFALSE;
}



ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.