ROOT logo
/* 
$Id$ 
*/

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

extern TBenchmark *gBenchmark;
void TOFPreprocessor(Char_t * RunType="PHYSICS")
{
  gSystem->Load("$ALICE_ROOT/SHUTTLE/TestShuttle/libTestShuttle.so");

  AliLog::SetClassDebugLevel("AliTOFPreprocessor",2);
  // initialize location of CDB
  AliTestShuttle::SetMainCDB("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");
  AliTestShuttle::SetMainRefStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestReference");

  // create AliTestShuttle instance
  Int_t nrun = 104892;
  AliTestShuttle* shuttle = new AliTestShuttle(nrun, 30, 980);
  //setting run type to physiscs
  shuttle->SetInputRunType(RunType);
  shuttle->SetTimeCreated(20);
  shuttle->SetDCSQueryOffset(20);

  // Generation of "fake" input DCS data
  TMap* dcsAliasMap = CreateDCSAliasMap();  

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

  // processing files. for the time being, the files are local.
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "HITS", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Hits.root");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "CALIB", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Calib.root");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "READOUT", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Readout.root");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "DELAYS", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Total.root");
  shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "RUNLevel", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Partial.root");
  shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeLightMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEElight.20101028.133932.8000");
  shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEE.20091217.194708.105517");

  TString filename;
  TString LDCname;
  //char filename[100];
  //char LDCname[5];

  for (Int_t iLDC=0;iLDC<2;iLDC++){
    filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutPulserLDC_%02i.root",iLDC*2);
    LDCname.Form("LDC%i",iLDC*2);
    shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "PULSER", LDCname, filename);
    filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutNoiseLDC_%02i.root",iLDC*2);
    LDCname.Form("LDC%i",iLDC*2);
    shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "NOISE", LDCname, filename);
  }
  

  // instantiation of the preprocessor
  AliPreprocessor* pp = new AliTOFPreprocessor(shuttle);

  // preprocessing
  gBenchmark->Start("process");
  shuttle->Process();
  gBenchmark->Stop("process");
  gBenchmark->Print("process");

  
}


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;
  /*
  TDatime *datime = new TDatime();
  Int_t time = datime->GetTime();
  Int_t date = datime->GetDate();
  Int_t pid  = gSystem->GetPid();
  delete datime;
  Int_t iseed = TMath::Abs(10000 * pid + time - date); 
  */


  Float_t tentHVv=6500, tentHVi=80;
  Float_t sigmaHVv=10, sigmaHVi=10;

  Float_t tent=0, sigma=0;//, thr=0;
  // to have all the aliases, decomment the following line:
  Int_t NAliases=360, NHV=90;


  // if not all the aliases are there, use this:
  //Int_t NAliases=120, NHV=90;

  TString sindex;
  TString aliasName;

  for(int nAlias=0;nAlias<NAliases;nAlias++) {

    TObjArray* valueSet = new TObjArray;
    valueSet->SetOwner(1);

    if (nAlias<NHV){
      aliasName = "tof_hv_vp_";
      sindex.Form("%02i",nAlias);
      aliasName += sindex;
      //aliasName += nAlias;
      tent=tentHVv;
      sigma=sigmaHVv;
      //      thr=thrHVv;
    }
    else if (nAlias<NHV*2){
      //      aliasName = "HVvneg";
      //aliasName += nAlias-NHV;
      aliasName = "tof_hv_vn_";
      sindex.Form("%02i",nAlias-NHV);
      aliasName += sindex;
      tent=-tentHVv;
      sigma=-sigmaHVv;
      //thr=-thrHVv;
    }
    else if (nAlias<NHV*3){
      //      aliasName = "HVcpos";
      //aliasName += nAlias-2*NHV;
      aliasName = "tof_hv_ip_";
      sindex.Form("%02i",nAlias-2*NHV);
      aliasName += sindex;
      tent=tentHVi;
      sigma=sigmaHVi;
      //thr=thrHVc;
    }
    else if (nAlias<NHV*4){
      //      aliasName = "HVcneg";
      //aliasName += nAlias-3*NHV;
      aliasName = "tof_hv_in_";
      sindex.Form("%02i",nAlias-3*NHV);
      aliasName += sindex;
      tent=-tentHVi;
      sigma=-sigmaHVi;
      //thr=-thrHVc;
    }
    // gauss generation of values 
    for (int timeStamp=0;timeStamp<6000;timeStamp+=10){
    //for (int timeStamp=0;timeStamp<1;timeStamp++){
      Float_t gaussvalue = (Float_t) (random.Gaus(tent,sigma));
      if (TMath::Abs(gaussvalue-tent)>sigma){
	AliDCSValue* dcsVal = new AliDCSValue(gaussvalue, timeStamp);
	valueSet->Add(dcsVal);
      }
    }

    aliasMap->Add(new TObjString(aliasName), valueSet);

  }




  const Int_t kNsectors = 18;
  const Int_t kNplates = 5;

  UInt_t baseWord = 0;
  UInt_t oldBaseWord = 0;

  for(int i=0;i<kNsectors;i++)
    for(int j=0;j<kNplates;j++) {

      TObjArray* valueSetHV = new TObjArray;
      valueSetHV->SetOwner(1);

      aliasName = "TOF_HVSTATUS_";
      sindex.Form("SM%02dMOD%1d",i,j);
      aliasName += sindex;


      //for (int timeStamp=0;timeStamp<6000;timeStamp+=600) {
      for (int timeStamp=0;timeStamp<1201;timeStamp+=600) {
	if (timeStamp==0 /*|| timeStamp==1200*/) {
	  baseWord = CreateHVword(i,j, kTRUE);
	  oldBaseWord = baseWord;
	  AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
	  valueSetHV->Add(dcsVal);
	}
	else {
	  if (random.Uniform(0.,1.)>=0.5) {
	    baseWord = CreateHVword(i,j, kFALSE);
	    if (baseWord<=oldBaseWord) {
	      oldBaseWord = baseWord;
	      AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
	      valueSetHV->Add(dcsVal);
	    }
	    else {
	      AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp);
	      valueSetHV->Add(dcsVal);
	    }
	    //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord));
	  }
	}
      }

      /*
      baseWord = CreateHVword(i,j, kTRUE);
      AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0);
      valueSetHV->Add(dcsVal0);

      if ((i==0 && j==2) || (i==9 && j==4)) {
	baseWord = CreateHVword(i,j, kFALSE);
	AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 600);
	valueSetHV->Add(dcsVal1);
      }

      baseWord = CreateHVword(i,j, kTRUE);
      AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 1200);
      valueSetHV->Add(dcsVal2);
      */

      aliasMap->Add(new TObjString(aliasName), valueSetHV);

    }


  const Int_t kNddl = 72;
  baseWord = 0;
  oldBaseWord = 0;

  for(int i=0;i<kNddl;i++) {

    TObjArray* valueSetLV = new TObjArray;
    valueSetLV->SetOwner(1);

    aliasName = "TOF_FEACSTATUS_";
    sindex.Form("%02d",i);
    aliasName += sindex;


    //for (int timeStamp=0;timeStamp<6000;timeStamp+=600) {
    for (int timeStamp=0;timeStamp<1201;timeStamp+=400) {
      if (timeStamp==0 /*|| timeStamp==1200*/) {
	baseWord = CreateLVword(kTRUE);
	AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
	valueSetLV->Add(dcsVal);
	oldBaseWord = baseWord;
	//Info(Form(" %2d %s %d %d",i,aliasName,timeStamp,baseWord));
	}
      else {
	if (random.Uniform(0.,1.)>=0.5) {
	  baseWord = CreateLVword(kFALSE);
	  if (baseWord<=oldBaseWord) {
	    oldBaseWord = baseWord;
	    AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
	    valueSetLV->Add(dcsVal);
	  }
	  else {
	    AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp);
	    valueSetLV->Add(dcsVal);
	  }
	  //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord));
	}
      }
    }

    /*
    baseWord = CreateLVword(kTRUE);
    AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0);
    valueSetLV->Add(dcsVal0);

    if (i==7 || i==9) {
      baseWord = CreateLVword(kFALSE);
      AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 400);
      valueSetLV->Add(dcsVal1);
    }
    else if (i==50 || i==35) {
      baseWord = CreateLVword(kFALSE);
      AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 800);
      valueSetLV->Add(dcsVal2);
    }

    baseWord = CreateLVword(kTRUE);
    AliDCSValue* dcsVal3 = new AliDCSValue(baseWord, 1200);
    valueSetLV->Add(dcsVal3);
    */

    aliasMap->Add(new TObjString(aliasName), valueSetLV);

  }


  return aliasMap;
}


