X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONData.cxx;h=94c13960fc70a5518349fe32097900de58a17aa6;hb=7e6d7e077aa7b287c41f82db9696019fadeb1466;hp=a3e3d707c01f33ee555175730e3501991f2e5db1;hpb=346357f41640a93a458d8fd04f90c26a0e15bf03;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONData.cxx b/MUON/AliMUONData.cxx index a3e3d707c01..94c13960fc7 100644 --- a/MUON/AliMUONData.cxx +++ b/MUON/AliMUONData.cxx @@ -1,8 +1,28 @@ +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ -//Root includes -#include "TNamed.h" -//AliRoot includes -#include "AliLoader.h" +/* $Id$ */ +// AliMUONData classes +// Class containing MUON data: hits, digits, rawclusters, globaltrigger, localtrigger, etc .. +// The classe makes the lik between the MUON data lists and the event trees from loaders +// Gines Martinez, Subatech, September 2003 +// + +//AliRoot include +//#include "AliRun.h" +//#include "AliMC.h" #include "AliMUONConstants.h" #include "AliMUONData.h" #include "AliMUONDigit.h" @@ -11,58 +31,94 @@ #include "AliMUONGlobalTrigger.h" #include "AliMUONRawCluster.h" #include "AliMUONTrack.h" +#include "AliMUONTriggerTrack.h" ClassImp(AliMUONData) //_____________________________________________________________________________ -AliMUONData::AliMUONData():TNamed() -{ - 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; -//default constructor + 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 } //_____________________________________________________________________________ AliMUONData::AliMUONData(AliLoader * loader, const char* name, const char* title): - TNamed(name,title) -{ - fLoader = loader; - fHits = new TClonesArray("AliMUONHit",1000); - fNhits = 0; - fDigits = new TObjArray(AliMUONConstants::NCh()); - fNdigits = new Int_t[AliMUONConstants::NCh()]; - for (Int_t iDetectionPlane=0; iDetectionPlaneAddAt(new TClonesArray("AliMUONDigit",10000),iDetectionPlane); - fNdigits[iDetectionPlane]=0; - } - fRawClusters = new TObjArray(AliMUONConstants::NTrackingCh()); - fNrawclusters = new Int_t[AliMUONConstants::NTrackingCh()]; - for (Int_t iDetectionPlane=0; iDetectionPlaneAddAt(new TClonesArray("AliMUONRawCluster",10000),iDetectionPlane); - fNrawclusters[iDetectionPlane]=0; - } - fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger",1); - fNglobaltrigger =0; - fLocalTrigger = new TClonesArray("AliMUONLocalTrigger",234); - fNlocaltrigger = 0; - fRecTracks = new TClonesArray("AliMUONTrack", 10); - fNrectracks = 0; // really needed or GetEntriesFast sufficient ???? - //default constructor + 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 + +// fHits = new TClonesArray("AliMUONHit",1000); +// fNhits = 0; +// fDigits = new TObjArray(AliMUONConstants::NCh()); +// fNdigits = new Int_t[AliMUONConstants::NCh()]; +// for (Int_t iDetectionPlane=0; iDetectionPlaneAddAt(new TClonesArray("AliMUONDigit",10000),iDetectionPlane); +// fNdigits[iDetectionPlane]=0; +// } +// fRawClusters = new TObjArray(AliMUONConstants::NTrackingCh()); +// fNrawclusters = new Int_t[AliMUONConstants::NTrackingCh()]; +// for (Int_t iDetectionPlane=0; iDetectionPlaneAddAt(new TClonesArray("AliMUONRawCluster",10000),iDetectionPlane); +// fNrawclusters[iDetectionPlane]=0; +// } +// fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger",1); +// fNglobaltrigger =0; +// fLocalTrigger = new TClonesArray("AliMUONLocalTrigger",234); +// fNlocaltrigger = 0; +// fRecTracks = new TClonesArray("AliMUONTrack", 100); +// fNrectracks = 0; // really needed or GetEntriesFast sufficient ???? + + } + //_____________________________________________________________________________ AliMUONData::AliMUONData(const AliMUONData& rMUONData):TNamed(rMUONData) { - // Dummy copy constructor - ; +// Protected copy constructor + + Fatal("AliMUONData", "Not implemented."); } + //_____________________________________________________________________________ AliMUONData::~AliMUONData() { + // Destructor for AliMUONData if (fHits) { fHits->Delete(); delete fHits; @@ -71,6 +127,10 @@ AliMUONData::~AliMUONData() fDigits->Delete(); delete fDigits; } + if (fSDigits) { + fSDigits->Delete(); + delete fSDigits; + } if (fRawClusters) { fRawClusters->Delete(); delete fRawClusters; @@ -87,8 +147,26 @@ AliMUONData::~AliMUONData() fRecTracks->Delete(); delete fRecTracks; } + if (fRecTriggerTracks){ + fRecTriggerTracks->Delete(); + delete fRecTriggerTracks; + } //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) { @@ -99,6 +177,33 @@ void AliMUONData::AddDigit(Int_t id, Int_t *tracks, Int_t *charges, Int_t *digit new(ldigits[fNdigits[id]++]) AliMUONDigit(tracks,charges,digits); } //_____________________________________________________________________________ +void AliMUONData::AddDigit(Int_t id, const AliMUONDigit& digit) +{ + // + // Add a MUON digit to the list of Digits of the detection plane id + // + TClonesArray &ldigits = * Digits(id) ; + 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) @@ -109,11 +214,19 @@ void AliMUONData::AddGlobalTrigger(Int_t *singlePlus, Int_t *singleMinus, AliMUONGlobalTrigger(singlePlus, singleMinus, singleUndef, pairUnlike, pairLike); } //_____________________________________________________________________________ +void AliMUONData::AddGlobalTrigger(const AliMUONGlobalTrigger& trigger ) +{ + // add a MUON Global Trigger to the list (only one GlobalTrigger per event !) + TClonesArray &globalTrigger = *fGlobalTrigger; + new(globalTrigger[fNglobaltrigger++]) AliMUONGlobalTrigger(trigger); +} +//_____________________________________________________________________________ void AliMUONData::AddHit(Int_t fIshunt, Int_t track, Int_t iChamber, Int_t idpart, Float_t X, Float_t Y, Float_t Z, Float_t tof, Float_t momentum, Float_t theta, Float_t phi, Float_t length, Float_t destep) { + // Add new hit to the hit list TClonesArray &lhits = *fHits; new(lhits[fNhits++]) AliMUONHit(fIshunt, track, iChamber, idpart, X, Y, Z, @@ -121,12 +234,40 @@ void AliMUONData::AddHit(Int_t fIshunt, Int_t track, Int_t iChamber, phi, length, destep); } //____________________________________________________________________________ +void AliMUONData::AddHit(Int_t fIshunt, Int_t track, Int_t iChamber, + Int_t idpart, Float_t X, Float_t Y, Float_t Z, + Float_t tof, Float_t momentum, Float_t theta, + Float_t phi, Float_t length, Float_t destep, + Float_t Xref,Float_t Yref,Float_t Zref) +{ + // Add new hit to the hit list + TClonesArray &lhits = *fHits; + new(lhits[fNhits++]) AliMUONHit(fIshunt, track, iChamber, + idpart, X, Y, Z, + tof, momentum, theta, + phi, length, destep, + Xref,Yref,Zref); +} +//____________________________________________________________________________ +void AliMUONData::AddHit(const AliMUONHit& hit) +{ + TClonesArray &lhits = *fHits; + new(lhits[fNhits++]) AliMUONHit(hit); +} +//____________________________________________________________________________ void AliMUONData::AddLocalTrigger(Int_t *localtr) { // add a MUON Local Trigger to the list TClonesArray &localTrigger = *fLocalTrigger; new(localTrigger[fNlocaltrigger++]) AliMUONLocalTrigger(localtr); } +//____________________________________________________________________________ +void AliMUONData::AddLocalTrigger(const AliMUONLocalTrigger& trigger) +{ + // add a MUON Local Trigger to the list + TClonesArray &localTrigger = *fLocalTrigger; + new(localTrigger[fNlocaltrigger++]) AliMUONLocalTrigger(trigger); +} //_____________________________________________________________________________ void AliMUONData::AddRawCluster(Int_t id, const AliMUONRawCluster& c) { @@ -144,10 +285,41 @@ void AliMUONData::AddRecTrack(const AliMUONTrack& track) // TClonesArray &lrectracks = *fRecTracks; new(lrectracks[fNrectracks++]) AliMUONTrack(track); + // printf("TTTTTT %d ,\n",((AliMUONTrack*)fRecTracks->At(fNrectracks-1))->GetNTrackHits()); +} +//_____________________________________________________________________________ +void AliMUONData::AddRecTriggerTrack(const AliMUONTriggerTrack& triggertrack) +{ + // + // Add a MUON triggerrectrack + // + TClonesArray &lrectriggertracks = *fRecTriggerTracks; + new(lrectriggertracks[fNrectriggertracks++]) AliMUONTriggerTrack(triggertrack); + // printf("TTTTTT %d ,\n",((AliMUONTrack*)fRecTracks->At(fNrectracks-1))->GetNTrackHits()); +} + +//____________________________________________________________________________ +TClonesArray* AliMUONData::Digits(Int_t DetectionPlane) +{ + //Getting List of Digits + if (fDigits) + return ( (TClonesArray*) fDigits->At(DetectionPlane) ); + else + 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 if (TreeR()==0x0) { Error("TreeR","No treeR in memory"); return kFALSE; @@ -164,6 +336,7 @@ Bool_t AliMUONData::IsRawClusterBranchesInTree() //____________________________________________________________________________ Bool_t AliMUONData::IsTriggerBranchesInTree() { + // Checking if there are Trigger Branches In TreeR if (TreeR()==0x0) { Error("TreeR","No treeR in memory"); return kFALSE; @@ -178,14 +351,51 @@ Bool_t AliMUONData::IsTriggerBranchesInTree() } } //____________________________________________________________________________ +Bool_t AliMUONData::IsTrackBranchesInTree() +{ + // Checking if there are Track Branches In TreeT + if (TreeT()==0x0) { + Error("TreeT","No treeT in memory"); + return kFALSE; + } + else { + char branchname[30]; + sprintf(branchname,"%sTrack",GetName()); + TBranch * branch = 0x0; + branch = TreeT()->GetBranch(branchname); + if (branch) return kTRUE; + else return kFALSE; + } +} +//____________________________________________________________________________ +Bool_t AliMUONData::IsTriggerTrackBranchesInTree() +{ + // Checking if there are TriggerTrack Branches In TreeT + if (TreeT()==0x0) { + Error("TreeT","No treeT in memory"); + return kFALSE; + } + else { + char branchname[30]; + sprintf(branchname,"%sTriggerTrack",GetName()); + TBranch * branch = 0x0; + branch = TreeT()->GetBranch(branchname); + if (branch) return kTRUE; + else return kFALSE; + } +} +//____________________________________________________________________________ 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 + const char *cRL = strstr(option,"RL"); // Reconstructed Trigger Track in TreeT + //const char *cRP = strstr(option,"RP"); // Reconstructed Particle in TreeP char branchname[30]; @@ -201,6 +411,10 @@ void AliMUONData::Fill(Option_t* option) if ( TreeD() && cD) { TreeD()->Fill(); } + // Filling TreeS + if ( TreeS() && cS) { + TreeS()->Fill(); + } // // filling rawclusters @@ -233,10 +447,26 @@ void AliMUONData::Fill(Option_t* option) // // filling tracks if ( TreeT() && cRT ) { - sprintf(branchname,"%sTrack",GetName()); - branch = TreeT()->GetBranch(branchname); - branch->Fill(); + if (IsTriggerTrackBranchesInTree()) { + sprintf(branchname,"%sTrack",GetName()); + branch = TreeT()->GetBranch(branchname); + branch->Fill(); + } + else TreeT()->Fill(); + } + // filling trigger tracks + if ( TreeT() && cRL ) { + if (IsTrackBranchesInTree()) { + sprintf(branchname,"%sTriggerTrack",GetName()); + branch = TreeT()->GetBranch(branchname); + branch->Fill(); + } + else TreeT()->Fill(); } +// if ( TreeT() && cRL ) { +// sprintf(branchname,"%sTrackTrig",GetName()); +// TreeT()->Fill(); +// } } //_____________________________________________________________________________ void AliMUONData::MakeBranch(Option_t* option) @@ -247,18 +477,27 @@ void AliMUONData::MakeBranch(Option_t* option) const Int_t kBufferSize = 4000; char branchname[30]; + 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 - const char *cRP = strstr(option,"RP"); // Reconstructed Particle in TreeP - + const char *cRL = strstr(option,"RL"); // Reconstructed Trigger Track in TreeT + //const char *cRP = strstr(option,"RP"); // Reconstructed Particle in TreeP + TBranch * branch = 0x0; // 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); @@ -267,7 +506,7 @@ void AliMUONData::MakeBranch(Option_t* option) return ; } branch = TreeH()->Branch(branchname,&fHits,kBufferSize); - Info("MakeBranch","Making Branch %s for hits \n",branchname); + //Info("MakeBranch","Making Branch %s for hits \n",branchname); } //Creating Branches for Digits @@ -276,7 +515,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) { @@ -294,11 +535,42 @@ void AliMUONData::MakeBranch(Option_t* option) return; } TClonesArray * digits = Digits(iDetectionPlane); - branch = TreeD()->Branch(branchname, &digits, kBufferSize); - Info("MakeBranch","Making Branch %s for digits in detection plane %d\n",branchname,iDetectionPlane+1); + branch = TreeD()->Branch(branchname, &digits, kBufferSize,1); + //Info("MakeBranch","Making Branch %s for digits in detection plane %d\n",branchname,iDetectionPlane+1); } } + //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 // @@ -306,7 +578,9 @@ void AliMUONData::MakeBranch(Option_t* option) if (fRawClusters == 0x0) { fRawClusters = new TObjArray(AliMUONConstants::NTrackingCh()); for (Int_t i=0; iAddAt(new TClonesArray("AliMUONRawCluster",10000),i); + TClonesArray * tca = new TClonesArray("AliMUONRawCluster",1000); + tca->SetOwner(); + fRawClusters->AddAt(tca,i); } } @@ -326,7 +600,7 @@ void AliMUONData::MakeBranch(Option_t* option) return; } branch = TreeR()->Branch(branchname, &((*fRawClusters)[i]),kBufferSize); - Info("MakeBranch","Making Branch %s for rawcluster in detection plane %d\n",branchname,i+1); + //Info("MakeBranch","Making Branch %s for rawcluster in detection plane %d\n",branchname,i+1); } } @@ -338,7 +612,7 @@ void AliMUONData::MakeBranch(Option_t* option) branch = 0x0; if (fGlobalTrigger == 0x0) { - fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger",1); + fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger"); fNglobaltrigger = 0; } branch = TreeR()->GetBranch(branchname); @@ -347,7 +621,7 @@ void AliMUONData::MakeBranch(Option_t* option) return ; } branch = TreeR()->Branch(branchname, &fGlobalTrigger, kBufferSize); - Info("MakeBranch", "Making Branch %s for Global Trigger\n",branchname); + //Info("MakeBranch", "Making Branch %s for Global Trigger\n",branchname); // // one branch for local trigger @@ -365,11 +639,11 @@ void AliMUONData::MakeBranch(Option_t* option) return; } branch = TreeR()->Branch(branchname, &fLocalTrigger, kBufferSize); - Info("MakeBranch", "Making Branch %s for Global Trigger\n",branchname); + //Info("MakeBranch", "Making Branch %s for Global Trigger\n",branchname); } if (TreeT() && cRT ) { - if (fRecTracks == 0x0) fRecTracks = new TClonesArray("AliMUONTrack",10); + if (fRecTracks == 0x0) fRecTracks = new TClonesArray("AliMUONTrack",100); fNrectracks = 0; sprintf(branchname,"%sTrack",GetName()); branch = TreeT()->GetBranch(branchname); @@ -378,14 +652,49 @@ void AliMUONData::MakeBranch(Option_t* option) return ; } branch = TreeT()->Branch(branchname,&fRecTracks,kBufferSize); - Info("MakeBranch","Making Branch %s for tracks \n",branchname); + //Info("MakeBranch","Making Branch %s for tracks \n",branchname); + } +// trigger tracks + if (TreeT() && cRL ) { + if (fRecTriggerTracks == 0x0) fRecTriggerTracks = new TClonesArray("AliMUONTriggerTrack",100); + fNrectriggertracks = 0; + sprintf(branchname,"%sTriggerTrack",GetName()); + branch = TreeT()->GetBranch(branchname); + if (branch) { + Info("MakeBranch","Branch %s is already in tree.",GetName()); + return ; + } + branch = TreeT()->Branch(branchname,&fRecTriggerTracks,kBufferSize); + //Info("MakeBranch","Making Branch %s for trigger tracks \n",branchname); } - - if (TreeP() && cRP ) { - Info("MakeBranch","Making Branch for TreeP is not yet ready. \n"); - } } - +//____________________________________________________________________________ +TClonesArray* AliMUONData::RawClusters(Int_t DetectionPlane) +{ + // Getting Raw Clusters + if (fRawClusters) + return ( (TClonesArray*) fRawClusters->At(DetectionPlane) ); + else + return NULL; +} +//____________________________________________________________________________ +TClonesArray* AliMUONData::LocalTrigger() +{ + // Getting Local Trigger + if (fLocalTrigger) + return ( (TClonesArray*) fLocalTrigger ); + else + return NULL; +} +//____________________________________________________________________________ +TClonesArray* AliMUONData::GlobalTrigger() +{ + // Getting Global Trigger + if (fGlobalTrigger) + return ( (TClonesArray*) fGlobalTrigger ); + else + return NULL; +} //____________________________________________________________________________ void AliMUONData::ResetDigits() { @@ -398,6 +707,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() { @@ -431,14 +752,24 @@ void AliMUONData::ResetRecTracks() fNrectracks = 0; if (fRecTracks) fRecTracks->Clear(); } +//____________________________________________________________________________ +void AliMUONData::ResetRecTriggerTracks() +{ + // Reset tracks information + fNrectriggertracks = 0; + if (fRecTriggerTracks) fRecTriggerTracks->Clear(); +} //_____________________________________________________________________________ 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 + const char *cRL = strstr(option,"RL"); // Reconstructed Trigger Track in TreeT //const char *cRP = strstr(option,"RP"); // Reconstructed Particle in TreeP // Set branch address for the Hits, Digits, RawClusters, GlobalTrigger and LocalTrigger Tree. @@ -448,14 +779,18 @@ 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) { sprintf(branchname,"%sHits",GetName()); branch = TreeH()->GetBranch(branchname); if (branch) { - Info("SetTreeAddress","(%s) Setting for Hits",GetName()); + // Info("SetTreeAddress","(%s) Setting for Hits",GetName()); branch->SetAddress(&fHits); } else { //can be invoked before branch creation @@ -479,10 +814,38 @@ void AliMUONData::SetTreeAddress(Option_t* option) if (TreeD() && fDigits && cD) { for (int i=0; iGetBranch(branchname); - TClonesArray * digits = Digits(i); - if (branch) branch->SetAddress( &digits ); - else Warning("SetTreeAddress","(%s) Failed for Digits Detection plane %d. Can not find branch in tree.",GetName(),i); + if (fDigits) { + branch = TreeD()->GetBranch(branchname); + TClonesArray * digits = Digits(i); + 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); + } } } @@ -510,7 +873,7 @@ void AliMUONData::SetTreeAddress(Option_t* option) sprintf(branchname,"%sRawClusters%d",GetName(),i+1); if (fRawClusters) { branch = TreeR()->GetBranch(branchname); - if (branch) branch->SetAddress(&((*fRawClusters)[i])); + if (branch) branch->SetAddress( &((*fRawClusters)[i]) ); else Warning("SetTreeAddress","(%s) Failed for RawClusters Detection plane %d. Can not find branch in tree.",GetName(),i); } } @@ -528,11 +891,32 @@ void AliMUONData::SetTreeAddress(Option_t* option) else Warning("SetTreeAddress","(%s) Failed for LocalTrigger. Can not find branch in tree.",GetName()); } + if ( TreeT() ) { + if (fRecTracks == 0x0 && cRT) { + fRecTracks = new TClonesArray("AliMUONTrack",100); + } + + } if ( TreeT() && fRecTracks && cRT ) { sprintf(branchname,"%sTrack",GetName()); branch = TreeT()->GetBranch(branchname); if (branch) branch->SetAddress(&fRecTracks); else Warning("SetTreeAddress","(%s) Failed for Tracks. Can not find branch in tree.",GetName()); } +// trigger tracks + if ( TreeT() ) { + if (fRecTriggerTracks == 0x0 && cRL) { + fRecTriggerTracks = new TClonesArray("AliMUONTriggerTrack",100); + } + + } + if ( TreeT() && fRecTriggerTracks && cRL ) { + sprintf(branchname,"%sTriggerTrack",GetName()); + branch = TreeT()->GetBranch(branchname); + if (branch) branch->SetAddress(&fRecTriggerTracks); + else Warning("SetTreeAddress","(%s) Failed for Trigger Tracks. Can not find branch in tree.",GetName()); + } + + } //_____________________________________________________________________________