Skip to content

Commit

Permalink
Update of R3BCalifaCrystalCal2TotCalPar and R3BCalifaMapped2CrystalCa…
Browse files Browse the repository at this point in the history
…lPar classes

Update Califa readme

Changed array name in R3BFileSource.cxx
  • Loading branch information
jose-luis-rs authored and kresan committed Jun 14, 2021
1 parent 89a5f39 commit 7f389ad
Show file tree
Hide file tree
Showing 7 changed files with 154 additions and 167 deletions.
84 changes: 84 additions & 0 deletions califa/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Overview of the Califa classes

TClonesArray data (typically FairMultiLinkedData)
Event data on various levels.
Generally in ../r3bdata/califaData/.
Event data classes will be written [[like this]] in this file.

### (Main) FairTasks:
Classes generating new, higher level TClonesArray data from
existing data.
Tasks will be written in double curly braces here.

Tasks are:

- ./sim/R3BCalifaDigitizer.h
- ./calibration/R3BCalifaMapped2CrystalCal.h
- ./calibration/R3BCalifaCrystalCal2Hit.h
- ./calibration/R3BCalifaCrystalCal2CrystalCalPID.h

### Parameter containers

These files generally hold channel-specific data used for calibration and the like.

- ./pars/R3BCalifaMappingPar.h
- ./pars/R3BCalifaCrystalCalPar.h
- ./pars/R3BCalifaTotCalPar.h
- ./pars/R3BCalifaHitPar.h
- ./pars/R3BCalifaGeometry.h -- helper class to fetch infos on the positions and orientation of the crystals
- ./pars/R3BCalifaContFact.h

To make sure that these are impossible to create/edit/view by unauthorized programs such as
text editors or shell scripts, these classes are generally serialized to ROOT's exclusive binary
only .root format. (There exist apostate rumors of a legacy FairParAsciiFileIo format which is
readable by both humans and 3rd party tools.)

### online FairTasks
- ./online/R3BCalifaOnlineSpectra.h
- ./online/R3BCalifaDemoOnlineSpectra.h

### calibration: optional FairTasks
- ./calibration/R3BCalifaMapped2CrystalCalPar.h -- generate a new energy calibration file from a source run.
- ./calibration/R3BCalifaCrystalCal2TotCalPar.h.h -- generate a tot energy calibration file from a source run.

### ana: optional FairTasks

- ./ana/R3BCalifaCrystalCalDataAnalysis.h

### other

- ./ROOT_template_hacks.h -- helper class to wrap ROOT stuff in a std c++ way
- ./CalifaLinkDef.h -- linking directives for CINT.
- ../geometry/califa*.root -- 14 different ROOT-only binary files containing the material and orientation
of the crystals and holding structure. At one point, these were probably generated by any of the 9 files matching
- ../macros/r3b/geo/create_califa*.C. The pigeonhole principle suggests that there is not a bijection between
the latter and the former.

# Califa processing chains

### Simulation branch

- ./sim/R3BCalifa.h
generates a data structure called
[[../r3bdata/califaData/R3BCalifaPoint.h]],
which is then used by
- ./sim/R3BCalifaDigitizer.h
to generate the simulation version of
[[../r3bdata/califaData/R3BCalifaCrystalCalData.h]].

### Unpack / experiment data branch

../r3bsource/R3BCalifaFebexReader.h is involved in parsing the lmd (with help from ucesb) to generate
[[../r3bdata/califaData/R3BCalifaMappedData.h]].
This is then read by {{./calibration/R3BCalifaMapped2CrystalCal.h}}
to generate [[../r3bdata/califaData/R3BCalifaCrystalCalData.h]] by applying per-channel, per-experiment parameters (./pars/R3BCalifaCrystalCalPar.h and ./pars/R3BCalifaTotCalPar.h if Tot data are available).

### Processing to hit level aka clustering

[[../r3bdata/califaData/R3BCalifaCrystalCalData.h]] data from either source (sim/exp) is converted by
{{./R3BCalifaCrystalCal2Hit.h}}
to
[[../r3bdata/califaData/R3BCalifaHitData.h]]



76 changes: 37 additions & 39 deletions califa/calibration/R3BCalifaCrystalCal2TotCalPar.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

#include "TClonesArray.h"
#include "TF1.h"
#include "TGeoMatrix.h"
#include "TGraph.h"
#include "TH1F.h"
#include "TMath.h"
Expand All @@ -26,28 +25,17 @@
#include "FairRootManager.h"
#include "FairRunAna.h"
#include "FairRuntimeDb.h"
#include "TGeoManager.h"

