From 7435e1f8c1ef5cac44e4420ef39ed9f69d762e48 Mon Sep 17 00:00:00 2001 From: hristov Date: Sun, 17 Jun 2007 20:39:07 +0000 Subject: [PATCH] Remove usage of deleted MUONData and MUONSegmentation classes. Implemented the AliModule::MakeBranch method to pass the HitStore collection to MCApp (Laurent) --- MUON/AliMUON.cxx | 156 +++++++++++++++++++++++++++++++++-------------- MUON/AliMUON.h | 29 +++------ 2 files changed, 118 insertions(+), 67 deletions(-) diff --git a/MUON/AliMUON.cxx b/MUON/AliMUON.cxx index 464df0c95ce..b701e620100 100644 --- a/MUON/AliMUON.cxx +++ b/MUON/AliMUON.cxx @@ -60,9 +60,7 @@ #include "AliMUONGeometryBuilder.h" #include "AliMUONCommonGeometryBuilder.h" #include "AliMUONVGeometryBuilder.h" -#include "AliMUONGeometrySegmentation.h" #include "AliMUONRawWriter.h" -#include "AliMUONSegmentation.h" #include "AliLog.h" #include "AliMUONSDigitizerV2.h" @@ -74,6 +72,10 @@ #include "AliMUONSlatGeometryBuilder.h" #include "AliMUONTriggerGeometryBuilder.h" +#include "AliMUONDigitStoreV1.h" +#include "AliMUONVTriggerStore.h" +#include "AliMUONHitStoreV1.h" + // Defaults parameters for Z positions of chambers // taken from values for "stations" in AliMUON::AliMUON // const Float_t zch[7]={528, 690., 975., 1249., 1449., 1610, 1710.}; @@ -97,11 +99,9 @@ AliMUON::AliMUON() : AliDetector(), fNCh(0), fNTrackingCh(0), - fMUONData(0), fSplitLevel(0), fChambers(0), fGeometryBuilder(0), - fSegmentation(0), fAccCut(kFALSE), fAccMin(0.), fAccMax(0.), @@ -117,8 +117,8 @@ AliMUON::AliMUON() fTriggerEffCells(0), fDigitizerWithNoise(kTRUE), fRawWriter(0x0), - fDigitMaker(0x0) - + fDigitMaker(0x0), + fHitStore(0x0) { /// Default Constructor @@ -131,11 +131,9 @@ AliMUON::AliMUON(const char *name, const char* title) : AliDetector(name, title), fNCh(AliMUONConstants::NCh()), fNTrackingCh(AliMUONConstants::NTrackingCh()), - fMUONData(0), fSplitLevel(0), fChambers(0), fGeometryBuilder(0), - fSegmentation(0), fAccCut(kFALSE), fAccMin(0.), fAccMax(0.), @@ -151,7 +149,8 @@ AliMUON::AliMUON(const char *name, const char* title) fTriggerEffCells(0), fDigitizerWithNoise(kTRUE), fRawWriter(0x0), - fDigitMaker(new AliMUONDigitMaker(kFALSE)) + fDigitMaker(new AliMUONDigitMaker), + fHitStore(0x0) { /// Standard constructor @@ -180,7 +179,8 @@ AliMUON::AliMUON(const char *name, const char* title) // Creating List of Chambers Int_t ch; fChambers = new TObjArray(AliMUONConstants::NCh()); - + fChambers->SetOwner(kTRUE); + // Loop over stations for (Int_t st = 0; st < AliMUONConstants::NCh() / 2; st++) { // Loop over 2 chambers in the station @@ -205,18 +205,11 @@ AliMUON::~AliMUON() /// Destructor AliDebug(1,Form("dtor this=%p",this)); - fIshunt = 0; - - if (fChambers){ - fChambers->Delete(); - delete fChambers; - } - - delete fMUONData; + delete fChambers; delete fGeometryBuilder; - delete fSegmentation; delete fRawWriter; delete fDigitMaker; + delete fHitStore; } //_____________________________________________________________________________ @@ -265,22 +258,68 @@ const AliMUONGeometryTransformer* AliMUON::GetGeometryTransformer() const } //__________________________________________________________________ -void AliMUON::SetTreeAddress() +void +AliMUON::MakeBranch(Option_t* opt) { -/// Set Hits tree address - - GetMUONData()->SetLoader(fLoader); - // GetMUONData()->MakeBranch("D,S,RC"); - // GetMUONData()->SetTreeAddress("H,D,S,RC"); - GetMUONData()->SetTreeAddress("H"); - if (fHits != GetMUONData()->Hits()) { + /// Create branche(s) to hold MUON hits + AliDebug(1,""); + + TString sopt(opt); + if ( sopt != "H" ) return; + + if (!fHitStore) + { + fHitStore = new AliMUONHitStoreV1; if ( gAlice->GetMCApp() ) - if ( gAlice->GetMCApp()->GetHitLists() ) { - fHits = GetMUONData()->Hits(); - gAlice->GetMCApp()->AddHitList(fHits); // For purifyKine, only necessary when Hit list is created in AliMUONData + { + if ( gAlice->GetMCApp()->GetHitLists() ) + { + // AliStack::PurifyKine needs to be able to loop on our hits + // to remap the track numbers. + gAlice->GetMCApp()->AddHitList(fHitStore->Collection()); } + } + } + + TTree* treeH = fLoader->TreeH(); + + if (!treeH) + { + AliFatal("No TreeH"); } - fHits = GetMUONData()->Hits(); // Added by Ivana to use the methods FisrtHit, NextHit of AliDetector + + fHitStore->Connect(*treeH); +} + +//__________________________________________________________________ +void +AliMUON::SetTreeAddress() +{ + /// Set Hits tree address + +// if ( gAlice->GetMCApp() && fHitStore ) +// { +// TList* l = gAlice->GetMCApp()->GetHitLists(); +// if ( l ) +// { +// TObject* o = l->First(); +// if (o!=fHitStore->HitCollection()) +// { +// AliError(Form("Something is strange hitcollection=%x",fHitStore->HitCollection())); +// l->Print(); +// } +// } +// } +} + +//_________________________________________________________________ +void +AliMUON::ResetHits() +{ + /// Reset hits + + AliDebug(1,""); + if (fHitStore) fHitStore->Clear(); } //_________________________________________________________________ @@ -399,7 +438,7 @@ Float_t AliMUON::GetMaxDestepAlu() const } //____________________________________________________________________ -void AliMUON::SetResponseModel(Int_t id, AliMUONResponse *response) +void AliMUON::SetResponseModel(Int_t id, const AliMUONResponse& response) { /// Set the response for chamber id ((AliMUONChamber*) fChambers->At(id))->SetResponseModel(response); @@ -429,8 +468,8 @@ void AliMUON::Hits2SDigits() { /// Perform Hits2Digits using SDigitizerV2 - TTask* sdigitizer = new AliMUONSDigitizerV2; - sdigitizer->ExecuteTask(); + AliMUONSDigitizerV2 sdigitizer; + sdigitizer.ExecuteTask(); } //_____________________________________________________________________ @@ -440,17 +479,41 @@ void AliMUON::Digits2Raw() if (!fRawWriter) { - fRawWriter = new AliMUONRawWriter(fMUONData); + fRawWriter = new AliMUONRawWriter; + AliDebug(1,Form("Creating %s",fRawWriter->ClassName())); if (fTriggerScalerEvent == kTRUE) { fRawWriter->SetScalersNumbers(); } } - if (!fRawWriter->Digits2Raw()) + fLoader->LoadDigits("READ"); + + TTree* treeD = fLoader->TreeD(); + + if (!treeD) + { + AliError("Could not get TreeD"); + return; + } + + AliMUONVTriggerStore* triggerStore = AliMUONVTriggerStore::Create(*treeD); + AliMUONVDigitStore* digitStore = AliMUONVDigitStore::Create(*treeD); + + triggerStore->Connect(*treeD,kFALSE); + digitStore->Connect(*treeD,kFALSE); + + treeD->GetEvent(0); + + if (!fRawWriter->Digits2Raw(digitStore,triggerStore)) { AliError("pb writting raw data"); } + + delete triggerStore; + delete digitStore; + + fLoader->UnloadDigits(); } //_____________________________________________________________________ @@ -459,20 +522,23 @@ Bool_t AliMUON::Raw2SDigits(AliRawReader* rawReader) /// Convert raw data to SDigit /// Only for tracking for the moment (ChF) - //fLoader->LoadDigits("READ"); + fLoader->LoadDigits("READ"); if (!fLoader->TreeS()) fLoader->MakeSDigitsContainer(); - fMUONData->MakeBranch("S"); - fMUONData->SetTreeAddress("S"); - fDigitMaker->Raw2Digits(rawReader); - fMUONData->Fill("S"); + TTree* treeS = fLoader->TreeS(); + + AliMUONVDigitStore* sDigitStore = new AliMUONDigitStoreV1; + sDigitStore->Connect(*treeS); + + fDigitMaker->Raw2Digits(rawReader,sDigitStore,0x0); fLoader->WriteSDigits("OVERWRITE"); - fMUONData->ResetSDigits(); + fLoader->UnloadSDigits(); + delete sDigitStore; + return kTRUE; - } //_______________________________________________________________________ @@ -484,10 +550,6 @@ AliLoader* AliMUON::MakeLoader(const char* topfoldername) AliDebug(1,Form("Creating standard getter for detector %s. Top folder is %s.", GetName(),topfoldername)); fLoader = new AliLoader(GetName(),topfoldername); - fMUONData = new AliMUONSimData(fLoader,GetName(),GetName()); - fMUONData->SetSplitLevel(fSplitLevel); - - fDigitMaker->SetMUONData(fMUONData); return fLoader; } diff --git a/MUON/AliMUON.h b/MUON/AliMUON.h index 691805ad921..d030a9b1636 100644 --- a/MUON/AliMUON.h +++ b/MUON/AliMUON.h @@ -15,7 +15,6 @@ #include #include "AliDetector.h" -#include "AliMUONSimData.h" #include "AliMUONChamber.h" #include "AliMUONTrigger.h" @@ -25,7 +24,6 @@ class TFile; class TTree; class AliLoader; -class AliMUONSimData; class AliMUONResponse; class AliMUONSegmentation; class AliMUONHit; @@ -36,6 +34,7 @@ class AliMUONRawWriter; class AliMUONVGeometryBuilder; class AliESD; class AliMUONDigitMaker; +class AliMUONVHitStore; class AliMUON : public AliDetector { @@ -54,25 +53,13 @@ class AliMUON : public AliDetector AliMUONGeometryBuilder* GetGeometryBuilder() const {return fGeometryBuilder;} const AliMUONGeometryTransformer* GetGeometryTransformer() const; /// Return segmentation - AliMUONSegmentation* GetSegmentation() const { return fSegmentation; } - - /// Return MUONData - AliMUONSimData* GetMUONData() {return fMUONData;} // MUONLoader definition virtual AliLoader* MakeLoader(const char* topfoldername); //builds standard getter (AliLoader type) - // Interface with AliMUONData - /// Make branch - virtual void MakeBranch(Option_t *opt=" ") {GetMUONData()->MakeBranch(opt);} virtual void SetTreeAddress(); - /// Reset hits - virtual void ResetHits() {GetMUONData()->ResetHits();} - /// Reset digits - virtual void ResetDigits() {GetMUONData()->ResetDigits();} - /// Reset trigger - virtual void ResetTrigger() {GetMUONData()->ResetTrigger();} - /// Set split level + + /// Set split level for making branches in outfiles virtual void SetSplitLevel(Int_t SplitLevel) {fSplitLevel=SplitLevel;} // Digitisation @@ -96,7 +83,7 @@ class AliMUON : public AliDetector virtual void SetChargeSpread(Int_t id, Float_t p1, Float_t p2); virtual void SetMaxAdc(Int_t id, Int_t p1); // Set Response Model - virtual void SetResponseModel(Int_t id, AliMUONResponse *response); + virtual void SetResponseModel(Int_t id, const AliMUONResponse& response); // Set Stepping Parameters virtual void SetMaxStepGas(Float_t p1); @@ -140,6 +127,8 @@ class AliMUON : public AliDetector {return *((AliMUONChamber *) (*fChambers)[id]);} /// Return reference to New Circuit \a id + virtual void MakeBranch(Option_t* opt=" "); + virtual void ResetHits(); protected: /// Not implemented @@ -151,11 +140,9 @@ class AliMUON : public AliDetector Int_t fNCh; ///< Number of chambers Int_t fNTrackingCh; ///< Number of tracking chambers* - AliMUONSimData* fMUONData; ///< Data container for MUON subsystem Int_t fSplitLevel; ///< Splitlevel when making branches in outfiles. TObjArray* fChambers; ///< List of Tracking Chambers AliMUONGeometryBuilder* fGeometryBuilder; ///< Geometry builder - AliMUONSegmentation* fSegmentation; ///< New segmentation // Bool_t fAccCut; ///