// and : Yves Schutz (SUBATECH)
// and : Jennifer Klay (LBL)
// SHASHLYK : Aleksei Pavlinov (WSU)
+// SuperModules -> module(or tower) -> cell
// --- AliRoot header files ---
#include <TMath.h>
#include <TVector3.h>
+#include <TRegexp.h>
+#include <TObjArray.h>
+#include <TObjString.h>
// -- ALICE Headers.
//#include "AliConst.h"
Bool_t AliEMCALGeometry::fgInit = kFALSE;
TString name; // contains name of geometry
+char *additionalOpts[]={"nl=", // number of sampling layers
+ "pbTh=", // cm, Thickness of the Pb
+ "scTh=" // cm, Thickness of the Sc
+};
+int nAdditionalOpts = sizeof(additionalOpts) / sizeof(char*);
+
//______________________________________________________________________
AliEMCALGeometry::~AliEMCALGeometry(void){
// dtor
//______________________________________________________________________
Bool_t AliEMCALGeometry::AreInSameTower(Int_t id1, Int_t id2) const {
- // Find out whether two hits are in the same tower
+ // Find out whether two hits are in the same tower - have to be change
Int_t idmax = TMath::Max(id1, id2) ;
Int_t idmin = TMath::Min(id1, id2) ;
if ( ((idmax - GetNZ() * GetNPhi()) == idmin ) ||
// New geometry: EMCAL_55_25
// 24-aug-04 for shish-kebab
// SHISH_25 or SHISH_62
- // 11-oct-05 - correction for final design
+ // 11-oct-05 - correction for pre final design
+ // Feb 06,2006 - decrease the weight of EMCAL
fgInit = kFALSE; // Assume failed until proven otherwise.
name = GetName();
name.ToUpper();
fPhiGapForSM = 0.; // cm, only for final TRD1 geometry
// geometry
- if (name == "EMCAL_55_25") {
- fECPbRadThickness = 0.5; // cm, Thickness of the Pb radiators
- fECScintThick = 0.5; // cm, Thickness of the scintillator
- fNECLayers = 25; // number of scintillator layers
-
- fSampling = 13.1; // calculated with Birk's law implementation
-
- fAlFrontThick = 3.5; // cm, Thickness of front Al layer
- fGap2Active = 1.0; // cm, Gap between Al and 1st Scintillator
- }
- else if( name == "G56_2_55_19" || name == "EMCAL_5655_21" || name == "G56_2_55_19_104_14"|| name == "G65_2_64_19" || name == "EMCAL_6564_21"){
- Fatal("Init", "%s is an old geometry! Please update your Config file", name.Data()) ;
- }
- else if(name.Contains("SHISH")){
+ if(name.Contains("SHISH")){ // Only shahslyk now
// 7-sep-05; integration issue
fArm1PhiMin = 80.0; // 60 -> 80
fArm1PhiMax = 180.0; // 180 -> 190
fShellThickness = 30.; // should be change
fNPhi = fNZ = 4;
}
+
+ CheckAditionalOptions();
+
// constant for transition absid <--> indexes
fNCellsInTower = fNPHIdiv*fNETAdiv;
fNCellsInSupMod = fNCellsInTower*fNPhi*fNZ;
f2Trd2Dy2 = fPhiModuleSize + 2.*fLongModuleSize*TMath::Tan(fTrd2AngleY*TMath::DegToRad()/2.);
}
}
- }
- else
- Fatal("Init", "%s is an undefined geometry!", name.Data()) ;
-
+ } else Fatal("Init", "%s is an undefined geometry!", name.Data()) ;
fNPhiSuperModule = fNumberOfSuperModules/2;
if(fNPhiSuperModule<1) fNPhiSuperModule = 1;
printf(" fPassiveScintThick %6.4f cm (thickness of front passive Sc tile)\n",
fPassiveScintThick);
}
- printf(" X:Y module size %6.3f , %6.3f cm \n", fPhiModuleSize, fEtaModuleSize);
- printf(" X:Y tile size %6.3f , %6.3f cm \n", fPhiTileSize, fEtaTileSize);
- printf(" fLongModuleSize %6.3f cm \n", fLongModuleSize);
+ printf(" X:Y module size %6.3f , %6.3f cm \n", fPhiModuleSize, fEtaModuleSize);
+ printf(" X:Y tile size %6.3f , %6.3f cm \n", fPhiTileSize, fEtaTileSize);
+ printf(" #of sampling layers %i(fNECLayers) \n", fNECLayers);
+ printf(" fLongModuleSize %6.3f cm \n", fLongModuleSize);
printf(" #supermodule in phi direction %i \n", fNPhiSuperModule );
}
if(name.Contains("TRD")) {
}
}
+//______________________________________________________________________
+
+void AliEMCALGeometry::CheckAditionalOptions()
+{ // Feb 06,2006
+ fArrayOpts = new TObjArray;
+ Int_t nopt = ParseString(name, *fArrayOpts);
+ if(nopt==1) { // no aditional option(s)
+ fArrayOpts->Delete();
+ delete fArrayOpts;
+ fArrayOpts = 0;
+ return;
+ }
+ for(Int_t i=1; i<nopt; i++){
+ TObjString *o = (TObjString*)fArrayOpts->At(i);
+
+ TString addOpt = o->String();
+ Int_t indj=-1;
+ for(Int_t j=0; j<nAdditionalOpts; j++) {
+ TString opt = additionalOpts[j];
+ if(addOpt.Contains(opt,TString::kIgnoreCase)) {
+ indj = j;
+ break;
+ }
+ }
+ if(indj<0) {
+ printf("<E> option |%s| unavailable : ** look to the file AliEMCALGeometry.h **\n",
+ addOpt.Data());
+ assert(0);
+ } else {
+ printf("<I> option |%s| is valid : number %i : |%s|\n",
+ addOpt.Data(), indj, additionalOpts[indj]);
+ if (addOpt.Contains("NL=",TString::kIgnoreCase)) {// number of sampling layers
+ sscanf(addOpt.Data(),"NL=%i", &fNECLayers);
+ printf(" fNECLayers %i (new) \n", fNECLayers);
+ } else if(addOpt.Contains("PBTH=",TString::kIgnoreCase)) {//Thickness of the Pb
+ sscanf(addOpt.Data(),"PBTH=%f", &fECPbRadThickness);
+ } else if(addOpt.Contains("SCTH=",TString::kIgnoreCase)) {//Thickness of the Sc
+ sscanf(addOpt.Data(),"SCTH=%f", &fECScintThick);
+ }
+ }
+ }
+}
+
//______________________________________________________________________
AliEMCALGeometry * AliEMCALGeometry::GetInstance(){
// Returns the pointer of the unique instance
return rv;
}
+// These methods are obsolete but use in AliEMCALRecPoint - keep it now
//______________________________________________________________________
Int_t AliEMCALGeometry::TowerIndex(Int_t ieta,Int_t iphi) const {
// Returns the tower index number from the based on the Z and Phi
}
return 0;
}
+// ==
//
// == Shish-kebab cases ==
// iphi - have to change from 1 to fNPhi*fNPHIdiv
iphi = (iphit-1)*fNPHIdiv + nIphi; // y(module) = y(SM)
}
+// Service routine
+int AliEMCALGeometry::ParseString(const TString &topt, TObjArray &Opt)
+{ // Feb 06, 2006
+ Ssiz_t begin, index, end, end2;
+ begin = index = end = end2 = 0;
+ TRegexp separator("[^ ;,\\t\\s/]+");
+ while ( (begin < topt.Length()) && (index != kNPOS) ) {
+ // loop over given options
+ index = topt.Index(separator,&end,begin);
+ if (index >= 0 && end >= 1) {
+ TString substring(topt(index,end));
+ Opt.Add(new TObjString(substring.Data()));
+ }
+ begin += end+1;
+ }
+ return Opt.GetEntries();
+}
//
//*-- Author: Sahal Yacoob (LBL / UCT)
//*-- and : Yves Schutz (Subatech)
-
-//#include <assert.h>
+//*-- and : Aleksei Pavlinov (WSU) - shashlyk staff
// --- ROOT system ---
class TString ;
-class TObjArray ;
+class TObjArray;
class TVector3 ;
class TParticle ;
// --- AliRoot header files ---
-
#include "AliGeometry.h"
class AliEMCALGeometry : public AliGeometry {
Bool_t IsInEMCAL(Double_t x, Double_t y, Double_t z) const;
// General
Bool_t IsInitialized(void) const { return fgInit ; }
- // Return EMCA geometrical parameters
+ // Return EMCAL geometrical parameters
// geometry
Float_t GetAlFrontThickness() const { return fAlFrontThick;}
Float_t GetArm1PhiMin() const { return fArm1PhiMin ; }
Float_t GetEnvelop(Int_t index) const { return fEnvelop[index] ; }
Float_t GetShellThickness() const { return fShellThickness ; }
Float_t GetZLength() const { return fZLength ; }
- Float_t GetGap2Active() const {return fGap2Active ; }
+ Float_t GetGap2Active() const {return fGap2Active ;}
Float_t GetDeltaEta() const {return (fArm1EtaMax-fArm1EtaMin)/
((Float_t)fNZ);}
Float_t GetDeltaPhi() const {return (fArm1PhiMax-fArm1PhiMin)/
// pseudorapidity and r=sqrt(x*x+y*y).
return r/TMath::Tan(AngleFromEta(eta));
}
+ // These methods are obsolete but use in AliEMCALRecPoint - keep it now
Int_t TowerIndex(Int_t iz,Int_t iphi) const; // returns tower index
// returns tower indexs iz, iphi.
void TowerIndexes(Int_t index,Int_t &iz,Int_t &iphi) const;
void PosInAlice(const Int_t *relid, Float_t &theta, Float_t &phi) const ;
void PosInAlice(Int_t absid, Float_t &theta, Float_t &phi) const ;
Bool_t AbsToRelNumbering(Int_t AbsId, Int_t *relid) const;
+ // --
void SetNZ(Int_t nz) { fNZ= nz ; printf("SetNZ: Number of modules in Z set to %d", fNZ) ; }
void SetNPhi(Int_t nphi) { fNPhi= nphi ; printf("SetNPhi: Number of modules in Phi set to %d", fNPhi) ; }
void SetSampling(Float_t samp) { fSampling = samp; printf("SetSampling: Sampling factor set to %f", fSampling) ; }
Init();
};
void Init(void); // initializes the parameters of EMCAL
+ void CheckAditionalOptions(); //
private:
static AliEMCALGeometry * fgGeom; // pointer to the unique instance of the singleton
static Bool_t fgInit; // Tells if geometry has been succesfully set up.
- Float_t fAlFrontThick; // Thickness of the front Al face of the support box
-
+ TObjArray *fArrayOpts; //! array of geometry options
+
+ Float_t fAlFrontThick; // Thickness of the front Al face of the support box
Float_t fECPbRadThickness; // cm, Thickness of the Pb radiators
Float_t fECScintThick; // cm, Thickness of the scintillators
Int_t fNECLayers; // number of scintillator layers
//
Int_t fNCells; // number of cells in calo
Int_t fNCellsInSupMod; // number cell in super module
- Int_t fNCellsInTower; // number cell in tower
+ Int_t fNCellsInTower; // number cell in tower(or module)
// TRD1 options - 30-sep-04
Float_t fTrd1Angle; // angle in x-z plane (in degree)
Float_t f2Trd1Dx2; // 2*dx2 for TRD1
// Super module as TUBS
Float_t fTubsR; // radius of tubs
Float_t fTubsTurnAngle; // turn angle of tubs in degree
+ // Service routine
+ static int ParseString(const TString &topt, TObjArray &Opt);
- ClassDef(AliEMCALGeometry,9) // EMCAL geometry class
- };
+ ClassDef(AliEMCALGeometry,10) // EMCAL geometry class
+ };
#endif // AliEMCALGEOMETRY_H
fga = (Double_t)fgGeometry->GetPhiModuleSize();
fgb = (Double_t)fgGeometry->GetLongModuleSize();
fgr = (Double_t)(fgGeometry->GetIPDistance() + fgGeometry->GetSteelFrontThickness());
- Print(0);
+ PrintShish(0);
return kTRUE;
}
// service methods
-void AliEMCALShishKebabModule::Print(int pri) const
+void AliEMCALShishKebabModule::PrintShish(int pri) const
{
if(pri>=0) {
- Info("Print()", " a %7.2f | b %7.2f | r %7.2f ", fga, fgb, fgr);
+ Info("PrintShish()", " a %7.2f | b %7.2f | r %7.2f ", fga, fgb, fgr);
printf(" fTheta %f : %5.2f : cos(theta) %f\n", fTheta, GetThetaInDegree(),TMath::Cos(fTheta));
if(pri>0) {
printf("%i %s | theta %f -> %f\n", GetUniqueID(), GetName(), fTheta, fOK.Phi());
Double_t fA; // parameters of line = y = A*z + B
Double_t fB; //
// service methods
- void Print(int pri=1) const; // *MENU*
+ void PrintShish(int pri=1) const; // *MENU*
protected:
// size of SK module
Double_t fTheta; // theta for SK module
fgr = (Double_t)fgGeometry->GetIPDistance();
if(!sn.Contains("TRD2")) fgr += fgGeometry->GetSteelFrontThickness();
fga2 = Double_t(fgGeometry->Get2Trd1Dx2());
- Print(0);
+ PrintShish(0);
return kTRUE;
}
// service methods
-void AliEMCALShishKebabTrd1Module::Print(int pri) const
+void AliEMCALShishKebabTrd1Module::PrintShish(int pri) const
{
if(pri>=0) {
- Info("Print()", "\n a %7.3f:%7.3f | b %7.2f | r %7.2f \n TRD1 angle %7.6f(%5.2f) | tanBetta %7.6f",
+ Info("PrintShish()", "\n a %7.3f:%7.3f | b %7.2f | r %7.2f \n TRD1 angle %7.6f(%5.2f) | tanBetta %7.6f",
fga, fga2, fgb, fgr, fgangle, fgangle*TMath::RadToDeg(), fgtanBetta);
printf(" fTheta %f : %5.2f : cos(theta) %f\n",
fTheta, GetThetaInDegree(),TMath::Cos(fTheta));
Double_t GetTanBetta() {return fgtanBetta;}
Double_t Getb() {return fgb;}
// service methods
- void Print(int pri=1) const; // *MENU*
+ void PrintShish(int pri=1) const; // *MENU*
// geometry info
static AliEMCALGeometry *fgGeometry; //!
//*-- and : Sahal Yacoob (LBL / UCT)
// : Aleksei Pavlinov (WSU) SHASHLYK
-// This Version of AliEMCALv0 reduces the number of volumes placed in XEN1 (the envelope) to less than five hundred
-// The Envelope is Placed in Alice, And the Aluminium layer. Mini envelopes (XU) are then placed in XEN1.
-// Each mini envelope contains 1 scintillator, and 1 lead layer, except the last one which contains just one scintillator layer.
-// At the moment I cannot place the 36 and above layers in the mini envelopes so all layers are still placed in XEN1
-
-
// --- ROOT system ---
#include "TNode.h"
#include "AliEMCALShishKebabModule.h"
#include "AliEMCALShishKebabTrd1Module.h"
-//#include <TGeant3.h> // can not include - I don't know why
// --- Standard library ---
double sampleWidth=0.;
double parEMOD[5], smodPar0=0., smodPar1=0., smodPar2=0.;
-
//______________________________________________________________________
AliEMCALv0::AliEMCALv0(const char *name, const char *title):
AliEMCAL(name,title)
//| | XUNLayer : XPST (ECAL e = GetECScintThick() | |
//| ------------------------------------------------- |
- Float_t etamin,etamax;
- Float_t *dum=0;
-
AliEMCALGeometry * geom = GetGeometry() ;
TString gn(geom->GetName());
gn.ToUpper();
}
if(gn.Contains("SHISH")){
- // Compact and twist
+ // COMPACT, TWIST, TRD2 or TRD1
CreateShishKebabGeometry();
- return;
}
-
- if (AliLog::GetGlobalDebugLevel()>=2) {
- printf("CreateGeometry: XEN1 = %f, %f\n", envelopA[5], envelopA[6]);
- printf("CreateGeometry: XU0 = %f, %f\n", envelopA[5], envelopA[6]);
- }
-
- // Create mini-envelopes which will contain the Tower scintillator-radiator
-
- TString label ;
-
- envelopA[5] = envelopA[5] + geom->GetGap2Active() // we are at the first scintllator
- + geom->GetAlFrontThickness(); // rmin at z1
- envelopA[6] = envelopA[5] ;
-
-
- Int_t i ;
-
- Int_t nLayers = geom->GetNECLayers();
-
- for (i = 0; i < (nLayers-1); i++ ){
- label = "XU" ;
- label += i ;
- Float_t tseg ;
- tseg = geom->GetECScintThick()+geom->GetECPbRadThick(); // thickness of scintillator+Pb in E Cal
- envelopA[5] = envelopA[6] ; // rmin at z1
- envelopA[4] = geom->ZFromEtaR(envelopA[5] + tseg,
- geom->GetArm1EtaMin()); // z coordinate 1
- envelopA[7] = geom->ZFromEtaR(envelopA[5] + tseg,
- geom->GetArm1EtaMax()); // z coordinate 2
- envelopA[6] = envelopA[5] + tseg ; // rmax at z1
- envelopA[8] = envelopA[5] ; // radii are the same.
- envelopA[9] = envelopA[6] ; // radii are the same.
-
- gMC->Gsvolu(label.Data(), "PGON", idtmed[1599], envelopA, 10);// Polygone filled with air
-
- // Position XUi in XEN1
-
- gMC->Gspos(label.Data(), 1, "XEN1", 0.0, 0.0, 0.0, idrotm, "ONLY") ;
-
- if (AliLog::GetGlobalDebugLevel() >= 2)
- printf("CreateGeometry: XU%d = %f, %f\n", i, envelopA[5], envelopA[6]);
-
- } // end i
-
-
- // Create one mini-envelope which will contain the last scintillator XU(nlayers-1) because there is one more scintillator than Pb layer XU(nlayers-1)
-
- label = "XU" ;
- label += i ;
- envelopA[5] = envelopA[6] ; // rmin at z1
- envelopA[4] = geom->ZFromEtaR(envelopA[5] + geom->GetECScintThick(),
- geom->GetArm1EtaMin()); // z coordinate 1
- envelopA[7] = geom->ZFromEtaR(envelopA[5] + geom->GetECScintThick(),
- geom->GetArm1EtaMax()); // z coordinate 2
- envelopA[6] = envelopA[5] + geom->GetECScintThick() ; // rmax at z1
- envelopA[8] = envelopA[5] ; // radii are the same.
- envelopA[9] = envelopA[6] ; // radii are the same.
-
- gMC->Gsvolu(label.Data(), "PGON", idtmed[1599], envelopA, 10); // Polygone filled with air
-
- // Position the last minienvelope in XEN1
-
- gMC->Gspos(label.Data(), 1, "XEN1", 0.0, 0.0, 0.0, idrotm, "ONLY") ;
-
- if(AliLog::GetGlobalDebugLevel() >= 2)
- printf("CreateGeometry: XEN%d = %f, %f\n", i, envelopA[5], envelopA[6]);
-
- // Create the shapes of active material (LEAD/Aluminium/Scintillator)
- // to be placed
- Float_t envelopB[10]; // First Layer of Aluminium
- Float_t envelopC[10]; // Scintillator Layers
- Float_t envelopD[10]; // Lead Layers
-
- envelopC[0] = envelopD[0] = envelopB[0] = envelopA[0] ; // starting position in Phi
- envelopC[1] = envelopD[1] = envelopB[1] = envelopA[1] ; // angular range in phi
- envelopC[2] = envelopD[2] = envelopB[2] = envelopA[2] ; // number of sections in Phi
- envelopC[3] = envelopD[3] = envelopB[3] = envelopA[3] ; // 2 z coordinates
-
- Float_t dist = geom->GetEnvelop(0) + geom->GetAlFrontThickness() + geom->GetGap2Active() ;
- envelopB[4] = geom->ZFromEtaR(dist,
- geom->GetArm1EtaMin()); // z co-ordinate 1
- envelopB[5] = geom->GetEnvelop(0) ; // rmin at z1
- envelopB[6] = envelopB[5] + geom->GetAlFrontThickness();// rmax at z1
- envelopB[7] = geom->ZFromEtaR(dist,
- geom->GetArm1EtaMax()); // z co-ordinate 2
- envelopB[8] = envelopB[5] ; // radii are the same.
- envelopB[9] = envelopB[6] ; // radii are the same.
-
- // Define active volumes completely
-
- gMC->Gsvolu("XALU", "PGON", idtmed[1602], envelopB, 10); // PGON filled with Al
-
- gMC->Gspos("XALU", 1, "XEN1", 0.0, 0.0, 0.0 , idrotm, "ONLY") ; // Position Aluminium Layer in XEN1
-
- gMC->Gsvolu("XPST", "PGON", idtmed[1601], dum, 0); // PGON filled with Scintillator (shape to be defined by GSPOSP)
-
- gMC->Gsvolu("XPBX", "PGON", idtmed[1600], dum, 0); // PGON filled with Lead (shape to be defined by GSPOSP)
-
- //gMC->Gsvolu("XCUX", "PGON", idtmed[1603], dum, 0); // PGON filled with Copper (shape to be defined by GSPOSP)
-
- gMC->Gsdvn("XPHI", "XPST", geom->GetNPhi(), 2); // Divide eta section of scintillators into phi segments.
-
- // Position alternatively scintillator and Lead Layers in XUi.
-
- envelopD[6] = envelopB[6] + geom->GetGap2Active() ;// gap between Al layer and XU0
-
- for (int i = 0; i < nLayers; i++ ){
- label = "XU" ;
- label += i ; // we will place one layer in each mini envelope)
-
- Float_t scthick ; // scintillator thickness
- scthick = geom->GetECScintThick() ;
-
- envelopC[5] = envelopD[6] ; //rmin
- envelopC[6] = envelopC[5] + scthick ; //rmax
- envelopC[8] = envelopC[5] ; //rmin
- envelopC[9] = envelopC[6] ; //rmax
-
- if(AliLog::GetGlobalDebugLevel() >= 2 )
- printf("CreateGeometry: volume = %s, name = XPST thickness = %f deb = %f/%f fin = %f/%f", label.Data(), scthick, envelopC[5], envelopC[8], envelopC[6], envelopC[9]) ;
-
- for (int j =0; j < (geom->GetNEta()) ; j++){
- etamin = geom->GetArm1EtaMin()+
- (j*geom->GetDeltaEta());
- etamax = geom->GetArm1EtaMin()+
- ((j+1)*geom->GetDeltaEta());
- envelopC[4] = geom->ZFromEtaR(envelopC[5],etamin); //z begin
- envelopC[7] = geom->ZFromEtaR(envelopC[5],etamax);// z end
-
- gMC->Gsposp("XPST",1+j+i*(geom->GetNEta()), label.Data(),
- 0.0, 0.0, 0.0 , idrotm, "ONLY", envelopC, 10); // Position and define layer
- } // end for j
-
- Float_t radthick ; // radiator thickness
- TString radname ; // radiator name
- radthick = geom->GetECPbRadThick();
- radname = "XPBX" ;
-
- if ( i < nLayers -1 ) { // except for the last XU which contains only one scintillator layer
-
- envelopD[5] = envelopC[6] ; //rmin
- envelopD[8] = envelopD[5] ; //rmin
- envelopD[6] = envelopD[5] + radthick ; // rmax
- envelopD[9] = envelopD[6] ; //rmax
-
- if(AliLog::GetGlobalDebugLevel() >= 2 )
- printf("CreateGeometry: volume = %s, name = %s thickness = %f deb = %f/%f fin = %f/%f", label.Data(), radname.Data(), radthick, envelopD[5], envelopD[8], envelopD[6], envelopD[9]) ;
-
- for (int j =0; j < (geom->GetNEta()) ; j++){
- etamin = geom->GetArm1EtaMin()+
- (j*geom->GetDeltaEta());
- etamax = geom->GetArm1EtaMin()+
- ((j+1)*geom->GetDeltaEta());
- envelopD[4] = geom->ZFromEtaR(envelopD[5],etamin);//z begin
- envelopD[7] = geom->ZFromEtaR(envelopD[5],etamax);// z end
-
- // Position and Define Layer
-
- gMC->Gsposp(radname.Data(),1+j+i*(geom->GetNEta()), label.Data(),
- 0.0, 0.0, 0.0 , idrotm, "ONLY", envelopD, 10);
- } // end for j
- } // if not last layer
- } // for i
}
//______________________________________________________________________
printf(" idrotm %3i phi %6.1f(%5.3f) xpos %7.2f ypos %7.2f zpos %7.2f \n",
idrotm, phi, phiRad, xpos, ypos, zpos);
nr++;
- } else {
+ } else { // TRD1
TString smName("SMOD"); // 12-oct-05
if(i==5 && gn.Contains("110DEG")) {
smName = "SM10";
//*-- Author: Yves Schutz (SUBATECH)
//*-- and : Sahal Yacoob (LBL / UCT)
// : Aleksei Pavlinov (WSU) SHASHLYK
-//#include <assert.h>
// --- ROOT system ---
TList *GetShishKebabModules() {return fShishKebabModules;}
AliEMCALShishKebabTrd1Module *GetShishKebabModule(const Int_t neta=0);
private:
- TList *fShishKebabModules; //! list of modules for twist geometries
+ TList *fShishKebabModules; //! list of modules
protected:
- ClassDef(AliEMCALv0,3) // Implementation of EMCAL manager class for midrapidity barrel layout between 80 and 180(190) degrees
+ ClassDef(AliEMCALv0,3) // Implementation of EMCAL manager class for midrapidity barrel layout between 80 and 180(190) degrees
};
AliEMCALv2::AliEMCALv2(const char *name, const char *title): AliEMCALv1(name,title) {
// Standard Creator.
- // fGeant3 = (TGeant3*)gMC;
fHits= new TClonesArray("AliEMCALHit",1000);
gAlice->GetMCApp()->AddHitList(fHits);
Double_t AliEMCALv2::GetDepositEnergy(int print)
{ // 23-mar-05 - for testing
- cout<<"AliEMCALv2::GetDepositEnergy() : fHits "<<fHits<<endl;
- if(fHits == 0) return 0.;
if(fHits == 0) return 0.;
AliEMCALHit *hit=0;
Double_t de=0.;
de += hit->GetEnergy();
}
if(print>0) {
+ cout<<"AliEMCALv2::GetDepositEnergy() : fHits "<<fHits<<endl;
printf(" #hits %i de %f \n", fHits->GetEntries(), de);
if(print>1) {
printf(" #primary particles %i\n", gAlice->GetHeader()->GetNprimary());
}
printf(" Good decoding %i : %i <- #cells \n", nGood, fGeometry->GetNCells());
}
-
-/* try to draw hits
- gMC->Gsatt("*","seen",0);
- gMC->Gsatt("scm0","seen",5);
- g3->Gdrawc("alic", 1, 2.0, 12., -125, 0.3, 0.3);
-*/
-//void AliEMCALv2::Gdaxis(float x0, float y0, float z0, float <axsiz) {gdaxis_(x0,y0,z0,axsiz);}
-
-/*
-
-void AliEMCALv2::RemapTrackHitIDs(Int_t *map) {
- // remap track index numbers for primary and parent indices
- // (Called by AliStack::PurifyKine)
- if (Hits()==0)
- return;
- TIter hit_it(Hits());
- Int_t i_hit=0;
- while (AliEMCALHit *hit=dynamic_cast<AliEMCALHit*>(hit_it()) ) {
- if (map[hit->GetIparent()]==-99)
- cout << "Remapping, found -99 for parent id " << hit->GetIparent() << ", " << map[hit->GetIparent()] << ", i_hit " << i_hit << endl;
- hit->SetIparent(map[hit->GetIparent()]);
- if (map[hit->GetPrimary()]==-99)
- cout << "Remapping, found -99 for primary id " << hit->GetPrimary() << ", " << map[hit->GetPrimary()] << ", i_hit " << i_hit << endl;
- hit->SetPrimary(map[hit->GetPrimary()]);
- i_hit++;
- }
-}
-
-void AliEMCALv2::FinishPrimary() {
- fCurPrimary=-1;
- fCurParent=-1;
- fCurTrack=-1;
-}
-*/
// Gives the version number
virtual Int_t IsVersion(void) const {return 2;}
virtual const TString Version(void)const {return TString("v2");}
- // virtual void RemapTrackHitIDs(Int_t *map);
- //virtual void FinishPrimary();
- // virtual void SetTimeCut(Float_t tc){ fTimeCut = tc;}
- // virtual Float_t GetTimeCut(){return fTimeCut;}
- // assignement operator requested by coding convention but not needed
AliEMCALv2 & operator = (const AliEMCALv1 & /*rvalue*/){
Fatal("operator =", "not implemented") ;
return *this;}