ROOT logo
#include "TrainSetup.C"
/**
 * @file   MakeFullTrain.C
 * @author Christian Holm Christensen <cholm@master.hehi.nbi.dk>
 * @date   Fri Jun  1 13:53:43 2012
 * 
 * @brief  
 * 
 * 
 * @ingroup pwglf_forward_trains_specific
 */

//====================================================================
/**
 * Analysis train to make Forward and Central multiplicity, @f$
 * dN/d\eta@f$, flow and @f$\Psi_R@f$ in one loop over the ESDs 
 *
 * @ingroup pwglf_forward_aod
 * @ingroup pwglf_forward_dndete
 * @ingroup pwglf_forward_flow
 * @ingroup pwglf_forward_trains_specific
 */
class MakeFullTrain : public TrainSetup
{
public:
  /** 
   * Constructor.  Date and time must be specified when running this
   * in Termiante mode on Grid
   * 
   * @param name     Name of train (free form)
   */
  MakeFullTrain(const  char* name) 
    : TrainSetup(name)
  {
    // General
    fOptions.Add("dndeta",  "Add dN/deta tasks");
    fOptions.Add("flow",    "Add flow tasks");
    fOptions.Add("cent",    "Use centrality");
    fOptions.Add("sat-vtx", "Use satellite interactions");
    fOptions.Add("vzMin",    "CENTIMETER", "Min Ip Z",                 "-10");
    fOptions.Add("vzMax",    "CENTIMETER", "Max Ip Z",                 "+10");
    // ESD settings
    fOptions.Add("run",            "NUMBER",  "Run number", 0);
    fOptions.Add("sys",            "SYSTEM",  "1:pp, 2:PbPb, 3:pPb", "");
    fOptions.Add("snn",            "ENERGY",  "Center of mass energy GeV","");
    fOptions.Add("field",          "STRENGTH","L3 field strength in kG", "");
    fOptions.Add("aod-forward-config", "FILE", "Forward configuration", 
		 "ForwardAODConfig.C");
    fOptions.Add("aod-central-config", "FILE", "Forward configuration", 
		 "CentralAODConfig.C");
    fOptions.Add("aod-corr", "DIR",    "Corrections dir", "");
    // dNdeta AOD settings
    fOptions.Add("dndeta-config",  "FILE", "dN/deta configuration", 
		 "dNdetaConfig.C");
    fOptions.Add("dndeta-trig",    "TYPE",     "Trigger type",         "INEL");
    fOptions.Add("dndeta-scheme",  "SCHEME",   "Normalization scheme",     "");
    fOptions.Add("dndeta-trigEff", "EFFICENCY","Trigger effeciency",       1);
    fOptions.Add("dndeta-trigEff0","EFFICENCY","0-bin trigger effeciency", 1);
    // Flow AOD settings
    fOptions.Add("flow-max-mom", "2|3|4|5", "Max flow moment to analyse", "5");
    fOptions.Add("flow-detectors", "[fmd,vzero]", 
		 "Forward detectors", "fmd+vzero");
    fOptions.Add("flow-qc-types", "[std,eta-gap,3cor,all]", 
		 "Which types of QC's to do", "all");
    fOptions.Add("flow-eta-gap","DISTANCE",  "Size of eta gap",          "2.0");
    fOptions.Add("flow-b-cent", "Use the impact parameter for centrality");
    fOptions.Add("flow-afterburner","[eta,phi,b,pid]", "What to afterburn", "");
    fOptions.Add("flow-outlier-fmd", "NSIGMA", "Outlier cut for FMD", "4.0");
    fOptions.Add("flow-outlier-spd", "NSIGMA", "Outlier cut for SPD", "0.0");
    fOptions.Add("flow-mc-vtx", "Whether to get the vertex from the MC header");
    fOptions.Add("flow-ref-tracks", "[tpc,hybrid,only]", 
		 "Whether or only to use tracks for reference flow", 
		 "tpc+hybrid");
    fOptions.Add("flow-ep", "Add Event Plane tasks (need VZERO AOD objects)");

    fOptions.Set("type", "ESD"); 
    fOptions.Show(std::cout);

  }
protected:
  /** 
   * Create the tasks 
   * 
   * @param mgr  Analysis manager 
   */
  void CreateTasks(AliAnalysisManager*)
  {
    // --- Output file name ------------------------------------------
    AliAnalysisManager::SetCommonFileName("forward.root");

    // --- Load libraries/pars ---------------------------------------
    fRailway->LoadLibrary("PWGLFforward2");
    
    // --- Set load path ---------------------------------------------
    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2",
			     gROOT->GetMacroPath()));
    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/ANALYSIS/macros",
			     gROOT->GetMacroPath()));

    // --- Check if this is MC ---------------------------------------
    Bool_t mc = HasMCHandler();
   
    // --- Task to copy header information ---------------------------
    CoupleCar("AddTaskCopyHeader.C", "");

    // --- Get options -----------------------------------------------
    ULong_t  run    = fOptions.AsInt   ("run", 0);
    UShort_t sys    = fOptions.AsInt   ("sys", 0);
    UShort_t sNN    = fOptions.AsInt   ("snn", 0);
    UShort_t fld    = fOptions.AsInt   ("field", 0);
    Bool_t   cent   = fOptions.Has     ("cent");
    Bool_t   satVtx = fOptions.AsBool  ("sat-vtx");
    Double_t vzMin  = fOptions.AsDouble("vzmin", -10);
    Double_t vzMax  = fOptions.AsDouble("vzmax", +10);
    TString  cor    = "";
    if (fOptions.Has("aod-corr")) cor = fOptions.Get("aod-corr");
    
    // --- Add the task ----------------------------------------------
    TString fwdConfig = fOptions.Get("aod-forward-config");
    AliAnalysisTask* fwd = CoupleCar("AddTaskForwardMult.C",
				     Form("%d,%lu,%hu,%hu,%hd,\"%s\",\"%s\"", 
					  mc, run, sys, sNN, fld, 
					  fwdConfig.Data(), cor.Data()));
    fRailway->LoadAux(gSystem->Which(gROOT->GetMacroPath(), fwdConfig));

    // --- Add the task ----------------------------------------------
    TString cenConfig = fOptions.Get("aod-central-config");
    AliAnalysisTask* cen = CoupleCar("AddTaskCentralMult.C",
				     Form("%d,%lu,%hu,%hu,%hd,\"%s\",\"%s\"", 
					  mc, run, sys, sNN, fld, 
					  cenConfig.Data(),cor.Data()));
    fRailway->LoadAux(gSystem->Which(gROOT->GetMacroPath(), cenConfig));
    if (!cor.IsNull()) {
      if (fwd) 
	fRailway->LoadAux(Form("%s/fmd_corrections.root",cor.Data()), true);
      if (cen) 
	fRailway->LoadAux(Form("%s/spd_corrections.root",cor.Data()), true);
    }

    // --- Add MC particle task --------------------------------------
    if (mc) CoupleCar("AddTaskMCParticleFilter.C","");

    
    // --- Add dN/deta tasks -----------------------------------------
    if (fOptions.Has("dNdeta")) {
      // --- Get parameters --------------------------------------------
      TString  trig   = fOptions.Get     ("dndeta-trig");
      TString  scheme = fOptions.Get     ("dndeta-scheme");
      Double_t effT   = fOptions.AsDouble("dndeta-trigEff", 1);
      Double_t effT0  = fOptions.AsDouble("dndeta-trigEff0", 1);
      TString  config = fOptions.Get     ("dndeta-config");

      // --- Form arguments --------------------------------------------
      TString args;
      args.Form("\"%s\",\"%s\",%f,%f,%d,\"%s\",%g,%g",
		config.Data(),trig.Data(), vzMin, vzMax, cent, scheme.Data(),
		effT, effT0);
      // --- Add the task ----------------------------------------------
      CoupleCar("AddTaskForwarddNdeta.C", args);
      CoupleCar("AddTaskCentraldNdeta.C", args);
      CoupleCar("AddTaskMCTruthdNdeta.C", args);
    }
    
    // --- Add the flow task -----------------------------------------
    if (fOptions.Has("flow")) {
      // --- Get the parameters ----------------------------------------
      Int_t    moment   = fOptions.AsInt   ("flow-max-mom");
      TString  fwdDets  = fOptions.Get     ("flow-detectors");
      TString  types    = fOptions.Get     ("flow-qc-types");
      Double_t egValue  = fOptions.AsDouble("flow-eta-gap");
      TString  tracks   = fOptions.Get     ("flow-ref-tracks");
      Bool_t   useCent  = fOptions.AsBool  ("flow-b-cent");
      Bool_t   useMCVtx = fOptions.AsBool  ("flow-mc-vtx");
      Bool_t   addFlow  = fOptions.AsBool  ("flow-afterburner");
      Double_t fmdCut   = fOptions.AsDouble("flow-outlier-fmd");
      Double_t spdCut   = fOptions.AsDouble("flow-outlier-spd");

      types.ToLower();
      fwdDets.ToUpper();
      Bool_t doFMD      = fwdDets.Contains("FMD");
      Bool_t doVZERO    = fwdDets.Contains("VZERO");
      tracks.ToLower();
      Bool_t onlyTr     = tracks.Contains("only");
      Bool_t tpcTr      = tracks.Contains("tpc");
      Bool_t hybridTr   = tracks.Contains("hybrid");
      Bool_t ispA       = (sys == 3 ? kTRUE : kFALSE);
      
      // Notice the place holders at arg=2,3,4, and 9, These are
      // 
      //   2: Detector to use (FMD/VZERO)
      //   3: Whether to use eta gap (true/false)
      //   4: Do 3-particle correlations (true/false)
      //   9: Use tracks for referernce flow (true/false)
      TString args;
      args=TString::Format("%d,\"%%s\",%%d,%%d,%d,%f,%f,%f,%%d,%d,%d,%d,%d,%d",
			   moment,
			   mc, 
			   fmdCut, 
			   spdCut,
			   egValue,
			   useCent,
			   ispA,
			   useMCVtx,
			   satVtx, 
			   addFlow);
      
      // --- Add the task ----------------------------------------------
      const char* mac = "AddTaskForwardFlowQC.C";
      if (doFMD) {
	if (types.Contains("std") || types.Contains("all")) {
	  if (!onlyTr)
	    CoupleCar(mac, Form(args.Data(), "FMD", false, false, 0));
	  if (tpcTr)
	    CoupleCar(mac, Form(args.Data(), "FMD", false, false, 1));
	  if (hybridTr)
	    CoupleCar(mac, Form(args.Data(), "FMD", false, false, 2));
	}
	if (types.Contains("eta-gap") || types.Contains("all")) {
	  if (!onlyTr)
	    CoupleCar(mac, Form(args.Data(), "FMD", true, false, 0));
	  if (tpcTr)
	    CoupleCar(mac, Form(args.Data(), "FMD", true, false, 1));
	  if (hybridTr)
	    CoupleCar(mac, Form(args.Data(), "FMD", true, false, 2));
	}
	if (types.Contains("3cor") || types.Contains("all")) {
	  if (!onlyTr)
	    CoupleCar(mac, Form(args.Data(), "FMD", false, true, 0));
	}
      }
      if (doVZERO) {
	if (types.Contains("std") || types.Contains("all")) {
	  if (!onlyTr)
	    CoupleCar(mac, Form(args.Data(), "VZERO", false, false, 0));
	  if (tpcTr)
	    CoupleCar(mac, Form(args.Data(), "VZERO", false, false, 1));
	  if (hybridTr)
	    CoupleCar(mac, Form(args.Data(), "VZERO", false, false, 2));
	}
	if (types.Contains("eta-gap") || types.Contains("all")) {
	  if (!onlyTr)
	    CoupleCar(mac, Form(args.Data(), "VZERO", true, false, 0));
	  if (tpcTr)
	    CoupleCar(mac, Form(args.Data(), "VZERO", true, false, 1));
	  if (hybridTr)
	    CoupleCar(mac, Form(args.Data(), "VZERO", true, false, 2));
	}
	if (types.Contains("3cor") || types.Contains("all")) {
	  if (!onlyTr)
	    CoupleCar(mac, Form(args.Data(), "VZERO", false, true, 0));
	}
      }

      // --- Add the task ----------------------------------------------
      if (fOptions.Has("flow-ep")) {
	CoupleCar("AddTaskEventplane.C", "");
	CoupleCar("AddTaskForwardFlowEP.C", 
		  Form("%d, %d, \"%s\"", mc, moment, fwdDets.Data()));
      }
    }
  }
  //__________________________________________________________________
  /** 
   * Create physics selection , and add to manager
   * 
   * @param mc Whether this is for MC 
   * @param mgr Manager 
   */
  void CreatePhysicsSelection(Bool_t mc,
			      AliAnalysisManager* mgr)
  {
    TrainSetup::CreatePhysicsSelection(mc, mgr);

    // --- Get input event handler -----------------------------------
    AliInputEventHandler* ih =
      dynamic_cast<AliInputEventHandler*>(mgr->GetInputEventHandler());
    if (!ih) 
      Fatal("CreatePhysicsSelection", "Couldn't get input handler (%p)", ih);
    
    // --- Get Physics selection -------------------------------------
    AliPhysicsSelection* ps = 
      dynamic_cast<AliPhysicsSelection*>(ih->GetEventSelection());
    if (!ps) 
      Fatal("CreatePhysicsSelection", "Couldn't get PhysicsSelection (%p)",ps);

    // --- Special for pPb pilot run Sep. 2012 -----------------------
    UShort_t sys = fOptions.AsInt("sys", 0);
    if (sys == 3) { 
      Warning("CreatePhysicsSelection", 
	      "Special setup for pPb pilot run September, 2012");
      gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/ANALYSIS/macros",
			       gROOT->GetMacroPath()));
      gROOT->LoadMacro("PhysicsSelectionOADB_CINT5_pA.C");
      gROOT->ProcessLine(Form("((AliPhysicsSelection*)%p)"
			      "->SetCustomOADBObjects("
			      "OADBSelection_CINT5_V0A(),0);", ps));
      ps->SetSkipTriggerClassSelection(true);
    }
    // --- Ignore trigger class when selecting events.  This means ---
    // --- that we get offline+(A,C,E) events too --------------------
    // ps->SetSkipTriggerClassSelection(true);
  }
  //__________________________________________________________________
  /** 
   * Create the centrality selection only if requested
   * 
   * @param mc  Monte-Carlo truth flag 
   * @param mgr Manager
   */
  void CreateCentralitySelection(Bool_t mc)
  {
    if (!fOptions.Has("cent")) return;
    TrainSetup::CreateCentralitySelection(mc);
  }
  //__________________________________________________________________
  const char* ClassName() const { return "MakeFullTrain"; }
};
//
// EOF
//
 MakeFullTrain.C:1
 MakeFullTrain.C:2
 MakeFullTrain.C:3
 MakeFullTrain.C:4
 MakeFullTrain.C:5
 MakeFullTrain.C:6
 MakeFullTrain.C:7
 MakeFullTrain.C:8
 MakeFullTrain.C:9
 MakeFullTrain.C:10
 MakeFullTrain.C:11
 MakeFullTrain.C:12
 MakeFullTrain.C:13
 MakeFullTrain.C:14
 MakeFullTrain.C:15
 MakeFullTrain.C:16
 MakeFullTrain.C:17
 MakeFullTrain.C:18
 MakeFullTrain.C:19
 MakeFullTrain.C:20
 MakeFullTrain.C:21
 MakeFullTrain.C:22
 MakeFullTrain.C:23
 MakeFullTrain.C:24
 MakeFullTrain.C:25
 MakeFullTrain.C:26
 MakeFullTrain.C:27
 MakeFullTrain.C:28
 MakeFullTrain.C:29
 MakeFullTrain.C:30
 MakeFullTrain.C:31
 MakeFullTrain.C:32
 MakeFullTrain.C:33
 MakeFullTrain.C:34
 MakeFullTrain.C:35
 MakeFullTrain.C:36
 MakeFullTrain.C:37
 MakeFullTrain.C:38
 MakeFullTrain.C:39
 MakeFullTrain.C:40
 MakeFullTrain.C:41
 MakeFullTrain.C:42
 MakeFullTrain.C:43
 MakeFullTrain.C:44
 MakeFullTrain.C:45
 MakeFullTrain.C:46
 MakeFullTrain.C:47
 MakeFullTrain.C:48
 MakeFullTrain.C:49
 MakeFullTrain.C:50
 MakeFullTrain.C:51
 MakeFullTrain.C:52
 MakeFullTrain.C:53
 MakeFullTrain.C:54
 MakeFullTrain.C:55
 MakeFullTrain.C:56
 MakeFullTrain.C:57
 MakeFullTrain.C:58
 MakeFullTrain.C:59
 MakeFullTrain.C:60
 MakeFullTrain.C:61
 MakeFullTrain.C:62
 MakeFullTrain.C:63
 MakeFullTrain.C:64
 MakeFullTrain.C:65
 MakeFullTrain.C:66
 MakeFullTrain.C:67
 MakeFullTrain.C:68
 MakeFullTrain.C:69
 MakeFullTrain.C:70
 MakeFullTrain.C:71
 MakeFullTrain.C:72
 MakeFullTrain.C:73
 MakeFullTrain.C:74
 MakeFullTrain.C:75
 MakeFullTrain.C:76
 MakeFullTrain.C:77
 MakeFullTrain.C:78
 MakeFullTrain.C:79
 MakeFullTrain.C:80
 MakeFullTrain.C:81
 MakeFullTrain.C:82
 MakeFullTrain.C:83
 MakeFullTrain.C:84
 MakeFullTrain.C:85
 MakeFullTrain.C:86
 MakeFullTrain.C:87
 MakeFullTrain.C:88
 MakeFullTrain.C:89
 MakeFullTrain.C:90
 MakeFullTrain.C:91
 MakeFullTrain.C:92
 MakeFullTrain.C:93
 MakeFullTrain.C:94
 MakeFullTrain.C:95
 MakeFullTrain.C:96
 MakeFullTrain.C:97
 MakeFullTrain.C:98
 MakeFullTrain.C:99
 MakeFullTrain.C:100
 MakeFullTrain.C:101
 MakeFullTrain.C:102
 MakeFullTrain.C:103
 MakeFullTrain.C:104
 MakeFullTrain.C:105
 MakeFullTrain.C:106
 MakeFullTrain.C:107
 MakeFullTrain.C:108
 MakeFullTrain.C:109
 MakeFullTrain.C:110
 MakeFullTrain.C:111
 MakeFullTrain.C:112
 MakeFullTrain.C:113
 MakeFullTrain.C:114
 MakeFullTrain.C:115
 MakeFullTrain.C:116
 MakeFullTrain.C:117
 MakeFullTrain.C:118
 MakeFullTrain.C:119
 MakeFullTrain.C:120
 MakeFullTrain.C:121
 MakeFullTrain.C:122
 MakeFullTrain.C:123
 MakeFullTrain.C:124
 MakeFullTrain.C:125
 MakeFullTrain.C:126
 MakeFullTrain.C:127
 MakeFullTrain.C:128
 MakeFullTrain.C:129
 MakeFullTrain.C:130
 MakeFullTrain.C:131
 MakeFullTrain.C:132
 MakeFullTrain.C:133
 MakeFullTrain.C:134
 MakeFullTrain.C:135
 MakeFullTrain.C:136
 MakeFullTrain.C:137
 MakeFullTrain.C:138
 MakeFullTrain.C:139
 MakeFullTrain.C:140
 MakeFullTrain.C:141
 MakeFullTrain.C:142
 MakeFullTrain.C:143
 MakeFullTrain.C:144
 MakeFullTrain.C:145
 MakeFullTrain.C:146
 MakeFullTrain.C:147
 MakeFullTrain.C:148
 MakeFullTrain.C:149
 MakeFullTrain.C:150
 MakeFullTrain.C:151
 MakeFullTrain.C:152
 MakeFullTrain.C:153
 MakeFullTrain.C:154
 MakeFullTrain.C:155
 MakeFullTrain.C:156
 MakeFullTrain.C:157
 MakeFullTrain.C:158
 MakeFullTrain.C:159
 MakeFullTrain.C:160
 MakeFullTrain.C:161
 MakeFullTrain.C:162
 MakeFullTrain.C:163
 MakeFullTrain.C:164
 MakeFullTrain.C:165
 MakeFullTrain.C:166
 MakeFullTrain.C:167
 MakeFullTrain.C:168
 MakeFullTrain.C:169
 MakeFullTrain.C:170
 MakeFullTrain.C:171
 MakeFullTrain.C:172
 MakeFullTrain.C:173
 MakeFullTrain.C:174
 MakeFullTrain.C:175
 MakeFullTrain.C:176
 MakeFullTrain.C:177
 MakeFullTrain.C:178
 MakeFullTrain.C:179
 MakeFullTrain.C:180
 MakeFullTrain.C:181
 MakeFullTrain.C:182
 MakeFullTrain.C:183
 MakeFullTrain.C:184
 MakeFullTrain.C:185
 MakeFullTrain.C:186
 MakeFullTrain.C:187
 MakeFullTrain.C:188
 MakeFullTrain.C:189
 MakeFullTrain.C:190
 MakeFullTrain.C:191
 MakeFullTrain.C:192
 MakeFullTrain.C:193
 MakeFullTrain.C:194
 MakeFullTrain.C:195
 MakeFullTrain.C:196
 MakeFullTrain.C:197
 MakeFullTrain.C:198
 MakeFullTrain.C:199
 MakeFullTrain.C:200
 MakeFullTrain.C:201
 MakeFullTrain.C:202
 MakeFullTrain.C:203
 MakeFullTrain.C:204
 MakeFullTrain.C:205
 MakeFullTrain.C:206
 MakeFullTrain.C:207
 MakeFullTrain.C:208
 MakeFullTrain.C:209
 MakeFullTrain.C:210
 MakeFullTrain.C:211
 MakeFullTrain.C:212
 MakeFullTrain.C:213
 MakeFullTrain.C:214
 MakeFullTrain.C:215
 MakeFullTrain.C:216
 MakeFullTrain.C:217
 MakeFullTrain.C:218
 MakeFullTrain.C:219
 MakeFullTrain.C:220
 MakeFullTrain.C:221
 MakeFullTrain.C:222
 MakeFullTrain.C:223
 MakeFullTrain.C:224
 MakeFullTrain.C:225
 MakeFullTrain.C:226
 MakeFullTrain.C:227
 MakeFullTrain.C:228
 MakeFullTrain.C:229
 MakeFullTrain.C:230
 MakeFullTrain.C:231
 MakeFullTrain.C:232
 MakeFullTrain.C:233
 MakeFullTrain.C:234
 MakeFullTrain.C:235
 MakeFullTrain.C:236
 MakeFullTrain.C:237
 MakeFullTrain.C:238
 MakeFullTrain.C:239
 MakeFullTrain.C:240
 MakeFullTrain.C:241
 MakeFullTrain.C:242
 MakeFullTrain.C:243
 MakeFullTrain.C:244
 MakeFullTrain.C:245
 MakeFullTrain.C:246
 MakeFullTrain.C:247
 MakeFullTrain.C:248
 MakeFullTrain.C:249
 MakeFullTrain.C:250
 MakeFullTrain.C:251
 MakeFullTrain.C:252
 MakeFullTrain.C:253
 MakeFullTrain.C:254
 MakeFullTrain.C:255
 MakeFullTrain.C:256
 MakeFullTrain.C:257
 MakeFullTrain.C:258
 MakeFullTrain.C:259
 MakeFullTrain.C:260
 MakeFullTrain.C:261
 MakeFullTrain.C:262
 MakeFullTrain.C:263
 MakeFullTrain.C:264
 MakeFullTrain.C:265
 MakeFullTrain.C:266
 MakeFullTrain.C:267
 MakeFullTrain.C:268
 MakeFullTrain.C:269
 MakeFullTrain.C:270
 MakeFullTrain.C:271
 MakeFullTrain.C:272
 MakeFullTrain.C:273
 MakeFullTrain.C:274
 MakeFullTrain.C:275
 MakeFullTrain.C:276
 MakeFullTrain.C:277
 MakeFullTrain.C:278
 MakeFullTrain.C:279
 MakeFullTrain.C:280
 MakeFullTrain.C:281
 MakeFullTrain.C:282
 MakeFullTrain.C:283
 MakeFullTrain.C:284
 MakeFullTrain.C:285
 MakeFullTrain.C:286
 MakeFullTrain.C:287
 MakeFullTrain.C:288
 MakeFullTrain.C:289
 MakeFullTrain.C:290
 MakeFullTrain.C:291
 MakeFullTrain.C:292
 MakeFullTrain.C:293
 MakeFullTrain.C:294
 MakeFullTrain.C:295
 MakeFullTrain.C:296
 MakeFullTrain.C:297
 MakeFullTrain.C:298
 MakeFullTrain.C:299
 MakeFullTrain.C:300
 MakeFullTrain.C:301
 MakeFullTrain.C:302
 MakeFullTrain.C:303
 MakeFullTrain.C:304
 MakeFullTrain.C:305
 MakeFullTrain.C:306
 MakeFullTrain.C:307
 MakeFullTrain.C:308
 MakeFullTrain.C:309
 MakeFullTrain.C:310
 MakeFullTrain.C:311
 MakeFullTrain.C:312
 MakeFullTrain.C:313
 MakeFullTrain.C:314
 MakeFullTrain.C:315
 MakeFullTrain.C:316
 MakeFullTrain.C:317
 MakeFullTrain.C:318
 MakeFullTrain.C:319
 MakeFullTrain.C:320
 MakeFullTrain.C:321