ROOT logo

// This macro runs the GRP test preprocessor
// It uses AliTestShuttle to simulate a full Shuttle process

// The input data is created in the functions
//   CreateDCSAliasMap() creates input that would in the same way come from DCS
//   ReadDCSAliasMap() reads from a file
//   CreateInputFilesMap() creates a list of local files, that can be accessed by the shuttle
  
// Taking as input runtype and errorLevel
// errorLevel used to simulate errors:
// 0 --> no error
// 1 --> DAQ logbook error
// 2 --> DAQ FXS error
// 3 --> DAQ logbook_trigger_config erro
// 4 --> DCS FXS error
// 5 --> DCS DPs error
// 6 --> Missing beamEnergy
// 7 --> null buffer for Trigger Config
// 8 --> Missing LTU configuration

// Need to include dummy files in TestShuttle/TestCDB for CTP Configuration and Scalers 
// (see macro $ALICE_ROOT/GRP/MakeCTPDummyEntries.C)

// Modified by C. Zampolli 


#include <iostream>
#include <fstream>
using namespace std;

void TestGRPPreprocessor(const char* runtype="PHYSICS", TString partition="ALICE", TString detector="", TString beamType = "p-p", Int_t errorLevel=0)
{
  gSystem->Load("$ALICE_ROOT/SHUTTLE/TestShuttle/libTestShuttle.so");

  AliLog::SetClassDebugLevel("AliGRPPreprocessor",3);
  Int_t kRun = 7;
  AliTestShuttle* shuttle = new AliTestShuttle(kRun, 1000, 2000);

  AliTestShuttle::SetMainCDB("local://$ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB");
  AliTestShuttle::SetMainRefStorage("local://$ALICE_ROOT/SHUTTLE/TestShuttle/TestReference");

  printf("Test OCDB storage Uri: %s\n", AliShuttleInterface::GetMainCDB().Data());
  printf("Test Reference storage Uri: %s\n", AliShuttleInterface::GetMainRefStorage().Data());

  // setting runtype
  shuttle->SetInputRunType(runtype);

  Int_t detectorMask = 1074200319;
  TString detectorMask_Str(Form("%d",detectorMask));
  shuttle->AddInputRunParameter("detectorMask", detectorMask_Str.Data());

  TString* ltu = new TString[3];
  ltu[0] = "2000";
  ltu[1] = "6000";
  ltu[2] = "8000";
  for (Int_t i = 0; i<AliDAQ::kNDetectors-2; i++){
	  if ((detectorMask >> i) & 0x1) {
		  TString detOnlineName = AliDAQ::DetectorName(i);
		  if (detOnlineName == "VZERO"){
			  ltu[0] = "3000";
			  ltu[1] = "7000";
			  ltu[2] = "9000";
		  }
		  if (errorLevel != 8 && !partition.IsNull() && detector.IsNull()){
			  shuttle->SetLTUConfig(ltu,detOnlineName.Data());
		  }
	  }
  }

  // simulating DCS DPs
  TMap* dcsAliasMap = CreateDCSAliasMap(errorLevel);
  shuttle->SetDCSInput(dcsAliasMap);

  // simulating input from DAQ FXS
  if (errorLevel != 2){
	  
	  //$ALICE_ROOT to be expanded manually by the user for this test macro 
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "GRP", "Period_LHC09c_TPC.Seq_0.tag.root", "GDC35", "$ALICE_ROOT/GRP/ShuttleInput/run000080740_GRP_gdc-aldaqpc035_Period_LHC09c.Seq_0.tag.root");
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "GRP", "Period_LHC09c_TPC.Seq_0.tag.root", "GDC36", "$ALICE_ROOT/GRP/ShuttleInput/run000080740_GRP_gdc-aldaqpc036_Period_LHC09c.Seq_0.tag.root");
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "GRP", "Period_LHC09c_TPC.Seq_0.tag.root", "GDC44", "$ALICE_ROOT/GRP/ShuttleInput/run000080740_GRP_gdc-aldaqpc044_Period_LHC09c.Seq_0.tag.root");
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "GRP", "Period_LHC09c_TPC.Seq_0.tag.root", "GDC45", "$ALICE_ROOT/GRP/ShuttleInput/run000080740_GRP_gdc-aldaqpc045_Period_LHC09c.Seq_0.tag.root");
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "SPD", "VertexDiamond", "gdc-GLOBAL-01", "$ALICE_ROOT/GRP/ShuttleInput/run000104892_SPD_mon-DA-SPD-0_VertexDiamond");
	  shuttle->AddInputFile(AliShuttleInterface::kDCS, "GRP", "LHCData", "", "$ALICE_ROOT/GRP/ShuttleInput/testRun_GRP_run_number_testRun_data.txt");
	  shuttle->AddInputFile(AliShuttleInterface::kDQM, "GRP", "TriggerClassesAndHistosToClone", "DQM", "$ALICE_ROOT/GRP/ShuttleInput/run000158496_GRP_DQM_TriggerClassesAndHistosToClone");
	  shuttle->AddInputFile(AliShuttleInterface::kDQM, "ACO", "QAThresholds", "DQM", "$ALICE_ROOT/GRP/ShuttleInput/run000168322_ACO_DQM_QAThresholds");
	  shuttle->AddInputFile(AliShuttleInterface::kDQM, "TPC", "QAThresholds", "DQM", "$ALICE_ROOT/GRP/ShuttleInput/run000168322_TPC_DQM_QAThresholds");
          
	  /*
	  // for example:
	  
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "GRP", "Period_LHC09c_TPC.Seq_0.tag.root", "GDC35", "/home/zampolli/SOFT/AliRoot/AliRoot_Trunk/GRP/ShuttleInput/run000080740_GRP_gdc-aldaqpc035_Period_LHC09c.Seq_0.tag.root");
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "GRP", "Period_LHC09c_TPC.Seq_0.tag.root", "GDC36", "/home/zampolli/SOFT/AliRoot/AliRoot_Trunk/GRP/ShuttleInput/run000080740_GRP_gdc-aldaqpc036_Period_LHC09c.Seq_0.tag.root");
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "GRP", "Period_LHC09c_TPC.Seq_0.tag.root", "GDC44", "/home/zampolli/SOFT/AliRoot/AliRoot_Trunk/GRP/ShuttleInput/run000080740_GRP_gdc-aldaqpc044_Period_LHC09c.Seq_0.tag.root");
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "GRP", "Period_LHC09c_TPC.Seq_0.tag.root", "GDC45", "/home/zampolli/SOFT/AliRoot/AliRoot_Trunk/GRP/ShuttleInput/run000080740_GRP_gdc-aldaqpc045_Period_LHC09c.Seq_0.tag.root");
	  shuttle->AddInputFile(AliShuttleInterface::kDAQ, "SPD", "VertexDiamond", "gdc-GLOBAL-01", "/home/zampolli/SOFT/AliRoot/AliRoot_Trunk/GRP/ShuttleInput/run000104892_SPD_mon-DA-SPD-0_VertexDiamond");
	  shuttle->AddInputFile(AliShuttleInterface::kDCS, "GRP", "LHCData", "", "/home/zampolli/SOFT/AliRoot/AliRoot_Trunk/GRP/ShuttleInput/testRun_GRP_run_number_testRun_data.txt");
	  */  
  }

  // simulating input from DCS FXS
  if (errorLevel != 4 && !partition.IsNull() && detector.IsNull()){
	  shuttle->AddInputFile(AliShuttleInterface::kDCS, "GRP", "CTP_xcounters", "", gSystem->ExpandPathName("$ALICE_ROOT/GRP/CTP/xcounters.txt"));
  }

  Char_t * filename = gSystem->ExpandPathName("$ALICE_ROOT/GRP/CTP/p-p.cfg");
  ifstream is;
  is.open(filename);
  is.seekg(0,ios::end);
  int length = is.tellg();
  const char *buffer = new char[length];
  is.seekg(0,ios::beg);
  is.read(buffer,length);
  is.close();
  const char *emptybuffer = NULL;

  // simulating input from DAQ logbook_trigger_config
  if (errorLevel != 3 && errorLevel != 7 && !partition.IsNull() && detector.IsNull()) {
		  cout << " adding trigger config " << endl;
		  shuttle->SetInputTriggerConfiguration(buffer);
  }
  else if (errorLevel == 7) {
	  shuttle->SetInputTriggerConfiguration(emptybuffer);
  }
  
  // open text file with CTP timing params
  Char_t * fileNameTiming = gSystem->ExpandPathName("$ALICE_ROOT/GRP/ShuttleInput/ctptime.tim");
  ifstream ifstrTiming;
  ifstrTiming.open(fileNameTiming);
  ifstrTiming.seekg(0,ios::end);
  int lengthTiming = ifstrTiming.tellg();
  const char *bufferTiming = new char[lengthTiming];
  ifstrTiming.seekg(0,ios::beg);
  ifstrTiming.read(bufferTiming,lengthTiming);
  ifstrTiming.close();
  //  const char *emptybuffer = NULL;

  // simulating input from DAQ logbook_ctp_timing_params
  if (errorLevel != 3 && errorLevel != 7 && !partition.IsNull() && detector.IsNull()) {
		  cout << " adding ctp timing params " <<endl;
		  shuttle->SetInputCTPTimeParams(bufferTiming);
  }
  else if (errorLevel == 7) {
	  shuttle->SetInputCTPTimeParams(emptybuffer);
  }

  // simulating input from DAQ logbook
  if (errorLevel != 1){
	shuttle->AddInputRunParameter("DAQ_time_start", "1020");
  }
  if (errorLevel != 6){
	shuttle->AddInputRunParameter("beamEnergy", "123");
  }

  shuttle->AddInputRunParameter("DAQ_time_end",   "1980");
  shuttle->AddInputRunParameter("beamType", beamType);
  shuttle->AddInputRunParameter("numberOfDetectors", "5");
  shuttle->AddInputRunParameter("LHCperiod",    "LHC08b");
  shuttle->AddInputRunParameter("partition",partition);
  shuttle->AddInputRunParameter("detector",detector);

  // simulating HLT
  Bool_t hltStatus = kTRUE;
  shuttle->SetInputHLTStatus(hltStatus);

  // Create the preprocessor that should be tested, it registers itself automatically to the shuttle
  AliPreprocessor* test = new AliGRPPreprocessor(shuttle);

  // Test the preprocessor
  shuttle->Process();

  printf("\n\n");

  // Check the file which should have been created
  AliCDBEntry* chkEntry = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
  			->Get("GRP/GRP/Data", kRun);
  if (!chkEntry) {
    printf("The file is not there. Something went wrong.\n");
    return;
  }
  chkEntry->PrintId();
  chkEntry->GetObject()->Print();
  printf("\n\n");

}

