/*
Contact: cvetan.cheshkov@cern.ch
-Link: missing
+Link: http://alisoft.cern.ch/viewvc/trunk/ITS/ITSSPDVertexDiamondda.cxx?root=AliRoot&view=log , /afs/cern.ch/user/c/cheshkov/public/08000058338016.30.root.date.gz
+Reference Run: 58338
Run Type: PHYSICS
DA Type: MON
-Number of events needed: 10000
-Input Files:
-Output Files:
+Number of events needed: 100
+Input Files: GRP/Geometry/Data , ITS/Align/Data , spd_noisy_ocdb , spd_dead_ocdb
+Output Files: SPDVertexDiamondDA.root
Trigger types used: PHYSICS
*/
-#define X_LIMIT 2.0
-#define Y_LIMIT 2.0
-#define Z_LIMIT 50.0
-#define X_DELTA 0.02
-#define Y_DELTA 0.02
-#define Z_DELTA 0.2
#define OUTPUT_FILE "SPDVertexDiamondDA.root"
-#define CDB_STORAGE "local://$ALICE_ROOT"
#define N_EVENTS_AUTOSAVE 50
-#define NFITPARAMS 5
extern "C" {
#include "daqDA.h"
//int amore::da::Updated(char const*) {}
#endif
-#include <TTree.h>
-#include <TH1.h>
-#include <TH2.h>
-#include <TF2.h>
-#include <TFile.h>
#include <TPluginManager.h>
#include <TROOT.h>
-#include <TFitter.h>
+#include <TH1.h>
+#include <TH2.h>
+#include <TSystem.h>
+#include "AliLog.h"
#include "AliRawReaderDate.h"
-#include "AliGeomManager.h"
#include "AliCDBManager.h"
-#include "AliESDVertex.h"
-#include "AliITSDetTypeRec.h"
-#include "AliITSInitGeometry.h"
-#include "AliITSVertexer3DTapan.h"
-
-TF2 *fitFcn = 0x0;
-
-AliESDVertex* FitVertexDiamond(TH2F *hXY, TH1F *hZ);
+#include "AliITSMeanVertexer.h"
int main(int argc, char **argv) {
"TStreamerInfo",
"RIO",
"TStreamerInfo()");
- TFitter *minuitFit = new TFitter(NFITPARAMS);
- TVirtualFitter::SetFitter(minuitFit);
int status;
if (argc<2) {
}
int runNr = atoi(getenv("DATE_RUN_NUMBER"));
- // Histograms initialization
- TH2F *hXY = new TH2F("hXY","Vertex Diamond (Y vs X)",
- 2*(Int_t)(X_LIMIT/X_DELTA),-X_LIMIT,X_LIMIT,
- 2*(Int_t)(Y_LIMIT/Y_DELTA),-Y_LIMIT,Y_LIMIT);
- TH1F *hZ = new TH1F("hZ"," Longitudinal Vertex Profile",
- 2*(Int_t)(Z_LIMIT/Z_DELTA),-Z_LIMIT,Z_LIMIT);
+ // Get the necessary OCDB files from the DAQ detector DB
+ if (gSystem->AccessPathName("localOCDB/GRP/Geometry/Data",kFileExists)) {
+ if (gSystem->mkdir("localOCDB/GRP/Geometry/Data",kTRUE) != 0) {
+ printf("Failed to create directory: localOCDB/GRP/Geometry/Data");
+ return -1;
+ }
+ }
+ status = daqDA_DB_getFile("GRP/Geometry/Data","localOCDB/GRP/Geometry/Data/Run0_999999999_v0_s0.root");
+ if (status) {
+ printf("Failed to get geometry file (GRP/Geometry/Data) from DAQdetDB, status=%d\n", status);
+ return -1;
+ }
+
+ if (gSystem->AccessPathName("localOCDB/ITS/Align/Data",kFileExists)) {
+ if (gSystem->mkdir("localOCDB/ITS/Align/Data",kTRUE) != 0) {
+ printf("Failed to create directory: localOCDB/ITS/Align/Data");
+ return -1;
+ }
+ }
+ status = daqDA_DB_getFile("ITS/Align/Data","localOCDB/ITS/Align/Data/Run0_999999999_v0_s0.root");
+ if (status) {
+ printf("Failed to get its-alignment file (ITS/Align/Data) from DAQdetDB, status=%d\n", status);
+ return -1;
+ }
+
+ if (gSystem->AccessPathName("localOCDB/ITS/Calib/SPDNoisy",kFileExists)) {
+ if (gSystem->mkdir("localOCDB/ITS/Calib/SPDNoisy",kTRUE) != 0) {
+ printf("Failed to create directory: localOCDB/ITS/Calib/SPDNoisy");
+ return -1;
+ }
+ }
+ status = daqDA_DB_getFile("spd_noisy_ocdb","localOCDB/ITS/Calib/SPDNoisy/Run0_999999999_v0_s0.root");
+ if (status) {
+ printf("Failed to get spd file (spd_noisy_ocdb) from DAQdetDB, status=%d\n", status);
+ return -1;
+ }
+
+ if (gSystem->AccessPathName("localOCDB/ITS/Calib/SPDDead",kFileExists)) {
+ if (gSystem->mkdir("localOCDB/ITS/Calib/SPDDead",kTRUE) != 0) {
+ printf("Failed to create directory: localOCDB/ITS/Calib/SPDDead");
+ return -1;
+ }
+ }
+ status = daqDA_DB_getFile("spd_dead_ocdb","localOCDB/ITS/Calib/SPDDead/Run0_999999999_v0_s0.root");
+ if (status) {
+ printf("Failed to get spd file (spd_dead_ocdb) from DAQdetDB, status=%d\n", status);
+ return -1;
+ }
// Global initializations
+ AliLog::SetGlobalLogLevel(AliLog::kError);
AliCDBManager *man = AliCDBManager::Instance();
- man->SetDefaultStorage(CDB_STORAGE);
+ man->SetDefaultStorage("local://localOCDB");
man->SetRun(runNr);
- AliGeomManager::LoadGeometry("geometry.root");
- AliGeomManager::ApplyAlignObjsFromCDB("ITS");
-
- // ITS initializations
- AliITSInitGeometry initgeom;
- AliITSgeom *geom = initgeom.CreateAliITSgeom();
- printf("Geometry name: %s\n",(initgeom.GetGeometryName()).Data());
- AliITSDetTypeRec *detTypeRec = new AliITSDetTypeRec();
- detTypeRec->SetITSgeom(geom);
- detTypeRec->SetDefaults();
- detTypeRec->SetDefaultClusterFindersV2(kTRUE);
+ // Init mean vertexer
+ AliITSMeanVertexer *mv = new AliITSMeanVertexer();
+ if (!mv->Init()) {
+ printf("Initialization of mean vertexer object failed ! Check the log for details");
+ return -1;
+ }
// Initialization of AMORE sender
#ifdef ALI_AMORE
nevents_physics++;
AliRawReader *rawReader = new AliRawReaderDate((void*)event);
- // Run SPD cluster finder
- TTree* clustersTree = new TTree("TreeR", "Reconstructed Points Container"); //make a tree
- detTypeRec->DigitsToRecPoints(rawReader,clustersTree,"SPD");
-
- // Run vertex-finder
- AliITSVertexer3DTapan *vertexer = new AliITSVertexer3DTapan(geom,1000);
- AliESDVertex *vtx = vertexer->FindVertexForCurrentEvent(clustersTree);
-
- if (TMath::Abs(vtx->GetChi2()) < 0.1) {
- // Fill the vertex into the histos
- nevents_with_vertex++;
- hXY->Fill(vtx->GetXv(),vtx->GetYv());
- hZ->Fill(vtx->GetZv());
-
- // Auto save
- if ((nevents_with_vertex%N_EVENTS_AUTOSAVE) == 0) {
- TFile outFile(OUTPUT_FILE, "update");
- AliESDVertex *fitVtx = FitVertexDiamond(hXY,hZ);
- if (fitVtx) {
- fitVtx->Write(fitVtx->GetName(),TObject::kOverwrite);
- TH1 *fithXY = fitFcn->CreateHistogram();
- fithXY->Write(fithXY->GetName(),TObject::kOverwrite);
- delete fithXY;
- }
- hXY->Write(hXY->GetName(),TObject::kOverwrite);
- hZ->Write(hZ->GetName(),TObject::kOverwrite);
- outFile.Close();
- delete fitVtx;
- }
- }
+ // Run mean-vertexer reco
+ if (mv->Reconstruct(rawReader)) nevents_with_vertex++;
- delete vtx;
- delete vertexer;
+ // Auto save
+ if ((nevents_physics%N_EVENTS_AUTOSAVE) == 0) {
+ mv->WriteVertices(OUTPUT_FILE);
- delete clustersTree;
- delete rawReader;
+#ifdef ALI_AMORE
+ // send the histos to AMORE pool
+ printf("AMORE send status: %d\n",vtxAmore.Send(mv->GetVertexXY()->GetName(),mv->GetVertexXY()));
+ printf("AMORE send status: %d\n",vtxAmore.Send(mv->GetVertexZ()->GetName(),mv->GetVertexZ()));
+#endif
+ }
+ delete rawReader;
}
/* free resources */
break;
}
}
-
- if (detTypeRec) delete detTypeRec;
-
- // Store the final histograms
- TFile outFile(OUTPUT_FILE, "update");
- if (nevents_with_vertex > N_EVENTS_AUTOSAVE) {
- // Fit XY & Z histograms
- AliESDVertex *fitVtx = FitVertexDiamond(hXY,hZ);
- if (fitVtx) {
- fitVtx->Write(fitVtx->GetName(),TObject::kOverwrite);
- TH1 *fithXY = fitFcn->CreateHistogram();
- fithXY->Write(fithXY->GetName(),TObject::kOverwrite);
- delete fithXY;
- }
- delete fitVtx;
- }
- hXY->Write(hXY->GetName(),TObject::kOverwrite);
- hZ->Write(hZ->GetName(),TObject::kOverwrite);
- outFile.Close();
+
+ mv->WriteVertices(OUTPUT_FILE);
#ifdef ALI_AMORE
// send the histos to AMORE pool
- printf("AMORE send status: %d",vtxAmore.Send(hXY->GetName(),hXY));
+ printf("AMORE send status: %d\n",vtxAmore.Send(mv->GetVertexXY()->GetName(),mv->GetVertexXY()));
+ printf("AMORE send status: %d\n",vtxAmore.Send(mv->GetVertexZ()->GetName(),mv->GetVertexZ()));
#endif
- delete minuitFit;
- TVirtualFitter::SetFitter(0);
+ delete mv;
/* write report */
printf("Run #%s, received %d events with vertex, out of %d physics and out of %d total events\n",getenv("DATE_RUN_NUMBER"),nevents_with_vertex,nevents_physics,nevents_total);
return status;
}
-
-Double_t fitFunction(Double_t *x, Double_t *par) {
-
- Double_t t1 = x[0] - par[1];
- Double_t t2 = x[1] - par[2];
-
- return par[0]*TMath::Exp(-0.5*(t1*t1/(par[3]*par[3])+t2*t2/(par[4]*par[4])));
-}
-
-AliESDVertex* FitVertexDiamond(TH2F *hXY, TH1F *hZ)
-{
-
- if (!fitFcn) {
- fitFcn = new TF2("fitFcn",fitFunction,
- -X_LIMIT,X_LIMIT,
- -Y_LIMIT,Y_LIMIT,NFITPARAMS);
- fitFcn->SetNpx(2*(Int_t)(X_LIMIT/X_DELTA));
- fitFcn->SetNpy(2*(Int_t)(Y_LIMIT/Y_DELTA));
- fitFcn->SetParameters(hXY->GetMaximum(),0,0,hXY->GetRMS(1),hXY->GetRMS(2));
- fitFcn->Update();
- }
-
- if (hXY->Fit("fitFcn","L0V+") != 0) {
- printf("XY fit failed!");
- return 0x0;
- }
-
- Double_t pos[3],poserr[3];
- pos[0] = fitFcn->GetParameter(1);
- pos[1] = fitFcn->GetParameter(2);
- poserr[0] = fitFcn->GetParameter(3);
- poserr[1] = fitFcn->GetParameter(4);
-
- // Could be replaced by something more robust...
- pos[2] = hZ->GetMean();
- poserr[2] = hZ->GetRMS();
-
- return new AliESDVertex(pos,poserr);
-}