-/**************************************************************************\r
- * Copyright(c) 2007-2009, 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
-/* $Id$ */\r
-\r
-// *************************************************************\r
-// Checks the quality assurance \r
-// by comparing with reference data\r
-// contained in a DB\r
-// -------------------------------------------------------------\r
-// W. Ferrarese + P. Cerello Feb 2008\r
-// INFN Torino\r
-\r
-// --- ROOT system ---\r
-#include <TTree.h>\r
-// --- Standard library ---\r
-\r
-// --- AliRoot header files ---\r
-#include "AliITSQADataMakerSim.h"\r
-#include "AliITSQASSDDataMakerSim.h"\r
-#include "AliLog.h"\r
-#include "AliQA.h"\r
-#include "AliQAChecker.h"\r
-#include "AliRawReader.h"\r
-\r
-ClassImp(AliITSQASSDDataMakerSim)\r
-\r
-//____________________________________________________________________________ \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
-{\r
- //ctor used to discriminate OnLine-Offline analysis \r
-}\r
-\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
-{\r
- //copy ctor \r
- fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; \r
- fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle());\r
- }\r
-\r
-//__________________________________________________________________\r
-AliITSQASSDDataMakerSim& AliITSQASSDDataMakerSim::operator = (const AliITSQASSDDataMakerSim& qac )\r
-{\r
- // Equal operator.\r
- this->~AliITSQASSDDataMakerSim();\r
- new(this) AliITSQASSDDataMakerSim(qac);\r
- return *this;\r
-}\r
-\r
-//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::StartOfDetectorCycle()\r
-{\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
- // 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
-}\r
-\r
-//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::InitDigits()\r
-{ \r
- // Initialization for DIGIT data - SSD -\r
- fDigitsOffset = (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
-\r
-}\r
-\r
-\r
-//____________________________________________________________________________\r
-void AliITSQASSDDataMakerSim::MakeDigits(TTree * /*digits*/)\r
-{ \r
- // Fill QA for DIGIT - SSD -\r
-}\r
-\r
-\r
-\r
-\r
-//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::InitSDigits()\r
-{ \r
- // Initialization for SDIGIT data - SSD -\r
- fSDigitsOffset = (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
-}\r
-\r
-\r
-//____________________________________________________________________________\r
-void AliITSQASSDDataMakerSim::MakeSDigits(TTree * /*sdigits*/)\r
-{ \r
- // Fill QA for SDIGIT - SSD -\r
-}\r
-\r
-\r
-\r
-\r
-\r
-//____________________________________________________________________________ \r
-void AliITSQASSDDataMakerSim::InitHits()\r
-{ \r
- // Initialization for HITS data - SSD -\r
- fHitsOffset = (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
-}\r
-\r
-\r
-//____________________________________________________________________________\r
-void AliITSQASSDDataMakerSim::MakeHits(TTree * /*hits*/)\r
-{ \r
- // Fill QA for HITS - SSD -\r
-}\r
+/**************************************************************************
+ * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/* $Id$ */
+
+// *************************************************************
+// Checks the quality assurance
+// by comparing with reference data
+// contained in a DB
+// -------------------------------------------------------------
+// W. Ferrarese + P. Cerello Feb 2008
+// INFN Torino
+// SSD QA part: P. Christakoglou - NIKHEF/UU
+
+// --- ROOT system ---
+#include <TTree.h>
+#include <TH1.h>
+#include <TH2.h>
+#include <TMath.h>
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliITS.h"
+#include "AliITSmodule.h"
+#include "AliITShit.h"
+#include "AliITSdigit.h"
+#include "AliITSpListItem.h"
+#include "AliRun.h"
+#include "AliITSQADataMakerSim.h"
+#include "AliITSQASSDDataMakerSim.h"
+#include "AliLog.h"
+#include "AliQAv1.h"
+#include "AliQAChecker.h"
+#include "AliRawReader.h"
+
+ClassImp(AliITSQASSDDataMakerSim)
+
+//____________________________________________________________________________
+AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) :
+TObject(),
+fAliITSQADataMakerSim(aliITSQADataMakerSim),
+//fSSDhTask(0),
+fSSDhHTask(0),
+fSSDhSTask(0),
+fSSDhDTask(0),
+fGenOffsetH(0),
+fGenOffsetS(0),
+fGenOffsetD(0)
+{
+ //ctor used to discriminate OnLine-Offline analysis
+}
+
+//____________________________________________________________________________
+AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(const AliITSQASSDDataMakerSim& qadm) :
+TObject(),
+fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim),
+//fSSDhTask(qadm.fSSDhTask),
+fSSDhHTask(qadm.fSSDhHTask),
+fSSDhSTask(qadm.fSSDhSTask),
+fSSDhDTask(qadm.fSSDhDTask),
+fGenOffsetH(qadm.fGenOffsetH),
+fGenOffsetS(qadm.fGenOffsetS),
+fGenOffsetD(qadm.fGenOffsetD)
+{
+ //copy ctor
+ fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ;
+ fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle());
+ }
+
+//__________________________________________________________________
+AliITSQASSDDataMakerSim& AliITSQASSDDataMakerSim::operator = (const AliITSQASSDDataMakerSim& qac ) {
+ // Equal operator.
+ this->~AliITSQASSDDataMakerSim();
+ new(this) AliITSQASSDDataMakerSim(qac);
+ return *this;
+}
+
+//____________________________________________________________________________
+void AliITSQASSDDataMakerSim::StartOfDetectorCycle() {
+ //Detector specific actions at start of cycle
+ AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SSD Cycle\n");
+}
+
+//____________________________________________________________________________
+void AliITSQASSDDataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t /*task*/, TObjArray* /*list*/) {
+ // launch the QA checking
+ AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n");
+
+// AliQAChecker::Instance()->Run( AliQAv1::kITS , task, list);
+}
+
+//____________________________________________________________________________
+void AliITSQASSDDataMakerSim::InitDigits() {
+ // Initialization for DIGIT data - SSD -
+ const Bool_t expert = kTRUE ;
+ const Bool_t image = kTRUE ;
+
+ fGenOffsetD = (fAliITSQADataMakerSim->fDigitsQAList[AliRecoParam::kDefault])->GetEntries();
+
+ // custom code here
+ TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule",
+ "SSD Digits Module;SSD Module Number;N_{DIGITS}",
+ 1698,499.5,2197.5);
+ fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModule,
+ fGenOffsetD + 0, !expert, image);
+ fSSDhDTask += 1;
+ TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip",
+ "SSD Digits Module Strip;N_{Strip};N_{Module}",
+ 1540,0,1540,1698,499.5,2197.5);
+ fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModuleStrip,
+ fGenOffsetD + 1, !expert, image);
+ fSSDhDTask += 1;
+
+ AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Digits histograms booked\n",fSSDhDTask));
+
+}
+
+//____________________________________________________________________________
+void AliITSQASSDDataMakerSim::MakeDigits(TTree *digits) {
+ // Fill QA for DIGIT - SSD -
+ AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
+ fITS->SetTreeAddress();
+ TClonesArray *iSSDdigits = fITS->DigitsAddress(2);
+ for(Int_t iModule = 500; iModule < 2198; iModule++) {
+ iSSDdigits->Clear();
+ digits->GetEvent(iModule);
+ Int_t ndigits = iSSDdigits->GetEntries();
+ fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD + 0)->Fill(iModule,ndigits);
+ if(ndigits != 0)
+ AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Digits: %d",iModule,ndigits));
+
+ for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {
+ AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit);
+ Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips;
+ ((TH2F *)fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD + 1))->Fill(fStripNumber,iModule,dig->GetSignal());
+ }//digit loop
+ }//module loop
+}
+
+//____________________________________________________________________________
+void AliITSQASSDDataMakerSim::InitSDigits() {
+ // Initialization for SDIGIT data - SSD -
+ const Bool_t expert = kTRUE ;
+ const Bool_t image = kTRUE ;
+
+ fGenOffsetS = (fAliITSQADataMakerSim->fSDigitsQAList[AliRecoParam::kDefault])->GetEntries();
+
+ // custom code here
+ TH1F *fHistSSDModule = new TH1F("fHistSSDSDigitsModule",
+ "SSD SDigits Module;SSD Module Number;N_{SDIGITS}",
+ 1698,499.5,2197.5);
+ fAliITSQADataMakerSim->Add2SDigitsList(fHistSSDModule,
+ fGenOffsetS + 0, !expert, image);
+ fSSDhSTask += 1;
+
+ AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD SDigits histograms booked\n",fSSDhSTask));
+}
+
+//____________________________________________________________________________
+void AliITSQASSDDataMakerSim::MakeSDigits(TTree *sdigits) {
+ // Fill QA for SDIGIT - SSD -
+ static TClonesArray iSSDEmpty("AliITSpListItem",10000);
+ iSSDEmpty.Clear();
+ TClonesArray *iSSDsdigits = &iSSDEmpty;
+
+ AliDebug(AliQAv1::GetQADebugLevel(), Form("Trying to access the sdigits histogram: %d\n",fGenOffsetS));
+
+ TBranch *brchSDigits = sdigits->GetBranch("ITS");
+ brchSDigits->SetAddress(&iSSDsdigits);
+ for(Int_t iModule = 500; iModule < 2198; iModule++) {
+ iSSDsdigits->Clear();
+ sdigits->GetEvent(iModule);
+ Int_t ndigits = iSSDsdigits->GetEntries();
+ fAliITSQADataMakerSim->GetSDigitsData(fGenOffsetS + 0)->Fill(iModule,ndigits);
+ if(ndigits != 0)
+ AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Digits: %d",iModule,ndigits));
+
+ for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {
+ AliITSpListItem *dig=(AliITSpListItem*)iSSDsdigits->At(iDigit);
+ dig=0;
+ }//digit loop
+ }//module loop
+}
+
+//____________________________________________________________________________
+void AliITSQASSDDataMakerSim::InitHits() {
+ // Initialization for HITS data - SSD -
+ const Bool_t expert = kTRUE ;
+ const Bool_t image = kTRUE ;
+
+ fGenOffsetH = (fAliITSQADataMakerSim->fHitsQAList[AliRecoParam::kDefault])->GetEntries();
+
+ // custom code here
+ TH1F *fHistSSDModule = new TH1F("fHistSSDHitsModule",
+ "SSD Hits Module;SDD Module Number;N_{HITS}",
+ 1698,499.5,2197.5);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDModule,
+ fGenOffsetH + 0, !expert, image);
+ fSSDhHTask += 1;
+ TH1F *fHistSSDGlobalX = new TH1F("fHistSSDHitsGlobalX",
+ "SSD Hits Global X;x [cm];Entries",
+ 1000,-50.,50.);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalX,
+ fGenOffsetH + 1, !expert, image);
+ fSSDhHTask += 1;
+ TH1F *fHistSSDGlobalY = new TH1F("fHistSSDHitsGlobalY",
+ "SSD Hits Global Y;y [cm];Entries",
+ 1000,-50.,50.);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalY,
+ fGenOffsetH + 2, !expert, image);
+ fSSDhHTask += 1;
+ TH1F *fHistSSDGlobalZ = new TH1F("fHistSSDHitsGlobalZ",
+ "SSD Hits Global Z ;z [cm];Entries",
+ 1000,-60.,60.);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalZ,
+ fGenOffsetH + 3, !expert, image);
+ fSSDhHTask += 1;
+ TH1F *fHistSSDLocalX = new TH1F("fHistSSDHitsLocalX",
+ "SSD Hits Local X;x [cm];Entries",
+ 1000,-4.,4.);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalX,
+ fGenOffsetH + 4, !expert, image);
+ fSSDhHTask += 1;
+ TH1F *fHistSSDLocalY = new TH1F("fHistSSDHitsLocalY",
+ "SSD Hits Local Y;y [cm];Entries",
+ 1000,-0.1,0.1);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalY,
+ fGenOffsetH + 5, !expert, image);
+ fSSDhHTask += 1;
+ TH1F *fHistSSDLocalZ = new TH1F("fHistSSDHitsLocalZ",
+ "SSD Hits Local Z;z [cm];Entries",
+ 1000,-4.,4.);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalZ,
+ fGenOffsetH + 6, !expert, image);
+ fSSDhHTask += 1;
+ TH1F *fHistSSDIonization = new TH1F("fHistSSDHitsIonization",
+ "SSD Hits Ionization;log(dE/dx) [KeV];N_{Hits}",
+ 100,-7,-2);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDIonization,
+ fGenOffsetH + 7, !expert, image);
+ fSSDhHTask += 1;
+ TH2F *fHistSSDGlobalXY = new TH2F("fHistSSDHitsGlobalXY",
+ "SSD Hits Global XY;x [cm];y [cm]",
+ 1000,-50.,50.,
+ 1000,-50.,50.);
+ fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalXY,
+ fGenOffsetH + 8, !expert, image);
+ fSSDhHTask += 1;
+
+ AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Hits histograms booked\n",fSSDhHTask));
+}
+
+
+//____________________________________________________________________________
+void AliITSQASSDDataMakerSim::MakeHits(TTree *hits) {
+ // Fill QA for HITS - SSD -
+ AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
+ fITS->SetTreeAddress();
+ Int_t nmodules;
+ fITS->InitModules(-1,nmodules);
+ fITS->FillModules(hits,0);
+ for(Int_t iModule = 500; iModule < 2198; iModule++) {
+ AliITSmodule *module = fITS->GetModule(iModule);
+ TObjArray *arrHits = module->GetHits();
+ Int_t nhits = arrHits->GetEntriesFast();
+ if(nhits != 0)
+ AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Hits: %d",iModule,nhits));
+ for (Int_t iHit = 0; iHit < nhits; iHit++) {
+ AliITShit *hit = (AliITShit*) arrHits->At(iHit);
+
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 0)->Fill(iModule);
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 1)->Fill(hit->GetXG());
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 2)->Fill(hit->GetYG());
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 3)->Fill(hit->GetZG());
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 4)->Fill(hit->GetXL());
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 5)->Fill(hit->GetYL());
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 6)->Fill(hit->GetZL());
+ if(hit->GetIonization())
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 7)->Fill(TMath::Log10(hit->GetIonization()));
+ fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 8)->Fill(hit->GetXG(),hit->GetYG());
+ }//hit loop
+ }//module loop
+}
+
+
+
+
+//____________________________________________________________________________
+Int_t AliITSQASSDDataMakerSim::GetOffset(AliQAv1::TASKINDEX_t task){
+ // Returns histogram offset according to the specified task
+ Int_t offset=0;
+ if( task == AliQAv1::kHITS){
+ offset=fGenOffsetH;
+ }
+ else if( task == AliQAv1::kSDIGITS) {
+ offset=fGenOffsetS;
+ }
+ else if( task == AliQAv1::kDIGITS) {
+ offset=fGenOffsetD;
+ }
+ else {
+ AliInfo("No task has been selected. TaskHisto set to zero.\n");
+ }
+
+ return offset;
+}
+
+
+//____________________________________________________________________________
+Int_t AliITSQASSDDataMakerSim::GetTaskHisto(AliQAv1::TASKINDEX_t task) {
+ // Returns the number of booked histograms for the selected task
+ Int_t histotot=0;
+ if( task == AliQAv1::kHITS) {
+ histotot=fSSDhHTask ;
+ }
+ else if( task == AliQAv1::kSDIGITS) {
+ histotot=fSSDhSTask;
+ }
+ else if( task == AliQAv1::kDIGITS) {
+ histotot=fSSDhDTask ;
+ }
+ else {
+ AliInfo("No task has been selected. TaskHisto set to zero.\n");
+ }
+ return histotot;
+
+}