--- /dev/null
+/**************************************************************************
+ * 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. *
+ **************************************************************************/
+
+/*
+ $Log$
+*/
+
+//_________________________________________________________________________
+// Geometry class for PHOS : PPSD (PHOS Preshower Detector)
+//
+//*-- Author : Yves Schutz (SUBATECH)
+// Modified : Yuri Kharlov (IHEP, Protvino) 15 September 2000
+//
+// --- ROOT system ---
+
+// --- Standard library ---
+
+#include <iostream.h>
+
+// --- AliRoot header files ---
+
+#include "AliPPSDGeometry.h"
+
+ClassImp(AliPPSDGeometry) ;
+
+//____________________________________________________________________________
+AliPPSDGeometry::AliPPSDGeometry()
+{
+
+ // Initializes the PPSD parameters
+
+ fAnodeThickness = 0.0009 ;
+ fAvalancheGap = 0.01 ;
+ fCathodeThickness = 0.0009 ;
+ fCompositeThickness = 0.3 ;
+ fConversionGap = 0.6 ;
+ fLeadConverterThickness = 0.56 ;
+ fLeadToMicro2Gap = 0.1 ;
+ fLidThickness = 0.2 ;
+ fMicro1ToLeadGap = 0.1 ;
+ fMicromegasWallThickness = 0.6 ;
+ fNumberOfModulesPhi = 4 ;
+ fNumberOfModulesZ = 4 ;
+ fNumberOfPadsPhi = 24 ;
+ fNumberOfPadsZ = 24 ;
+ fPCThickness = 0.1 ;
+ fPhiDisplacement = 0.8 ;
+ fZDisplacement = 0.8 ;
+
+ fMicromegas1Thickness = fLidThickness + 2 * fCompositeThickness + fCathodeThickness
+ + fPCThickness + fAnodeThickness + fConversionGap + fAvalancheGap ;
+ fMicromegas2Thickness = fMicromegas1Thickness ;
+
+ fPPSDModuleSize[0] = 38.0 ;
+ fPPSDModuleSize[1] = fMicromegas1Thickness ;
+ fPPSDModuleSize[2] = 38.0 ;
+
+ fPPSDBoxSize[0] = fNumberOfModulesPhi * fPPSDModuleSize[0] + 2 * fPhiDisplacement ;
+ fPPSDBoxSize[1] = fMicromegas2Thickness + fMicromegas2Thickness
+ + fLeadConverterThickness + fMicro1ToLeadGap + fLeadToMicro2Gap ;
+ fPPSDBoxSize[2] = fNumberOfModulesZ * fPPSDModuleSize[2] + 2 * fZDisplacement ;
+
+}
+
+//____________________________________________________________________________
--- /dev/null
+#ifndef ALIPPSDGEOMETRY_H
+#define ALIPPSDGEOMETRY_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+//_________________________________________________________________________
+// Geometry derived class for PHOS:PPSD (PHOS Preshower Detector)
+//
+//*-- Author : Yves Schutz
+// Modified: Yuri Kharlov (IHEP, Protvino)
+// 14 September 2000
+
+#include <assert.h>
+
+#include "AliCPVBaseGeometry.h"
+
+class AliPPSDGeometry : public AliCPVBaseGeometry {
+
+public:
+
+ AliPPSDGeometry();
+ virtual ~AliPPSDGeometry(void) {};
+
+ // PPSD functions
+
+ virtual Float_t GetAnodeThickness(void) { return fAnodeThickness ; }
+ virtual Float_t GetAvalancheGap(void) { return fAvalancheGap ; }
+ virtual Float_t GetCathodeThickness(void) { return fCathodeThickness ; }
+ virtual Float_t GetCompositeThickness(void) { return fCompositeThickness ; }
+ virtual Float_t GetConversionGap(void) { return fConversionGap ; }
+ virtual Float_t GetLeadConverterThickness(void) { return fLeadConverterThickness ; }
+ virtual Float_t GetLeadToMicro2Gap(void) { return fLeadToMicro2Gap ; }
+ virtual Float_t GetLidThickness(void) { return fLidThickness ; }
+ virtual Float_t GetMicromegas1Thickness(void) { return fMicromegas1Thickness ; }
+ virtual Float_t GetMicromegas2Thickness(void) { return fMicromegas2Thickness ; }
+ virtual Float_t GetMicromegasWallThickness(void) { return fMicromegasWallThickness ; }
+ virtual Float_t GetMicro1ToLeadGap(void) { return fMicro1ToLeadGap ; }
+ virtual Int_t GetNumberOfPadsPhi(void) { return fNumberOfPadsPhi ; }
+ virtual Int_t GetNumberOfPadsZ(void) { return fNumberOfPadsZ ; }
+ virtual Int_t GetNumberOfModulesPhi(void) { return fNumberOfModulesPhi ; }
+ virtual Int_t GetNumberOfModulesZ(void) { return fNumberOfModulesZ ; }
+ virtual Float_t GetPCThickness(void) { return fPCThickness ; }
+ virtual Float_t GetPhiDisplacement(void) { return fPhiDisplacement ; }
+ virtual Float_t GetCPVBoxSize(Int_t index) { return fPPSDBoxSize[index] ; }
+ virtual Float_t GetPPSDModuleSize(Int_t index) { return fPPSDModuleSize[index] ; }
+ virtual Float_t GetZDisplacement(void) { return fZDisplacement ; }
+
+ // CPV functions cannot be used for PPSD
+
+ virtual Int_t GetNumberOfCPVLayers(void) { AssertCPV("GetNumberOfCPVLayers"); return 0; }
+ virtual Bool_t IsLeadConverterExists(void) { AssertCPV("IsLeadConverterExists"); return 0; }
+ virtual Float_t GetCPVActiveSize(Int_t index) { AssertCPV("GetCPVActiveSize"); return 0; }
+ virtual Int_t GetNumberOfCPVChipsPhi(void) { AssertCPV("GetNumberOfCPVChipsPhi"); return 0; }
+ virtual Int_t GetNumberOfCPVChipsZ(void) { AssertCPV("GetNumberOfCPVChipsZ"); return 0; }
+ virtual Float_t GetGassiplexChipSize(Int_t index){ AssertCPV("GetGassiplexChipSize"); return 0; }
+ virtual Float_t GetCPVGasThickness(void) { AssertCPV("GetCPVGasThickness"); return 0; }
+ virtual Float_t GetCPVTextoliteThickness(void) { AssertCPV("GetCPVTextoliteThickness"); return 0; }
+ virtual Float_t GetCPVCuNiFoilThickness(void) { AssertCPV("GetCPVCuNiFoilThickness"); return 0; }
+ virtual Float_t GetFTPosition(Int_t index) { AssertCPV("GetFTPosition"); return 0; }
+ virtual Float_t GetCPVFrameSize(Int_t index) { AssertCPV("GetCPVFrameSize"); return 0; }
+ virtual Float_t GetIPtoCPVDistance(void) { AssertCPV("GetIPtoCPVDistance"); return 0; }
+
+private:
+
+ Float_t fAnodeThickness ; // Thickness of the copper layer which makes the anode
+ Float_t fAvalancheGap ; // Thickness of the gas in the avalanche stage
+ Float_t fCathodeThickness ; // Thickeness of composite material ensuring rigidity of cathode
+ Float_t fCompositeThickness ; // Thickeness of composite material ensuring rigidity of anode
+ Float_t fConversionGap ; // Thickness of the gas in the conversion stage
+ Float_t fLeadConverterThickness ; // Thickness of the Lead converter
+ Float_t fLeadToMicro2Gap ; // Thickness of the air gap between the Lead and Micromegas 2
+ Float_t fLidThickness ; // Thickness of top lid
+ Float_t fMicromegas1Thickness ; // Thickness of the first downstream Micromegas
+ Float_t fMicromegas2Thickness ; // Thickness of the second downstream Micromegas
+ Float_t fMicromegasWallThickness ; // Thickness of the Micromegas leak tight box
+ Float_t fMicro1ToLeadGap ; // Thickness of the air gap between Micromegas 1 and the Lead
+ Int_t fNumberOfPadsPhi ; // Number of pads on a micromegas module ;
+ Int_t fNumberOfPadsZ ; // Number of pads on a micromegas module ;
+ Int_t fNumberOfModulesPhi ; // Number of micromegas modules in phi
+ Int_t fNumberOfModulesZ ; // Number of micromegas modules in z
+ Float_t fPCThickness ; // Thickness of the printed circuit board of the anode
+ Float_t fPhiDisplacement ; // Phi displacement of micromegas1 with respect to micromegas2
+ Float_t fPPSDBoxSize[3] ; // Size of large box which contains PPSD; matches PHOS module size
+ Float_t fPPSDModuleSize[3] ; // Size of an individual micromegas module
+ Float_t fZDisplacement ; // Z displacement of micromegas1 with respect to micromegas2
+
+ Float_t fIPtoTopLidDistance ; // Distance from interaction point to top lid of PPSD
+
+ void AssertCPV(char* name) {
+ printf("Function AliPPSDGeometry::%s should not be called for PPSD geometry\n",name);
+ assert(0==1) ;
+ }
+
+ ClassDef(AliPPSDGeometry,1) // PPSD geometry class
+
+} ;
+
+#endif // AliPPSDGEOMETRY_H