ROOT logo
/*************************************************************************
* Copyright(c) 1998-2008, 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.                  * 
**************************************************************************/


#include <Riostream.h>

#include <TObjArray.h>
#include <TObjString.h>
#include <TObject.h>
#include <TString.h>
#include <TSystem.h>
#include <TFile.h>

#include "AliLog.h"
#include "AliCTPTimeParams.h"
#include "AliCTPInputTimeParams.h"

using std::endl;
using std::cout;
using std::ifstream;
ClassImp(AliCTPTimeParams)

//______________________________________________________________________________
AliCTPTimeParams::AliCTPTimeParams():
TNamed(),
fDelayL1L0(0),
fDelayL2L0(0),
fCTPInputTimeParams()
{
//Default constructor
}

//______________________________________________________________________________
AliCTPTimeParams::AliCTPTimeParams(const AliCTPTimeParams &timeparams):
 TNamed(),
 fDelayL1L0(timeparams.fDelayL1L0),
 fDelayL2L0(timeparams.fDelayL2L0),
 fCTPInputTimeParams()
{
 for (Int_t i = 0; i < timeparams.fCTPInputTimeParams.GetSize(); i++) {
 if ( timeparams.fCTPInputTimeParams[i] ) fCTPInputTimeParams.Add(timeparams.fCTPInputTimeParams[i]->Clone());
 }
 // copy constructor
}


//______________________________________________________________________________
AliCTPTimeParams& AliCTPTimeParams::operator=(const AliCTPTimeParams &timeparams)
{
 // assignment operator
 if(this==&timeparams) return *this;
 ((TNamed *)this)->operator=(timeparams);
 fDelayL1L0=timeparams.fDelayL1L0;
 fDelayL2L0=timeparams.fDelayL2L0;
 
 for (Int_t i = 0; i < timeparams.fCTPInputTimeParams.GetSize(); i++) {
 if ( timeparams.fCTPInputTimeParams[i] ) fCTPInputTimeParams.Add(timeparams.fCTPInputTimeParams[i]->Clone());
 }

 return *this;
}

//______________________________________________________________________________
AliCTPTimeParams::~AliCTPTimeParams()
{
 //Destructor

 fCTPInputTimeParams.SetOwner();
 fCTPInputTimeParams.Delete();
}

//______________________________________________________________________________
void AliCTPTimeParams::AddInput( TString& inputName, UInt_t& inputLevel, UInt_t inputDelay, TString inputEdge, UInt_t deltamin, UInt_t deltamax )
{
 fCTPInputTimeParams.AddLast( new AliCTPInputTimeParams(inputName, inputLevel, inputDelay, inputEdge, deltamin, deltamax ));
}

//______________________________________________________________________________
void AliCTPTimeParams::AddDelayL0L1L2(Int_t delayL1L0, UInt_t delayL2L0)
{
 fDelayL1L0 = delayL1L0;
 fDelayL2L0 = delayL2L0;
}
//______________________________________________________________________________
AliCTPInputTimeParams* AliCTPTimeParams::GetTimeParamsForInput( TString inputname)
{
 // Get AliCTPInputTimeParams for input name
Int_t ninputs = fCTPInputTimeParams.GetEntriesFast();
for ( Int_t i=0; i < ninputs; i++ )
 {
  AliCTPInputTimeParams* ctpinputtime = (AliCTPInputTimeParams*)fCTPInputTimeParams.At(i);
  if (inputname == ctpinputtime->GetInputName() ) return ctpinputtime;
 }
cout << "Input: " << inputname << " not found." << endl;
return NULL;
}
//______________________________________________________________________________
Int_t AliCTPTimeParams::GetDeltasforClass(TString classname,Int_t& deltamin,Int_t& deltamax)
{
 // Get deltamin and deltamax for given class
 // Assumes that descriptor = DINPU
 // ret: 0=OK, 1= input doea not exist
 TString input(classname(1,4)); 
 AliCTPInputTimeParams* tprm = GetTimeParamsForInput(input);
 if(tprm){
  deltamin=tprm->GetDeltaMin();
  deltamax=tprm->GetDeltaMax();
  return 0;
 }
 return 1;
}
//______________________________________________________________________________
AliCTPTimeParams* AliCTPTimeParams::LoadCTPTimeParams(TString filename)
{
 // Load pre-created CTP time parameters from database/file
 // By default files are stored in GRP/CTP folder
 // The filename is constructed as GRP/CTP/<file>.cfg
  if( gSystem->AccessPathName( filename.Data() )) {
 // AliError( Form( "File (%s) not found!", filename.Data()));
  return NULL;
 }

 ifstream *file = new ifstream( filename.Data() );
 if(!*file) {
  //AliErrorClass( Form( "Error opening file (%s) !", filename.Data()));
  file->close();
  delete file;
  return NULL;
 }

 AliCTPTimeParams *ctptime = new AliCTPTimeParams();

 TString strline;
 
 while (strline.ReadLine(*file)) {
    if (ctptime->ProcessCTPTimeParamsLine(strline) == kFALSE) {
     delete ctptime;
     break;
    }
 }

 file->close();
 delete file;

 return ctptime;
}

//______________________________________________________________________________
AliCTPTimeParams* AliCTPTimeParams::LoadCTPTimeParamsFromString(const char* timeparams)
{

 // Loads configuration from string

   if (!timeparams)
     return 0;

   AliCTPTimeParams *ctptime = new AliCTPTimeParams();

   TObjArray* tokens = TString(timeparams).Tokenize("\n");
   for (Int_t i=0; i<tokens->GetEntries(); i++)
   {
     TObjString* string = dynamic_cast<TObjString*>(tokens->At(i));
     if (!string)
       continue;

     if (ctptime->ProcessCTPTimeParamsLine(string->String()) == kFALSE)
     {
     	delete ctptime;
        ctptime  = 0x0;
        break;
     }
   }

   delete tokens;
   if (ctptime) return ctptime;
   else return NULL;
}

//______________________________________________________________________________
Bool_t AliCTPTimeParams::ProcessCTPTimeParamsLine(const char* line)
{
 UInt_t level = 0;
 TString strline(line);
  if (strline.BeginsWith("L012")) {
   strline.ReplaceAll("L012", "");
   TObjArray *tokens = strline.Tokenize(" \t");
      

   AddDelayL0L1L2(((TObjString*)tokens->At(0))->String().Atoi(),((TObjString*)tokens->At(1))->String().Atoi());
   delete tokens;
  }
  else {
    if (strline.BeginsWith("0")) { level = 0; }   // determine the input level (0, 1 or 2)
    else if (strline.BeginsWith("1")) { level = 1; }
    else if (strline.BeginsWith("2")) { level = 2; } 
    else return kFALSE; // file not in the right format!
   
    TObjArray *tokens = strline.Tokenize(" \t");
    Int_t ntokens = tokens->GetEntriesFast();
    if (ntokens == 5)  AddInput(((TObjString*)tokens->At(0))->String(), level, ((TObjString*)tokens->At(2))->String().Atoi(), ((TObjString*)tokens->At(1))->String(),  ((TObjString*)tokens->At(3))->String().Atoi(), ((TObjString*)tokens->At(4))->String().Atoi());
    else if (ntokens == 3) AddInput(((TObjString*)tokens->At(0))->String(), level, ((TObjString*)tokens->At(2))->String().Atoi(), ((TObjString*)tokens->At(1))->String(),  0, 0); //the old format is used - no DeltaMin & DeltaMax!
         else return kFALSE; // file not in the right format!
    delete tokens;
  }
return kTRUE;
}

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