/* $Id$ */
-/// AliMUONData class
+/// \class AliMUONData
///
/// 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
+/// \author Gines Martinez, Subatech, September 2003
///
#include "AliMUONData.h"
-
-#include "AliLog.h"
+#include "AliMUONDataIterator.h"
#include "AliMUONConstants.h"
-#include "AliMUONHit.h"
#include "AliMUONDigit.h"
#include "AliMUONGlobalTrigger.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONRegionalTrigger.h"
+#include "AliMUONTriggerCrateStore.h"
+#include "AliMUONTriggerCircuit.h"
+#include "AliMUONGeometryTransformer.h"
#include "AliMUONRawCluster.h"
-#include "AliMUONTrack.h"
-#include "AliMUONTriggerTrack.h"
+
#include "AliRunLoader.h"
-#include "TArrayI.h"
-#include "TString.h"
+#include "AliStack.h"
+#include "AliLog.h"
+
+#include <TString.h>
+#include <TParticle.h>
+#include <TNtuple.h>
+#include <Riostream.h>
+#include <TFile.h>
/// \cond CLASSIMP
ClassImp(AliMUONData)
//_____________________________________________________________________________
AliMUONData::AliMUONData():
TNamed(),
+ fRunLoader(0x0),
fLoader(0x0),
- fHits(0x0),
- fDigits(0x0),
fSDigits(0x0),
- fRawClusters(0x0),
+ fDigits(0x0),
fGlobalTrigger(0x0),
fLocalTrigger(0x0),
fRegionalTrigger(0x0),
- fRecTracks(0x0),
- fRecTriggerTracks(0x0),
- fNhits(0),
- fNdigits(0x0),
fNSdigits(0x0),
- fNrawclusters(0x0),
+ fNdigits(0x0),
fNglobaltrigger(0),
fNlocaltrigger(0),
fNregionaltrigger(0),
- fNrectracks(0),
- fNrectriggertracks(0),
fSplitLevel(0),
fCurrentEvent(-1)
{
- // Default constructor
+/// Default constructor
}
//_____________________________________________________________________________
AliMUONData::AliMUONData(AliLoader * loader, const char* name, const char* title):
TNamed(name,title),
+ fRunLoader(0x0),
fLoader(loader),
- fHits(0x0),
- fDigits(0x0),
fSDigits(0x0),
- fRawClusters(0x0),
+ fDigits(0x0),
fGlobalTrigger(0x0),
fLocalTrigger(0x0),
fRegionalTrigger(0x0),
- fRecTracks(0x0),
- fRecTriggerTracks(0x0),
- fNhits(0),
- fNdigits(0x0),
fNSdigits(0x0),
- fNrawclusters(0x0),
+ fNdigits(0x0),
fNglobaltrigger(0),
fNlocaltrigger(0),
fNregionaltrigger(0),
- fNrectracks(0),
- fNrectriggertracks(0),
fSplitLevel(0),
fCurrentEvent(-1)
{
/// Standard constructor
}
+//_____________________________________________________________________________
+AliMUONData::AliMUONData(const char* galiceFile, const char* folderName):
+ TNamed("MUON", "MUON"),
+ fRunLoader(0x0),
+ fLoader(0x0),
+ fSDigits(0x0),
+ fDigits(0x0),
+ fGlobalTrigger(0x0),
+ fLocalTrigger(0x0),
+ fRegionalTrigger(0x0),
+ fNSdigits(0x0),
+ fNdigits(0x0),
+ fNglobaltrigger(0),
+ fNlocaltrigger(0),
+ fNregionaltrigger(0),
+ fSplitLevel(0),
+ fCurrentEvent(-1)
+{
+/// Constructor for loading data from gAlice file
+
+ fRunLoader = AliRunLoader::Open(galiceFile, folderName, "READ");
+ if (!fRunLoader) {
+ AliError(Form("Error opening %s file \n", galiceFile));
+ return;
+ }
+
+ fLoader = fRunLoader->GetLoader("MUONLoader");
+ if ( ! fLoader ) {
+ AliError(Form("Could get MUONLoader"));
+ return;
+ }
+}
+
//_____________________________________________________________________________
AliMUONData::~AliMUONData()
{
/// Destructor for AliMUONData
- if (fHits) {
- fHits->Delete();
- delete fHits;
- }
- if (fDigits) {
- fDigits->Delete();
- delete fDigits;
- }
if (fSDigits) {
fSDigits->Delete();
delete fSDigits;
}
- if (fRawClusters) {
- fRawClusters->Delete();
- delete fRawClusters;
+
+ if (fDigits) {
+ fDigits->Delete();
+ delete fDigits;
}
if (fGlobalTrigger){
fGlobalTrigger->Delete();
fLocalTrigger->Delete();
delete fLocalTrigger;
}
- if (fRecTracks){
- fRecTracks->Delete();
- delete fRecTracks;
- }
- if (fRecTriggerTracks){
- fRecTriggerTracks->Delete();
- delete fRecTriggerTracks;
- }
-}
-//____________________________________________________________________________
-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::AddHit2(Int_t fIshunt, Int_t track, Int_t detElemId,
- 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, detElemId,
- idpart, X, Y, Z,
- tof, momentum, theta,
- phi, length, destep,
- Xref,Yref,Zref, true);
-}
-//_____________________________________________________________________________
-void AliMUONData::AddDigit(Int_t id, Int_t *tracks, Int_t *charges, Int_t *digits)
-{
-/// Add a MUON digit to the list of Digits of the detection plane id
-
- TClonesArray &ldigits = * Digits(id) ;
- 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);
+ if (fRunLoader) {
+ fRunLoader->UnloadAll();
+ delete fRunLoader;
+ }
}
//_____________________________________________________________________________
-void AliMUONData::AddSDigit(Int_t id, Int_t *tracks, Int_t *charges, Int_t *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(tracks,charges,sdigits);
+ new(lSdigits[fNSdigits[id]++]) AliMUONDigit(Sdigit);
}
//_____________________________________________________________________________
-void AliMUONData::AddSDigit(Int_t id, const AliMUONDigit& Sdigit)
+void AliMUONData::AddDigit(Int_t id, const AliMUONDigit& digit)
{
-/// Add a MUON Sdigit to the list of SDigits of the detection plane id
+/// Add a MUON digit to the list of Digits of the detection plane id
- TClonesArray &lSdigits = * SDigits(id) ;
- new(lSdigits[fNSdigits[id]++]) AliMUONDigit(Sdigit);
+ TClonesArray &ldigits = * Digits(id) ;
+ new(ldigits[fNdigits[id]++]) AliMUONDigit(digit);
}
//_____________________________________________________________________________
new(localTrigger[fNlocaltrigger++]) AliMUONLocalTrigger(trigger);
}
-//_____________________________________________________________________________
-void AliMUONData::AddRawCluster(Int_t id, const AliMUONRawCluster& c)
-{
-/// Add a MUON rawcluster to the list in the detection plane id
-
- TClonesArray &lrawcl = *((TClonesArray*) fRawClusters->At(id));
- new(lrawcl[fNrawclusters[id]++]) AliMUONRawCluster(c);
-}
-//_____________________________________________________________________________
-void AliMUONData::AddRecTrack(const AliMUONTrack& track)
-{
-/// Add a MUON rectrack
-
- TClonesArray &lrectracks = *fRecTracks;
- new(lrectracks[fNrectracks++]) AliMUONTrack(track);
-}
-//_____________________________________________________________________________
-void AliMUONData::AddRecTriggerTrack(const AliMUONTriggerTrack& triggertrack)
-{
-/// Add a MUON triggerrectrack
-
- TClonesArray &lrectriggertracks = *fRecTriggerTracks;
- new(lrectriggertracks[fNrectriggertracks++]) AliMUONTriggerTrack(triggertrack);
-}
-//____________________________________________________________________________
-TClonesArray* AliMUONData::Digits(Int_t DetectionPlane) const
-{
-/// Getting List of Digits
-
- if (fDigits)
- return ( (TClonesArray*) fDigits->At(DetectionPlane) );
- else
- return NULL;
-}
//____________________________________________________________________________
TClonesArray* AliMUONData::SDigits(Int_t DetectionPlane) const
{
return NULL;
}
//____________________________________________________________________________
-Bool_t AliMUONData::IsRawClusterBranchesInTree()
+TClonesArray* AliMUONData::Digits(Int_t DetectionPlane) const
{
-/// Checking if there are RawCluster Branches In TreeR
+/// Getting List of Digits
- if (TreeR()==0x0) {
- AliError("No treeR in memory");
- return kFALSE;
- }
- else {
- char branchname[30];
- sprintf(branchname,"%sRawClusters1",GetName());
- TBranch * branch = 0x0;
- branch = TreeR()->GetBranch(branchname);
- if (branch) return kTRUE;
- else return kFALSE;
- }
+ if (fDigits)
+ return ( (TClonesArray*) fDigits->At(DetectionPlane) );
+ else
+ return NULL;
}
//____________________________________________________________________________
Bool_t AliMUONData::IsDigitsBranchesInTree()
{
-/// Checking if there are RawCluster Branches In TreeR
+/// Checking if there are Digits Branches In TreeD
if (TreeD()==0x0) {
AliError("No treeD in memory");
}
}
//____________________________________________________________________________
-Bool_t AliMUONData::IsTriggerBranchesInTree()
-{
-/// Checking if there are Trigger Branches In TreeR
- if (TreeR()==0x0) {
- AliError("No treeR in memory");
- return kFALSE;
- }
- else {
- char branchname[30];
- sprintf(branchname,"%sLocalTrigger",GetName());
- TBranch * branch = 0x0;
- branch = TreeR()->GetBranch(branchname);
- if (branch) return kTRUE;
- else return kFALSE;
- }
-}
-//____________________________________________________________________________
Bool_t AliMUONData::IsTriggerBranchesInTreeD()
{
-/// Checking if there are Trigger Branches In TreeR
+/// Checking if there are Trigger Branches In TreeD
if (TreeD()==0x0) {
AliError("No treeD in memory");
return kFALSE;
}
}
-//____________________________________________________________________________
-Bool_t AliMUONData::IsTrackBranchesInTree()
-{
-/// Checking if there are Track Branches In TreeT
- if (TreeT()==0x0) {
- AliError("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) {
- AliError("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 *cD = strstr(option,"D"); // Digits branches in TreeD
const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeD
- const char *cTC = strstr(option,"TC"); // global and local Trigger branches Copy 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];
TBranch * branch = 0x0;
- // Filling TreeH
- if ( TreeH() && cH )
+ // Filling TreeS
+ if ( TreeS() && cS)
{
- TreeH()->Fill();
- }
-
+ TreeS()->Fill();
+ }
+
// Filling TreeD
if ( TreeD() && cD && cGLT )
}
}
} // end of TreeD() handling.
-
- // Filling TreeS
- if ( TreeS() && cS)
- {
- TreeS()->Fill();
- }
-
- // Filling TreeR
-
- if ( TreeR() && cRC && cTC )
- {
- TreeR()->Fill();
- }
- else
- {
- if ( TreeR() && cRC )
- {
- if ( IsTriggerBranchesInTree() )
- {
- // Branch per branch filling
- for (int i=0; i<AliMUONConstants::NTrackingCh(); i++)
- {
- sprintf(branchname,"%sRawClusters%d",GetName(),i+1);
- branch = TreeR()->GetBranch(branchname);
- branch->Fill();
- }
- }
- else
- {
- TreeR()->Fill();
- }
- }
-
- if ( TreeR() && cTC)
- {
- if (IsRawClusterBranchesInTree())
- {
- // Branch per branch filling
- sprintf(branchname,"%sLocalTrigger",GetName());
- branch = TreeR()->GetBranch(branchname);
- branch->Fill();
- sprintf(branchname,"%sRegionalTrigger",GetName());
- branch = TreeR()->GetBranch(branchname);
- branch->Fill();
- sprintf(branchname,"%sGlobalTrigger",GetName());
- branch = TreeR()->GetBranch(branchname);
- branch->Fill();
- }
- else
- {
- TreeR()->Fill();
- }
- }
- }
-
- // Filling TreeT
-
- if ( TreeT() && cRT && cRL )
- {
- TreeT()->Fill();
- }
- else
- {
- if ( TreeT() && cRT )
- {
- if (IsTriggerTrackBranchesInTree())
- {
- sprintf(branchname,"%sTrack",GetName());
- branch = TreeT()->GetBranch(branchname);
- branch->Fill();
- }
- else
- {
- TreeT()->Fill();
- }
- }
-
- if ( TreeT() && cRL )
- {
- if (IsTrackBranchesInTree())
- {
- sprintf(branchname,"%sTriggerTrack",GetName());
- branch = TreeT()->GetBranch(branchname);
- branch->Fill();
- }
- else
- {
- TreeT()->Fill();
- }
- }
- }
}
//_____________________________________________________________________________
const Int_t kBufferSize = 4000;
char branchname[30];
-
- const char *cH = strstr(option,"H");
- const char *cD = strstr(option,"D"); // Digits branches in TreeD
+ //Setting Data Container
+ SetDataContainer(option);
+
const char *cS = strstr(option,"S"); // Digits branches in TreeS
- const char *cRC = strstr(option,"RC"); // RawCluster branches in TreeR
+ const char *cD = strstr(option,"D"); // Digits branches in TreeD
const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeD
- const char *cTC = strstr(option,"TC"); // global and local Trigger branches Copy 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
TBranch * branch = 0x0;
- // Creating Branches for Hits
- if (TreeH() && cH) {
-
- 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);
- if (branch) {
- AliInfo(Form("MakeBranch","Branch %s is already in tree.",branchname));
- return ;
+ //Creating Branches for SDigits
+ if (TreeS() && cS ) {
+ // one branch for Sdigits per chamber
+ for (Int_t iDetectionPlane=0; iDetectionPlane<AliMUONConstants::NCh() ;iDetectionPlane++) {
+ sprintf(branchname,"%sSDigits%d",GetName(),iDetectionPlane+1);
+ branch = 0x0;
+ branch = TreeS()->GetBranch(branchname);
+ if (branch) {
+ AliInfo(Form("Branch %s is already in tree.",branchname));
+ 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);
}
- branch = TreeH()->Branch(branchname,&fHits,kBufferSize);
- //Info("MakeBranch","Making Branch %s for hits \n",branchname);
- }
-
+ }
+
//Creating Branches for Digits
TTree* treeD = 0x0;
if ( cD || cGLT )
if ( treeD && cD )
{
// one branch for digits per chamber
- if (fDigits == 0x0)
- {
- fDigits = new TObjArray(AliMUONConstants::NCh());
- for (Int_t iDetectionPlane=0; iDetectionPlane<AliMUONConstants::NCh() ;iDetectionPlane++)
- {
- TClonesArray * tca = new TClonesArray("AliMUONDigit",10000);
- tca->SetOwner();
- fDigits->AddAt(tca,iDetectionPlane);
- }
- }
- if (fNdigits == 0x0)
- {
- fNdigits = new Int_t[AliMUONConstants::NCh()];
- for (Int_t iDetectionPlane=0; iDetectionPlane<AliMUONConstants::NCh() ;iDetectionPlane++)
- {
- fNdigits[iDetectionPlane]=0;
- }
- }
for (Int_t iDetectionPlane=0; iDetectionPlane<AliMUONConstants::NCh() ;iDetectionPlane++)
{
sprintf(branchname,"%sDigits%d",GetName(),iDetectionPlane+1);
// one branch for global trigger
//
sprintf(branchname,"%sGlobalTrigger",GetName());
-
- if (fGlobalTrigger == 0x0)
- {
- fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger");
- fNglobaltrigger = 0;
- }
branch = treeD->GetBranch(branchname);
if (branch)
{
//
sprintf(branchname,"%sRegionalTrigger",GetName());
branch = 0x0;
-
- if (fRegionalTrigger == 0x0)
- {
- fRegionalTrigger = new TClonesArray("AliMUONRegionalTrigger",16);
- fNregionaltrigger = 0;
- }
branch = treeD->GetBranch(branchname);
if (branch)
{
//
sprintf(branchname,"%sLocalTrigger",GetName());
branch = 0x0;
-
- if (fLocalTrigger == 0x0)
- {
- fLocalTrigger = new TClonesArray("AliMUONLocalTrigger",234);
- fNlocaltrigger = 0;
- }
branch = treeD->GetBranch(branchname);
if (branch)
{
}
branch = treeD->Branch(branchname, &fLocalTrigger, kBufferSize);
}
-
- //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; iDetectionPlane<AliMUONConstants::NCh() ;iDetectionPlane++) {
- TClonesArray * tca = new TClonesArray("AliMUONDigit",10000);
- tca->SetOwner();
- fSDigits->AddAt(tca,iDetectionPlane);
- }
- }
- if (fNSdigits == 0x0) {
- fNSdigits = new Int_t[AliMUONConstants::NCh()];
- for (Int_t iDetectionPlane=0; iDetectionPlane<AliMUONConstants::NCh() ;iDetectionPlane++) {
- fNSdigits[iDetectionPlane]=0;
- }
- }
- for (Int_t iDetectionPlane=0; iDetectionPlane<AliMUONConstants::NCh() ;iDetectionPlane++) {
- sprintf(branchname,"%sSDigits%d",GetName(),iDetectionPlane+1);
- branch = 0x0;
- branch = TreeS()->GetBranch(branchname);
- if (branch) {
- AliInfo(Form("Branch %s is already in tree.",branchname));
- 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
- //
- Int_t i;
- if (fRawClusters == 0x0) {
- fRawClusters = new TObjArray(AliMUONConstants::NTrackingCh());
- for (Int_t i=0; i<AliMUONConstants::NTrackingCh();i++) {
- TClonesArray * tca = new TClonesArray("AliMUONRawCluster",1000);
- tca->SetOwner();
- fRawClusters->AddAt(tca,i);
- }
- }
-
- if (fNrawclusters == 0x0) {
- fNrawclusters= new Int_t[AliMUONConstants::NTrackingCh()];
- for (Int_t i=0; i<AliMUONConstants::NTrackingCh();i++) {
- fNrawclusters[i]=0;
- }
- }
-
- for (i=0; i<AliMUONConstants::NTrackingCh() ;i++) {
- sprintf(branchname,"%sRawClusters%d",GetName(),i+1);
- branch = 0x0;
- branch = TreeR()->GetBranch(branchname);
- if (branch) {
- AliInfo(Form("Branch %s is already in tree.",branchname));
- return;
- }
- branch = TreeR()->Branch(branchname, &((*fRawClusters)[i]),kBufferSize);
- //Info("MakeBranch","Making Branch %s for rawcluster in detection plane %d\n",branchname,i+1);
- }
- }
-
- if (TreeR() && cTC ) {
- //
- // one branch for global trigger
- //
- sprintf(branchname,"%sGlobalTrigger",GetName());
- branch = 0x0;
-
- if (fGlobalTrigger == 0x0) {
- fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger");
- fNglobaltrigger = 0;
- }
- branch = TreeR()->GetBranch(branchname);
- if (branch) {
- AliInfo(Form("Branch GlobalTrigger is already in treeR."));
- return ;
- }
- branch = TreeR()->Branch(branchname, &fGlobalTrigger, kBufferSize);
- //Info("MakeBranch", "Making Branch %s for Global Trigger\n",branchname);
-
- //
- // one branch for regional trigger
- //
- sprintf(branchname,"%sRegionalTrigger",GetName());
- branch = 0x0;
-
- if (fRegionalTrigger == 0x0) {
- fRegionalTrigger = new TClonesArray("AliMUONRegionalTrigger",16);
- fNregionaltrigger = 0;
- }
- branch = TreeR()->GetBranch(branchname);
- if (branch) {
- AliInfo(Form("Branch RegionalTrigger is already in treeR."));
- return;
- }
- branch = TreeR()->Branch(branchname, &fRegionalTrigger, kBufferSize);
-
- //
- // one branch for local trigger
- //
- sprintf(branchname,"%sLocalTrigger",GetName());
- branch = 0x0;
-
- if (fLocalTrigger == 0x0) {
- fLocalTrigger = new TClonesArray("AliMUONLocalTrigger",234);
- fNlocaltrigger = 0;
- }
- branch = TreeR()->GetBranch(branchname);
- if (branch) {
- AliInfo(Form("Branch LocalTrigger is already in treeR."));
- return;
- }
- branch = TreeR()->Branch(branchname, &fLocalTrigger, kBufferSize);
- //Info("MakeBranch", "Making Branch %s for Global Trigger\n",branchname);
- }
-
- if (TreeT() && cRT ) {
- if (fRecTracks == 0x0) fRecTracks = new TClonesArray("AliMUONTrack",100);
- fNrectracks = 0;
- sprintf(branchname,"%sTrack",GetName());
- branch = TreeT()->GetBranch(branchname);
- if (branch) {
- AliInfo(Form("Branch %s is already in tree.",GetName()));
- return ;
- }
- branch = TreeT()->Branch(branchname,&fRecTracks,kBufferSize);
- //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) {
- AliInfo(Form("Branch %s is already in tree.",GetName()));
- return ;
- }
- branch = TreeT()->Branch(branchname,&fRecTriggerTracks,kBufferSize);
- //Info("MakeBranch","Making Branch %s for trigger tracks \n",branchname);
- }
}
+
//____________________________________________________________________________
-TClonesArray* AliMUONData::RawClusters(Int_t DetectionPlane)
+TClonesArray*
+AliMUONData::LocalTrigger() const
{
-/// Getting Raw Clusters
+/// Getting local trigger
- if (fRawClusters)
- return ( (TClonesArray*) fRawClusters->At(DetectionPlane) );
- else
- return NULL;
+ return fLocalTrigger;
}
//____________________________________________________________________________
TClonesArray*
-AliMUONData::LocalTrigger() const
+AliMUONData::RegionalTrigger() const
{
-/// Getting local trigger
+/// Getting regional trigger
- return fLocalTrigger;
+ return fRegionalTrigger;
}
//____________________________________________________________________________
return fGlobalTrigger;
}
-//____________________________________________________________________________
-void AliMUONData::ResetDigits()
-{
-/// Reset number of digits and the digits array for this detector
-
- if (fDigits == 0x0) return;
- for ( int i=0;i<AliMUONConstants::NCh();i++ ) {
- if ((*fDigits)[i]) ((TClonesArray*)fDigits->At(i))->Clear("C");
- if (fNdigits) fNdigits[i]=0;
- }
-}
//____________________________________________________________________________
void AliMUONData::ResetSDigits()
{
if (fNSdigits) fNSdigits[i]=0;
}
}
-//______________________________________________________________________________
-void AliMUONData::ResetHits()
-{
-/// Reset number of clusters and the cluster array for this detector
-
- fNhits = 0;
- if (fHits) fHits->Clear();
-}
-//_______________________________________________________________________________
-void AliMUONData::ResetRawClusters()
+//____________________________________________________________________________
+void AliMUONData::ResetDigits()
{
-/// Reset number of raw clusters and the raw clust array for this detector
+/// Reset number of digits and the digits array for this detector
- for ( int i=0;i<AliMUONConstants::NTrackingCh();i++ ) {
- if ((*fRawClusters)[i]) ((TClonesArray*)fRawClusters->At(i))->Clear();
- if (fNrawclusters) fNrawclusters[i]=0;
- }
+ if (fDigits == 0x0) return;
+ for ( int i=0;i<AliMUONConstants::NCh();i++ ) {
+ if ((*fDigits)[i]) ((TClonesArray*)fDigits->At(i))->Clear("C");
+ if (fNdigits) fNdigits[i]=0;
+ }
}
//_______________________________________________________________________________
void AliMUONData::ResetTrigger()
}
//____________________________________________________________________________
-void AliMUONData::ResetRecTracks()
+void AliMUONData::SetDataContainer(Option_t* option)
{
-/// Reset tracks information
+/// Setting data containers of muon data
- fNrectracks = 0;
- if (fRecTracks) fRecTracks->Delete(); // necessary to delete in case of memory allocation
-}
-//____________________________________________________________________________
-void AliMUONData::ResetRecTriggerTracks()
-{
-/// Reset tracks information
-
- fNrectriggertracks = 0;
- if (fRecTriggerTracks) fRecTriggerTracks->Delete(); // necessary to delete in case of memory allocation
-}
-//_____________________________________________________________________________
-void AliMUONData::SetTreeAddress(Option_t* option)
-{
-/// Setting Addresses to the events trees
+ const char *cS = strstr(option,"S"); // SDigits
+ const char *cD = strstr(option,"D"); // Digits
+ const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger
- 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 TreeD
- const char *cTC = strstr(option,"TC"); // global and local Trigger branches Copy 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.
- char branchname[30];
- TBranch * branch = 0x0;
-
AliDebug(1,Form("option=%s",option));
+
//
- // Branch address for hit tree
- if ( TreeH() && cH ) {
- 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());
- branch->SetAddress(&fHits);
+ // Container for Sdigits
+ if (cS) {
+ if (fSDigits == 0x0) {
+ AliDebug(1,"Creating fSDigits TObjArray");
+ fSDigits = new TObjArray(AliMUONConstants::NCh());
+ fNSdigits= new Int_t[AliMUONConstants::NCh()];
+ for (Int_t i=0; i<AliMUONConstants::NCh() ;i++) {
+ TClonesArray* a = new TClonesArray("AliMUONDigit",10000);
+ a->SetOwner();
+ fSDigits->AddAt(a,i);
+ AliDebug(1,Form("fSDigits[%d]=%p",i,a));
+ fNSdigits[i]=0;
+ }
}
- else { //can be invoked before branch creation
- AliWarning(Form("(%s) Failed for Hits. Can not find branch in tree.",GetName()));
+ else {
+ AliDebug(1,Form("fSDigits already there = %p",fSDigits));
}
- }
-
+ ResetSDigits();
+ }
+
//
- // Branch address for digit tree
- if ( TreeD() ) {
- if (fDigits == 0x0 && cD) {
+ // ObjArray of ClonesArrays for Digits
+ if ( cD ) {
+ if (fDigits == 0x0 ) {
fDigits = new TObjArray(AliMUONConstants::NCh());
fNdigits= new Int_t[AliMUONConstants::NCh()];
for (Int_t i=0; i<AliMUONConstants::NCh() ;i++) {
- fDigits->AddAt(new TClonesArray("AliMUONDigit",10000),i);
+ TClonesArray * tca = new TClonesArray("AliMUONDigit",10000);
+ tca->SetOwner();
+ fDigits->AddAt(tca,i);
fNdigits[i]=0;
}
+ }
+ else {
+ AliDebug(1,Form("fDigits already there = %p",fDigits));
}
- if (fLocalTrigger == 0x0 && cGLT) {
+ ResetDigits();
+ }
+
+ //
+ // ClonesArrays for Trigger
+ if ( cGLT ) {
+ if (fLocalTrigger == 0x0) {
fLocalTrigger = new TClonesArray("AliMUONLocalTrigger",234);
}
- if (fRegionalTrigger == 0x0 && cGLT) {
+ if (fRegionalTrigger == 0x0) {
fRegionalTrigger = new TClonesArray("AliMUONRegionalTrigger",16);
}
- if (fGlobalTrigger== 0x0 && cGLT) {
+ if (fGlobalTrigger== 0x0) {
fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger",1);
}
+ ResetTrigger();
}
+}
+
+//____________________________________________________________________________
+void AliMUONData::SetTreeAddress(Option_t* option)
+{
+ // Setting Data containers
+ SetDataContainer(option);
+
+/// Setting Addresses to the events trees
+
+ const char *cS = strstr(option,"S"); // SDigits branches in TreeS
+ const char *cD = strstr(option,"D"); // Digits branches in TreeD
+ const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeD
+ // Set branch address for the Hits, Digits, RawClusters, GlobalTrigger and LocalTrigger Tree.
+ char branchname[30];
+ TBranch * branch = 0x0;
+
+ AliDebug(1,Form("option=%s",option));
+
+ //
+ // Branch address for Sdigit tree
+ if (TreeS() && fSDigits && cS) {
+ AliDebug(1,"Setting branch addresses");
+ for (int i=0; i<AliMUONConstants::NCh(); i++) {
+ sprintf(branchname,"%sSDigits%d",GetName(),i+1);
+ if (fSDigits) {
+ AliDebug(1,Form("TreeS=%p for ich=%d branchname=%s",
+ TreeS(),i,branchname));
+ branch = TreeS()->GetBranch(branchname);
+ TClonesArray * sdigits = SDigits(i);
+ if (branch) branch->SetAddress( &sdigits );
+ else AliWarning(Form("(%s) Failed for SDigits Detection plane %d. Can not find branch in tree.",GetName(),i));
+ }
+ }
+ }
+
+ //
+ // Branch address for digit tree
if (TreeD() && fDigits && cD) {
for (int i=0; i<AliMUONConstants::NCh(); i++) {
sprintf(branchname,"%sDigits%d",GetName(),i+1);
if (branch) branch->SetAddress(&fGlobalTrigger);
else AliWarning(Form("(%s) Failed for GlobalTrigger. Can not find branch in treeD.",GetName()));
}
-
- //
- // Branch address for Sdigit tree
- if ( TreeS() && cS)
- {
- if (fSDigits == 0x0)
- {
- AliDebug(1,"Creating fSDigits TObjArray");
- fSDigits = new TObjArray(AliMUONConstants::NCh());
- fNSdigits= new Int_t[AliMUONConstants::NCh()];
- for (Int_t i=0; i<AliMUONConstants::NCh() ;i++)
- {
- TClonesArray* a = new TClonesArray("AliMUONDigit",10000);
- fSDigits->AddAt(a,i);
- AliDebug(1,Form("fSDigits[%d]=%p",i,a));
- fNSdigits[i]=0;
- }
- }
- else
- {
- AliDebug(1,Form("fSDigits already there = %p",fSDigits));
- }
- }
-
- if (TreeS() && fSDigits && cS) {
- AliDebug(1,"Setting branch addresses");
- for (int i=0; i<AliMUONConstants::NCh(); i++) {
- sprintf(branchname,"%sSDigits%d",GetName(),i+1);
- if (fSDigits) {
- AliDebug(1,Form("TreeS=%p for ich=%d branchname=%s",
- TreeS(),i,branchname));
- branch = TreeS()->GetBranch(branchname);
- TClonesArray * sdigits = SDigits(i);
- if (branch) branch->SetAddress( &sdigits );
- else AliWarning(Form("(%s) Failed for SDigits Detection plane %d. Can not find branch in tree.",GetName(),i));
- }
- }
- }
-
- //
- // Branch address for rawclusters, globaltrigger and local trigger tree
- if (TreeR() ) {
- if (fRawClusters == 0x0 && cRC) {
- fRawClusters = new TObjArray(AliMUONConstants::NTrackingCh());
- fNrawclusters= new Int_t[AliMUONConstants::NTrackingCh()];
- for (Int_t i=0; i<AliMUONConstants::NTrackingCh();i++) {
- fRawClusters->AddAt(new TClonesArray("AliMUONRawCluster",10000),i);
- fNrawclusters[i]=0;
- }
- }
- if (fLocalTrigger == 0x0 && cTC) {
- fLocalTrigger = new TClonesArray("AliMUONLocalTrigger",234);
- }
- if (fRegionalTrigger == 0x0 && cTC) {
- fRegionalTrigger = new TClonesArray("AliMUONRegionalTrigger",16);
- }
- if (fGlobalTrigger== 0x0 && cTC) {
- fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger",1);
- }
-
- }
- if ( TreeR() && fRawClusters && cRC && !strstr(cRC,"RCC")) {
- for (int i=0; i<AliMUONConstants::NTrackingCh(); i++) {
- sprintf(branchname,"%sRawClusters%d",GetName(),i+1);
- if (fRawClusters) {
- branch = TreeR()->GetBranch(branchname);
- if (branch) branch->SetAddress( &((*fRawClusters)[i]) );
- else AliWarning(Form("(%s) Failed for RawClusters Detection plane %d. Can not find branch in tree.",GetName(),i));
- }
- }
- }
- if ( TreeR() && fLocalTrigger && cTC) {
- sprintf(branchname,"%sLocalTrigger",GetName());
- branch = TreeR()->GetBranch(branchname);
- if (branch) branch->SetAddress(&fLocalTrigger);
- else AliWarning(Form("(%s) Failed for LocalTrigger. Can not find branch in treeR.",GetName()));
- }
-
- if ( TreeR() && fRegionalTrigger && cTC) {
- sprintf(branchname,"%sRegionalTrigger",GetName());
- branch = TreeR()->GetBranch(branchname);
- if (branch) branch->SetAddress(&fRegionalTrigger);
- else AliWarning(Form("(%s) Failed for RegionalTrigger. Can not find branch in treeR.",GetName()));
- }
-
- if ( TreeR() && fGlobalTrigger && cTC) {
- sprintf(branchname,"%sGlobalTrigger",GetName());
- branch = TreeR()->GetBranch(branchname);
- if (branch) branch->SetAddress(&fGlobalTrigger);
- else AliWarning(Form("(%s) Failed for GlobalTrigger. Can not find branch in treeR.",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 AliWarning(Form("(%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 AliWarning(Form("(%s) Failed for Trigger Tracks. Can not find branch in tree.",GetName()));
- }
-
-
}
//_____________________________________________________________________________
}
}
}
-
+
if ( options.Contains("S") )
{
for ( Int_t ich = 0; ich < AliMUONConstants::NCh(); ++ich)
digit->Print();
}
}
+ }
+}
+
+//_____________________________________________________________________________
+void
+AliMUONData::DumpSDigits(Int_t event2Check, Option_t* opt)
+{
+/// Dump SDigits
+
+ fLoader->LoadSDigits("READ");
+
+ // Event loop
+ Int_t nevents = fRunLoader->GetNumberOfEvents();
+ for (Int_t ievent=0; ievent<nevents; ievent++) {
+ if (event2Check!=0) ievent=event2Check;
+ printf(">>> Event %d \n",ievent);
+
+ // Getting event ievent
+ fRunLoader->GetEvent(ievent);
+ SetTreeAddress("S");
+ GetSDigits();
+
+ // Loop on chambers
+ Int_t nchambers = AliMUONConstants::NCh(); ;
+ for (Int_t ichamber=0; ichamber<nchambers; ichamber++) {
+ TClonesArray* digits = SDigits(ichamber);
+
+ // Loop on Sdigits
+ Int_t ndigits = (Int_t)digits->GetEntriesFast();
+ for (Int_t idigit=0; idigit<ndigits; idigit++) {
+ AliMUONDigit* mDigit = static_cast<AliMUONDigit*>(digits->At(idigit));
+ mDigit->Print(opt);
+ }
+ }
+ ResetSDigits();
+ if (event2Check!=0) ievent=nevents;
}
+ fLoader->UnloadSDigits();
+}
+//_____________________________________________________________________________
+void
+AliMUONData::DumpDigits(Int_t event2Check, Option_t* opt)
+{
+/// Dump digits
+
+ fLoader->LoadDigits("READ");
+
+ // Event loop
+ Int_t firstEvent = 0;
+ Int_t lastEvent = fRunLoader->GetNumberOfEvents()-1;
+ if ( event2Check != 0 ) {
+ firstEvent = event2Check;
+ lastEvent = event2Check;
+ }
+ for ( Int_t ievent = firstEvent; ievent <= lastEvent; ++ievent ) {
+ printf(">>> Event %d \n",ievent);
+ fRunLoader->GetEvent(ievent);
+
+ AliMUONDataIterator it(this, "digit", AliMUONDataIterator::kTrackingChambers);
+ AliMUONDigit* digit;
+
+ while ( ( digit = (AliMUONDigit*)it.Next() ) )
+ {
+ digit->Print(opt);
+ }
+ }
+ fLoader->UnloadDigits();
}