#include "AliDetector.h"
#include "AliMC.h"
#include "AliMagF.h"
-#include "AliMFT.h"
#include "AliMFTHit.h"
#include "AliMFTDigit.h"
#include "AliMFTCluster.h"
#include "AliMFTPlane.h"
#include "TString.h"
#include "TObjArray.h"
+#include "AliMFTConstants.h"
//====================================================================================================================================================
// ------- framework part -----------------------------------------------------------------------------------
void CreateMaterials(); // from AliModule invoked from AliMC
- void CreateGeometry(); // from AliModule invoked from AliMC
+ void CreateGeometry(); // from AliModule invoked from AliMC
+ void AddAlignableVolumes();
void StepManager(); // from AliModule invoked from AliMC::Stepping()
void Hits2SDigits();
void Hits2SDigitsLocal(TClonesArray *hits, const TObjArray *pSDig, Int_t track);
void CreateDigits();
void CreateRecPoints();
- TObjArray* GetSDigitsList() const { return fSDigitsPerPlane; } // get sdigits list for all planes
- TClonesArray* GetSDigitsList(Int_t plane) const { return fSDigitsPerPlane ? (TClonesArray*) fSDigitsPerPlane->At(plane):0; } // get sdigits list for a plane
+ TObjArray* GetSDigitsList() const { return fSDigitsPerPlane; } // get sdigits list for all planes
+ TClonesArray* GetSDigitsList(Int_t plane) const { return fSDigitsPerPlane ? (TClonesArray*) fSDigitsPerPlane->At(plane):0; }
- TObjArray* GetDigitsList() const{return fDigitsPerPlane;} // get digits list for all layers
- TClonesArray* GetDigitsList(Int_t plane) const{return fDigitsPerPlane ? (TClonesArray*) fDigitsPerPlane->At(plane):0; } // get digits list for a plane
+ TObjArray* GetDigitsList() const{return fDigitsPerPlane;} // get digits list for all layers
+ TClonesArray* GetDigitsList(Int_t plane) const{return fDigitsPerPlane ? (TClonesArray*) fDigitsPerPlane->At(plane):0; }
- TObjArray* GetRecPointsList() const{return fRecPointsPerPlane;} // get digits list for all layers
- TClonesArray* GetRecPointsList(Int_t plane) const{return fRecPointsPerPlane ? (TClonesArray*) fRecPointsPerPlane->At(plane):0; } // get digits list for a plane
+ TObjArray* GetRecPointsList() const{return fRecPointsPerPlane;} // get cluster list for all layers
+ TClonesArray* GetRecPointsList(Int_t plane) const{return fRecPointsPerPlane ? (TClonesArray*) fRecPointsPerPlane->At(plane):0; }
void ResetSDigits() { if(fSDigitsPerPlane) for(int iPlane=0; iPlane<fNPlanes; iPlane++) ((TClonesArray*) fSDigitsPerPlane ->At(iPlane))->Clear(); } // reset sdigits list
void ResetDigits() { if(fDigitsPerPlane) for(int iPlane=0; iPlane<fNPlanes; iPlane++) ((TClonesArray*) fDigitsPerPlane ->At(iPlane))->Clear(); } // reset digits list
void ResetRecPoints() { if(fRecPointsPerPlane) for(int iPlane=0; iPlane<fNPlanes; iPlane++) ((TClonesArray*) fRecPointsPerPlane->At(iPlane))->Clear(); } // reset recPoints list
- AliDigitizer* CreateDigitizer(AliDigitizationInput *digInp) const { return new AliMFTDigitizer(digInp); } // from AliModule invoked from AliSimulation::RunDigitization()
+ AliDigitizer* CreateDigitizer(AliDigitizationInput *digInp) const { return new AliMFTDigitizer(digInp); }
AliMFTSegmentation* GetSegmentation() const { return fSegmentation; }
- enum EMedia{kAir, kSi, kReadout, kSupport}; // media IDs used in CreateMaterials
+ enum EMedia{kAir, kSi, kReadout, kSupport, kCarbon, kAlu, kWater, kSiO2, kInox}; // media IDs used in CreateMaterials
// Geometry/segmentation creation part
TGeoVolumeAssembly* CreateVol();
Int_t GetNStepForChargeDispersion() { return fNStepForChargeDispersion; }
Double_t GetSingleStepForChargeDispersion() { return fSingleStepForChargeDispersion; }
- void SetDensitySiOverSupport(Double_t density) { fDensitySiOverSupport = density; }
+ void SetDensitySupportOverSi(Double_t density) { if (density>1e-6) fDensitySupportOverSi=density; else fDensitySupportOverSi=1e-6; }
+ //--------- for underlying and pile-up events --------------------
+
+ void SetFileNameForUnderlyingEvent(TString fileName) { if (fileName.EndsWith("MFT.RecPoints.root")) fFileNameForUnderyingEvent += fileName; }
+ void SetFileNameForPileUpEvents(TString fileName) { if (fileName.EndsWith("MFT.RecPoints.root")) fFileNameForPileUpEvents += fileName; }
+
+ void SetUnderlyingEventID(Short_t eventID) { fUnderlyingEventID = eventID; }
+ void SetPileUpEventID(Short_t i, Short_t eventID) { if (i>=0 && i<AliMFTConstants::fNMaxPileUpEvents) fPileUpEventsIDs[i] = eventID; }
+
+ const Char_t* GetFileNameForUnderlyingEvent() { return fFileNameForUnderyingEvent; }
+ const Char_t* GetFileNameForPileUpEvents() { return fFileNameForPileUpEvents; }
+ Short_t GetUnderlyingEventID() { return fUnderlyingEventID; }
+ Short_t GetPileUpEventID(Short_t i) { if (i>=0 && i<AliMFTConstants::fNMaxPileUpEvents) return fPileUpEventsIDs[i]; else return -1; }
+
protected:
- static const Int_t fNMaxPlanes = 20; // max number of MFT planes
+ static const Int_t fNMaxPlanes = AliMFTConstants::fNMaxPlanes; // max number of MFT planes
Int_t fVersion;
Double_t fSingleStepForChargeDispersion;
Int_t fNStepForChargeDispersion;
- Double_t fDensitySiOverSupport;
+ Double_t fDensitySupportOverSi;
+
+ TString fFileNameForUnderyingEvent, fFileNameForPileUpEvents;
+ Short_t fNPileUpEvents, fUnderlyingEventID, fPileUpEventsIDs[AliMFTConstants::fNMaxPileUpEvents];
private:
AliMFT (const AliMFT& mft); // dummy copy constructor
AliMFT &operator=(const AliMFT& mft); // dummy assignment operator
- ClassDef(AliMFT,1)
+ ClassDef(AliMFT,2)
};