ROOT logo
/* $Id$ */

// This class runs the 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

void TestZDCPreprocessor(const char* runType="PHYSICS")
{
  // load library
  gSystem->Load("libTestShuttle.so");

  // create AliTestShuttle instance
  // The parameters are run, startTime, endTime
  AliTestShuttle* shuttle = new AliTestShuttle(0, 0, 1);

  // TODO if needed, change location of OCDB and Reference test folders
  // by default they are set to $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB and TestReference
  //AliTestShuttle::SetMainCDB("local://$ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB");
  AliTestShuttle::SetMainCDB("local://$ALICE_ROOT/OCDB");
  //AliTestShuttle::SetMainCDB("alien://folder=/alice/data/2009/OCDB/");
  AliTestShuttle::SetMainRefStorage("local://$ALICE_ROOT/SHUTTLE/TestShuttle/TestReference");

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

  // TODO(1)
  //
  // The shuttle can read DCS data, if the preprocessor should be tested to process DCS data,
  // some fake data has to be created.
  //
  // The "fake" input data can be taken using either (a) or (b):
  // (a) data from a file: Use ReadDCSAliasMap()
  //     the format of the file is explained in ReadDCSAliasMap()
  //     To use it uncomment the following line:
  //
  //TMap* dcsAliasMap = ReadDCSAliasMap();
  //
  // (b) generated in this macro: Use CreateDCSAliasMap() and its documentation
  //     To use it uncomment the following line:
  //
  TMap* dcsAliasMap = CreateDCSAliasMap();
  dcsAliasMap->Print("");
  //WriteDCSAliasMap();

  // now give the alias map to the shuttle
  shuttle->SetDCSInput(dcsAliasMap);

  // TODO(2)
  //
  // The shuttle can also process files that originate from DCS, DAQ and HLT.
  // To test it, we provide some local files and locations where these would be found when
  // the online machinery would be there.
  // In real life this functions would be produces by the sub-detectors
  // calibration programs in DCS, DAQ or HLT. These files can then be retrieved using the Shuttle.
  //
  // Files are added with the function AliTestShuttle::AddInputFile. The syntax is:
  // AddInputFile(<system>, <detector>, <id>, <source>, <local-file>)
  // In this example we add a file originating from the GDC with the id PEDESTALS
  // Three files originating from different LDCs but with the same id are also added
  // Note that the test preprocessor name is TPC. The name of the detector's preprocessor must follow
  // the "online" naming convention ALICE-INT-2003-039.
  //
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "PEDESTALDATA", "LDC", "ZDCPedestal.dat");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "PEDESTALHISTOS", "LDC", "ZDCPedHisto.root");
  //
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "LASERDATA", "LDC", "ZDCLaserCalib.dat");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "LASERHISTOS", "LDC", "ZDCLaserHisto.root");
  //
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "EMDENERGYCALIB", "LDC", "ZDCEnergyCalib.dat");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "EMDTOWERCALIB", "LDC", "ZDCTowerCalib.dat");
  //
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "MBCALIB", "LDC", "ZDCMBCalib.root");
  //
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "MAPPING", "MON", "ZDCChMapping.dat");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "TDCDATA", "MON", "ZDCTDCCalib.dat");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "TDCHISTOS", "MON", "ZDCTDCHisto.root");

  // Todo(3)
  //
  // The shuttle can read run type stored in the DAQ logbook.
  // To test it, we must provide the run type manually. They will be retrieved in the preprocessor
  // using GetRunType function.
  shuttle->SetInputRunType(runType);
  
  // TODO(4)
  //
  // The shuttle can read run parameters stored in the DAQ run logbook.
  // To test it, we must provide the run parameters manually. They will be retrieved in the preprocessor
  // using GetRunParameter function.
  // In real life the parameters will be retrieved automatically from the run logbook;
  shuttle->AddInputRunParameter("beamType", "A-A");
  shuttle->AddInputRunParameter("beamEnergy", "1380");
  //shuttle->AddInputRunParameter("beamType", "p-p");
  shuttle->AddInputRunParameter("totalEvents", "1000");
  shuttle->AddInputRunParameter("NumberOfGDCs", "1");

  // TODO(5) NEW!
  //
  // This is for preprocessor that require data from HLT.
  // Since HLT may be switched off, the preprocessor should first query the Run logbook where
  // the HLT status is stored. SHUTTLE implements a shortcut function (GetHLTStatus) that returns
  // a bool directly. 1 = HLT ON, 0 = HLT OFF
  //
  Bool_t hltStatus=kFALSE;
  shuttle->SetInputHLTStatus(hltStatus);

  // TODO(6)
  //
  // The shuttle can query condition parameters valid from the current run from the OCDB
  // To test it, we must first store the object into the OCDB. It will be retrieved in the preprocessor
  // using GetFromOCDB function.

  /*TObjString obj("This is a condition parameter stored in OCDB");
  AliCDBId id("ZDC/Calib/Data", 0, AliCDBRunRange::Infinity());
  AliCDBMetaData md;
  AliCDBEntry entry(&obj, id, &md);

  shuttle->AddInputCDBEntry(&entry);
  */
  
  // TODO(6)
  // Create the preprocessor that should be tested, it registers itself automatically to the shuttle
  AliPreprocessor* test = new AliZDCPreprocessor(shuttle);
  shuttle->Print();
  
  // Test the preprocessor
  shuttle->Process();
  //printf(" Back to test macro: final checks! \n");

  // TODO(7)
  // In the preprocessor AliShuttleInterface::Store should be called to put the final
  // data to the CDB. To check if all went fine have a look at the files produced in
  // $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB/<detector>/SHUTTLE/Data
  //
  // Check the file which should have been created
  AliCDBEntry* chkEntry0 = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
  			->Get("ZDC/Calib/ChMap", 0);
  TString str(runType);
  AliCDBEntry* chkEntry1;
  if((str.CompareTo("STANDALONE_PEDESTAL")) == 0) chkEntry1 = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
  			->Get("ZDC/Calib/Pedestals", 0);
  else if((str.CompareTo("STANDALONE_LASER")) == 0) chkEntry1 = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
  			->Get("ZDC/Calib/LaserCalib", 0);
  else if((str.CompareTo("CALIBRATION_EMD")) == 0) chkEntry1 = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
  			->Get("ZDC/Calib/EnergyCalib", 0);
  else if((str.CompareTo("PHYSICS")) == 0) chkEntry1 = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
  			->Get("ZDC/Calib/TDCCalib", 0);
  
  
  if(!chkEntry0){
    printf("No file in ZDC/Calib/ChMap\n");
    return;
  }
  if(!chkEntry1){
    if((str.CompareTo("STANDALONE_PEDESTAL")) == 0)  printf("No file in ZDC/Calib/Pedestal\n");
    else if((str.CompareTo("STANDALONE_LASER")) == 0) printf("No file in ZDC/Calib/LaserCalib\n");
    else if((str.CompareTo("CALIBRATION_EMD")) == 0)  printf("No file in ZDC/Calib/EnergyCalib\n");
    else if((str.CompareTo("PHYSICS")) == 0)  printf("No file in ZDC/Calib/TDCCalib\n");
    return;
  }
  

  /*AliTestDataDCS* output = dynamic_cast<AliTestDataDCS*> (chkEntry1->GetObject());
  // If everything went fine, draw the result
  if (output)
    output->Draw();*/
}

