#include <TVector.h>
#include <TVirtualMC.h>
-#include "AliConst.h"
-#include "AliHeader.h"
-#include "AliHitMap.h"
+//#include "AliHeader.h"
#include "AliLoader.h"
#include "AliRunDigitizer.h"
#include "AliMC.h"
#include "AliRun.h"
-#include "AliMUONLoader.h"
#include "AliMUON.h"
#include "AliMUONChamberTrigger.h"
#include "AliMUONConstants.h"
-#include "AliMUONDigit.h"
-#include "AliMUONHit.h"
-#include "AliMUONHitMapA1.h"
-#include "AliMUONMerger.h"
-#include "AliMUONPadHit.h"
+#include "AliMUONHit.h"
#include "AliMUONRawCluster.h"
#include "AliMUONTransientDigit.h"
#include "AliMUONTriggerCircuit.h"
+#include "AliMUONGeometry.h"
+#include "AliMUONGeometryTransformer.h"
+#include "AliMUONGeometryBuilder.h"
+#include "AliMUONCommonGeometryBuilder.h"
#include "AliMUONVGeometryBuilder.h"
+#include "AliMUONGeometrySegmentation.h"
#include "AliMUONDigitizerv2.h"
#include "AliMUONSDigitizerv1.h"
#include "AliMUONRawData.h"
+#include "AliMUONSegmentation.h"
+#include "AliLog.h"
// Defaults parameters for Z positions of chambers
// taken from values for "stations" in AliMUON::AliMUON
fMUONData(0),
fSplitLevel(0),
fChambers(0),
- fGeometryBuilders(0),
fTriggerCircuits(0),
+ fGeometryBuilder(0),
+ fSegmentation(0),
fAccCut(kFALSE),
fAccMin(0.),
fAccMax(0.),
fMaxDestepGas(0.),
fMaxDestepAlu(0.),
fMaxIterPad(0),
- fCurIterPad(0),
- fMerger(0)
+ fCurIterPad(0)
{
// Default Constructor
//
+ AliDebug(1,Form("default (empty) ctor this=%p",this));
fIshunt = 0;
}
fMUONData(0),
fSplitLevel(0),
fChambers(0),
- fGeometryBuilders(0),
fTriggerCircuits(0),
+ fGeometryBuilder(0),
+ fSegmentation(0),
fAccCut(kFALSE),
fAccMin(0.),
fAccMax(0.),
fMaxDestepGas(-1), // Negatives values are ignored by geant3 CONS200
fMaxDestepAlu(-1), // in the calculation of the tracking parameters
fMaxIterPad(0),
- fCurIterPad(0),
- fMerger(0)
+ fCurIterPad(0)
{
-
+ AliDebug(1,Form("ctor this=%p",this));
fIshunt = 0;
SetMarkerColor(kRed);//
+
+ // Geometry builder
+ fGeometryBuilder = new AliMUONGeometryBuilder(this);
+
+ // Common geometry definitions
+ fGeometryBuilder
+ ->AddBuilder(new AliMUONCommonGeometryBuilder(this));
+
//
// Creating List of Chambers
Int_t ch;
fChambers = new TObjArray(AliMUONConstants::NCh());
- fGeometryBuilders = new TObjArray(AliMUONConstants::NCh());
// Loop over stations
for (Int_t st = 0; st < AliMUONConstants::NCh() / 2; st++) {
if (ch < AliMUONConstants::NTrackingCh()) {
fChambers->AddAt(new AliMUONChamber(ch),ch);
} else {
- fChambers->AddAt(new AliMUONChamberTrigger(ch),ch);
+ fChambers->AddAt(new AliMUONChamberTrigger(ch, GetGeometryTransformer()),ch);
}
- AliMUONChamber* chamber = (AliMUONChamber*) fChambers->At(ch);
- //chamber->SetGid(0);
- // Default values for Z of chambers
- chamber->SetZ(AliMUONConstants::DefaultChamberZ(ch));
- //
- chamber->InitGeo(AliMUONConstants::DefaultChamberZ(ch));
- // Set chamber inner and outer radius to default
- chamber->SetRInner(AliMUONConstants::Dmin(st)/2);
- chamber->SetROuter(AliMUONConstants::Dmax(st)/2);
- //
} // Chamber stCH (0, 1) in
} // Station st (0...)
{
// Protected copy constructor
- Fatal("AliMUONMergerModule", "Not implemented.");
+ AliFatal("Not implemented.");
}
//____________________________________________________________________
AliMUON::~AliMUON()
{
// Destructor
- if(fDebug) printf("%s: Calling AliMUON destructor !!!\n",ClassName());
+ AliDebug(1,Form("dtor this=%p",this));
fIshunt = 0;
- if (fMerger) delete fMerger;
- if (fGeometryBuilders){
- fGeometryBuilders->Delete();
- delete fGeometryBuilders;
- }
if (fChambers){
fChambers->Delete();
delete fChambers;
delete fTriggerCircuits;
}
delete fMUONData;
+ delete fGeometryBuilder;
+ delete fSegmentation;
}
//________________________________________________________________________
if (this == &rhs) return *this;
- Fatal("operator=", "Not implemented.");
+ AliFatal("Not implemented.");
return *this;
}
// Adds the geometry builder to the list
// ---
- fGeometryBuilders->Add(geomBuilder);
+ fGeometryBuilder->AddBuilder(geomBuilder);
}
//____________________________________________________________________
{
// Geometry for event display
- for (Int_t i=0; i<7; i++) {
- for (Int_t j=0; j<2; j++) {
- Int_t id=2*i+j+1;
- this->Chamber(id-1).SegmentationModel(1)->Draw("eventdisplay");
- }
- }
+
+// for (Int_t i = 0; i < AliMUONConstants::NCh(); i++)
+// this->Chamber(i).SegmentationModel2(1)->Draw("eventdisplay");// to be check !
+
+
}
+//____________________________________________________________________
+const AliMUONGeometry* AliMUON::GetGeometry() const
+{
+// Return geometry parametrisation
+
+ if ( !fGeometryBuilder) {
+ AliWarningStream() << "GeometryBuilder not defined." << std::endl;
+ return 0;
+ }
+
+ return fGeometryBuilder->GetGeometry();
+}
+
+//____________________________________________________________________
+const AliMUONGeometryTransformer* AliMUON::GetGeometryTransformer() const
+{
+// Return geometry parametrisation
+
+ const AliMUONGeometry* kGeometry = GetGeometry();
+
+ if ( !kGeometry) return 0;
+
+ return kGeometry->GetTransformer();
+}
+
//__________________________________________________________________
void AliMUON::SetTreeAddress()
{
fHits = GetMUONData()->Hits(); // Added by Ivana to use the methods FisrtHit, NextHit of AliDetector
}
-//____________________________________________________________________
-void AliMUON::SetPadSize(Int_t id, Int_t isec, Float_t p1, Float_t p2)
-{
-// Set the pad size for chamber id and cathode isec
- Int_t i=2*(id-1);
- ((AliMUONChamber*) fChambers->At(i)) ->SetPadSize(isec,p1,p2);
- ((AliMUONChamber*) fChambers->At(i+1))->SetPadSize(isec,p1,p2);
-}
-
-//___________________________________________
-void AliMUON::SetChambersZ(const Float_t *Z)
-{
- // Set Z values for all chambers (tracking and trigger)
- // from the array pointed to by "Z"
- for (Int_t ch = 0; ch < AliMUONConstants::NCh(); ch++)
- ((AliMUONChamber*) fChambers->At(ch))->SetZ(Z[ch]);
- return;
-}
-//_________________________________________________________________
-void AliMUON::SetChambersZToDefault()
-{
- // Set Z values for all chambers (tracking and trigger)
- // to default values
- SetChambersZ(AliMUONConstants::DefaultChamberZ());
- return;
-}
//_________________________________________________________________
void AliMUON::SetChargeSlope(Int_t id, Float_t p1)
{
((AliMUONChamber*) fChambers->At(i))->SetMaxAdc(p1);
((AliMUONChamber*) fChambers->At(i+1))->SetMaxAdc(p1);
}
+
//__________________________________________________________________
void AliMUON::SetMaxStepGas(Float_t p1)
{
// Set maximum step size in Alu
fMaxDestepAlu=p1;
}
-//___________________________________________________________________
-void AliMUON::SetAcceptance(Bool_t acc, Float_t angmin, Float_t angmax)
-{
-// Set acceptance cuts
- fAccCut=acc;
- fAccMin=angmin*TMath::Pi()/180;
- fAccMax=angmax*TMath::Pi()/180;
- Int_t ch;
- if (acc) {
- for (Int_t st = 0; st < AliMUONConstants::NCh() / 2; st++) {
- // Loop over 2 chambers in the station
- for (Int_t stCH = 0; stCH < 2; stCH++) {
- ch = 2 * st + stCH;
- // Set chamber inner and outer radius according to acceptance cuts
- Chamber(ch).SetRInner(TMath::Abs(AliMUONConstants::DefaultChamberZ(ch)*TMath::Tan(fAccMin)));
- Chamber(ch).SetROuter(TMath::Abs(AliMUONConstants::DefaultChamberZ(ch)*TMath::Tan(fAccMax)));
- } // chamber loop
- } // station loop
- }
-}
//____________________________________________________________________
Float_t AliMUON::GetMaxStepGas() const
return fMaxDestepAlu;
}
+
//____________________________________________________________________
-void AliMUON::SetSegmentationModel(Int_t id, Int_t isec, AliSegmentation *segmentation)
+ void AliMUON::SetAlign(Bool_t align)
{
-// Set the segmentation for chamber id cathode isec
- ((AliMUONChamber*) fChambers->At(id))->SetSegmentationModel(isec, segmentation);
+ // Sets option for alignement to geometry builder
+
+ fGeometryBuilder->SetAlign(align);
+}
+
+//____________________________________________________________________
+ void AliMUON::SetAlign(const TString& fileName, Bool_t align)
+{
+ // Sets option for alignement to geometry builder
+
+ fGeometryBuilder->SetAlign(fileName, align);
+}
-}
//____________________________________________________________________
void AliMUON::SetResponseModel(Int_t id, AliMUONResponse *response)
{
((AliMUONChamber*) fChambers->At(id))->SetResponseModel(response);
}
//____________________________________________________________________
-void AliMUON::SetNsec(Int_t id, Int_t nsec)
-{
-// Set number of segmented cathods for chamber id
- ((AliMUONChamber*) fChambers->At(id))->SetNsec(nsec);
-}
-//____________________________________________________________________
AliDigitizer* AliMUON::CreateDigitizer(AliRunDigitizer* manager) const
{
return new AliMUONDigitizerv2(manager);
// write TreeD here
- if (!fMerger) {
- if (gAlice->GetDebug()>0) {
- cerr<<"AliMUON::SDigits2Digits: create default AliMUONMerger "<<endl;
- cerr<<" no merging, just digitization of 1 event will be done"<<endl;
- }
- fMerger = new AliMUONMerger();
- }
- fMerger->Init();
- fMerger->Digitise();
char hname[30];
// sprintf(hname,"TreeD%d",fLoader->GetHeader()->GetEvent());
fLoader->TreeD()->Write(hname,TObject::kOverwrite);
AliMUONRawData* rawData;
rawData = new AliMUONRawData(fLoader);
- if (!rawData->WriteRawData()) Info("MUON","pb writting raw data");
+ if (!rawData->Digits2Raw()) AliInfo("pb writting raw data");
delete rawData;
return;
}
//builds standard getter (AliLoader type)
//if detector wants to use castomized getter, it must overload this method
- if (GetDebug())
- Info("MakeLoader",
- "Creating standard getter for detector %s. Top folder is %s.",
- GetName(),topfoldername);
+
+ AliDebug(1,Form("Creating standard getter for detector %s. Top folder is %s.",
+ GetName(),topfoldername));
fLoader = new AliLoader(GetName(),topfoldername);
fMUONData = new AliMUONData(fLoader,GetName(),GetName());
fMUONData->SetSplitLevel(fSplitLevel);
return fLoader;
}
//_______________________________________________________________________
-AliMUONPadHit* AliMUON::FirstPad(AliMUONHit* hit, TClonesArray *clusters)
-{
-// to be removed
- // Initialise the pad iterator
- // Return the address of the first padhit for hit
- TClonesArray *theClusters = clusters;
- Int_t nclust = theClusters->GetEntriesFast();
- if (nclust && hit->PHlast() > 0) {
- fMaxIterPad=hit->PHlast();
- fCurIterPad=hit->PHfirst();
- return (AliMUONPadHit*) clusters->UncheckedAt(fCurIterPad-1);
- } else {
- return 0;
- }
-}
-//_______________________________________________________________________
-AliMUONPadHit* AliMUON::NextPad(TClonesArray *clusters)
-{
- // To be removed
-// Get next pad (in iterator)
-//
- fCurIterPad++;
- if (fCurIterPad <= fMaxIterPad) {
- return (AliMUONPadHit*) clusters->UncheckedAt(fCurIterPad-1);
- } else {
- return 0;
- }
-}
-//_______________________________________________________________________
AliMUONRawCluster *AliMUON::RawCluster(Int_t ichamber, Int_t icathod, Int_t icluster)
{
return mRaw;
}
//________________________________________________________________________
-void AliMUON::SetMerger(AliMUONMerger* merger)
-{
-// Set pointer to merger
- fMerger = merger;
-}
-//________________________________________________________________________
-AliMUONMerger* AliMUON::Merger()
-{
-// Return pointer to merger
- return fMerger;
-}
-/* PH Commented out waiting for correct implementation
-//________________________________________________________________________
-void AliMUON::RemapTrackHitIDs(Int_t* map)
-{
-// Remaps the track numbers in the hits arrays, so that they correspond
-// to the entry indices in the Kine tree.
-// The correspondance is not direct. To get the real index into the Kine tree
-// compute the particle index as follows:
-//
-// num_primaries = AliStack::GetNprimary();
-// num_tracks = AliStack::GetNtracks();
-// track = AliMUONHit::Track()
-//
-// if (track < num_primaries)
-// particleindex = track + num_tracks - num_primaries;
-// else
-// particleindex = track - num_primaries;
-
- // Remap the track numbers based on the specified map.
- AliMUONData* data = GetMUONData();
- TClonesArray* hits = data->Hits();
- for (Int_t i = 0; i < hits->GetEntriesFast(); i++)
- {
- AliMUONHit* hit = static_cast<AliMUONHit*>( hits->At(i) );
- hit->SetTrack( map[hit->Track()] );
- };
-};
-*/
+