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

/* $Id$ */

#if !defined(__CINT__) || defined(__MAKECINT__)

/// \ingroup macros
/// \file TestMUONPreprocessor.C
/// \brief The macro for testing the shuttle preprocessors 
///
/// This macro runs the test preprocessor for MUON.
/// It uses AliTestShuttle to simulate a full Shuttle process
///
/// You must load relevant libraries (besides normal MUON ones -which is done
/// easily by executing root from the $ALICE_ROOT/MUON directory to use
/// the rootlogon.C there) before compiling this macro :
/// <pre>
/// gSystem->Load("$ALICE_ROOT/SHUTTLE/TestShuttle/libTestShuttle");
/// gSystem->Load("libMUONshuttle");
/// </pre>
/// Last line above assume you have $ALICE_ROOT/MUON/lib/tgt_[arch] (where
/// libMUONshuttle is located) in your LD_LIBRARY_PATH
///
/// Having $ALICE_ROOT/SHUTTLE/TestShuttle directory in your LD_LIBRARY_PATH
/// (or DYLD_LIBRARY_PATH on Mac OS X) won't hurt either...
///
/// You must also make a link of some OCDB entries to have the mapping loaded 
/// correctly :
///
/// <pre>
/// cd $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB
/// mkdir -p MUON/Calib
/// cd MUON/Calib
/// ln -si $ALICE_ROOT/OCDB/MUON/Calib/MappingData .
/// </pre>
///
/// and Align/Baseline if you'd like to test GMS subprocessor :
///
/// <pre>
/// cd $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB
/// mkdir -p MUON/Align
/// cd MUON/Align
/// ln -si $ALICE_ROOT/OCDB/MUON/Align/Baseline .
/// </pre>
///
/// The input data has to be created first by other processes (or is created
/// here by CreateDCSAliasMap() for tracker HV).
///
/// To play with it, you'll have to set/modify several lines, to
/// - a) select input files, using shuttle->AddInputFile()
/// - b) select run type, using shuttle->AddInputRunParameter() (the run type
///      dictates which task is really performed by the MUONPreprocessor
///
/// The sourceDirectory is there to "emulate" what the real preprocessor will
/// find on the FXS, and is assumed to have the following structure :
/// <pre>
/// CONFIG/
///    LDC0.config
///    LDC1.config
///    LDC2.config
///    LDC3.config
/// GAINS/
///    LDC0.gain
///    LDC1.gain
///    LDC2.gain
///    LDC3.gain
/// GMS/
///    GMS.root
/// OCCUPANCY/
///    mch.occupancy
/// PEDESTALS/
///    LDC0.ped
///    LDC1.ped
///    LDC2.ped
///    LDC3.ped
///    LDC4.conf
/// CONFIG/
///    LDC0.conf
///    LDC1.conf
///    LDC2.conf
///    LDC3.conf
///    LDC4.conf
/// TRIGGER/
///    ExportedFiles.dat (mandatory)
///    MtgGlobalCrate-1.dat
///    MtgLocalLut-1.dat
///    MtgLocalMask-1.dat
///    MtgRegionalCrate-1.dat
/// </pre>
///
/// IMPORTANT:
/// The trigger files have to be present in order for the algorithm to work correctly.
/// If you want to test the Trigger DCS maps only, but you don't have the .dat trigger files,
/// you have to create dummy files through :
/// <pre>
/// cd sourceDirectory/TRIGGER
/// echo -e "MtgLocalMask-1.dat\nMtgRegionalCrate-1.dat\nMtgGlobalCrate-1.dat\nMtgLocalLut-1.dat" > ExportedFiles.dat
/// touch MtgLocalMask-1.dat MtgRegionalCrate-1.dat MtgGlobalCrate-1.dat MtgLocalLut-1.dat
/// </pre>
///
/// For more information on usage, please see the \ref README_shuttle page.
///
/// \author Laurent Aphecetche, SUBATECH Nantes; \n
///         Diego Stocco, SUBATECH Nantes

#include "TestMUONPreprocessor.h"

#include "AliMUONTrackerPreprocessor.h"
#include "AliMUONTriggerPreprocessor.h"

#include "AliLog.h"

#include "AliMpBusPatch.h"
#include "AliMpExMap.h"
#include "AliMpHelper.h"
#include "AliMpDDLStore.h"
#include "AliMpDCSNamer.h"
#include "AliMpCDB.h"

#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliCDBId.h"
#include "AliShuttleInterface.h"
#include "AliTestShuttle.h"
#include "AliDCSValue.h"

#include "Riostream.h"
#include "TSystem.h"
#include "TMap.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TString.h"
#include "TRandom.h"
#endif

