X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONData.cxx;h=2e117f348a216e5bdfaf672d6a717270ebe175b4;hb=e3ea1889f41706df67da341c8af55d15bad2abf5;hp=2584ad016c6ebff635474ad42d7c13664687e345;hpb=cba99c31b6f27b39bbef168178c107d5582cee82;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONData.cxx b/MUON/AliMUONData.cxx index 2584ad016c6..2e117f348a2 100644 --- a/MUON/AliMUONData.cxx +++ b/MUON/AliMUONData.cxx @@ -23,6 +23,8 @@ //Root includes #include "TNamed.h" //AliRoot include +#include "AliRun.h" +#include "AliMC.h" #include "AliLoader.h" #include "AliMUONConstants.h" #include "AliMUONData.h" @@ -36,41 +38,53 @@ ClassImp(AliMUONData) //_____________________________________________________________________________ -AliMUONData::AliMUONData():TNamed() + AliMUONData::AliMUONData(): + TNamed(), + fLoader(0x0), + fHits(0x0), + fDigits(0x0), + fSDigits(0x0), + fRawClusters(0x0), + fGlobalTrigger(0x0), + fLocalTrigger(0x0), + fRecTracks(0x0), + fRecTriggerTracks(0x0), + fNhits(0), + fNdigits(0x0), + fNSdigits(0x0), + fNrawclusters(0x0), + fNglobaltrigger(0), + fNlocaltrigger(0), + fNrectracks(0), + fNrectriggertracks(0), + fSplitLevel(0) { // Default constructor - fLoader = 0x0; - fHits = 0x0; // One event in treeH per primary track - fDigits = 0x0; // One event in treeH per detection plane - fNdigits = 0x0; - fRawClusters = 0x0; //One event in TreeR/RawclusterBranch per tracking detection plane - fGlobalTrigger = 0x0; //! List of Global Trigger 1st event in TreeR/GlobalTriggerBranch - fLocalTrigger = 0x0; //! List of Local Trigger, 1st event in TreeR/LocalTriggerBranch - fRecTracks = 0x0; - fRecTriggerTracks = 0x0; - fSplitLevel = 0; -//default constructor } //_____________________________________________________________________________ AliMUONData::AliMUONData(AliLoader * loader, const char* name, const char* title): - TNamed(name,title) + TNamed(name,title), + fLoader(loader), + fHits(0x0), + fDigits(0x0), + fSDigits(0x0), + fRawClusters(0x0), + fGlobalTrigger(0x0), + fLocalTrigger(0x0), + fRecTracks(0x0), + fRecTriggerTracks(0x0), + fNhits(0), + fNdigits(0x0), + fNSdigits(0x0), + fNrawclusters(0x0), + fNglobaltrigger(0), + fNlocaltrigger(0), + fNrectracks(0), + fNrectriggertracks(0), + fSplitLevel(0) { // Constructor for AliMUONData - fLoader = loader; - fHits = 0x0; // One event in treeH per primary track - fDigits = 0x0; // One event in treeH per detection plane - fNdigits = 0x0; - fRawClusters = 0x0; //One event in TreeR/RawclusterBranch per tracking detection plane - fGlobalTrigger = 0x0; //! List of Global Trigger 1st event in TreeR/GlobalTriggerBranch - fLocalTrigger = 0x0; //! List of Local Trigger, 1st event in TreeR/LocalTriggerBranch - fRecTracks = 0x0; - fRecTriggerTracks = 0x0; - fNhits = 0; - fNglobaltrigger =0; - fNlocaltrigger = 0; - fNrectracks = 0; - fNrectriggertracks = 0; - fSplitLevel = 0; + // fHits = new TClonesArray("AliMUONHit",1000); // fNhits = 0; // fDigits = new TObjArray(AliMUONConstants::NCh()); @@ -93,14 +107,16 @@ AliMUONData::AliMUONData(AliLoader * loader, const char* name, const char* title // fNrectracks = 0; // really needed or GetEntriesFast sufficient ???? - //default constructor } + //_____________________________________________________________________________ AliMUONData::AliMUONData(const AliMUONData& rMUONData):TNamed(rMUONData) { - // Dummy copy constructor - ; +// Protected copy constructor + + Fatal("AliMUONData", "Not implemented."); } + //_____________________________________________________________________________ AliMUONData::~AliMUONData() { @@ -113,6 +129,10 @@ AliMUONData::~AliMUONData() fDigits->Delete(); delete fDigits; } + if (fSDigits) { + fSDigits->Delete(); + delete fSDigits; + } if (fRawClusters) { fRawClusters->Delete(); delete fRawClusters; @@ -135,6 +155,20 @@ AliMUONData::~AliMUONData() } //detructor } + +//_____________________________________________________________________________ +AliMUONData& AliMUONData::operator=(const AliMUONData& rhs) +{ +// Protected assignement operator + + if (this == &rhs) return *this; + + Fatal("operator=", "Not implemented."); + + return *this; +} + + //_____________________________________________________________________________ void AliMUONData::AddDigit(Int_t id, Int_t *tracks, Int_t *charges, Int_t *digits) { @@ -154,6 +188,24 @@ void AliMUONData::AddDigit(Int_t id, const AliMUONDigit& digit) new(ldigits[fNdigits[id]++]) AliMUONDigit(digit); } //_____________________________________________________________________________ +void AliMUONData::AddSDigit(Int_t id, Int_t *tracks, Int_t *charges, Int_t *Sdigits) +{ + // + // Add a MUON Sdigit to the list of SDigits of the detection plane id + // + TClonesArray &lSdigits = * SDigits(id) ; + new(lSdigits[fNSdigits[id]++]) AliMUONDigit(tracks,charges,Sdigits); +} +//_____________________________________________________________________________ +void AliMUONData::AddSDigit(Int_t id, const AliMUONDigit& Sdigit) +{ + // + // Add a MUON Sdigit to the list of SDigits of the detection plane id + // + TClonesArray &lSdigits = * SDigits(id) ; + new(lSdigits[fNSdigits[id]++]) AliMUONDigit(Sdigit); +} +//_____________________________________________________________________________ void AliMUONData::AddGlobalTrigger(Int_t *singlePlus, Int_t *singleMinus, Int_t *singleUndef, Int_t *pairUnlike, Int_t *pairLike) @@ -258,6 +310,15 @@ TClonesArray* AliMUONData::Digits(Int_t DetectionPlane) return NULL; } //____________________________________________________________________________ +TClonesArray* AliMUONData::SDigits(Int_t DetectionPlane) +{ + //Getting List of SDigits + if (fSDigits) + return ( (TClonesArray*) fSDigits->At(DetectionPlane) ); + else + return NULL; +} +//____________________________________________________________________________ Bool_t AliMUONData::IsRawClusterBranchesInTree() { // Checking if there are RawCluster Branches In TreeR @@ -331,6 +392,7 @@ void AliMUONData::Fill(Option_t* option) // Method to fill the trees const char *cH = strstr(option,"H"); const char *cD = strstr(option,"D"); // Digits branches in TreeD + const char *cS = strstr(option,"S"); // SDigits branches in TreeS const char *cRC = strstr(option,"RC"); // RawCluster branches in TreeR const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeR const char *cRT = strstr(option,"RT"); // Reconstructed Track in TreeT @@ -351,6 +413,10 @@ void AliMUONData::Fill(Option_t* option) if ( TreeD() && cD) { TreeD()->Fill(); } + // Filling TreeS + if ( TreeS() && cS) { + TreeS()->Fill(); + } // // filling rawclusters @@ -416,6 +482,7 @@ void AliMUONData::MakeBranch(Option_t* option) const char *cH = strstr(option,"H"); const char *cD = strstr(option,"D"); // Digits branches in TreeD + const char *cS = strstr(option,"S"); // Digits branches in TreeS const char *cRC = strstr(option,"RC"); // RawCluster branches in TreeR const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeR const char *cRT = strstr(option,"RT"); // Reconstructed Track in TreeT @@ -426,7 +493,13 @@ void AliMUONData::MakeBranch(Option_t* option) // Creating Branches for Hits if (TreeH() && cH) { - if (fHits == 0x0) fHits = new TClonesArray("AliMUONHit",1000); + + if (fHits == 0x0) { + fHits = new TClonesArray("AliMUONHit",1000); +// if (gAlice->GetMCApp()) +// gAlice->GetMCApp()->AddHitList (fHits); + } + fNhits = 0; sprintf(branchname,"%sHits",GetName()); branch = TreeH()->GetBranch(branchname); @@ -444,7 +517,9 @@ void AliMUONData::MakeBranch(Option_t* option) if (fDigits == 0x0) { fDigits = new TObjArray(AliMUONConstants::NCh()); for (Int_t iDetectionPlane=0; iDetectionPlaneAddAt(new TClonesArray("AliMUONDigit",10000),iDetectionPlane); + TClonesArray * tca = new TClonesArray("AliMUONDigit",10000); + tca->SetOwner(); + fDigits->AddAt(tca,iDetectionPlane); } } if (fNdigits == 0x0) { @@ -467,6 +542,37 @@ void AliMUONData::MakeBranch(Option_t* option) } } + //Creating Branches for SDigits + if (TreeS() && cS ) { + // one branch for Sdigits per chamber + if (fSDigits == 0x0) { + fSDigits = new TObjArray(AliMUONConstants::NCh()); + for (Int_t iDetectionPlane=0; iDetectionPlaneSetOwner(); + fSDigits->AddAt(tca,iDetectionPlane); + } + } + if (fNSdigits == 0x0) { + fNSdigits = new Int_t[AliMUONConstants::NCh()]; + for (Int_t iDetectionPlane=0; iDetectionPlaneGetBranch(branchname); + if (branch) { + Info("MakeBranch","Branch %s is already in tree.",GetName()); + return; + } + TClonesArray * Sdigits = SDigits(iDetectionPlane); + branch = TreeS()->Branch(branchname, &Sdigits, kBufferSize,1); + //Info("MakeBranch","Making Branch %s for Sdigits in detection plane %d\n",branchname,iDetectionPlane+1); + } + } + if (TreeR() && cRC ) { // one branch for raw clusters per tracking detection plane // @@ -474,7 +580,9 @@ void AliMUONData::MakeBranch(Option_t* option) if (fRawClusters == 0x0) { fRawClusters = new TObjArray(AliMUONConstants::NTrackingCh()); for (Int_t i=0; iAddAt(new TClonesArray("AliMUONRawCluster",1000),i); + TClonesArray * tca = new TClonesArray("AliMUONRawCluster",1000); + tca->SetOwner(); + fRawClusters->AddAt(tca,i); } } @@ -601,6 +709,18 @@ void AliMUONData::ResetDigits() if (fNdigits) fNdigits[i]=0; } } +//____________________________________________________________________________ +void AliMUONData::ResetSDigits() +{ + // + // Reset number of Sdigits and the Sdigits array for this detector + // + if (fSDigits == 0x0) return; + for ( int i=0;iAt(i))->Clear(); + if (fNSdigits) fNSdigits[i]=0; + } +} //______________________________________________________________________________ void AliMUONData::ResetHits() { @@ -647,6 +767,7 @@ void AliMUONData::SetTreeAddress(Option_t* option) //Setting Addresses to the events trees const char *cH = strstr(option,"H"); const char *cD = strstr(option,"D"); // Digits branches in TreeD + const char *cS = strstr(option,"S"); // SDigits branches in TreeS const char *cRC = strstr(option,"RC"); // RawCluster branches in TreeR const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeR const char *cRT = strstr(option,"RT"); // Reconstructed Track in TreeT @@ -660,7 +781,11 @@ void AliMUONData::SetTreeAddress(Option_t* option) // // Branch address for hit tree if ( TreeH() && cH ) { - if (fHits == 0x0) fHits = new TClonesArray("AliMUONHit",1000); + if (fHits == 0x0) { + fHits = new TClonesArray("AliMUONHit",1000); + // if (gAlice->GetMCApp()) + // gAlice->GetMCApp()->AddHitList (fHits); Moved to AliMUON + } fNhits =0; } if (TreeH() && fHits && cH) { @@ -694,11 +819,37 @@ void AliMUONData::SetTreeAddress(Option_t* option) if (fDigits) { branch = TreeD()->GetBranch(branchname); TClonesArray * digits = Digits(i); - if (branch) branch->SetAddress( &digits ); + if (branch) { + branch->SetAddress( &digits ); + } else Warning("SetTreeAddress","(%s) Failed for Digits Detection plane %d. Can not find branch in tree.",GetName(),i); } } } + // + // Branch address for Sdigit tree + if ( TreeS() && cS) { + if (fSDigits == 0x0) { + fSDigits = new TObjArray(AliMUONConstants::NCh()); + fNSdigits= new Int_t[AliMUONConstants::NCh()]; + for (Int_t i=0; iAddAt(new TClonesArray("AliMUONDigit",10000),i); + fNSdigits[i]=0; + } + } + } + + if (TreeS() && fSDigits && cS) { + for (int i=0; iGetBranch(branchname); + TClonesArray * Sdigits = SDigits(i); + if (branch) branch->SetAddress( &Sdigits ); + else Warning("SetTreeAddress","(%s) Failed for SDigits Detection plane %d. Can not find branch in tree.",GetName(),i); + } + } + } // // Branch address for rawclusters, globaltrigger and local trigger tree