From 47dc4ee7eb4b85c13392c1be5726596c9679e58b Mon Sep 17 00:00:00 2001 From: pcrochet Date: Thu, 17 Aug 2006 12:18:00 +0000 Subject: [PATCH] Add and fill regional trigger container (Christian) --- MUON/AliMUONData.cxx | 144 +++++++++++++++++++++++------ MUON/AliMUONData.h | 7 ++ MUON/AliMUONRegionalTrigger.cxx | 94 +++++++++++++++++++ MUON/AliMUONRegionalTrigger.h | 53 +++++++++++ MUON/AliMUONTriggerElectronics.cxx | 36 +++++++- 5 files changed, 300 insertions(+), 34 deletions(-) create mode 100644 MUON/AliMUONRegionalTrigger.cxx create mode 100644 MUON/AliMUONRegionalTrigger.h diff --git a/MUON/AliMUONData.cxx b/MUON/AliMUONData.cxx index 665107cd767..996db06b2be 100644 --- a/MUON/AliMUONData.cxx +++ b/MUON/AliMUONData.cxx @@ -27,10 +27,11 @@ #include "AliLog.h" #include "AliMUONConstants.h" +#include "AliMUONHit.h" #include "AliMUONDigit.h" #include "AliMUONGlobalTrigger.h" -#include "AliMUONHit.h" #include "AliMUONLocalTrigger.h" +#include "AliMUONRegionalTrigger.h" #include "AliMUONRawCluster.h" #include "AliMUONTrack.h" #include "AliMUONTriggerTrack.h" @@ -52,6 +53,7 @@ ClassImp(AliMUONData) fRawClusters(0x0), fGlobalTrigger(0x0), fLocalTrigger(0x0), + fRegionalTrigger(0x0), fRecTracks(0x0), fRecTriggerTracks(0x0), fNhits(0), @@ -60,6 +62,7 @@ ClassImp(AliMUONData) fNrawclusters(0x0), fNglobaltrigger(0), fNlocaltrigger(0), + fNregionaltrigger(0), fNrectracks(0), fNrectriggertracks(0), fSplitLevel(0), @@ -77,6 +80,7 @@ AliMUONData::AliMUONData(AliLoader * loader, const char* name, const char* title fRawClusters(0x0), fGlobalTrigger(0x0), fLocalTrigger(0x0), + fRegionalTrigger(0x0), fRecTracks(0x0), fRecTriggerTracks(0x0), fNhits(0), @@ -85,6 +89,7 @@ AliMUONData::AliMUONData(AliLoader * loader, const char* name, const char* title fNrawclusters(0x0), fNglobaltrigger(0), fNlocaltrigger(0), + fNregionaltrigger(0), fNrectracks(0), fNrectriggertracks(0), fSplitLevel(0), @@ -118,6 +123,10 @@ AliMUONData::~AliMUONData() fGlobalTrigger->Delete(); delete fGlobalTrigger; } + if (fRegionalTrigger){ + fRegionalTrigger->Delete(); + delete fRegionalTrigger; + } if (fLocalTrigger){ fLocalTrigger->Delete(); delete fLocalTrigger; @@ -131,7 +140,38 @@ AliMUONData::~AliMUONData() 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) { @@ -173,37 +213,13 @@ void AliMUONData::AddGlobalTrigger(const AliMUONGlobalTrigger& trigger ) 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, - 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) +void AliMUONData::AddRegionalTrigger(const AliMUONRegionalTrigger& trigger) { - // 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); +/// add a MUON regional Trigger to the list + TClonesArray ®ionalTrigger = *fRegionalTrigger; + new(regionalTrigger[fNregionaltrigger++]) AliMUONRegionalTrigger(trigger); } //____________________________________________________________________________ void AliMUONData::AddLocalTrigger(const AliMUONLocalTrigger& trigger) @@ -213,6 +229,7 @@ void AliMUONData::AddLocalTrigger(const AliMUONLocalTrigger& trigger) TClonesArray &localTrigger = *fLocalTrigger; new(localTrigger[fNlocaltrigger++]) AliMUONLocalTrigger(trigger); } + //_____________________________________________________________________________ void AliMUONData::AddRawCluster(Int_t id, const AliMUONRawCluster& c) { @@ -419,9 +436,13 @@ void AliMUONData::Fill(Option_t* option) sprintf(branchname,"%sLocalTrigger",GetName()); branch = TreeD()->GetBranch(branchname); branch->Fill(); + sprintf(branchname,"%sRegionalTrigger",GetName()); + branch = TreeD()->GetBranch(branchname); + branch->Fill(); sprintf(branchname,"%sGlobalTrigger",GetName()); branch = TreeD()->GetBranch(branchname); branch->Fill(); + } else { @@ -470,6 +491,9 @@ void AliMUONData::Fill(Option_t* option) 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(); @@ -533,7 +557,7 @@ void AliMUONData::MakeBranch(Option_t* option) 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 TreeD - const char *cTC = strstr(option,"TC"); // global and local Trigger branches Copy in TreeR + 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 @@ -622,6 +646,26 @@ void AliMUONData::MakeBranch(Option_t* option) } branch = treeD->Branch(branchname, &fGlobalTrigger, kBufferSize); + // + // one branch for regional trigger + // + sprintf(branchname,"%sRegionalTrigger",GetName()); + branch = 0x0; + + if (fRegionalTrigger == 0x0) + { + fRegionalTrigger = new TClonesArray("AliMUONRegionalTrigger",16); + fNregionaltrigger = 0; + } + branch = treeD->GetBranch(branchname); + if (branch) + { + AliInfo(Form("Branch RegionalTrigger is already in treeD.")); + return; + } + branch = treeD->Branch(branchname, &fRegionalTrigger, kBufferSize); + + // // one branch for local trigger // @@ -724,7 +768,24 @@ void AliMUONData::MakeBranch(Option_t* option) } 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 // @@ -862,8 +923,11 @@ void AliMUONData::ResetTrigger() fNglobaltrigger = 0; if (fGlobalTrigger) fGlobalTrigger->Clear(); + fNregionaltrigger = 0; + if (fRegionalTrigger) fRegionalTrigger->Clear(); fNlocaltrigger = 0; if (fLocalTrigger) fLocalTrigger->Clear(); + } //____________________________________________________________________________ void AliMUONData::ResetRecTracks() @@ -937,6 +1001,9 @@ void AliMUONData::SetTreeAddress(Option_t* option) if (fLocalTrigger == 0x0 && cGLT) { fLocalTrigger = new TClonesArray("AliMUONLocalTrigger",234); } + if (fRegionalTrigger == 0x0 && cGLT) { + fRegionalTrigger = new TClonesArray("AliMUONRegionalTrigger",16); + } if (fGlobalTrigger== 0x0 && cGLT) { fGlobalTrigger = new TClonesArray("AliMUONGlobalTrigger",1); } @@ -961,6 +1028,12 @@ void AliMUONData::SetTreeAddress(Option_t* option) if (branch) branch->SetAddress(&fLocalTrigger); else AliWarning(Form("(%s) Failed for LocalTrigger. Can not find branch in treeD.",GetName())); } + if ( TreeD() && fRegionalTrigger && cGLT) { + sprintf(branchname,"%sRegionalTrigger",GetName()); + branch = TreeD()->GetBranch(branchname); + if (branch) branch->SetAddress(&fRegionalTrigger); + else AliWarning(Form("(%s) Failed for RegionalTrigger. Can not find branch in treeD.",GetName())); + } if ( TreeD() && fGlobalTrigger && cGLT) { sprintf(branchname,"%sGlobalTrigger",GetName()); branch = TreeD()->GetBranch(branchname); @@ -1020,6 +1093,9 @@ void AliMUONData::SetTreeAddress(Option_t* option) 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); } @@ -1041,6 +1117,14 @@ void AliMUONData::SetTreeAddress(Option_t* option) 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); diff --git a/MUON/AliMUONData.h b/MUON/AliMUONData.h index 09545f89c14..1305628f872 100644 --- a/MUON/AliMUONData.h +++ b/MUON/AliMUONData.h @@ -35,6 +35,7 @@ class AliMUONTriggerTrack; class AliMUONDigit; class AliMUONHit; class AliMUONLocalTrigger; +class AliMUONRegionalTrigger; class AliMUONGlobalTrigger; //__________________________________________________________________ @@ -74,6 +75,8 @@ class AliMUONData : public TNamed virtual void AddGlobalTrigger(const AliMUONGlobalTrigger& trigger); // use copy constructor virtual void AddLocalTrigger(const AliMUONLocalTrigger& trigger); // use copy constructor + + virtual void AddRegionalTrigger(const AliMUONRegionalTrigger& trigger); // use copy constructor virtual void AddRawCluster(Int_t id, const AliMUONRawCluster& clust); virtual void AddRecTrack(const AliMUONTrack& track); @@ -83,6 +86,7 @@ class AliMUONData : public TNamed TClonesArray* Digits(Int_t DetectionPlane) const; TClonesArray* SDigits(Int_t DetectionPlane) const; TClonesArray* LocalTrigger() const; + TClonesArray* RegionalTrigger() const; TClonesArray* GlobalTrigger() const; TClonesArray* RawClusters(Int_t DetectionPlane); @@ -192,6 +196,8 @@ class AliMUONData : public TNamed TObjArray* fRawClusters; ///< One event in TreeR/Rawcluster and one branch per tracking detection plane TClonesArray* fGlobalTrigger; ///< List of Global Trigger One event in TreeR/GlobalTriggerBranch TClonesArray* fLocalTrigger; ///< List of Local Trigger, One event in TreeR/LocalTriggerBranch + TClonesArray* fRegionalTrigger; ///< List of Regional Trigger, One event in TreeR/LocalTriggerBranch + TClonesArray* fRecTracks; ///< pointer to array of reconstructed tracks TClonesArray* fRecTriggerTracks; ///< pointer to array of reconstructed trigger tracks @@ -201,6 +207,7 @@ class AliMUONData : public TNamed Int_t* fNrawclusters; //!< Number of Raw Clusters Int_t fNglobaltrigger;//!< Number of Global trigger Int_t fNlocaltrigger; //!< Number of Local trigger + Int_t fNregionaltrigger; //!< Number of regional trigger Int_t fNrectracks; //!< Number of reconstructed tracks Int_t fNrectriggertracks; //!< Number of reconstructed tracks Int_t fSplitLevel; ///< Splitting of branches 0 no spitting (root files are smaller) 1 splitting (larger output files) diff --git a/MUON/AliMUONRegionalTrigger.cxx b/MUON/AliMUONRegionalTrigger.cxx new file mode 100644 index 00000000000..03960470563 --- /dev/null +++ b/MUON/AliMUONRegionalTrigger.cxx @@ -0,0 +1,94 @@ +/************************************************************************** + * 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. * + **************************************************************************/ + +/* $Id$ */ + + +#include "AliMUONRegionalTrigger.h" +#include +#include "AliLog.h" + +/// \class AliMUONRegionalTrigger +/// Regional Trigger algorithm data outputs +/// \author Ch. Finck + +/// \cond CLASSIMP +ClassImp(AliMUONRegionalTrigger) +/// \endcond + +//---------------------------------------------------------------------- +AliMUONRegionalTrigger::AliMUONRegionalTrigger() + : TObject(), + fId(0), + fLocalMask(0), + fOutput(0) +{ +/// Default constructor + fLocalOutput[0] = fLocalOutput[1] = 0; + +} +//---------------------------------------------------------------------- +AliMUONRegionalTrigger::AliMUONRegionalTrigger(const AliMUONRegionalTrigger& theMUONRegionalTrig) + : TObject(theMUONRegionalTrig) +{ +/// Copy constructor (useful for TClonesArray) + + fId = theMUONRegionalTrig.fId; + fLocalMask = theMUONRegionalTrig.fLocalMask; + fLocalOutput[0] = theMUONRegionalTrig.fLocalOutput[0]; + fLocalOutput[1] = theMUONRegionalTrig.fLocalOutput[1]; + fOutput = theMUONRegionalTrig.fOutput; + +} +//---------------------------------------------------------------------- +AliMUONRegionalTrigger& AliMUONRegionalTrigger::operator=(const AliMUONRegionalTrigger& theMUONRegionalTrig) +{ +/// Assigment operator; +/// equal operator (useful for non-pointer member in TClonesArray) + + if (this == &theMUONRegionalTrig) + return *this; + + // base class assignement + TObject::operator=(theMUONRegionalTrig); + + fId = theMUONRegionalTrig.fId; + fLocalMask = theMUONRegionalTrig.fLocalMask; + fLocalOutput[0] = theMUONRegionalTrig.fLocalOutput[0]; + fLocalOutput[1] = theMUONRegionalTrig.fLocalOutput[1]; + fOutput = theMUONRegionalTrig.fOutput; + + return *this; +} + + + +//---------------------------------------------------------------------- +void AliMUONRegionalTrigger::Print(Option_t* opt) const +{ + // + // Printing Regional Trigger information + // + TString sopt(opt); + sopt.ToUpper(); + + if ( sopt.Contains("FULL") ) { + + printf(" Id %d localMask %d localOutputs %d %d output %d\n", + fId, fLocalMask, fLocalOutput[0], fLocalOutput[1], fOutput); + + } +} + diff --git a/MUON/AliMUONRegionalTrigger.h b/MUON/AliMUONRegionalTrigger.h new file mode 100644 index 00000000000..1ff35fe88b4 --- /dev/null +++ b/MUON/AliMUONRegionalTrigger.h @@ -0,0 +1,53 @@ +#ifndef ALIMUONREGIONALTRIGGER_H +#define ALIMUONREGIONALTRIGGER_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id$ */ +// Revision of includes 07/05/2004 + +/// \ingroup base +/// \class AliMUONRegionalTrigger +/// \brief Reconstructed regional Trigger object +// Author Ch. Finck + +#include + +class AliMUONRegionalTrigger : public TObject { + public: + AliMUONRegionalTrigger(); + AliMUONRegionalTrigger(const AliMUONRegionalTrigger& rhs); // copy constructor ! + virtual ~AliMUONRegionalTrigger(){;} + AliMUONRegionalTrigger& operator=(const AliMUONRegionalTrigger& rhs); + + // getter methods + Int_t GetId() const {return fId;} + UInt_t GetLocalOutput(Int_t n) const {return fLocalOutput[n];} + UShort_t GetLocalMask() const {return fLocalMask;} + Char_t GetOutput() const {return fOutput;} + + // setter methods + void SetId(Int_t d) {fId = d;} + void SetLocalOutput(UInt_t local, Int_t n) {fLocalOutput[n] = local;} + void SetLocalMask(UShort_t m) {fLocalMask = m;} + void SetOutput(Char_t o) {fOutput = o;} + + virtual void Print(Option_t* opt="") const; + +private: + Int_t fId; ///< regional id + UInt_t fLocalOutput[2]; ///< local output Lpt & Hpt + UShort_t fLocalMask; ///< local mask + UChar_t fOutput; ///< regional output (single muon:2, unlike sign:1, like sign:1) + + + ClassDef(AliMUONRegionalTrigger,1) // reconstructed regional Trigger object +}; +#endif + + + + + + diff --git a/MUON/AliMUONTriggerElectronics.cxx b/MUON/AliMUONTriggerElectronics.cxx index 0be01be86af..51bc3722d32 100644 --- a/MUON/AliMUONTriggerElectronics.cxx +++ b/MUON/AliMUONTriggerElectronics.cxx @@ -29,6 +29,7 @@ #include "AliMUONRegionalTriggerBoard.h" #include "AliMUONGlobalTriggerBoard.h" #include "AliMUONLocalTrigger.h" +#include "AliMUONRegionalTrigger.h" #include "AliMUONGlobalTrigger.h" #include "AliMUON.h" #include "AliMUONData.h" @@ -640,6 +641,8 @@ void AliMUONTriggerElectronics::Digits2Trigger() { /// Main method to go from digits to trigger decision + AliMUONRegionalTrigger *pRegTrig = new AliMUONRegionalTrigger(); + ClearDigitNumbers(); fMUONData->ResetTrigger(); @@ -655,8 +658,14 @@ void AliMUONTriggerElectronics::Digits2Trigger() while ( ( cr = fCrates->NextCrate() ) ) { TObjArray *boards = cr->Boards(); - - for (Int_t j=1; jGetEntries(); j++) + + UInt_t regInpLpt = 0; + UInt_t regInpHpt = 0; + UShort_t localMask = 0x0; + + AliMUONRegionalTriggerBoard *regBoard = (AliMUONRegionalTriggerBoard*)boards->At(0); + + for (Int_t j = 1; j < boards->GetEntries(); j++) { TObject *o = boards->At(j); @@ -683,7 +692,16 @@ void AliMUONTriggerElectronics::Digits2Trigger() localtr[4] = (response & 12) >> 2; localtr[5] = (response & 48) >> 4; localtr[6] = (response & 3); - + + // calculates regional inputs from local for the moment + UInt_t hPt = (response >> 4) & 0x3; + UInt_t lPt = (response >> 2) & 0x3; + + regInpHpt |= hPt << (30 - (j-1)*2); + regInpLpt |= lPt << (30 - (j-1)*2); + localMask |= (0x1 << (j-1)); // local mask + + TBits rrr; rrr.Set(6,&response); @@ -702,10 +720,19 @@ void AliMUONTriggerElectronics::Digits2Trigger() AliMUONLocalTrigger *pLocTrig = new AliMUONLocalTrigger(localtr, fDigitNumbers[icirc]); fMUONData->AddLocalTrigger(*pLocTrig); + delete pLocTrig; } } } + pRegTrig->SetLocalOutput(regInpLpt, 0); + pRegTrig->SetLocalOutput(regInpHpt, 1); + pRegTrig->SetLocalMask(localMask); + pRegTrig->SetOutput((regBoard->GetResponse() >> 4) & 0xF); // to be uniformized (oct06 ?) + + fMUONData->AddRegionalTrigger(*pRegTrig); + } + delete pRegTrig; // GLOBAL TRIGGER INFORMATION: [0] -> LOW PT // [1] -> HIGH PT @@ -741,7 +768,8 @@ void AliMUONTriggerElectronics::Digits2Trigger() // ADD A LOCAL TRIGGER IN THE LIST fMUONData->AddGlobalTrigger(*pGloTrig); - + delete pGloTrig; + // NOW RESET ELECTRONICS Reset(); } -- 2.43.0