ROOT logo

/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// This is a macro which measures the time delay of L1 trigger in TPC      //
//                                                                         //
// It reads the ESD tracks and fills histograms with the distance          //
// between the primary vertex and the Z position                           //
// of the point of closest approach between the track and the beam axis.   //
// The processing of forward and backward tracks is done separately.       //
// The corresponding histograms are fitted with gaussian and the           //
// shifts of the Z positions are extracted.                                //
// The L1 time delay is taken as an average of the forward and backward    //
// (with opposite sign) shifts divided by the drift velocity.              //
// We assume that the ESD tracks are obtained by the TPC tracking stand    //
// alone.                                                                  //
// The propagation to the vertex can be done either with or without        //
// TGeoManager.                                                            //
//                                                                         //
// Cvetan.Cheshkov@cern.ch                                                 //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////

#if !defined(__CINT__) || defined(__MAKECINT__)
  #include <TMath.h>
  #include <TError.h>
  #include <Riostream.h>
  #include <TH1F.h>
  #include <TF1.h>
  #include <TTree.h>
  #include <TCanvas.h>
  #include <TFile.h>
  #include <TStyle.h>
  #include <TGeoManager.h>
  #include "AliRunLoader.h"
  #include "AliRun.h"
  #include "AliESD.h"
  #include "AliTracker.h"
  #include "AliTPCParam.h"
  #include "AliMagF.h"
  #include "AliITStrackV2.h"
#endif

Int_t CorrectForDeadZoneMaterial(AliITStrackV2 *t);
Bool_t PropagateToVertex(AliESDtrack *track, Float_t *vtxXYZ);
Bool_t PropagateToVertexG(AliESDtrack *track, Float_t *vtxXYZ);

