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: AliAD.cxx  $ */

///////////////////////////////////////////////////////////////////////////
//                                                                       //
//                  AD (ALICE Diffractive)  Detector                     //
//                                                                       //
//  This class contains the base procedures for the AD  detector         //
//  All comments should be sent to :                                     //
//                                                                       //
//                                                                       //
///////////////////////////////////////////////////////////////////////////


// --- Standard libraries ---
#include <Riostream.h>
#include <stdlib.h>

// --- ROOT libraries ---
#include <TNamed.h>
#include "TROOT.h"
#include "TFile.h"
#include "TNetFile.h"
#include "TRandom.h"
#include "TTree.h"
#include "TBranch.h"
#include "TClonesArray.h"
#include "TGeoGlobalMagField.h"
#include "AliMagF.h"
#include "TStopwatch.h"
#include "TParameter.h"
#include "TF1.h"

// --- AliRoot header files ---
#include "AliRun.h"
#include "AliMC.h"
#include "AliAD.h"
#include "AliADhit.h"
#include "AliADLoader.h"
#include "AliADDigitizer.h"
#include "AliADBuffer.h"
#include "AliADConst.h"
#include "AliDigitizationInput.h"
#include "AliADdigit.h"
#include "AliADSDigit.h"
#include "AliADCalibData.h"
#include "AliDAQ.h"
#include "AliRawReader.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliADReconstructor.h"

ClassImp(AliAD)
 //__________________________________________________________________
AliAD::AliAD()
   : AliDetector(),
     fSetADAToInstalled(0),
     fSetADCToInstalled(0)
{
	/// Default Constructor
    

}

//_____________________________________________________________________________
AliAD::AliAD(const char *name, const char *title)
   : AliDetector(name,title),
     fSetADAToInstalled(kTRUE),
     fSetADCToInstalled(kTRUE)

{
  
   // Standard constructor for AD Detector
  

}

//_____________________________________________________________________________
AliAD::~AliAD()
{
   //
   // Default destructor for AD Detector
   //
  
}

