// //
///////////////////////////////////////////////////////////////////////////////
+#include "AliCRT.h"
+
#include <TTree.h>
#include "AliRun.h"
#include "AliMagF.h"
-#include "AliCRT.h"
+#include "AliCRTModule.h"
ClassImp(AliCRT)
//_____________________________________________________________________________
AliCRT::AliCRT()
- : AliDetector()
+ : AliDetector(),
+ fModule(0)
{
//
// Default constructor
//_____________________________________________________________________________
AliCRT::AliCRT(const char *name, const char *title)
- : AliDetector(name, title)
+ : AliDetector(name, title),
+ fModule(0)
{
//
// Standard constructor
//_____________________________________________________________________________
AliCRT::AliCRT(const AliCRT& crt)
- : AliDetector(crt)
+ : AliDetector(crt),
+ fModule(crt.fModule)
{
//
// Copy constructor
//
// Default destructor
//
+ if ( fModule ) { delete fModule; fModule = 0; }
}
//_____________________________________________________________________________
#include "AliDetector.h"
+class AliCRTModule;
+
class AliCRT : public AliDetector {
public:
AliCRT();
virtual TString Version() { return TString(""); }
virtual void SetTreeAddress();
+ virtual void SetModule(AliCRTModule* module) {fModule = module;}
+ virtual const AliCRTModule* GetModule() const {return fModule; }
+protected:
+ AliCRTModule* fModule;
private:
ClassDef(AliCRT, 1) // Cosmic Ray Trigger (ACORDE) base class
};
-
-
-// inline TString AliCRT::Version()
#endif // ALICRT_H
#include "AliCRTConstants.h"
-const Float_t AliCRTConstants::fgCageLenght = 477.6;
-const Float_t AliCRTConstants::fgCageWidth = 166.7;
-const Float_t AliCRTConstants::fgCageHeight = 10.7;
-const Float_t AliCRTConstants::fgSinglePaletteLenght = 363.0;
-const Float_t AliCRTConstants::fgSinglePaletteWidth = 19.7;
-const Float_t AliCRTConstants::fgSinglePaletteHeight = 1;
-const Float_t AliCRTConstants::fgActiveAreaGap = 0.7;
-const Float_t AliCRTConstants::fgActiveAreaLenght = AliCRTConstants::fgSinglePaletteLenght;
-const Float_t AliCRTConstants::fgActiveAreaWidth = 156.7;
-const Float_t AliCRTConstants::fgActiveAreaHeight = 2*AliCRTConstants::fgSinglePaletteHeight + AliCRTConstants::fgActiveAreaGap;
-const Float_t AliCRTConstants::fgMagnetWidth = 654.4;
-const Float_t AliCRTConstants::fgMagnetLenght = 1200;
-const Float_t AliCRTConstants::fgMagMinRadius = 790;
-const Float_t AliCRTConstants::fgMagMaxRadius = AliCRTConstants::fgMagMinRadius + 20;
-const Float_t AliCRTConstants::fgDepth =4420; // cm
+AliCRTConstants* AliCRTConstants::fgInstance = 0;
+
+const Float_t AliCRTConstants::fgkCageLenght = 477.6;
+const Float_t AliCRTConstants::fgkCageWidth = 166.7;
+const Float_t AliCRTConstants::fgkCageHeight = 10.7;
+const Float_t AliCRTConstants::fgkSinglePaletteLenght = 363.0;
+const Float_t AliCRTConstants::fgkSinglePaletteWidth = 19.7;
+const Float_t AliCRTConstants::fgkSinglePaletteHeight = 1;
+const Float_t AliCRTConstants::fgkActiveAreaGap = 0.7;
+const Float_t AliCRTConstants::fgkActiveAreaLenght = AliCRTConstants::fgkSinglePaletteLenght;
+const Float_t AliCRTConstants::fgkActiveAreaWidth = 156.7;
+const Float_t AliCRTConstants::fgkActiveAreaHeight = 2*AliCRTConstants::fgkSinglePaletteHeight + AliCRTConstants::fgkActiveAreaGap;
+const Float_t AliCRTConstants::fgkMagnetWidth = 654.4;
+const Float_t AliCRTConstants::fgkMagnetLenght = 1200;
+const Float_t AliCRTConstants::fgkMagMinRadius = 790;
+const Float_t AliCRTConstants::fgkMagMaxRadius = AliCRTConstants::fgkMagMinRadius + 20;
+const Float_t AliCRTConstants::fgkDepth =4420; // cm
ClassImp(AliCRTConstants)
+
+//_____________________________________________________________________________
+AliCRTConstants* AliCRTConstants::Instance()
+{
+ if ( !fgInstance ) {
+ fgInstance = new AliCRTConstants;
+ }
+ return fgInstance;
+}
+
+//_____________________________________________________________________________
+AliCRTConstants::~AliCRTConstants()
+{
+ fgInstance = 0;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::CageLenght() const
+{
+ // Module lenght
+ return fgkCageLenght;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::CageWidth() const
+{
+ // Module width
+ return fgkCageWidth;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::CageHeight() const
+{
+ // Module height
+ return fgkCageHeight;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::SinglePaletteLenght() const
+{
+ // Lenght of the scintillator active zone for a single counter
+ return fgkSinglePaletteLenght;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::SinglePaletteWidth() const
+{
+ // Width of the scintillator active zone for a single counter
+ return fgkSinglePaletteWidth;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::SinglePaletteHeight() const
+{
+ // Height of the scintillator active zone for a single counter
+ return fgkSinglePaletteHeight;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::ActiveAreaGap() const
+{
+ // Gap betwen scintillators
+ return fgkActiveAreaGap;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::ActiveAreaLenght() const
+{
+ // Lenght of the scintillator active zone
+ return fgkActiveAreaLenght;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::ActiveAreaWidth() const
+{
+ // Width of the scintillator active zone
+ return fgkActiveAreaWidth;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::ActiveAreaHeight() const
+{
+ // Height of the scintillator active zone
+ return fgkActiveAreaHeight;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::MagnetWidth() const
+{
+ // Magnet width
+ return fgkMagnetWidth;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::MagnetLenght() const
+{
+ // Magnet lenght
+ return fgkMagnetLenght;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::MagMinRadius() const
+{
+ // Magnet Inner radius
+ return fgkMagMinRadius;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::MagMaxRadius() const
+{
+ // Magnet outer radius
+ return fgkMagMaxRadius;
+}
+
+//_____________________________________________________________________________
+const Float_t AliCRTConstants::Depth() const
+{
+ // Alice IP depth
+ return fgkDepth;
+}
class AliCRTConstants {
public:
- // Module dimentions
- static const Float_t fgCageLenght; // Module lenght
- static const Float_t fgCageWidth; // Module width
- static const Float_t fgCageHeight; // Module height
+ virtual ~AliCRTConstants();
- // The dimensions of the active area of a single palette are:
- static const Float_t fgSinglePaletteLenght; //
- static const Float_t fgSinglePaletteWidth; //
- static const Float_t fgSinglePaletteHeight; //
+ static AliCRTConstants* Instance();
- static const Float_t fgActiveAreaGap; //
+ const Float_t CageLenght() const;
+ const Float_t CageWidth() const;
+ const Float_t CageHeight() const;
- // Aproximate dimensions of the active area of the module.
- static const Float_t fgActiveAreaLenght;
- static const Float_t fgActiveAreaWidth; //
- static const Float_t fgActiveAreaHeight;
+ const Float_t SinglePaletteLenght() const;
+ const Float_t SinglePaletteWidth() const;
+ const Float_t SinglePaletteHeight() const;
- // Magnet
- static const Float_t fgMagnetWidth; //
- static const Float_t fgMagnetLenght; //
- static const Float_t fgMagMinRadius; //
- static const Float_t fgMagMaxRadius; //
+ const Float_t ActiveAreaGap() const;
+ const Float_t ActiveAreaLenght() const;
+ const Float_t ActiveAreaWidth() const;
+ const Float_t ActiveAreaHeight() const;
- // Surface
- static const Float_t fgDepth;
+ const Float_t MagnetWidth() const;
+ const Float_t MagnetLenght() const;
+ const Float_t MagMinRadius() const;
+ const Float_t MagMaxRadius() const;
- AliCRTConstants() {}
- virtual ~AliCRTConstants() {}
+ const Float_t Depth() const;
protected:
+ AliCRTConstants() {}
AliCRTConstants(const AliCRTConstants& ct) {}
AliCRTConstants& operator=(const AliCRTConstants& ct) {return *this;}
+ static AliCRTConstants* fgInstance;
+
+ static const Float_t fgkCageLenght;
+ static const Float_t fgkCageWidth;
+ static const Float_t fgkCageHeight;
+
+ static const Float_t fgkSinglePaletteLenght;
+ static const Float_t fgkSinglePaletteWidth;
+ static const Float_t fgkSinglePaletteHeight;
+
+ static const Float_t fgkActiveAreaGap;
+
+ static const Float_t fgkActiveAreaLenght;
+ static const Float_t fgkActiveAreaWidth;
+ static const Float_t fgkActiveAreaHeight;
+
+ static const Float_t fgkMagnetWidth;
+ static const Float_t fgkMagnetLenght;
+ static const Float_t fgkMagMinRadius;
+ static const Float_t fgkMagMaxRadius;
+
+ static const Float_t fgkDepth;
+
private:
ClassDef(AliCRTConstants, 0) // CRT(ACORDE) global constants
};
/* $Id$ */
+#include "AliCRTdigit.h"
+
#include <TArrayF.h>
#include <TArrayI.h>
-#include "AliCRTdigit.h"
-
ClassImp(AliCRTdigit)
//_____________________________________________________________________________
/* $Id$ */
+#include "AliCRThit.h"
+
#include <TMath.h>
#include "AliConst.h"
-#include "AliCRThit.h"
ClassImp(AliCRThit)
//_____________________________________________________________________________
AliCRTv1::AliCRTv1()
- : AliCRTv0()
+ : AliCRT()
{
//
// Default constructor
//_____________________________________________________________________________
AliCRTv1::AliCRTv1(const char *name, const char *title)
- : AliCRTv0(name, title)
+ : AliCRT(name, title)
{
//
// Standard constructor
//_____________________________________________________________________________
AliCRTv1::AliCRTv1(const AliCRTv1& crt)
- : AliCRTv0(crt)
+ : AliCRT(crt)
{
//
// Copy ctor.
// Molasse.
this->CreateMolasse();
+ AliCRTConstants* crtConstants = AliCRTConstants::Instance();
+
// Create a big volume with air barrel above the magnet
Float_t barrel[10];
Float_t magnetSides = 3.;
barrel[2] = magnetSides;
barrel[3] = planesPerpendicularToZ;
barrel[4] = -700.;
- barrel[5] = AliCRTConstants::fgMagMinRadius;
- barrel[6] = AliCRTConstants::fgMagMinRadius + 2.; // 2 cm width
+ barrel[5] = crtConstants->MagMinRadius();
+ barrel[6] = crtConstants->MagMinRadius() + 2.; // 2 cm width
barrel[7] = -barrel[4];
barrel[8] = barrel[5];
barrel[9] = barrel[6];
//
Float_t box[3];
- box[0] = AliCRTConstants::fgSinglePaletteLenght/4;
- box[1] = AliCRTConstants::fgSinglePaletteHeight/2;
- box[2] = AliCRTConstants::fgSinglePaletteWidth/2;
+ box[0] = crtConstants->SinglePaletteLenght()/4;
+ box[1] = crtConstants->SinglePaletteHeight()/2;
+ box[2] = crtConstants->SinglePaletteWidth()/2;
gMC->Gsvolu("CRT6", "BOX", idtmed[1113], box, 3);
// In the right side side of the magnet
// Now put them into the volume created above
// First above the magnet.
- const Float_t away = (2.*barrel[5]*TMath::Sin(kDegrad*22.5))/4.;
- const Int_t nModules = 10;
+ Float_t away = (2.*barrel[5]*TMath::Sin(kDegrad*22.5))/4.;
+ Int_t nModules = 10;
for (Int_t i = 0; i < nModules; i++) {
Float_t zCoordinate = i*100 - 450;
// In the lef side
// Create a mother volume.
Float_t pbox[3];
- //pbox[0] = AliCRTConstants::fgDepth*TMath::Tan(67.5*kDegrad);
+ //pbox[0] = AliCRTConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
pbox[0] = 12073.;
- pbox[1] = AliCRTConstants::fgDepth;
+ pbox[1] = AliCRTConstants::Instance()->Depth();
pbox[2] = pbox[0];
gMC->Gsvolu("CRT", "BOX", idtmed[1114], pbox, 3);
gMC->Gspos("CRT", 1, "ALIC", 0, 0, 0, 0, "ONLY");
ptube[1] = ptube[0] + 100;
ptube[2] = (5150 - 1166)/2;
gMC->Gsvolu("CSF3", "TUBE", idtmed[1116], ptube, 3);
- gMC->Gspos("CSF3", 1, "CRT", -2100, AliCRTConstants::fgDepth-ptube[2], 0, idrotm[2001], "MANY");
+ gMC->Gspos("CSF3", 1, "CRT", -2100, AliCRTConstants::Instance()->Depth()-ptube[2], 0, idrotm[2001], "MANY");
// PGC2 Access Shaft
ptube[0] = 1100/2;
ptube[1] = ptube[0] + 100;
ptube[2] = (5150 - 690)/2;
gMC->Gsvolu("CSF4", "TUBE", idtmed[1116], ptube, 3);
- gMC->Gspos("CSF4", 1, "CRT", 375, AliCRTConstants::fgDepth-ptube[2], 1900 + 2987.7, idrotm[2001], "MANY");
+ gMC->Gspos("CSF4", 1, "CRT", 375, AliCRTConstants::Instance()->Depth()-ptube[2], 1900 + 2987.7, idrotm[2001], "MANY");
}
//_____________________________________________________________________________
-void AliCRTv1::DrawDetector()
+void AliCRTv1::DrawDetector() const
{
//
// Draw a shaded view of the L3 magnet
// Manager class for detector: CRTv1 //
////////////////////////////////////////////////
-#include "AliCRTv0.h"
+#include "AliCRT.h"
-class AliCRTv1 : public AliCRTv0 {
+class AliCRTv1 : public AliCRT {
public:
AliCRTv1();
AliCRTv1(const char *name, const char *title);
virtual void CreateMaterials();
virtual void CreateGeometry();
virtual void Init();
- virtual void DrawDetector();
+ virtual void DrawDetector() const;
virtual void StepManager();
protected:
//
/////////////////////////////////////////////////////////////////////////////
+#include "AliGenCRT.h"
+
#include <TMCProcess.h>
#include <TPDGCode.h>
#include <TClonesArray.h>
#include "AliRun.h"
#include "AliConst.h"
-#include "AliGenCRT.h"
-
ClassImp(AliGenCRT)
//_____________________________________________________________________________
// Set the origin above the vertex, on the surface.
fOrigin[0] = 0.;
- fOrigin[1] = AliCRTConstants::fgDepth; // At the surface by default.
+ fOrigin[1] = AliCRTConstants::Instance()->Depth(); // At the surface by default.
fOrigin[2] = 0.;
}
// Finaly the origin, with the smearing
Rndm(random,6);
- origin[0] = AliCRTConstants::fgDepth*TMath::Tan(zenith*kDegrad)*
+ origin[0] = AliCRTConstants::Instance()->Depth()*TMath::Tan(zenith*kDegrad)*
TMath::Sin(azimuth*kDegrad);
// + fOsigma[0]* TMath::Cos(2*random[0]*TMath::Pi())*TMath::Sqrt(-2*TMath::Log(random[1]));
- origin[1] = AliCRTConstants::fgDepth;
+ origin[1] = AliCRTConstants::Instance()->Depth();
- origin[2] = AliCRTConstants::fgDepth*TMath::Tan(zenith*kDegrad)*
+ origin[2] = AliCRTConstants::Instance()->Depth()*TMath::Tan(zenith*kDegrad)*
TMath::Cos(azimuth*kDegrad);
// + fOsigma[2]* TMath::Cos(2*random[2]*TMath::Pi())*TMath::Sqrt(-2*TMath::Log(random[3]));;
if ( !fZenithDist ) {
// initialize the momentum dependent coefficients, a(p)
- InitApWeightFactors();
+ this->InitApWeightFactors();
// Define the standard function.
char* zenithalDisributionFunction = "1 + [0]*(1 - cos(x*3.14159265358979312/180))";
}
//____________________________________________________________________________
-const Float_t AliGenCRT::GetZenithAngle(Float_t mom)
+const Float_t AliGenCRT::GetZenithAngle(Float_t mom) const
{
Float_t zenith = 0.;
}
//_____________________________________________________________________________
-const Float_t AliGenCRT::GetMomentum()
+const Float_t AliGenCRT::GetMomentum() const
{
//
//
void SetZenithalDistributionFunction(TF1 *func) {fZenithDist = func;}
void SetMomentumResolution(Float_t res=1.) {fPResolution=res;}
- const Float_t GetMomentum();
- const Float_t GetZenithAngle(Float_t mom);
+ const Float_t GetMomentum() const;
+ const Float_t GetZenithAngle(Float_t mom) const;
// The following methods are for testing pourpuses
TF1* GetMomentumDistibution() const {return fMomentumDist;}