X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUON.cxx;h=e68d6ccb6790329707d2c7b01f164ef15d01ac68;hb=e14435c6bca209dfae3857a96d79fc48221b7e78;hp=651467db6b27630f8c89c5ea57ce93811f581ce2;hpb=883746f377316ff9c4443575f3fcff1bfcab2d3f;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUON.cxx b/MUON/AliMUON.cxx index 651467db6b2..e68d6ccb679 100644 --- a/MUON/AliMUON.cxx +++ b/MUON/AliMUON.cxx @@ -53,17 +53,21 @@ #include "AliMUON.h" #include "AliMUONChamberTrigger.h" #include "AliMUONConstants.h" -#include "AliMUONHit.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 @@ -91,6 +95,7 @@ AliMUON::AliMUON() fChambers(0), fTriggerCircuits(0), fGeometryBuilder(0), + fSegmentation(0), fAccCut(kFALSE), fAccMin(0.), fAccMax(0.), @@ -99,11 +104,11 @@ AliMUON::AliMUON() 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; } @@ -117,6 +122,7 @@ AliMUON::AliMUON(const char *name, const char *title) fChambers(0), fTriggerCircuits(0), fGeometryBuilder(0), + fSegmentation(0), fAccCut(kFALSE), fAccMin(0.), fAccMax(0.), @@ -125,13 +131,20 @@ AliMUON::AliMUON(const char *name, const char *title) 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; @@ -148,18 +161,8 @@ AliMUON::AliMUON(const char *name, const char *title) 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...) @@ -168,9 +171,6 @@ AliMUON::AliMUON(const char *name, const char *title) for (Int_t circ=0; circAddAt(new AliMUONTriggerCircuit(),circ); } - - // Geometry builder - fGeometryBuilder = new AliMUONGeometryBuilder(this); } //____________________________________________________________________ @@ -179,16 +179,15 @@ AliMUON::AliMUON(const AliMUON& rMUON) { // 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 (fChambers){ fChambers->Delete(); @@ -200,6 +199,7 @@ AliMUON::~AliMUON() } delete fMUONData; delete fGeometryBuilder; + delete fSegmentation; } //________________________________________________________________________ @@ -209,7 +209,7 @@ AliMUON& AliMUON::operator = (const AliMUON& rhs) if (this == &rhs) return *this; - Fatal("operator=", "Not implemented."); + AliFatal("Not implemented."); return *this; } @@ -228,14 +228,38 @@ 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"); - } - } + +// 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() { @@ -253,32 +277,6 @@ 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) { @@ -339,27 +337,6 @@ void AliMUON::SetMaxDestepAlu(Float_t p1) 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 { @@ -394,19 +371,20 @@ Float_t AliMUON::GetMaxDestepAlu() const //____________________________________________________________________ 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) + void AliMUON::SetAlign(const TString& fileName, 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(fileName, align); +} -} //____________________________________________________________________ void AliMUON::SetResponseModel(Int_t id, AliMUONResponse *response) { @@ -414,12 +392,6 @@ 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); @@ -430,15 +402,6 @@ void AliMUON::SDigits2Digits() // write TreeD here - if (!fMerger) { - if (gAlice->GetDebug()>0) { - cerr<<"AliMUON::SDigits2Digits: create default AliMUONMerger "<Init(); - fMerger->Digitise(); char hname[30]; // sprintf(hname,"TreeD%d",fLoader->GetHeader()->GetEvent()); fLoader->TreeD()->Write(hname,TObject::kOverwrite); @@ -467,7 +430,7 @@ void AliMUON::Digits2Raw() 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; } @@ -477,45 +440,15 @@ 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 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) { @@ -536,42 +469,4 @@ AliMUONRawCluster *AliMUON::RawCluster(Int_t ichamber, Int_t icathod, Int_t iclu 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( hits->At(i) ); - hit->SetTrack( map[hit->Track()] ); - }; -}; -*/ +