#include "AliMFTCluster.h"
#include "TFile.h"
#include "AliMFTCluster.h"
#include "TObjArray.h"
#include "TClonesArray.h"
#include "TTree.h"
#include "AliMFTConstants.h"
#include "TBranch.h"
#include "TRandom.h"
TFile *fileIn=0, *fileOut=0;
const Int_t labelMCOffset = 1000000;
Double_t misalignmentX[AliMFTConstants::fNMaxPlanes] = {0};
Double_t misalignmentY[AliMFTConstants::fNMaxPlanes] = {0};
//====================================================================================================================================================
void AddMisalignmentToClusters(Char_t *nameDir=".",
Int_t seed = 12345,
Double_t misalignment = 0.0015) {
gRandom -> SetSeed(seed);
TClonesArray *fRecPointsPerPlaneIn[AliMFTConstants::fNMaxPlanes] = {0};
TClonesArray *fRecPointsPerPlaneOut[AliMFTConstants::fNMaxPlanes] = {0};
fileIn = new TFile(Form("%s/MFT.RecPoints.root",nameDir));
fileOut = new TFile(Form("%s/MFT.RecPoints.Misaligned.root",nameDir), "recreate");
Int_t iEv=0;
while (fileIn->cd(Form("Event%d",iEv))) {
for (Int_t iPlane=0; iPlane<AliMFTConstants::fNMaxPlanes; iPlane++) {
fRecPointsPerPlaneIn[iPlane] = new TClonesArray("AliMFTCluster");
fRecPointsPerPlaneOut[iPlane] = new TClonesArray("AliMFTCluster");
}
printf("Event %d\n",iEv);
TTree *treeIn = (TTree*) gDirectory->Get("TreeR");
treeIn -> SetName("TreeR_In");
fileOut-> cd();
TTree *treeOut = new TTree("TreeR", "Reconstructed Points Container");
Int_t iPlane=0;
while (treeIn->GetBranch(Form("Plane_%02d",iPlane))) {
// printf("Plane %02d\n",iPlane);
Double_t misalignmentPhi = 2.*TMath::Pi()*gRandom->Rndm();
misalignmentX[iPlane] = misalignment*TMath::Cos(misalignmentPhi);
misalignmentY[iPlane] = misalignment*TMath::Sin(misalignmentPhi);
treeIn ->SetBranchAddress(Form("Plane_%02d",iPlane), &(fRecPointsPerPlaneIn[iPlane]));
treeOut->Branch(Form("Plane_%02d",iPlane), &(fRecPointsPerPlaneOut[iPlane]));
// treeOut->SetBranchAddress(Form("Plane_%02d",iPlane), &(fRecPointsPerPlaneOut[iPlane]));
iPlane++;
}
iPlane=0;
treeIn -> GetEntry(0);
while (treeIn->GetBranch(Form("Plane_%02d",iPlane))) {
Int_t nClusters = fRecPointsPerPlaneIn[iPlane]->GetEntries();
for (Int_t iCluster=0; iCluster<nClusters; iCluster++) {
// printf("Cluster %4d\n",iCluster);
AliMFTCluster *newCluster = (AliMFTCluster*) fRecPointsPerPlaneIn[iPlane]->At(iCluster);
newCluster->SetClusterEditable(kTRUE);
newCluster->SetX(newCluster->GetX()+misalignmentX[iPlane]);
newCluster->SetY(newCluster->GetY()+misalignmentY[iPlane]);
new ((*fRecPointsPerPlaneOut[iPlane])[fRecPointsPerPlaneOut[iPlane]->GetEntries()]) AliMFTCluster(*newCluster);
}
iPlane++;
}
treeOut -> Fill();
fileOut -> mkdir(Form("Event%d",iEv));
fileOut -> cd(Form("Event%d",iEv));
treeOut -> Write();
for (Int_t jPlane=0; jPlane<AliMFTConstants::fNMaxPlanes; jPlane++) {
delete fRecPointsPerPlaneIn[jPlane];
delete fRecPointsPerPlaneOut[jPlane];
}
iEv++;
}
fileOut -> Close();
}
//====================================================================================================================================================
AddMisalignmentToClusters.C:1 AddMisalignmentToClusters.C:2 AddMisalignmentToClusters.C:3 AddMisalignmentToClusters.C:4 AddMisalignmentToClusters.C:5 AddMisalignmentToClusters.C:6 AddMisalignmentToClusters.C:7 AddMisalignmentToClusters.C:8 AddMisalignmentToClusters.C:9 AddMisalignmentToClusters.C:10 AddMisalignmentToClusters.C:11 AddMisalignmentToClusters.C:12 AddMisalignmentToClusters.C:13 AddMisalignmentToClusters.C:14 AddMisalignmentToClusters.C:15 AddMisalignmentToClusters.C:16 AddMisalignmentToClusters.C:17 AddMisalignmentToClusters.C:18 AddMisalignmentToClusters.C:19 AddMisalignmentToClusters.C:20 AddMisalignmentToClusters.C:21 AddMisalignmentToClusters.C:22 AddMisalignmentToClusters.C:23 AddMisalignmentToClusters.C:24 AddMisalignmentToClusters.C:25 AddMisalignmentToClusters.C:26 AddMisalignmentToClusters.C:27 AddMisalignmentToClusters.C:28 AddMisalignmentToClusters.C:29 AddMisalignmentToClusters.C:30 AddMisalignmentToClusters.C:31 AddMisalignmentToClusters.C:32 AddMisalignmentToClusters.C:33 AddMisalignmentToClusters.C:34 AddMisalignmentToClusters.C:35 AddMisalignmentToClusters.C:36 AddMisalignmentToClusters.C:37 AddMisalignmentToClusters.C:38 AddMisalignmentToClusters.C:39 AddMisalignmentToClusters.C:40 AddMisalignmentToClusters.C:41 AddMisalignmentToClusters.C:42 AddMisalignmentToClusters.C:43 AddMisalignmentToClusters.C:44 AddMisalignmentToClusters.C:45 AddMisalignmentToClusters.C:46 AddMisalignmentToClusters.C:47 AddMisalignmentToClusters.C:48 AddMisalignmentToClusters.C:49 AddMisalignmentToClusters.C:50 AddMisalignmentToClusters.C:51 AddMisalignmentToClusters.C:52 AddMisalignmentToClusters.C:53 AddMisalignmentToClusters.C:54 AddMisalignmentToClusters.C:55 AddMisalignmentToClusters.C:56 AddMisalignmentToClusters.C:57 AddMisalignmentToClusters.C:58 AddMisalignmentToClusters.C:59 AddMisalignmentToClusters.C:60 AddMisalignmentToClusters.C:61 AddMisalignmentToClusters.C:62 AddMisalignmentToClusters.C:63 AddMisalignmentToClusters.C:64 AddMisalignmentToClusters.C:65 AddMisalignmentToClusters.C:66 AddMisalignmentToClusters.C:67 AddMisalignmentToClusters.C:68 AddMisalignmentToClusters.C:69 AddMisalignmentToClusters.C:70 AddMisalignmentToClusters.C:71 AddMisalignmentToClusters.C:72 AddMisalignmentToClusters.C:73 AddMisalignmentToClusters.C:74 AddMisalignmentToClusters.C:75 AddMisalignmentToClusters.C:76 AddMisalignmentToClusters.C:77 AddMisalignmentToClusters.C:78 AddMisalignmentToClusters.C:79 AddMisalignmentToClusters.C:80 AddMisalignmentToClusters.C:81 AddMisalignmentToClusters.C:82 AddMisalignmentToClusters.C:83 AddMisalignmentToClusters.C:84 AddMisalignmentToClusters.C:85 AddMisalignmentToClusters.C:86 AddMisalignmentToClusters.C:87 AddMisalignmentToClusters.C:88 AddMisalignmentToClusters.C:89 AddMisalignmentToClusters.C:90