]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALEMCGeometry.cxx
adding helper component for the automatic generation of compressed TPC cluster data...
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALEMCGeometry.cxx
index 07bbc8b338a195be01809b3f978ce6f0e8e6abd1..ef7473fafe996bd1efaac33d7b6799ffb0d224db 100644 (file)
 //   EMCAL_COMPLETE (geometry for expected complete detector)
 //      = equivalent to SHISH_77_TRD1_2X2_FINAL_110DEG scTh=0.176 pbTh=0.144
 //          in old notation
+//
+//   EMCAL_FIRSTYEAR - geometry for December 2009 to December 2010 run period
+//                     with four Super Modules
+//  
+//   Adding V1 (EMCAL_FIRSTYEARV1, EMCAL_COMPLETEV1) - geometry from December 2009 ; 
+//                1. Fixed bug for positions of modules inside SM
+//                   (first module has tilt 0.75 degree);
+//                2. Added Al front plate (width 1 cm) and 2 paper sheets per sampling
+//                   layer (additional 0.2 mm) 
+//                   The sizes have updated with last information from production
+//                   drawing (end of October 2010). 
+//                3. COMPLETEV1 contains now only 10 SM for runs from 2011
+//
 //   EMCAL_WSUC (Wayne State test stand)
 //      = no definite equivalent in old notation, was only used by
 //          Aleksei, but kept for testing purposes
@@ -64,7 +77,7 @@ ClassImp(AliEMCALEMCGeometry)
 
 // these initialisations are needed for a singleton
 Bool_t    AliEMCALEMCGeometry::fgInit      = kFALSE;
-const Char_t*   AliEMCALEMCGeometry::fgkDefaultGeometryName = "EMCAL_COMPLETE";
+const Char_t*   AliEMCALEMCGeometry::fgkDefaultGeometryName = "EMCAL_COMPLETEV1";
 
 
 AliEMCALEMCGeometry::AliEMCALEMCGeometry() 
@@ -80,21 +93,26 @@ AliEMCALEMCGeometry::AliEMCALEMCGeometry()
     // 
     fTrd1Angle(0.),f2Trd1Dx2(0.),
     fPhiGapForSM(0.),fKey110DEG(0),fPhiBoundariesOfSM(0), fPhiCentersOfSM(0),fEtaMaxOfTRD1(0),
+    fTrd1AlFrontThick(0.0), fTrd1BondPaperThick(0.),
     fCentersOfCellsEtaDir(0), fCentersOfCellsXDir(0),fCentersOfCellsPhiDir(0),
     fEtaCentersOfCells(0),fPhiCentersOfCells(0),fShishKebabTrd1Modules(0),
-    fILOSS(-1), fIHADR(-1),
+    fParSM(), fILOSS(-1), fIHADR(-1),
     //obsolete member data
-    fAlFrontThick(0.), fGap2Active(0.), fSteelFrontThick(0.), fTrd2AngleY(0.),
+     fGap2Active(0.), fSteelFrontThick(0.), fTrd2AngleY(0.),
     f2Trd2Dy2(0.), fEmptySpace(0.), fTubsR(0.), fTubsTurnAngle(0.)
 { 
   // default ctor only for internal usage (singleton)
   // must be kept public for root persistency purposes, 
   // but should never be called by the outside world    
   fParSM[0]=0; fParSM[1]=0; fParSM[2]=0;
+  fEnvelop[0] = 0; fEnvelop[1] = 0; fEnvelop[2] = 0;
+  for(Int_t i = 0; i < 6; i++) fkAdditionalOpts[i] = "";
+  
   AliDebug(2, "AliEMCALEMCGeometry : default ctor ");
 }
 //______________________________________________________________________
-AliEMCALEMCGeometry::AliEMCALEMCGeometry(const Text_t* name, const Text_t* title) :
+AliEMCALEMCGeometry::AliEMCALEMCGeometry(const Text_t* name, const Text_t* title,
+                                         const Text_t* mcname, const Text_t* mctitle ) :
   TNamed(name,title),
     fGeoName(0),fArrayOpts(0),fNAdditionalOpts(0),fECPbRadThickness(0.),fECScintThick(0.),
     fNECLayers(0),fArm1PhiMin(0.),fArm1PhiMax(0.),fArm1EtaMin(0.),fArm1EtaMax(0.),fIPDistance(0.),
