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$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// ALICE Cosmic Ray Trigger                                                  //
//                                                                           //
//  This class contains the functions for version 0 of the ALICE Cosmic Ray  //
//  Trigger. This version will be used to simulation comic rays in alice with//
//  all the detectors. It include geometry and hits (posicion and momentum)  //
//  									     //	
//   Author: Enrique Gamez                                                   //
//                                                                           //
//                  Send comments to:                                        //
//      Arturo Fernandez <afernand@fcfm.buap.mx>                             //
//      Eleazar Cuautle  <ecuautle@nucleares.unam.mx>                        //
//									     //
//	Last update: Nov. 17th. 2009					     //
//	Mario Rodriguez Cahuantzi <mrodrigu@mail.cern.ch		     //
//	FCFM-BUAP, Puebla, Pue. Mexico					     //
//									     //
///////////////////////////////////////////////////////////////////////////////


#include "AliACORDEv0.h"
#include <TClonesArray.h>
#include <TLorentzVector.h>
#include <TVirtualMC.h>
#include <TPDGCode.h>


#include "AliRun.h"
#include "AliConst.h"
#include "AliACORDEhit.h"
#include "AliACORDEConstants.h"
#include "AliMC.h"
#include "AliLog.h"

ClassImp(AliACORDEv0)
 
//_____________________________________________________________________________
AliACORDEv0::AliACORDEv0()
  : AliACORDE()
{
  //
  // Default constructor
  fIshunt = 0;
  fHits = 0;
  //
} 
//_____________________________________________________________________________
AliACORDEv0::AliACORDEv0(const char *name, const char *title)
  : AliACORDE(name, title)
{
  //
  // Standard constructor
  //
  fIshunt = 1; // All hits are associated with primary particles 
  fHits =  new TClonesArray("AliACORDEhit",400);
  gAlice->GetMCApp()->AddHitList(fHits);
}
//_____________________________________________________________________________
AliACORDEv0::~AliACORDEv0()
{
  //
  // Default destructor
  //
}

//_____________________________________________________________________________
void AliACORDEv0::CreateGeometry()
{
  CreateAcorde();
  if (GetCreateCavern()) CreateCavern();
}

void AliACORDEv0::CreateCavern()
{
  Int_t* idtmed = fIdtmed->GetArray() - 1099 ;
    // Create the mother volume, the one which will contain all the material
  // above the hall.
  Float_t pbox[3];
  pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
  //pbox[0] = 12073;
  pbox[1] = AliACORDEConstants::Instance()->Depth();
  pbox[2] = pbox[0];
  TVirtualMC::GetMC()->Gsvolu("ACORDE", "BOX", idtmed[1114], pbox, 3);
  TVirtualMC::GetMC()->Gspos("ACORDE", 1, "ALIC", 0, 0, 0, 0, "ONLY");
  CreateShafts();
  CreateMolasse();
}

void AliACORDEv0::CreateShafts()