TMap* CreateDCSAliasMap(Int_t errorLevel)
{
  // Creates a DCS structure
  // The structure is the following:
  // TMap (key --> value)
  // <DCSAlias> --> <valueList>
  // <DCSAlias> is a string
  // <valueList> is a TObjArray of AliDCSValue
  // An AliDCSValue consists of timestamp and a value in form of a AliSimpleValue
  
  const Int_t fgknDCSDP = 48;
  const char* fgkDCSDataPoints[AliGRPPreprocessor::fgknDCSDP] = {
                   "L3Polarity",
                   "DipolePolarity",
                   "L3Current",
                   "DipoleCurrent",
		   "L3_BSF17_H1",
		   "L3_BSF17_H2",
		   "L3_BSF17_H3",
		   "L3_BSF17_Temperature",
		   "L3_BSF4_H1",
		   "L3_BSF4_H2",
		   "L3_BSF4_H3",
		   "L3_BSF4_Temperature",
		   "L3_BKF17_H1",
		   "L3_BKF17_H2",
		   "L3_BKF17_H3",
		   "L3_BKF17_Temperature",
		   "L3_BKF4_H1",
		   "L3_BKF4_H2",
		   "L3_BKF4_H3",
		   "L3_BKF4_Temperature",
		   "L3_BSF13_H1",
		   "L3_BSF13_H2",
		   "L3_BSF13_H3",
		   "L3_BSF13_Temperature",
		   "L3_BSF8_H1",
		   "L3_BSF8_H2",
		   "L3_BSF8_H3",
		   "L3_BSF8_Temperature",
		   "L3_BKF13_H1",
		   "L3_BKF13_H2",
		   "L3_BKF13_H3",
		   "L3_BKF13_Temperature",
		   "L3_BKF8_H1",
		   "L3_BKF8_H2",
		   "L3_BKF8_H3",
		   "L3_BKF8_Temperature",
		   "Dipole_Inside_H1",
		   "Dipole_Inside_H2",
		   "Dipole_Inside_H3",
		   "Dipole_Inside_Temperature",
		   "Dipole_Outside_H1",
		   "Dipole_Outside_H2",
		   "Dipole_Outside_H3",
		   "Dipole_Outside_Temperature",
                   "CavernTemperature",
                   "CavernAtmosPressure",
                   "SurfaceAtmosPressure",
                   "CavernAtmosPressure2",
                 };

  TMap* aliasMap;
  TObjArray* valueSet;
  AliDCSValue* dcsVal;
  
  aliasMap = new TMap;
  aliasMap->SetOwner(1);
  
  // L3Polarity
  valueSet = new TObjArray;
  valueSet->SetOwner(1);
  dcsVal = new AliDCSValue( kTRUE, 1010 );
  valueSet->Add(dcsVal);
  dcsVal = new AliDCSValue( kTRUE, 1100 );
  valueSet->Add(dcsVal);
  dcsVal = new AliDCSValue( kTRUE, 1500 );
  valueSet->Add(dcsVal);
  dcsVal = new AliDCSValue( kTRUE, 1990 );
  valueSet->Add(dcsVal);
  // add the following two lines to test errors for changing polarity
  //  dcsVal = new AliDCSValue( kFALSE, 2 );
  //  valueSet->Add(dcsVal);
  aliasMap->Add( new TObjString(fgkDCSDataPoints[1]), valueSet );
  
  // DipolePolarity
  valueSet = new TObjArray;
  valueSet->SetOwner(1);
  dcsVal = new AliDCSValue( kTRUE, 1010 );
  valueSet->Add(dcsVal);
  dcsVal = new AliDCSValue( kTRUE, 1100 );
  valueSet->Add(dcsVal);
  dcsVal = new AliDCSValue( kTRUE, 1500 );
  valueSet->Add(dcsVal);
  dcsVal = new AliDCSValue( kTRUE, 1990 );
  aliasMap->Add( new TObjString(fgkDCSDataPoints[2]), valueSet );


  TRandom random;

  Int_t maxDPindex = 0;
  if (errorLevel != 5) {
	  maxDPindex = fgknDCSDP;
  }
  else {
	  maxDPindex = 3;  // simulating only a few DP in case errorLevel=5
  }

  for( int nAlias=2; nAlias<maxDPindex; nAlias++)  {
	  if (nAlias>=4 && nAlias < 44) continue; 
    valueSet = new TObjArray;
    valueSet->SetOwner(1);

    Int_t timeStampValue[10] = { 1010, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1990};


    for (int timeStamp=0; timeStamp<10; timeStamp++) {
      dcsVal = new AliDCSValue((Float_t) (timeStamp+1+10*nAlias), timeStampValue[timeStamp]);
      valueSet->Add(dcsVal);
    }
    cout << " simulating " << fgkDCSDataPoints[nAlias] << endl;
    aliasMap->Add( new TObjString( fgkDCSDataPoints[nAlias]), valueSet );
  }

  // Hall Probes
  TString probe1[3] = {"L3_BSF","L3_BKF","Dipole_"};
  TString probe2[6] = {"17_","4_","13_","8_","Inside_","Outside_"};
  TString probe3[4] = {"H1","H2","H3","Temperature"};
  Int_t hp = 0;

  for (Int_t i=0;i<3;i++){
	  for (Int_t j=0;j<6;j++){
		  for (Int_t k=0;k<4;k++){
			  TString dpAlias = probe1[i]+probe2[j]+probe3[k];
			  valueSet = new TObjArray;
			  valueSet->SetOwner(1);
			  for (int timeStamp=0; timeStamp<10; timeStamp++) {
				  dcsVal = new AliDCSValue((Float_t) (timeStamp+1+10*hp), timeStampValue[timeStamp]);
				  valueSet->Add(dcsVal);
				  //cout << " hall probe = " << dpAlias << " with value = " << dcsVal->GetFloat() << endl;
			  }
			  aliasMap->Add( new TObjString(dpAlias), valueSet );
			  hp++;
		  }
	  }
  }

  return aliasMap;
}

