#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 "AliMUONRawCluster.h"
#include "AliMUONTransientDigit.h"
#include "AliMUONTriggerCircuit.h"
+#include "AliMUONGeometryBuilder.h"
+#include "AliMUONCommonGeometryBuilder.h"
#include "AliMUONVGeometryBuilder.h"
+#include "AliMUONGeometryDEIndexing.h"
+#include "AliMUONGeometrySegmentation.h"
#include "AliMUONDigitizerv2.h"
#include "AliMUONSDigitizerv1.h"
-
+#include "AliMUONRawData.h"
+#include "AliMUONFactory.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),
+ fSegmentationType(1),// set to 1 default wise old seg
+ fDEIndexing(0),
fAccCut(kFALSE),
fAccMin(0.),
fAccMax(0.),
fMaxDestepAlu(0.),
fMaxIterPad(0),
fCurIterPad(0),
- fMerger(0)
+ fMerger(0),
+ fFactory(0)
{
// Default Constructor
//
fMUONData(0),
fSplitLevel(0),
fChambers(0),
- fGeometryBuilders(0),
fTriggerCircuits(0),
+ fGeometryBuilder(0),
+ fSegmentationType(1),// set to 1 default wise old seg
+ fDEIndexing(0),
fAccCut(kFALSE),
fAccMin(0.),
fAccMax(0.),
fMaxDestepAlu(-1), // in the calculation of the tracking parameters
fMaxIterPad(0),
fCurIterPad(0),
- fMerger(0)
+ fMerger(0),
+ fFactory(0)
{
-//Begin_Html
-/*
-<img src="gif/alimuon.gif">
-*/
-//End_Html
fIshunt = 0;
SetMarkerColor(kRed);//
+
+ // Geometry builder
+ fGeometryBuilder = new AliMUONGeometryBuilder(this);
+
+ // Common geometry definitions
+ fGeometryBuilder
+ ->AddBuilder(new AliMUONCommonGeometryBuilder(this));
+
+ // Define the global transformation:
+ // Transformation from the old ALICE coordinate system to a new one:
+ // x->-x, z->-z
+ TGeoRotation* rotGlobal
+ = new TGeoRotation("rotGlobal", 90., 180., 90., 90., 180., 0.);
+ fGeometryBuilder
+ ->SetGlobalTransformation (TGeoCombiTrans(0., 0., 0., rotGlobal));
+
+ // Detection elements indexing
+ fDEIndexing = new AliMUONGeometryDEIndexing();
+
//
// 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++) {
{
// Protected copy constructor
- Fatal("AliMUONMergerModule", "Not implemented.");
+ AliFatal("Not implemented.");
}
//____________________________________________________________________
AliMUON::~AliMUON()
{
// Destructor
- if(fDebug) printf("%s: Calling AliMUON destructor !!!\n",ClassName());
+ AliDebug(1,"Calling AliMUON destructor");
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 fDEIndexing;
+ delete fFactory;
}
//________________________________________________________________________
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);
}
+
//____________________________________________________________________
void AliMUON::BuildGeometry()
{
// 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");
+
+ if (!fSegmentationType) {
+ AliFatal("No Segmentation Type defined.");
+ return;
+ }
+
+ if (fSegmentationType == 1) {
+ 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");
+ }
+ }
+ } else {
+// for (Int_t i=0; i<14; i++) {
+// for (Int_t j=0; j<100; j++) {
+// Int_t id= (i+1)*100 + j;
+// this->Chamber(i).SegmentationModel2(1)->Draw(id,"eventdisplay");// to be check !
+// }
// }
-// }
+ }
}
+
//__________________________________________________________________
void AliMUON::SetTreeAddress()
{
((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)
{
return fMaxDestepAlu;
}
+
+//____________________________________________________________________
+ void AliMUON::SetAlign(Bool_t align)
+{
+ // Sets option for alignement to geometry builder
+
+ fGeometryBuilder->SetAlign(align);
+}
+
//____________________________________________________________________
void AliMUON::SetSegmentationModel(Int_t id, Int_t isec, AliSegmentation *segmentation)
{
+// Set the segmentation for chamber id cathode isec
+ ((AliMUONChamber*) fChambers->At(id))->SetSegmentationModel(isec, segmentation);
+}
+//____________________________________________________________________
+void AliMUON::SetSegmentationModel(Int_t id, Int_t isec, AliMUONGeometrySegmentation* segmentation)
+{
// Set the segmentation for chamber id cathode isec
((AliMUONChamber*) fChambers->At(id))->SetSegmentationModel(isec, segmentation);
// 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();
+ AliDebug(1,"Create default AliMUONMerger ");
+ AliDebug(1," no merging, just digitization of 1 event will be done");
+ fMerger = new AliMUONMerger();
}
fMerger->Init();
fMerger->Digitise();
}
fLoader->UnloadHits();
}
+//_____________________________________________________________________
+void AliMUON::Digits2Raw()
+{
+ // convert digits of the current event to raw data
+ AliMUONRawData* rawData;
+
+ rawData = new AliMUONRawData(fLoader);
+ if (!rawData->WriteRawData()) AliInfo("pb writting raw data");
+ delete rawData;
+ return;
+}
//_______________________________________________________________________
AliLoader* AliMUON::MakeLoader(const char* topfoldername)
{
//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 pointer to merger
return fMerger;
}
+/* PH Commented out waiting for correct implementation
//________________________________________________________________________
void AliMUON::RemapTrackHitIDs(Int_t* map)
{
hit->SetTrack( map[hit->Track()] );
};
};
-
+*/