ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// Comment describing what this class does needed!

#include "AliJRunTable.h"

#include <iostream>
#include <cstdlib>
#include <TSystem.h>
#include <TPRegexp.h>
using namespace std;

AliJRunTable::AliJRunTable() :
  fCPeriod(0),
  fCRunNumber(0),
  fCPeriodMCName("undefined")
{
  Init();
}

void AliJRunTable::Init(){
  // comment needed
    SetPeriodInformation( kUnknownPeriod, "UnknownPeriod", kPP, kRE, 0, -1, -1, "UnKnownPeriod" );
    SetPeriodInformation( kLHC10b, "LHC10b", kPP, kRE, 7000, 114737, 117223, "LHC10d1" );
    SetPeriodInformation( kLHC10c, "LHC10c", kPP, kRE, 7000, 118503, 121040, "LHC10d4" );
    SetPeriodInformation( kLHC10d, "LHC10d", kPP, kRE, 7000, 122195, 126437, "LHC10f6a" );
    SetPeriodInformation( kLHC10e, "LHC10e", kPP, kRE, 7000, 127712, 130850, "LHC10e20" );
    SetPeriodInformation( kLHC10h, "LHC10h", kPbPb, kRE, 2760, 136851, 139517, "LHC11a10a_bis" );
    SetPeriodInformation( kLHC11h, "LHC11h", kPbPb, kRE, 2760, 167813, 170595, "LHC12a17" );

    //LHC11a
    SetPeriodInformation(kLHC11a, "LHC11a", kPP, kRE, 2760, 144871, 146860, "LHC11b10a" );

    // pp 7TeV LHC11bcde
    SetPeriodInformation( kLHC11b, "LHC11b", kPP, kRE, 7000, 0, 0, "LHC12d2_plus" );
    SetPeriodInformation( kLHC11c, "LHC11c", kPP, kRE, 7000, 153533, 154789, "LHC12d2_plus" );
    SetPeriodInformation( kLHC11d, "LHC11d", kPP, kRE, 7000, 156620, 159580, "LHC12d2_plus" );
    SetPeriodInformation( kLHC11e, "LHC11e", kPP, kRE, 7000, 0, 0, "LHC12d2_plus" );

    // LHC12g - TODO
    SetPeriodInformation( kLHC12g, "LHC12g",kPA, kRE, 5020, 188356,188503, "LHC13b2" );
    SetPeriodInformation( kLHC12h, "LHC12h",kPA, kRE, 5020, 189122,192732, "LHC13b2" );
    SetPeriodInformation( kLHC13b, "LHC13b",kPA, kRE, 5020, 195344,195483, "LHC13b2-efix_p1" );
    SetPeriodInformation( kLHC13c, "LHC13c",kPA, kRE, 5020, 195529,195677, "LHC13b2-efix_p1" );
    SetPeriodInformation( kLHC13d, "LHC13d",kPA, kRE, 5020, 195724,195872, "LHC13b2-efix_p1" );
    SetPeriodInformation( kLHC13e, "LHC13e",kPA, kRE, 5020, 195955,196310, "LHC13b2-efix_p1" );
    SetPeriodInformation( kLHC13g, "LHC13g",kPA, kRE, 5020, 197669,200000, "LHC13b2-efix_p1" );
}


TString AliJRunTable::GetPeriodName( int period ) const {
    // TODO 
    if( period < 0 ) period = fCPeriod;
    return fPeriodName[period];
}

int AliJRunTable::GetRunNumberToPeriod( int runnumber ){
  // comment needed
    int period = -1;
    for( int ip=0;ip<kJNPeriod;ip++ ){
        if(fDataType[ip] == kMC ) continue;
        if( runnumber >= fRunRange[ip][0] && runnumber <= fRunRange[ip][1] ){
            cout<< fPeriodName[ip] <<"\t"<<fRunRange[ip][0]<<"~"<<fRunRange[ip][1]<<endl;
            period = ip;
            break;
        }
    }
    if( period < 0 ){ 
        cout<<"J_ERROR : no period for runnumber "<<runnumber<<endl;
        gSystem->Exit(1);
    }
    return period;
}