{

  //
  Int_t  idrotm[2499];    // The rotation matrix.
  Int_t* idtmed = fIdtmed->GetArray() - 1099 ;

  //
  // Acces shafts
  //
  AliMatrix(idrotm[2001], 0, 0, 90, 0, 90, 90);


  // Create a bing cilinder to hold the main structures in the shaft.
  //   All the structures relative to the shaft will be put into
  // this volume.
  //   This shaft is composed by an open tube down in the hall, and
  // a cilinder avobe the level of the ceiling.
  Float_t ptube[3];
  ptube[0] = 0;    // inner radius
  ptube[1] = 1250; // outer radius
  ptube[2] = 5150/2; // Half lenght in Z
  TVirtualMC::GetMC()->Gsvolu("CSF1", "TUBE", idtmed[1114], ptube, 3);

  Float_t ptubs[5];
  // The open section of the PX24
  ptubs[0] = 1150; // Inner radius
  ptubs[1] = 1250; // Outer radius
  ptubs[2] = 1300; // Half length
  ptubs[3] = 180 + kRaddeg*TMath::ASin(1070/ptubs[0]); // starting angle
  ptubs[4] = 180 -  kRaddeg*TMath::ASin(1070/ptubs[0]);
  TVirtualMC::GetMC()->Gsvolu("CSF2", "TUBS", idtmed[1116], ptubs, 5);
  TVirtualMC::GetMC()->Gspos("CSF2", 1, "CSF1", 0, 0, -ptube[2] + ptubs[2], 0, "MANY");

  // The other part of the shaft.
  ptube[0] = ptubs[0]; // Inner radius
  ptube[1] = ptubs[1]; // Outer radius
  ptube[2] = 5150/2 - ptubs[2]; // Half lenght
  TVirtualMC::GetMC()->Gsvolu("CSF3", "TUBE", idtmed[1116], ptube, 3);
  TVirtualMC::GetMC()->Gspos("CSF3", 1, "CSF1", 0, 0, 5150/2 - ptube[2], 0, "MANY");

  Float_t pbox[3];
  // Concrete walls along the shaft (next to the elevator.)
  pbox[0] = 480/2;  // Half length in X
  pbox[1] = 120/2;  // Half length in Y
  pbox[2] = 5150/2; // Half length in Z
  TVirtualMC::GetMC()->Gsvolu("CSW1", "BOX", idtmed[1116], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CSW1", 1, "CSF1", 820+pbox[0],  150+pbox[1], 0, 0, "MANY");
  TVirtualMC::GetMC()->Gspos("CSW1", 2, "CSF1", 820+pbox[0], -300-pbox[1], 0, 0, "MANY");

  //
  pbox[0] = 120/2;  // Half length in X
  pbox[1] = 750/2;  // Half length in Y
  pbox[2] = 5150/2; // Half length in Z
  TVirtualMC::GetMC()->Gsvolu("CSW2", "BOX", idtmed[1116], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CSW2", 1, "CSF1", 820-60, 150+pbox[1], 0, 0, "MANY");

  //
  pbox[0] = 120/2;  // Half length in X
  pbox[1] = 600/2;  // Half lenght in Y
  pbox[2] = 5150/2; // Half length in Z
  TVirtualMC::GetMC()->Gsvolu("CSW3", "BOX", idtmed[1116], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CSW3", 1, "CSF1", 820-60, -300-pbox[1], 0, 0, "MANY");

  // Material below the counting rooms.
  pbox[0] = 400/2;
  pbox[1] = 2300/2;
  pbox[2] = 300/2;
  TVirtualMC::GetMC()->Gsvolu("CSW4", "BOX", idtmed[1116], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CSW4",1,"CSF1",2300/2-pbox[0],0,3000-5150/2-pbox[2], 0, "MANY");

  // Shielding plug.
  pbox[0] = 1400/2;
  pbox[1] = 2300/2;
  pbox[2] = 170/2;
  TVirtualMC::GetMC()->Gsvolu("CSW5", "BOX", idtmed[1116], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CSW5", 1, "CSF1", 0, 0, 3000-5150/2-130, 0, "MANY");

  // The end of the support for the shielding plug.
  pbox[0] = 170/2;
  pbox[1] = 2300/2;
  pbox[2] = 300/2;
  TVirtualMC::GetMC()->Gsvolu("CSW6", "BOX", idtmed[1116], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CSW6",1,"CSF1",-1400/2-pbox[0],0,3000-5150/2-pbox[2],0,"MANY");

  // ...
  pbox[0] = 100/2;
  pbox[1] = 2300/2;
  pbox[2] = 450/2;
  TVirtualMC::GetMC()->Gsvolu("CSW7", "BOX", idtmed[1116], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CSW7",1,"CSF1",-1400/2-170-pbox[0],0,3000-5150/2+pbox[2],0,"MANY");

  // Material close to the pipe.
  pbox[0] = 300/2;
  pbox[1] = 2300/2;
  pbox[2] = 170/2;
  TVirtualMC::GetMC()->Gsvolu("CSW8", "BOX", idtmed[1116], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CSW8",1,"CSF1",-2300/2+pbox[0],0,2500-5150/2,0,"MANY");

  // Now put the shaft into the mother volume.
  TVirtualMC::GetMC()->Gspos("CSF1", 1, "ACORDE", 0, AliACORDEConstants::Instance()->Depth() - 5150/2, 2300, idrotm[2001], "MANY");

  // PM25 Access Shaft
  ptube[0] = 910/2;
  ptube[1] = ptube[0] + 100;
  ptube[2] = (5150 - 1166)/2;
  TVirtualMC::GetMC()->Gsvolu("CSF4", "TUBE", idtmed[1116], ptube, 3);
  TVirtualMC::GetMC()->Gspos("CSF4", 1, "ACORDE", 2100, AliACORDEConstants::Instance()->Depth()-ptube[2], 0, idrotm[2001], "MANY");

  // PGC2 Access Shaft
  ptube[0] = 1100/2;
  ptube[1] = ptube[0] + 100;
  ptube[2] = (5150 - 690)/2;
  TVirtualMC::GetMC()->Gsvolu("CSF5", "TUBE", idtmed[1116], ptube, 3);
  TVirtualMC::GetMC()->Gspos("CSF5", 1, "ACORDE", -375, AliACORDEConstants::Instance()->Depth()-ptube[2], -1900 - 2987.7, idrotm[2001], "MANY");

}


void AliACORDEv0::CreateMolasse()

{

  //
  Int_t  idrotm[2499];    // The rotation matrix.
  Int_t* idtmed = fIdtmed->GetArray() - 1099 ;

  Float_t px24radius = 2300/2;
  Float_t px24X = 0;
  //Float_t px24Y = ;
  Float_t px24Z = 2300;

  Float_t pm25radius = 910/2;
  Float_t pm25X = 2100;
  //Float_t pm25Y = ;
  Float_t pm25Z = 0;

  Float_t pgc2radius = 1100/2;
  Float_t pgc2X = -375;
  //Float_t pgc2Y = ;
  Float_t pgc2Z = -(1900 + 2987.7);

  Float_t concreteWidth = 100; // Standard width of the hall walls.


  // Create a local mother volume.
  Float_t pbox[3];
  pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
  pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
  pbox[2] = pbox[0];
  TVirtualMC::GetMC()->Gsvolu("CMO1", "BOX", idtmed[1114], pbox, 3);

  // Now put the molasse exactly above the hall. OK
  // Above the ceiling
  Float_t ptubs[5];
  ptubs[0] = 1170;
  ptubs[1] = 2100 - pm25radius;
  ptubs[2] = 1900/2 + px24radius;
  ptubs[3] = 0;
  ptubs[4] = 180;
  TVirtualMC::GetMC()->Gsvolu("CMO2", "TUBS", idtmed[1123], ptubs, 5);
  TVirtualMC::GetMC()->Gspos("CMO2", 1, "CMO1", 0, 500-AliACORDEConstants::Instance()->Depth()/2, ptubs[2]-1900, 0, "MANY");

  // Molasse around the RB24/26 Wall. OK
  ptubs[0] = 220 + 1600;
  ptubs[1] = AliACORDEConstants::Instance()->Depth() - ptubs[0];
  ptubs[2] = 2987.7/2 - 1100/4 - concreteWidth/2;
  ptubs[3] = 0;
  ptubs[4] = 180;
  TVirtualMC::GetMC()->Gsvolu("CMO3", "TUBS", idtmed[1123], ptubs, 5);
  TVirtualMC::GetMC()->Gspos("CMO3", 1, "CMO1", 70, 40-AliACORDEConstants::Instance()->Depth()/2, -1900 - ptubs[2], 0, "MANY");

  // A big block above the RB24/26 wall. OK
  pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
  pbox[1] = (AliACORDEConstants::Instance()->Depth() - 220 - 1600)/2;
  pbox[2] = 2987.7/2 - 1100/4 - concreteWidth/2;
  TVirtualMC::GetMC()->Gsvolu("CMO4", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CMO4", 1, "CMO1", 0, AliACORDEConstants::Instance()->Depth()/2 - pbox[1], -1900 - pbox[2], 0, "MANY");
  // Small blocks below the volume CMO4 on both sides of the wall RB24/26. OK
  pbox[0] = (AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) -
ptubs[0])/2;
  pbox[1] = AliACORDEConstants::Instance()->Depth()/2 - pbox[1];
  TVirtualMC::GetMC()->Gsvolu("CM17", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM17", 1, "CMO1", AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) - pbox[0], -AliACORDEConstants::Instance()->Depth()/2 + pbox[1], -1900 - pbox[2], 0, "MANY");
  TVirtualMC::GetMC()->Gspos("CM17", 2, "CMO1", -AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad)+ pbox[0], -AliACORDEConstants::Instance()->Depth()/2 + pbox[1], -1900 - pbox[2], 0, "MANY");

  // And a big block of molasse above the hall up to the surface. OK
  pbox[0] = pm25X - pm25radius;
  pbox[1] = (AliACORDEConstants::Instance()->Depth()-500-1170)/2;
  pbox[2] = (1900 + 1150)/2;
  TVirtualMC::GetMC()->Gsvolu("CMO5", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CMO5", 1, "CMO1", 0,AliACORDEConstants::Instance()->Depth()/2-pbox[1], pbox[2]-1900, 0, "MANY");
  // Small blocks of molasse betwen the blocks CMO2, CMO5 and PM25. Ok
  pbox[0] = (pm25X - pm25radius - 1170)/2;
  pbox[1] = 1000;
  TVirtualMC::GetMC()->Gsvolu("CM16", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM16", 1, "CMO1", 1170 + pbox[0], -AliACORDEConstants::Instance()->Depth()/2+pbox[1], pbox[2] - 1900, 0, "MANY");

  // Molasse around the shafts.
  AliMatrix(idrotm[2003], 0, 0, 90, 0, 90, 90);
  // Around the PX24, the open section. OK
  ptubs[0] = px24radius + concreteWidth;
  ptubs[1] = ptubs[0] + 1000;
  ptubs[2] = (2300 - (5150 - AliACORDEConstants::Instance()->Depth()))/2;
  ptubs[3] = 180 + kRaddeg*TMath::ASin(1070/ptubs[0]);
  ptubs[4] = 180 -  kRaddeg*TMath::ASin(1070/ptubs[0]);
  TVirtualMC::GetMC()->Gsvolu("CMO6", "TUBS", idtmed[1123], ptubs, 5);
  TVirtualMC::GetMC()->Gspos("CMO6", 1, "CMO1", px24X, ptubs[2] - AliACORDEConstants::Instance()->Depth()/2, px24Z, idrotm[2003], "MANY");
  // Around the PX24, the closed section. OK
  Float_t ptube[3];
  ptube[0] = px24radius + concreteWidth;
  ptube[1] = ptube[0] + 1000;
  ptube[2] = (5150 - 2300)/2;
  TVirtualMC::GetMC()->Gsvolu("CMO7", "TUBE", idtmed[1123], ptube, 3);
  TVirtualMC::GetMC()->Gspos("CMO7", 1, "CMO1", px24X, AliACORDEConstants::Instance()->Depth()/2 - ptube[2], px24Z, idrotm[2003], "MANY");

  // Around PM25. OK
  ptube[0] = pm25radius + concreteWidth;
  ptube[1] = ptube[0] + 400;
  ptube[2] = AliACORDEConstants::Instance()->Depth()/2;
  TVirtualMC::GetMC()->Gsvolu("CMO8", "TUBE", idtmed[1123], ptube, 3);
  TVirtualMC::GetMC()->Gspos("CMO8", 1, "CMO1", pm25X, 0, pm25Z, idrotm[2003], "MANY");
  // On both sides of the PM25 along the HALL.
  pbox[0] = (2100 + pm25radius - 1170)/2;
  pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
  pbox[2] = (3*px24radius - pm25radius)/2;
  TVirtualMC::GetMC()->Gsvolu("CM18", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM18", 1, "CMO1", 2100, 0, pbox[2] + pm25radius, 0, "MANY");

  pbox[2] = (1900 - pm25radius)/2;
  TVirtualMC::GetMC()->Gsvolu("CM19", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM19", 1, "CMO1", 2100, 0, -pbox[2] - pm25radius, 0, "MANY");

  // Around the PGC2. OK
  ptube[0] = pgc2radius + concreteWidth;
  ptube[1] = 2987.7 - 740;
  ptube[2] = AliACORDEConstants::Instance()->Depth()/2;
  TVirtualMC::GetMC()->Gsvolu("CMO9", "TUBE", idtmed[1123], ptube, 3);
  TVirtualMC::GetMC()->Gspos("CMO9", 1, "CMO1", pgc2X, 0, pgc2Z, idrotm[2003], "MANY");

  // On both sides of the PGC2.OK
  pbox[0] = (AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) -
1100 - 375)/2;
  pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
  pbox[2] = pgc2radius + concreteWidth;
  TVirtualMC::GetMC()->Gsvolu("CM10", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM10", 1, "CMO1", AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) - pbox[0], 0, pgc2Z, 0, "MANY");
  TVirtualMC::GetMC()->Gspos("CM10", 2, "CMO1", -AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) + pbox[0], 0, pgc2Z, 0, "MANY");

  // big block of molasse behind the PX24. OK
  pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
  pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
  pbox[2] = (pbox[0] - (2300 + 1150 + 100))/2;
  TVirtualMC::GetMC()->Gsvolu("CM12", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM12", 1, "CMO1", px24X, 0, px24Z + px24radius + concreteWidth + pbox[2], 0, "MANY");

  // big block of molasse in the opposite side of the PM25. OK
  pbox[0] = (AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) -
1150)/2;
  pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
  pbox[2] = (1900 + 2300 + 1150)/2;
  TVirtualMC::GetMC()->Gsvolu("CM13", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM13", 1, "CMO1", -1150 - pbox[0], 0, pbox[2] - 1900, 0, "MANY");

  // big block of molasse behind the PM25. OK
  pbox[0] = (AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) -
(2100 + 910/2 + 100))/2;
  pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
  pbox[2] = (1900 + 2300 + 1150)/2;
  TVirtualMC::GetMC()->Gsvolu("CM14", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM14", 1, "CMO1", pm25X + pm25radius + concreteWidth + pbox[0], 0, pbox[2] - 1900, 0, "MANY");

  // big block of molasse behind the PGC2. OK
  pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
  pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
  pbox[2] = (pbox[0] - (2987.7 + 1900 + 1100/2 + 100))/2;
  TVirtualMC::GetMC()->Gsvolu("CM15", "BOX", idtmed[1123], pbox, 3);
  TVirtualMC::GetMC()->Gspos("CM15", 1, "CMO1", 0, 0, -pbox[0] + pbox[2], 0, "MANY");

  TVirtualMC::GetMC()->Gspos("CMO1",1,"ACORDE",0,AliACORDEConstants::Instance()->Depth()/2,0,0,"MANY");

}

void AliACORDEv0::CreateAcorde()
{
  //
  // Create geometry for the ACORDE array
  // done in two main steps
  //  1.- definition of the modules
  //  2.- placement of the modules
  //
  Int_t  idrotm[2499];    // The rotation matrix.
  Int_t* idtmed = fIdtmed->GetArray() - 1099;
  AliACORDEConstants* constants = AliACORDEConstants::Instance();
  Float_t box[3];
  Float_t placed_at;
  Float_t placed_at2;
  Float_t small = 0.05; // to separate slightly some volumes
                        // by half a mm so that they do not overlap


  // 1.- Definition of a module
  // *  ACORDE1 => volume filled with air, representing a module
  //               it contains all other volumes defining the module
  //               there are 60 copies of it
  // *  ACORDE2 => volume defining one scintillator pad
  //               there are 2 copies of it per module
  // *  ACORDE3-6 => volumes representing the Al walls of box
  //               surrounding the plastic
  //               3: long wall, 2 copies (front, back)
  //               4: end caps, 2 copies (left, right)
  //               5: long stripe to model the profile 
  //                  4 copies (upper front and back, lower)
  //               6: short stripe to model the profile
  //                  4 copies (upper left, right; lower)

  // The full module volume.
  // This volume will be ocupied by all the material of the module
  // the scintillators, the aluminium frame, etc.
  box[0] = constants->ModuleLength()/2;
  box[1] = constants->ModuleHeight()/2;
  box[2] = constants->ModuleWidth()/2;
  TVirtualMC::GetMC()->Gsvolu("ACORDE1", "BOX", idtmed[1114], box, 3);

  // The scintillators
  box[0] = constants->PlasticLength()/2;
  box[1] = constants->PlasticHeight()/2;
  box[2] = constants->PlasticWidth()/2;
  TVirtualMC::GetMC()->Gsvolu("ACORDE2", "BOX", idtmed[1112], box, 3);

  // it is important to keep this order for easy assignment of 
  // a volume to a physical module:
  placed_at = box[1]+constants->ProfileThickness()
    - constants->ModuleHeight()/2+small;
  TVirtualMC::GetMC()->Gspos("ACORDE2", 1, "ACORDE1", 0, placed_at, 0, 0, "MANY");
  placed_at = placed_at + 2.0*box[1]+small;
  TVirtualMC::GetMC()->Gspos("ACORDE2", 2, "ACORDE1", 0, placed_at, 0, 0, "MANY");


  // The metallic frame: long walls of box
  // back,front,left,right, defined looking
  // from the + z diraction into alice; i.e.
  // back ==> z<0, front ==> z>0
  // left ==> x<0, right ==> x>0
  // up ==> increasing y, down ==> decreasing y
  box[0] = constants->ModuleLength()/2;
  box[1] = constants->ModuleHeight()/2;
  box[2] = constants->ProfileThickness()/2.0; 
  TVirtualMC::GetMC()->Gsvolu("ACORDE3", "BOX", idtmed[1108], box, 3);
  // front wall
  placed_at = constants->ModuleWidth()/2-constants->ProfileThickness()/2.0;
  TVirtualMC::GetMC()->Gspos("ACORDE3", 1, "ACORDE1", 0, 0, placed_at, 0, "MANY");
  // back wall
  TVirtualMC::GetMC()->Gspos("ACORDE3", 2, "ACORDE1", 0, 0, -placed_at , 0, "MANY");

  // The metallic frame: end caps
  box[0] = constants->ProfileThickness()/2.0;
  box[1] = constants->ModuleHeight()/2;
  box[2] = constants->ModuleWidth()/2;
  TVirtualMC::GetMC()->Gsvolu("ACORDE4", "BOX", idtmed[1108], box, 3);
  // right cap
  placed_at = constants->ModuleLength()/2-constants->ProfileThickness()/2.0;
  TVirtualMC::GetMC()->Gspos("ACORDE4", 1, "ACORDE1", placed_at, 0, 0, 0, "MANY");
  // left cap
  TVirtualMC::GetMC()->Gspos("ACORDE4", 2, "ACORDE1", -placed_at, 0, 0, 0, "MANY");

  // The metallic frame: the profile, long stripes
  box[0] = constants->ModuleLength()/2.0;
  box[1] = constants->ProfileThickness()/2;
  box[2] = constants->ProfileWidth()/2;
  TVirtualMC::GetMC()->Gsvolu("ACORDE5", "BOX", idtmed[1108], box, 3);
  // upper front
  placed_at = constants->ModuleHeight()/2-box[1];
  placed_at2 = constants->ModuleWidth()/2-
    constants->ProfileThickness()-box[2];
  TVirtualMC::GetMC()->Gspos("ACORDE5", 1, "ACORDE1",0,placed_at,placed_at2, 0, "MANY");
  // upper back
  TVirtualMC::GetMC()->Gspos("ACORDE5", 2, "ACORDE1",0,placed_at,-placed_at2, 0, "MANY");
  // lower front
  TVirtualMC::GetMC()->Gspos("ACORDE5", 3, "ACORDE1",0,-placed_at,placed_at2, 0, "MANY");
  // lower back
  TVirtualMC::GetMC()->Gspos("ACORDE5", 4, "ACORDE1",0,-placed_at,-placed_at2, 0, "MANY");

  // The metallic frame: the profile, long stripes
  box[0] = constants->ProfileWidth()/2.0;
  box[1] = constants->ProfileThickness()/2;
  box[2] = constants->ModuleWidth()/2-constants->ProfileWidth();
  TVirtualMC::GetMC()->Gsvolu("ACORDE6", "BOX", idtmed[1108], box, 3);
  // upper right
  placed_at = constants->ModuleHeight()/2-box[1];
  placed_at2 = constants->ModuleLength()/2-
    constants->ProfileThickness()-box[0];
  TVirtualMC::GetMC()->Gspos("ACORDE6", 1, "ACORDE1",placed_at2,placed_at,0, 0, "MANY");
  // upper left
  TVirtualMC::GetMC()->Gspos("ACORDE6", 2, "ACORDE1",-placed_at2,placed_at,0, 0, "MANY");
  // lower right
  TVirtualMC::GetMC()->Gspos("ACORDE6", 3, "ACORDE1",placed_at2,-placed_at,0, 0, "MANY");
  // lower left
  TVirtualMC::GetMC()->Gspos("ACORDE6", 4, "ACORDE1",-placed_at2,-placed_at,0, 0, "MANY");

  // End of MODULE definition

  ////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////

  // 2.- placement of the module
  // Now put all of them in the right position in 
  // master volume ALIC

  // rotation matrices (see Geant manual for conventions)
  // for columns 4 and 5
  AliMatrix(idrotm[231], 90, 45, 90, 135, 0, 0);
  // for columns 0 and 1
  AliMatrix(idrotm[232], 90, 315, 90, 45, 0, 0);

  // place each one of the 6 columns in turn
  // for the first and the last column the position
  // of the two last modules depends on the value 
  // of the fITSGeometry variable

  // it is important to keep this order because
  // the copy number defines the module!

  // first column, except first and last  modules
  for (Int_t copy = 2; copy < 10; copy++)
    TVirtualMC::GetMC()->Gspos("ACORDE1",copy,"ALIC",
	       constants->OldModulePositionX(copy-1),
	       constants->OldModulePositionY(copy-1),
	       constants->OldModulePositionZ(copy-1),
	       idrotm[232], "MANY");
  // second column
  for (Int_t copy = 11; copy < 21; copy++)
    TVirtualMC::GetMC()->Gspos("ACORDE1",copy,"ALIC",
	       constants->OldModulePositionX(copy-1),
	       constants->OldModulePositionY(copy-1),
	       constants->OldModulePositionZ(copy-1),
	       idrotm[232], "MANY");
  // third and fourth columns
  for (Int_t copy = 21; copy < 41; copy++)
    TVirtualMC::GetMC()->Gspos("ACORDE1",copy,"ALIC",
	       constants->OldModulePositionX(copy-1),
	       constants->OldModulePositionY(copy-1),
	       constants->OldModulePositionZ(copy-1),
	       0, "MANY");
  // fifth column
  for (Int_t copy = 41; copy < 51; copy++)
    TVirtualMC::GetMC()->Gspos("ACORDE1",copy,"ALIC",
	       constants->OldModulePositionX(copy-1),
	       constants->OldModulePositionY(copy-1),
	       constants->OldModulePositionZ(copy-1),
	       idrotm[231], "MANY");
  // last column, except first and last  modules
  for (Int_t copy = 52; copy < 60; copy++)
    TVirtualMC::GetMC()->Gspos("ACORDE1",copy,"ALIC",
	       constants->OldModulePositionX(copy-1),
	       constants->OldModulePositionY(copy-1),
	       constants->OldModulePositionZ(copy-1),
	       idrotm[231], "MANY");
  // the last four modules
  if (Get4CentralModulesGeometry()) {
    TVirtualMC::GetMC()->Gspos("ACORDE1",1,"ALIC",
	       constants->OldExtraModulePositionX(),
	       constants->OldExtraModulePositionY(),
	       constants->OldExtraModulePositionZ(0),
	       0, "MANY");  
    TVirtualMC::GetMC()->Gspos("ACORDE1",10,"ALIC",
	       constants->OldExtraModulePositionX(),
	       constants->OldExtraModulePositionY(),
	       constants->OldExtraModulePositionZ(1),
	       0, "MANY");  
    TVirtualMC::GetMC()->Gspos("ACORDE1",51,"ALIC",
	       constants->OldExtraModulePositionX(),
	       constants->OldExtraModulePositionY(),
	       constants->OldExtraModulePositionZ(2),
	       0, "MANY");  
    TVirtualMC::GetMC()->Gspos("ACORDE1",60,"ALIC",
	       constants->OldExtraModulePositionX(),
	       constants->OldExtraModulePositionY(),
	       constants->OldExtraModulePositionZ(3),
	       0, "MANY");  
  } else {
    TVirtualMC::GetMC()->Gspos("ACORDE1",1,"ALIC",
	       constants->OldModulePositionX(0),
	       constants->OldModulePositionY(0),
	       constants->OldModulePositionZ(0),
	       idrotm[232], "MANY");
    TVirtualMC::GetMC()->Gspos("ACORDE1",10,"ALIC",
	       constants->OldModulePositionX(9),
	       constants->OldModulePositionY(9),
	       constants->OldModulePositionZ(9),
	       idrotm[232], "MANY");
    TVirtualMC::GetMC()->Gspos("ACORDE1",51,"ALIC",
	       constants->OldModulePositionX(50),
	       constants->OldModulePositionY(50),
	       constants->OldModulePositionZ(50),
	       idrotm[231], "MANY");
    TVirtualMC::GetMC()->Gspos("ACORDE1",60,"ALIC",
	       constants->OldModulePositionX(59),
	       constants->OldModulePositionY(59),
	       constants->OldModulePositionZ(59),
	       idrotm[231], "MANY");
  } // end if (fITSGeometry)

}

//____________________________________________________________________________

void AliACORDEv0::Init()
{
  // Initialise L3 magnet after it has been built
  Int_t i;
  if(AliLog::GetGlobalDebugLevel()>0) {
    printf("\n%s: ",ClassName());
    for(i=0;i<35;i++) printf("*");
    printf(" ACORDEv0_INIT ");
    for(i=0;i<35;i++) printf("*");
    printf("\n%s: ",ClassName());
    // Here the ACORDEv initialisation code (if any!)
    for(i=0;i<80;i++) printf("*");
    printf("\n");
  }
 // AliACORDE::Init();  
}
//____________________________________________________________________________
void AliACORDEv0::StepManager()
{
  //
  // Called for every step in the Cosmic Ray Trigger
  //


  // volume: 
  //  [0] = module number 1-60 (1==>(0-0), 60 (5-9)
  //  [1] = Plastic number: 0 (down) to 1 (up)
  static Int_t   vol[2]; 
  //
  // hit
  // [0] = PID
  // [1-3] = x, y, z 
  // [4] = time 
  // [5-7] = px, py, pz
  // [8] = energy 
  // [9] = energy loss
  // [10] = length of track through plastic
  static Float_t hits[11];

  // local static variables
  static Float_t eloss;
  static Float_t step;
  // scintillator volume
  static Int_t idScint = TVirtualMC::GetMC()->VolId("ACORDE2");

  // local variables
  Int_t copy;
  TLorentzVector pos;
  TLorentzVector mom;

  // only charged tracks
  if ( !TVirtualMC::GetMC()->TrackCharge() || !TVirtualMC::GetMC()->IsTrackAlive() ) return;

  // only in sensitive material
  if (TVirtualMC::GetMC()->CurrentVolID(copy) == idScint) {
    step  += TVirtualMC::GetMC()->TrackStep();
    eloss += TVirtualMC::GetMC()->Edep();
    // set all hit variables except eloss which is resetted
    // set volume variables
    if (TVirtualMC::GetMC()->IsTrackEntering()) {
      eloss = 0.0;
      step = 0.0;
      TVirtualMC::GetMC()->TrackPosition(pos);
      TVirtualMC::GetMC()->TrackMomentum(mom);
      // hit
      // [0] = PID
      // [1-3] = x, y, z 
      // [4] = time 
      // [5-7] = px, py, pz
      // [8] = energy 
      // [9] = energy loss
      hits[0]  = (Float_t ) TVirtualMC::GetMC()->TrackPid(); 
      hits[1] = pos[0]; 
      hits[2] = pos[1]; 
      hits[3] = pos[2]; 
      hits[4] = TVirtualMC::GetMC()->TrackTime();
      hits[5] = mom[0]; 
      hits[6] = mom[1]; 
      hits[7] = mom[2]; 
      hits[8] = TVirtualMC::GetMC()->Etot();
      // volume: 
      //  [0] = module number 1-60 (1==>(0-0), 60 (5-9)
      //  [1] = Plastic number: 0 (down) to 1 (up)
      Int_t copyPlastic; // plastic: down=1, up=2
      Int_t copyModule; // module: 1-60
      TVirtualMC::GetMC()->CurrentVolID(copyPlastic);
      TVirtualMC::GetMC()->CurrentVolOffID(1, copyModule);
      // module
      vol[0] = copyModule;
      // plastic: 0 = down, 1 = up
      vol[1] = copyPlastic;
    } // end if TVirtualMC::GetMC()->IsTrackEntering()

    // set hit[9] = total energy loss and book hit
    if( TVirtualMC::GetMC()->IsTrackExiting() || 
	TVirtualMC::GetMC()->IsTrackStop() || 
	TVirtualMC::GetMC()->IsTrackDisappeared()){
      hits[9] = eloss;
      hits[10] = step;
      eloss = 0.0;
      step = 0.0;
      AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
    }
  } // end if in scintillator

}

//_____________________________________________________________________________
void AliACORDEv0::AddHit(Int_t track, Int_t *vol, Float_t *hits)
{
  //
  // Add a ACORDE hit
  //
  TClonesArray &lhits = *fHits;
  new(lhits[fNhits++]) AliACORDEhit(fIshunt,track,vol,hits);
}

 AliACORDEv0.cxx:1
 AliACORDEv0.cxx:2
 AliACORDEv0.cxx:3
 AliACORDEv0.cxx:4
 AliACORDEv0.cxx:5
 AliACORDEv0.cxx:6
 AliACORDEv0.cxx:7
 AliACORDEv0.cxx:8
 AliACORDEv0.cxx:9
 AliACORDEv0.cxx:10
 AliACORDEv0.cxx:11
 AliACORDEv0.cxx:12
 AliACORDEv0.cxx:13
 AliACORDEv0.cxx:14
 AliACORDEv0.cxx:15
 AliACORDEv0.cxx:16
 AliACORDEv0.cxx:17
 AliACORDEv0.cxx:18
 AliACORDEv0.cxx:19
 AliACORDEv0.cxx:20
 AliACORDEv0.cxx:21
 AliACORDEv0.cxx:22
 AliACORDEv0.cxx:23
 AliACORDEv0.cxx:24
 AliACORDEv0.cxx:25
 AliACORDEv0.cxx:26
 AliACORDEv0.cxx:27
 AliACORDEv0.cxx:28
 AliACORDEv0.cxx:29
 AliACORDEv0.cxx:30
 AliACORDEv0.cxx:31
 AliACORDEv0.cxx:32
 AliACORDEv0.cxx:33
 AliACORDEv0.cxx:34
 AliACORDEv0.cxx:35
 AliACORDEv0.cxx:36
 AliACORDEv0.cxx:37
 AliACORDEv0.cxx:38
 AliACORDEv0.cxx:39
 AliACORDEv0.cxx:40
 AliACORDEv0.cxx:41
 AliACORDEv0.cxx:42
 AliACORDEv0.cxx:43
 AliACORDEv0.cxx:44
 AliACORDEv0.cxx:45
 AliACORDEv0.cxx:46
 AliACORDEv0.cxx:47
 AliACORDEv0.cxx:48
 AliACORDEv0.cxx:49
 AliACORDEv0.cxx:50
 AliACORDEv0.cxx:51
 AliACORDEv0.cxx:52
 AliACORDEv0.cxx:53
 AliACORDEv0.cxx:54
 AliACORDEv0.cxx:55
 AliACORDEv0.cxx:56
 AliACORDEv0.cxx:57
 AliACORDEv0.cxx:58
 AliACORDEv0.cxx:59
 AliACORDEv0.cxx:60
 AliACORDEv0.cxx:61
 AliACORDEv0.cxx:62
 AliACORDEv0.cxx:63
 AliACORDEv0.cxx:64
 AliACORDEv0.cxx:65
 AliACORDEv0.cxx:66
 AliACORDEv0.cxx:67
 AliACORDEv0.cxx:68
 AliACORDEv0.cxx:69
 AliACORDEv0.cxx:70
 AliACORDEv0.cxx:71
 AliACORDEv0.cxx:72
 AliACORDEv0.cxx:73
 AliACORDEv0.cxx:74
 AliACORDEv0.cxx:75
 AliACORDEv0.cxx:76
 AliACORDEv0.cxx:77
 AliACORDEv0.cxx:78
 AliACORDEv0.cxx:79
 AliACORDEv0.cxx:80
 AliACORDEv0.cxx:81
 AliACORDEv0.cxx:82
 AliACORDEv0.cxx:83
 AliACORDEv0.cxx:84
 AliACORDEv0.cxx:85
 AliACORDEv0.cxx:86
 AliACORDEv0.cxx:87
 AliACORDEv0.cxx:88
 AliACORDEv0.cxx:89
 AliACORDEv0.cxx:90
 AliACORDEv0.cxx:91
 AliACORDEv0.cxx:92
 AliACORDEv0.cxx:93
 AliACORDEv0.cxx:94
 AliACORDEv0.cxx:95
 AliACORDEv0.cxx:96
 AliACORDEv0.cxx:97
 AliACORDEv0.cxx:98
 AliACORDEv0.cxx:99
 AliACORDEv0.cxx:100
 AliACORDEv0.cxx:101
 AliACORDEv0.cxx:102
 AliACORDEv0.cxx:103
 AliACORDEv0.cxx:104
 AliACORDEv0.cxx:105
 AliACORDEv0.cxx:106
 AliACORDEv0.cxx:107
 AliACORDEv0.cxx:108
 AliACORDEv0.cxx:109
 AliACORDEv0.cxx:110
 AliACORDEv0.cxx:111
 AliACORDEv0.cxx:112
 AliACORDEv0.cxx:113
 AliACORDEv0.cxx:114
 AliACORDEv0.cxx:115
 AliACORDEv0.cxx:116
 AliACORDEv0.cxx:117
 AliACORDEv0.cxx:118
 AliACORDEv0.cxx:119
 AliACORDEv0.cxx:120
 AliACORDEv0.cxx:121
 AliACORDEv0.cxx:122
 AliACORDEv0.cxx:123
 AliACORDEv0.cxx:124
 AliACORDEv0.cxx:125
 AliACORDEv0.cxx:126
 AliACORDEv0.cxx:127
 AliACORDEv0.cxx:128
 AliACORDEv0.cxx:129
 AliACORDEv0.cxx:130
 AliACORDEv0.cxx:131
 AliACORDEv0.cxx:132
 AliACORDEv0.cxx:133
 AliACORDEv0.cxx:134
 AliACORDEv0.cxx:135
 AliACORDEv0.cxx:136
 AliACORDEv0.cxx:137
 AliACORDEv0.cxx:138
 AliACORDEv0.cxx:139
 AliACORDEv0.cxx:140
 AliACORDEv0.cxx:141
 AliACORDEv0.cxx:142
 AliACORDEv0.cxx:143
 AliACORDEv0.cxx:144
 AliACORDEv0.cxx:145
 AliACORDEv0.cxx:146
 AliACORDEv0.cxx:147
 AliACORDEv0.cxx:148
 AliACORDEv0.cxx:149
 AliACORDEv0.cxx:150
 AliACORDEv0.cxx:151
 AliACORDEv0.cxx:152
 AliACORDEv0.cxx:153
 AliACORDEv0.cxx:154
 AliACORDEv0.cxx:155
 AliACORDEv0.cxx:156
 AliACORDEv0.cxx:157
 AliACORDEv0.cxx:158
 AliACORDEv0.cxx:159
 AliACORDEv0.cxx:160
 AliACORDEv0.cxx:161
 AliACORDEv0.cxx:162
 AliACORDEv0.cxx:163
 AliACORDEv0.cxx:164
 AliACORDEv0.cxx:165
 AliACORDEv0.cxx:166
 AliACORDEv0.cxx:167
 AliACORDEv0.cxx:168
 AliACORDEv0.cxx:169
 AliACORDEv0.cxx:170
 AliACORDEv0.cxx:171
 AliACORDEv0.cxx:172
 AliACORDEv0.cxx:173
 AliACORDEv0.cxx:174
 AliACORDEv0.cxx:175
 AliACORDEv0.cxx:176
 AliACORDEv0.cxx:177
 AliACORDEv0.cxx:178
 AliACORDEv0.cxx:179
 AliACORDEv0.cxx:180
 AliACORDEv0.cxx:181
 AliACORDEv0.cxx:182
 AliACORDEv0.cxx:183
 AliACORDEv0.cxx:184
 AliACORDEv0.cxx:185
 AliACORDEv0.cxx:186
 AliACORDEv0.cxx:187
 AliACORDEv0.cxx:188
 AliACORDEv0.cxx:189
 AliACORDEv0.cxx:190
 AliACORDEv0.cxx:191
 AliACORDEv0.cxx:192
 AliACORDEv0.cxx:193
 AliACORDEv0.cxx:194
 AliACORDEv0.cxx:195
 AliACORDEv0.cxx:196
 AliACORDEv0.cxx:197
 AliACORDEv0.cxx:198
 AliACORDEv0.cxx:199
 AliACORDEv0.cxx:200
 AliACORDEv0.cxx:201
 AliACORDEv0.cxx:202
 AliACORDEv0.cxx:203
 AliACORDEv0.cxx:204
 AliACORDEv0.cxx:205
 AliACORDEv0.cxx:206
 AliACORDEv0.cxx:207
 AliACORDEv0.cxx:208
 AliACORDEv0.cxx:209
 AliACORDEv0.cxx:210
 AliACORDEv0.cxx:211
 AliACORDEv0.cxx:212
 AliACORDEv0.cxx:213
 AliACORDEv0.cxx:214
 AliACORDEv0.cxx:215
 AliACORDEv0.cxx:216
 AliACORDEv0.cxx:217
 AliACORDEv0.cxx:218
 AliACORDEv0.cxx:219
 AliACORDEv0.cxx:220
 AliACORDEv0.cxx:221
 AliACORDEv0.cxx:222
 AliACORDEv0.cxx:223
 AliACORDEv0.cxx:224
 AliACORDEv0.cxx:225
 AliACORDEv0.cxx:226
 AliACORDEv0.cxx:227
 AliACORDEv0.cxx:228
 AliACORDEv0.cxx:229
 AliACORDEv0.cxx:230
 AliACORDEv0.cxx:231
 AliACORDEv0.cxx:232
 AliACORDEv0.cxx:233
 AliACORDEv0.cxx:234
 AliACORDEv0.cxx:235
 AliACORDEv0.cxx:236
 AliACORDEv0.cxx:237
 AliACORDEv0.cxx:238
 AliACORDEv0.cxx:239
 AliACORDEv0.cxx:240
 AliACORDEv0.cxx:241
 AliACORDEv0.cxx:242
 AliACORDEv0.cxx:243
 AliACORDEv0.cxx:244
 AliACORDEv0.cxx:245
 AliACORDEv0.cxx:246
 AliACORDEv0.cxx:247
 AliACORDEv0.cxx:248
 AliACORDEv0.cxx:249
 AliACORDEv0.cxx:250
 AliACORDEv0.cxx:251
 AliACORDEv0.cxx:252
 AliACORDEv0.cxx:253
 AliACORDEv0.cxx:254
 AliACORDEv0.cxx:255
 AliACORDEv0.cxx:256
 AliACORDEv0.cxx:257
 AliACORDEv0.cxx:258
 AliACORDEv0.cxx:259
 AliACORDEv0.cxx:260
 AliACORDEv0.cxx:261
 AliACORDEv0.cxx:262
 AliACORDEv0.cxx:263
 AliACORDEv0.cxx:264
 AliACORDEv0.cxx:265
 AliACORDEv0.cxx:266
 AliACORDEv0.cxx:267
 AliACORDEv0.cxx:268
 AliACORDEv0.cxx:269
 AliACORDEv0.cxx:270
 AliACORDEv0.cxx:271
 AliACORDEv0.cxx:272
 AliACORDEv0.cxx:273
 AliACORDEv0.cxx:274
 AliACORDEv0.cxx:275
 AliACORDEv0.cxx:276
 AliACORDEv0.cxx:277
 AliACORDEv0.cxx:278
 AliACORDEv0.cxx:279
 AliACORDEv0.cxx:280
 AliACORDEv0.cxx:281
 AliACORDEv0.cxx:282
 AliACORDEv0.cxx:283
 AliACORDEv0.cxx:284
 AliACORDEv0.cxx:285
 AliACORDEv0.cxx:286
 AliACORDEv0.cxx:287
 AliACORDEv0.cxx:288
 AliACORDEv0.cxx:289
 AliACORDEv0.cxx:290
 AliACORDEv0.cxx:291
 AliACORDEv0.cxx:292
 AliACORDEv0.cxx:293
 AliACORDEv0.cxx:294
 AliACORDEv0.cxx:295
 AliACORDEv0.cxx:296
 AliACORDEv0.cxx:297
 AliACORDEv0.cxx:298
 AliACORDEv0.cxx:299
 AliACORDEv0.cxx:300
 AliACORDEv0.cxx:301
 AliACORDEv0.cxx:302
 AliACORDEv0.cxx:303
 AliACORDEv0.cxx:304
 AliACORDEv0.cxx:305
 AliACORDEv0.cxx:306
 AliACORDEv0.cxx:307
 AliACORDEv0.cxx:308
 AliACORDEv0.cxx:309
 AliACORDEv0.cxx:310
 AliACORDEv0.cxx:311
 AliACORDEv0.cxx:312
 AliACORDEv0.cxx:313
 AliACORDEv0.cxx:314
 AliACORDEv0.cxx:315
 AliACORDEv0.cxx:316
 AliACORDEv0.cxx:317
 AliACORDEv0.cxx:318
 AliACORDEv0.cxx:319
 AliACORDEv0.cxx:320
 AliACORDEv0.cxx:321
 AliACORDEv0.cxx:322
 AliACORDEv0.cxx:323
 AliACORDEv0.cxx:324
 AliACORDEv0.cxx:325
 AliACORDEv0.cxx:326
 AliACORDEv0.cxx:327
 AliACORDEv0.cxx:328
 AliACORDEv0.cxx:329
 AliACORDEv0.cxx:330
 AliACORDEv0.cxx:331
 AliACORDEv0.cxx:332
 AliACORDEv0.cxx:333
 AliACORDEv0.cxx:334
 AliACORDEv0.cxx:335
 AliACORDEv0.cxx:336
 AliACORDEv0.cxx:337
 AliACORDEv0.cxx:338
 AliACORDEv0.cxx:339
 AliACORDEv0.cxx:340
 AliACORDEv0.cxx:341
 AliACORDEv0.cxx:342
 AliACORDEv0.cxx:343
 AliACORDEv0.cxx:344
 AliACORDEv0.cxx:345
 AliACORDEv0.cxx:346
 AliACORDEv0.cxx:347
 AliACORDEv0.cxx:348
 AliACORDEv0.cxx:349
 AliACORDEv0.cxx:350
 AliACORDEv0.cxx:351
 AliACORDEv0.cxx:352
 AliACORDEv0.cxx:353
 AliACORDEv0.cxx:354
 AliACORDEv0.cxx:355
 AliACORDEv0.cxx:356
 AliACORDEv0.cxx:357
 AliACORDEv0.cxx:358
 AliACORDEv0.cxx:359
 AliACORDEv0.cxx:360
 AliACORDEv0.cxx:361
 AliACORDEv0.cxx:362
 AliACORDEv0.cxx:363
 AliACORDEv0.cxx:364
 AliACORDEv0.cxx:365
 AliACORDEv0.cxx:366
 AliACORDEv0.cxx:367
 AliACORDEv0.cxx:368
 AliACORDEv0.cxx:369
 AliACORDEv0.cxx:370
 AliACORDEv0.cxx:371
 AliACORDEv0.cxx:372
 AliACORDEv0.cxx:373
 AliACORDEv0.cxx:374
 AliACORDEv0.cxx:375
 AliACORDEv0.cxx:376
 AliACORDEv0.cxx:377
 AliACORDEv0.cxx:378
 AliACORDEv0.cxx:379
 AliACORDEv0.cxx:380
 AliACORDEv0.cxx:381
 AliACORDEv0.cxx:382
 AliACORDEv0.cxx:383
 AliACORDEv0.cxx:384
 AliACORDEv0.cxx:385
 AliACORDEv0.cxx:386
 AliACORDEv0.cxx:387
 AliACORDEv0.cxx:388
 AliACORDEv0.cxx:389
 AliACORDEv0.cxx:390
 AliACORDEv0.cxx:391
 AliACORDEv0.cxx:392
 AliACORDEv0.cxx:393
 AliACORDEv0.cxx:394
 AliACORDEv0.cxx:395
 AliACORDEv0.cxx:396
 AliACORDEv0.cxx:397
 AliACORDEv0.cxx:398
 AliACORDEv0.cxx:399
 AliACORDEv0.cxx:400
 AliACORDEv0.cxx:401
 AliACORDEv0.cxx:402
 AliACORDEv0.cxx:403
 AliACORDEv0.cxx:404
 AliACORDEv0.cxx:405
 AliACORDEv0.cxx:406
 AliACORDEv0.cxx:407
 AliACORDEv0.cxx:408
 AliACORDEv0.cxx:409
 AliACORDEv0.cxx:410
 AliACORDEv0.cxx:411
 AliACORDEv0.cxx:412
 AliACORDEv0.cxx:413
 AliACORDEv0.cxx:414
 AliACORDEv0.cxx:415
 AliACORDEv0.cxx:416
 AliACORDEv0.cxx:417
 AliACORDEv0.cxx:418
 AliACORDEv0.cxx:419
 AliACORDEv0.cxx:420
 AliACORDEv0.cxx:421
 AliACORDEv0.cxx:422
 AliACORDEv0.cxx:423
 AliACORDEv0.cxx:424
 AliACORDEv0.cxx:425
 AliACORDEv0.cxx:426
 AliACORDEv0.cxx:427
 AliACORDEv0.cxx:428
 AliACORDEv0.cxx:429
 AliACORDEv0.cxx:430
 AliACORDEv0.cxx:431
 AliACORDEv0.cxx:432
 AliACORDEv0.cxx:433
 AliACORDEv0.cxx:434
 AliACORDEv0.cxx:435
 AliACORDEv0.cxx:436
 AliACORDEv0.cxx:437
 AliACORDEv0.cxx:438
 AliACORDEv0.cxx:439
 AliACORDEv0.cxx:440
 AliACORDEv0.cxx:441
 AliACORDEv0.cxx:442
 AliACORDEv0.cxx:443
 AliACORDEv0.cxx:444
 AliACORDEv0.cxx:445
 AliACORDEv0.cxx:446
 AliACORDEv0.cxx:447
 AliACORDEv0.cxx:448
 AliACORDEv0.cxx:449
 AliACORDEv0.cxx:450
 AliACORDEv0.cxx:451
 AliACORDEv0.cxx:452
 AliACORDEv0.cxx:453
 AliACORDEv0.cxx:454
 AliACORDEv0.cxx:455
 AliACORDEv0.cxx:456
 AliACORDEv0.cxx:457
 AliACORDEv0.cxx:458
 AliACORDEv0.cxx:459
 AliACORDEv0.cxx:460
 AliACORDEv0.cxx:461
 AliACORDEv0.cxx:462
 AliACORDEv0.cxx:463
 AliACORDEv0.cxx:464
 AliACORDEv0.cxx:465
 AliACORDEv0.cxx:466
 AliACORDEv0.cxx:467
 AliACORDEv0.cxx:468
 AliACORDEv0.cxx:469
 AliACORDEv0.cxx:470
 AliACORDEv0.cxx:471
 AliACORDEv0.cxx:472
 AliACORDEv0.cxx:473
 AliACORDEv0.cxx:474
 AliACORDEv0.cxx:475
 AliACORDEv0.cxx:476
 AliACORDEv0.cxx:477
 AliACORDEv0.cxx:478
 AliACORDEv0.cxx:479
 AliACORDEv0.cxx:480
 AliACORDEv0.cxx:481
 AliACORDEv0.cxx:482
 AliACORDEv0.cxx:483
 AliACORDEv0.cxx:484
 AliACORDEv0.cxx:485
 AliACORDEv0.cxx:486
 AliACORDEv0.cxx:487
 AliACORDEv0.cxx:488
 AliACORDEv0.cxx:489
 AliACORDEv0.cxx:490
 AliACORDEv0.cxx:491
 AliACORDEv0.cxx:492
 AliACORDEv0.cxx:493
 AliACORDEv0.cxx:494
 AliACORDEv0.cxx:495
 AliACORDEv0.cxx:496
 AliACORDEv0.cxx:497
 AliACORDEv0.cxx:498
 AliACORDEv0.cxx:499
 AliACORDEv0.cxx:500
 AliACORDEv0.cxx:501
 AliACORDEv0.cxx:502
 AliACORDEv0.cxx:503
 AliACORDEv0.cxx:504
 AliACORDEv0.cxx:505
 AliACORDEv0.cxx:506
 AliACORDEv0.cxx:507
 AliACORDEv0.cxx:508
 AliACORDEv0.cxx:509
 AliACORDEv0.cxx:510
 AliACORDEv0.cxx:511
 AliACORDEv0.cxx:512
 AliACORDEv0.cxx:513
 AliACORDEv0.cxx:514
 AliACORDEv0.cxx:515
 AliACORDEv0.cxx:516
 AliACORDEv0.cxx:517
 AliACORDEv0.cxx:518
 AliACORDEv0.cxx:519
 AliACORDEv0.cxx:520
 AliACORDEv0.cxx:521
 AliACORDEv0.cxx:522
 AliACORDEv0.cxx:523
 AliACORDEv0.cxx:524
 AliACORDEv0.cxx:525
 AliACORDEv0.cxx:526
 AliACORDEv0.cxx:527
 AliACORDEv0.cxx:528
 AliACORDEv0.cxx:529
 AliACORDEv0.cxx:530
 AliACORDEv0.cxx:531
 AliACORDEv0.cxx:532
 AliACORDEv0.cxx:533
 AliACORDEv0.cxx:534
 AliACORDEv0.cxx:535
 AliACORDEv0.cxx:536
 AliACORDEv0.cxx:537
 AliACORDEv0.cxx:538
 AliACORDEv0.cxx:539
 AliACORDEv0.cxx:540
 AliACORDEv0.cxx:541
 AliACORDEv0.cxx:542
 AliACORDEv0.cxx:543
 AliACORDEv0.cxx:544
 AliACORDEv0.cxx:545
 AliACORDEv0.cxx:546
 AliACORDEv0.cxx:547
 AliACORDEv0.cxx:548
 AliACORDEv0.cxx:549
 AliACORDEv0.cxx:550
 AliACORDEv0.cxx:551
 AliACORDEv0.cxx:552
 AliACORDEv0.cxx:553
 AliACORDEv0.cxx:554
 AliACORDEv0.cxx:555
 AliACORDEv0.cxx:556
 AliACORDEv0.cxx:557
 AliACORDEv0.cxx:558
 AliACORDEv0.cxx:559
 AliACORDEv0.cxx:560
 AliACORDEv0.cxx:561
 AliACORDEv0.cxx:562
 AliACORDEv0.cxx:563
 AliACORDEv0.cxx:564
 AliACORDEv0.cxx:565
 AliACORDEv0.cxx:566
 AliACORDEv0.cxx:567
 AliACORDEv0.cxx:568
 AliACORDEv0.cxx:569
 AliACORDEv0.cxx:570
 AliACORDEv0.cxx:571
 AliACORDEv0.cxx:572
 AliACORDEv0.cxx:573
 AliACORDEv0.cxx:574
 AliACORDEv0.cxx:575
 AliACORDEv0.cxx:576
 AliACORDEv0.cxx:577
 AliACORDEv0.cxx:578
 AliACORDEv0.cxx:579
 AliACORDEv0.cxx:580
 AliACORDEv0.cxx:581
 AliACORDEv0.cxx:582
 AliACORDEv0.cxx:583
 AliACORDEv0.cxx:584
 AliACORDEv0.cxx:585
 AliACORDEv0.cxx:586
 AliACORDEv0.cxx:587
 AliACORDEv0.cxx:588
 AliACORDEv0.cxx:589
 AliACORDEv0.cxx:590
 AliACORDEv0.cxx:591
 AliACORDEv0.cxx:592
 AliACORDEv0.cxx:593
 AliACORDEv0.cxx:594
 AliACORDEv0.cxx:595
 AliACORDEv0.cxx:596
 AliACORDEv0.cxx:597
 AliACORDEv0.cxx:598
 AliACORDEv0.cxx:599
 AliACORDEv0.cxx:600
 AliACORDEv0.cxx:601
 AliACORDEv0.cxx:602
 AliACORDEv0.cxx:603
 AliACORDEv0.cxx:604
 AliACORDEv0.cxx:605
 AliACORDEv0.cxx:606
 AliACORDEv0.cxx:607
 AliACORDEv0.cxx:608
 AliACORDEv0.cxx:609
 AliACORDEv0.cxx:610
 AliACORDEv0.cxx:611
 AliACORDEv0.cxx:612
 AliACORDEv0.cxx:613
 AliACORDEv0.cxx:614
 AliACORDEv0.cxx:615
 AliACORDEv0.cxx:616
 AliACORDEv0.cxx:617
 AliACORDEv0.cxx:618
 AliACORDEv0.cxx:619
 AliACORDEv0.cxx:620
 AliACORDEv0.cxx:621
 AliACORDEv0.cxx:622
 AliACORDEv0.cxx:623
 AliACORDEv0.cxx:624
 AliACORDEv0.cxx:625
 AliACORDEv0.cxx:626
 AliACORDEv0.cxx:627
 AliACORDEv0.cxx:628
 AliACORDEv0.cxx:629
 AliACORDEv0.cxx:630
 AliACORDEv0.cxx:631
 AliACORDEv0.cxx:632
 AliACORDEv0.cxx:633
 AliACORDEv0.cxx:634
 AliACORDEv0.cxx:635
 AliACORDEv0.cxx:636
 AliACORDEv0.cxx:637
 AliACORDEv0.cxx:638
 AliACORDEv0.cxx:639
 AliACORDEv0.cxx:640
 AliACORDEv0.cxx:641
 AliACORDEv0.cxx:642
 AliACORDEv0.cxx:643
 AliACORDEv0.cxx:644
 AliACORDEv0.cxx:645
 AliACORDEv0.cxx:646
 AliACORDEv0.cxx:647
 AliACORDEv0.cxx:648
 AliACORDEv0.cxx:649
 AliACORDEv0.cxx:650
 AliACORDEv0.cxx:651
 AliACORDEv0.cxx:652
 AliACORDEv0.cxx:653
 AliACORDEv0.cxx:654
 AliACORDEv0.cxx:655
 AliACORDEv0.cxx:656
 AliACORDEv0.cxx:657
 AliACORDEv0.cxx:658
 AliACORDEv0.cxx:659
 AliACORDEv0.cxx:660
 AliACORDEv0.cxx:661
 AliACORDEv0.cxx:662
 AliACORDEv0.cxx:663
 AliACORDEv0.cxx:664
 AliACORDEv0.cxx:665
 AliACORDEv0.cxx:666
 AliACORDEv0.cxx:667
 AliACORDEv0.cxx:668
 AliACORDEv0.cxx:669
 AliACORDEv0.cxx:670
 AliACORDEv0.cxx:671
 AliACORDEv0.cxx:672
 AliACORDEv0.cxx:673
 AliACORDEv0.cxx:674
 AliACORDEv0.cxx:675
 AliACORDEv0.cxx:676
 AliACORDEv0.cxx:677
 AliACORDEv0.cxx:678
 AliACORDEv0.cxx:679
 AliACORDEv0.cxx:680
 AliACORDEv0.cxx:681
 AliACORDEv0.cxx:682
 AliACORDEv0.cxx:683
 AliACORDEv0.cxx:684
 AliACORDEv0.cxx:685
 AliACORDEv0.cxx:686
 AliACORDEv0.cxx:687
 AliACORDEv0.cxx:688
 AliACORDEv0.cxx:689
 AliACORDEv0.cxx:690
 AliACORDEv0.cxx:691
 AliACORDEv0.cxx:692
 AliACORDEv0.cxx:693
 AliACORDEv0.cxx:694
 AliACORDEv0.cxx:695
 AliACORDEv0.cxx:696
 AliACORDEv0.cxx:697
 AliACORDEv0.cxx:698
 AliACORDEv0.cxx:699
 AliACORDEv0.cxx:700
 AliACORDEv0.cxx:701
 AliACORDEv0.cxx:702
 AliACORDEv0.cxx:703
 AliACORDEv0.cxx:704
 AliACORDEv0.cxx:705
 AliACORDEv0.cxx:706
 AliACORDEv0.cxx:707
 AliACORDEv0.cxx:708
 AliACORDEv0.cxx:709
 AliACORDEv0.cxx:710
 AliACORDEv0.cxx:711
 AliACORDEv0.cxx:712
 AliACORDEv0.cxx:713
 AliACORDEv0.cxx:714
 AliACORDEv0.cxx:715
 AliACORDEv0.cxx:716
 AliACORDEv0.cxx:717
 AliACORDEv0.cxx:718
 AliACORDEv0.cxx:719
 AliACORDEv0.cxx:720
 AliACORDEv0.cxx:721
 AliACORDEv0.cxx:722
 AliACORDEv0.cxx:723
 AliACORDEv0.cxx:724
 AliACORDEv0.cxx:725
 AliACORDEv0.cxx:726
 AliACORDEv0.cxx:727
 AliACORDEv0.cxx:728
 AliACORDEv0.cxx:729
 AliACORDEv0.cxx:730
 AliACORDEv0.cxx:731