//_____________________________________________________________________________
void AliAD::CreateMaterials()
{
   //
   // MATERIALS FOR ADC AND ADA
   //
   
   // Parameters for simulation scope for ADA and ADC (stolen from AliVZEROv7::CreateMaterials )
   Int_t    fieldType       = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();     // Field type 
   Double_t maxField        = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();       // Field max.
   Double_t maxBending      = 10;    // Max Angle
   Double_t maxStepSize     = 0.01;  // Max step size 
   Double_t maxEnergyLoss   = 1;     // Max Delta E
   Double_t precision       = 0.003; // Precision
   Double_t minStepSize     = 0.003; // Minimum step size 
   Float_t  density,  as[11], zs[11], ws[11];
   Double_t radLength, absLength, a_ad, z_ad;
   Int_t    id;
   
   //
   // Parameters  for AD scintillator: NE-102 (BC400)
   //
   // NE-102, has the following properties : (from internet, need better reference)
   //    Density : ca. 1.03 g/cm3
   //    Electrons/cm3: 3.39 x 10^23
   //    H atoms/cm3: 5.28 x 10^22
   //    C atoms/cm3: 4.78 x 10^22
   //    Ratio of H to C : 1.104 .
   //    wavelength of emission : ~4.23 nm.
   //    Decay time : ~2.4 ns.
   //    Luminescent efficiency : typically 18% of NaI(Tl)
   //    Photons/MeV: 2.5 x 10^4 
   //
   // H                // C 
   as[0] = 1.00794;    as[1] = 12.011;
   zs[0] = 1.;         zs[1] = 6.;
   ws[0] = 5.23;       ws[1] = 4.74;
   density = 1.032;
   id      = 1;
   AliMixture( id, "NE102", as, zs, density, -2, ws );
   AliMedium( id, "NE102", id, 1, fieldType, maxField, maxBending, maxStepSize,
              maxEnergyLoss, precision, minStepSize );

   //
   // Parameters for lightGuide:  
   //     TODO check material 
   // Should be Poly(methyl methacrylate) (PMMA) acrylic 
   // (C5O2H8)n 
   // Density  1.18 g/cm3
   // Mixture PMMA    Aeff=12.3994 Zeff=6.23653 rho=1.18 radlen=34.0677 intlen=63.3073
   // Element #0 : C  Z=  6.00 A= 12.01 w= 0.600 natoms=5
   // Element #1 : H  Z=  1.00 A=  1.01 w= 0.081 natoms=8
   // Element #2 : O  Z=  8.00 A= 16.00 w= 0.320 natoms=2

   // Carbon          Hydrogen          Oxygen
   as[0] = 12.0107;   as[1] = 1.00794;  as[2] = 15.9994;
   zs[0] = 6.;        zs[1] = 1.;       zs[2] = 8.;
   ws[0] = 0.60;      ws[1] = 0.081;    ws[2] = 0.32;
   density = 1.18;
   id      = 2;
   AliMixture( id, "PMMA", as, zs, density, 3, ws );
   AliMedium( id,"PMMA", id, 1, fieldType, maxField, maxBending, maxStepSize,
              maxEnergyLoss, precision, minStepSize );

   
   // mu-metal
   // Niquel          Iron              Molybdenum        Manganese
   as[0] = 58.6934;   as[1] = 55.845;   as[2] = 95.94;    as[3] = 54.9380;  
   zs[0] = 28.;       zs[1] = 26.;      zs[2] = 42.;      zs[3] = 25.;   
   ws[0] = 0.802;     ws[1] = 0.14079;  ws[2] = 0.0485;   ws[3] = 0.005;
   // Silicon         Chromium          Cobalt            Aluminium
   as[4] = 28.0855;   as[5] = 51.9961;  as[6] = 58.9332;  as[7] = 26.981539;   
   zs[4] = 14.;       zs[5] = 24.;      zs[6] = 27.;      zs[7] = 13.;   
   ws[4] = 0.003;     ws[5] = 0.0002;   ws[6] = 0.0002;   ws[7] = 0.0001;
   // Carbon          Phosphorus        Sulfur
   as[8] = 12.0107;   as[9] = 30.97376; as[10] = 32.066;
   zs[8] = 6.;        zs[9] = 15.;      zs[10] = 16.;
   ws[8] = 0.00015;   ws[9] = 0.00005;  ws[10] = 0.00001;
   density = 8.25;
   id      = 3;
   AliMixture( id, "MuMetal", as, zs, density, 11, ws );
   AliMedium( id,"MuMetal", id, 1, fieldType, maxField, maxBending, maxStepSize,
              maxEnergyLoss, precision, minStepSize );

   // Parameters for ADCPMA: Aluminium
   a_ad = 26.98; 
   z_ad = 13.00;
   density   = 2.7;
   radLength = 8.9;
   absLength = 37.2;
   id = 4;
   AliMaterial (id, "Alum",  a_ad, z_ad, density, radLength, absLength, 0, 0 );
   AliMedium( id, "Alum", id, 1, fieldType, maxField, maxBending, maxStepSize,
              maxEnergyLoss, precision, minStepSize );

   // Parameters for ADCPMG: Glass for the simulation Aluminium 
   // TODO fix material
   a_ad = 26.98; 
   z_ad = 13.00;
   density   = 2.7;
   radLength = 8.9;
   absLength = 37.2;
   id = 5;
   AliMaterial( id, "Glass",  a_ad, z_ad, density, radLength, absLength, 0, 0 );
   AliMedium( id, "Glass", id, 1, fieldType, maxField, maxBending, maxStepSize,
              maxEnergyLoss, precision, minStepSize );


}
//_____________________________________________________________________________
void AliAD::SetTreeAddress()
{
   //
   // Sets tree address for hits.
   //

	TBranch *branch;
  	char branchname[20];
  	snprintf(branchname,19,"%s",GetName());
  	// Branch address for hit tree
  	TTree *treeH = fLoader->TreeH();
  	if (treeH ) 
	{
    		branch = treeH->GetBranch(branchname);
    		if (branch) branch->SetAddress(&fHits);
  	}
}


//_____________________________________________________________________________
void AliAD::MakeBranch(Option_t* opt)
{
	const char* oH = strstr(opt,"H");
	if (fLoader->TreeH() && oH && (fHits==0x0))
	{
		fHits = new TClonesArray("AliADhit",1000);
		fNhits = 0;
	}
	AliDetector::MakeBranch(opt);
}
//_____________________________________________________________________________
AliLoader* AliAD::MakeLoader(const char* topfoldername)
{ 
 
   AliDebug(1,Form("Creating AliADLoader, Top folder is %s ",topfoldername));
   fLoader = new AliADLoader(GetName(),topfoldername);
   return fLoader;
}

//_____________________________________________________________________________
AliDigitizer* AliAD::CreateDigitizer(AliDigitizationInput* digInput) const
{
   //
   // Creates a digitizer for AD
   //
   return new AliADDigitizer(digInput);
}

//_____________________________________________________________________________
void AliAD::Hits2Digits(){
  //
  // Converts hits to digits
  //
  // Creates the AD digitizer 
  AliADDigitizer* dig = new AliADDigitizer(this,AliADDigitizer::kHits2Digits);

  // Creates the digits
  dig->Digitize("");

  // deletes the digitizer
  delete dig;
}

