ROOT logo
#ifndef __CINT__
# include <AliFMDEventInspector.h>
# include <AliForwardCorrectionManager.h>
# include <TH2.h>
# include <AliESDFMD.h>
# include <AliAODForwardMult.h>
# include <AliESDEvent.h>
# include <TFile.h>
# include <TSystem.h>
#else
class AliFMDEventInspector;
class TH2;
class AliESDFMD;
#endif
#include <AliBaseESDTask.h>
#include <AliForwardUtil.h>
#define NO_TASK
#define NO_SORTER
#include "EventTimeTask.C"

/**
 * @defgroup pwglf_forward_eventtime Investigation of time-between-events 
 * @ingroup pwglf_forward_trains_specific
 */
/**
 * Task to analyse the energy loss in the FMD rings as function of the
 * time to previous event.
 * 
 * @ingroup pwglf_forward_eventtime
 */
struct ELossTimeTask : public AliBaseESDTask
{
  /** 
   * Constructor - for I/O only
   */
  ELossTimeTask() 
    : AliBaseESDTask(),
      fEventInspector(),
      fFMD1i(),
      fFMD2i(),
      fFMD2o(), 
      fFMD3i(),
      fFMD3o(),
      fMap(0),
      fDt(0)
  {}
  /** 
   * Constructor 
   * 
   * @param name Name of task 
   */     
  ELossTimeTask(const char* name) 
    : AliBaseESDTask(name, "ELossTimeTask", 
		     &(AliForwardCorrectionManager::Instance())),
      fEventInspector("fmdEventInspector"),
      fFMD1i(1, 'i'),
      fFMD2i(2, 'i'),
      fFMD2o(2, 'o'), 
      fFMD3i(3, 'i'),
      fFMD3o(3, 'o'),
      fMap(0),
      fDt(0)
  {
  }
  /** 
   * Book output objects. Derived class should define this to book
   * output objects on the processing output list @c fList before the
   * actual event processing.  This is called on the master and on
   * each slave.
   * 
   * If this member function returns false, the execution is stopped
   * with a fatal signal.
   *
   * @return true on success. 
   */
  virtual Bool_t Book() 
  {
    fNeededCorrections = 0;
    fExtraCorrections  = 0;

    fDt = new TH1D("dt", "Time-to-last event (PS-triggered)", 60, 0, 15);
    fDt->SetXTitle("log_{10}(#Deltat)");
    fDt->SetFillColor(kYellow+2);
    fDt->SetLineColor(kYellow+2);
    fDt->SetFillStyle(3001);
    fDt->SetDirectory(0);
    fList->Add(fDt);

    fFMD1i.Book(fList, fDt);
    fFMD2i.Book(fList, fDt);
    fFMD2o.Book(fList, fDt);
    fFMD3i.Book(fList, fDt);
    fFMD3o.Book(fList, fDt);

    // Possibly re-read map
    ReadMap("map.root");

    return true;
  }
  /** 
   * Process a single event
   * 
   * @param esd Input event 
   * 
   * @return true on success 
   */
  virtual Bool_t Event(AliESDEvent& esd)
  {
    Bool_t   lowFlux   = kFALSE;
    UInt_t   triggers  = 0;
    UShort_t ivz       = 0;
    TVector3 ip;
    Double_t cent      = 0;
    UShort_t nClusters = 0;
    UInt_t   found     = fEventInspector.Process(&esd, triggers, lowFlux, 
						 ivz, ip, cent, nClusters);
    if (found & AliFMDEventInspector::kNoEvent)    return false;
    if (found & AliFMDEventInspector::kNoTriggers) return false;
    if (found & AliFMDEventInspector::kNoSPD)      return false;
    if (found & AliFMDEventInspector::kNoFMD)      return false;
    if (found & AliFMDEventInspector::kNoVertex)   return false;
    if (found & AliFMDEventInspector::kBadVertex)  return false;

    // do not process pile-up, A, C, and E events 
    if (triggers & AliAODForwardMult::kPileUp)     return false;
    if (triggers & AliAODForwardMult::kA)          return false;
    if (triggers & AliAODForwardMult::kC)          return false;
    if (triggers & AliAODForwardMult::kE)          return false;
  
    // We want only the events found by off-line 
    if (!(triggers & AliAODForwardMult::kOffline)) return false;
    
    // Perhaps we should also insist on MB only 
    // if (fOnlyMB && (!(triggers & AliAODForwardMult::kInel))) return false;
	  
    // Get FMD data 
    AliESDFMD* esdFMD = esd.GetFMDData();
    ULong64_t  period = esd.GetPeriodNumber();
    ULong64_t  orbit  = esd.GetOrbitNumber();
    ULong64_t  bc     = esd.GetBunchCrossNumber();
    ULong64_t  full   = EventTimeData::EncodeFull(period, orbit, bc);
    ULong64_t  dt     = fMap->Get(full);
    Double_t   logDt  = TMath::Log10(25. * dt);
    if (dt == EventTimeMap::kInvalidTime) {
      logDt = 0;
      Printf("!!! Failed to find dT for 0x%016llu", full);
    }
    // else 
    //   Printf("=== 0x%016llu -> 0x%016llu", full, dt);
    fDt->Fill(logDt);
    
    for (UShort_t d = 1; d <= 3; d++) { 
      UShort_t nQ = d == 1 ? 1 : 2;
      for (UShort_t q = 0; q < nQ; q++) { 
	RingHistos* r = 0;
	switch (d) { 
	case 1: r = &fFMD1i; break;
	case 2: r = (q == 0 ? &fFMD2i : &fFMD2o); break;
	case 3: r = (q == 0 ? &fFMD3i : &fFMD3o); break;
	}
	r->Event(*esdFMD, logDt);
      }
    }
    return true;
  }
  /** 
   * Do the final analysis on the merged output. 
   * 
   * @return true on success
   */
  virtual Bool_t Finalize() 
  { 
    fDt = static_cast<TH1*>(fList->FindObject("dt"));

    fFMD1i.Finalize(fList, fResults, fDt);
    fFMD2i.Finalize(fList, fResults, fDt);
    fFMD2o.Finalize(fList, fResults, fDt);
    fFMD3i.Finalize(fList, fResults, fDt);
    fFMD3o.Finalize(fList, fResults, fDt);
    return true; 
  }
  /** 
   * Get a reference to the event inspector. User must override this
   * to return proper object
   * 
   * @return Reference to the event inspector 
   */
  virtual AliFMDEventInspector& GetEventInspector() { return fEventInspector; }
  /** 
   * Get a reference to the event inspector. User must override this
   * to return proper object
   * 
   * @return Reference to the event inspector 
   */
  virtual const AliFMDEventInspector& GetEventInspector() const 
  {
    return fEventInspector;
  }
  /** 
   * Read the map from timestamp to time-to-previous event 
   * 
   * @param filename File to read the map from 
   * 
   * @return true on success, false otherwise 
   */
  Bool_t ReadMap(const char* filename)
  {
    if (gSystem->AccessPathName(filename, kReadPermission)) {
      // TSystem::AccessPathName returns false if file can be accessed!
      Error("ReadMap", "File \"%s\" cannot be open for reading", filename);
      return false;
    }
    Printf("Opening \"%s\" ...", filename);
    TFile* file = TFile::Open(filename, "READ");
    if (!file) { 
      Error("ReadMap", "Failed to open file \"%s\"", filename);
      return false;
    }
    Printf("Opened \"%s\" ...", filename);
    TObject* o = file->Get("eventTimeMap");
    if (!o) { 
      Error("ReadMap", "Failed to get \"eventTimeMap\" from %s", filename);
      return false;
    }
    Printf("Got object \"eventTimeMap\" from \"%s\" ...", filename);
    if (!o->IsA()->InheritsFrom(EventTimeMap::Class())) { 
      Error("ReadMap", "Object \"%s\" is not an EventTimeMap, but a %s", 
	    o->GetName(), o->ClassName());
      return false;
    }
    Printf("Set the \"eventTimeMap\" to use");
    if (fMap) { 
      delete fMap;
      fMap = 0;
    }
    fMap = static_cast<EventTimeMap*>(o);
    file->Close();
    return true;
  }
  /** 
   * Create and connect the task 
   * 
   * @param mapfile File name of file containing timestamp map
   * 
   * @return true on connect
   */
  static Bool_t Create(const char* mapfile) 
  {
    ELossTimeTask* task = new ELossTimeTask("elossTime");
    if (!task->ReadMap(mapfile)) return false;
    task->Connect();
    return true;
  }
protected:
  /** 
   * Dummy copy constructor 
   * 
   * @param o Object to copy from 
   */
  ELossTimeTask(const ELossTimeTask& o) : AliBaseESDTask(o) {}
  /** Our event inspector */
  AliFMDEventInspector fEventInspector;
  /** 
   * Structure to hold per-ring histograms 
   */
  struct RingHistos : public AliForwardUtil::RingHistos
  {
    /** 
     * Constructor - for I/O only
     */
    RingHistos() 
      : AliForwardUtil::RingHistos(),
	fDtVsELoss(0)
    {}
    /** 
     * Constructor 
     * 
     * @param d detector number 
     * @param r ring identifier 
     */
    RingHistos(UShort_t d, Char_t r) 
      : AliForwardUtil::RingHistos(d,r),
	fDtVsELoss(0)
    {}
    /** 
     * Book histograms 
     * 
     * @param dir Parent list to add our list to
     * @param dt  Histogram of time differences 
     * 
     * @return true on success 
     */
    Bool_t Book(TList* dir, TH1* dt)
    {
      TList* l = DefineOutputList(dir);
      // Double_t dtBins[] = { 0, 1, 2e3, 5e5, 1.1e6, 5e6, 1e12, 1e20 };
      fDtVsELoss = new TH2D("dtVsELoss", 
			    Form("#Deltat vs #Delta/#Delta_{mip} - %s", 
				 GetName()), 450, 0, 15, 
			    dt->GetXaxis()->GetNbins(), 
			    dt->GetXaxis()->GetXmin(), 
			    dt->GetXaxis()->GetXmax());
      fDtVsELoss->SetXTitle("#Delta/#Delta_{mip}");
      fDtVsELoss->SetYTitle("log_{10}(#Deltat) [ns]");
      fDtVsELoss->SetMarkerColor(Color());
      fDtVsELoss->SetDirectory(0);
      l->Add(fDtVsELoss);

      return true;
    }
    /** 
     * Process a single event
     * 
     * @param fmd   FMD ESD data
     * @param logDt Logarithm (base 10) of Time-to-previous event
     */
    void Event(AliESDFMD& fmd, Double_t logDt)
    {
      const UShort_t nSec = NSector();
      const UShort_t nStr = NStrip();
      for (UShort_t s = 0; s < nSec; s++) { 
	for (UShort_t t = 0; t < nStr; t++) { 
	  Float_t mult = fmd.Multiplicity(fDet,fRing,s,t);
	  if(mult == AliESDFMD::kInvalidMult || mult <= 0) 
	    continue;
	  fDtVsELoss->Fill(mult, logDt);
	}
      }
    }
    void Finalize(const TList* input, TList* output, TH1* dt)
    {
      TList* in  = GetOutputList(input);
      TList* out = DefineOutputList(output);

      fDtVsELoss = static_cast<TH2*>(in->FindObject("dtVsELoss"));

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