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

#include "AliMUONConstants.h"

#include "AliLog.h"

#include "TMath.h"
#include "TClass.h"
#include "AliMpConstants.h"

//-----------------------------------------------------------------------------
/// \class AliMUONConstants
/// This class holds various constants to be used in many places,
/// such as the number of tracking and trigger chambers, 
/// some geometrical constants (to build the initial geometry for simulation)
/// and mathieson distribution default values.
/// Those constants should as much as possible replace hard-coded values
/// which are to be considered strictly illegal in the MUON code (or any code,
/// by the way).
//-----------------------------------------------------------------------------

/// \cond CLASSIMP
ClassImp(AliMUONConstants)
/// \endcond

Int_t   AliMUONConstants::fgNTrackingSt = 5;
Int_t   AliMUONConstants::fgNTriggerCircuit = 234;
Int_t   AliMUONConstants::fgNDetElem = 228;
Int_t   AliMUONConstants::fgNGeomModules = 20;
Float_t AliMUONConstants::fgkTriggerTofLimit = 75E-9;

Float_t AliMUONConstants::fgDefaultChamberZ[14] = 
  {-526.16, -545.24, -676.4, -695.4, // St12
   -967.5, -998.5, -1276.5, -1307.5, -1406.6, -1437.6,// updated 08/05, EDMS id 335328 (A. Tournaire)
   -1603.5, -1620.5, -1703.5, -1720.5}; // M1 & M2