//______________________________________________________________________________
void TestMUONPreprocessor(Int_t runNumber=80, 
                          const char* runType="CALIBRATION",
                          const char* sourceDirectory="/afs/cern.ch/user/l/laphecet/public")
{
  // runType can be :
  //
  // PEDESTAL -> pedestals
  // CALIBRATION -> gains
  // PHYSICS -> HV
  // GMS

  // create AliTestShuttle instance
  // The parameters are run, startTime, endTime
  
  gSystem->Load("libTestShuttle.so");

  AliTestShuttle* shuttle = new AliTestShuttle(runNumber, 0, 1);
  
  const char* inputCDB = "local://$ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB";
  
  AliTestShuttle::SetMainCDB(inputCDB);
  AliTestShuttle::SetMainRefStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestReference");

  TString rt(runType);
  rt.ToUpper();
  
  if ( rt.Contains("PHYSICS") )
  {
    // Create DCS aliases
    TMap* dcsAliasMap = CreateDCSAliasMap(inputCDB, runNumber);

    if ( dcsAliasMap ) 
    {
      // now give the alias map to the shuttle
      shuttle->SetDCSInput(dcsAliasMap);
    }
  }
  
  printf("Test Shuttle temp dir: %s\n", AliShuttleInterface::GetShuttleTempDir());
  printf("Test Shuttle log dir: %s\n", AliShuttleInterface::GetShuttleLogDir());
  printf("Test OCDB storage Uri: %s\n", AliShuttleInterface::GetMainCDB().Data());
  printf("Test Reference storage Uri: %s\n", AliShuttleInterface::GetMainRefStorage().Data());
  
  // The shuttle can 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 4 files originating from different LDCs but with the same id (PEDESTALS)

  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","PEDESTALS","LDC0",Form("%s/PEDESTALS/LDC0.ped",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","PEDESTALS","LDC1",Form("%s/PEDESTALS/LDC1.ped",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","PEDESTALS","LDC2",Form("%s/PEDESTALS/LDC2.ped",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","PEDESTALS","LDC3",Form("%s/PEDESTALS/LDC3.ped",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","PEDESTALS","LDC4",Form("%s/PEDESTALS/LDC4.ped",sourceDirectory));

  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","CONFIG","LDC0",Form("%s/CONFIG/LDC0.conf",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","CONFIG","LDC1",Form("%s/CONFIG/LDC1.conf",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","CONFIG","LDC2",Form("%s/CONFIG/LDC2.conf",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","CONFIG","LDC3",Form("%s/CONFIG/LDC3.conf",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","CONFIG","LDC4",Form("%s/CONFIG/LDC4.conf",sourceDirectory));
  
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","GAINS","LDC0",Form("%s/GAINS/LDC0.gain",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","GAINS","LDC1",Form("%s/GAINS/LDC1.gain",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","GAINS","LDC2",Form("%s/GAINS/LDC2.gain",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","GAINS","LDC3",Form("%s/GAINS/LDC3.gain",sourceDirectory));

  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","OCCUPANCY","MON",Form("%s/OCCUPANCY/mch.occupancy",sourceDirectory));

  // and GMS file
  shuttle->AddInputFile(AliTestShuttle::kDCS,"MCH","GMS","GMS",Form("%s/GMS/GMS.root",sourceDirectory));

  // and then the trigger stuff
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MTR","LOCAL","LDC0",Form("%s/TRIGGER/MtgLocalMask-1.dat",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MTR","REGIONAL","LDC0",Form("%s/TRIGGER/MtgRegionalCrate-1.dat",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MTR","GLOBAL","LDC0",Form("%s/TRIGGER/MtgGlobalCrate-1.dat",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MTR","LUT","LDC0",Form("%s/TRIGGER/MtgLocalLut-1.dat",sourceDirectory));
  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MTR","EXPORTED","LDC0",Form("%s/TRIGGER/ExportedFiles.dat",sourceDirectory));

  // 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->SetInputRunType(runType);
  
  shuttle->AddInputRunParameter("totalEvents","20");
                                
  // Create the preprocessor that should be tested, it registers itself automatically to the shuttle
  new AliMUONTrackerPreprocessor(shuttle);
  new AliMUONTriggerPreprocessor(shuttle);
  
  shuttle->Print();
  
  // Test the preprocessor
  shuttle->Process();
}

//______________________________________________________________________________
void GenerateConfig()
{
  /// Generate "fake" configuration files for the tracker. One per LDC.
  
  Bool_t undefStorage(kFALSE);
  
  AliCDBManager* man = AliCDBManager::Instance();
  if (!man->IsDefaultStorageSet())
  {
    undefStorage = kTRUE;
    man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
    man->SetRun(0);
  }
  
  // Load mapping
  Bool_t ok = AliMpCDB::LoadDDLStore();
  
  if (undefStorage)
  {
    man->UnsetDefaultStorage();
  }
  
  if (!ok)
  {
    AliErrorGeneral("GenerateConfig","Could not load DDLStore from OCDB");
    return;
  }
  
  ofstream* files[5];
  for ( Int_t i = 0; i < 5; ++i ) 
  {
    files[i]=0;
  }
  
  TIter next(AliMpDDLStore::Instance()->CreateBusPatchIterator());
  AliMpBusPatch* bp;
  
  while ( ( bp = static_cast<AliMpBusPatch*>(next()) ) )
  {
    Int_t ddl = bp->GetDdlId();
    
    Int_t ldc = ddl/4;
    
    if (!files[ldc])
    {
      files[ldc] = new ofstream(Form("LDC%d.conf",ldc));
      *(files[ldc]) << "# changed" << endl;
    }

    for ( Int_t imanu = 0; imanu < bp->GetNofManus(); ++imanu ) 
    {
      *(files[ldc]) << bp->GetId() << " " << bp->GetManuId(imanu) << endl;
    }        
  }
  
  for ( Int_t i = 0; i < 5; ++i ) 
  {
    if ( files[i] ) files[i]->close();
    delete files[i];
  }
}

//______________________________________________________________________________
TMap* CreateDCSAliasMap(const char* inputCDB, Int_t runNumber)
{
  /// Creates a DCS structure for MUON Tracker HV and Trigger DCS and Currents
  ///
  /// 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
  
  Bool_t undefStorage(kFALSE);
  
  AliCDBManager* man = AliCDBManager::Instance();
  if (!man->IsDefaultStorageSet())
  {
    undefStorage = kTRUE;
    man->SetDefaultStorage(inputCDB);
    man->SetRun(runNumber);
  }
  
  // Load mapping
  Bool_t ok = AliMpCDB::LoadDDLStore();
  
  if (undefStorage)
  {
    man->UnsetDefaultStorage();
  }
  
  if (!ok)
  {
    AliErrorGeneral("CreateDCSAliasMap","Could not load DDLStore from OCDB");
    return 0x0;
  }

  TMap* aliasMap = new TMap;
  aliasMap->SetOwner(kTRUE);
  
  TRandom random(0);

  const Char_t* detName[2] = { "TRACKER", "TRIGGER" };

  for(Int_t idet=0; idet<2; idet++){

    TString sDetName(detName[idet]);
    sDetName.ToUpper();
  
    AliMpDCSNamer dcsNamer(detName[idet]);
  
    TObjArray* aliases = dcsNamer.GenerateAliases();
  
    for ( Int_t i = 0; i < aliases->GetEntries(); ++i ) 
    {
      TObjString* alias = static_cast<TObjString*>(aliases->At(i));
      TString& aliasName = alias->String();
      if ( aliasName.Contains("sw") && sDetName.Contains("TRACKER")) 
      {
        // HV Switch (St345 only)
        TObjArray* valueSet = new TObjArray;
        valueSet->SetOwner(kTRUE);
        Bool_t bvalue = kTRUE;
        //      Float_t r = random.Uniform();
        //      if ( r < 0.007 ) value = kFALSE;      
        //      if ( aliasName.Contains("DE513sw2") ) value = kFALSE;
        
        for ( UInt_t timeStamp = 0; timeStamp < 60*3; timeStamp += 60 )
        {
          AliDCSValue* dcsValue = new AliDCSValue(bvalue,timeStamp);
          valueSet->Add(dcsValue);
        }
        aliasMap->Add(new TObjString(*alias),valueSet);
      }
      else
      {
        TObjArray* valueSet = new TObjArray;
        valueSet->SetOwner(kTRUE);
        for ( UInt_t timeStamp = 0; timeStamp < 60*15; timeStamp += 120 )
        {
          Float_t value = 0;
          if(sDetName.Contains("TRACKER")){
            if ( aliasName.Contains("vMon"))
            {
              value = random.Gaus(1750,62.5);
              if ( aliasName == "MchHvLvLeft/Chamber00Left/Quad2Sect1.actual.vMon") value = 500;
            }
            else
            {
              value = random.Gaus(10,2);
              if ( aliasName == "MchHvLvLeft/Chamber00Left/Quad2Sect1.actual.iMon") value = 50;
            }
          }
          else if(aliasName.Contains("iMon")){
            value = random.Gaus(2.,0.4);
          }
          else {
            value = random.Gaus(8000.,16.);
          }
          
          AliDCSValue* dcsValue = new AliDCSValue(value,timeStamp);
          valueSet->Add(dcsValue);
        }
        if ( aliasName == "MchHvLvLeft/Chamber04Left/Slat06.actual.vMon" ) continue;
        if ( aliasName == "MTR_INSIDE_MT22_RPC3_HV.vEff" ) continue;
        if ( aliasName == "MTR_OUTSIDE_MT21_RPC4_HV.actual.iMon" ) continue;
        aliasMap->Add(new TObjString(*alias),valueSet);
      }
    } // loop on aliases
    
    delete aliases;
  } // loop on detectors (tracker and trigger)
  
  AliMpCDB::UnloadAll();
  
  return aliasMap;
}

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