fNbMaxCluster(2),
fOfflineTracks(kFALSE),
fStandaloneTracks(kFALSE),
+ fVersionGainUsed(0),
+ fSubVersionGainUsed(0),
+ fVersionVdriftUsed(0),
+ fSubVersionVdriftUsed(0),
fCalDetGain(0x0),
fMaxEvent(0),
fCounter(0),
fTRDCalibraFillHisto->SetPRF2dOn(); // choose to look at the PRF
fTRDCalibraFillHisto->SetLinearFitterOn(fVdriftLinear); // Other possibility vdrift VDRIFT
fTRDCalibraFillHisto->SetLinearFitterDebugOn(fVdriftLinear); // Other possibility vdrift
+ fTRDCalibraFillHisto->SetVersionGainUsed(fVersionGainUsed); // Gain Used
+ fTRDCalibraFillHisto->SetSubVersionGainUsed(fSubVersionGainUsed); // Gain Used
+ fTRDCalibraFillHisto->SetVersionVdriftUsed(fVersionVdriftUsed); // Vdrift Used
+ fTRDCalibraFillHisto->SetSubVersionVdriftUsed(fSubVersionVdriftUsed); // Vdrift Used
for(Int_t k = 0; k < 3; k++){
if(((fNz[k] != 10) && (fNrphi[k] != 10)) && ((fNz[k] != 100) && (fNrphi[k] != 100))) {
fTRDCalibraFillHisto->SetNz(k,fNz[k]); // Mode calibration
return;
}
+
fESDfriend = dynamic_cast<AliESDfriend*> (fESD->FindListObject("AliESDfriend"));
if(!fESDfriend){
AliError("fESDfriend not available");
//ULong_t status = fkEsdTrack->GetStatus();
fFriendTrack = fESDfriend->GetTrack(itrk);
- if(!fFriendTrack) continue;
+ if(!fFriendTrack) {
+ //printf("No friend track %d\n",itrk);
+ continue;
+ }
//////////////////////////////////////
// Loop on calibration objects
//////////////////////////////////////
Int_t icalib=0;
Int_t nTRDtrackV1=0;
while((fCalibObject = (TObject *)(fFriendTrack->GetCalibObject(icalib++)))){
+ //printf("Name %s\n",fCalibObject->IsA()->GetName());
if(strcmp(fCalibObject->IsA()->GetName(), "AliTRDtrackV1") != 0) continue;
//printf("Find the calibration object\n");
++nTRDtrackV1;
void SetUseSPDVertex() {fVtxTPC=kFALSE; fVtxSPD=kTRUE ;}
void SetMinNbOfContributors(Int_t minNbOfContributors) {fMinNbContributors = minNbOfContributors;};
void SetRangePrimaryVertexZ(Double_t rangePrimaryVertexZ) {fRangePrimaryVertexZ = TMath::Abs(rangePrimaryVertexZ);};
+ void SetVersionGainUsed(Int_t versionGainUsed) { fVersionGainUsed = versionGainUsed; }
+ void SetSubVersionGainUsed(Int_t subVersionGainUsed) { fSubVersionGainUsed = subVersionGainUsed; }
+ void SetVersionVdriftUsed(Int_t versionVdriftUsed) { fVersionVdriftUsed = versionVdriftUsed; }
+ void SetSubVersionVdriftUsed(Int_t subVersionVdriftUsed) { fSubVersionVdriftUsed = subVersionVdriftUsed; }
void SetLow(Int_t low) {fLow=low;};
void SetHigh(Int_t high) {fHigh=high;};
void SetNbMaxCluster(Short_t nbMaxCluster) {fNbMaxCluster = nbMaxCluster; };
void SetOfflineTracks() {fOfflineTracks=kTRUE; fStandaloneTracks=kFALSE; };
void SetStandaloneTracks() {fStandaloneTracks=kTRUE; fOfflineTracks=kFALSE; };
-
- void SetCalDetGain(AliTRDCalDet * const calDetGain) {fCalDetGain = calDetGain;};
+
+ void SetCalDetGain(AliTRDCalDet * const calDetGain) {fCalDetGain = calDetGain;};
void SetMaxEvent(Int_t nbevents) { fMaxEvent = nbevents; };
void SetDebug(Int_t debug) { fDebug = debug; };
Bool_t fOfflineTracks; // Only Offline refitted tracks
Bool_t fStandaloneTracks; // Take only standalone tracks
+ Int_t fVersionGainUsed; // VersionGainUsed
+ Int_t fSubVersionGainUsed; // SubVersionGainUsed
+ Int_t fVersionVdriftUsed; // VersionVdriftUsed
+ Int_t fSubVersionVdriftUsed; // SubVersionVdriftUsed
+
AliTRDCalDet *fCalDetGain; // Calib object gain
Int_t fMaxEvent; // max events
,fNormalizeNbOfCluster(kFALSE)
,fMaxCluster(0)
,fNbMaxCluster(0)
+ ,fVersionGainUsed(0)
+ ,fSubVersionGainUsed(0)
+ ,fVersionVdriftUsed(0)
+ ,fSubVersionVdriftUsed(0)
,fCalibraMode(new AliTRDCalibraMode())
,fDebugStreamer(0)
,fDebugLevel(0)
,fNormalizeNbOfCluster(c.fNormalizeNbOfCluster)
,fMaxCluster(c.fMaxCluster)
,fNbMaxCluster(c.fNbMaxCluster)
+ ,fVersionGainUsed(c.fVersionGainUsed)
+ ,fSubVersionGainUsed(c.fSubVersionGainUsed)
+ ,fVersionVdriftUsed(c.fVersionVdriftUsed)
+ ,fSubVersionVdriftUsed(c.fSubVersionVdriftUsed)
,fCalibraMode(0x0)
,fDebugStreamer(0)
,fDebugLevel(c.fDebugLevel)
// Create the 2D histos
//
- TString name("Nz");
+ TString name("Ver");
+ name += fVersionVdriftUsed;
+ name += "Subver";
+ name += fSubVersionVdriftUsed;
+ name += "Nz";
name += fCalibraMode->GetNz(1);
name += "Nrphi";
name += fCalibraMode->GetNrphi(1);
// Create the 2D histos
//
- TString name("Nz");
+ TString name("Ver");
+ name += fVersionGainUsed;
+ name += "Subver";
+ name += fSubVersionGainUsed;
+ name += "Nz";
name += fCalibraMode->GetNz(0);
name += "Nrphi";
name += fCalibraMode->GetNrphi(0);
-
+
fCH2d = new TH2I("CH2d",(const Char_t *) name
,fNumberBinCharge,0,300,nn,0,nn);
fCH2d->SetYTitle("Det/pad groups");
void SetVector2d(Bool_t vector2d = kTRUE) { fVector2d = vector2d; }
void SetLinearFitterOn(Bool_t linearfitteron = kTRUE) { fLinearFitterOn = linearfitteron;}
void SetLinearFitterDebugOn(Bool_t debug = kTRUE) { fLinearFitterDebugOn = debug; }
-
+ void SetVersionGainUsed(Int_t versionGainUsed) { fVersionGainUsed = versionGainUsed; }
+ void SetSubVersionGainUsed(Int_t subVersionGainUsed) { fSubVersionGainUsed = subVersionGainUsed; }
+ void SetVersionVdriftUsed(Int_t versionVdriftUsed) { fVersionVdriftUsed = versionVdriftUsed; }
+ void SetSubVersionVdriftUsed(Int_t subVersionVdriftUsed) { fSubVersionVdriftUsed = subVersionVdriftUsed; }
+
Bool_t GetPH2dOn() const { return fPH2dOn; }
Bool_t GetCH2dOn() const { return fCH2dOn; }
Bool_t GetHisto2d() const { return fHisto2d; }
Bool_t GetVector2d() const { return fVector2d; }
Bool_t GetLinearFitterOn() const { return fLinearFitterOn; }
- Bool_t GetLinearFitterDebugOn() const { return fLinearFitterDebugOn; }
+ Bool_t GetLinearFitterDebugOn() const { return fLinearFitterDebugOn; }
+ Int_t GetVersionGainUsed() const { return fVersionGainUsed; }
+ Int_t GetSubVersionGainUsed() const { return fSubVersionGainUsed; }
+ Int_t GetVersionVdriftUsed() const { return fVersionVdriftUsed; }
+ Int_t GetSubVersionVdriftUsed() const { return fSubVersionVdriftUsed; }
// Get stuff that are filled
Bool_t fNormalizeNbOfCluster; // Normalize with the number of cluster for the gain
Float_t fMaxCluster; // Max amplitude of one cluster
Short_t fNbMaxCluster; // Number of tb at the end
+ // Back correction
+ Int_t fVersionGainUsed; // VersionGainUsed
+ Int_t fSubVersionGainUsed; // SubVersionGainUsed
+ Int_t fVersionVdriftUsed; // VersionVdriftUsed
+ Int_t fSubVersionVdriftUsed; // SubVersionVdriftUsed
// Calibration mode
AliTRDCalibraMode *fCalibraMode; // Calibration mode
#include <TLinearFitter.h>
#include <TVectorD.h>
#include <TROOT.h>
+#include <TString.h>
#include "AliLog.h"
#include "AliMathBase.h"
//
// Set the calibration mode
- const char *name = ch->GetTitle();
+ //const char *name = ch->GetTitle();
+ TString name = ch->GetTitle();
if(!SetModeCalibration(name,0)) return kFALSE;
// Number of Ybins (detectors or groups of pads)
//
// Set the calibraMode
- const char *name = calvect->GetNameCH();
+ //const char *name = calvect->GetNameCH();
+ TString name = calvect->GetNameCH();
if(!SetModeCalibration(name,0)) return kFALSE;
// Number of Xbins (detectors or groups of pads)
//
// Set the calibration mode
- const char *name = ph->GetTitle();
+ //const char *name = ph->GetTitle();
+ TString name = ph->GetTitle();
if(!SetModeCalibration(name,1)) return kFALSE;
//printf("Mode calibration set\n");
//
// Set the calibration mode
- const char *name = calvect->GetNamePH();
+ //const char *name = calvect->GetNamePH();
+ TString name = calvect->GetNamePH();
if(!SetModeCalibration(name,1)) return kFALSE;
// Number of Xbins (detectors or groups of pads)
//
// Set the calibration mode
- const char *name = prf->GetTitle();
+ //const char *name = prf->GetTitle();
+ TString name = prf->GetTitle();
if(!SetModeCalibration(name,2)) return kFALSE;
// Number of Ybins (detectors or groups of pads)
//
// Set the calibration mode
- const char *name = prf->GetTitle();
+ //const char *name = prf->GetTitle();
+ TString name = prf->GetTitle();
if(!SetModeCalibration(name,2)) return kFALSE;
// Number of Ybins (detectors or groups of pads)
//
// Set the calibra mode
- const char *name = calvect->GetNamePRF();
+ //const char *name = calvect->GetNamePRF();
+ TString name = calvect->GetNamePRF();
if(!SetModeCalibration(name,2)) return kFALSE;
//printf("test0 %s\n",name);
//
// Set the calibra mode
- const char *name = calvect->GetNamePRF();
+ //const char *name = calvect->GetNamePRF();
+ TString name = calvect->GetNamePRF();
if(!SetModeCalibration(name,2)) return kFALSE;
//printf("test0 %s\n",name);
Int_t nbg = GetNumberOfGroupsPRF((const char *)name);
}
//____________Functions for seeing if the pad is really okey___________________
//_____________________________________________________________________________
-Int_t AliTRDCalibraFit::GetNumberOfGroupsPRF(const char* nametitle)
+Int_t AliTRDCalibraFit::GetNumberOfGroupsPRF(TString nametitle)
{
//
// Get numberofgroupsprf
const Char_t *pattern6 = "Ngp6";
// Nrphi mode
- if (strstr(nametitle,pattern0)) {
+ if (strstr(nametitle.Data(),pattern0)) {
return 0;
}
- if (strstr(nametitle,pattern1)) {
+ if (strstr(nametitle.Data(),pattern1)) {
return 1;
}
- if (strstr(nametitle,pattern2)) {
+ if (strstr(nametitle.Data(),pattern2)) {
return 2;
}
- if (strstr(nametitle,pattern3)) {
+ if (strstr(nametitle.Data(),pattern3)) {
return 3;
}
- if (strstr(nametitle,pattern4)) {
+ if (strstr(nametitle.Data(),pattern4)) {
return 4;
}
- if (strstr(nametitle,pattern5)) {
+ if (strstr(nametitle.Data(),pattern5)) {
return 5;
}
- if (strstr(nametitle,pattern6)){
+ if (strstr(nametitle.Data(),pattern6)){
return 6;
}
else return -1;
}
//_____________________________________________________________________________
-Bool_t AliTRDCalibraFit::SetModeCalibration(const char *name, Int_t i)
+Bool_t AliTRDCalibraFit::SetModeCalibration(TString name, Int_t i)
{
//
// Set fNz[i] and fNrphi[i] of the AliTRDCalibraFit::Instance()
}
//_____________________________________________________________________________
-Bool_t AliTRDCalibraFit::SetNrphiFromTObject(const char *name, Int_t i)
+Bool_t AliTRDCalibraFit::SetNrphiFromTObject(TString name, Int_t i)
{
//
// Set fNrphi[i] of the AliTRDCalibraFit::Instance()
const Char_t *patternz100 = "Nz100";
// Nrphi mode
- if ((strstr(name,patternrphi100)) && (strstr(name,patternz100))) {
+ if ((strstr(name.Data(),patternrphi100)) && (strstr(name.Data(),patternz100))) {
fCalibraMode->SetAllTogether(i);
fNbDet = 540;
if (fDebugLevel > 1) {
}
return kTRUE;
}
- if ((strstr(name,patternrphi10)) && (strstr(name,patternz10))) {
+ if ((strstr(name.Data(),patternrphi10)) && (strstr(name.Data(),patternz10))) {
fCalibraMode->SetPerSuperModule(i);
fNbDet = 30;
if (fDebugLevel > 1) {
return kTRUE;
}
- if (strstr(name,patternrphi0)) {
+ if (strstr(name.Data(),patternrphi0)) {
fCalibraMode->SetNrphi(i ,0);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 0",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternrphi1)) {
+ if (strstr(name.Data(),patternrphi1)) {
fCalibraMode->SetNrphi(i, 1);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 1",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternrphi2)) {
+ if (strstr(name.Data(),patternrphi2)) {
fCalibraMode->SetNrphi(i, 2);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 2",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternrphi3)) {
+ if (strstr(name.Data(),patternrphi3)) {
fCalibraMode->SetNrphi(i, 3);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 3",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternrphi4)) {
+ if (strstr(name.Data(),patternrphi4)) {
fCalibraMode->SetNrphi(i, 4);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 4",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternrphi5)) {
+ if (strstr(name.Data(),patternrphi5)) {
fCalibraMode->SetNrphi(i, 5);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 5",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternrphi6)) {
+ if (strstr(name.Data(),patternrphi6)) {
fCalibraMode->SetNrphi(i, 6);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 6",fNbDet));
}
//_____________________________________________________________________________
-Bool_t AliTRDCalibraFit::SetNzFromTObject(const char *name, Int_t i)
+Bool_t AliTRDCalibraFit::SetNzFromTObject(TString name, Int_t i)
{
//
// Set fNz[i] of the AliTRDCalibraFit::Instance()
const Char_t *patternz10 = "Nz10";
const Char_t *patternz100 = "Nz100";
- if ((strstr(name,patternrphi100)) && (strstr(name,patternz100))) {
+ if ((strstr(name.Data(),patternrphi100)) && (strstr(name.Data(),patternz100))) {
fCalibraMode->SetAllTogether(i);
fNbDet = 540;
if (fDebugLevel > 1) {
}
return kTRUE;
}
- if ((strstr(name,patternrphi10)) && (strstr(name,patternz10))) {
+ if ((strstr(name.Data(),patternrphi10)) && (strstr(name.Data(),patternz10))) {
fCalibraMode->SetPerSuperModule(i);
fNbDet = 30;
if (fDebugLevel > 1) {
}
return kTRUE;
}
- if (strstr(name,patternz0)) {
+ if (strstr(name.Data(),patternz0)) {
fCalibraMode->SetNz(i, 0);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 0",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternz1)) {
+ if (strstr(name.Data(),patternz1)) {
fCalibraMode->SetNz(i ,1);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 1",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternz2)) {
+ if (strstr(name.Data(),patternz2)) {
fCalibraMode->SetNz(i ,2);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 2",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternz3)) {
+ if (strstr(name.Data(),patternz3)) {
fCalibraMode->SetNz(i ,3);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 3",fNbDet));
}
return kTRUE;
}
- if (strstr(name,patternz4)) {
+ if (strstr(name.Data(),patternz4)) {
fCalibraMode->SetNz(i ,4);
if (fDebugLevel > 1) {
AliInfo(Form("fNbDet %d and 4",fNbDet));
return gauss;
}
+
# include <TVectorD.h>
#endif
+class TString;
class TTree;
class TProfile2D;
class TGraphErrors;
Bool_t AnalyseLinearFitters(AliTRDCalibraVdriftLinearFit *calivdli);
// Pad Calibration
- Bool_t SetModeCalibration(const char *name, Int_t i);
+ Bool_t SetModeCalibration(TString name, Int_t i);
//Reset Function
void ResetVectorFit();
void ReconstructFitRowMinRowMax(Int_t idect, Int_t i);
Bool_t CheckFitVoir();
void NormierungCharge();
- Bool_t SetNrphiFromTObject(const char *name, Int_t i);
- Bool_t SetNzFromTObject(const char *name, Int_t i);
- Int_t GetNumberOfGroupsPRF(const char* nametitle);
+ Bool_t SetNrphiFromTObject(TString name, Int_t i);
+ Bool_t SetNzFromTObject(TString name, Int_t i);
+ Int_t GetNumberOfGroupsPRF(TString nametitle);
// Calculate the mean coefs from the database
Bool_t CalculVdriftCoefMean();
};
#endif
+
/*
- Responsible: marian.ivanov@cern.ch
- Code to analyze the TPC calibration and to produce OCDB entries
+ Responsible: Raphaelle Bailhache (rbailhache@ikf.uni-frankfurt.de)
+ Code to analyze the TRD calibration and to produce OCDB entries
.x ~/rootlogon.C
gSystem->Load("libANALYSIS");
- gSystem->Load("libTPCcalib");
+ gSystem->Load("libTRDcalib");
AliTRDPreprocessorOffline proces;
TString ocdbPath="local:////"
fMethodSecond(kTRUE),
fNameList("TRDCalib"),
fCalDetGainUsed(0x0),
+ fCalDetVdriftUsed(0x0),
fCH2d(0x0),
fPH2d(0x0),
fPRF2d(0x0),
fNEvents(0x0),
fAbsoluteGain(0x0),
fPlots(new TObjArray(8)),
- fCalibObjects(new TObjArray(8))
+ fCalibObjects(new TObjArray(8)),
+ fVersionGainUsed(0),
+ fSubVersionGainUsed(0),
+ fVersionVdriftUsed(0),
+ fSubVersionVdriftUsed(0)
{
//
// default constructor
//
if(fCalDetGainUsed) delete fCalDetGainUsed;
+ if(fCalDetVdriftUsed) delete fCalDetVdriftUsed;
if(fCH2d) delete fCH2d;
if(fPH2d) delete fPH2d;
if(fPRF2d) delete fPRF2d;
//
AnalyzeGain();
if(fCalDetGainUsed) CorrectFromDetGainUsed();
+ if(fCalDetVdriftUsed) CorrectFromDetVdriftUsed();
//
// 3. Append QA plots
//
}
+Bool_t AliTRDPreprocessorOffline::Init(const Char_t* fileName){
+ //
+ // read the calibration used during the reconstruction
+ //
+
+ if(ReadVdriftT0Global(fileName)) {
+
+ TString nameph = fPH2d->GetTitle();
+ fVersionVdriftUsed = GetVersion(nameph);
+ fSubVersionVdriftUsed = GetSubVersion(nameph);
+
+ //printf("Found Version %d, Subversion %d for vdrift\n",fVersionVdriftUsed,fSubVersionVdriftUsed);
+
+ }
+
+ if(ReadGainGlobal(fileName)) {
+
+ TString namech = fCH2d->GetTitle();
+ fVersionGainUsed = GetVersion(namech);
+ fSubVersionGainUsed = GetSubVersion(namech);
+
+ //printf("Found Version %d, Subversion %d for gain\n",fVersionGainUsed,fSubVersionGainUsed);
+
+ }
+
+ return kTRUE;
+
+}
+
Bool_t AliTRDPreprocessorOffline::ReadGainGlobal(const Char_t* fileName){
//
// read calibration entries from file
//
+ if(fCH2d) return kTRUE;
TFile fcalib(fileName);
TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
if (array){
//
// read calibration entries from file
//
+ if(fPH2d) return kTRUE;
TFile fcalib(fileName);
TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
if (array){
//
// read calibration entries from file
//
+ if(fAliTRDCalibraVdriftLinearFit) return kTRUE;
TFile fcalib(fileName);
TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
if (array){
//
// read calibration entries from file
//
+ if(fPRF2d) return kTRUE;
TFile fcalib(fileName);
TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
if (array){
Bool_t ok = kFALSE;
+ Bool_t meanother = kFALSE;
// enough statistics
if ((nbtg > 0) &&
(nbfit >= 0.5*nbE) && (nbE > 30)) {
// create the cal objects
- calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+ if(!fCalDetGainUsed) {
+ calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+ meanother = kTRUE;
+ }
TObjArray object = calibra->GetVectorFit();
- AliTRDCalDet *calDetGain = calibra->CreateDetObjectGain(&object);
+ AliTRDCalDet *calDetGain = calibra->CreateDetObjectGain(&object,meanother);
TH1F *coefGain = calDetGain->MakeHisto1DAsFunctionOfDet();
// Put them in the array
fCalibObjects->AddAt(calDetGain,kGain);
}
void AliTRDPreprocessorOffline::CorrectFromDetGainUsed() {
-
+ //
+ // Correct from the gas gain used afterwards
+ //
AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
if(!calDetGain) return;
+ // Calculate mean
+ Double_t mean = 0.0;
+ Int_t nbdet = 0;
+
for(Int_t det = 0; det < 540; det++) {
Float_t gaininit = fCalDetGainUsed->GetValue(det);
Float_t gainout = calDetGain->GetValue(det);
-
- calDetGain->SetValue(det,gaininit*gainout);
+
+ if(TMath::Abs(gainout-1.0) > 0.000001) {
+ mean += (gaininit*gainout);
+ nbdet++;
+ }
+ }
+ if(nbdet > 0) mean = mean/nbdet;
+
+ for(Int_t det = 0; det < 540; det++) {
+
+ Float_t gaininit = fCalDetGainUsed->GetValue(det);
+ Float_t gainout = calDetGain->GetValue(det);
+
+ if(TMath::Abs(gainout-1.0) > 0.000001) calDetGain->SetValue(det,gaininit*gainout);
+ else calDetGain->SetValue(det,mean);
}
}
+void AliTRDPreprocessorOffline::CorrectFromDetVdriftUsed() {
+ //
+ // Correct from the drift velocity
+ //
+
+ //printf("Correct for vdrift\n");
+
+ AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
+ if(!calDetGain) return;
+
+ Int_t detVdrift = kVdriftPHDet;
+ if(fMethodSecond) detVdrift = kVdriftLinear;
+ AliTRDCalDet *calDetVdrift = (AliTRDCalDet *) fCalibObjects->At(detVdrift);
+ if(!calDetVdrift) return;
+
+ // Calculate mean
+
+ for(Int_t det = 0; det < 540; det++) {
+
+ Float_t vdriftinit = fCalDetVdriftUsed->GetValue(det);
+ Float_t vdriftout = calDetVdrift->GetValue(det);
+
+ Float_t gain = calDetGain->GetValue(det);
+ if(vdriftout > 0.0) gain = gain*vdriftinit/vdriftout;
+ calDetGain->SetValue(det,gain);
+
+
+ }
+
+}
+
void AliTRDPreprocessorOffline::UpdateOCDBGain(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
//
// Update OCDB entry
AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(kGain);
if(calDet) gStorage->Put(calDet, id1, metaData);
- //else {
- // printf("No calDet object for Gain\n");
- //}
-
}
AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(detVdrift);
if(calDet) gStorage->Put(calDet, id1, metaData);
- //else {
- // printf("No calDet object for Vdrift\n");
- //}
-
+
//
if(!fMethodSecond) {
AliCDBId id1Pad("TRD/Calib/LocalVdrift", startRunNumber, endRunNumber);
AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kVdriftPHPad);
if(calPad) gStorage->Put(calPad, id1Pad, metaDataPad);
- //else {
- // printf("No calPad object for Vdrift\n");
- //}
-
-
+
}
}
AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(kT0PHDet);
if(calDet) gStorage->Put(calDet, id1, metaData);
- //else {
- // printf("No calDet object for T0\n");
- //}
-
//
AliCDBMetaData *metaDataPad= new AliCDBMetaData();
AliCDBId id1Pad("TRD/Calib/LocalT0", startRunNumber, endRunNumber);
AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kT0PHPad);
if(calPad) gStorage->Put(calPad, id1Pad, metaDataPad);
- //else {
- // printf("No calPad object for T0\n");
- //}
+
}
AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kPRF);
if(calPad) gStorage->Put(calPad, id1, metaData);
- //else {
- // printf("No calPad object for PRF\n");
- //}
}
+//_____________________________________________________________________________
+Int_t AliTRDPreprocessorOffline::GetVersion(TString name) const
+{
+ //
+ // Get version from the title
+ //
+
+ // Some patterns
+ const Char_t *version = "Ver";
+ if(!strstr(name.Data(),version)) return -1;
+
+ for(Int_t ver = 0; ver < 999999999; ver++) {
+
+ TString vertry(version);
+ vertry += ver;
+ vertry += "Subver";
+
+ //printf("vertry %s and name %s\n",vertry.Data(),name.Data());
+
+ if(strstr(name.Data(),vertry.Data())) return ver;
+
+ }
+
+ return -1;
+
+}
+
+//_____________________________________________________________________________
+Int_t AliTRDPreprocessorOffline::GetSubVersion(TString name) const
+{
+ //
+ // Get subversion from the title
+ //
+
+ // Some patterns
+ const Char_t *subversion = "Subver";
+ if(!strstr(name.Data(),subversion)) return -1;
+
+ for(Int_t ver = 0; ver < 999999999; ver++) {
+
+ TString vertry(subversion);
+ vertry += ver;
+ vertry += "Nz";
+
+ //printf("vertry %s and name %s\n",vertry.Data(),name.Data());
+
+ if(strstr(name.Data(),vertry.Data())) return ver;
+
+ }
+
+ return -1;
+
+}
void SetNameList(TString nameList) { fNameList = nameList;};
TString GetNameList() const { return fNameList;};
void SetCalDetGain(AliTRDCalDet *calDetGainUsed) {fCalDetGainUsed = calDetGainUsed;};
+ void SetCalDetVdrift(AliTRDCalDet *calDetVdriftUsed) {fCalDetVdriftUsed = calDetVdriftUsed;};
AliTRDCalDet *GetCalDetGain() const { return fCalDetGainUsed;};
+ AliTRDCalDet *GetCalDetVdrift() const { return fCalDetVdriftUsed;};
+ Bool_t Init(const Char_t* fileName);
+
void CalibVdriftT0(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage="");
void CalibGain(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage="");
void CalibPRF(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage="");
Bool_t AnalyzePRF();
void CorrectFromDetGainUsed();
+ void CorrectFromDetVdriftUsed();
void UpdateOCDBT0(Int_t startRunNumber, Int_t endRunNumber, const char* storagePath);
void UpdateOCDBVdrift(Int_t startRunNumber, Int_t endRunNumber, const char* storagePath);
void UpdateOCDBGain(Int_t startRunNumber, Int_t endRunNumber, const char* storagePath);
void UpdateOCDBPRF(Int_t startRunNumber, Int_t endRunNumber, const char* storagePath);
+ Int_t GetVersionGainUsed() const { return fVersionGainUsed; }
+ Int_t GetSubVersionGainUsed() const { return fSubVersionGainUsed; }
+ Int_t GetVersionVdriftUsed() const { return fVersionVdriftUsed; }
+ Int_t GetSubVersionVdriftUsed() const { return fSubVersionVdriftUsed; }
-private:
+
+ private:
Bool_t fMethodSecond; // Second Method for drift velocity
TString fNameList; // Name of the list
AliTRDCalDet *fCalDetGainUsed; // CalDet used and to be corrected for
+ AliTRDCalDet *fCalDetVdriftUsed; // CalDet used and to be corrected for
TH2I *fCH2d; // Gain
TProfile2D *fPH2d; // Drift velocity first method
TProfile2D *fPRF2d; // PRF
TH2F *fAbsoluteGain; // Absolute Gain calibration
TObjArray * fPlots; // array with some plots to check
TObjArray * fCalibObjects; // array with calibration objects
+ Int_t fVersionGainUsed; // VersionGainUsed
+ Int_t fSubVersionGainUsed; // SubVersionGainUsed
+ Int_t fVersionVdriftUsed; // VersionVdriftUsed
+ Int_t fSubVersionVdriftUsed; // SubVersionVdriftUsed
+ Int_t GetSubVersion(TString name) const;
+ Int_t GetVersion(TString name) const;