void AliL1Delay(const Char_t *esdfilename = "./AliESDs.root", const Char_t *galicefilename = "./galice.root", Bool_t withTGeo = kFALSE, const Char_t *geomfilename = "./geometry.root")
{
  const Int_t kMinNClusters = 0;
  const Double_t kPtMin = 0.5;
  const Double_t kMaxImpact = 0.3;
  const Double_t kDeltaZRes = 0.3;
  const Double_t kZRange = 20.;

  // Book histograms
  Int_t NBins = (Int_t)(2.*kZRange/(0.5*kDeltaZRes));
  TH1F *hDeltaZForward = new TH1F("hDeltaZForward","Longitudinal distance to the vertex (forward tracks)",NBins,-kZRange,kZRange); 
  TH1F *hDeltaZBackward = new TH1F("hDeltaZBackward","Longitudinal distance to the vertex (backward tracks)",NBins,-kZRange,kZRange);
  TH1F *hTrImpact = new TH1F("hTrImpact","Transverse impact parameter (all tracks)",100,0,30.*kMaxImpact); 

  // Open RunLoader
  AliRunLoader *rl = AliRunLoader::Open(galicefilename);
  if (!rl) {
    ::Error("AliL1Delay.C","Can't start session !");
    return;
  }
  rl->LoadgAlice();
  gAlice = rl->GetAliRun();

  // Set magnetic field
  AliMagF* field = TGeoGlobalMagField::Instance()->GetField();
  AliExternalTrackParam::SetNonuniformFieldTracking();
  const Float_t sfield = field->SolenoidField();

  // GetGeo manager
  if(withTGeo)
    {
      TFile *geoFile = TFile::Open(geomfilename);
      if (!geoFile || !geoFile->IsOpen()) {
	::Error("AliL1Delay.C","Can't open %s !",geomfilename);
	return;
      }
      gGeoManager = (TGeoManager *)geoFile->Get("Geo");
      if(!gGeoManager) {
	::Error("AliL1Delay.C","Can't find TGeoManager !");
	return;
      }
    }

  // Get X positions of the pad-rows
  TDirectory* saveDir = gDirectory;
  rl->CdGAFile();
  AliTPCParam* param = (AliTPCParam*) gDirectory->Get("75x40_100x60_150x60");
  if (!param) {
    ::Error("AliL1Delay.C","No TPC parameters found !");
    return;
  }
  Int_t nRowLow = param->GetNRowLow();
  Int_t nRowUp = param->GetNRowUp();
  Float_t xRow[159];
  for (Int_t i=0;i<nRowLow;i++){
    xRow[i] = param->GetPadRowRadiiLow(i);
  }
  for (Int_t i=0;i<nRowUp;i++){
    xRow[i+nRowLow] = param->GetPadRowRadiiUp(i);
  }
  saveDir->cd();

  // Open file with ESDs
  TFile *esdFile = TFile::Open(esdfilename);
  if (!esdFile || !esdFile->IsOpen()) {
    ::Error("AliL1Delay.C","Can't open %s !",esdfilename);
    return;
  }
  AliESD* event = new AliESD;
  TTree* esdTree = (TTree*) esdFile->Get("esdTree");
  if (!esdTree) {
    ::Error("AliL1Delay.C","No ESD tree found !");
    return;
  }
  esdTree->SetBranchAddress("ESD", &event);

  // Init PID
  AliPID pid;

  Int_t nEvent = esdTree->GetEntries();

  // Loop over events
  for(Int_t iEvent = 0; iEvent<nEvent; iEvent++)
    {
      esdTree->GetEvent(iEvent);
      const AliESDVertex *esdVtx = event->GetVertex();
      Double_t zVtx = esdVtx->GetZ();
      if(zVtx == 0.) continue; // Vertex is not found. Skip the event.
      Int_t nTrk=event->GetNumberOfTracks();

      ::Info("AliL1Delay.C","Event %d : Z vertex = %f  |  Number of tracks = %d",iEvent,zVtx,nTrk);

      for(Int_t iTrk=0; iTrk<nTrk; iTrk++)
	{
	  AliESDtrack *track = event->GetTrack(iTrk);
	  if(!track) continue;

	  // Track selection 
	  if((track->GetStatus()&AliESDtrack::kTPCrefit)==0) continue;
	  if(track->GetTPCclusters((Int_t)0x0)<(kMinNClusters*3)) continue;
	  if(track->GetP()<kPtMin) continue;

	  Int_t firstRow = (Int_t)(track->GetTPCPoints(0)+0.5);
	  Int_t lastRow = (Int_t)(track->GetTPCPoints(2)+0.5);
	  Double_t firstXYZ[3];
	  Double_t lastXYZ[3];
	  track->GetXYZAt(xRow[firstRow], sfield, firstXYZ);
	  track->GetXYZAt(xRow[lastRow], sfield, lastXYZ);

	  // Select if the track is forward or backward one
	  Bool_t IsForward;
	  if(firstXYZ[2] > 0 && lastXYZ[2] > 0)
	    IsForward = kTRUE;
	  else if(firstXYZ[2] < 0 && lastXYZ[2] < 0)
	    IsForward = kFALSE;
	  else
	    continue;

	  // Propagate the track to the vertex
	  Float_t vtxXYZ[3];
	  if(withTGeo) {
	    if(PropagateToVertexG(track,vtxXYZ) == 0) continue;
	  }
	  else {
	    if(PropagateToVertex(track,vtxXYZ) == 0) continue;
	  }

	  // Get the position at point of closest approach to the vertex
	  Float_t impact = TMath::Sqrt(vtxXYZ[0]*vtxXYZ[0]+vtxXYZ[1]*vtxXYZ[1]);
	  hTrImpact->Fill(impact);
	  // Select primary tracks
	  if(impact > kMaxImpact) continue;

	  if (IsForward)
	    hDeltaZForward->Fill(vtxXYZ[2]-zVtx);
	  else
	    hDeltaZBackward->Fill(vtxXYZ[2]-zVtx);
	}
    }

  //  delete event;
  //  esdFile->Close();

  // Check track propagation
  TF1 *fexpo = new TF1("fexpo","expo");
  hTrImpact->Fit("fexpo","E");
  Double_t slope = fexpo->GetParameter(1);
  if(slope > 3.*kMaxImpact)
    ::Warning("AliL1Delay.C","The transverse impact parameter distribution is too broad: %f +- %f",slope,fexpo->GetParError(1));
  delete fexpo;

  // Fit histograms and extract L1 time delay
  Double_t shifts[2],shifterrs2[2];
  {
    Double_t params[3];
    params[0] = hDeltaZForward->GetMaximumBin();
    params[1] = hDeltaZForward->GetBinCenter(hDeltaZForward->GetMaximumBin());
    params[2] = kDeltaZRes;
    TF1 *fgaus = new TF1("fgaus","gaus");
    fgaus->SetParameters(params);
    hDeltaZForward->Fit("fgaus","E");
    shifts[0] = fgaus->GetParameter(1);
    shifterrs2[0] = fgaus->GetParError(1)*fgaus->GetParError(1);
    delete fgaus;
  }
  {
    Double_t params[3];
    params[0] = hDeltaZBackward->GetMaximumBin();
    params[1] = hDeltaZBackward->GetBinCenter(hDeltaZBackward->GetMaximumBin());
    params[2] = kDeltaZRes;
    TF1 *fgaus = new TF1("fgaus","gaus");
    fgaus->SetParameters(params);
    hDeltaZBackward->Fit("fgaus","E");
    shifts[1] = -fgaus->GetParameter(1);
    shifterrs2[1] = fgaus->GetParError(1)*fgaus->GetParError(1);
    delete fgaus;
  }

  // Check the consistency of the two time delays
  if(TMath::Abs(shifts[0]-shifts[1])>3.*TMath::Sqrt(shifterrs2[0]+shifterrs2[1]))
    ::Warning("AliL1Delay.C","The extracted delays are more than 3 sigma away from each other: %f %f",shifts[0],shifts[1]);

  // Calculated the overall time delay
  Double_t shifterr = 1./TMath::Sqrt(1./shifterrs2[0]+1./shifterrs2[1]);
  Double_t shift = (shifts[0]/shifterrs2[0]+shifts[1]/shifterrs2[1])*shifterr*shifterr;

  ::Info("AliL1Delay.C","");
  ::Info("AliL1Delay.C","=====================================================");
  ::Info("AliL1Delay.C","The measured L1 delay is (%f +- %f) cm",shift,shifterr);
  ::Info("AliL1Delay.C","The measured L1 delay is (%f +- %f) ns",shift*1.e9/param->GetDriftV(),shifterr*1.e9/param->GetDriftV());
  ::Info("AliL1Delay.C","=====================================================");

  delete event;
  esdFile->Close();

  gStyle->SetOptFit(1);

  TCanvas *c1 = new TCanvas("c1","",0,0,700,850);

  TPad *p1 = new TPad("p1","",0,0,1,0.5); p1->Draw();
  p1->cd(); p1->SetFillColor(42); p1->SetFrameFillColor(10);
  p1->SetLogy(1);
  hTrImpact->SetFillColor(4);  hTrImpact->SetXTitle("(cm)");
  hTrImpact->SetStats(kTRUE); hTrImpact->Draw(); c1->cd();

  TPad *p2 = new TPad("p2","",0,0.5,0.5,1); p2->Draw();
  p2->cd(); p2->SetFillColor(42); p2->SetFrameFillColor(10); 
  hDeltaZForward->SetFillColor(4);  hDeltaZForward->SetXTitle("(cm)");
  hDeltaZForward->SetStats(kTRUE); hDeltaZForward->Draw(); c1->cd();

  TPad *p3 = new TPad("p3","",0.5,0.5,1,1); p3->Draw();
  p3->cd(); p3->SetFillColor(42); p3->SetFrameFillColor(10); 
  hDeltaZBackward->SetFillColor(4);  hDeltaZBackward->SetXTitle("(cm)");
  hDeltaZBackward->SetStats(kTRUE); hDeltaZBackward->Draw(); c1->cd();

  TFile f("AliL1Delay.root","RECREATE");
  c1->Write();
  f.Close();

  delete rl;
}