@@ -107,17 +125,18 @@ AliEMCALEMCGeometry::AliEMCALEMCGeometry(const Text_t* name, const Text_t* title
     // 
     fTrd1Angle(0.),f2Trd1Dx2(0.),
     fPhiGapForSM(0.),fKey110DEG(0),fPhiBoundariesOfSM(0), fPhiCentersOfSM(0), fEtaMaxOfTRD1(0),
+    fTrd1AlFrontThick(0.0), fTrd1BondPaperThick(0.),
     fCentersOfCellsEtaDir(0),fCentersOfCellsXDir(0),fCentersOfCellsPhiDir(0),
     fEtaCentersOfCells(0),fPhiCentersOfCells(0),fShishKebabTrd1Modules(0),
-    fILOSS(-1), fIHADR(-1), 
+    fParSM(),fILOSS(-1), fIHADR(-1), 
     //obsolete member data
-    fAlFrontThick(0.), fGap2Active(0.), fSteelFrontThick(0.), fTrd2AngleY(0.),
+    fGap2Active(0.), fSteelFrontThick(0.), fTrd2AngleY(0.),
     f2Trd2Dy2(0.), fEmptySpace(0.), fTubsR(0.), fTubsTurnAngle(0.)
 {
   // ctor only for internal usage (singleton)
-  AliDebug(2, Form("AliEMCALEMCGeometry(%s,%s) ", name,title));
+  AliDebug(2, Form("AliEMCALEMCGeometry(%s,%s,%s,%s) ", name,title,mcname,mctitle));
 
-  Init();
+  Init(mcname,mctitle);
 
   //  CreateListOfTrd1Modules();
 
@@ -174,6 +193,8 @@ AliEMCALEMCGeometry::AliEMCALEMCGeometry(const AliEMCALEMCGeometry& geom)
     fPhiBoundariesOfSM(geom.fPhiBoundariesOfSM),
     fPhiCentersOfSM(geom.fPhiCentersOfSM),
     fEtaMaxOfTRD1(geom.fEtaMaxOfTRD1),
+    fTrd1AlFrontThick(geom.fTrd1AlFrontThick),
+    fTrd1BondPaperThick(geom.fTrd1BondPaperThick),
     fCentersOfCellsEtaDir(geom.fCentersOfCellsEtaDir),
     fCentersOfCellsXDir(geom.fCentersOfCellsXDir),
     fCentersOfCellsPhiDir(geom.fCentersOfCellsPhiDir),
@@ -182,7 +203,6 @@ AliEMCALEMCGeometry::AliEMCALEMCGeometry(const AliEMCALEMCGeometry& geom)
     fShishKebabTrd1Modules(geom.fShishKebabTrd1Modules),
     fILOSS(geom.fILOSS), fIHADR(geom.fIHADR),
     //obsolete member data
-    fAlFrontThick(geom.fAlFrontThick),
     fGap2Active(geom.fGap2Active),
     fSteelFrontThick(geom.fSteelFrontThick),
     fTrd2AngleY(geom.fTrd2AngleY),
@@ -195,6 +215,11 @@ AliEMCALEMCGeometry::AliEMCALEMCGeometry(const AliEMCALEMCGeometry& geom)
   fParSM[0]=geom.fParSM[0]; 
   fParSM[1]=geom.fParSM[1]; 
   fParSM[2]=geom.fParSM[2];
+  fEnvelop[0] = geom.fEnvelop[0]; 
+  fEnvelop[1] = geom.fEnvelop[1]; 
+  fEnvelop[2] = geom.fEnvelop[2];
+  for(Int_t i = 0; i < 6; i++) fkAdditionalOpts[i] = geom.fkAdditionalOpts[i];
+
 }
 
 //______________________________________________________________________
@@ -203,7 +228,7 @@ AliEMCALEMCGeometry::~AliEMCALEMCGeometry(void){
 }
 
 //______________________________________________________________________
-void AliEMCALEMCGeometry::Init(void){
+void AliEMCALEMCGeometry::Init(const Text_t* mcname, const Text_t* mctitle){
   //
   // Initializes the EMCAL parameters based on the name
   // Only Shashlyk geometry is available, but various combinations of
@@ -236,13 +261,15 @@ void AliEMCALEMCGeometry::Init(void){
   if(fGeoName.Contains("WSUC")) fGeoName = "EMCAL_WSUC";
 
   //check that we have a valid geometry name
-  if(!(fGeoName.Contains("EMCAL_PDC06") || fGeoName.Contains("EMCAL_COMPLETE") || fGeoName.Contains("EMCAL_WSUC") || fGeoName.Contains("EMCAL_FIRSTYEAR"))) {
+  if(!(fGeoName.Contains("EMCAL_PDC06") || fGeoName.Contains("EMCAL_COMPLETE") || fGeoName.Contains("EMCAL_WSUC") 
+       || fGeoName.Contains("EMCAL_FIRSTYEAR") || fGeoName.Contains("EMCAL_FIRSTYEARV1") || fGeoName.Contains("EMCAL_COMPLETEV1"))) {
     Fatal("Init", "%s is an undefined geometry!", fGeoName.Data()) ; 
   }
 
   // Option to know whether we have the "half" supermodule(s) or not
   fKey110DEG = 0;
   if(fGeoName.Contains("COMPLETE") || fGeoName.Contains("PDC06")) fKey110DEG = 1; // for GetAbsCellId
+  if(fGeoName.Contains("COMPLETEV1"))  fKey110DEG = 0; 
   fShishKebabTrd1Modules = 0;
 
   // JLK 13-Apr-2008
@@ -288,22 +315,49 @@ void AliEMCALEMCGeometry::Init(void){
 
   //modifications to the above for WSUC geometry
   if(fGeoName.Contains("WSUC")){ // 18-may-05 - about common structure
-    fPhiModuleSize = 12.5;     // 20-may-05 - rectangular shape
-    fEtaModuleSize = 11.9;
-    fECScintThick  = fECPbRadThickness = 0.16;// (13-may-05 from V.Petrov)
-    fNumberOfSuperModules = 1; // 27-may-05
-    fShellThickness = 30.;       // should be change 
+    fNumberOfSuperModules = 2;  // 27-may-05; Nov 24,2010 for TB
     fNPhi = fNZ = 4; 
+    fTrd1AlFrontThick   = 1.0;  // one cm
+    // Bond paper - two sheets around Sc tile
+    fTrd1BondPaperThick = 0.01; // 0.01cm = 0.1 mm
+    
+    fPhiModuleSize = 12.0;
+    fEtaModuleSize = fPhiModuleSize;
+    fLateralSteelStrip = 0.015; // 0.015cm  = 0.15mm
+
     CheckAdditionalOptions();
   }
 
   //In 2009-2010 data taking runs only 4 SM, in the upper position.
   if(fGeoName.Contains("FIRSTYEAR")){  
-       fNumberOfSuperModules = 4;      
-       fArm1PhiMax           = 120.0; 
-       CheckAdditionalOptions();       
+    fNumberOfSuperModules = 4; 
+    fArm1PhiMax           = 120.0; 
+    CheckAdditionalOptions();  
   }    
-       
+  
+  if(fGeoName.Contains("FIRSTYEARV1") || fGeoName.Contains("COMPLETEV1") ){
+    // Oct 26,2010 : First module has tilt = 0.75 degree : 
+    // look to AliEMCALShishKebabTrd1Module::DefineFirstModule(key)
+    // New sizes from production drawing, added Al front plate.
+    // The thickness of sampling is change due to existing two sheets of paper.
+    
+    // Will replace fFrontSteelStrip
+    fTrd1AlFrontThick   = 1.0;  // one cm
+    // Bond paper - two sheets around Sc tile
+    fTrd1BondPaperThick = 0.01; // 0.01cm = 0.1 mm
+    
+    fPhiModuleSize = 12.0;
+    fEtaModuleSize = fPhiModuleSize;
+    fLateralSteelStrip = 0.015; // 0.015cm  = 0.15mm
+    
+    if(fGeoName.Contains("COMPLETEV1")){
+      fNumberOfSuperModules = 10;      
+      fArm1PhiMax           = 180.0; 
+    }
+    
+    CheckAdditionalOptions();  
+  }
+
   // constant for transition absid <--> indexes
   fNCellsInModule = fNPHIdiv*fNETAdiv;
   fNCellsInSupMod = fNCellsInModule*fNPhi*fNZ;
@@ -317,7 +371,13 @@ void AliEMCALEMCGeometry::Init(void){
   fEtaTileSize = fEtaModuleSize/double(fNETAdiv) - fLateralSteelStrip; // 13-may-05 
 
   fLongModuleSize = fNECLayers*(fECScintThick + fECPbRadThickness);  
+  if(fGeoName.Contains("V1")){
+    Double_t ws = fECScintThick + fECPbRadThickness + 2.*fTrd1BondPaperThick; // sampling width
+    // Number of Pb tiles = Number of Sc tiles - 1
+    fLongModuleSize = fTrd1AlFrontThick + (ws*fNECLayers - fECPbRadThickness);
+  }
   f2Trd1Dx2 = fEtaModuleSize + 2.*fLongModuleSize*TMath::Tan(fTrd1Angle*TMath::DegToRad()/2.);
+
   if(!fGeoName.Contains("WSUC")) fShellThickness  = TMath::Sqrt(fLongModuleSize*fLongModuleSize + f2Trd1Dx2*f2Trd1Dx2);
 
   //These parameters are used to create the mother volume to hold the supermodules
@@ -354,7 +414,7 @@ void AliEMCALEMCGeometry::Init(void){
   }
 
   //called after setting of scintillator and lead layer parameters
-  DefineSamplingFraction();
+  DefineSamplingFraction(mcname,mctitle);
 
   
   // TRU parameters - Apr 29,08 by PAI. 
@@ -401,6 +461,8 @@ void AliEMCALEMCGeometry::PrintGeometry()
   printf(" fILOSS %i : fIHADR %i \n", fILOSS, fIHADR);
   printf(" fTrd1Angle %7.4f\n", fTrd1Angle);
   printf(" f2Trd1Dx2  %7.4f\n",  f2Trd1Dx2);
+  printf(" fTrd1AlFrontThick   %7.4f \n", fTrd1AlFrontThick);
+  printf(" fTrd1BondPaperThick %5.4f \n", fTrd1BondPaperThick);
   printf("SM dimensions(TRD1) : dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n", 
         fParSM[0],fParSM[1],fParSM[2]);
   printf(" fPhiGapForSM  %7.4f cm (%7.4f <- phi size in degree)\n",  
@@ -475,26 +537,49 @@ void AliEMCALEMCGeometry::CheckAdditionalOptions()
 }
 
 //__________________________________________________________________
-void AliEMCALEMCGeometry::DefineSamplingFraction()
+void AliEMCALEMCGeometry::DefineSamplingFraction(const Text_t* mcname, const Text_t* mctitle)
 {
   // Jun 05,2006
   // Look http://rhic.physics.wayne.edu/~pavlinov/ALICE/SHISHKEBAB/RES/linearityAndResolutionForTRD1.html
   // Keep for compatibilty
   //
+  
+  // Sampling factor for G3
+  fSampling = 10.87; // Default value - Nov 25,2010
   if(fNECLayers == 69) {        // 10% layer reduction
     fSampling = 12.55;
   } else if(fNECLayers == 61) { // 20% layer reduction
     fSampling = 12.80;
   } else if(fNECLayers == 77) {
-    if       (fECScintThick>0.159 && fECScintThick<0.161) { // original sampling fraction, equal layers
+    if(fGeoName.Contains("V1")){
+      fSampling = 10.87; //Adding paper sheets and cover plate; Nov 25,2010
+    } else if   (fECScintThick>0.159 && fECScintThick<0.161) { // original sampling fraction, equal layers
       fSampling = 12.327; // fECScintThick = fECPbRadThickness = 0.160;
     } else if (fECScintThick>0.175 && fECScintThick<0.177) { // 10% Pb thicknes reduction
       fSampling = 10.5; // fECScintThick = 0.176, fECPbRadThickness=0.144;
     } else if(fECScintThick>0.191 && fECScintThick<0.193) { // 20% Pb thicknes reduction
       fSampling = 8.93; // fECScintThick = 0.192, fECPbRadThickness=0.128;
     }
-
   }
+
+  // Default sampling factor for G3, modify it for other transport model
+  TString mcName  = mcname;
+  TString mcTitle = mctitle;
+
+  Float_t samplingFactorTranportModel = 1. ;
+  if     (mcName.Contains("Geant3")) samplingFactorTranportModel = 1.;//0.988 // Do nothing
+  else if(mcName.Contains("Fluka") ) samplingFactorTranportModel = 1.; // To be set
+  else if(mcName.Contains("Geant4")){
+    if(mcTitle.Contains("EMV"))      samplingFactorTranportModel = 1.096; // 0.906, 0.896 (OPT)
+    else                             samplingFactorTranportModel = 0.86; // 1.15 (CHIPS), 1.149 (BERT), 1.147 (BERT_CHIPS) 
+  }      
+  
+  AliDebug(2,Form("MC modeler <%s>, Title <%s>: Sampling %f, model fraction with respect to G3 %f, final sampling %f \n",
+               mcName.Data(),mcTitle.Data(),fSampling,samplingFactorTranportModel,fSampling*samplingFactorTranportModel));
+
+  
+  fSampling*=samplingFactorTranportModel;
+  
 }
 
 //________________________________________________________________________________________________