/*
TMap* ReadDCSAliasMap()
{
  // Open a file that contains DCS input data
  // The CDB framework is used to open the file, this means the file is located
  // in $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB/<detector>/DCS/Data
  // The file contains an AliCDBEntry that contains a TMap with the DCS structure.
  // An explanation of the structure can be found in CreateDCSAliasMap()

  AliCDBEntry *entry = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
  			->Get("DET/DCS/Data", 0);
  return dynamic_cast<TMap*> (entry->GetObject());
}
*/


void WriteDCSAliasMap()
{
  // This writes the output from CreateDCSAliasMap to a CDB file

  TMap* dcsAliasMap = CreateDCSAliasMap(Int_t errorLevel);

  AliCDBMetaData metaData;
  metaData.SetBeamPeriod(0);
  metaData.SetResponsible("Ernesto Lopez Torres");
  metaData.SetComment("Test object for TestGRPPreprocessor.C");

  AliCDBId id("GRP/Data", 0, 0);

  // look into AliTestShuttle's CDB main folder

  AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
  			->Put(dcsAliasMap, id, &metaData);
}
 TestGRPPreprocessor.C:1
 TestGRPPreprocessor.C:2
 TestGRPPreprocessor.C:3
 TestGRPPreprocessor.C:4
 TestGRPPreprocessor.C:5
 TestGRPPreprocessor.C:6
 TestGRPPreprocessor.C:7
 TestGRPPreprocessor.C:8
 TestGRPPreprocessor.C:9
 TestGRPPreprocessor.C:10
 TestGRPPreprocessor.C:11
 TestGRPPreprocessor.C:12
 TestGRPPreprocessor.C:13
 TestGRPPreprocessor.C:14
 TestGRPPreprocessor.C:15
 TestGRPPreprocessor.C:16
 TestGRPPreprocessor.C:17
 TestGRPPreprocessor.C:18
 TestGRPPreprocessor.C:19
 TestGRPPreprocessor.C:20
 TestGRPPreprocessor.C:21
 TestGRPPreprocessor.C:22
 TestGRPPreprocessor.C:23
 TestGRPPreprocessor.C:24
 TestGRPPreprocessor.C:25
 TestGRPPreprocessor.C:26
 TestGRPPreprocessor.C:27
 TestGRPPreprocessor.C:28
 TestGRPPreprocessor.C:29
 TestGRPPreprocessor.C:30
 TestGRPPreprocessor.C:31
 TestGRPPreprocessor.C:32
 TestGRPPreprocessor.C:33
 TestGRPPreprocessor.C:34
 TestGRPPreprocessor.C:35
 TestGRPPreprocessor.C:36
 TestGRPPreprocessor.C:37
 TestGRPPreprocessor.C:38
 TestGRPPreprocessor.C:39
 TestGRPPreprocessor.C:40
 TestGRPPreprocessor.C:41
 TestGRPPreprocessor.C:42
 TestGRPPreprocessor.C:43
 TestGRPPreprocessor.C:44
 TestGRPPreprocessor.C:45
 TestGRPPreprocessor.C:46
 TestGRPPreprocessor.C:47
 TestGRPPreprocessor.C:48
 TestGRPPreprocessor.C:49
 TestGRPPreprocessor.C:50
 TestGRPPreprocessor.C:51
 TestGRPPreprocessor.C:52
 TestGRPPreprocessor.C:53
 TestGRPPreprocessor.C:54
 TestGRPPreprocessor.C:55
 TestGRPPreprocessor.C:56
 TestGRPPreprocessor.C:57
 TestGRPPreprocessor.C:58
 TestGRPPreprocessor.C:59
 TestGRPPreprocessor.C:60
 TestGRPPreprocessor.C:61
 TestGRPPreprocessor.C:62
 TestGRPPreprocessor.C:63
 TestGRPPreprocessor.C:64
 TestGRPPreprocessor.C:65
 TestGRPPreprocessor.C:66
 TestGRPPreprocessor.C:67
 TestGRPPreprocessor.C:68
 TestGRPPreprocessor.C:69
 TestGRPPreprocessor.C:70
 TestGRPPreprocessor.C:71
 TestGRPPreprocessor.C:72
 TestGRPPreprocessor.C:73
 TestGRPPreprocessor.C:74
 TestGRPPreprocessor.C:75
 TestGRPPreprocessor.C:76
 TestGRPPreprocessor.C:77
 TestGRPPreprocessor.C:78
 TestGRPPreprocessor.C:79
 TestGRPPreprocessor.C:80
 TestGRPPreprocessor.C:81
 TestGRPPreprocessor.C:82
 TestGRPPreprocessor.C:83
 TestGRPPreprocessor.C:84
 TestGRPPreprocessor.C:85
 TestGRPPreprocessor.C:86
 TestGRPPreprocessor.C:87
 TestGRPPreprocessor.C:88
 TestGRPPreprocessor.C:89
 TestGRPPreprocessor.C:90
 TestGRPPreprocessor.C:91
 TestGRPPreprocessor.C:92
 TestGRPPreprocessor.C:93
 TestGRPPreprocessor.C:94
 TestGRPPreprocessor.C:95
 TestGRPPreprocessor.C:96
 TestGRPPreprocessor.C:97
 TestGRPPreprocessor.C:98
 TestGRPPreprocessor.C:99
 TestGRPPreprocessor.C:100
 TestGRPPreprocessor.C:101
 TestGRPPreprocessor.C:102
 TestGRPPreprocessor.C:103
 TestGRPPreprocessor.C:104
 TestGRPPreprocessor.C:105
 TestGRPPreprocessor.C:106
 TestGRPPreprocessor.C:107
 TestGRPPreprocessor.C:108
 TestGRPPreprocessor.C:109
 TestGRPPreprocessor.C:110
 TestGRPPreprocessor.C:111
 TestGRPPreprocessor.C:112
 TestGRPPreprocessor.C:113
 TestGRPPreprocessor.C:114
 TestGRPPreprocessor.C:115
 TestGRPPreprocessor.C:116
 TestGRPPreprocessor.C:117
 TestGRPPreprocessor.C:118
 TestGRPPreprocessor.C:119
 TestGRPPreprocessor.C:120
 TestGRPPreprocessor.C:121
 TestGRPPreprocessor.C:122
 TestGRPPreprocessor.C:123
 TestGRPPreprocessor.C:124
 TestGRPPreprocessor.C:125
 TestGRPPreprocessor.C:126
 TestGRPPreprocessor.C:127
 TestGRPPreprocessor.C:128
 TestGRPPreprocessor.C:129
 TestGRPPreprocessor.C:130
 TestGRPPreprocessor.C:131
 TestGRPPreprocessor.C:132
 TestGRPPreprocessor.C:133
 TestGRPPreprocessor.C:134
 TestGRPPreprocessor.C:135
 TestGRPPreprocessor.C:136
 TestGRPPreprocessor.C:137
 TestGRPPreprocessor.C:138
 TestGRPPreprocessor.C:139
 TestGRPPreprocessor.C:140
 TestGRPPreprocessor.C:141
 TestGRPPreprocessor.C:142
 TestGRPPreprocessor.C:143
 TestGRPPreprocessor.C:144
 TestGRPPreprocessor.C:145
 TestGRPPreprocessor.C:146
 TestGRPPreprocessor.C:147
 TestGRPPreprocessor.C:148
 TestGRPPreprocessor.C:149
 TestGRPPreprocessor.C:150
 TestGRPPreprocessor.C:151
 TestGRPPreprocessor.C:152
 TestGRPPreprocessor.C:153
 TestGRPPreprocessor.C:154
 TestGRPPreprocessor.C:155
 TestGRPPreprocessor.C:156
 TestGRPPreprocessor.C:157
 TestGRPPreprocessor.C:158
 TestGRPPreprocessor.C:159
 TestGRPPreprocessor.C:160
 TestGRPPreprocessor.C:161
 TestGRPPreprocessor.C:162
 TestGRPPreprocessor.C:163
 TestGRPPreprocessor.C:164
 TestGRPPreprocessor.C:165
 TestGRPPreprocessor.C:166
 TestGRPPreprocessor.C:167
 TestGRPPreprocessor.C:168
 TestGRPPreprocessor.C:169
 TestGRPPreprocessor.C:170
 TestGRPPreprocessor.C:171
 TestGRPPreprocessor.C:172
 TestGRPPreprocessor.C:173
 TestGRPPreprocessor.C:174
 TestGRPPreprocessor.C:175
 TestGRPPreprocessor.C:176
 TestGRPPreprocessor.C:177
 TestGRPPreprocessor.C:178
 TestGRPPreprocessor.C:179
 TestGRPPreprocessor.C:180
 TestGRPPreprocessor.C:181
 TestGRPPreprocessor.C:182
 TestGRPPreprocessor.C:183
 TestGRPPreprocessor.C:184
 TestGRPPreprocessor.C:185
 TestGRPPreprocessor.C:186
 TestGRPPreprocessor.C:187
 TestGRPPreprocessor.C:188
 TestGRPPreprocessor.C:189
 TestGRPPreprocessor.C:190
 TestGRPPreprocessor.C:191
 TestGRPPreprocessor.C:192
 TestGRPPreprocessor.C:193
 TestGRPPreprocessor.C:194
 TestGRPPreprocessor.C:195
 TestGRPPreprocessor.C:196
 TestGRPPreprocessor.C:197
 TestGRPPreprocessor.C:198
 TestGRPPreprocessor.C:199
 TestGRPPreprocessor.C:200
 TestGRPPreprocessor.C:201
 TestGRPPreprocessor.C:202
 TestGRPPreprocessor.C:203
 TestGRPPreprocessor.C:204
 TestGRPPreprocessor.C:205
 TestGRPPreprocessor.C:206
 TestGRPPreprocessor.C:207
 TestGRPPreprocessor.C:208
 TestGRPPreprocessor.C:209
 TestGRPPreprocessor.C:210
 TestGRPPreprocessor.C:211
 TestGRPPreprocessor.C:212
 TestGRPPreprocessor.C:213
 TestGRPPreprocessor.C:214
 TestGRPPreprocessor.C:215
 TestGRPPreprocessor.C:216
 TestGRPPreprocessor.C:217
 TestGRPPreprocessor.C:218
 TestGRPPreprocessor.C:219
 TestGRPPreprocessor.C:220
 TestGRPPreprocessor.C:221
 TestGRPPreprocessor.C:222
 TestGRPPreprocessor.C:223
 TestGRPPreprocessor.C:224
 TestGRPPreprocessor.C:225
 TestGRPPreprocessor.C:226
 TestGRPPreprocessor.C:227
 TestGRPPreprocessor.C:228
 TestGRPPreprocessor.C:229
 TestGRPPreprocessor.C:230
 TestGRPPreprocessor.C:231
 TestGRPPreprocessor.C:232
 TestGRPPreprocessor.C:233
 TestGRPPreprocessor.C:234
 TestGRPPreprocessor.C:235
 TestGRPPreprocessor.C:236
 TestGRPPreprocessor.C:237
 TestGRPPreprocessor.C:238
 TestGRPPreprocessor.C:239
 TestGRPPreprocessor.C:240
 TestGRPPreprocessor.C:241
 TestGRPPreprocessor.C:242
 TestGRPPreprocessor.C:243
 TestGRPPreprocessor.C:244
 TestGRPPreprocessor.C:245
 TestGRPPreprocessor.C:246
 TestGRPPreprocessor.C:247
 TestGRPPreprocessor.C:248
 TestGRPPreprocessor.C:249
 TestGRPPreprocessor.C:250
 TestGRPPreprocessor.C:251
 TestGRPPreprocessor.C:252
 TestGRPPreprocessor.C:253
 TestGRPPreprocessor.C:254
 TestGRPPreprocessor.C:255
 TestGRPPreprocessor.C:256
 TestGRPPreprocessor.C:257
 TestGRPPreprocessor.C:258
 TestGRPPreprocessor.C:259
 TestGRPPreprocessor.C:260
 TestGRPPreprocessor.C:261
 TestGRPPreprocessor.C:262
 TestGRPPreprocessor.C:263
 TestGRPPreprocessor.C:264
 TestGRPPreprocessor.C:265
 TestGRPPreprocessor.C:266
 TestGRPPreprocessor.C:267
 TestGRPPreprocessor.C:268
 TestGRPPreprocessor.C:269
 TestGRPPreprocessor.C:270
 TestGRPPreprocessor.C:271
 TestGRPPreprocessor.C:272
 TestGRPPreprocessor.C:273
 TestGRPPreprocessor.C:274
 TestGRPPreprocessor.C:275
 TestGRPPreprocessor.C:276
 TestGRPPreprocessor.C:277
 TestGRPPreprocessor.C:278
 TestGRPPreprocessor.C:279
 TestGRPPreprocessor.C:280
 TestGRPPreprocessor.C:281
 TestGRPPreprocessor.C:282
 TestGRPPreprocessor.C:283
 TestGRPPreprocessor.C:284
 TestGRPPreprocessor.C:285
 TestGRPPreprocessor.C:286
 TestGRPPreprocessor.C:287
 TestGRPPreprocessor.C:288
 TestGRPPreprocessor.C:289
 TestGRPPreprocessor.C:290
 TestGRPPreprocessor.C:291
 TestGRPPreprocessor.C:292
 TestGRPPreprocessor.C:293
 TestGRPPreprocessor.C:294
 TestGRPPreprocessor.C:295
 TestGRPPreprocessor.C:296
 TestGRPPreprocessor.C:297
 TestGRPPreprocessor.C:298
 TestGRPPreprocessor.C:299
 TestGRPPreprocessor.C:300
 TestGRPPreprocessor.C:301
 TestGRPPreprocessor.C:302
 TestGRPPreprocessor.C:303
 TestGRPPreprocessor.C:304
 TestGRPPreprocessor.C:305
 TestGRPPreprocessor.C:306
 TestGRPPreprocessor.C:307
 TestGRPPreprocessor.C:308
 TestGRPPreprocessor.C:309
 TestGRPPreprocessor.C:310
 TestGRPPreprocessor.C:311
 TestGRPPreprocessor.C:312
 TestGRPPreprocessor.C:313
 TestGRPPreprocessor.C:314
 TestGRPPreprocessor.C:315
 TestGRPPreprocessor.C:316
 TestGRPPreprocessor.C:317
 TestGRPPreprocessor.C:318
 TestGRPPreprocessor.C:319
 TestGRPPreprocessor.C:320
 TestGRPPreprocessor.C:321
 TestGRPPreprocessor.C:322
 TestGRPPreprocessor.C:323
 TestGRPPreprocessor.C:324
 TestGRPPreprocessor.C:325
 TestGRPPreprocessor.C:326
 TestGRPPreprocessor.C:327
 TestGRPPreprocessor.C:328
 TestGRPPreprocessor.C:329
 TestGRPPreprocessor.C:330
 TestGRPPreprocessor.C:331
 TestGRPPreprocessor.C:332
 TestGRPPreprocessor.C:333
 TestGRPPreprocessor.C:334
 TestGRPPreprocessor.C:335
 TestGRPPreprocessor.C:336
 TestGRPPreprocessor.C:337
 TestGRPPreprocessor.C:338
 TestGRPPreprocessor.C:339
 TestGRPPreprocessor.C:340
 TestGRPPreprocessor.C:341
 TestGRPPreprocessor.C:342
 TestGRPPreprocessor.C:343
 TestGRPPreprocessor.C:344
 TestGRPPreprocessor.C:345
 TestGRPPreprocessor.C:346
 TestGRPPreprocessor.C:347
 TestGRPPreprocessor.C:348
 TestGRPPreprocessor.C:349
 TestGRPPreprocessor.C:350
 TestGRPPreprocessor.C:351
 TestGRPPreprocessor.C:352
 TestGRPPreprocessor.C:353
 TestGRPPreprocessor.C:354
 TestGRPPreprocessor.C:355
 TestGRPPreprocessor.C:356
 TestGRPPreprocessor.C:357
 TestGRPPreprocessor.C:358
 TestGRPPreprocessor.C:359
 TestGRPPreprocessor.C:360
 TestGRPPreprocessor.C:361
 TestGRPPreprocessor.C:362
 TestGRPPreprocessor.C:363
 TestGRPPreprocessor.C:364
 TestGRPPreprocessor.C:365
 TestGRPPreprocessor.C:366
 TestGRPPreprocessor.C:367
 TestGRPPreprocessor.C:368
 TestGRPPreprocessor.C:369
 TestGRPPreprocessor.C:370
 TestGRPPreprocessor.C:371