Int_t CorrectForDeadZoneMaterial(AliITStrackV2 *t) {
  //--------------------------------------------------------------------
  // Correction for the material between the TPC and the ITS
  // (should it belong to the TPC code ?)
  //--------------------------------------------------------------------
  Double_t riw=80., diw=0.0053, x0iw=30; // TPC inner wall ? 
  Double_t rcd=61., dcd=0.0053, x0cd=30; // TPC "central drum" ?
  Double_t yr=12.8, dr=0.03; // rods ?
  Double_t zm=0.2, dm=0.40;  // membrane
  //Double_t rr=52., dr=0.19, x0r=24., yyr=7.77; //rails
  Double_t rs=50., ds=0.001; // something belonging to the ITS (screen ?)

  if (t->GetX() > riw) {
     if (!t->PropagateTo(riw,diw,x0iw)) return 1;
     if (TMath::Abs(t->GetY())>yr) t->CorrectForMaterial(dr);
     if (TMath::Abs(t->GetZ())<zm) t->CorrectForMaterial(dm);
     if (!t->PropagateTo(rcd,dcd,x0cd)) return 1;
     //Double_t x,y,z; t->GetGlobalXYZat(rr,x,y,z);
     //if (TMath::Abs(y)<yyr) t->PropagateTo(rr,dr,x0r); 
     if (!t->PropagateTo(rs,ds)) return 1;
  } else if (t->GetX() < rs) {
     if (!t->PropagateTo(rs,-ds)) return 1;
     //Double_t x,y,z; t->GetGlobalXYZat(rr,x,y,z);
     //if (TMath::Abs(y)<yyr) t->PropagateTo(rr,-dr,x0r); 
     if (!t->PropagateTo(rcd,-dcd,x0cd)) return 1;
     if (!t->PropagateTo(riw+0.001,-diw,x0iw)) return 1;
  } else {
  ::Error("CorrectForDeadZoneMaterial","track is already in the dead zone !");
    return 1;
  }
  
  return 0;
}

