// contained in a DB
// -------------------------------------------------------------
// W. Ferrarese + P. Cerello Feb 2008
+// M.Siciliano Aug 2008 QA RecPoints and HLT mode
// INFN Torino
// --- ROOT system ---
#include <TGaxis.h>
#include <TMath.h>
#include <TDirectory.h>
+#include <TSystem.h>
// --- Standard library ---
// --- AliRoot header files ---
#include "AliQA.h"
#include "AliQAChecker.h"
#include "AliRawReader.h"
+#include "AliITSRawStream.h"
#include "AliITSRawStreamSDD.h"
+#include "AliITSRawStreamSDDCompressed.h"
+#include "AliITSDetTypeRec.h"
#include "AliITSRecPoint.h"
#include "AliITSgeomTGeo.h"
-
+#include "AliITSHLTforSDD.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
fSDDhTask(0),
fGenOffset(0),
fTimeBinSize(1),
-fDDLModuleMap(0)
+fDDLModuleMap(0),
+fHLTMode(0),
+fHLTSDD(0)
{
//ctor used to discriminate OnLine-Offline analysis
if(fLDC < 0 || fLDC > 4) {
AliError("Error: LDC number out of range; return\n");
}
+ if(!fkOnline){AliInfo("Offline mode: HLT set from AliITSDetTypeRec for SDD\n");}
+ else
+ if(fkOnline){
+ AliInfo("Online mode: HLT set from environment for SDD\n");
+ SetHLTModeFromEnvironment();
+ }
//fDDLModuleMap=NULL;
}
fSDDhTask(qadm.fSDDhTask),
fGenOffset(qadm.fGenOffset),
fTimeBinSize(1),
-fDDLModuleMap(0)
+fDDLModuleMap(0),
+fHLTMode(qadm.fHLTMode),
+fHLTSDD( qadm.fHLTSDD)
{
//copy ctor
fAliITSQADataMakerRec->SetName((const char*)qadm.fAliITSQADataMakerRec->GetName()) ;
AliCDBEntry *ddlMapSDD = AliCDBManager::Instance()->Get("ITS/Calib/DDLMapSDD");
Bool_t cacheStatus = AliCDBManager::Instance()->GetCacheFlag();
-
- if( !ddlMapSDD){
- AliError("Calibration object retrieval failed! SDD will not be processed");
- fDDLModuleMap = NULL;
- return;
- }
+ if(!ddlMapSDD)
+ {
+ AliError("Calibration object retrieval failed! SDD will not be processed");
+ fDDLModuleMap = NULL;
+ return;
+ }
fDDLModuleMap = (AliITSDDLModuleMapSDD*)ddlMapSDD->GetObject();
if(!cacheStatus)ddlMapSDD->SetObject(NULL);
ddlMapSDD->SetOwner(kTRUE);
- if(!cacheStatus)delete ddlMapSDD;
-
+ if(!cacheStatus)
+ {
+ delete ddlMapSDD;
+ }
+
+ if(fkOnline==kFALSE){
+ AliInfo("Offline mode: HLTforSDDobject used \n");
+ AliCDBEntry *hltforSDD = AliCDBManager::Instance()->Get("ITS/Calib/HLTforSDD");
+ if(!hltforSDD){
+ AliError("Calibration object retrieval failed! SDD will not be processed");
+ fHLTSDD=NULL;
+ return;
+ }
+ fHLTSDD = (AliITSHLTforSDD*)hltforSDD->GetObject();
+ if(!cacheStatus)hltforSDD->SetObject(NULL);
+ hltforSDD->SetOwner(kTRUE);
+ if(!cacheStatus)
+ {
+ delete hltforSDD;
+ }
+ }
Int_t lay, lad, det;
Int_t LAY = -1; //, LAD = -1;
char hname0[50];
else {
AliInfo("Book Offline Histograms for SDD\n ");
}
- TH1D *h0 = new TH1D("SDDModPattern","HW Modules pattern",fgknSDDmodules,fgkmodoffset,Float_t(fgkmodoffset+fgknSDDmodules)-0.5);
+ TH1D *h0 = new TH1D("SDDModPattern","HW Modules pattern",fgknSDDmodules,239.5,499.5);
h0->GetXaxis()->SetTitle("Module Number");
h0->GetYaxis()->SetTitle("Counts");
fAliITSQADataMakerRec->Add2RawsList((new TH1D(*h0)),0+fGenOffset,kTRUE,kFALSE);
fTimeBinSize = 4;
indexlast = 0;
index1 = 0;
- indexlast1 = fSDDhTask;
+ indexlast1 = fSDDhTask;
+ // cout<<"Last of the offline "<<fSDDhTask<<endl;
indexlast2 = 0;
char *hname[3];
for(Int_t i=0; i<3; i++) hname[i]= new char[50];
TProfile2D *fModuleChargeMapFSE = new TProfile2D(hname[0],hname[1],256/fTimeBinSize,-0.5,255.5,256,-0.5,255.5);
fModuleChargeMapFSE->GetXaxis()->SetTitle("Time Bin");
fModuleChargeMapFSE->GetYaxis()->SetTitle("Anode");
- fAliITSQADataMakerRec->Add2RawsList((new TProfile2D(*fModuleChargeMapFSE)),indexlast1 + index1 + fGenOffset,kTRUE,kTRUE);
+ fAliITSQADataMakerRec->Add2RawsList((new TProfile2D(*fModuleChargeMapFSE)),indexlast1 + index1 + fGenOffset,kTRUE,kFALSE);
delete fModuleChargeMapFSE;
fSDDhTask++;
TProfile2D *fModuleChargeMap = new TProfile2D(hname[0],hname[1],256/fTimeBinSize,-0.5,255.5,256,-0.5,255.5);
fModuleChargeMap->GetXaxis()->SetTitle("Time Bin");
fModuleChargeMap->GetYaxis()->SetTitle("Anode");
- fAliITSQADataMakerRec->Add2RawsList((new TProfile2D(*fModuleChargeMap)),indexlast1 + index1 + fGenOffset,kTRUE,kTRUE);
+ fAliITSQADataMakerRec->Add2RawsList((new TProfile2D(*fModuleChargeMap)),indexlast1 + index1 + fGenOffset,kTRUE,kFALSE);
delete fModuleChargeMap;
fSDDhTask++;
AliDebug(1,"entering MakeRaws\n");
rawReader->SelectEquipment(17,fgkeqOffset,fgkeqOffset + fgkDDLidRange);
- rawReader->Reset();
- AliITSRawStreamSDD s(rawReader);
- s.SetDDLModuleMap(fDDLModuleMap);
+ rawReader->Reset();
+ AliITSRawStream *stream;
+
+ if(fkOnline==kTRUE)
+ {
+ if(GetHLTMode()==kTRUE)
+ {
+ AliInfo("Online mode: HLT C compressed mode used for SDD\n");
+ stream = new AliITSRawStreamSDDCompressed(rawReader); }
+ else{
+ AliInfo("Online mode: HLT A mode used for SDD\n");
+ stream = new AliITSRawStreamSDD(rawReader);}
+ }
+ else
+ {
+ if(fHLTSDD->IsHLTmodeC()==kTRUE){
+ AliInfo("Offline mode: HLT C compressed mode used for SDD\n");
+ stream = new AliITSRawStreamSDDCompressed(rawReader);
+ }else
+ {
+ AliInfo("Offline mode: HLT A mode used for SDD\n");
+ stream = new AliITSRawStreamSDD(rawReader);
+ }
+ }
+
+ //ckeck on HLT mode
+
+
+
+ // AliITSRawStreamSDD s(rawReader);
+ stream->SetDDLModuleMap(fDDLModuleMap);
+
Int_t lay, lad, det;
Int_t index=0;
if(fkOnline) {
for(Int_t moduleSDD =0; moduleSDD<fgknSDDmodules; moduleSDD++){
for(Int_t iside=0;iside<fgknSide;iside++) {
- if(fSDDhTask > 40 + index) fAliITSQADataMakerRec->GetRawsData(40 + index +fGenOffset)->Reset();
+ if(fSDDhTask > 41 + index) fAliITSQADataMakerRec->GetRawsData(41 + index +fGenOffset)->Reset();
index++;
}
}
}
+
Int_t cnt = 0;
Int_t ildcID = -1;
Int_t iddl = -1;
Int_t isddmod = -1;
Int_t coord1, coord2, signal, moduleSDD, ioffset, iorder, activeModule, index1;
- while(s.Next()) {
+
+ while(stream->Next()) {
ildcID = rawReader->GetLDCId();
iddl = rawReader->GetDDLID() - fgkDDLIDshift;
- isddmod = s.GetModuleNumber(iddl,s.GetCarlosId());
+ isddmod = fDDLModuleMap->GetModuleNumber(iddl,stream->GetCarlosId());
+ // cout<<"isddmod "<<isddmod<<endl;
if(isddmod==-1){
- AliDebug(1,Form("Found module with iddl: %d, s.GetCarlosId: %d \n",iddl,s.GetCarlosId() ));
+ AliDebug(1,Form("Found module with iddl: %d, stream->GetCarlosId: %d \n",iddl,stream->GetCarlosId() ));
continue;
}
- if(s.IsCompletedModule()) {
+ if(stream->IsCompletedModule()) {
AliDebug(1,Form("IsCompletedModule == KTRUE\n"));
continue;
}
- coord1 = s.GetCoord1();
- coord2 = s.GetCoord2();
- signal = s.GetSignal();
+ coord1 = stream->GetCoord1();
+ coord2 = stream->GetCoord2();
+ signal = stream->GetSignal();
- moduleSDD = isddmod;
- if(moduleSDD < 0 || moduleSDD>fgknSDDmodules) {
- AliDebug(1,Form( "Module SDD = %d, resetting it to 1 \n",moduleSDD));
+ moduleSDD = isddmod - fgkmodoffset;
+
+ if(moduleSDD <fgkmodoffset|| moduleSDD>fgknSDDmodules+fgkmodoffset-1) {
+ AliDebug(1,Form( "Module SDD = %d, resetting it to 1 \n",isddmod));
moduleSDD = 1;
}
- fAliITSQADataMakerRec->GetRawsData(0 +fGenOffset)->Fill(moduleSDD);
+
+ fAliITSQADataMakerRec->GetRawsData(0 +fGenOffset)->Fill(isddmod);
AliITSgeomTGeo::GetModuleId(isddmod, lay, lad, det);
ioffset = 3;
if(lay==4) {
fAliITSQADataMakerRec->GetRawsData(40+fGenOffset)->Fill(det,lad);}
- Short_t iside = s.GetChannel();
+ Short_t iside = stream->GetChannel();
activeModule = moduleSDD;
index1 = activeModule * 2 + iside;
if(fkOnline) {
if(fSDDhTask > 40 + index1) {
- ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(40 + index1 +fGenOffset)))->Fill(coord2, coord1, signal);
- ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(40 + index1 + 260*2 +fGenOffset)))->Fill(coord2, coord1, signal);
+ ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(41 + index1 +fGenOffset)))->Fill(coord2, coord1, signal);
+ ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(41 + index1 + 260*2 +fGenOffset)))->Fill(coord2, coord1, signal);
}
}
cnt++;
if(!(cnt%10000)) AliDebug(1,Form(" %d raw digits read",cnt));
}
AliDebug(1,Form("Event completed, %d raw digits read",cnt));
+ delete stream;
+ stream = NULL;
}
//____________________________________________________________________________
delete h15;
fSDDhTask++;
- cout<<"Online recpoints histograms booked"<<endl;
}//online
}
+//_______________________________________________________________
+
+void AliITSQASDDDataMakerRec::SetHLTModeFromEnvironment()
+{
+
+ Int_t hltmode= ::atoi(gSystem->Getenv("HLT_MODE"));
+
+ if(hltmode==1)
+ {
+ AliInfo("Online mode: HLT mode A selected from environment for SDD\n");
+ SetHLTMode(kFALSE);
+ }
+ else
+ if(hltmode==2)
+ {
+ AliInfo("Online mode: HLT mode C compressed selected from environment for SDD\n");
+ SetHLTMode(kTRUE);
+ }
+}
//
//
// W. Ferrarese + P. Cerello Feb 2008
+// M.Siciliano Aug 2008 QA RecPoints and HLT mode
/* $Id$ */
class TObjArray;
class AliITSDDLModuleMapSDD;
-
+class AliITSHLTforSDD;
class AliITSQASDDDataMakerRec: public TObject {
public:
virtual void MakeRecPoints(TTree *clustersTree);
virtual void StartOfDetectorCycle();
virtual void EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list);
+
+
virtual ~AliITSQASDDDataMakerRec(); // dtor
Int_t GetOffset() { return fGenOffset; }
Int_t GetTaskHisto() { return fSDDhTask; }
+ void SetHLTMode(Bool_t khltmode=kFALSE){fHLTMode=khltmode;};
+ Bool_t GetHLTMode(){return fHLTMode;};
+ void SetHLTModeFromEnvironment();
+
private:
- static const Int_t fgknSDDmodules = 260; //number of SDD modules
- static const Int_t fgkmodoffset = 240; //number of SPD modules
- static const Int_t fgknAnode = 256; //anode per half-module
- static const Int_t fgknSide =2; //side per module
- static const Int_t fgkeqOffset = 256; //DDL offset
- static const Int_t fgkDDLidRange = 24; //number of DDL:so DDL range is 257-280
- static const Int_t fgkDDLIDshift = 0; //necessary option until RawStream Table is complete
- static const Int_t fgkLADDonLAY3 = 14; //number of ladder on layer 3
- static const Int_t fgkLADDonLAY4 = 22; //number of ladder on layer 4
+ static const Int_t fgknSDDmodules = 260; // number of SDD modules
+ static const Int_t fgkmodoffset = 240; // number of SPD modules
+ static const Int_t fgknAnode = 256; // anode per half-module
+ static const Int_t fgknSide =2; // side per module
+ static const Int_t fgkeqOffset = 256; // DDL offset
+ static const Int_t fgkDDLidRange = 24; // number of DDL:so DDL range is 257-280
+ static const Int_t fgkDDLIDshift = 0; // necessary option until RawStream Table is complete
+ static const Int_t fgkLADDonLAY3 = 14; // number of ladder on layer 3
+ static const Int_t fgkLADDonLAY4 = 22; // number of ladder on layer 4
- AliITSQADataMakerRec *fAliITSQADataMakerRec;//pointer to the main ctor
- Bool_t fkOnline; //online (1) or offline (0) use
- Int_t fLDC; //LDC number (0 for offline, 1 to 4 for online)
- Int_t fSDDhTask; // number of histo booked for each Task SDD
- Int_t fGenOffset; // qachecking offset
- Int_t fTimeBinSize; // time bin width in number of clocks
- AliITSDDLModuleMapSDD *fDDLModuleMap;// SDD Detector configuration for the decoding
-/*
- TProfile2D *fModuleChargeMap[2*fgknSDDmodules];//module map
- TProfile2D *fModuleChargeMapFSE[2*fgknSDDmodules];//module map for one event
-*/
- ClassDef(AliITSQASDDDataMakerRec,4) // description
+ AliITSQADataMakerRec *fAliITSQADataMakerRec;// pointer to the main ctor
+ Bool_t fkOnline; // online (1) or offline (0) use
+ Int_t fLDC; // LDC number (0 for offline, 1 to 4 for online)
+ Int_t fSDDhTask; // number of histo booked for each Task SDD
+ Int_t fGenOffset; // QAchecking offset
+ Int_t fTimeBinSize; // time bin width in number of clocks
+ AliITSDDLModuleMapSDD *fDDLModuleMap; // SDD Detector configuration for the decoding
+ Bool_t fHLTMode; // kTRUE mode C kFALSE mode A
+ // Used in online mode only
+ AliITSHLTforSDD *fHLTSDD; // used for offline QA as the HLT mode flag
+ ClassDef(AliITSQASDDDataMakerRec,5) // description
};