void AliJRunTable::SetPeriodInformation(int period, TString name, int beamtype, int datatype, int energy, int run0, int run1, TString MCPeriod){
  // comment needed
    fPeriodName[period] = name;
    fBeamType[period] = beamtype;
    fDataType[period] = datatype;
    fEnergy[period] = energy;
    fRunRange[period][0] = run0;
    fRunRange[period][1] = run1;
    fMCPeriod[period] = MCPeriod;
}


int AliJRunTable::GetPeriodCode( TString perstr ) const{
  // comment needed
    int period = kUnknownPeriod;
    for( int ip=0;ip<kJNPeriod;ip++ ){
        if( perstr == GetPeriodName(ip) ){
            period = ip;
            break;
        }
    }
    if( period <0 ){
        cout<<"J_ERROR : no period for "<<perstr<<endl;
    }
    return period;

}

int AliJRunTable::GetRunNumberFromString(const char * tstr ){
  // comment needed
    TPMERegexp rexRunNumber( "1\\d{5}" );
    rexRunNumber.Match(tstr);
    return TString(rexRunNumber[0]).Atoi();
}

TString AliJRunTable::GetPeriodFromString(const char * tstr ) const{
  // comment needed
    TPMERegexp rexPeriod( "LHC1\\d[a-zA-Z]" );
    rexPeriod.Match(tstr);
    return rexPeriod[0];
}

TString AliJRunTable::GetMCPeriodFromString(const char * tstr ) const{
  // comment needed
    TPMERegexp rexPeriod( "LHC1\\d[a-zA-Z0-9]{2,}(\\w+)?" );
    rexPeriod.Match(tstr);
    return rexPeriod[0];
}

int AliJRunTable::GetPeriodFromMCPeriod( const char * tstr ){
  // comment needed
    int period = -1;
    for( int ip=0;ip<kJNPeriod;ip++ ){
        if(fDataType[ip] == kMC ) continue;
        if( fMCPeriod[ip] == TString(tstr) ){
            period = ip;
            break;
        }
    }
    if( period < 0 ){ 
        cout<<"J_ERROR : no period for MCPeriod "<<tstr<<endl;
        exit(1);
    }
    return period;
}

bool AliJRunTable::ParseString( const char * tstr ){
  // comment needed
    fCRunNumber = GetRunNumberFromString(tstr);
    fCPeriodMCName = GetMCPeriodFromString(tstr);
    if( fCRunNumber > 0 ){
        fCPeriod = GetRunNumberToPeriod( fCRunNumber );
    }else
    if( fCPeriodMCName.Length() > 0 ){
        fCPeriod = GetPeriodFromMCPeriod( fCPeriodMCName );
    }else{
        fCPeriod = kUnknownPeriod;
    }
    return true;
}

// GetBeamStr is never used anywhere. Should it be removed altogether?
const char * AliJRunTable::GetBeamStr( int ib ) const {
  // comment needed
    if( ib < 0 ) ib = fBeamType[fCPeriod]; 
    switch (ib){
        case kPP : return "pp";
        case kPbPb: return "PbPb";
        case kPA:   return "PA";
    }
    return NULL;
}

const char * AliJRunTable::GetDataStr( int ib ) const {
  // comment needed
    if( ib < 0 ) ib = fDataType[fCPeriod]; 
    switch (ib){
        case kRE: return "REAL";
        case kMC: return "MC";
    }
    return NULL;
}
AliJRunTable& AliJRunTable::GetSpecialInstance(){
  // comment needed
    static AliJRunTable instance;
    return instance;
}

// GetEnergyStr is never used anywhere. Should it be removed altogether?
const char * AliJRunTable::GetEnergyStr( int ib ) const {
  // comment needed
    if( ib < 0 ) ib = fEnergy[fCPeriod]; 
    if( ib < 1000 ) return Form("%dGeV",ib);
    if( ib == 2760 ) return "2.76TeV";
    return Form("%dTeV",ib/1000);
}

