// -------------------------------------------------------------\r
// W. Ferrarese + P. Cerello Feb 2008\r
// INFN Torino\r
+// SSD QA part: P. Christakoglou - NIKHEF/UU\r
\r
// --- ROOT system ---\r
#include <TTree.h>\r
+#include <TH1.h>\r
+#include <TH2.h>\r
+#include <TMath.h>\r
// --- Standard library ---\r
\r
// --- AliRoot header files ---\r
+#include "AliITS.h"\r
+#include "AliITSmodule.h"\r
+#include "AliITShit.h"\r
+#include "AliITSdigit.h"\r
+#include "AliITSpListItem.h"\r
+#include "AliRun.h"\r
#include "AliITSQADataMakerSim.h"\r
#include "AliITSQASSDDataMakerSim.h"\r
#include "AliLog.h"\r
AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) :\r
TObject(),\r
fAliITSQADataMakerSim(aliITSQADataMakerSim),\r
-fSSDhDigits(0),\r
-fSSDhSDigits(0),\r
-fSSDhHits(0),\r
-fDigitsOffset(0),\r
-fSDigitsOffset(0),\r
-fHitsOffset(0)\r
+fSSDhTask(0),\r
+fGenOffsetH(0),\r
+fGenOffsetS(0), \r
+fGenOffsetD(0) \r
{\r
//ctor used to discriminate OnLine-Offline analysis \r
}\r
AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(const AliITSQASSDDataMakerSim& qadm) :\r
TObject(),\r
fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim),\r
-fSSDhDigits(qadm.fSSDhDigits),\r
-fSSDhSDigits(qadm.fSSDhSDigits),\r
-fSSDhHits(qadm.fSSDhHits),\r
-fDigitsOffset(qadm.fDigitsOffset),\r
-fSDigitsOffset(qadm.fSDigitsOffset),\r
-fHitsOffset(qadm.fHitsOffset)\r
+fSSDhTask(qadm.fSSDhTask),\r
+fGenOffsetH(qadm.fGenOffsetH), \r
+fGenOffsetS(qadm.fGenOffsetS), \r
+fGenOffsetD(qadm.fGenOffsetD) \r
{\r
//copy ctor \r
fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; \r
}\r
\r
//__________________________________________________________________\r
-AliITSQASSDDataMakerSim& AliITSQASSDDataMakerSim::operator = (const AliITSQASSDDataMakerSim& qac )\r
-{\r
+AliITSQASSDDataMakerSim& AliITSQASSDDataMakerSim::operator = (const AliITSQASSDDataMakerSim& qac ) {\r
// Equal operator.\r
this->~AliITSQASSDDataMakerSim();\r
new(this) AliITSQASSDDataMakerSim(qac);\r
}\r
\r
//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::StartOfDetectorCycle()\r
-{\r
+void AliITSQASSDDataMakerSim::StartOfDetectorCycle() {\r
//Detector specific actions at start of cycle\r
AliDebug(1,"AliITSQADM::Start of SSD Cycle\n");\r
}\r
\r
//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t /*task*/, TObjArray* /*list*/)\r
-{\r
+void AliITSQASSDDataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray* list) {\r
// launch the QA checking\r
AliDebug(1,"AliITSDM instantiates checker with Run(AliQA::kITS, task, list)\n"); \r
\r
- //AliQAChecker::Instance()->Run( AliQA::kITS , task, list);\r
+ AliQAChecker::Instance()->Run( AliQA::kITS , task, list);\r
}\r
\r
//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::InitDigits()\r
-{ \r
+void AliITSQASSDDataMakerSim::InitDigits() { \r
// Initialization for DIGIT data - SSD -\r
- fDigitsOffset = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries();\r
+ fGenOffsetD = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries();\r
\r
// custom code here\r
-\r
- //fSSDhDigits must be incremented by one unit every time a histogram is ADDED to the QA List\r
-\r
- AliDebug(1,Form("%d SSD Digits histograms booked\n",fSSDhDigits));\r
+ TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule",\r
+ ";SSD Module Number;N_{DIGITS}",\r
+ 1698,499.5,2197.5); \r
+ fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModule,\r
+ fGenOffsetD + 0);\r
+ fSSDhTask += 1;\r
+ TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip",\r
+ ";N_{Strip};N_{Module}",\r
+ 1540,0,1540,1698,499.5,2197.5); \r
+ fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModuleStrip,\r
+ fGenOffsetD + 1);\r
+ fSSDhTask += 1;\r
+\r
+ AliDebug(1,Form("%d SSD Digits histograms booked\n",fSSDhTask));\r
\r
}\r
\r
-\r
//____________________________________________________________________________\r
-void AliITSQASSDDataMakerSim::MakeDigits(TTree * /*digits*/)\r
-{ \r
+void AliITSQASSDDataMakerSim::MakeDigits(TTree *digits) { \r
// Fill QA for DIGIT - SSD -\r
+ AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");\r
+ fITS->SetTreeAddress();\r
+ TClonesArray *iSSDdigits = fITS->DigitsAddress(2);\r
+ for(Int_t iModule = 500; iModule < 2198; iModule++) {\r
+ iSSDdigits->Clear();\r
+ digits->GetEvent(iModule); \r
+ Int_t ndigits = iSSDdigits->GetEntries();\r
+ fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD + 0)->Fill(iModule,ndigits);\r
+ if(ndigits != 0)\r
+ AliDebug(1,Form("Module: %d - Digits: %d",iModule,ndigits));\r
+ \r
+ for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {\r
+ AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit);\r
+ Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips;\r
+ ((TH2F *)fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD + 1))->Fill(fStripNumber,iModule,dig->GetSignal());\r
+ }//digit loop\r
+ }//module loop\r
}\r
\r
-\r
-\r
-\r
//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::InitSDigits()\r
-{ \r
+void AliITSQASSDDataMakerSim::InitSDigits() { \r
// Initialization for SDIGIT data - SSD -\r
- fSDigitsOffset = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries();\r
+ fGenOffsetS = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries();\r
\r
// custom code here\r
-\r
- //fSSDhSDigits must be incremented by one unit every time a histogram is ADDED to the QA List\r
-\r
- AliDebug(1,Form("%d SSD SDigits histograms booked\n",fSSDhSDigits));\r
-\r
+ TH1F *fHistSSDModule = new TH1F("fHistSSDSDigitsModule",\r
+ ";SSD Module Number;N_{SDIGITS}",\r
+ 1698,499.5,2197.5); \r
+ fAliITSQADataMakerSim->Add2SDigitsList(fHistSSDModule,\r
+ fGenOffsetS + 0);\r
+ fSSDhTask += 1; \r
+\r
+ AliDebug(1,Form("%d SSD SDigits histograms booked\n",fSSDhTask));\r
}\r
\r
-\r
//____________________________________________________________________________\r
-void AliITSQASSDDataMakerSim::MakeSDigits(TTree * /*sdigits*/)\r
-{ \r
+void AliITSQASSDDataMakerSim::MakeSDigits(TTree *sdigits) { \r
// Fill QA for SDIGIT - SSD -\r
+ static TClonesArray iSSDEmpty("AliITSpListItem",10000);\r
+ iSSDEmpty.Clear();\r
+ TClonesArray *iSSDsdigits = &iSSDEmpty;\r
+\r
+ AliInfo(Form("Trying to access the sdigits histogram: %d\n",fGenOffsetS));\r
+\r
+ TBranch *brchSDigits = sdigits->GetBranch("ITS");\r
+ brchSDigits->SetAddress(&iSSDsdigits);\r
+ for(Int_t iModule = 500; iModule < 2198; iModule++) {\r
+ iSSDsdigits->Clear();\r
+ sdigits->GetEvent(iModule); \r
+ Int_t ndigits = iSSDsdigits->GetEntries();\r
+ fAliITSQADataMakerSim->GetSDigitsData(fGenOffsetS + 0)->Fill(iModule,ndigits);\r
+ if(ndigits != 0)\r
+ AliDebug(1,Form("Module: %d - Digits: %d",iModule,ndigits));\r
+\r
+ for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {\r
+ AliITSpListItem *dig=(AliITSpListItem*)iSSDsdigits->At(iDigit);\r
+ dig=0;\r
+ }//digit loop\r
+ }//module loop\r
}\r
\r
-\r
-\r
-\r
-\r
//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::InitHits()\r
-{ \r
+void AliITSQASSDDataMakerSim::InitHits() { \r
// Initialization for HITS data - SSD -\r
- fHitsOffset = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries();\r
+ fGenOffsetH = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries();\r
\r
// custom code here\r
-\r
- //fSSDhHits must be incremented by one unit every time a histogram is ADDED to the QA List\r
-\r
- AliDebug(1,Form("%d SSD Hits histograms booked\n",fSSDhHits));\r
-\r
+ TH1F *fHistSSDModule = new TH1F("fHistSSDHitsModule",\r
+ ";SDD Module Number;N_{HITS}",\r
+ 1698,499.5,2197.5); \r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDModule,\r
+ fGenOffsetH + 0);\r
+ fSSDhTask += 1;\r
+ TH1F *fHistSSDGlobalX = new TH1F("fHistSSDHitsGlobalX",\r
+ ";x [cm];Entries",\r
+ 1000,-50.,50.);\r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalX,\r
+ fGenOffsetH + 1);\r
+ fSSDhTask += 1;\r
+ TH1F *fHistSSDGlobalY = new TH1F("fHistSSDHitsGlobalY",\r
+ ";y [cm];Entries",\r
+ 1000,-50.,50.);\r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalY,\r
+ fGenOffsetH + 2);\r
+ fSSDhTask += 1;\r
+ TH1F *fHistSSDGlobalZ = new TH1F("fHistSSDHitsGlobalZ",\r
+ ";z [cm];Entries",\r
+ 1000,-60.,60.);\r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalZ,\r
+ fGenOffsetH + 3);\r
+ fSSDhTask += 1;\r
+ TH1F *fHistSSDLocalX = new TH1F("fHistSSDHitsLocalX",\r
+ ";x [cm];Entries",\r
+ 1000,-4.,4.);\r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalX,\r
+ fGenOffsetH + 4);\r
+ fSSDhTask += 1;\r
+ TH1F *fHistSSDLocalY = new TH1F("fHistSSDHitsLocalY",\r
+ ";y [cm];Entries",\r
+ 1000,-0.1,0.1);\r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalY,\r
+ fGenOffsetH + 5);\r
+ fSSDhTask += 1;\r
+ TH1F *fHistSSDLocalZ = new TH1F("fHistSSDHitsLocalZ",\r
+ ";z [cm];Entries",\r
+ 1000,-4.,4.);\r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalZ,\r
+ fGenOffsetH + 6);\r
+ fSSDhTask += 1;\r
+ TH1F *fHistSSDIonization = new TH1F("fHistSSDHitsIonization",\r
+ ";log(dE/dx) [KeV];N_{Hits}",\r
+ 100,-7,-2);\r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDIonization,\r
+ fGenOffsetH + 7 );\r
+ fSSDhTask += 1;\r
+ TH2F *fHistSSDGlobalXY = new TH2F("fHistSSDHitsGlobalXY",\r
+ ";x [cm];y [cm]",\r
+ 1000,-50.,50.,\r
+ 1000,-50.,50.);\r
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalXY,\r
+ fGenOffsetH + 8 );\r
+ fSSDhTask += 1;\r
+ \r
+ AliDebug(1,Form("%d SSD Hits histograms booked\n",fSSDhTask));\r
}\r
\r
\r
//____________________________________________________________________________\r
-void AliITSQASSDDataMakerSim::MakeHits(TTree * /*hits*/)\r
-{ \r
+void AliITSQASSDDataMakerSim::MakeHits(TTree *hits) { \r
// Fill QA for HITS - SSD -\r
+ AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");\r
+ fITS->SetTreeAddress();\r
+ Int_t nmodules;\r
+ fITS->InitModules(-1,nmodules);\r
+ fITS->FillModules(hits,0);\r
+ for(Int_t iModule = 500; iModule < 2198; iModule++) {\r
+ AliITSmodule *module = fITS->GetModule(iModule);\r
+ TObjArray *arrHits = module->GetHits();\r
+ Int_t nhits = arrHits->GetEntriesFast();\r
+ if(nhits != 0)\r
+ AliDebug(1,Form("Module: %d - Hits: %d",iModule,nhits));\r
+ for (Int_t iHit = 0; iHit < nhits; iHit++) {\r
+ AliITShit *hit = (AliITShit*) arrHits->At(iHit);\r
+ \r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 0)->Fill(iModule);\r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 1)->Fill(hit->GetXG());\r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 2)->Fill(hit->GetYG());\r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 3)->Fill(hit->GetZG());\r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 4)->Fill(hit->GetXL());\r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 5)->Fill(hit->GetYL());\r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 6)->Fill(hit->GetZL());\r
+ if(hit->GetIonization())\r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 7)->Fill(TMath::Log10(hit->GetIonization()));\r
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 8)->Fill(hit->GetXG(),hit->GetYG());\r
+ }//hit loop\r
+ }//module loop \r
}\r