TMap* CreateDCSAliasMap()
{
  // 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

  // In this example 6 aliases exists: DCSAlias1 ... DCSAlias6
  // Each contains 1000 values randomly generated by TRandom::Gaus + 5*nAlias

  TMap* aliasMap = new TMap;
  aliasMap->SetOwner(1);

  TRandom random;
  TString aliasNames[28];

  // ******************************** alignment values
  aliasNames[0] = "ZDC_ZNA_POS.actual.position";
  aliasNames[1] = "ZDC_ZPA_POS.actual.position";
  aliasNames[2] = "ZDC_ZNC_POS.actual.position";
  aliasNames[3] = "ZDC_ZPC_POS.actual.position";
  //
  for(int nAlias=0; nAlias<4; nAlias++){
    TObjArray* valueSet = new TObjArray;
    valueSet->SetOwner(1);

    TString aliasName = aliasNames[nAlias];
    //printf("\n\n alias: %s\n\n",aliasName.Data());

    Float_t simVal = (Float_t) (random.Rndm()*0.025+random.Rndm()*0.1);
    int timeStamp1[5] = {0,500,1000,1500,2000};
    for(int i=0;i<5;i++){
      AliDCSValue* dcsVal = new AliDCSValue(simVal, timeStamp1[i]);
      //printf("%s\n",dcsVal->ToString());
      valueSet->Add(dcsVal);
    }
    aliasMap->Add(new TObjString(aliasName), valueSet);
  }
  // ******************************** HV values
  aliasNames[4]  = "ZDC_ZNA_HV0.actual.vMon";
  aliasNames[5]  = "ZDC_ZNA_HV1.actual.vMon";
  aliasNames[6]  = "ZDC_ZNA_HV2.actual.vMon";
  aliasNames[7]  = "ZDC_ZNA_HV3.actual.vMon";
  aliasNames[8]  = "ZDC_ZNA_HV4.actual.vMon";
  //
  aliasNames[9]   = "ZDC_ZPA_HV0.actual.vMon";
  aliasNames[10]  = "ZDC_ZPA_HV1.actual.vMon";
  aliasNames[11]  = "ZDC_ZPA_HV2.actual.vMon";
  aliasNames[12]  = "ZDC_ZPA_HV3.actual.vMon";
  aliasNames[13]  = "ZDC_ZPA_HV4.actual.vMon";
  //
  aliasNames[14]  = "ZDC_ZNC_HV0.actual.vMon";
  aliasNames[15]  = "ZDC_ZNC_HV1.actual.vMon";
  aliasNames[16]  = "ZDC_ZNC_HV2.actual.vMon";
  aliasNames[17]  = "ZDC_ZNC_HV3.actual.vMon";
  aliasNames[18]  = "ZDC_ZNC_HV4.actual.vMon";
  //
  aliasNames[19]  = "ZDC_ZPC_HV0.actual.vMon";
  aliasNames[20]  = "ZDC_ZPC_HV1.actual.vMon";
  aliasNames[21]  = "ZDC_ZPC_HV2.actual.vMon";
  aliasNames[22]  = "ZDC_ZPC_HV3.actual.vMon";
  aliasNames[23]  = "ZDC_ZPC_HV4.actual.vMon";
  //
  aliasNames[24]  = "ZDC_ZEM_HV0.actual.vMon";
  aliasNames[25]  = "ZDC_ZEM_HV1.actual.vMon";
  //
  aliasNames[26]  = "ZDC_REFA_HV.actual.vMon";
  aliasNames[27]  = "ZDC_REFC_HV.actual.vMon";
  //
  for(int nAlias=4;nAlias<28;nAlias++){
//   if(nAlias<14 || nAlias>18){
     TObjArray* valueSet = new TObjArray;
     valueSet->SetOwner(1);
   
     TString aliasName = aliasNames[nAlias];
     //printf("\n\n alias: %s\n\n",aliasName.Data());

     for(int timeStamp=0;timeStamp<=2000;timeStamp+=500){
       Float_t simVal = (Float_t) (random.Gaus()*600.+1800.);
       AliDCSValue* dcsVal = new AliDCSValue(simVal, timeStamp);
       //printf("%s\n",dcsVal->ToString());
       valueSet->Add(dcsVal);
     }
     aliasMap->Add(new TObjString(aliasName), valueSet);
//   }
  }

  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()

  AliCDBManager *manager = AliCDBManager::Instance();
  AliCDBStorage *sto = manager->GetStorage("local://$ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB/");
  AliCDBId id("ZDC/DCS/Data",0,999999999);
  AliCDBEntry *entry = sto->Get("ZDC/DCS/Data", 0);
  if(!entry) printf("TestZDCPreprocessor.C -> ERROR! No entry found as DCS Map! \n");
  return dynamic_cast<TMap*> (entry->GetObject());
}

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

  TMap* dcsAliasMap = CreateDCSAliasMap();

  AliCDBMetaData metaData;
	metaData.SetBeamPeriod(0);
	metaData.SetResponsible("Chiara Oppedisano");
	metaData.SetComment("Test object for TestZDCPreprocessor.C");

  AliCDBId id("ZDC/DCS/Data", 0, 999999999);

  // initialize location of CDB
  AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");

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