const AliJRunTable& AliJRunTable::GetInstance(){
  // comment needed
    return GetSpecialInstance();
}
 AliJRunTable.cxx:1
 AliJRunTable.cxx:2
 AliJRunTable.cxx:3
 AliJRunTable.cxx:4
 AliJRunTable.cxx:5
 AliJRunTable.cxx:6
 AliJRunTable.cxx:7
 AliJRunTable.cxx:8
 AliJRunTable.cxx:9
 AliJRunTable.cxx:10
 AliJRunTable.cxx:11
 AliJRunTable.cxx:12
 AliJRunTable.cxx:13
 AliJRunTable.cxx:14
 AliJRunTable.cxx:15
 AliJRunTable.cxx:16
 AliJRunTable.cxx:17
 AliJRunTable.cxx:18
 AliJRunTable.cxx:19
 AliJRunTable.cxx:20
 AliJRunTable.cxx:21
 AliJRunTable.cxx:22
 AliJRunTable.cxx:23
 AliJRunTable.cxx:24
 AliJRunTable.cxx:25
 AliJRunTable.cxx:26
 AliJRunTable.cxx:27
 AliJRunTable.cxx:28
 AliJRunTable.cxx:29
 AliJRunTable.cxx:30
 AliJRunTable.cxx:31
 AliJRunTable.cxx:32
 AliJRunTable.cxx:33
 AliJRunTable.cxx:34
 AliJRunTable.cxx:35
 AliJRunTable.cxx:36
 AliJRunTable.cxx:37
 AliJRunTable.cxx:38
 AliJRunTable.cxx:39
 AliJRunTable.cxx:40
 AliJRunTable.cxx:41
 AliJRunTable.cxx:42
 AliJRunTable.cxx:43
 AliJRunTable.cxx:44
 AliJRunTable.cxx:45
 AliJRunTable.cxx:46
 AliJRunTable.cxx:47
 AliJRunTable.cxx:48
 AliJRunTable.cxx:49
 AliJRunTable.cxx:50
 AliJRunTable.cxx:51
 AliJRunTable.cxx:52
 AliJRunTable.cxx:53
 AliJRunTable.cxx:54
 AliJRunTable.cxx:55
 AliJRunTable.cxx:56
 AliJRunTable.cxx:57
 AliJRunTable.cxx:58
 AliJRunTable.cxx:59
 AliJRunTable.cxx:60
 AliJRunTable.cxx:61
 AliJRunTable.cxx:62
 AliJRunTable.cxx:63
 AliJRunTable.cxx:64
 AliJRunTable.cxx:65
 AliJRunTable.cxx:66
 AliJRunTable.cxx:67
 AliJRunTable.cxx:68
 AliJRunTable.cxx:69
 AliJRunTable.cxx:70
 AliJRunTable.cxx:71
 AliJRunTable.cxx:72
 AliJRunTable.cxx:73
 AliJRunTable.cxx:74
 AliJRunTable.cxx:75
 AliJRunTable.cxx:76
 AliJRunTable.cxx:77
 AliJRunTable.cxx:78
 AliJRunTable.cxx:79
 AliJRunTable.cxx:80
 AliJRunTable.cxx:81
 AliJRunTable.cxx:82
 AliJRunTable.cxx:83
 AliJRunTable.cxx:84
 AliJRunTable.cxx:85
 AliJRunTable.cxx:86
 AliJRunTable.cxx:87
 AliJRunTable.cxx:88
 AliJRunTable.cxx:89
 AliJRunTable.cxx:90
 AliJRunTable.cxx:91
 AliJRunTable.cxx:92
 AliJRunTable.cxx:93
 AliJRunTable.cxx:94
 AliJRunTable.cxx:95
 AliJRunTable.cxx:96
 AliJRunTable.cxx:97
 AliJRunTable.cxx:98
 AliJRunTable.cxx:99
 AliJRunTable.cxx:100
 AliJRunTable.cxx:101
 AliJRunTable.cxx:102
 AliJRunTable.cxx:103
 AliJRunTable.cxx:104
 AliJRunTable.cxx:105
 AliJRunTable.cxx:106
 AliJRunTable.cxx:107
 AliJRunTable.cxx:108
 AliJRunTable.cxx:109
 AliJRunTable.cxx:110
 AliJRunTable.cxx:111
 AliJRunTable.cxx:112
 AliJRunTable.cxx:113
 AliJRunTable.cxx:114
 AliJRunTable.cxx:115
 AliJRunTable.cxx:116
 AliJRunTable.cxx:117
 AliJRunTable.cxx:118
 AliJRunTable.cxx:119
 AliJRunTable.cxx:120
 AliJRunTable.cxx:121
 AliJRunTable.cxx:122
 AliJRunTable.cxx:123
 AliJRunTable.cxx:124
 AliJRunTable.cxx:125
 AliJRunTable.cxx:126
 AliJRunTable.cxx:127
 AliJRunTable.cxx:128
 AliJRunTable.cxx:129
 AliJRunTable.cxx:130
 AliJRunTable.cxx:131
 AliJRunTable.cxx:132
 AliJRunTable.cxx:133
 AliJRunTable.cxx:134
 AliJRunTable.cxx:135
 AliJRunTable.cxx:136
 AliJRunTable.cxx:137
 AliJRunTable.cxx:138
 AliJRunTable.cxx:139
 AliJRunTable.cxx:140
 AliJRunTable.cxx:141
 AliJRunTable.cxx:142
 AliJRunTable.cxx:143
 AliJRunTable.cxx:144
 AliJRunTable.cxx:145
 AliJRunTable.cxx:146
 AliJRunTable.cxx:147
 AliJRunTable.cxx:148
 AliJRunTable.cxx:149
 AliJRunTable.cxx:150
 AliJRunTable.cxx:151
 AliJRunTable.cxx:152
 AliJRunTable.cxx:153
 AliJRunTable.cxx:154
 AliJRunTable.cxx:155
 AliJRunTable.cxx:156
 AliJRunTable.cxx:157
 AliJRunTable.cxx:158
 AliJRunTable.cxx:159
 AliJRunTable.cxx:160
 AliJRunTable.cxx:161
 AliJRunTable.cxx:162
 AliJRunTable.cxx:163
 AliJRunTable.cxx:164
 AliJRunTable.cxx:165
 AliJRunTable.cxx:166
 AliJRunTable.cxx:167
 AliJRunTable.cxx:168
 AliJRunTable.cxx:169
 AliJRunTable.cxx:170
 AliJRunTable.cxx:171
 AliJRunTable.cxx:172
 AliJRunTable.cxx:173
 AliJRunTable.cxx:174
 AliJRunTable.cxx:175
 AliJRunTable.cxx:176
 AliJRunTable.cxx:177
 AliJRunTable.cxx:178
 AliJRunTable.cxx:179
 AliJRunTable.cxx:180
 AliJRunTable.cxx:181
 AliJRunTable.cxx:182
 AliJRunTable.cxx:183
 AliJRunTable.cxx:184
 AliJRunTable.cxx:185
 AliJRunTable.cxx:186
 AliJRunTable.cxx:187
 AliJRunTable.cxx:188
 AliJRunTable.cxx:189
 AliJRunTable.cxx:190
 AliJRunTable.cxx:191
 AliJRunTable.cxx:192
 AliJRunTable.cxx:193
 AliJRunTable.cxx:194
 AliJRunTable.cxx:195
 AliJRunTable.cxx:196
 AliJRunTable.cxx:197
 AliJRunTable.cxx:198
 AliJRunTable.cxx:199
 AliJRunTable.cxx:200
 AliJRunTable.cxx:201
 AliJRunTable.cxx:202
 AliJRunTable.cxx:203
 AliJRunTable.cxx:204
 AliJRunTable.cxx:205
 AliJRunTable.cxx:206
 AliJRunTable.cxx:207
 AliJRunTable.cxx:208