#include "R3BCalifaCrystalCal2TotCalPar.h"
#include "R3BCalifaCrystalCalData.h"
#include "R3BCalifaMappingPar.h"
#include "R3BCalifaTotCalPar.h"
#include "R3BEventHeader.h"

#include <iostream>
#include <stdlib.h>

using namespace std;

R3BCalifaCrystalCal2TotCalPar::R3BCalifaCrystalCal2TotCalPar()
: FairTask("R3B CALIFA Tot Calibration Parameters Finder ", 1)
, fMap_Par(NULL)
, fTotCal_Par(NULL)
, fCrystalCalDataCA(NULL)
, fNumCrystals(0)
, fNumParam(2)
, fMinStadistics(0)
, fThreshold(0)
: R3BCalifaCrystalCal2TotCalPar("R3B CALIFA Tot Calibration Parameters Finder ", 1)
{
}

Expand All @@ -56,10 +44,13 @@ R3BCalifaCrystalCal2TotCalPar::R3BCalifaCrystalCal2TotCalPar(const char* name, I
, fMap_Par(NULL)
, fTotCal_Par(NULL)
, fCrystalCalDataCA(NULL)
, fNumCrystals(0)
, fNumCrystals(1)
, fNumParam(2)
, fMinStadistics(0)
, fMinStadistics(100)
, fThreshold(0)
, fLeft(500.)
, fRight(1400.)
, fDebugMode(false)
{
}

Expand Down Expand Up @@ -104,23 +95,26 @@ void R3BCalifaCrystalCal2TotCalPar::SetParameter()

InitStatus R3BCalifaCrystalCal2TotCalPar::Init()
{
LOG(INFO) << "R3BCalifaCrystalCal2TotCalPar::Init";
LOG(INFO) << "R3BCalifaCrystalCal2TotCalPar::Init()";

FairRootManager* rootManager = FairRootManager::Instance();
if (!rootManager)
{
LOG(ERROR) << "R3BCalifaCrystalCal2TotCalPar::Init() FairRootManager not found";
return kFATAL;
}

fCrystalCalDataCA = (TClonesArray*)rootManager->GetObject("CalifaCrystalCalData");
if (!fCrystalCalDataCA)
{
LOG(ERROR) << "R3BCalifaCrystalCal2TotCalPar::Init() CalifaCrystalCalData not found";
return kFATAL;
}

FairRuntimeDb* rtdb = FairRuntimeDb::instance();
if (!rtdb)
{
LOG(ERROR) << "R3BCalifaCrystalCal2TotCalPar::Init() FairRuntimeDb not found";
return kFATAL;
}

Expand All @@ -138,7 +132,7 @@ InitStatus R3BCalifaCrystalCal2TotCalPar::Init()
// Create histograms for crystal calibration
char name[100];
energy_vs_tot_crystal = new TGraph*[fNumCrystals];
// std::cout << "fNumCrystals = " << fNumCrystals << std::endl;
LOG(DEBUG) << "fNumCrystals = " << fNumCrystals;
for (Int_t i = 0; i < fNumCrystals; i++)
if (fMap_Par->GetInUse(i + 1) == 1)
{
Expand All @@ -153,37 +147,46 @@ InitStatus R3BCalifaCrystalCal2TotCalPar::Init()
InitStatus R3BCalifaCrystalCal2TotCalPar::ReInit()
{
SetParContainers();
SetParameter();
return kSUCCESS;
}

void R3BCalifaCrystalCal2TotCalPar::Reset() {}

void R3BCalifaCrystalCal2TotCalPar::FinishEvent() {}

void R3BCalifaCrystalCal2TotCalPar::FinishTask() { Search_TotParams(); }
void R3BCalifaCrystalCal2TotCalPar::FinishTask()
{
Search_TotParams();
if (fDebugMode)
for (Int_t i = 0; i < fNumCrystals; i++)
if (fMap_Par->GetInUse(i + 1) == 1)
energy_vs_tot_crystal[i]->Write();
}

void R3BCalifaCrystalCal2TotCalPar::Exec(Option_t* opt)
{
Int_t nHits = fCrystalCalDataCA->GetEntries();
if (!nHits)
return;

R3BCalifaCrystalCalData** MapHit = new R3BCalifaCrystalCalData*[nHits];
R3BCalifaCrystalCalData** CalHit = new R3BCalifaCrystalCalData*[nHits];
Int_t crystalId = 0;

for (Int_t i = 0; i < nHits; i++)
{
MapHit[i] = (R3BCalifaCrystalCalData*)(fCrystalCalDataCA->At(i));
crystalId = MapHit[i]->GetCrystalId();
CalHit[i] = (R3BCalifaCrystalCalData*)(fCrystalCalDataCA->At(i));
crystalId = CalHit[i]->GetCrystalId();
// Fill histograms
energy_vs_tot_crystal[crystalId - 1]->SetPoint(
energy_vs_tot_crystal[crystalId - 1]->GetN(), MapHit[i]->GetToT_Energy(), MapHit[i]->GetEnergy());
// std::cout << "Tot = " << MapHit[i]->GetToT_Energy() << std::endl;
// std::cout << "Energy = " << MapHit[i]->GetEnergy() << std::endl;
if (CalHit[i]->GetEnergy() > fThreshold)
energy_vs_tot_crystal[crystalId - 1]->SetPoint(
energy_vs_tot_crystal[crystalId - 1]->GetN(), CalHit[i]->GetToT_Energy(), CalHit[i]->GetEnergy());
LOG(DEBUG) << "Tot = " << CalHit[i]->GetToT_Energy();
LOG(DEBUG) << "Energy = " << CalHit[i]->GetEnergy();
}

if (MapHit)
delete MapHit;
if (CalHit)
delete CalHit;
return;
}

Expand All @@ -195,33 +198,28 @@ void R3BCalifaCrystalCal2TotCalPar::Search_TotParams()
fTotCal_Par->GetCryCalParams()->Set(fNumParam * fNumCrystals);

TF1* f1 = nullptr;
if (fNumParam)
if (fNumParam == 2 || fNumParam == 3)
{

if (fNumParam == 2)
{
f1 = new TF1("f1", "[0]*TMath::Exp(x/[1])", 500, 1400);
f1 = new TF1("f1", "[0]*TMath::Exp(x/[1])", fLeft, fRight);
f1->SetParameter(0, 7700);
f1->SetParameter(1, 1000);
}
if (fNumParam == 3)
{
f1 = new TF1("f1", "[0]*TMath::Exp(x/[1]) + [2]", 500, 1400);
f1 = new TF1("f1", "[0]*TMath::Exp(x/[1]) + [2]", fLeft, fRight);
f1->SetParameter(0, 7700);
f1->SetParameter(1, 1000);
f1->SetParameter(2, 100);
}

if (fNumParam > 3)
{
LOG(ERROR) << "R3BCalifaCrystalCal2TotCalPar:: The number of fit parameters can not be higher than 3";
}
}
else
{
LOG(INFO) << "R3BCalifaCrystalCal2TotCalPar:: No imput number of fit parameters, therefore, by default "
LOG(INFO) << "R3BCalifaCrystalCal2TotCalPar::Search_TotParams() Wrong number of fit parameters, therefore, by "
"default "
"NumberParameters=2";
f1 = new TF1("f1", "[0]*TMath::Exp(x/[1])", 500, 1400);
f1 = new TF1("f1", "[0]*TMath::Exp(x/[1])", fLeft, fRight);
f1->SetParameter(0, 7700);
f1->SetParameter(1, 1000);
}
Expand All @@ -238,7 +236,7 @@ void R3BCalifaCrystalCal2TotCalPar::Search_TotParams()

else
{
LOG(WARNING) << "R3BCalifaCrystalCal2TotCalPar::Histogram NO Fitted number " << i + 1;
LOG(WARNING) << "R3BCalifaCrystalCal2TotCalPar::Histogram number " << i + 1 << " not Fitted";
}

fTotCal_Par->setChanged();
Expand Down
13 changes: 11 additions & 2 deletions califa/calibration/R3BCalifaCrystalCal2TotCalPar.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,24 @@ class R3BCalifaCrystalCal2TotCalPar : public FairTask
void SetThreshold(Double_t threshold) { fThreshold = threshold; }
void SetNumParameterFit(Int_t numberParFit) { fNumParam = numberParFit; }
void SetMinStadistics(Int_t minstad) { fMinStadistics = minstad; }

protected:
void SetDebugMode(Bool_t debug) { fDebugMode = debug; }
void SetRange(Double_t H_left, Double_t H_right)
{
fLeft = H_left;
fRight = H_right;
}

private:
void SetParameter();
Bool_t fDebugMode;
Int_t fNumCrystals;
Int_t fNumParam;
Int_t fMinStadistics;
Int_t* idx;

Double_t fThreshold;
Double_t fLeft;
Double_t fRight;

R3BCalifaMappingPar* fMap_Par; /**< Parameter container with mapping. >*/
R3BCalifaTotCalPar* fTotCal_Par; /**< Container for Tot-Cal parameters. >*/
Expand Down
Loading

0 comments on commit 7f389ad

Please sign in to comment.