X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUON.h;h=c6150b288df5ef2a1d94a82cd69a9fabef80ec65;hb=d54220744f069bbcc51eb544f82a2c410fc9c0d3;hp=6ff188ada33ad5f5ed623ccde3e17c09883d5c59;hpb=2ab0c72500f5baaae8a0a5299ab6566b50c278b4;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUON.h b/MUON/AliMUON.h index 6ff188ada33..c6150b288df 100644 --- a/MUON/AliMUON.h +++ b/MUON/AliMUON.h @@ -4,176 +4,200 @@ * See cxx source for full Copyright notice */ /* $Id$ */ +// Revision of includes 12/01/2009 + +/// \ingroup sim +/// \class AliMUON +/// \brief AliDetector class for MUON subsystem providing +/// simulation data management + -//////////////////////////////////////////////// -// Manager and hits classes for set:MUON // -//////////////////////////////////////////////// #include "AliDetector.h" -// #include "AliMUONTriggerCircuit.h" // cp - -class AliMUONChamber; -class AliMUONLocalTrigger; -class AliMUONGlobalTrigger; -class AliMUONTriggerCircuit; -class AliMUONTriggerDecision; -class AliSegmentation; +#include "AliMUONChamber.h" +#include "AliMUONTrigger.h" + +#include + class AliMUONResponse; -class AliMUONHit; -class AliMUONPadHit; -class AliMUONRawCluster; -class AliMUONClusterFinderVS; -class AliMUONReconstHit; -class TVector; -#include "TObjArray.h" -class TFile; -class TTree; - - -class AliMUON : public AliDetector { - public: +class AliMUONGeometry; +class AliMUONGeometryTransformer; +class AliMUONGeometryBuilder; +class AliMUONRawWriter; +class AliMUONVGeometryBuilder; +class AliMUONDigitMaker; +class AliMUONVHitStore; +class AliMUONCalibrationData; +class AliMUONDigitCalibrator; +class AliMUONRecoParam; + +class AliLoader; + +class TObjArray; + +class AliMUON : public AliDetector +{ + public: AliMUON(); - AliMUON(const char *name, const char *title); - AliMUON(const AliMUON& rMUON); - virtual ~AliMUON(); - virtual void AddHit(Int_t track , Int_t *vol, Float_t *hits); - virtual void AddPadHit(Int_t* clhits); - virtual void AddDigits(Int_t id, Int_t* tracks, Int_t* charges, - Int_t* digits); - virtual void AddRawCluster(Int_t id, const AliMUONRawCluster& clust); - virtual void BuildGeometry(); - void AddGlobalTrigger(Int_t *singlePlus, Int_t *singleMinus, - Int_t *singleUndef, Int_t *pairUnlike, - Int_t *pairLike); - void AddLocalTrigger(Int_t* ltrigger); - Int_t DistancetoPrimitive(Int_t px, Int_t py); - virtual Int_t IsVersion() const {return 0;} - TClonesArray *PadHits() {return fPadHits;} - TClonesArray *LocalTrigger() {return fLocalTrigger;} - TClonesArray *GlobalTrigger() {return fGlobalTrigger;} - virtual void MakeBranch(Option_t *opt=" ", char *file=0); - void SetTreeAddress(); - virtual void ResetHits(); - virtual void ResetDigits(); - virtual void ResetTrigger(); - virtual void ResetRawClusters(); - // Cluster Finding - virtual void FindClusters(Int_t event ,Int_t lastEntry); + AliMUON(const char* name, const char* title); + virtual ~AliMUON(); + + // Geometry + void AddGeometryBuilder(AliMUONVGeometryBuilder* geomBuilder); + void ResetGeometryBuilder(); + + + /// Return geometry builder + AliMUONGeometryBuilder* GetGeometryBuilder() const {return fGeometryBuilder;} + const AliMUONGeometryTransformer* GetGeometryTransformer() const; + /// Return segmentation + + // MUONLoader definition + virtual AliLoader* MakeLoader(const char* topfoldername); //builds standard getter (AliLoader type) + + virtual void SetTreeAddress(); + + /// Set split level for making branches in outfiles + virtual void SetSplitLevel(Int_t SplitLevel) {fSplitLevel=SplitLevel;} + // Digitisation + virtual AliDigitizer* CreateDigitizer(AliDigitizationInput* digInput) const; virtual void SDigits2Digits(); - virtual void Digitise(Int_t nev,Int_t bgrEvent, Option_t *opt1=" ", - Option_t *opt2=" ",Text_t *name=" "); - virtual void SortTracks(Int_t *tracks,Int_t *charges, Int_t ntr); -// Configuration Methods (per station id) -// -// Set Chamber Segmentation Parameters -// id refers to the station and isec to the cathode plane -// Set Z values for all chambers - virtual void SetChambersZ(const Float_t *Z); - virtual void SetChambersZToDefault(void); - virtual void SetPadSize(Int_t id, Int_t isec, Float_t p1, Float_t p2); -// Set Signal Generation Parameters + virtual void Hits2SDigits(); + virtual void Digits2Raw(); + virtual Bool_t Raw2SDigits(AliRawReader* rawReader); + + // Trigger + /// Create trigger + virtual AliTriggerDetector* CreateTriggerDetector() const + { return new AliMUONTrigger(); } + + + // Configuration Methods (per station id) + // + // Set Signal Generation Parameters virtual void SetSigmaIntegration(Int_t id, Float_t p1); virtual void SetChargeSlope(Int_t id, Float_t p1); virtual void SetChargeSpread(Int_t id, Float_t p1, Float_t p2); virtual void SetMaxAdc(Int_t id, Int_t p1); -// Set Segmentation and Response Model - virtual void SetSegmentationModel(Int_t id, Int_t isec, - AliSegmentation *segmentation); - virtual void SetResponseModel(Int_t id, AliMUONResponse *response); - virtual void SetNsec(Int_t id, Int_t nsec); -// Set Reconstruction Model - virtual void SetReconstructionModel(Int_t id, AliMUONClusterFinderVS *reconstruction); -// Set Stepping Parameters + // Set Response Model + virtual void SetResponseModel(Int_t id, const AliMUONResponse& response); + + // Set Stepping Parameters virtual void SetMaxStepGas(Float_t p1); virtual void SetMaxStepAlu(Float_t p1); virtual void SetMaxDestepGas(Float_t p1); virtual void SetMaxDestepAlu(Float_t p1); - virtual void SetAcceptance(Bool_t acc=0, Float_t angmin=2, Float_t angmax=9); -// Response Simulation - virtual void MakePadHits(Float_t xhit,Float_t yhit, Float_t zhit, - Float_t eloss, Float_t tof, Int_t id); -// get Trigger answer - void Trigger(Int_t nev); -// Return reference to Chamber #id - virtual AliMUONChamber& Chamber(Int_t id) - {return *((AliMUONChamber *) (*fChambers)[id]);} -// Return reference to Circuit #id - virtual AliMUONTriggerCircuit& TriggerCircuit(Int_t id) - {return *((AliMUONTriggerCircuit *) (*fTriggerCircuits)[id]);} -// Retrieve pad hits for a given Hit - virtual AliMUONPadHit* FirstPad(AliMUONHit *hit, TClonesArray *padHits); - virtual AliMUONPadHit* NextPad(TClonesArray *padHits); -// Return pointers to digits - TObjArray *Dchambers() {return fDchambers;} - Int_t *Ndch() {return fNdch;} - virtual TClonesArray *DigitsAddress(Int_t id) - {return ((TClonesArray *) (*fDchambers)[id]);} -// Return pointers to reconstructed clusters - TObjArray *RawClusters() {return fRawClusters;} - Int_t *Nrawch() {return fNrawch;} - virtual TClonesArray *RawClustAddress(Int_t id) - {return ((TClonesArray *) (*fRawClusters)[id]);} - - AliMUONRawCluster *RawCluster(Int_t ichamber, Int_t icathod, - Int_t icluster); -// Copy Operator - AliMUON& operator = (const AliMUON& rhs); + + // Get Stepping Parameters + virtual Float_t GetMaxStepGas() const; + virtual Float_t GetMaxStepAlu() const; + virtual Float_t GetMaxDestepGas() const; + virtual Float_t GetMaxDestepAlu() const; - - protected: - Int_t fNCh; // Number of chambers - Int_t fNTrackingCh; // Number of tracking chambers - TObjArray *fChambers; // List of Tracking Chambers - TObjArray *fTriggerCircuits; // List of Trigger Circuits - Int_t fNPadHits; // Number of pad hits - TClonesArray *fPadHits; // List of pad hits - TObjArray *fDchambers; // List of digits - Int_t *fNdch; // [fNCh] Number of digits per chamber - TObjArray *fRawClusters; // List of raw clusters - Int_t *fNrawch; // [fNTrackingCh] Number of raw clusters per chamber - Int_t fNLocalTrigger; // Number of Local Trigger - TClonesArray *fLocalTrigger; // List of Local Trigger - Int_t fNGlobalTrigger; // Number of Global Trigger - TClonesArray *fGlobalTrigger; // List of Global Trigger - -// - Bool_t fAccCut; //Transport acceptance cut - Float_t fAccMin; //Minimum acceptance cut used during transport - Float_t fAccMax; //Minimum acceptance cut used during transport -// - -// Stepping Parameters - Float_t fMaxStepGas; // Maximum step size inside the chamber gas - Float_t fMaxStepAlu; // Maximum step size inside the chamber aluminum - Float_t fMaxDestepGas; // Maximum relative energy loss in gas - Float_t fMaxDestepAlu; // Maximum relative energy loss in aluminum - - - -// Pad Iterator - Int_t fMaxIterPad; // Maximum pad index - Int_t fCurIterPad; // Current pad index -// Background eent for event mixing - Text_t *fFileName; // ! File with background hits - TTree *fTrH1; // Hits Tree for background event - TClonesArray *fHits2; // List of hits for one track only - TClonesArray *fPadHits2; // List of clusters for one track only - - ClassDef(AliMUON,1) // MUON Detector base class -}; -#endif - - - - - - - - - + // Set alignement option + virtual void SetAlign(Bool_t align = true); + virtual void SetAlign(const TString& fileName, Bool_t align = true); + + /// Set flag to inactivate calls to TVirtualMC::GetMC()->SetMaxStep + virtual void SetIsMaxStep(Bool_t isMaxStep) { fIsMaxStep = isMaxStep; } + + /// Set scaler event for trigger + virtual void SetTriggerScalerEvent(Bool_t scaler = true){fTriggerScalerEvent = scaler;} + + /// Set trigger response version + virtual void SetTriggerResponseV1(Int_t trigResV1 = 0) + { fTriggerResponseV1 = trigResV1; } + virtual Int_t GetTriggerResponseV1() const; + /// Set trigger coinc44 + virtual void SetTriggerCoinc44(Int_t trigCoinc44 = 0) + { fTriggerCoinc44 = trigCoinc44; } + virtual Int_t GetTriggerCoinc44() const; + /// Set trigger chamber efficiency by cells + virtual void SetTriggerEffCells(Bool_t trigEffCells = true) + { fTriggerEffCells = trigEffCells; } + virtual Bool_t GetTriggerEffCells() const; + /// Set off generation of noisy digits + virtual void SetDigitizerWithNoise(Int_t digitizerWithNoise, Double_t nsigmas=4.0) + { fDigitizerWithNoise = digitizerWithNoise; fDigitizerNSigmas = nsigmas; } + + virtual Int_t GetDigitizerWithNoise() const; + + virtual Double_t GetDigitizerNSigmas() const { return fDigitizerNSigmas; } + + /// Parametrised tail effect in resolution histogram + virtual void SetTailEffect(Bool_t isTailEffect) { fIsTailEffect=isTailEffect; } + + /// Enable trigger raw2sdigits conversion + virtual void SetConvertTrigger(Bool_t convertTrigger = true) { fConvertTrigger = convertTrigger;} + // Getters + /// Return reference to Chamber \a id + virtual AliMUONChamber& Chamber(Int_t id) + {return *((AliMUONChamber *) (*fChambers)[id]);} + virtual void MakeBranch(Option_t* opt=" "); + virtual void ResetHits(); + + /// Set digit store class name + void SetDigitStoreClassName(const char* classname) { fDigitStoreConcreteClassName = classname; } + /// Return digit store class name + const TString DigitStoreClassName() const { return fDigitStoreConcreteClassName; } + + protected: + /// Not implemented + AliMUON(const AliMUON& rMUON); + /// Not implemented + AliMUON& operator = (const AliMUON& rhs); + const AliMUONGeometry* GetGeometry() const; + + AliMUONRecoParam* GetRecoParam() const; + + Int_t fNCh; ///< Number of chambers + Int_t fNTrackingCh; ///< Number of tracking chambers* + Int_t fSplitLevel; ///< Splitlevel when making branches in outfiles. + TObjArray* fChambers; ///< List of Tracking Chambers + AliMUONGeometryBuilder* fGeometryBuilder; ///< Geometry builder + + // + Bool_t fAccCut; ///< Transport acceptance cut + Float_t fAccMin; ///< Minimum acceptance cut used during transport + Float_t fAccMax; ///< Minimum acceptance cut used during transport + // + // Stepping Parameters + Float_t fMaxStepGas; ///< Maximum step size inside the chamber gas + Float_t fMaxStepAlu; ///< Maximum step size inside the chamber aluminum + Float_t fMaxDestepGas; ///< Maximum relative energy loss in gas + Float_t fMaxDestepAlu; ///< Maximum relative energy loss in aluminum + + // Pad Iterator + Int_t fMaxIterPad; ///< Maximum pad index + Int_t fCurIterPad; ///< Current pad index + + // Options + Bool_t fIsMaxStep; ///< Flag to inactivate calls to TVirtualMC::GetMC()->SetMaxStep + Bool_t fTriggerScalerEvent; ///< Flag to generates scaler event + Int_t fTriggerResponseV1; ///< Flag to select TriggerResponseV1 (for cluster size in MTR) + Int_t fTriggerCoinc44; ///< Flag to select TriggerCoinc44 + Bool_t fTriggerEffCells; ///< Flag to select TriggerEffCells + Int_t fDigitizerWithNoise; ///< Flag to switch on/off generation of noisy digits + Double_t fDigitizerNSigmas; ///< nsigma cut for noise generation + Bool_t fIsTailEffect; ///< Switch to turn on/off the tail effect + Bool_t fConvertTrigger; ///< Switch to enable trigger raw2sdigit conversion + + AliMUONRawWriter* fRawWriter; //!< Raw data writer + + AliMUONDigitMaker* fDigitMaker; //!< pointer to the digit maker class + AliMUONVHitStore* fHitStore; //!< container of hits + + TString fDigitStoreConcreteClassName; ///< to be able to select what the sdigitizer uses + + AliMUONCalibrationData* fCalibrationData; ///< pointer of calibration data + AliMUONDigitCalibrator* fDigitCalibrator; //!< digit calibrator (for raw2sdigits) + + ClassDef(AliMUON,25) // MUON Detector base class +}; +#endif