//_____________________________________________________________________________
void AliAD::Hits2SDigits(){
  //
  // Converts hits to summable digits
  //
  // Creates the AD digitizer 
  AliADDigitizer* dig = new AliADDigitizer(this,AliADDigitizer::kHits2SDigits);

  // Creates the sdigits
  dig->Digitize("");

  // deletes the digitizer
  delete dig;
}


//_____________________________________________________________________________
void AliAD::Digits2Raw()
{
   //
   //  Converts digits of the current event to raw data
   //
   AliAD *fAD = (AliAD*)gAlice->GetDetector("AD");
   fLoader->LoadDigits();
   TTree* digits = fLoader->TreeD();
   if (!digits) {
      Error("Digits2Raw", "no digits tree");
      return;
   }
   TClonesArray * ADdigits = new TClonesArray("AliADdigit",1000);
   fAD->SetTreeAddress();  		
   digits->GetBranch("ADDigit")->SetAddress(&ADdigits); 
  
   const char *fileName    = AliDAQ::DdlFileName("AD",0);
   AliADBuffer* buffer  = new AliADBuffer(fileName);
   //AliADBuffer* buffer  = new AliADBuffer("AD_0.ddl");
   
   // Get Trigger information first
   // Read trigger inputs from trigger-detector object
   AliDataLoader * dataLoader = fLoader->GetDigitsDataLoader();
   if( !dataLoader->IsFileOpen() ) 
        dataLoader->OpenFile( "READ" );
   AliTriggerDetector* trgdet = (AliTriggerDetector*)dataLoader->GetDirectory()->Get( "Trigger" );
   UInt_t triggerInfo = 0;
   if(trgdet) {
      triggerInfo = trgdet->GetMask() & 0xffff;
   }
   else {
      AliError(Form("There is no trigger object for %s",fLoader->GetName()));
   }

   buffer->WriteTriggerInfo((UInt_t)triggerInfo); 
   buffer->WriteTriggerScalers(); 
   buffer->WriteBunchNumbers(); 
  
   // Now retrieve the channel information: charge smaples + time and 
   // dump it into ADC and Time arrays
   Int_t nEntries = Int_t(digits->GetEntries());
   Short_t aADC[16][kNClocks];
   Float_t aTime[16];
   Float_t aWidth[16];
   Bool_t  aIntegrator[16];
  
   for (Int_t i = 0; i < nEntries; i++) {
     fAD->ResetDigits();
     digits->GetEvent(i);
     Int_t ndig = ADdigits->GetEntriesFast(); 
   
     if(ndig == 0) continue;
     for(Int_t k=0; k<ndig; k++){
         AliADdigit* fADDigit = (AliADdigit*) ADdigits->At(k);

	 Int_t iChannel       = fADDigit->PMNumber();
	 
	 for(Int_t iClock = 0; iClock < kNClocks; ++iClock) aADC[iChannel][iClock] = fADDigit->ChargeADC(iClock);
	 aTime[iChannel]      = fADDigit->Time(); //divide by resolution
	 aWidth[iChannel]     = fADDigit->Width(); //divide by resolution
	 aIntegrator[iChannel]= fADDigit->Integrator();
	 
         //AliDebug(1,Form("DDL: %s\tdigit number: %d\tPM number: %d\tADC: %d\tTime: %f",
			 //fileName,k,fADDigit->PMNumber(),aADC[iChannel][AliADdigit::kNClocks/2],aTime[iChannel])); 
     }        
   }

   // Now fill raw data	  
   for (Int_t  iCIU = 0; iCIU < kNCIUBoards; iCIU++) { 
   // decoding of one Channel Interface Unit numbered iCIU - there are 8 channels per CIU (and 2 CIUs) : 
      for(Int_t iChannel_Offset = iCIU*8; iChannel_Offset < (iCIU*8)+8; iChannel_Offset=iChannel_Offset+4) { 
         for(Int_t iChannel = iChannel_Offset; iChannel < iChannel_Offset+4; iChannel++) {
             buffer->WriteChannel(iChannel, aADC[iChannel], aIntegrator[iChannel]);       
         }
         buffer->WriteBeamFlags(); 
         buffer->WriteMBInfo(); 
         buffer->WriteMBFlags();   
         buffer->WriteBeamScalers(); 
      } 

      for(Int_t iChannel = iCIU*8 + 7; iChannel >= iCIU*8; iChannel--) {
          buffer->WriteTiming(aTime[iChannel], aWidth[iChannel]); 
      } // End of decoding of one CIU card    
  } // end of decoding the eight CIUs

     
  delete buffer;
  fLoader->UnloadDigits();  

}

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