-#ifndef ALIVZEROLOGICALSIGNAL_H
-#define ALIVZEROLOGICALSIGNAL_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
- * reserved.
- *
- * See cxx source for full Copyright notice
- */
-
-#include <TObject.h>
-
-class AliVZEROLogicalSignal : public TObject {
-public:
- AliVZEROLogicalSignal();
- AliVZEROLogicalSignal(Float_t start, Float_t stop);
- AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay);
- ~AliVZEROLogicalSignal();
- AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal);
- AliVZEROLogicalSignal& operator= (const AliVZEROLogicalSignal &signal);
- AliVZEROLogicalSignal operator& (const AliVZEROLogicalSignal &signal) const;
- AliVZEROLogicalSignal operator| (const AliVZEROLogicalSignal &signal) const;
- // Print method
- virtual void Print(Option_t* opt="") const { AliInfo(Form("\t -> Start %f Stop %f\n ",fStart,fStop));}
-
- Float_t GetStartTime() const {return fStart;};
- Float_t GetStopTime() const {return fStop;};
- Float_t GetWidth() const {return (fStop - fStart);};
-
- void SetStartTime(Float_t time);
- void SetStopTime(Float_t time);
-
- Bool_t IsInCoincidence(Float_t time);
-
-private:
-
- Float_t fStart; // Start Time of the signal with respect to the LHC Clock
- Float_t fStop; // Stop Time of the signal with respect to the LHC Clock
-
-
- ClassDef( AliVZEROLogicalSignal, 1 )
-
-};
-
-#endif // ALIVZEROLOGICALSIGNAL_H
+#ifndef ALIVZEROLOGICALSIGNAL_H\r
+#define ALIVZEROLOGICALSIGNAL_H\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights\r
+ * reserved. \r
+ *\r
+ * See cxx source for full Copyright notice \r
+ */\r
+\r
+#include <TObject.h>\r
+\r
+class AliVZEROLogicalSignal : public TObject {\r
+public:\r
+ AliVZEROLogicalSignal();\r
+ AliVZEROLogicalSignal(Float_t start, Float_t stop);\r
+ AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay);\r
+ ~AliVZEROLogicalSignal();\r
+ AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal);\r
+ AliVZEROLogicalSignal& operator= (const AliVZEROLogicalSignal &signal);\r
+ AliVZEROLogicalSignal operator& (const AliVZEROLogicalSignal &signal) const;\r
+ AliVZEROLogicalSignal operator| (const AliVZEROLogicalSignal &signal) const;\r
+ // Print method\r
+ virtual void Print(Option_t* opt="") const { AliInfo(Form("\t%s -> Start %f Stop %f\n ",opt,fStart,fStop));}\r
+ \r
+ Float_t GetStartTime() const {return fStart;};\r
+ Float_t GetStopTime() const {return fStop;};\r
+ Float_t GetWidth() const {return (fStop - fStart);};\r
+ \r
+ void SetStartTime(Float_t time){fStart = time;};\r
+ void SetStopTime(Float_t time){fStop = time;};\r
+ \r
+ Bool_t IsInCoincidence(Float_t time);\r
+ \r
+private:\r
+ \r
+ Float_t fStart; // Start Time of the signal with respect to the LHC Clock\r
+ Float_t fStop; // Stop Time of the signal with respect to the LHC Clock\r
+ \r
+ \r
+ ClassDef( AliVZEROLogicalSignal, 1 ) \r
+ \r
+};\r
+\r
+#endif // ALIVZEROLOGICALSIGNAL_H\r
+\r
-
-/**************************************************************************
- * 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. *
- **************************************************************************/
-
-
-//
-//
-//
-#include <TObjString.h>
-
-#include "AliLog.h"
-#include "AliDCSValue.h"
-#include "AliVZEROTriggerData.h"
-
-ClassImp(AliVZEROTriggerData)
-//________________________________________________________________
-
-AliVZEROTriggerData::AliVZEROTriggerData() :
- TNamed(),
- fBBAThreshold(0),
- fBBCThreshold(0) ,
- fBGAThreshold(0) ,
- fBGCThreshold(0) ,
- fBBAForBGThreshold(0) ,
- fBBCForBGThreshold(0) ,
- fCentralityVOAThrLow(0) ,
- fCentralityVOAThrHigh(0) ,
- fCentralityVOCThrLow(0) ,
- fCentralityVOCThrHigh(0) ,
- fMultV0AThrLow(0) ,
- fMultV0AThrHigh(0) ,
- fMultV0CThrLow(0) ,
- fMultV0CThrHigh(0),
- fRun(0),
- fStartTime(0),
- fEndTime(0),
- fIsProcessed(kFALSE)
-
-{
- for(int i=0; i<kNCIUBoards ;i++) {
- fClk1Win1[i] = fClk1Win2[i] = 0;
- fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;
- fClk2Win1[i] = fClk2Win2[i] = 0;
- fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;
- fLatchWin1[i] = fLatchWin2[i] = 0;
- fResetWin1[i] = fResetWin2[i] = 0;
- fPedestalSubtraction[i] = kFALSE;
- }
-}
-//________________________________________________________________
-AliVZEROTriggerData::AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime) :
- TNamed(),
- fBBAThreshold(0),
- fBBCThreshold(0) ,
- fBGAThreshold(0) ,
- fBGCThreshold(0) ,
- fBBAForBGThreshold(0) ,
- fBBCForBGThreshold(0) ,
- fCentralityVOAThrLow(0) ,
- fCentralityVOAThrHigh(0) ,
- fCentralityVOCThrLow(0) ,
- fCentralityVOCThrHigh(0) ,
- fMultV0AThrLow(0) ,
- fMultV0AThrHigh(0) ,
- fMultV0CThrLow(0) ,
- fMultV0CThrHigh(0),
- fRun(nRun),
- fStartTime(startTime),
- fEndTime(endTime),
- fIsProcessed(kFALSE)
-{
- for(int i=0; i<kNCIUBoards ;i++) {
- fClk1Win1[i] = fClk1Win2[i] = 0;
- fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;
- fClk2Win1[i] = fClk2Win2[i] = 0;
- fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;
- fLatchWin1[i] = fLatchWin2[i] = 0;
- fResetWin1[i] = fResetWin2[i] = 0;
- fPedestalSubtraction[i] = kFALSE;
- }
- TString namst = "Trigger_FEE";
- SetName(namst.Data());
- SetTitle(namst.Data());
-
-}
-
-//________________________________________________________________
-AliVZEROTriggerData::~AliVZEROTriggerData(){
-}
-//_____________________________________________________________________________
-void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){
- TMap * params = data->GetParameters();
- TIter iter(params);
- TObjString* aliasName;
-
- while (( aliasName = (TObjString*) iter.Next() )) {
- AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName);
- Float_t val = aValue->GetFloat();
- //AliInfo(Form("%s : %f",aliasName->String().Data(), val));
- SetParameter(aliasName->String(),val);
-
- }
-}
-
-//_____________________________________________________________________________
-void AliVZEROTriggerData::SetParameter(TString name, Float_t val){
- Int_t iBoard = -1;
- Int_t iChannel = -1;
-
- TSeqCollection* nameSplit = name.Tokenize("/");
- TObjString * boardName = (TObjString *)nameSplit->At(2);
- if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard);
-
- TString paramName = ((TObjString *)nameSplit->At(3))->String();
- Char_t channel[2] ; channel[1] = '\0';
- channel[0] = paramName[paramName.Sizeof()-2];
- sscanf(channel,"%d",&iChannel);
-
- if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard-1);
- else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard-1);
- else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard-1);
- else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard-1);
- else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard-1);
- else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard-1);
- else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard-1);
- else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard-1);
- else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard-1);
- else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard-1);
- else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard-1);
- else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard-1);
- else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard-1);
- else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val);
- else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val);
- else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val);
- else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val);
- else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val);
- else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val);
- else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val);
- else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val);
- else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val);
- else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val);
- else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val);
- else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val);
- else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val);
- else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val);
- else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iBoard -1);
- else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard -1, iChannel-1);
- else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard -1, iChannel-1);
- else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard -1, iChannel-1);
- else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard -1, iChannel-1);
- else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard -1, iChannel-1);
- else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard -1, iChannel-1);
- else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard -1, iChannel-1);
- else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard -1, iChannel-1);
- else AliError(Form("No Setter found for FEE parameter : %s",name.Data()));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) {
- if(integrator) fPedestalCutOdd[board][channel] = val;
- else fPedestalCutEven[board][channel] = val;
- } else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) {
- if(integrator) return(fPedestalCutOdd[board][channel]);
- else return(fPedestalCutEven[board][channel]);
- }else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
- return 0;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) {
- if(integrator) fPedestalOdd[board][channel] = val;
- else fPedestalEven[board][channel] = val;
- } else AliError(Form("Impossible to write at : Board %d ; Channel %d ; Integrator %d ",board,channel,integrator));
-}
-//________________________________________________________________
-UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) {
- if(integrator) return(fPedestalOdd[board][channel]);
- else return(fPedestalEven[board][channel]);
- } else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
- return 0;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) fDelayHit[board][channel] = val;
- else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) return(fDelayHit[board][channel]);
- else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
- return 0;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) fDiscriThr[board][channel] = val;
- else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) return(fDiscriThr[board][channel]);
- else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
- return 0;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) fEnableCharge[board][channel] = val;
- else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) return(fEnableCharge[board][channel]);
- else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
- return kFALSE;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) fEnableTiming[board][channel] = val;
- else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)
-{
- if(board<kNCIUBoards && channel<kNChannels) return(fEnableTiming[board][channel]);
- else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
- return kFALSE;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)
-{
- if(output<kNTriggerOutputs) fTriggerSelected[output] = trigger;
- else AliError(Form("Trigger output number %d not valid",output));
-}
-
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)
-{
- if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win1(clks[t],t);
- else AliFatal("Profil Clock1 Win1 Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)
-{
- if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win1(clks[t],t);
- else AliFatal("Profil Clock2 Win1 Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)
-{
- if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win1[board] = clk;
- else AliError(Form("Profil Clock1 Win1 of board %d is not valid : %d",board,clk));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)
-{
- if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win1[board] = clk;
- else AliError(Form("Profil Clock2 Win1 of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)
-{
- if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win2(clks[t],t);
- else AliFatal("Profil Clock1 Win2 Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)
-{
- if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win2(clks[t],t);
- else AliFatal("Profil Clock2 Win2 Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)
-{
- if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win2[board] = clk;
- else AliError(Form("Profil Clock1 Win2 of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)
-{
- if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win2[board] = clk;
- else AliError(Form("Profil Clock2 Win2 of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)
-{
- if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win1(delays[t],t);
- else AliFatal("Profil Clock1 Win1 Delays Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)
-{
- if(delay>1023){
- AliWarning(Form("Profil Clock1 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));
- delay = delay & 0x3FF;
- }
- if(board<kNCIUBoards) fDelayClk1Win1[board] = delay;
- else AliError("Trying to write out of the array");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)
-{
- if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win1(delays[t],t);
- else AliFatal("Profil Clock2 Win1 Delays Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)
-{
- if(delay>1023){
- AliWarning(Form("Profil Clock2 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));
- delay = delay & 0x3FF;
- }
- if(board<kNCIUBoards) fDelayClk2Win1[board] = delay;
- else AliError("Trying to write out of the array");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)
-{
- if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win2(delays[t],t);
- else AliFatal("Profil Clock1 Win2 Delays Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)
-{
- if(delay>1023){
- AliWarning(Form("Profil Clock1 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));
- delay = delay & 0x3FF;
- }
- if(board<kNCIUBoards) fDelayClk1Win2[board] = delay;
- else AliError("Trying to write out of the array");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)
-{
- if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win2(delays[t],t);
- else AliFatal("Profil Clock2 Win2 Delays Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)
-{
- if(delay>1023){
- AliWarning(Form("Profil Clock2 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));
- delay = delay & 0x3FF;
- }
- if(board<kNCIUBoards) fDelayClk2Win2[board] = delay;
- else AliError("Trying to write out of the array");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){
- if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin1(latchs[t],t);
- else AliFatal("Latch Win1 profil Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)
-{
- if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin1[board] = latch;
- else AliError(Form("Latch Win1 profil of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){
- if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin2(latchs[t],t);
- else AliFatal("Latch Win2 profil Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)
-{
- if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin2[board] = latch;
- else AliError(Form("Latch Win2 profil of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){
- if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin1(resets[t],t);
- else AliFatal("Reset Win1 profil Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)
-{
- if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin1[board] = reset;
- else AliError(Form("Reset Win1 profil of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){
- if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin2(resets[t],t);
- else AliFatal("Reset Win2 profil Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)
-{
- if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin2[board] = reset;
- else AliError(Form("Reset Win2 profil of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){
- if(peds) for(int t=0; t<kNCIUBoards; t++) SetPedestalSubtraction(peds[t],t);
- else AliFatal("Pedestal Subtraction Not defined.");
-
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)
-{
- if((board<kNCIUBoards)) fPedestalSubtraction[board] = ped;
- else AliError(Form("Board %d is not valid",board));
-}
-
-//________________________________________________________________
-Bool_t AliVZEROTriggerData::IsClkValid(UShort_t clock){
- Bool_t word[5];
- Bool_t isValid = kTRUE;
- Short_t RisingEdge = 0;
- Short_t FallingEdge = 0;
- for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;
-
- if(word[0] != word[4]){
- if(word[4]) FallingEdge++;
- else RisingEdge++;
- }
- for(int i=1 ; i<5 ; i++){
- if(word[i] != word[i-1]) {
- if(word[i-1]) FallingEdge++;
- else RisingEdge++;
- }
- }
- if((FallingEdge>1)||(RisingEdge>1)) isValid = kFALSE;
- if(((RisingEdge==0)&&(FallingEdge==0)) &&(!word[0])) isValid = kFALSE;
- return isValid;
-}
+\r
+/**************************************************************************\r
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ * *\r
+ * Author: The ALICE Off-line Project. *\r
+ * Contributors are mentioned in the code where appropriate. *\r
+ * *\r
+ * Permission to use, copy, modify and distribute this software and its *\r
+ * documentation strictly for non-commercial purposes is hereby granted *\r
+ * without fee, provided that the above copyright notice appears in all *\r
+ * copies and that both the copyright notice and this permission notice *\r
+ * appear in the supporting documentation. The authors make no claims *\r
+ * about the suitability of this software for any purpose. It is *\r
+ * provided "as is" without express or implied warranty. *\r
+ **************************************************************************/\r
+\r
+\r
+// \r
+// \r
+// \r
+#include <TObjString.h>\r
+\r
+#include "AliLog.h"\r
+#include "AliDCSValue.h"\r
+#include "AliVZEROTriggerData.h"\r
+\r
+ClassImp(AliVZEROTriggerData)\r
+//________________________________________________________________\r
+\r
+AliVZEROTriggerData::AliVZEROTriggerData() :\r
+ TNamed(),\r
+ fBBAThreshold(0),\r
+ fBBCThreshold(0) , \r
+ fBGAThreshold(0) , \r
+ fBGCThreshold(0) , \r
+ fBBAForBGThreshold(0) , \r
+ fBBCForBGThreshold(0) , \r
+ fCentralityVOAThrLow(0) , \r
+ fCentralityVOAThrHigh(0) , \r
+ fCentralityVOCThrLow(0) , \r
+ fCentralityVOCThrHigh(0) , \r
+ fMultV0AThrLow(0) , \r
+ fMultV0AThrHigh(0) , \r
+ fMultV0CThrLow(0) , \r
+ fMultV0CThrHigh(0),\r
+ fRun(0),\r
+ fStartTime(0),\r
+ fEndTime(0),\r
+ fIsProcessed(kFALSE) \r
+\r
+{\r
+ for(int i=0; i<kNCIUBoards ;i++) {\r
+ fClk1Win1[i] = fClk1Win2[i] = 0;\r
+ fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
+ fClk2Win1[i] = fClk2Win2[i] = 0;\r
+ fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
+ fLatchWin1[i] = fLatchWin2[i] = 0;\r
+ fResetWin1[i] = fResetWin2[i] = 0;\r
+ fPedestalSubtraction[i] = kFALSE;\r
+ }\r
+}\r
+//________________________________________________________________\r
+AliVZEROTriggerData::AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime) :\r
+ TNamed(),\r
+ fBBAThreshold(0),\r
+ fBBCThreshold(0) , \r
+ fBGAThreshold(0) , \r
+ fBGCThreshold(0) , \r
+ fBBAForBGThreshold(0) , \r
+ fBBCForBGThreshold(0) , \r
+ fCentralityVOAThrLow(0) , \r
+ fCentralityVOAThrHigh(0) , \r
+ fCentralityVOCThrLow(0) , \r
+ fCentralityVOCThrHigh(0) , \r
+ fMultV0AThrLow(0) , \r
+ fMultV0AThrHigh(0) , \r
+ fMultV0CThrLow(0) , \r
+ fMultV0CThrHigh(0),\r
+ fRun(nRun),\r
+ fStartTime(startTime),\r
+ fEndTime(endTime),\r
+ fIsProcessed(kFALSE)\r
+{\r
+ for(int i=0; i<kNCIUBoards ;i++) {\r
+ fClk1Win1[i] = fClk1Win2[i] = 0;\r
+ fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
+ fClk2Win1[i] = fClk2Win2[i] = 0;\r
+ fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
+ fLatchWin1[i] = fLatchWin2[i] = 0;\r
+ fResetWin1[i] = fResetWin2[i] = 0;\r
+ fPedestalSubtraction[i] = kFALSE;\r
+ }\r
+ TString namst = "Trigger_FEE";\r
+ SetName(namst.Data());\r
+ SetTitle(namst.Data());\r
+ \r
+}\r
+//________________________________________________________________\r
+AliVZEROTriggerData::AliVZEROTriggerData(const AliVZEROTriggerData& triggerdata) :\r
+TNamed(),\r
+fBBAThreshold(0),\r
+fBBCThreshold(0) , \r
+fBGAThreshold(0) , \r
+fBGCThreshold(0) , \r
+fBBAForBGThreshold(0) , \r
+fBBCForBGThreshold(0) , \r
+fCentralityVOAThrLow(0) , \r
+fCentralityVOAThrHigh(0) , \r
+fCentralityVOCThrLow(0) , \r
+fCentralityVOCThrHigh(0) , \r
+fMultV0AThrLow(0) , \r
+fMultV0AThrHigh(0) , \r
+fMultV0CThrLow(0) , \r
+fMultV0CThrHigh(0),\r
+fRun(0),\r
+fStartTime(0),\r
+fEndTime(0),\r
+fIsProcessed(kFALSE) \r
+{\r
+ // copy constructor\r
+ \r
+ AliInfo("Not implemented");\r
+}\r
+\r
+//________________________________________________________________\r
+AliVZEROTriggerData::~AliVZEROTriggerData(){\r
+}\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){\r
+ TMap * params = data->GetParameters();\r
+ TIter iter(params); \r
+ TObjString* aliasName;\r
+ \r
+ while (( aliasName = (TObjString*) iter.Next() )) {\r
+ AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName);\r
+ Float_t val = aValue->GetFloat();\r
+ //AliInfo(Form("%s : %f",aliasName->String().Data(), val));\r
+ SetParameter(aliasName->String(),val);\r
+ \r
+ } \r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerData::SetParameter(TString name, Float_t val){\r
+ Int_t iBoard = -1;\r
+ Int_t iChannel = -1;\r
+\r
+ TSeqCollection* nameSplit = name.Tokenize("/");\r
+ TObjString * boardName = (TObjString *)nameSplit->At(2);\r
+ if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard);\r
+ \r
+ TString paramName = ((TObjString *)nameSplit->At(3))->String();\r
+ Char_t channel[2] ; channel[1] = '\0';\r
+ channel[0] = paramName[paramName.Sizeof()-2];\r
+ sscanf(channel,"%d",&iChannel);\r
+ \r
+ if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard-1);\r
+ else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard-1);\r
+ else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val);\r
+ else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val);\r
+ else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val);\r
+ else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val);\r
+ else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val);\r
+ else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val);\r
+ else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val);\r
+ else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val);\r
+ else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val);\r
+ else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val);\r
+ else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val);\r
+ else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val);\r
+ else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val);\r
+ else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val);\r
+ else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iBoard -1);\r
+ else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard -1, iChannel-1);\r
+ else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard -1, iChannel-1);\r
+ else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard -1, iChannel-1);\r
+ else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard -1, iChannel-1);\r
+ else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard -1, iChannel-1);\r
+ else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard -1, iChannel-1);\r
+ else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard -1, iChannel-1);\r
+ else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard -1, iChannel-1);\r
+ else AliError(Form("No Setter found for FEE parameter : %s",name.Data()));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) {\r
+ if(integrator) fPedestalCutOdd[board][channel] = val;\r
+ else fPedestalCutEven[board][channel] = val;\r
+ } else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) {\r
+ if(integrator) return(fPedestalCutOdd[board][channel]);\r
+ else return(fPedestalCutEven[board][channel]);\r
+ }else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+ return 0;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) {\r
+ if(integrator) fPedestalOdd[board][channel] = val;\r
+ else fPedestalEven[board][channel] = val;\r
+ } else AliError(Form("Impossible to write at : Board %d ; Channel %d ; Integrator %d ",board,channel,integrator));\r
+}\r
+//________________________________________________________________\r
+UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) {\r
+ if(integrator) return(fPedestalOdd[board][channel]);\r
+ else return(fPedestalEven[board][channel]);\r
+ } else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+ return 0;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) fDelayHit[board][channel] = val;\r
+ else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) return(fDelayHit[board][channel]);\r
+ else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+ return 0;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) fDiscriThr[board][channel] = val;\r
+ else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) return(fDiscriThr[board][channel]);\r
+ else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+ return 0;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) fEnableCharge[board][channel] = val;\r
+ else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) return(fEnableCharge[board][channel]);\r
+ else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+ return kFALSE;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) fEnableTiming[board][channel] = val;\r
+ else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)\r
+{\r
+ if(board<kNCIUBoards && channel<kNChannels) return(fEnableTiming[board][channel]);\r
+ else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+ return kFALSE;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)\r
+{\r
+ if(output<kNTriggerOutputs) fTriggerSelected[output] = trigger;\r
+ else AliError(Form("Trigger output number %d not valid",output));\r
+}\r
+\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)\r
+{\r
+ if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win1(clks[t],t);\r
+ else AliFatal("Profil Clock1 Win1 Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)\r
+{\r
+ if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win1(clks[t],t);\r
+ else AliFatal("Profil Clock2 Win1 Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)\r
+{\r
+ if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win1[board] = clk;\r
+ else AliError(Form("Profil Clock1 Win1 of board %d is not valid : %d",board,clk));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)\r
+{\r
+ if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win1[board] = clk;\r
+ else AliError(Form("Profil Clock2 Win1 of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)\r
+{\r
+ if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win2(clks[t],t);\r
+ else AliFatal("Profil Clock1 Win2 Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)\r
+{\r
+ if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win2(clks[t],t);\r
+ else AliFatal("Profil Clock2 Win2 Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)\r
+{\r
+ if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win2[board] = clk;\r
+ else AliError(Form("Profil Clock1 Win2 of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)\r
+{\r
+ if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win2[board] = clk;\r
+ else AliError(Form("Profil Clock2 Win2 of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)\r
+{\r
+ if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win1(delays[t],t);\r
+ else AliFatal("Profil Clock1 Win1 Delays Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)\r
+{\r
+ if(delay>1023){\r
+ AliWarning(Form("Profil Clock1 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
+ delay = delay & 0x3FF;\r
+ }\r
+ if(board<kNCIUBoards) fDelayClk1Win1[board] = delay;\r
+ else AliError("Trying to write out of the array");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)\r
+{\r
+ if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win1(delays[t],t);\r
+ else AliFatal("Profil Clock2 Win1 Delays Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)\r
+{\r
+ if(delay>1023){\r
+ AliWarning(Form("Profil Clock2 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
+ delay = delay & 0x3FF;\r
+ }\r
+ if(board<kNCIUBoards) fDelayClk2Win1[board] = delay;\r
+ else AliError("Trying to write out of the array");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)\r
+{\r
+ if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win2(delays[t],t);\r
+ else AliFatal("Profil Clock1 Win2 Delays Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)\r
+{\r
+ if(delay>1023){\r
+ AliWarning(Form("Profil Clock1 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
+ delay = delay & 0x3FF;\r
+ }\r
+ if(board<kNCIUBoards) fDelayClk1Win2[board] = delay;\r
+ else AliError("Trying to write out of the array");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)\r
+{\r
+ if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win2(delays[t],t);\r
+ else AliFatal("Profil Clock2 Win2 Delays Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)\r
+{\r
+ if(delay>1023){\r
+ AliWarning(Form("Profil Clock2 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
+ delay = delay & 0x3FF;\r
+ }\r
+ if(board<kNCIUBoards) fDelayClk2Win2[board] = delay;\r
+ else AliError("Trying to write out of the array");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){\r
+ if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin1(latchs[t],t);\r
+ else AliFatal("Latch Win1 profil Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)\r
+{\r
+ if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin1[board] = latch;\r
+ else AliError(Form("Latch Win1 profil of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){\r
+ if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin2(latchs[t],t);\r
+ else AliFatal("Latch Win2 profil Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)\r
+{\r
+ if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin2[board] = latch;\r
+ else AliError(Form("Latch Win2 profil of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){\r
+ if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin1(resets[t],t);\r
+ else AliFatal("Reset Win1 profil Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)\r
+{\r
+ if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin1[board] = reset;\r
+ else AliError(Form("Reset Win1 profil of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){\r
+ if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin2(resets[t],t);\r
+ else AliFatal("Reset Win2 profil Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)\r
+{\r
+ if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin2[board] = reset;\r
+ else AliError(Form("Reset Win2 profil of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){\r
+ if(peds) for(int t=0; t<kNCIUBoards; t++) SetPedestalSubtraction(peds[t],t);\r
+ else AliFatal("Pedestal Subtraction Not defined.");\r
+ \r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)\r
+{\r
+ if((board<kNCIUBoards)) fPedestalSubtraction[board] = ped;\r
+ else AliError(Form("Board %d is not valid",board));\r
+}\r
+\r
+//________________________________________________________________\r
+Bool_t AliVZEROTriggerData::IsClkValid(UShort_t clock){\r
+ Bool_t word[5];\r
+ Bool_t isValid = kTRUE;\r
+ Short_t RisingEdge = 0;\r
+ Short_t FallingEdge = 0;\r
+ for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;\r
+ \r
+ if(word[0] != word[4]){\r
+ if(word[4]) FallingEdge++;\r
+ else RisingEdge++;\r
+ } \r
+ for(int i=1 ; i<5 ; i++){\r
+ if(word[i] != word[i-1]) {\r
+ if(word[i-1]) FallingEdge++;\r
+ else RisingEdge++;\r
+ }\r
+ }\r
+ if((FallingEdge>1)||(RisingEdge>1)) isValid = kFALSE;\r
+ if(((RisingEdge==0)&&(FallingEdge==0)) &&(!word[0])) isValid = kFALSE;\r
+ return isValid;\r
+}\r
+\r
-#ifndef ALIVZEROTRIGGERDATA_H
-#define ALIVZEROTRIGGERDATA_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
- * reserved.
- *
- * See cxx source for full Copyright notice
- */
-#include "AliVZERODataFEE.h"
-
-#include <TNamed.h>
-
-class AliVZEROTriggerData : public TNamed {
-public:
- AliVZEROTriggerData();
- AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime);
- ~AliVZEROTriggerData();
- AliVZEROTriggerData(const AliVZEROTriggerData &triggerData);
- AliVZEROTriggerData& operator= (const AliVZEROTriggerData &triggerData);
-
- void FillData(AliVZERODataFEE * data);
-
- // ----- Setters -----
-
- void SetClk1Win1(UShort_t* clks);
- void SetClk1Win1(UShort_t clk, Int_t board);
- void SetClk2Win1(UShort_t* clks);
- void SetClk2Win1(UShort_t clk, Int_t board);
-
- void SetClk1Win2(UShort_t* clks);
- void SetClk1Win2(UShort_t clk, Int_t board);
- void SetClk2Win2(UShort_t* clks);
- void SetClk2Win2(UShort_t clk, Int_t board);
-
- void SetDelayClk1Win1(UShort_t* delays);
- void SetDelayClk1Win1(UShort_t delay, Int_t board);
- void SetDelayClk2Win1(UShort_t* delays);
- void SetDelayClk2Win1(UShort_t delay, Int_t board);
-
- void SetDelayClk1Win2(UShort_t* delays);
- void SetDelayClk1Win2(UShort_t delay, Int_t board);
- void SetDelayClk2Win2(UShort_t* delays);
- void SetDelayClk2Win2(UShort_t delay, Int_t board);
-
- void SetLatchWin1(UShort_t *latchs);
- void SetLatchWin1(UShort_t latch, Int_t board);
- void SetLatchWin2(UShort_t *latchs);
- void SetLatchWin2(UShort_t latch, Int_t board);
-
- void SetResetWin1(UShort_t *resets);
- void SetResetWin1(UShort_t reset, Int_t board);
- void SetResetWin2(UShort_t *resets);
- void SetResetWin2(UShort_t reset, Int_t board);
-
- void SetPedestalSubtraction(Bool_t *peds);
- void SetPedestalSubtraction(Bool_t ped, Int_t board);
-
- void SetBBAThreshold(UShort_t th) {fBBAThreshold = th;};
- void SetBBCThreshold(UShort_t th) {fBBCThreshold = th;};
-
- void SetBGAThreshold(UShort_t th) {fBGAThreshold = th;};
- void SetBGCThreshold(UShort_t th) {fBGCThreshold = th;};
-
- void SetBBAForBGThreshold(UShort_t th) {fBBAForBGThreshold = th;};
- void SetBBCForBGThreshold(UShort_t th) {fBBCForBGThreshold = th;};
-
- void SetCentralityV0AThrLow(UShort_t th) {fCentralityVOAThrLow = th;};
- void SetCentralityV0AThrHigh(UShort_t th) {fCentralityVOAThrHigh = th;};
-
- void SetCentralityV0CThrLow(UShort_t th) {fCentralityVOCThrLow = th;};
- void SetCentralityV0CThrHigh(UShort_t th) {fCentralityVOCThrHigh = th;};
-
- void SetMultV0AThrLow(UShort_t th) {fMultV0AThrLow = th;};
- void SetMultV0AThrHigh(UShort_t th) {fMultV0AThrHigh = th;};
-
- void SetMultV0CThrLow(UShort_t th) {fMultV0CThrLow = th;};
- void SetMultV0CThrHigh(UShort_t th) {fMultV0CThrHigh = th;};
-
- void SetTriggerSelected(UShort_t trigger, Int_t output);
-
- void SetEnableCharge(Bool_t val, Int_t board, Int_t channel);
- void SetEnableTiming(Bool_t val, Int_t board, Int_t channel);
- void SetDiscriThr(UShort_t val, Int_t board, Int_t channel);
- void SetDelayHit(UShort_t val, Int_t board, Int_t channel);
- void SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel);
- void SetPedestalCut(UShort_t val, Int_t integrator, Int_t board, Int_t channel);
-
-
- // ----- Getters -----
-
- UShort_t * GetClk1Win1() const {return (UShort_t*)fClk1Win1;};
- UShort_t GetClk1Win1(Int_t board ) const {return (board<kNCIUBoards?fClk1Win1[board]:0);};
- UShort_t * GetClk2Win1() const {return (UShort_t*)fClk2Win1;};
- UShort_t GetClk2Win1(Int_t board ) const {return (board<kNCIUBoards?fClk2Win1[board]:0);};
-
- UShort_t * GetClk1Win2() const {return (UShort_t*)fClk1Win2;};
- UShort_t GetClk1Win2(Int_t board ) const {return (board<kNCIUBoards?fClk1Win2[board]:0);};
- UShort_t * GetClk2Win2() const {return (UShort_t*)fClk2Win2;};
- UShort_t GetClk2Win2(Int_t board ) const {return (board<kNCIUBoards?fClk2Win2[board]:0);};
-
- UShort_t * GetDelayClk1Win1() const {return (UShort_t*)fDelayClk1Win1;};
- UShort_t GetDelayClk1Win1(Int_t board ) const {return (board<kNCIUBoards?fDelayClk1Win1[board]:0);};
- UShort_t * GetDelayClk2Win1() const {return (UShort_t*)fDelayClk2Win1;};
- UShort_t GetDelayClk2Win1(Int_t board ) const {return (board<kNCIUBoards?fDelayClk2Win1[board]:0);};
-
- UShort_t * GetDelayClk1Win2() const {return (UShort_t*)fDelayClk1Win2;};
- UShort_t GetDelayClk1Win2(Int_t board ) const {return (board<kNCIUBoards?fDelayClk1Win2[board]:0);};
- UShort_t * GetDelayClk2Win2() const {return (UShort_t*)fDelayClk2Win2;};
- UShort_t GetDelayClk2Win2(Int_t board ) const {return (board<kNCIUBoards?fDelayClk2Win2[board]:0);};
-
- UShort_t * GetLatchWin1() const {return (UShort_t*)fLatchWin1;};
- UShort_t GetLatchWin1(Int_t board ) const {return (board<kNCIUBoards?fLatchWin1[board]:0);};
- UShort_t * GetLatchWin2() const {return (UShort_t*)fLatchWin2;};
- UShort_t GetLatchWin2(Int_t board ) const {return (board<kNCIUBoards?fLatchWin2[board]:0);};
-
- UShort_t * GetResetWin1() const {return (UShort_t*)fResetWin1;};
- UShort_t GetResetWin1(Int_t board ) const {return (board<kNCIUBoards?fResetWin1[board]:0);};
- UShort_t * GetResetWin2() const {return (UShort_t*)fResetWin2;};
- UShort_t GetResetWin2(Int_t board ) const {return (board<kNCIUBoards?fResetWin2[board]:0);};
-
- Bool_t * GetPedestalSubtraction() const {return (Bool_t*) fPedestalSubtraction;};
- Bool_t GetPedestalSubtraction(Int_t board ) const {return (board<kNCIUBoards?fPedestalSubtraction[board]:0);};
-
- UShort_t GetBBAThreshold() const {return fBBAThreshold;};
- UShort_t GetBBCThreshold() const {return fBBCThreshold;};
-
- UShort_t GetBGAThreshold() const {return fBGAThreshold;};
- UShort_t GetBGCThreshold() const {return fBGCThreshold;};
-
- UShort_t GetBBAForBGThreshold() const {return fBBAForBGThreshold;};
- UShort_t GetBBCForBGThreshold() const {return fBBCForBGThreshold;};
-
- UShort_t GetCentralityV0AThrLow() const {return fCentralityVOAThrLow;};
- UShort_t GetCentralityV0AThrHigh() const {return fCentralityVOAThrHigh;};
-
- UShort_t GetCentralityV0CThrLow() const {return fCentralityVOCThrLow;};
- UShort_t GetCentralityV0CThrHigh() const {return fCentralityVOCThrHigh;};
-
- UShort_t GetMultV0AThrLow() const {return fMultV0AThrLow;};
- UShort_t GetMultV0AThrHigh() const {return fMultV0AThrHigh;};
-
- UShort_t GetMultV0CThrLow() const {return fMultV0CThrLow;};
- UShort_t GetMultV0CThrHigh() const {return fMultV0CThrHigh;};
-
- UShort_t GetTriggerSelected(Int_t output) const {return (output<kNTriggerOutputs?fTriggerSelected[output]:0);};
-
- Bool_t GetEnableCharge(Int_t board, Int_t channel);
- Bool_t GetEnableTiming(Int_t board, Int_t channel);
- UShort_t GetDiscriThr(Int_t board, Int_t channel);
- UShort_t GetDelayHit(Int_t board, Int_t channel);
- UShort_t GetPedestal(Int_t integrator, Int_t board, Int_t channel);
- UShort_t GetPedestalCut(Int_t integrator, Int_t board, Int_t channel);
-
- enum {
- kNCIUBoards = AliVZERODataFEE::kNCIUBoards,
- kNAliases = AliVZERODataFEE::kNAliases,
- kNTriggerOutputs = 5,
- kNChannels = 8
- };
-
-private:
-
- UShort_t fClk1Win1[kNCIUBoards]; //Profil of the Clock 1 of the Window 1 (BB window)
- UShort_t fClk2Win1[kNCIUBoards]; //Profil of the Clock 2 of the Window 1 (BB window)
- UShort_t fClk1Win2[kNCIUBoards]; //Profil of the Clock 1 of the Window 2 (BG window)
- UShort_t fClk2Win2[kNCIUBoards]; //Profil of the Clock 2 of the Window 2 (BG window)
- UShort_t fDelayClk1Win1[kNCIUBoards]; // Delays of the Clock 1 of the Window 1 (BB window)
- UShort_t fDelayClk2Win1[kNCIUBoards]; // Delays of the Clock 2 of the Window 1 (BB window)
- UShort_t fDelayClk1Win2[kNCIUBoards]; // Delays of the Clock 1 of the Window 2 (BG window)
- UShort_t fDelayClk2Win2[kNCIUBoards]; // Delays of the Clock 2 of the Window 2 (BG window)
- UShort_t fLatchWin1[kNCIUBoards]; //Profil of the Clock of the Latch signal of Window 1 (BB window)
- UShort_t fLatchWin2[kNCIUBoards]; //Profil of the Clock of the Latch signal of Window 2 (BG window)
- UShort_t fResetWin1[kNCIUBoards]; //Profil of the Clock of the Reset signal of Window 1 (BB window)
- UShort_t fResetWin2[kNCIUBoards]; //Profil of the Clock of the Reset signal of Window 2 (BG window)
- Bool_t fPedestalSubtraction[kNCIUBoards]; // Flag to en(dis)able pedestal subtraction before centrality trigger calculation
- UShort_t fBBAThreshold; // Minimum bias Threshold in number of channel hit for V0A
- UShort_t fBBCThreshold; // Minimum bias Threshold in number of channel hit for V0C
- UShort_t fBGAThreshold; // Beam Gas Threshold in number of channel hit for V0A
- UShort_t fBGCThreshold; // Beam Gas Threshold in number of channel hit for V0C
- UShort_t fBBAForBGThreshold; // BBA threshold for Beam Gas triggers (i.e. BBA and BGC)
- UShort_t fBBCForBGThreshold; // BBC threshold for Beam Gas triggers (i.e. BBC and BGA)
- UShort_t fCentralityVOAThrLow; // Threshold used for centrality triggers (i.e. CTA1 and CTC1)
- UShort_t fCentralityVOAThrHigh; // Threshold used for centrality triggers (i.e. CTA2 and CTC2)
- UShort_t fCentralityVOCThrLow; // Threshold used for centrality triggers (i.e. CTA1 and CTC1)
- UShort_t fCentralityVOCThrHigh; // Threshold used for centrality triggers (i.e. CTA2 and CTC2)
- UShort_t fMultV0AThrLow; // Threshold used for multiplicity triggers (i.e. MTA and MTC)
- UShort_t fMultV0AThrHigh; // Threshold used for multiplicity triggers (i.e. MTA and MTC)
- UShort_t fMultV0CThrLow; // Threshold used for multiplicity triggers (i.e. MTA and MTC)
- UShort_t fMultV0CThrHigh; // Threshold used for multiplicity triggers (i.e. MTA and MTC)
- UShort_t fTriggerSelected[kNTriggerOutputs]; // Triggers selected on the 5 outputs to CTP
- Bool_t fEnableCharge[kNCIUBoards][kNChannels]; // Flag to know is a channel is participating to the Charge triggers
- Bool_t fEnableTiming[kNCIUBoards][kNChannels]; // Flag to know is a channel is participating to the Timing triggers
- UShort_t fDiscriThr[kNCIUBoards][kNChannels]; // Threshold of each discriminator
- UShort_t fDelayHit[kNCIUBoards][kNChannels]; // Individual delays of each channel
- UShort_t fPedestalOdd[kNCIUBoards][kNChannels]; // Pedestals for the Odd integrators
- UShort_t fPedestalEven[kNCIUBoards][kNChannels]; // Pedestals for the Even integrators
- UShort_t fPedestalCutOdd[kNCIUBoards][kNChannels]; // Pedestals Cut for the Odd integrators
- UShort_t fPedestalCutEven[kNCIUBoards][kNChannels]; // Pedestals Cut for the Even integrators
-
- Int_t fRun; // Run number
- Int_t fStartTime; // Start time
- Int_t fEndTime; // End time
- TString fAliasNames[kNAliases]; // aliases for DCS data
- Bool_t fIsProcessed; // bool to know processing status
-
- Bool_t IsClkValid(UShort_t clock);
- void SetParameter(TString name, Float_t val);
-
-
- ClassDef( AliVZEROTriggerData, 1 )
-
-};
-
-
-#endif // ALIVZEROTRIGGERDATA_H
+#ifndef ALIVZEROTRIGGERDATA_H\r
+#define ALIVZEROTRIGGERDATA_H\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights\r
+ * reserved. \r
+ *\r
+ * See cxx source for full Copyright notice \r
+ */\r
+#include "AliVZERODataFEE.h"\r
+\r
+#include <TNamed.h>\r
+\r
+class AliVZEROTriggerData : public TNamed {\r
+public:\r
+ AliVZEROTriggerData();\r
+ AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime);\r
+ ~AliVZEROTriggerData();\r
+ AliVZEROTriggerData(const AliVZEROTriggerData &triggerData);\r
+ AliVZEROTriggerData& operator= (const AliVZEROTriggerData &/*triggerData*/){AliInfo("Not implemented");return *this;};\r
+ \r
+ void FillData(AliVZERODataFEE * data);\r
+\r
+ // ----- Setters -----\r
+\r
+ void SetClk1Win1(UShort_t* clks);\r
+ void SetClk1Win1(UShort_t clk, Int_t board);\r
+ void SetClk2Win1(UShort_t* clks);\r
+ void SetClk2Win1(UShort_t clk, Int_t board);\r
+ \r
+ void SetClk1Win2(UShort_t* clks);\r
+ void SetClk1Win2(UShort_t clk, Int_t board);\r
+ void SetClk2Win2(UShort_t* clks);\r
+ void SetClk2Win2(UShort_t clk, Int_t board);\r
+ \r
+ void SetDelayClk1Win1(UShort_t* delays);\r
+ void SetDelayClk1Win1(UShort_t delay, Int_t board);\r
+ void SetDelayClk2Win1(UShort_t* delays);\r
+ void SetDelayClk2Win1(UShort_t delay, Int_t board);\r
+ \r
+ void SetDelayClk1Win2(UShort_t* delays);\r
+ void SetDelayClk1Win2(UShort_t delay, Int_t board);\r
+ void SetDelayClk2Win2(UShort_t* delays);\r
+ void SetDelayClk2Win2(UShort_t delay, Int_t board);\r
+ \r
+ void SetLatchWin1(UShort_t *latchs);\r
+ void SetLatchWin1(UShort_t latch, Int_t board);\r
+ void SetLatchWin2(UShort_t *latchs);\r
+ void SetLatchWin2(UShort_t latch, Int_t board);\r
+ \r
+ void SetResetWin1(UShort_t *resets);\r
+ void SetResetWin1(UShort_t reset, Int_t board);\r
+ void SetResetWin2(UShort_t *resets);\r
+ void SetResetWin2(UShort_t reset, Int_t board);\r
+ \r
+ void SetPedestalSubtraction(Bool_t *peds);\r
+ void SetPedestalSubtraction(Bool_t ped, Int_t board);\r
+ \r
+ void SetBBAThreshold(UShort_t th) {fBBAThreshold = th;};\r
+ void SetBBCThreshold(UShort_t th) {fBBCThreshold = th;};\r
+\r
+ void SetBGAThreshold(UShort_t th) {fBGAThreshold = th;};\r
+ void SetBGCThreshold(UShort_t th) {fBGCThreshold = th;};\r
+\r
+ void SetBBAForBGThreshold(UShort_t th) {fBBAForBGThreshold = th;};\r
+ void SetBBCForBGThreshold(UShort_t th) {fBBCForBGThreshold = th;};\r
+ \r
+ void SetCentralityV0AThrLow(UShort_t th) {fCentralityVOAThrLow = th;};\r
+ void SetCentralityV0AThrHigh(UShort_t th) {fCentralityVOAThrHigh = th;};\r
+ \r
+ void SetCentralityV0CThrLow(UShort_t th) {fCentralityVOCThrLow = th;};\r
+ void SetCentralityV0CThrHigh(UShort_t th) {fCentralityVOCThrHigh = th;};\r
+ \r
+ void SetMultV0AThrLow(UShort_t th) {fMultV0AThrLow = th;};\r
+ void SetMultV0AThrHigh(UShort_t th) {fMultV0AThrHigh = th;};\r
+ \r
+ void SetMultV0CThrLow(UShort_t th) {fMultV0CThrLow = th;};\r
+ void SetMultV0CThrHigh(UShort_t th) {fMultV0CThrHigh = th;};\r
+ \r
+ void SetTriggerSelected(UShort_t trigger, Int_t output);\r
+ \r
+ void SetEnableCharge(Bool_t val, Int_t board, Int_t channel);\r
+ void SetEnableTiming(Bool_t val, Int_t board, Int_t channel);\r
+ void SetDiscriThr(UShort_t val, Int_t board, Int_t channel);\r
+ void SetDelayHit(UShort_t val, Int_t board, Int_t channel);\r
+ void SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel);\r
+ void SetPedestalCut(UShort_t val, Int_t integrator, Int_t board, Int_t channel);\r
+\r
+ \r
+ // ----- Getters -----\r
+ \r
+ UShort_t * GetClk1Win1() const {return (UShort_t*)fClk1Win1;};\r
+ UShort_t GetClk1Win1(Int_t board ) const {return (board<kNCIUBoards?fClk1Win1[board]:0);};\r
+ UShort_t * GetClk2Win1() const {return (UShort_t*)fClk2Win1;};\r
+ UShort_t GetClk2Win1(Int_t board ) const {return (board<kNCIUBoards?fClk2Win1[board]:0);};\r
+\r
+ UShort_t * GetClk1Win2() const {return (UShort_t*)fClk1Win2;};\r
+ UShort_t GetClk1Win2(Int_t board ) const {return (board<kNCIUBoards?fClk1Win2[board]:0);};\r
+ UShort_t * GetClk2Win2() const {return (UShort_t*)fClk2Win2;};\r
+ UShort_t GetClk2Win2(Int_t board ) const {return (board<kNCIUBoards?fClk2Win2[board]:0);};\r
+\r
+ UShort_t * GetDelayClk1Win1() const {return (UShort_t*)fDelayClk1Win1;};\r
+ UShort_t GetDelayClk1Win1(Int_t board ) const {return (board<kNCIUBoards?fDelayClk1Win1[board]:0);};\r
+ UShort_t * GetDelayClk2Win1() const {return (UShort_t*)fDelayClk2Win1;};\r
+ UShort_t GetDelayClk2Win1(Int_t board ) const {return (board<kNCIUBoards?fDelayClk2Win1[board]:0);};\r
+ \r
+ UShort_t * GetDelayClk1Win2() const {return (UShort_t*)fDelayClk1Win2;};\r
+ UShort_t GetDelayClk1Win2(Int_t board ) const {return (board<kNCIUBoards?fDelayClk1Win2[board]:0);};\r
+ UShort_t * GetDelayClk2Win2() const {return (UShort_t*)fDelayClk2Win2;};\r
+ UShort_t GetDelayClk2Win2(Int_t board ) const {return (board<kNCIUBoards?fDelayClk2Win2[board]:0);};\r
+ \r
+ UShort_t * GetLatchWin1() const {return (UShort_t*)fLatchWin1;};\r
+ UShort_t GetLatchWin1(Int_t board ) const {return (board<kNCIUBoards?fLatchWin1[board]:0);};\r
+ UShort_t * GetLatchWin2() const {return (UShort_t*)fLatchWin2;};\r
+ UShort_t GetLatchWin2(Int_t board ) const {return (board<kNCIUBoards?fLatchWin2[board]:0);};\r
+ \r
+ UShort_t * GetResetWin1() const {return (UShort_t*)fResetWin1;};\r
+ UShort_t GetResetWin1(Int_t board ) const {return (board<kNCIUBoards?fResetWin1[board]:0);};\r
+ UShort_t * GetResetWin2() const {return (UShort_t*)fResetWin2;};\r
+ UShort_t GetResetWin2(Int_t board ) const {return (board<kNCIUBoards?fResetWin2[board]:0);};\r
+ \r
+ Bool_t * GetPedestalSubtraction() const {return (Bool_t*) fPedestalSubtraction;};\r
+ Bool_t GetPedestalSubtraction(Int_t board ) const {return (board<kNCIUBoards?fPedestalSubtraction[board]:0);};\r
+\r
+ UShort_t GetBBAThreshold() const {return fBBAThreshold;};\r
+ UShort_t GetBBCThreshold() const {return fBBCThreshold;};\r
+\r
+ UShort_t GetBGAThreshold() const {return fBGAThreshold;};\r
+ UShort_t GetBGCThreshold() const {return fBGCThreshold;};\r
+\r
+ UShort_t GetBBAForBGThreshold() const {return fBBAForBGThreshold;};\r
+ UShort_t GetBBCForBGThreshold() const {return fBBCForBGThreshold;};\r
+ \r
+ UShort_t GetCentralityV0AThrLow() const {return fCentralityVOAThrLow;};\r
+ UShort_t GetCentralityV0AThrHigh() const {return fCentralityVOAThrHigh;};\r
+ \r
+ UShort_t GetCentralityV0CThrLow() const {return fCentralityVOCThrLow;};\r
+ UShort_t GetCentralityV0CThrHigh() const {return fCentralityVOCThrHigh;};\r
+\r
+ UShort_t GetMultV0AThrLow() const {return fMultV0AThrLow;};\r
+ UShort_t GetMultV0AThrHigh() const {return fMultV0AThrHigh;};\r
+\r
+ UShort_t GetMultV0CThrLow() const {return fMultV0CThrLow;};\r
+ UShort_t GetMultV0CThrHigh() const {return fMultV0CThrHigh;};\r
+\r
+ UShort_t GetTriggerSelected(Int_t output) const {return (output<kNTriggerOutputs?fTriggerSelected[output]:0);};\r
+ \r
+ Bool_t GetEnableCharge(Int_t board, Int_t channel);\r
+ Bool_t GetEnableTiming(Int_t board, Int_t channel);\r
+ UShort_t GetDiscriThr(Int_t board, Int_t channel);\r
+ UShort_t GetDelayHit(Int_t board, Int_t channel);\r
+ UShort_t GetPedestal(Int_t integrator, Int_t board, Int_t channel);\r
+ UShort_t GetPedestalCut(Int_t integrator, Int_t board, Int_t channel);\r
+\r
+ enum {\r
+ kNCIUBoards = AliVZERODataFEE::kNCIUBoards,\r
+ kNAliases = AliVZERODataFEE::kNAliases,\r
+ kNTriggerOutputs = 5,\r
+ kNChannels = 8\r
+ };\r
+ \r
+private:\r
+ \r
+ UShort_t fClk1Win1[kNCIUBoards]; //Profil of the Clock 1 of the Window 1 (BB window)\r
+ UShort_t fClk2Win1[kNCIUBoards]; //Profil of the Clock 2 of the Window 1 (BB window)\r
+ UShort_t fClk1Win2[kNCIUBoards]; //Profil of the Clock 1 of the Window 2 (BG window)\r
+ UShort_t fClk2Win2[kNCIUBoards]; //Profil of the Clock 2 of the Window 2 (BG window)\r
+ UShort_t fDelayClk1Win1[kNCIUBoards]; // Delays of the Clock 1 of the Window 1 (BB window)\r
+ UShort_t fDelayClk2Win1[kNCIUBoards]; // Delays of the Clock 2 of the Window 1 (BB window)\r
+ UShort_t fDelayClk1Win2[kNCIUBoards]; // Delays of the Clock 1 of the Window 2 (BG window)\r
+ UShort_t fDelayClk2Win2[kNCIUBoards]; // Delays of the Clock 2 of the Window 2 (BG window)\r
+ UShort_t fLatchWin1[kNCIUBoards]; //Profil of the Clock of the Latch signal of Window 1 (BB window)\r
+ UShort_t fLatchWin2[kNCIUBoards]; //Profil of the Clock of the Latch signal of Window 2 (BG window)\r
+ UShort_t fResetWin1[kNCIUBoards]; //Profil of the Clock of the Reset signal of Window 1 (BB window)\r
+ UShort_t fResetWin2[kNCIUBoards]; //Profil of the Clock of the Reset signal of Window 2 (BG window)\r
+ Bool_t fPedestalSubtraction[kNCIUBoards]; // Flag to en(dis)able pedestal subtraction before centrality trigger calculation\r
+ UShort_t fBBAThreshold; // Minimum bias Threshold in number of channel hit for V0A\r
+ UShort_t fBBCThreshold; // Minimum bias Threshold in number of channel hit for V0C\r
+ UShort_t fBGAThreshold; // Beam Gas Threshold in number of channel hit for V0A\r
+ UShort_t fBGCThreshold; // Beam Gas Threshold in number of channel hit for V0C\r
+ UShort_t fBBAForBGThreshold; // BBA threshold for Beam Gas triggers (i.e. BBA and BGC)\r
+ UShort_t fBBCForBGThreshold; // BBC threshold for Beam Gas triggers (i.e. BBC and BGA)\r
+ UShort_t fCentralityVOAThrLow; // Threshold used for centrality triggers (i.e. CTA1 and CTC1)\r
+ UShort_t fCentralityVOAThrHigh; // Threshold used for centrality triggers (i.e. CTA2 and CTC2)\r
+ UShort_t fCentralityVOCThrLow; // Threshold used for centrality triggers (i.e. CTA1 and CTC1)\r
+ UShort_t fCentralityVOCThrHigh; // Threshold used for centrality triggers (i.e. CTA2 and CTC2)\r
+ UShort_t fMultV0AThrLow; // Threshold used for multiplicity triggers (i.e. MTA and MTC)\r
+ UShort_t fMultV0AThrHigh; // Threshold used for multiplicity triggers (i.e. MTA and MTC)\r
+ UShort_t fMultV0CThrLow; // Threshold used for multiplicity triggers (i.e. MTA and MTC)\r
+ UShort_t fMultV0CThrHigh; // Threshold used for multiplicity triggers (i.e. MTA and MTC)\r
+ UShort_t fTriggerSelected[kNTriggerOutputs]; // Triggers selected on the 5 outputs to CTP\r
+ Bool_t fEnableCharge[kNCIUBoards][kNChannels]; // Flag to know is a channel is participating to the Charge triggers\r
+ Bool_t fEnableTiming[kNCIUBoards][kNChannels]; // Flag to know is a channel is participating to the Timing triggers\r
+ UShort_t fDiscriThr[kNCIUBoards][kNChannels]; // Threshold of each discriminator\r
+ UShort_t fDelayHit[kNCIUBoards][kNChannels]; // Individual delays of each channel \r
+ UShort_t fPedestalOdd[kNCIUBoards][kNChannels]; // Pedestals for the Odd integrators\r
+ UShort_t fPedestalEven[kNCIUBoards][kNChannels]; // Pedestals for the Even integrators\r
+ UShort_t fPedestalCutOdd[kNCIUBoards][kNChannels]; // Pedestals Cut for the Odd integrators\r
+ UShort_t fPedestalCutEven[kNCIUBoards][kNChannels]; // Pedestals Cut for the Even integrators\r
+\r
+ Int_t fRun; // Run number\r
+ Int_t fStartTime; // Start time\r
+ Int_t fEndTime; // End time\r
+ TString fAliasNames[kNAliases]; // aliases for DCS data\r
+ Bool_t fIsProcessed; // bool to know processing status\r
+ \r
+ Bool_t IsClkValid(UShort_t clock);\r
+ void SetParameter(TString name, Float_t val);\r
+ \r
+ \r
+ ClassDef( AliVZEROTriggerData, 1 ) \r
+\r
+};\r
+\r
+#endif // ALIVZEROTRIGGERDATA_H\r
-/**************************************************************************
- * 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. *
- **************************************************************************/
-
-
-// Simulate the VZERO Trigger response
-// Use FEE parameters stored in Database
-// Can work on real data or in simulation
-#include "TTree.h"
-#include "TClonesArray.h"
-
-#include "AliLog.h"
-#include "AliCDBManager.h"
-#include "AliCDBEntry.h"
-#include "AliCDBStorage.h"
-#include "AliCDBId.h"
-#include "AliVZEROTriggerData.h"
-#include "AliVZEROLogicalSignal.h"
-#include "AliVZEROTriggerSimulator.h"
-#include "AliVZEROdigit.h"
-
-ClassImp(AliVZEROTriggerSimulator)
-
-//_____________________________________________________________________________
-AliVZEROTriggerSimulator::AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits) :
-TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(digitsTree),fDigits(digits),fTriggerWord(0)
-{
- for(int i=0;i<64;i++) {
- fBBFlags[i] = fBGFlags[i] = kFALSE;
- fCharges[i] = 0;
- }
- GenerateBBWindows();
- GenerateBGWindows();
- for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {
- fBBLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin1(i),0);
- fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0);
- fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0);
- fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0);
- }
- fBBGate[0]->Print();
- fBBGate[4]->Print();
-}
-//_____________________________________________________________________________
-AliVZEROTriggerSimulator::AliVZEROTriggerSimulator() :
-TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(NULL),fDigits(NULL),fTriggerWord(0)
-{
- for(int i=0;i<64;i++) {
- fBBFlags[i] = fBGFlags[i] = kFALSE;
- fCharges[i] = 0;
- }
- GenerateBBWindows();
- GenerateBGWindows();
- for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {
- fBBLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin1(i),0);
- fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0);
- fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0);
- fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0);
- }
- fBBGate[0]->Print();
- fBBGate[4]->Print();
-}
-
-//_____________________________________________________________________________
-AliVZEROTriggerSimulator::~AliVZEROTriggerSimulator(){
- if(fBBGate) delete [] fBBGate;
- if(fBGGate) delete [] fBGGate;
- if(fBBLatch) delete [] fBBLatch;
- if(fBBReset) delete [] fBBReset;
- if(fBGLatch) delete [] fBGLatch;
- if(fBGReset) delete [] fBGReset;
-}
-
-//_____________________________________________________________________________
-void AliVZEROTriggerSimulator::GenerateBBWindows()
-{
- for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {
- AliVZEROLogicalSignal Clk1BB(fTriggerData->GetClk1Win1(i),fTriggerData->GetDelayClk1Win1(i));
- AliVZEROLogicalSignal Clk2BB(fTriggerData->GetClk2Win1(i),fTriggerData->GetDelayClk2Win1(i));
- fBBGate[i] = new AliVZEROLogicalSignal(Clk1BB & Clk2BB);
- }
-}
-//_____________________________________________________________________________
-void AliVZEROTriggerSimulator::GenerateBGWindows()
-{
- for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {
- AliVZEROLogicalSignal Clk1BG(fTriggerData->GetClk1Win2(i),fTriggerData->GetDelayClk1Win2(i));
- AliVZEROLogicalSignal Clk2BG(fTriggerData->GetClk2Win2(i),fTriggerData->GetDelayClk2Win2(i));
- fBGGate[i] = new AliVZEROLogicalSignal(Clk1BG & Clk2BG);
- }
-}
-
-//_____________________________________________________________________________
-AliVZEROTriggerData * AliVZEROTriggerSimulator::LoadTriggerData() const
-{
- // Gets Trigger object for VZERO set
- AliInfo("Loading Trigger parameters");
- AliCDBManager *man = AliCDBManager::Instance();
-
-
- AliCDBEntry *entry=0;
-
- entry = man->Get("VZERO/Trigger/Data");
- if(!entry){
- AliWarning("Load of calibration data from default storage failed!");
- AliWarning("Calibration data will be loaded from local storage ($ALICE_ROOT)");
-
- man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
- entry = man->Get("VZERO/Trigger/Data",0);
- }
-
- // Retrieval of data in directory VZERO/Calib/Trigger:
-
- AliVZEROTriggerData *triggerData = NULL;
-
- if (entry) triggerData = (AliVZEROTriggerData*) entry->GetObject();
- if (!triggerData) AliError("No Trigger data from database !");
-
- return triggerData;
-}
-
-//_____________________________________________________________________________
-void AliVZEROTriggerSimulator::Run() {
- //AliInfo("Generating VZERO Triggers");
-
- // Loop over VZERO entries
- Int_t nEntries = (Int_t)fDigitsTree->GetEntries();
- for (Int_t ievt=0; ievt<nEntries; ievt++) {
- fDigitsTree->GetEvent(ievt);
-
- Int_t nDigits = fDigits->GetEntriesFast();
-
- for (Int_t iDigit=0; iDigit<nDigits; iDigit++) {
- AliVZEROdigit* digit = (AliVZEROdigit*)fDigits->At(iDigit);
-
- Int_t integrator = digit->Integrator();
- Int_t pmNumber = digit->PMNumber();
- Int_t board = pmNumber / 8;
- Int_t channel = pmNumber % 8;
-
- if(fTriggerData->GetEnableCharge(board,channel)) {
- fCharges[pmNumber] = digit->ADC();
- if(fTriggerData->GetPedestalSubtraction(board))
- if(fCharges[pmNumber]>=fTriggerData->GetPedestalCut(integrator,board,channel)){
- fCharges[pmNumber] -= fTriggerData->GetPedestal(integrator,board,channel);
- } else {
- fCharges[pmNumber] = 0;
- }
- } else {
- fCharges[pmNumber] = 0;
- }
-
- Float_t time = (Float_t)digit->Time() / 10.; // digit->Time() in bin of 100 picoseconds. Divide by 10 to have it in nanoseconds
- time += fTriggerData->GetDelayHit(board,channel);
-
- AliInfo(Form(" PM nb : %d ; ADC= %d ; TDC= %f Enable Time %d charge %d",pmNumber,digit->ADC(),time,fTriggerData->GetEnableTiming(board,channel),fTriggerData->GetEnableCharge(board,channel)));
- fBBFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBBGate[board]->IsInCoincidence(time);
- fBGFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBGGate[board]->IsInCoincidence(time);
-
- } // end of loop over digits
- } // end of loop over events in digits tree
-
- Int_t nBBflagsV0A = 0;
- Int_t nBBflagsV0C = 0;
- Int_t nBGflagsV0A = 0;
- Int_t nBGflagsV0C = 0;
- Int_t chargeV0A = 0;
- Int_t chargeV0C = 0;
-
- for(int i=0;i<64;i++) {
- if(i<32) {
- nBBflagsV0C += fBBFlags[i];
- nBGflagsV0C += fBGFlags[i];
- chargeV0C += fCharges[i];
- } else {
- nBBflagsV0A += fBBFlags[i];
- nBGflagsV0A += fBGFlags[i];
- chargeV0A += fCharges[i];
- }
- //AliInfo(Form("Ch %d BB=%d BG=%d",i,fBBFlags[i],fBGFlags[i] ));
- }
-
- // BBA
- if(nBBflagsV0A>=fTriggerData->GetBBAThreshold()) SetBBA();
-
- // BBC
- if(nBBflagsV0C>=fTriggerData->GetBBCThreshold()) SetBBC();
-
- // BBA_AND_BBC
- if(GetBBA() && GetBBC()) SetBBAandBBC();
-
- // BBA_OR_BBC
- if(GetBBA() || GetBBC()) SetBBAorBBC();
-
- // BGA
- if(nBGflagsV0A>=fTriggerData->GetBGAThreshold()) SetBGA();
-
- // BGC
- if(nBGflagsV0C>=fTriggerData->GetBGCThreshold()) SetBGC();
-
- // BGA_AND_BBC (Beam Gas from RB24 side)
- if(nBBflagsV0C>=fTriggerData->GetBBCForBGThreshold() && GetBGA()) SetBGAandBBC();
-
- // BGC_AND_BBA (Beam Gas from RB26 side)
- if(nBBflagsV0A>=fTriggerData->GetBBAForBGThreshold() && GetBGC()) SetBGCandBBA();
-
- // CTA1_AND_CTC1 (Centrality trigger 1)
- if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() && chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1andCTC1();
-
- // CTA1_OR_CTC1 (Centrality trigger 1)
- if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() || chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1orCTC1();
-
- // CTA2_AND_CTC2 (Centrality trigger 2)
- if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() && chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2andCTC2();
-
- // CTA2_OR_CTC2 (Centrality trigger 2)
- if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() || chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2orCTC2();
-
- // MTA_AND_MTC (Multiplicity Trigger)
- if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow())
- && (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) )
- SetMTAandMTC();
-
- // MTA_OR_MTC (Multiplicity Trigger)
- if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow())
- || (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) )
- SetMTAorMTC();
-
- // BGA_OR_BGC
- if(GetBGA() || GetBGC()) SetBGAorBGC();
-
- // (BGA and BBC) or (BGC and BBA) (Beam Gas from one of the two sides)
- if(GetBGAandBBC() || GetBGCandBBA()) SetBeamGas();
-
- AliInfo(Form("BB Flags : V0A = %d V0C = %d ",nBBflagsV0A, nBBflagsV0C ));
- AliInfo(Form("BG Flags : V0A = %d V0C = %d ",nBGflagsV0A, nBGflagsV0C ));
- AliInfo(Form("Charges : V0A = %d V0C = %d ",chargeV0A, chargeV0C ));
-
-}
+/**************************************************************************\r
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ * *\r
+ * Author: The ALICE Off-line Project. *\r
+ * Contributors are mentioned in the code where appropriate. *\r
+ * *\r
+ * Permission to use, copy, modify and distribute this software and its *\r
+ * documentation strictly for non-commercial purposes is hereby granted *\r
+ * without fee, provided that the above copyright notice appears in all *\r
+ * copies and that both the copyright notice and this permission notice *\r
+ * appear in the supporting documentation. The authors make no claims *\r
+ * about the suitability of this software for any purpose. It is *\r
+ * provided "as is" without express or implied warranty. *\r
+ **************************************************************************/\r
+\r
+\r
+// Simulate the VZERO Trigger response\r
+// Use FEE parameters stored in Database\r
+// Can work on real data or in simulation\r
+#include "TTree.h"\r
+#include "TClonesArray.h"\r
+\r
+#include "AliLog.h"\r
+#include "AliCDBManager.h"\r
+#include "AliCDBEntry.h"\r
+#include "AliCDBStorage.h"\r
+#include "AliCDBId.h"\r
+#include "AliVZEROTriggerData.h"\r
+#include "AliVZEROLogicalSignal.h"\r
+#include "AliVZEROTriggerSimulator.h"\r
+#include "AliVZEROdigit.h"\r
+\r
+ClassImp(AliVZEROTriggerSimulator)\r
+\r
+//________________________________________________________________\r
+AliVZEROTriggerSimulator::AliVZEROTriggerSimulator(const AliVZEROTriggerSimulator& triggersim) : \r
+TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(NULL),fDigits(NULL),fTriggerWord(0)\r
+\r
+{\r
+ // copy constructor\r
+ \r
+ AliInfo("Not implemented");\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliVZEROTriggerSimulator::AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits) : \r
+TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(digitsTree),fDigits(digits),fTriggerWord(0)\r
+{\r
+ for(int i=0;i<64;i++) {\r
+ fBBFlags[i] = fBGFlags[i] = kFALSE;\r
+ fCharges[i] = 0;\r
+ }\r
+ GenerateBBWindows();\r
+ GenerateBGWindows();\r
+ for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {\r
+ fBBLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin1(i),0); \r
+ fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); \r
+ fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0);\r
+ fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0); \r
+ }\r
+}\r
+//_____________________________________________________________________________\r
+AliVZEROTriggerSimulator::AliVZEROTriggerSimulator() : \r
+TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(NULL),fDigits(NULL),fTriggerWord(0)\r
+{\r
+ for(int i=0;i<64;i++) {\r
+ fBBFlags[i] = fBGFlags[i] = kFALSE;\r
+ fCharges[i] = 0;\r
+ }\r
+ GenerateBBWindows();\r
+ GenerateBGWindows();\r
+ for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {\r
+ fBBLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin1(i),0); \r
+ fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); \r
+ fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0);\r
+ fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0); \r
+ }\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliVZEROTriggerSimulator::~AliVZEROTriggerSimulator(){\r
+ if(fBBGate) delete [] fBBGate;\r
+ if(fBGGate) delete [] fBGGate;\r
+ if(fBBLatch) delete [] fBBLatch;\r
+ if(fBBReset) delete [] fBBReset;\r
+ if(fBGLatch) delete [] fBGLatch;\r
+ if(fBGReset) delete [] fBGReset;\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerSimulator::GenerateBBWindows() \r
+{\r
+ for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {\r
+ AliVZEROLogicalSignal Clk1BB(fTriggerData->GetClk1Win1(i),fTriggerData->GetDelayClk1Win1(i));\r
+ AliVZEROLogicalSignal Clk2BB(fTriggerData->GetClk2Win1(i),fTriggerData->GetDelayClk2Win1(i));\r
+ fBBGate[i] = new AliVZEROLogicalSignal(Clk1BB & Clk2BB);\r
+ }\r
+}\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerSimulator::GenerateBGWindows() \r
+{\r
+ for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {\r
+ AliVZEROLogicalSignal Clk1BG(fTriggerData->GetClk1Win2(i),fTriggerData->GetDelayClk1Win2(i));\r
+ AliVZEROLogicalSignal Clk2BG(fTriggerData->GetClk2Win2(i),fTriggerData->GetDelayClk2Win2(i));\r
+ fBGGate[i] = new AliVZEROLogicalSignal(Clk1BG & Clk2BG);\r
+ }\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliVZEROTriggerData * AliVZEROTriggerSimulator::LoadTriggerData() const \r
+{\r
+ // Gets Trigger object for VZERO set\r
+ AliInfo("Loading Trigger parameters");\r
+ AliCDBManager *man = AliCDBManager::Instance();\r
+ \r
+ \r
+ AliCDBEntry *entry=0;\r
+ \r
+ entry = man->Get("VZERO/Trigger/Data");\r
+ if(!entry){\r
+ AliWarning("Load of calibration data from default storage failed!");\r
+ AliWarning("Calibration data will be loaded from local storage ($ALICE_ROOT)");\r
+ \r
+ man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");\r
+ entry = man->Get("VZERO/Trigger/Data",0);\r
+ }\r
+ \r
+ // Retrieval of data in directory VZERO/Calib/Trigger:\r
+ \r
+ AliVZEROTriggerData *triggerData = NULL;\r
+ \r
+ if (entry) triggerData = (AliVZEROTriggerData*) entry->GetObject();\r
+ if (!triggerData) AliError("No Trigger data from database !");\r
+ \r
+ return triggerData;\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerSimulator::Run() {\r
+ //AliInfo("Generating VZERO Triggers");\r
+ \r
+ // Loop over VZERO entries\r
+ Int_t nEntries = (Int_t)fDigitsTree->GetEntries();\r
+ for (Int_t ievt=0; ievt<nEntries; ievt++) {\r
+ fDigitsTree->GetEvent(ievt);\r
+ \r
+ Int_t nDigits = fDigits->GetEntriesFast();\r
+ \r
+ for (Int_t iDigit=0; iDigit<nDigits; iDigit++) {\r
+ AliVZEROdigit* digit = (AliVZEROdigit*)fDigits->At(iDigit);\r
+ \r
+ Int_t integrator = digit->Integrator();\r
+ Int_t pmNumber = digit->PMNumber();\r
+ Int_t board = pmNumber / 8;\r
+ Int_t channel = pmNumber % 8;\r
+ \r
+ if(fTriggerData->GetEnableCharge(board,channel)) {\r
+ fCharges[pmNumber] = digit->ADC();\r
+ if(fTriggerData->GetPedestalSubtraction(board)) \r
+ if(fCharges[pmNumber]>=fTriggerData->GetPedestalCut(integrator,board,channel)){ \r
+ fCharges[pmNumber] -= fTriggerData->GetPedestal(integrator,board,channel);\r
+ } else {\r
+ fCharges[pmNumber] = 0;\r
+ }\r
+ } else {\r
+ fCharges[pmNumber] = 0;\r
+ }\r
+ \r
+ Float_t time = (Float_t)digit->Time() / 10.; // digit->Time() in bin of 100 picoseconds. Divide by 10 to have it in nanoseconds\r
+ time += fTriggerData->GetDelayHit(board,channel);\r
+ \r
+ AliInfo(Form(" PM nb : %d ; ADC= %d ; TDC= %f Enable Time %d charge %d",pmNumber,digit->ADC(),time,fTriggerData->GetEnableTiming(board,channel),fTriggerData->GetEnableCharge(board,channel)));\r
+ fBBFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBBGate[board]->IsInCoincidence(time);\r
+ fBGFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBGGate[board]->IsInCoincidence(time);\r
+ \r
+ } // end of loop over digits\r
+ } // end of loop over events in digits tree\r
+ \r
+ Int_t nBBflagsV0A = 0;\r
+ Int_t nBBflagsV0C = 0;\r
+ Int_t nBGflagsV0A = 0;\r
+ Int_t nBGflagsV0C = 0;\r
+ Int_t chargeV0A = 0;\r
+ Int_t chargeV0C = 0;\r
+\r
+ for(int i=0;i<64;i++) {\r
+ if(i<32) {\r
+ nBBflagsV0C += fBBFlags[i]; \r
+ nBGflagsV0C += fBGFlags[i];\r
+ chargeV0C += fCharges[i];\r
+ } else {\r
+ nBBflagsV0A += fBBFlags[i]; \r
+ nBGflagsV0A += fBGFlags[i];\r
+ chargeV0A += fCharges[i];\r
+ }\r
+ //AliInfo(Form("Ch %d BB=%d BG=%d",i,fBBFlags[i],fBGFlags[i] )); \r
+ }\r
+ \r
+ // BBA\r
+ if(nBBflagsV0A>=fTriggerData->GetBBAThreshold()) SetBBA();\r
+ \r
+ // BBC\r
+ if(nBBflagsV0C>=fTriggerData->GetBBCThreshold()) SetBBC();\r
+\r
+ // BBA_AND_BBC\r
+ if(GetBBA() && GetBBC()) SetBBAandBBC();\r
+ \r
+ // BBA_OR_BBC\r
+ if(GetBBA() || GetBBC()) SetBBAorBBC();\r
+\r
+ // BGA\r
+ if(nBGflagsV0A>=fTriggerData->GetBGAThreshold()) SetBGA();\r
+\r
+ // BGC\r
+ if(nBGflagsV0C>=fTriggerData->GetBGCThreshold()) SetBGC();\r
+ \r
+ // BGA_AND_BBC (Beam Gas from RB24 side)\r
+ if(nBBflagsV0C>=fTriggerData->GetBBCForBGThreshold() && GetBGA()) SetBGAandBBC();\r
+ \r
+ // BGC_AND_BBA (Beam Gas from RB26 side)\r
+ if(nBBflagsV0A>=fTriggerData->GetBBAForBGThreshold() && GetBGC()) SetBGCandBBA();\r
+\r
+ // CTA1_AND_CTC1 (Centrality trigger 1)\r
+ if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() && chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1andCTC1();\r
+\r
+ // CTA1_OR_CTC1 (Centrality trigger 1)\r
+ if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() || chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1orCTC1();\r
+ \r
+ // CTA2_AND_CTC2 (Centrality trigger 2)\r
+ if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() && chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2andCTC2();\r
+ \r
+ // CTA2_OR_CTC2 (Centrality trigger 2)\r
+ if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() || chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2orCTC2();\r
+ \r
+ // MTA_AND_MTC (Multiplicity Trigger)\r
+ if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow())\r
+ && (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) \r
+ SetMTAandMTC();\r
+ \r
+ // MTA_OR_MTC (Multiplicity Trigger)\r
+ if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow())\r
+ || (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) \r
+ SetMTAorMTC();\r
+ \r
+ // BGA_OR_BGC\r
+ if(GetBGA() || GetBGC()) SetBGAorBGC();\r
+ \r
+ // (BGA and BBC) or (BGC and BBA) (Beam Gas from one of the two sides)\r
+ if(GetBGAandBBC() || GetBGCandBBA()) SetBeamGas();\r
+\r
+ AliInfo(Form("BB Flags : V0A = %d V0C = %d ",nBBflagsV0A, nBBflagsV0C )); \r
+ AliInfo(Form("BG Flags : V0A = %d V0C = %d ",nBGflagsV0A, nBGflagsV0C )); \r
+ AliInfo(Form("Charges : V0A = %d V0C = %d ",chargeV0A, chargeV0C )); \r
+ \r
+}\r
+\r
-#ifndef ALIVZEROTRIGGERSIMULATOR_H
-#define ALIVZEROTRIGGERSIMULATOR_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
- * reserved.
- *
- * See cxx source for full Copyright notice
- */
-
-#include <TObject.h>
-
-#include "AliVZEROTriggerData.h"
-
-class AliVZEROLogicalSignal;
-class TTree;
-class TClonesArray;
-
-class AliVZEROTriggerSimulator : public TObject {
-public:
- AliVZEROTriggerSimulator();
- AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits);
- ~AliVZEROTriggerSimulator();
- AliVZEROTriggerSimulator(const AliVZEROTriggerSimulator &triggerSim);
- AliVZEROTriggerSimulator& operator= (const AliVZEROTriggerSimulator &triggerSim);
-
- AliVZEROTriggerData * GetTriggerData() const {return fTriggerData;};
-
- Bool_t GetBBAandBBC() const {return (fTriggerWord & 0x1);};
- Bool_t GetBBAorBBC() const {return (fTriggerWord>>1 & 0x1);};
- Bool_t GetBGAandBBC() const {return (fTriggerWord>>2 & 0x1);};
- Bool_t GetBGA() const {return (fTriggerWord>>3 & 0x1);};
- Bool_t GetBGCandBBA() const {return (fTriggerWord>>4 & 0x1);};
- Bool_t GetBGC() const {return (fTriggerWord>>5 & 0x1);};
- Bool_t GetCTA1andCTC1() const {return (fTriggerWord>>6 & 0x1);};
- Bool_t GetCTA1orCTC1() const {return (fTriggerWord>>7 & 0x1);};
- Bool_t GetCTA2andCTC2() const {return (fTriggerWord>>8 & 0x1);};
- Bool_t GetCTA2orCTC2() const {return (fTriggerWord>>9 & 0x1);};
- Bool_t GetMTAandMTC() const {return (fTriggerWord>>10 & 0x1);};
- Bool_t GetMTAorMTC() const {return (fTriggerWord>>11 & 0x1);};
- Bool_t GetBBA() const {return (fTriggerWord>>12 & 0x1);};
- Bool_t GetBBC() const {return (fTriggerWord>>13 & 0x1);};
- Bool_t GetBGAorBGC() const {return (fTriggerWord>>14 & 0x1);};
- Bool_t GetBeamGas() const {return (fTriggerWord>>15 & 0x1);};
-
- void SetBBAandBBC() { (fTriggerWord += 0x1);};
- void SetBBAorBBC() { (fTriggerWord += 0x1<<1);};
- void SetBGAandBBC() { (fTriggerWord += 0x1<<2);};
- void SetBGA() { (fTriggerWord += 0x1<<3);};
- void SetBGCandBBA() { (fTriggerWord += 0x1<<4);};
- void SetBGC() { (fTriggerWord += 0x1<<5);};
- void SetCTA1andCTC1() { (fTriggerWord += 0x1<<6);};
- void SetCTA1orCTC1() { (fTriggerWord += 0x1<<7);};
- void SetCTA2andCTC2() { (fTriggerWord += 0x1<<8);};
- void SetCTA2orCTC2() { (fTriggerWord += 0x1<<9);};
- void SetMTAandMTC() { (fTriggerWord += 0x1<<10);};
- void SetMTAorMTC() { (fTriggerWord += 0x1<<11);};
- void SetBBA() { (fTriggerWord += 0x1<<12);};
- void SetBBC() { (fTriggerWord += 0x1<<13);};
- void SetBGAorBGC() { (fTriggerWord += 0x1<<14);};
- void SetBeamGas() { (fTriggerWord += 0x1<<15);};
-
- void Run();
-
-private:
- // Private methods
- AliVZEROTriggerData * LoadTriggerData() const ;
- void GenerateBBWindows();
- void GenerateBGWindows();
-
- // Members
- AliVZEROLogicalSignal * fBBGate[AliVZEROTriggerData::kNCIUBoards];
- AliVZEROLogicalSignal * fBBLatch[AliVZEROTriggerData::kNCIUBoards];
- AliVZEROLogicalSignal * fBBReset[AliVZEROTriggerData::kNCIUBoards];
-
- AliVZEROLogicalSignal * fBGGate[AliVZEROTriggerData::kNCIUBoards];
- AliVZEROLogicalSignal * fBGLatch[AliVZEROTriggerData::kNCIUBoards];
- AliVZEROLogicalSignal * fBGReset[AliVZEROTriggerData::kNCIUBoards];
-
- AliVZEROTriggerData *fTriggerData; // Object holding the trigger configuration parameters
-
- TTree* fDigitsTree;
- TClonesArray* fDigits;
-
- Bool_t fBBFlags[64];
- Bool_t fBGFlags[64];
- Int_t fCharges[64];
-
- UShort_t fTriggerWord;
-
- ClassDef( AliVZEROTriggerSimulator, 1 )
-
-};
-
-
-#endif // ALIVZEROTRIGGERSIMULATOR_H
+#ifndef ALIVZEROTRIGGERSIMULATOR_H\r
+#define ALIVZEROTRIGGERSIMULATOR_H\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights\r
+ * reserved. \r
+ *\r
+ * See cxx source for full Copyright notice \r
+ */\r
+\r
+#include <TObject.h>\r
+\r
+#include "AliVZEROTriggerData.h"\r
+\r
+class AliVZEROLogicalSignal;\r
+class TTree;\r
+class TClonesArray;\r
+\r
+class AliVZEROTriggerSimulator : public TObject {\r
+public:\r
+ AliVZEROTriggerSimulator();\r
+ AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits);\r
+ ~AliVZEROTriggerSimulator();\r
+ AliVZEROTriggerSimulator(const AliVZEROTriggerSimulator &triggerSim);\r
+ AliVZEROTriggerSimulator& operator= (const AliVZEROTriggerSimulator & /*triggerSim*/){AliInfo("Not implemented");return *this;};\r
+ \r
+ AliVZEROTriggerData * GetTriggerData() const {return fTriggerData;};\r
+ \r
+ Bool_t GetBBAandBBC() const {return (fTriggerWord & 0x1);};\r
+ Bool_t GetBBAorBBC() const {return (fTriggerWord>>1 & 0x1);};\r
+ Bool_t GetBGAandBBC() const {return (fTriggerWord>>2 & 0x1);};\r
+ Bool_t GetBGA() const {return (fTriggerWord>>3 & 0x1);};\r
+ Bool_t GetBGCandBBA() const {return (fTriggerWord>>4 & 0x1);};\r
+ Bool_t GetBGC() const {return (fTriggerWord>>5 & 0x1);};\r
+ Bool_t GetCTA1andCTC1() const {return (fTriggerWord>>6 & 0x1);};\r
+ Bool_t GetCTA1orCTC1() const {return (fTriggerWord>>7 & 0x1);};\r
+ Bool_t GetCTA2andCTC2() const {return (fTriggerWord>>8 & 0x1);};\r
+ Bool_t GetCTA2orCTC2() const {return (fTriggerWord>>9 & 0x1);};\r
+ Bool_t GetMTAandMTC() const {return (fTriggerWord>>10 & 0x1);};\r
+ Bool_t GetMTAorMTC() const {return (fTriggerWord>>11 & 0x1);};\r
+ Bool_t GetBBA() const {return (fTriggerWord>>12 & 0x1);};\r
+ Bool_t GetBBC() const {return (fTriggerWord>>13 & 0x1);};\r
+ Bool_t GetBGAorBGC() const {return (fTriggerWord>>14 & 0x1);};\r
+ Bool_t GetBeamGas() const {return (fTriggerWord>>15 & 0x1);};\r
+ \r
+ void SetBBAandBBC() { (fTriggerWord += 0x1);};\r
+ void SetBBAorBBC() { (fTriggerWord += 0x1<<1);};\r
+ void SetBGAandBBC() { (fTriggerWord += 0x1<<2);};\r
+ void SetBGA() { (fTriggerWord += 0x1<<3);};\r
+ void SetBGCandBBA() { (fTriggerWord += 0x1<<4);};\r
+ void SetBGC() { (fTriggerWord += 0x1<<5);};\r
+ void SetCTA1andCTC1() { (fTriggerWord += 0x1<<6);};\r
+ void SetCTA1orCTC1() { (fTriggerWord += 0x1<<7);};\r
+ void SetCTA2andCTC2() { (fTriggerWord += 0x1<<8);};\r
+ void SetCTA2orCTC2() { (fTriggerWord += 0x1<<9);};\r
+ void SetMTAandMTC() { (fTriggerWord += 0x1<<10);};\r
+ void SetMTAorMTC() { (fTriggerWord += 0x1<<11);}; \r
+ void SetBBA() { (fTriggerWord += 0x1<<12);};\r
+ void SetBBC() { (fTriggerWord += 0x1<<13);};\r
+ void SetBGAorBGC() { (fTriggerWord += 0x1<<14);};\r
+ void SetBeamGas() { (fTriggerWord += 0x1<<15);};\r
+ \r
+ void Run();\r
+ \r
+private:\r
+ // Private methods\r
+ AliVZEROTriggerData * LoadTriggerData() const ;\r
+ void GenerateBBWindows();\r
+ void GenerateBGWindows();\r
+ \r
+ // Members\r
+ AliVZEROLogicalSignal * fBBGate[AliVZEROTriggerData::kNCIUBoards];\r
+ AliVZEROLogicalSignal * fBBLatch[AliVZEROTriggerData::kNCIUBoards];\r
+ AliVZEROLogicalSignal * fBBReset[AliVZEROTriggerData::kNCIUBoards];\r
+ \r
+ AliVZEROLogicalSignal * fBGGate[AliVZEROTriggerData::kNCIUBoards];\r
+ AliVZEROLogicalSignal * fBGLatch[AliVZEROTriggerData::kNCIUBoards];\r
+ AliVZEROLogicalSignal * fBGReset[AliVZEROTriggerData::kNCIUBoards];\r
+\r
+ AliVZEROTriggerData *fTriggerData; // Object holding the trigger configuration parameters\r
+ \r
+ TTree* fDigitsTree;\r
+ TClonesArray* fDigits;\r
+ \r
+ Bool_t fBBFlags[64];\r
+ Bool_t fBGFlags[64];\r
+ Int_t fCharges[64];\r
+ \r
+ UShort_t fTriggerWord;\r
+ \r
+ ClassDef( AliVZEROTriggerSimulator, 1 ) \r
+\r
+};\r
+\r
+\r
+#endif // ALIVZEROTRIGGERSIMULATOR_H\r