* See cxx source for full Copyright notice */
/* $Id$ */
+// Revision of includes 07/05/2004
+//
+/// \ingroup sim
+/// \class AliMUONChamber
+/// \brief MUON tracking chamber class
+///
+/// Now only providing DisIntegration function
+
+#include <TObject.h>
+#include <TObjArray.h>
-#include "TObjArray.h"
-#include "AliMUONSegmentation.h"
#include "AliMUONResponse.h"
-class AliMUONClusterFinderVS;
-//class AliMUONResponse ;
-//class AliMUONSegmentation ;
+class AliMUON;
+class AliMUONHit;
+
-class AliMUONChamber:
-public TObject
+class AliMUONChamber : public TObject
{
public:
AliMUONChamber();
AliMUONChamber(Int_t id);
- AliMUONChamber(const AliMUONChamber & rChamber);
virtual ~AliMUONChamber();
-//
-// Get GEANT id of sensitive volume
- virtual Int_t GetGid() {return fGid;}
-// Set GEANT id of sensitive volume
- virtual void SetGid(Int_t id) {fGid=id;}
-//
-// Initialisation
- virtual void Init();
-// Set z-position of chamber
- virtual void SetZ(Float_t Z) {fZ = Z;}
-// Get z-position of chamber
- virtual Float_t Z(){return fZ;}
-// Set inner radius of sensitive volume
- virtual void SetRInner(Float_t rmin) {frMin=rmin;}
-// Set outer radius of sensitive volum
- virtual void SetROuter(Float_t rmax) {frMax=rmax;}
+/// Get chamber Id
+ virtual Int_t GetId() const {return fId;}
-// Return inner radius of sensitive volume
- virtual Float_t RInner() {return frMin;}
-// Return outer radius of sensitive volum
- virtual Float_t ROuter() {return frMax;}
-//
-// Set response model
- virtual void SetResponseModel(AliMUONResponse* thisResponse) {fResponse=thisResponse;}
-//
-// Set segmentation model
- virtual void SetSegmentationModel(Int_t i, AliMUONSegmentation* thisSegmentation) {
- (*fSegmentation)[i-1] = thisSegmentation;
- }
-// Set Cluster reconstruction model
- virtual void SetReconstructionModel(AliMUONClusterFinderVS *thisReconstruction) {
- fReconstruction = thisReconstruction;
- }
-//
-// Get pointer to response model
+
+/// Set response model
+ virtual void SetResponseModel(const AliMUONResponse& thisResponse);
+
+/// Get pointer to response model
virtual AliMUONResponse* &ResponseModel(){return fResponse;}
-//
-// Get reference to segmentation model
- virtual AliMUONSegmentation* SegmentationModel(Int_t isec) {
- return (AliMUONSegmentation *) (*fSegmentation)[isec-1];
- }
- virtual TObjArray* ChamberSegmentation() {return fSegmentation;}
-// Get pointer to cluster reconstruction model
- virtual AliMUONClusterFinderVS* &ReconstructionModel(){return fReconstruction;}
-// Get number of segmentation sectors
- virtual Int_t Nsec() {return fnsec;}
-// Set number of segmented cathodes (1 or 2)
- virtual void SetNsec(Int_t nsec) {fnsec=nsec;}
+
//
// Member function forwarding to the segmentation and response models
//
-// Calculate pulse height from energy loss
+/// Calculate pulse height from energy loss
virtual Float_t IntPH(Float_t eloss) {return fResponse->IntPH(eloss);}
-//
-// Ask segmentation if signal should be generated
- virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z);
-//
-// Initialisation of segmentation for hit
- virtual void SigGenInit(Float_t x, Float_t y, Float_t z);
+
+// Initialisation of charge fluctuation for given hit
+ virtual void ChargeCorrelationInit();
+
// Configuration forwarding
//
-// Define signal distribution region
-// by number of sigmas of the distribution function
+/// Define signal distribution region
+/// by number of sigmas of the distribution function
virtual void SetSigmaIntegration(Float_t p1)
{fResponse->SetSigmaIntegration(p1);}
-// Set the single electron pulse-height (ADCchan/e)
+/// Set the single electron pulse-height (ADCchan/e)
virtual void SetChargeSlope(Float_t p1) {fResponse->SetChargeSlope(p1);}
-// Set width of charge distribution function
+/// Set width of charge distribution function
virtual void SetChargeSpread(Float_t p1, Float_t p2) {fResponse->SetChargeSpread(p1,p2);}
-// Set maximum ADC count value
+/// Set maximum ADC count value
virtual void SetMaxAdc(Int_t p1) {fResponse->SetMaxAdc(p1);}
-// Set Pad size
- virtual void SetPadSize(Int_t isec, Float_t p1, Float_t p2) {
- ((AliMUONSegmentation*) (*fSegmentation)[isec-1])->SetPadSize(p1,p2);
- }
//
-// Cluster formation method (charge disintegration)
- virtual void DisIntegration(Float_t eloss, Float_t tof,
- Float_t xhit, Float_t yhit, Float_t zhit,
- Int_t& x, Float_t newclust[6][500]);
-// Initialize geometry related parameters
- virtual void InitGeo(Float_t z);
-//
- virtual Float_t DGas() {return fdGas;}
- virtual Float_t DAlu() {return fdAlu;}
-// assignment operator
- virtual AliMUONChamber& operator =(const AliMUONChamber& rhs);
-
+/// Set charge correlation
+ virtual void SetChargeCorrel(Float_t correl) {fResponse->SetChargeCorrel(correl);}
+
protected:
- Int_t fId; // chamber number
- Float_t fdGas; // half gaz gap
- Float_t fdAlu; // half Alu width
- Int_t fGid; // GEANT volume if for sensitive volume of this chamber
- Float_t fZ; // Z position (cm)
- Int_t fnsec; // number of semented cathode planes
- Float_t frMin; // innermost sensitive radius
- Float_t frMax; // outermost sensitive radius
+ /// Not implemented
+ AliMUONChamber(const AliMUONChamber & rChamber);
+ /// Not implemented
+ AliMUONChamber& operator =(const AliMUONChamber& rhs);
+
+ Int_t fId; ///< chamber number
+ Float_t fCurrentCorrel; //!< charge correlation for current hit.
+
+ AliMUONResponse *fResponse; ///< pointer to response
+ AliMUON *fMUON; ///< pointer to MUON
- TObjArray *fSegmentation; // pointer to segmentation
- AliMUONClusterFinderVS *fReconstruction; // pointer to reconstruction
- AliMUONResponse *fResponse; // pointer to response
- ClassDef(AliMUONChamber,1) // Muon tracking and trigger chamber class
+ ClassDef(AliMUONChamber,3) // Muon tracking chamber class
};
#endif