Bool_t PropagateToVertex(AliESDtrack *track, Float_t *vtxXYZ)
{
  // Make an ITS track and propagate it to the vertex
  AliITStrackV2 itstrack(*track);
  if (CorrectForDeadZoneMaterial(&itstrack) != 0) return 0;
  if (!itstrack.PropagateTo(3.,0.0028,65.19)) return 0;
  if (!itstrack.PropagateToVertex()) return 0;

  itstrack.GetXYZ(vtxXYZ);

  return 1;
}

Bool_t PropagateToVertexG(AliESDtrack *track, Float_t *vtxXYZ)
{
  // Make an ITS track and propagate it to the vertex using TGeoManager
  AliITStrackV2 itstrack(*track);
  AliExternalTrackParam etrack(itstrack);
  Double_t r = 3.;
  Double_t xyz0[3],xyz1[3],y,z;
  Double_t param[7];
  Double_t step = 2.;
  for (Double_t x = etrack.X()-step; x > r; x -= step) {
    etrack.GetGlobalXYZ(xyz0[0],xyz0[1],xyz0[2]);
    Double_t alpha = TMath::ATan2(xyz0[1],xyz0[0]);
    etrack.RotateTo(alpha);
    etrack.GetGlobalXYZ(xyz0[0],xyz0[1],xyz0[2]);      
    if (!etrack.GetProlongationAt(x,y,z)) return 0;
    xyz1[0] = x*TMath::Cos(alpha)-y*TMath::Sin(alpha);
    xyz1[1] = x*TMath::Sin(alpha)+y*TMath::Cos(alpha);
    xyz1[2] = z;
    AliTracker::MeanMaterialBudget(xyz0,xyz1,param);
    if (!etrack.PropagateTo(x,param[1],param[0])) return 0;
  }
  etrack.PropagateTo(r,1,0);
  if (!etrack.PropagateToDCA(0,0,param[1],0)) return 0;

  etrack.GetXYZ(vtxXYZ);

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