/* History of cvs commits:
*
* $Log$
+ * Revision 1.49 2007/01/22 17:29:12 pavlinov
+ * EMCAL geometry can be created independently form anything now
+ *
* Revision 1.48 2006/12/19 02:34:13 pavlinov
* clean up the EMCAL name scheme : super module -> module -> tower (or cell)
*
{
// Default ctor
fName = "EMCAL" ;
- Init();
+ InitConstants();
}
fLowGainOffset(0)
{
// ctor : title is used to identify the layout
- Init();
+ InitConstants();
}
}
//____________________________________________________________________________
-void AliEMCAL::Init(void)
+void AliEMCAL::InitConstants()
{
//initialize EMCAL values
fBirkC0 = 1;
}
//____________________________________________________________________________
-AliDigitizer* AliEMCAL::CreateDigitizer(AliRunDigitizer* manager) const
-{
- //create and return the digitizer
- return new AliEMCALDigitizer(manager);
-}
-
-//____________________________________________________________________________
-void AliEMCAL::CreateMaterials()
+void AliEMCAL::Init()
{
- // Definitions of materials to build EMCAL and associated tracking media.
- // media number in idtmed are 1599 to 1698.
-
- AliEMCALGeometry* geom = GetGeometry();
-
- // --- Air ---
- Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
- Float_t zAir[4]={6.,7.,8.,18.};
- Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
- Float_t dAir = 1.20479E-3;
- AliMixture(0, "Air$", aAir, zAir, dAir, 4, wAir) ;
-
- // --- Lead ---
- AliMaterial(1, "Pb$", 207.2, 82, 11.35, 0.56, 0., 0, 0) ;
-
-
- // --- The polysterene scintillator (CH) ---
- Float_t aP[2] = {12.011, 1.00794} ;
- Float_t zP[2] = {6.0, 1.0} ;
- Float_t wP[2] = {1.0, 1.0} ;
- Float_t dP = 1.032 ;
-
- AliMixture(2, "Polystyrene$", aP, zP, dP, -2, wP) ;
-
- // --- Aluminium ---
- AliMaterial(3, "Al$", 26.98, 13., 2.7, 8.9, 999., 0, 0) ;
- // --- Absorption length is ignored ^
-
- // 25-aug-04 by PAI - see PMD/AliPMDv0.cxx for STEEL definition
- Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
- Float_t zsteel[4] = { 26.,24.,28.,14. };
- Float_t wsteel[4] = { .715,.18,.1,.005 };
- AliMixture(4, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
-
- // DEFINITION OF THE TRACKING MEDIA
-
- // for EMCAL: idtmed[1599->1698] equivalent to fIdtmed[0->100]
+ //EMCAL cuts
Int_t * idtmed = fIdtmed->GetArray() - 1599 ;
- Int_t isxfld = gAlice->Field()->Integ() ;
- Float_t sxmgmx = gAlice->Field()->Max() ;
-
- // Air -> idtmed[1599]
- AliMedium(0, "Air$", 0, 0,
- isxfld, sxmgmx, 10.0, 1.0, 0.1, 0.1, 10.0, 0, 0) ;
-
- // The Lead -> idtmed[1600]
-
- AliMedium(1, "Lead$", 1, 0,
- isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ;
-
- // The scintillator of the CPV made of Polystyrene scintillator -> idtmed[1601]
- float deemax = 0.1; // maximum fractional energy loss in one step (0 < DEEMAX ≤ 1);i
- AliMedium(2, "Scintillator$", 2, 1,
- isxfld, sxmgmx, 10.0, 0.001, deemax, 0.001, 0.001, 0, 0) ;
-
- // Various Aluminium parts made of Al -> idtmed[1602]
- AliMedium(3, "Al$", 3, 0,
- isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.001, 0.001, 0, 0) ;
-
- // 25-aug-04 by PAI : see PMD/AliPMDv0.cxx for STEEL definition -> idtmed[1603]
- AliMedium(4, "S steel$", 4, 0,
- isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.001, 0.001, 0, 0) ;
-
// --- Set decent energy thresholds for gamma and electron tracking
// Tracking threshold for photons and electrons in Lead
gMC->Gstpar(idtmed[1603], "DCUTE", cutele) ;
gMC->Gstpar(idtmed[1603], "DCUTM", cutele) ;
+ AliEMCALGeometry* geom = GetGeometry();
if(geom->GetILOSS()>=0) {
for(int i=1600; i<=1603; i++) gMC->Gstpar(idtmed[i], "LOSS", geom->GetILOSS()) ;
}
if(geom->GetIHADR()>=0) {
for(int i=1600; i<=1603; i++) gMC->Gstpar(idtmed[i], "HADR", geom->GetIHADR()) ;
}
+}
+
+//____________________________________________________________________________
+AliDigitizer* AliEMCAL::CreateDigitizer(AliRunDigitizer* manager) const
+{
+ //create and return the digitizer
+ return new AliEMCALDigitizer(manager);
+}
+
+//____________________________________________________________________________
+void AliEMCAL::CreateMaterials()
+{
+ // Definitions of materials to build EMCAL and associated tracking media.
+ // media number in idtmed are 1599 to 1698.
+ // --- Air ---
+ Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
+ Float_t zAir[4]={6.,7.,8.,18.};
+ Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
+ Float_t dAir = 1.20479E-3;
+ AliMixture(0, "Air$", aAir, zAir, dAir, 4, wAir) ;
+
+ // --- Lead ---
+ AliMaterial(1, "Pb$", 207.2, 82, 11.35, 0.56, 0., 0, 0) ;
+
+
+ // --- The polysterene scintillator (CH) ---
+ Float_t aP[2] = {12.011, 1.00794} ;
+ Float_t zP[2] = {6.0, 1.0} ;
+ Float_t wP[2] = {1.0, 1.0} ;
+ Float_t dP = 1.032 ;
+
+ AliMixture(2, "Polystyrene$", aP, zP, dP, -2, wP) ;
+
+ // --- Aluminium ---
+ AliMaterial(3, "Al$", 26.98, 13., 2.7, 8.9, 999., 0, 0) ;
+ // --- Absorption length is ignored ^
+
+ // 25-aug-04 by PAI - see PMD/AliPMDv0.cxx for STEEL definition
+ Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
+ Float_t zsteel[4] = { 26.,24.,28.,14. };
+ Float_t wsteel[4] = { .715,.18,.1,.005 };
+ AliMixture(4, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
+
+ // DEFINITION OF THE TRACKING MEDIA
+
+ // for EMCAL: idtmed[1599->1698] equivalent to fIdtmed[0->100]
+ Int_t isxfld = gAlice->Field()->Integ() ;
+ Float_t sxmgmx = gAlice->Field()->Max() ;
+
+ // Air -> idtmed[1599]
+ AliMedium(0, "Air$", 0, 0,
+ isxfld, sxmgmx, 10.0, 1.0, 0.1, 0.1, 10.0, 0, 0) ;
+
+ // The Lead -> idtmed[1600]
+
+ AliMedium(1, "Lead$", 1, 0,
+ isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ;
+
+ // The scintillator of the CPV made of Polystyrene scintillator -> idtmed[1601]
+ float deemax = 0.1; // maximum fractional energy loss in one step (0 < DEEMAX â\89¤ 1);i
+ AliMedium(2, "Scintillator$", 2, 1,
+ isxfld, sxmgmx, 10.0, 0.001, deemax, 0.001, 0.001, 0, 0) ;
+
+ // Various Aluminium parts made of Al -> idtmed[1602]
+ AliMedium(3, "Al$", 3, 0,
+ isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.001, 0.001, 0, 0) ;
+
+ // 25-aug-04 by PAI : see PMD/AliPMDv0.cxx for STEEL definition -> idtmed[1603]
+ AliMedium(4, "S steel$", 4, 0,
+ isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.001, 0.001, 0, 0) ;
+
//set constants for Birk's Law implentation
fBirkC0 = 1;
/* History of cvs commits:
*
* $Log$
+ * Revision 1.40 2006/12/05 17:19:26 gustavo
+ * Updated AliEMCAL::Digits2Raw, reads first provisional RCU mapping files to make Raw data with new AliCaloAltroMapping and AliCaloRawStream
+ *
*
*/
//_________________________________________________________________________
virtual AliEMCALGeometry * GetGeometry() const
{return AliEMCALGeometry::GetInstance(GetTitle(),"") ; }
virtual void Hits2SDigits();
+ virtual void Init();
virtual Int_t IsVersion(void) const = 0 ;
virtual AliTriggerDetector* CreateTriggerDetector() const
static Double_t RawResponseFunction(Double_t *x, Double_t *par) ;
void FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Double_t & energy, Double_t & time) ;
- void Init(void); //initializes some params
+ void InitConstants(); //initializes some params
Int_t fBirkC0; // constants for Birk's Law implementation
Double_t fBirkC1; // constants for Birk's Law implementation
// Arguments: none
// Returns: none
AliDebug(1,"Start v1 HMPID.");
-
- Float_t emin=5.5,emax=8.5; //Photon energy range,[eV]
-
- TF2 *pRaIF=new TF2("RidxRad","sqrt(1+0.554*(1239.84/x)^2/((1239.84/x)^2-5796)-0.0005*(y-20))" ,emin,emax,0,50); //DiMauro mail temp 0-50 degrees C
- TF1 *pWiIF=new TF1("RidxWin","sqrt(1+46.411/(10.666*10.666-x*x)+228.71/(18.125*18.125-x*x))" ,emin,emax); //SiO2 idx TDR p.35
- TF1 *pGaIF=new TF1("RidxGap","1+0.12489e-6/(2.62e-4 - x*x/1239.84/1239.84)" ,emin,emax); //?????? from where
-
- TF1 *pRaAF=new TF1("RabsRad","(x<7.8)*(gaus+gaus(3))+(x>=7.8)*0.0001" ,emin,emax); //fit from DiMauro data 28.10.03
- pRaAF->SetParameters(3.20491e16,-0.00917890,0.742402,3035.37,4.81171,0.626309);
- TF1 *pWiAF=new TF1("RabsWin","(x<8.2)*(818.8638-301.0436*x+36.89642*x*x-1.507555*x*x*x)+(x>=8.2)*0.0001" ,emin,emax); //fit from DiMauro data 28.10.03
- TF1 *pGaAF=new TF1("RabsGap","(x<7.75)*6512.399+(x>=7.75)*3.90743e-2/(-1.655279e-1+6.307392e-2*x-8.011441e-3*x*x+3.392126e-4*x*x*x)",emin,emax); //????? from where
-
- TF1 *pQeF =new TF1("Qe" ,"0+(x>6.07267)*0.344811*(1-exp(-1.29730*(x-6.07267)))" ,emin,emax); //fit from DiMauro data 28.10.03
-
- const Int_t kNbins=30; //number of photon energy points
- Float_t aEckov [kNbins];
- Float_t aAbsRad[kNbins], aAbsWin[kNbins], aAbsGap[kNbins], aAbsMet[kNbins];
- Float_t aIdxRad[kNbins], aIdxWin[kNbins], aIdxGap[kNbins], aIdxMet[kNbins], aIdxPc[kNbins];
- Float_t aQeAll [kNbins], aQePc [kNbins];
-
- for(Int_t i=0;i<kNbins;i++){
- Float_t eV=emin+0.1*i; //Ckov energy in eV
- aEckov [i] =1e-9*eV; //Ckov energy in GeV
- aAbsRad[i]=pRaAF->Eval(eV); aIdxRad[i]=1.292;//pRaIF->Eval(eV,20); //Simulation for 20 degress C
- aAbsWin[i]=pWiAF->Eval(eV); aIdxWin[i]=1.5787;//pWiIF->Eval(eV);
- aAbsGap[i]=pGaAF->Eval(eV); aIdxGap[i]=1.0005;//pGaIF->Eval(eV); aQeAll[i] =1; //QE for all other materials except for PC must be 1.
- aAbsMet[i] =0.0001; aIdxMet[i]=0; //metal ref idx must be 0 in order to reflect photon
- aIdxPc [i]=1; aQePc [i]=pQeF->Eval(eV); //PC ref idx must be 1 in order to apply photon to QE conversion
-
- }
-
+
//data from PDG booklet 2002 density [gr/cm^3] rad len [cm] abs len [cm]
Float_t aAir[4]={12,14,16,36} , zAir[4]={6,7,8,18} , wAir[4]={0.000124,0.755267,0.231781,0.012827} , dAir=0.00120479; Int_t nAir=4;//mixture 0.9999999
Float_t aC6F14[2]={ 12.01 , 18.99} , zC6F14[2]={ 6 , 9} , wC6F14[2]={6 , 14} , dC6F14=1.68 ; Int_t nC6F14=-2;
AliMaterial(++matId,"Cu" ,aCu ,zCu ,dCu ,radCu ,absCu ); AliMedium(kCu ,"Cu" , matId, unsens, itgfld, maxfld, tmaxfd, stemax, deemax, epsil, stmin);
AliMaterial(++matId,"W" ,aW ,zW ,dW ,radW ,absW ); AliMedium(kW ,"W" , matId, unsens, itgfld, maxfld, tmaxfd, stemax, deemax, epsil, stmin);
AliMaterial(++matId,"Al" ,aAl ,zAl ,dAl ,radAl ,absAl ); AliMedium(kAl ,"Al" , matId, unsens, itgfld, maxfld, tmaxfd, stemax, deemax, epsil, stmin);
-
- gMC->SetCerenkov((*fIdtmed)[kC6F14] , kNbins, aEckov, aAbsRad , aQeAll , aIdxRad );
- gMC->SetCerenkov((*fIdtmed)[kSiO2] , kNbins, aEckov, aAbsWin , aQeAll , aIdxWin );
- gMC->SetCerenkov((*fIdtmed)[kCH4] , kNbins, aEckov, aAbsGap , aQeAll , aIdxGap );
- gMC->SetCerenkov((*fIdtmed)[kCu] , kNbins, aEckov, aAbsMet , aQeAll , aIdxMet );
- gMC->SetCerenkov((*fIdtmed)[kW] , kNbins, aEckov, aAbsMet , aQeAll , aIdxMet ); //n=0 means reflect photons
- gMC->SetCerenkov((*fIdtmed)[kCsI] , kNbins, aEckov, aAbsMet , aQePc , aIdxPc ); //n=1 means convert photons
- gMC->SetCerenkov((*fIdtmed)[kAl] , kNbins, aEckov, aAbsMet , aQeAll , aIdxMet );
-
- delete pRaAF;delete pWiAF;delete pGaAF; delete pRaIF; delete pWiIF; delete pGaIF; delete pQeF;
+
AliDebug(1,"Stop v1 HMPID.");
TString ttl=GetTitle(); if(!ttl.Contains("ShowOptics")) return; //user didn't aks to plot optical curves
const Int_t kWinM=26 , kWinC=kBlue;
const Int_t kGapM=25 , kGapC=kGreen;
const Int_t kPcM = 2 , kPcC =kMagenta;
-
+ const Int_t kNbins=30; //number of photon energy points
+
+ Float_t aEckov [kNbins];
+ Float_t aAbsRad[kNbins], aAbsWin[kNbins], aAbsGap[kNbins];
+ Float_t aIdxRad[kNbins], aIdxWin[kNbins], aIdxGap[kNbins];
+ Float_t aQePc [kNbins];
Float_t aTraRad[kNbins],aTraWin[kNbins],aTraGap[kNbins],aTraTot[kNbins];
for(Int_t i=0;i<kNbins;i++){//calculate probability for photon to survive during transversing a volume of material with absorption length
aTraRad[i]=TMath::Exp(-AliHMPIDDigit::SizeRad()/ (aAbsRad[i]+0.0001)); //radiator
fIdPc = gMC->VolId("Rpc");
fIdAmpGap = gMC->VolId("Rgap");
fIdProxGap = gMC->VolId("Rgap");
+ const Int_t kNbins=30; //number of photon energy points
+ Float_t emin=5.5,emax=8.5; //Photon energy range,[eV]
+ Float_t aEckov [kNbins];
+ Float_t aAbsRad[kNbins], aAbsWin[kNbins], aAbsGap[kNbins], aAbsMet[kNbins];
+ Float_t aIdxRad[kNbins], aIdxWin[kNbins], aIdxGap[kNbins], aIdxMet[kNbins], aIdxPc[kNbins];
+ Float_t aQeAll [kNbins], aQePc [kNbins];
+
+ TF2 *pRaIF=new TF2("RidxRad","sqrt(1+0.554*(1239.84/x)^2/((1239.84/x)^2-5796)-0.0005*(y-20))" ,emin,emax,0,50); //DiMauro mail temp 0-50 degrees C
+ TF1 *pWiIF=new TF1("RidxWin","sqrt(1+46.411/(10.666*10.666-x*x)+228.71/(18.125*18.125-x*x))" ,emin,emax); //SiO2 idx TDR p.35
+ TF1 *pGaIF=new TF1("RidxGap","1+0.12489e-6/(2.62e-4 - x*x/1239.84/1239.84)" ,emin,emax); //?????? from where
+
+ TF1 *pRaAF=new TF1("RabsRad","(x<7.8)*(gaus+gaus(3))+(x>=7.8)*0.0001" ,emin,emax); //fit from DiMauro data 28.10.03
+ pRaAF->SetParameters(3.20491e16,-0.00917890,0.742402,3035.37,4.81171,0.626309);
+ TF1 *pWiAF=new TF1("RabsWin","(x<8.2)*(818.8638-301.0436*x+36.89642*x*x-1.507555*x*x*x)+(x>=8.2)*0.0001" ,emin,emax); //fit from DiMauro data 28.10.03
+ TF1 *pGaAF=new TF1("RabsGap","(x<7.75)*6512.399+(x>=7.75)*3.90743e-2/(-1.655279e-1+6.307392e-2*x-8.011441e-3*x*x+3.392126e-4*x*x*x)",emin,emax); //????? from where
+
+ TF1 *pQeF =new TF1("Qe" ,"0+(x>6.07267)*0.344811*(1-exp(-1.29730*(x-6.07267)))" ,emin,emax); //fit from DiMauro data 28.10.03
+
+ for(Int_t i=0;i<kNbins;i++){
+ Float_t eV=emin+0.1*i; //Ckov energy in eV
+ aEckov [i] =1e-9*eV; //Ckov energy in GeV
+ aAbsRad[i]=pRaAF->Eval(eV); aIdxRad[i]=1.292;//pRaIF->Eval(eV,20); //Simulation for 20 degress C
+ aAbsWin[i]=pWiAF->Eval(eV); aIdxWin[i]=1.5787;//pWiIF->Eval(eV);
+ aAbsGap[i]=pGaAF->Eval(eV); aIdxGap[i]=1.0005;//pGaIF->Eval(eV); aQeAll[i] =1; //QE for all other materials except for PC must be 1.
+ aAbsMet[i] =0.0001; aIdxMet[i]=0; //metal ref idx must be 0 in order to reflect photon
+ aIdxPc [i]=1; aQePc [i]=pQeF->Eval(eV); //PC ref idx must be 1 in order to apply photon to QE conversion
+
+ }
+ gMC->SetCerenkov((*fIdtmed)[kC6F14] , kNbins, aEckov, aAbsRad , aQeAll , aIdxRad );
+ gMC->SetCerenkov((*fIdtmed)[kSiO2] , kNbins, aEckov, aAbsWin , aQeAll , aIdxWin );
+ gMC->SetCerenkov((*fIdtmed)[kCH4] , kNbins, aEckov, aAbsGap , aQeAll , aIdxGap );
+ gMC->SetCerenkov((*fIdtmed)[kCu] , kNbins, aEckov, aAbsMet , aQeAll , aIdxMet );
+ gMC->SetCerenkov((*fIdtmed)[kW] , kNbins, aEckov, aAbsMet , aQeAll , aIdxMet ); //n=0 means reflect photons
+ gMC->SetCerenkov((*fIdtmed)[kCsI] , kNbins, aEckov, aAbsMet , aQePc , aIdxPc ); //n=1 means convert photons
+ gMC->SetCerenkov((*fIdtmed)[kAl] , kNbins, aEckov, aAbsMet , aQeAll , aIdxMet );
+ delete pRaAF;delete pWiAF;delete pGaAF; delete pRaIF; delete pWiIF; delete pGaIF; delete pQeF;
+
AliDebug(1,"Stop v1 HMPID.");
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/* History of cvs commits:
*
* $Log$
+ * Revision 1.108 2007/02/01 10:34:47 hristov
+ * Removing warnings on Solaris x86
+ *
* Revision 1.107 2007/01/29 16:29:37 kharlov
* Digits2Raw(): special workaround for digits with time out of range
*
// DEFINITION OF THE TRACKING MEDIA
// for PHOS: idtmed[699->798] equivalent to fIdtmed[0->100]
- Int_t * idtmed = fIdtmed->GetArray() - 699 ;
Int_t isxfld = gAlice->Field()->Integ() ;
Float_t sxmgmx = gAlice->Field()->Max() ;
// Air -> idtmed[798]
AliMedium(99, "Air $", 99, 0,
isxfld, sxmgmx, 10.0, 1.0, 0.1, 0.1, 10.0, 0, 0) ;
+}
+//_____________________________________________________________________________
+void AliPHOS::Init()
+{
+ //
+ // Initialises cuts for PHOS
+ //
// --- Set decent energy thresholds for gamma and electron tracking
+ Int_t * idtmed = fIdtmed->GetArray() - 699 ;
// Tracking threshold for photons and electrons in the scintillator crystal
gMC->Gstpar(idtmed[699], "CUTGAM",0.5E-4) ;
gMC->Gstpar(idtmed[715], "LOSS",2.) ;
gMC->Gstpar(idtmed[715], "DRAY",0.) ;
gMC->Gstpar(idtmed[715], "STRA",2.) ;
-
}
//____________________________________________________________________________
/* History of cvs commits:
*
* $Log$
+ * Revision 1.70 2007/01/17 17:28:56 kharlov
+ * Extract ALTRO sample generation to a separate class AliPHOSPulseGenerator
+ *
* Revision 1.69 2006/11/14 17:11:15 hristov
* Removing inheritances from TAttLine, TAttMarker and AliRndm in AliModule. The copy constructor and assignment operators are moved to the private part of the class and not implemented. The corresponding changes are propagated to the detectors
*
virtual void Hits2SDigits();
virtual Int_t IsVersion(void) const = 0 ;
-
+ virtual void Init();
virtual AliTriggerDetector* CreateTriggerDetector() const
{ return new AliPHOSTrigger(); }
virtual void BuildGeometry();
virtual void CreateGeometry() {}
virtual void CreateMaterials() {}
+ virtual void Init() {}
virtual Int_t IsVersion() const =0;
virtual void SetPAR(Float_t p1, Float_t p2, Float_t p3, Float_t p4);
virtual void SetIN(Float_t p1, Float_t p2, Float_t p3, Float_t p4, Float_t p5);
// cout << " Inside create materials " << endl;
- Int_t *idtmed = fIdtmed->GetArray()-599;
Int_t isxfld = gAlice->Field()->Integ();
Float_t sxmgmx = gAlice->Field()->Max();
AliMedium(98, "Vacuum $", 98, 0, 0, isxfld, sxmgmx, 1., .1, .10, 10);
AliMedium(99, "Air gaps$", 99, 0, 0, isxfld, sxmgmx, 1., .1, .10, .1);
-
+}
+
+//_____________________________________________________________________________
+void AliPMDv0::Init()
+{
+ //
+ // Initialises PMD detector after it has been built
+ //
+ Int_t i;
+ // kdet=1;
+ //
+ if(AliLog::GetGlobalDebugLevel()>0) {
+ printf("\n%s: ",ClassName());
+ for(i=0;i<35;i++) printf("*");
+ printf(" PMD_INIT ");
+ for(i=0;i<35;i++) printf("*");
+ printf("\n%s: ",ClassName());
+ printf(" PMD simulation package (v0) initialised\n");
+ printf("%s: parameters of pmd\n", ClassName());
+ printf("%s: %10.2f %10.2f %10.2f \
+ %10.2f\n",ClassName(),fgkCellRadius,fgkCellWall,fgkCellDepth,fgkZdist );
+ printf("%s: ",ClassName());
+ for(i=0;i<80;i++) printf("*");
+ printf("\n");
+ }
+ Int_t *idtmed = fIdtmed->GetArray()-599;
+ fMedSens=idtmed[605-1];
// --- Generate explicitly delta rays in the iron, aluminium and lead ---
gMC->Gstpar(idtmed[600], "LOSS", 3.);
gMC->Gstpar(idtmed[600], "DRAY", 1.);
gMC->Gstpar(idtmed[604], "CUTMUO", 1e-5);
}
-//_____________________________________________________________________________
-void AliPMDv0::Init()
-{
- //
- // Initialises PMD detector after it has been built
- //
- Int_t i;
- // kdet=1;
- //
- if(AliLog::GetGlobalDebugLevel()>0) {
- printf("\n%s: ",ClassName());
- for(i=0;i<35;i++) printf("*");
- printf(" PMD_INIT ");
- for(i=0;i<35;i++) printf("*");
- printf("\n%s: ",ClassName());
- printf(" PMD simulation package (v0) initialised\n");
- printf("%s: parameters of pmd\n", ClassName());
- printf("%s: %10.2f %10.2f %10.2f \
- %10.2f\n",ClassName(),fgkCellRadius,fgkCellWall,fgkCellDepth,fgkZdist );
- printf("%s: ",ClassName());
- for(i=0;i<80;i++) printf("*");
- printf("\n");
- }
- Int_t *idtmed = fIdtmed->GetArray()-599;
- fMedSens=idtmed[605-1];
-}
-
//_____________________________________________________________________________
void AliPMDv0::StepManager()
{
//
// cout << " Inside create materials " << endl;
- Int_t *idtmed = fIdtmed->GetArray()-599;
Int_t isxfld = gAlice->Field()->Integ();
Float_t sxmgmx = gAlice->Field()->Max();
AliMedium(98, "Vacuum $", 98, 0, 0, isxfld, sxmgmx, 1., .1, .10, 10);
AliMedium(99, "Air gaps$", 99, 0, 0, isxfld, sxmgmx, 1., .1, .10, .1);
+ AliDebug(1,"Outside create materials");
+
+}
+
+//_____________________________________________________________________________
+void AliPMDv1::Init()
+{
+ //
+ // Initialises PMD detector after it has been built
+ //
+
+ //
+ AliDebug(2,"Inside Init");
+ AliDebug(2,"PMD simulation package (v1) initialised");
+ AliDebug(2,"parameters of pmd");
+ AliDebug(2,Form("%10.2f %10.2f %10.2f %10.2f\n",
+ fgkCellRadius,fgkCellWall,fgkCellDepth,fgkZdist));
+ Int_t *idtmed = fIdtmed->GetArray()-599;
+ fMedSens=idtmed[605-1];
// --- Generate explicitly delta rays in the iron, aluminium and lead ---
gMC->Gstpar(idtmed[600], "LOSS", 3.);
gMC->Gstpar(idtmed[600], "DRAY", 1.);
gMC->Gstpar(idtmed[604], "CUTNEU", 1e-5);
gMC->Gstpar(idtmed[604], "CUTHAD", 1e-5);
gMC->Gstpar(idtmed[604], "CUTMUO", 1e-5);
-
- AliDebug(1,"Outside create materials");
-
-}
-
-//_____________________________________________________________________________
-void AliPMDv1::Init()
-{
- //
- // Initialises PMD detector after it has been built
- //
-
- //
- AliDebug(2,"Inside Init");
- AliDebug(2,"PMD simulation package (v1) initialised");
- AliDebug(2,"parameters of pmd");
- AliDebug(2,Form("%10.2f %10.2f %10.2f %10.2f\n",
- fgkCellRadius,fgkCellWall,fgkCellDepth,fgkZdist));
- Int_t *idtmed = fIdtmed->GetArray()-599;
- fMedSens=idtmed[605-1];
-
}
//_____________________________________________________________________________
Float_t sxmgmx = gAlice->Field()->Max();
// Float_t a,z,d,radl,absl,buf[1];
// Int_t nbuf;
- Int_t *idtmed = fIdtmed->GetArray();
-
// AIR
Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
AliMedium(17, "T0 OpAir$", 22, 0, isxfld, sxmgmx, 10., .1, 1., .003, .003);
AliMedium(18, "T0 OpAirNext$", 23, 0, isxfld, sxmgmx, 10., .1, 1., .003, .003);
AliMedium(19, "OpticalGlassCathode$", 24, 1, isxfld, sxmgmx, 10., .01, .1, .003, .003);
+
+ AliDebugClass(1,": ++++++++++++++Medium set++++++++++");
+
+
+}
+//---------------------------------------------------------------------
+void AliT0v1::DrawDetector()
+{
+//
+// Draw a shaded view of the Forward multiplicity detector version 0
+//
+
+ //Set ALIC mother transparent
+ gMC->Gsatt("ALIC","SEEN",0);
+ //
+ //Set volumes visible
+ // gMC->Gsatt("0STR","SEEN",0);
+ // gMC->Gsatt("0INS","SEEN",0);
+ // gMC->Gsatt("0PMT","SEEN",1);
+ // gMC->Gsatt("0DIV","SEEN",1);
+ //
+ gMC->Gdopt("hide","off");
+ gMC->Gdopt("shad","on");
+ gMC->SetClipBox(".");
+ gMC->SetClipBox("*",0,1000,-1000,1000,-1000,1000);
+ gMC->DefaultRange();
+ gMC->Gdraw("alic",90,0,0,-35,9.5,.6,0.6);
+ //gMC->Gdraw("alic",0,0,0,10,9.5,.8,0.8); //other side view
+ gMC->Gdhead(1111,"T-Zero detector");
+ gMC->Gdopt("hide","off");
+}
-
+//-------------------------------------------------------------------
+void AliT0v1::Init()
+{
+// Initialises version 0 of the Forward Multiplicity Detector
+//
+//Int_t *idtmed = gAlice->Idtmed();
+ AliT0::Init();
+ fIdSens1=gMC->VolId("0REG");
+ Int_t *idtmed = fIdtmed->GetArray();
// Definition Cherenkov parameters
int i;
const Int_t kNbins=31;
gMC->SetCerenkov (idtmed[kOpGlassCathode], kNbins, aPckov, aAbsSiO2,efficAll , rindexSiO2 );
gMC->SetCerenkov (idtmed[kOpAir], kNbins, aPckov,absorAir , efficAll,rindexAir );
gMC->SetCerenkov (idtmed[kOpAirNext], kNbins, aPckov,absorbCathodeNext , efficAll, rindexCathodeNext);
-
- AliDebugClass(1,": ++++++++++++++Medium set++++++++++");
-
-
-}
-//---------------------------------------------------------------------
-void AliT0v1::DrawDetector()
-{
-//
-// Draw a shaded view of the Forward multiplicity detector version 0
-//
-
- //Set ALIC mother transparent
- gMC->Gsatt("ALIC","SEEN",0);
- //
- //Set volumes visible
- // gMC->Gsatt("0STR","SEEN",0);
- // gMC->Gsatt("0INS","SEEN",0);
- // gMC->Gsatt("0PMT","SEEN",1);
- // gMC->Gsatt("0DIV","SEEN",1);
- //
- gMC->Gdopt("hide","off");
- gMC->Gdopt("shad","on");
- gMC->SetClipBox(".");
- gMC->SetClipBox("*",0,1000,-1000,1000,-1000,1000);
- gMC->DefaultRange();
- gMC->Gdraw("alic",90,0,0,-35,9.5,.6,0.6);
- //gMC->Gdraw("alic",0,0,0,10,9.5,.8,0.8); //other side view
- gMC->Gdhead(1111,"T-Zero detector");
- gMC->Gdopt("hide","off");
-}
-
-//-------------------------------------------------------------------
-void AliT0v1::Init()
-{
-// Initialises version 0 of the Forward Multiplicity Detector
-//
-//Int_t *idtmed = gAlice->Idtmed();
- AliT0::Init();
- fIdSens1=gMC->VolId("0REG");
AliDebug(1,Form("%s: *** T0 version 1 initialized ***\n",ClassName()));
Float_t wribber[3] = { 6., 12., 1.};
Float_t denribber = 0.8;
-// Definition Cherenkov parameters
- const Int_t NUMENTRIES = 32;
-
- Float_t ppckov[NUMENTRIES] =
- { 2.034E-9, 2.068E-9, 2.103E-9, 2.139E-9,
- 2.177E-9, 2.216E-9, 2.256E-9, 2.298E-9,
- 2.341E-9, 2.386E-9, 2.433E-9, 2.481E-9,
- 2.532E-9, 2.585E-9, 2.640E-9, 2.697E-9,
- 2.757E-9, 2.820E-9, 2.885E-9, 2.954E-9,
- 3.026E-9, 3.102E-9, 3.181E-9, 3.265E-9,
- 3.353E-9, 3.446E-9, 3.545E-9, 3.649E-9,
- 3.760E-9, 3.877E-9, 4.002E-9, 4.136E-9 };
-
- Float_t rindex_qwarz[NUMENTRIES] =
- { 1.458, 1.458, 1.458, 1.458, 1.458, 1.458, 1.458,
- 1.458, 1.458, 1.458, 1.458, 1.458, 1.458, 1.458,
- 1.458, 1.458, 1.458, 1.458, 1.458, 1.458, 1.458,
- 1.458, 1.458, 1.458, 1.458, 1.458, 1.458, 1.458,
- 1.458, 1.458, 1.458, 1.458 };
-
- Float_t rindex_air[NUMENTRIES] =
- { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
- 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
- 1., 1., 1., 1. };
-
- Float_t effic_all[NUMENTRIES] =
- { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
- 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
- 1., 1., 1., 1. };
-
- Float_t absor_qwarz[NUMENTRIES] =
- { 2000., 2000., 2000., 2000., 2000., 2000., 2000.,
- 2000., 2000., 2000., 2000., 2000., 2000., 2000.,
- 2000., 2000., 2000., 2000., 2000., 2000., 2000.,
- 2000., 2000., 2000., 2000., 2000., 2000., 2000.,
- 2000., 2000., 2000., 2000. };
-
- Float_t absor_air[NUMENTRIES] =
- { 200., 200., 200., 200., 200., 200., 200.,
- 200., 200., 200., 200., 200., 200., 200.,
- 200., 200., 200., 200., 200., 200., 200.,
- 200., 200., 200., 200., 200., 200., 200.,
- 200., 200., 200., 200. };
-
- Int_t *idtmed = fIdtmed->GetArray();
-
AliMaterial (0, "T0 Steel$", 55.850, 26., 7.87, 1.76, 999);
AliMaterial (1, "T0 Vacuum$", 1.e-16, 1.e-16, 1.e-16, 1.e16, 999);
AliMedium (8, "Steel$", 0, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
AliMedium (9, "Ribber $", 7, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
AliMedium(11, "Brass $", 6, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
-
- gMC->SetCerenkov (idtmed[6], NUMENTRIES, ppckov, absor_qwarz, effic_all, rindex_qwarz);
- gMC->SetCerenkov (idtmed[1], NUMENTRIES, ppckov, absor_air, effic_all, rindex_air);
}
AliT0::Init();
fIdSens1 = gMC->VolId ("0REG");
+// Definition Cherenkov parameters
+ const Int_t NUMENTRIES = 32;
+
+ Float_t ppckov[NUMENTRIES] =
+ { 2.034E-9, 2.068E-9, 2.103E-9, 2.139E-9,
+ 2.177E-9, 2.216E-9, 2.256E-9, 2.298E-9,
+ 2.341E-9, 2.386E-9, 2.433E-9, 2.481E-9,
+ 2.532E-9, 2.585E-9, 2.640E-9, 2.697E-9,
+ 2.757E-9, 2.820E-9, 2.885E-9, 2.954E-9,
+ 3.026E-9, 3.102E-9, 3.181E-9, 3.265E-9,
+ 3.353E-9, 3.446E-9, 3.545E-9, 3.649E-9,
+ 3.760E-9, 3.877E-9, 4.002E-9, 4.136E-9 };
+
+ Float_t rindex_qwarz[NUMENTRIES] =
+ { 1.458, 1.458, 1.458, 1.458, 1.458, 1.458, 1.458,
+ 1.458, 1.458, 1.458, 1.458, 1.458, 1.458, 1.458,
+ 1.458, 1.458, 1.458, 1.458, 1.458, 1.458, 1.458,
+ 1.458, 1.458, 1.458, 1.458, 1.458, 1.458, 1.458,
+ 1.458, 1.458, 1.458, 1.458 };
+
+ Float_t rindex_air[NUMENTRIES] =
+ { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
+ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
+ 1., 1., 1., 1. };
+
+ Float_t effic_all[NUMENTRIES] =
+ { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
+ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
+ 1., 1., 1., 1. };
+
+ Float_t absor_qwarz[NUMENTRIES] =
+ { 2000., 2000., 2000., 2000., 2000., 2000., 2000.,
+ 2000., 2000., 2000., 2000., 2000., 2000., 2000.,
+ 2000., 2000., 2000., 2000., 2000., 2000., 2000.,
+ 2000., 2000., 2000., 2000., 2000., 2000., 2000.,
+ 2000., 2000., 2000., 2000. };
+
+ Float_t absor_air[NUMENTRIES] =
+ { 200., 200., 200., 200., 200., 200., 200.,
+ 200., 200., 200., 200., 200., 200., 200.,
+ 200., 200., 200., 200., 200., 200., 200.,
+ 200., 200., 200., 200., 200., 200., 200.,
+ 200., 200., 200., 200. };
+
+ Int_t *idtmed = fIdtmed->GetArray();
+
+ gMC->SetCerenkov (idtmed[6], NUMENTRIES, ppckov, absor_qwarz, effic_all, rindex_qwarz);
+ gMC->SetCerenkov (idtmed[1], NUMENTRIES, ppckov, absor_air, effic_all, rindex_air);
printf ("*** T0 version 2 initialized ***\n");
}
AliMedium(25,"Serv-Cu" , 5,0,isxfld,sxmgmx
,tmaxfd,stemax,deemax,epsil,stmin);
- // Special tracking options for charged particles for XeCO2
- gMC->Gstpar((* fIdtmed)[9],"DRAY",1.0);
- gMC->Gstpar((* fIdtmed)[9],"STRA",1.0);
-
// Save the density values for the TRD absorbtion
Float_t dmy = 1.39;
fFoilDensity = dmy;
if (fGeometry->IsVersion() != 1) {
AliError("Not a valid geometry");
}
+ // Special tracking options for charged particles for XeCO2
+ gMC->Gstpar((* fIdtmed)[9],"DRAY",1.0);
+ gMC->Gstpar((* fIdtmed)[9],"STRA",1.0);
}
ifield =2;
fieldm = 45.;
- AliMedium(11, "ZVOIM", 11, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
-
+ AliMedium(11, "ZVOIM", 11, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
+}
+
+//_____________________________________________________________________________
+void AliZDCv1::Init()
+{
+ InitTables();
+ Int_t *idtmed = fIdtmed->GetArray();
+ Int_t i;
// Thresholds for showering in the ZDCs
i = 1; //tantalum
gMC->Gstpar(idtmed[i], "CUTGAM", .001);
// fMedSensTDI = idtmed[6]; // Sensitive volume: TDI Cu shield
// fMedSensPI = idtmed[7]; // Sensitive volume: beam pipes
fMedSensGR = idtmed[12]; // Sensitive volume: air into the grooves
-}
-
-//_____________________________________________________________________________
-void AliZDCv1::Init()
-{
- InitTables();
}
//_____________________________________________________________________________
// Create Materials for the Zero Degree Calorimeter
//
- Int_t *idtmed = fIdtmed->GetArray();
-
Float_t dens, ubuf[1], wmat[2], a[2], z[2];
- Int_t i;
// --- Store in UBUF r0 for nuclear radius calculation R=r0*A**1/3
AliMedium(12,"ZAIR", 12, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
//
AliMedium(11,"ZVOIM", 11, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
- AliMedium(13,"ZIRONE",13, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
-
+ AliMedium(13,"ZIRONE",13, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
+}
+
+//_____________________________________________________________________________
+void AliZDCv2::AddAlignableVolumes() const
+{
+ //
+ // Create entries for alignable volumes associating the symbolic volume
+ // name with the corresponding volume path. Needs to be syncronized with
+ // eventual changes in the geometry.
+ //
+ Int_t modnum = 0;
+ TString volpath1 = "ALIC_1/ZDC_1/ZNEU_1";
+ TString volpath2 = "ALIC_1/ZDC_1/ZPRO_1";
+
+ TString symname1="ZDC/NeutronZDC";
+ TString symname2="ZDC/ProtonZDC";
+
+ if(!gGeoManager->SetAlignableEntry(symname1.Data(),volpath1.Data()))
+ AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname1.Data(),volpath1.Data()));
+
+ if(!gGeoManager->SetAlignableEntry(symname2.Data(),volpath2.Data()))
+ AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname2.Data(),volpath2.Data()));
+}
+
+//_____________________________________________________________________________
+void AliZDCv2::Init()
+{
+ InitTables();
+ Int_t i;
+ Int_t *idtmed = fIdtmed->GetArray();
// Thresholds for showering in the ZDCs
i = 1; //tantalum
gMC->Gstpar(idtmed[i], "CUTGAM", .001);
fMedSensZEM = idtmed[5]; // Sensitive volume: ZEM passive material
fMedSensTDI = idtmed[6]; // Sensitive volume: TDI Cu shield
fMedSensPI = idtmed[7]; // Sensitive volume: beam pipes
- fMedSensGR = idtmed[12]; // Sensitive volume: air into the grooves
-}
-
-//_____________________________________________________________________________
-void AliZDCv2::AddAlignableVolumes() const
-{
- //
- // Create entries for alignable volumes associating the symbolic volume
- // name with the corresponding volume path. Needs to be syncronized with
- // eventual changes in the geometry.
- //
- Int_t modnum = 0;
- TString volpath1 = "ALIC_1/ZDC_1/ZNEU_1";
- TString volpath2 = "ALIC_1/ZDC_1/ZPRO_1";
-
- TString symname1="ZDC/NeutronZDC";
- TString symname2="ZDC/ProtonZDC";
-
- if(!gGeoManager->SetAlignableEntry(symname1.Data(),volpath1.Data()))
- AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname1.Data(),volpath1.Data()));
-
- if(!gGeoManager->SetAlignableEntry(symname2.Data(),volpath2.Data()))
- AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname2.Data(),volpath2.Data()));
-}
-
-//_____________________________________________________________________________
-void AliZDCv2::Init()
-{
- InitTables();
+ fMedSensGR = idtmed[12]; // Sensitive volume: air into the grooves
}
//_____________________________________________________________________________