UInt_t CreateHVword(Int_t nSector, Int_t nPlate, Bool_t isAtBorder) {
  //
  //
  //

  UInt_t baseWord = 0;
  UInt_t word = 0;
  TRandom random;

  for (Int_t iStrip=0; iStrip<AliTOFGeometry::NStrip(nPlate); iStrip++) {

    if (isAtBorder) {
      word = 1;
      if (nPlate==2 && nSector>=13 && nSector<=15)
	word = 0;
    }
    else {
      random.Uniform(0.,1.)<0.5 ?   word = 0 : word = 1;
      if (nPlate==2 && nSector>=13 && nSector<=15)
	word = 0;
      word = 0;
    }

    AliBitPacking::PackWord(word,baseWord,iStrip,iStrip);
  }

  return baseWord;

}


UInt_t CreateLVword(Bool_t isAtBorder) {
  //
  //
  //

  UInt_t baseWord = 0;
  UInt_t word = 0;
  TRandom random;

  for (Int_t iFeac=0; iFeac<8; iFeac++) {

    if (isAtBorder)
      word = 1;
    else {
      random.Uniform(0.,1.)<0.5 ?   word = 0 : word = 1;
      word = 0;
    }

    AliBitPacking::PackWord(word,baseWord,iFeac,iFeac);
  }

  return baseWord;

}


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()->Get("TOF/DCS/Data", 0);
  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");
	metaData.SetComment("Test object for TOFPreprocessor.C");

  AliCDBId id("TOF/DCS/Data", 0, 0);

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

  AliCDBManager::Instance()->Put(dcsAliasMap, id, &metaData);
}


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