// These are used by AliMUONConstants::ChamberNumber and must be calculated once
// by that method from fgDzCh, fgDzSlat, fgDefaultChamberZ and fgSt345inclination,
// so for now we set everything to zero.
Float_t AliMUONConstants::fgDefaultChamberMinZ[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Float_t AliMUONConstants::fgDefaultChamberMaxZ[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

Float_t AliMUONConstants::fgDefaultRatioTriggerChamber[4] =
{1., 1.01060, 1.06236, 1.07296};


Float_t  AliMUONConstants::fgSt345inclination = 0.794; // in degrees, rotation axis is X axis 

Float_t  AliMUONConstants::fgDzCh   = 15.5/2.;
Float_t  AliMUONConstants::fgDzSlat = 8.5/2.;

Float_t  AliMUONConstants::fgSqrtKx3 = 0.7131;
Float_t  AliMUONConstants::fgSqrtKy3 = 0.7642;

Float_t  AliMUONConstants::fgSqrtKx3St1 = 0.7000;
Float_t  AliMUONConstants::fgSqrtKy3St1 = 0.7550;

Float_t  AliMUONConstants::fgChargeCorrel    = 0.11;
Float_t  AliMUONConstants::fgChargeCorrelSt1 = 1.0; //??? 
Float_t  AliMUONConstants::fgPitch     = 0.25;
Float_t  AliMUONConstants::fgPitchSt1  = 0.21; 

// From Alain TOURNAIRE    
// ALICE / ALICE Engineering baseline / Dimuonspectrometer (DIS) v7-1
// EDMS Id 335328 for "search in EDMS 
// These are the diameter (Dmin == innner and Dmax - outner) values of the active surface
// In the case of Dmax, the value corresponds to the maximum diameter of the active surface with 2pi coverture in phi
Float_t  AliMUONConstants::fgDmin[7]  = {   36.4,  46.2,  63.0,   79.0,   79.0,  98.8,  100.0};  // cm
Float_t  AliMUONConstants::fgDmax[7]  = {  176.6, 229.0, 308.84, 418.2,  522.0, 850.0, 900.0};   // cm
 
Int_t    AliMUONConstants::fgMaxZoom = 20;

// Defaults parameters for dipole magnet
// From ALICE Dimuon - parameters / geometry table,
// V7-3 (version 7 created 24/03/2004 updated 25/10/2005)
Double_t AliMUONConstants::fgCoilZ = -994.05;
Double_t AliMUONConstants::fgCoilL = 502.1;
Double_t AliMUONConstants::fgYokeZ = -986.6;
Double_t AliMUONConstants::fgYokeL = 309.4;

// Defaults parameters for absorber (27/06/07)
const Double_t AliMUONConstants::fgkAbsZBeg = -90.;
const Double_t AliMUONConstants::fgkAbsZEnd = -505.;
    
// Default trigger chamber resolution (cm)
// Warning: the resolution refers only to ALIGNMENT
// For the total resolution the strip width should be taken into account!
const Double_t AliMUONConstants::fgkTriggerNonBendingReso = 0.2;
const Double_t AliMUONConstants::fgkTriggerBendingReso = 0.2;

// Defaults parameters for muon filter (19/11/07)
const Double_t AliMUONConstants::fgkMuonFilterZBeg = -1471.;
const Double_t AliMUONConstants::fgkMuonFilterZEnd = -1471.-120.;
const Double_t AliMUONConstants::fgkMuonFilterX0 = 1.76;

// Defaults parameters for track reconstruction
Double_t AliMUONConstants::fgChamberThicknessInX0[10] = {0.065, 0.065, 0.075, 0.075, 0.035, 0.035, 0.035, 0.035, 0.035, 0.035};

const Double_t AliMUONConstants::fgkMostProbBendingMomentum = 2.0;

Float_t AliMUONConstants::fgAverageChamberT[14]=
  {17.64*1E-9, 18.28*1E-9, 22.68*1E-9, 23.33*1E-9, 32.42*1E-9, 33.48*1E-9, 42.76*1E-9,
   43.81*1E-9, 47.13*1E-9, 48.17*1E-9, 53.75*1E-9, 54.32*1E-9, 57.12*1E-9, 57.67*1E-9};

// is equivalent to gain = 4 mV/fC
const Float_t AliMUONConstants::fgkDefaultA0 = 1.25; 
// 1 ADC channel = 0.61 mV
const Float_t AliMUONConstants::fgkDefaultADC2MV = 0.61; 
const Float_t AliMUONConstants::fgkDefaultCapa = 0.2; 

//______________________________________________________________________________
Int_t AliMUONConstants::NCh()
{
  return AliMpConstants::NofChambers();
}

//______________________________________________________________________________
Int_t AliMUONConstants::NTrackingCh()
{
  return AliMpConstants::NofTrackingChambers();
}

//______________________________________________________________________________
Int_t AliMUONConstants::ChamberNumber(Float_t z, bool warn)
{
  // return chamber number according z position of hit. Should be taken from geometry ?

  if (fgDefaultChamberMinZ[0] == 0) // Are the min/max Z arrays initialised?
  {
    // The min and max Z arrays need to be calculated.
    for (Int_t i = 0; i < NCh(); i++)
    {
      Float_t a = 0, b = 0;
      if (4 <= i and i < 10)
      {
        Float_t dzAngle = TMath::Tan(TMath::Pi()*St345Inclination()/180.) * Rmax(i/2);
        // We add 2.5mm since Rmax is an under-estimate.
        a = DefaultChamberZ(i) + DzSlat() + DzCh() + dzAngle + 0.25;
        b = DefaultChamberZ(i) - DzSlat() - DzCh() - dzAngle - 0.25;
      }
      else
      {
        a = DefaultChamberZ(i) + DzSlat();
        b = DefaultChamberZ(i) - DzSlat();
      }
      fgDefaultChamberMinZ[i] = TMath::Min(a, b);
      fgDefaultChamberMaxZ[i] = TMath::Max(a, b);
    }
  }

  // We can apply a binary search for the chamber since the fgDefaultChamberMinZ and
  // fgDefaultChamberMaxZ arrays are ordered.
  Int_t mini = 0, maxi = NCh()-1;
  while (mini <= maxi)
  {
    Int_t iChamber = (maxi + mini) / 2;
    if (z < fgDefaultChamberMinZ[iChamber])
      mini = iChamber+1;
    else if (z > fgDefaultChamberMaxZ[iChamber])
      maxi = iChamber-1;
    else
      // We are between min and max Z of chamber number iChamber so we found our chamber.
      return iChamber;
  }

  if (warn) AliWarningClass(Form("No chamber number found for z = %f",z));
  return -1;
}

//______________________________________________________________________________
Float_t AliMUONConstants::ReducedQTot(Float_t qtot, Float_t timeDif)
{
  // return a reduced charge if the hit belongs to a track from a pileup event
  Float_t q = qtot*1.19*(1.24-timeDif*1E6)*TMath::Exp(-(0.97-timeDif*1E6)*(0.97-timeDif*1E6)/2.42);
  return q;
}

//______________________________________________________________________________
Float_t AliMUONConstants::FC2ADC() {
  // Return conversionfactor fc to adc
  Float_t fc2adc = 1./(DefaultA0()*DefaultCapa()*DefaultADC2MV());
  
  return fc2adc;
}
 AliMUONConstants.cxx:1
 AliMUONConstants.cxx:2
 AliMUONConstants.cxx:3
 AliMUONConstants.cxx:4
 AliMUONConstants.cxx:5
 AliMUONConstants.cxx:6
 AliMUONConstants.cxx:7
 AliMUONConstants.cxx:8
 AliMUONConstants.cxx:9
 AliMUONConstants.cxx:10
 AliMUONConstants.cxx:11
 AliMUONConstants.cxx:12
 AliMUONConstants.cxx:13
 AliMUONConstants.cxx:14
 AliMUONConstants.cxx:15
 AliMUONConstants.cxx:16
 AliMUONConstants.cxx:17
 AliMUONConstants.cxx:18
 AliMUONConstants.cxx:19
 AliMUONConstants.cxx:20
 AliMUONConstants.cxx:21
 AliMUONConstants.cxx:22
 AliMUONConstants.cxx:23
 AliMUONConstants.cxx:24
 AliMUONConstants.cxx:25
 AliMUONConstants.cxx:26
 AliMUONConstants.cxx:27
 AliMUONConstants.cxx:28
 AliMUONConstants.cxx:29
 AliMUONConstants.cxx:30
 AliMUONConstants.cxx:31
 AliMUONConstants.cxx:32
 AliMUONConstants.cxx:33
 AliMUONConstants.cxx:34
 AliMUONConstants.cxx:35
 AliMUONConstants.cxx:36
 AliMUONConstants.cxx:37
 AliMUONConstants.cxx:38
 AliMUONConstants.cxx:39
 AliMUONConstants.cxx:40
 AliMUONConstants.cxx:41
 AliMUONConstants.cxx:42
 AliMUONConstants.cxx:43
 AliMUONConstants.cxx:44
 AliMUONConstants.cxx:45
 AliMUONConstants.cxx:46
 AliMUONConstants.cxx:47
 AliMUONConstants.cxx:48
 AliMUONConstants.cxx:49
 AliMUONConstants.cxx:50
 AliMUONConstants.cxx:51
 AliMUONConstants.cxx:52
 AliMUONConstants.cxx:53
 AliMUONConstants.cxx:54
 AliMUONConstants.cxx:55
 AliMUONConstants.cxx:56
 AliMUONConstants.cxx:57
 AliMUONConstants.cxx:58
 AliMUONConstants.cxx:59
 AliMUONConstants.cxx:60
 AliMUONConstants.cxx:61
 AliMUONConstants.cxx:62
 AliMUONConstants.cxx:63
 AliMUONConstants.cxx:64
 AliMUONConstants.cxx:65
 AliMUONConstants.cxx:66
 AliMUONConstants.cxx:67
 AliMUONConstants.cxx:68
 AliMUONConstants.cxx:69
 AliMUONConstants.cxx:70
 AliMUONConstants.cxx:71
 AliMUONConstants.cxx:72
 AliMUONConstants.cxx:73
 AliMUONConstants.cxx:74
 AliMUONConstants.cxx:75
 AliMUONConstants.cxx:76
 AliMUONConstants.cxx:77
 AliMUONConstants.cxx:78
 AliMUONConstants.cxx:79
 AliMUONConstants.cxx:80
 AliMUONConstants.cxx:81
 AliMUONConstants.cxx:82
 AliMUONConstants.cxx:83
 AliMUONConstants.cxx:84
 AliMUONConstants.cxx:85
 AliMUONConstants.cxx:86
 AliMUONConstants.cxx:87
 AliMUONConstants.cxx:88
 AliMUONConstants.cxx:89
 AliMUONConstants.cxx:90
 AliMUONConstants.cxx:91
 AliMUONConstants.cxx:92
 AliMUONConstants.cxx:93
 AliMUONConstants.cxx:94
 AliMUONConstants.cxx:95
 AliMUONConstants.cxx:96
 AliMUONConstants.cxx:97
 AliMUONConstants.cxx:98
 AliMUONConstants.cxx:99
 AliMUONConstants.cxx:100
 AliMUONConstants.cxx:101
 AliMUONConstants.cxx:102
 AliMUONConstants.cxx:103
 AliMUONConstants.cxx:104
 AliMUONConstants.cxx:105
 AliMUONConstants.cxx:106
 AliMUONConstants.cxx:107
 AliMUONConstants.cxx:108
 AliMUONConstants.cxx:109
 AliMUONConstants.cxx:110
 AliMUONConstants.cxx:111
 AliMUONConstants.cxx:112
 AliMUONConstants.cxx:113
 AliMUONConstants.cxx:114
 AliMUONConstants.cxx:115
 AliMUONConstants.cxx:116
 AliMUONConstants.cxx:117
 AliMUONConstants.cxx:118
 AliMUONConstants.cxx:119
 AliMUONConstants.cxx:120
 AliMUONConstants.cxx:121
 AliMUONConstants.cxx:122
 AliMUONConstants.cxx:123
 AliMUONConstants.cxx:124
 AliMUONConstants.cxx:125
 AliMUONConstants.cxx:126
 AliMUONConstants.cxx:127
 AliMUONConstants.cxx:128
 AliMUONConstants.cxx:129
 AliMUONConstants.cxx:130
 AliMUONConstants.cxx:131
 AliMUONConstants.cxx:132
 AliMUONConstants.cxx:133
 AliMUONConstants.cxx:134
 AliMUONConstants.cxx:135
 AliMUONConstants.cxx:136
 AliMUONConstants.cxx:137
 AliMUONConstants.cxx:138
 AliMUONConstants.cxx:139
 AliMUONConstants.cxx:140
 AliMUONConstants.cxx:141
 AliMUONConstants.cxx:142
 AliMUONConstants.cxx:143
 AliMUONConstants.cxx:144
 AliMUONConstants.cxx:145
 AliMUONConstants.cxx:146
 AliMUONConstants.cxx:147
 AliMUONConstants.cxx:148
 AliMUONConstants.cxx:149
 AliMUONConstants.cxx:150
 AliMUONConstants.cxx:151
 AliMUONConstants.cxx:152
 AliMUONConstants.cxx:153
 AliMUONConstants.cxx:154
 AliMUONConstants.cxx:155
 AliMUONConstants.cxx:156
 AliMUONConstants.cxx:157
 AliMUONConstants.cxx:158
 AliMUONConstants.cxx:159
 AliMUONConstants.cxx:160
 AliMUONConstants.cxx:161
 AliMUONConstants.cxx:162
 AliMUONConstants.cxx:163
 AliMUONConstants.cxx:164
 AliMUONConstants.cxx:165
 AliMUONConstants.cxx:166
 AliMUONConstants.cxx:167
 AliMUONConstants.cxx:168
 AliMUONConstants.cxx:169
 AliMUONConstants.cxx:170
 AliMUONConstants.cxx:171
 AliMUONConstants.cxx:172
 AliMUONConstants.cxx:173
 AliMUONConstants.cxx:174
 AliMUONConstants.cxx:175
 AliMUONConstants.cxx:176
 AliMUONConstants.cxx:177
 AliMUONConstants.cxx:178
 AliMUONConstants.cxx:179
 AliMUONConstants.cxx:180
 AliMUONConstants.cxx:181
 AliMUONConstants.cxx:182
 AliMUONConstants.cxx:183
 AliMUONConstants.cxx:184
 AliMUONConstants.cxx:185
 AliMUONConstants.cxx:186
 AliMUONConstants.cxx:187
 AliMUONConstants.cxx:188
 AliMUONConstants.cxx:189
 AliMUONConstants.cxx:190
 AliMUONConstants.cxx:191
 AliMUONConstants.cxx:192
 AliMUONConstants.cxx:193
 AliMUONConstants.cxx:194
 AliMUONConstants.cxx:195
 AliMUONConstants.cxx:196
 AliMUONConstants.cxx:197
 AliMUONConstants.cxx:198
 AliMUONConstants.cxx:199
 AliMUONConstants.cxx:200