ROOT logo
#if !defined( __CINT__) || defined(__MAKECINT__)

#include <iostream>
#include <TRandom.h>
#include <TClonesArray.h>
#include <TFile.h>


#include <AliAlignObj.h>
#include <AliAlignObjParams.h>
#include <AliCDBManager.h>
#include <AliCDBStorage.h>
#include <AliCDBEntry.h>
#include <AliCDBMetaData.h>


#include "AliTPCROC.h"
#include "AliTPCCalROC.h"
#include "AliTPCCalPad.h"
#include "AliTPCCalDet.h"
#include "AliTPCParamSR.h"



#endif

//
// run number for the dummy file
Int_t gkDummyRun = 0;
char *gCDBpath   = "local://$ALICE_ROOT/OCDB";
AliCDBStorage* gStorLoc = 0;

//
//Float_t gTSample    = 2.0000000e-07;
//
//
Float_t gMeanGain   = 1;
Float_t gSigmaGain  = 0;
//
Float_t gMeanTime0  = 0;
Float_t gSigmaTime0 = 0;
//
Float_t gMeanNoise  = 1;
Float_t gSigmaNoise = 0;
//
//
Float_t gMeanPedestal  = 0;
Float_t gSigmaPedestal = 0;
//
// Missalignment
//
Float_t gSigmaDx    = 0;
Float_t gSigmaDy    = 0;
Float_t gSigmaDz    = 0;
Float_t gSigmaAngle = 0;




TObject* CreatePadObject(const char* shortName, const char* description, Float_t value, Float_t sigma=0)
{
  AliTPCCalPad *calPad = new AliTPCCalPad(shortName, description);
  for (UInt_t det=0; det<AliTPCROC::Instance()->GetNSectors(); det++){
    AliTPCCalROC *calROC = calPad->GetCalROC(det);
    for (UInt_t channel=0; channel<calROC->GetNchannels(); channel++){
      Float_t rvalue = gRandom->Gaus(value,sigma);
      calROC->SetValue(channel, rvalue);
    }
  }
  return calPad;
}


void StoreObject(const char* cdbPath, TObject* object, AliCDBMetaData* metaData)
{
  AliCDBId id1(cdbPath, gkDummyRun, AliCDBRunRange::Infinity()); 
  gStorLoc->Put(object, id1, metaData); 
}
    

AliCDBMetaData* CreateMetaObject(const char* objectClassName)
{
  AliCDBMetaData *md1= new AliCDBMetaData(); 
  md1->SetObjectClassName(objectClassName);
  md1->SetResponsible("Marian Ivanov");
  md1->SetBeamPeriod(1);
  md1->SetAliRootVersion("05-06-00"); //root version
  md1->SetComment("The dummy values in this calibration file are for testing only");
  
  return md1;
}


void CDBAlignmentObjectCreation(const char *fileName, const char *arrayName, const char *detName){
  // make instance of storage
  AliCDBManager *CDB = AliCDBManager::Instance();
  AliCDBStorage* storLoc = CDB->GetStorage(gCDBpath);
  
  // create or get from a file the TClonesArray of alignment objects
  // for given detector, DET should be TPC, TRD ...
  TFile* f = TFile::Open(fileName,"READ");
  TClonesArray* tc = ((TClonesArray*) f->Get(arrayName));
  
  // AliCDBStorage::Put will make a file containing that TClonesArray in
  // the CDB directory structure
  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetObjectClassName("TClonesArray");
  md->SetResponsible("Your name here");
  md->SetComment("Alignment objects storage example. Please give more details here.");
  AliCDBId id(Form("%s/Align/Data",detName),0,0); //you have to specify the run validity,
// although in the case of saving ideal objects makes not much sense
  storLoc->Put(tc,id,md);
  
  // In this way it's good enough because AliSimulation is then expecting
  // as default to find the files in $ALICE_ROOT/DET/Align/Data
  // Then just
  // AliSimulation sim
  // sim.Run()
  // Look at the AliInfo messages from AliSimulation::Run() to check that
  // the expected CDB objects have been retrieved.
}




void GenerateRndTPC(Float_t sigmatrx=0., Float_t sigmatry=0, Float_t sigmatrz=0, Float_t sigmarot = 0.){

  TClonesArray *array = new TClonesArray("AliAlignObjParams",10000);
  TClonesArray &alobj = *array;
  
  TFile f("TPC_alignment.root","RECREATE");

  TRandom *rnd   = new TRandom(4357);
  AliAlignObjParams o;
  Int_t j = 0;
  for (Int_t iLayer = AliGeomManager::kTPC1; iLayer <= AliGeomManager::kTPC2; iLayer++) {
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer); iModule++) {

      Float_t dx = (rnd->Uniform()-0.5)*sigmatrx;
      Float_t dy = (rnd->Uniform()-0.5)*sigmatry;
      Float_t dz = (rnd->Uniform()-0.5)*sigmatrz;
      Float_t dpsi = (rnd->Uniform()-0.5)*sigmarot;
      Float_t dtheta = (rnd->Uniform()-0.5)*sigmarot;
      Float_t dphi = (rnd->Uniform()-0.5)*sigmarot;

      UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iModule);
      const char *path = AliGeomManager::GetVolPath(volid);
      new(alobj[j]) AliAlignObjParams(path, volid, dx, dy, dz, dpsi, dtheta, dphi);
      j++;
    }
  }
  f.cd();
  f.WriteObject(array,"TPCAlignObjs","kSingleKey");
  f.Close();
  array->Delete();
  CDBAlignmentObjectCreation("TPC_alignment.root","TPCAlignObjs","TPC");
}



void AliTPCCreateDummyCDB()
{
  cout << endl << "TPC :: Creating dummy CDB with event number " << gkDummyRun << endl;
  

  AliCDBManager *man = AliCDBManager::Instance();
  gStorLoc = man->GetStorage(gCDBpath);
  if (!gStorLoc)
    return;

  TObject* obj = 0;
  AliCDBMetaData* metaData = 0;
  
  //
  // Gain factor (relative) - normalized to 1 - spread 0
  //
  metaData = CreateMetaObject("AliTPCCalPad");  
  obj = CreatePadObject("PadGainFactor","TPC Gain Factor (local -pad- variations)", gMeanGain , gSigmaGain);
  StoreObject("TPC/Calib/PadGainFactor", obj, metaData);
  //
  // Time0 fluctuation   - normalized to 0  - spread 0.00 mus
  //
  metaData = CreateMetaObject("AliTPCCalPad");  
  obj = CreatePadObject("PadTime0","TPC Time 0  (local -pad- variations)", gMeanTime0 , gSigmaTime0);
  StoreObject("TPC/Calib/PadTime0", obj, metaData);
  //
  // Noise  fluctuation   - normalized to 1.0  - spread - 0.0 
  //
  metaData = CreateMetaObject("AliTPCCalPad");  
  obj = CreatePadObject("PadNoise","TPC Noise  (local -pad- variations)", gMeanNoise , gSigmaNoise);
  StoreObject("TPC/Calib/PadNoise", obj, metaData);
  //
  // Pedestals
  //
  metaData = CreateMetaObject("AliTPCCalPad");  
  obj = CreatePadObject("PadPedestal","TPC pedestals  (local -pad- variations)", gMeanPedestal, gSigmaPedestal);
  StoreObject("TPC/Calib/Pedestals", obj, metaData);  
  //
  // Parameters 
  //
  metaData = CreateMetaObject("AliTPCParam");  
  AliTPCParam * param = new AliTPCParamSR;
  //  param->SetTSample(gTSample);
  param->Update();
  StoreObject("TPC/Calib/Parameters", param, metaData); 
  //
  //
  // generate random missalignemnt - TO BE MODIFIED ACCCRDING NEW ALIROOT
  //
  //  GenerateRndTPC(gSigmaDx,gSigmaDy,gSigmaDz,gSigmaAngle);
  //
  // ExB
  //
  //
  // Put there your mag field
  //     to simulate distortion the scaling factor in magf can be used
  //     currently scaling factor 0 used - no magnetic field
  //
  metaData = CreateMetaObject("AliTPCExB");
  AliMagF* field = new AliMagF("Maps","Maps", 0., 0., AliMagF::k5kG));
  AliTPCExBFirst *exbfirst = new  AliTPCExBFirst(field,2.83000000000000000e+04,50,50,50);
  StoreObject("TPC/Calib/ExB", exbfirst, metaData); 

}
 AliTPCCreateDummyCDB.C:1
 AliTPCCreateDummyCDB.C:2
 AliTPCCreateDummyCDB.C:3
 AliTPCCreateDummyCDB.C:4
 AliTPCCreateDummyCDB.C:5
 AliTPCCreateDummyCDB.C:6
 AliTPCCreateDummyCDB.C:7
 AliTPCCreateDummyCDB.C:8
 AliTPCCreateDummyCDB.C:9
 AliTPCCreateDummyCDB.C:10
 AliTPCCreateDummyCDB.C:11
 AliTPCCreateDummyCDB.C:12
 AliTPCCreateDummyCDB.C:13
 AliTPCCreateDummyCDB.C:14
 AliTPCCreateDummyCDB.C:15
 AliTPCCreateDummyCDB.C:16
 AliTPCCreateDummyCDB.C:17
 AliTPCCreateDummyCDB.C:18
 AliTPCCreateDummyCDB.C:19
 AliTPCCreateDummyCDB.C:20
 AliTPCCreateDummyCDB.C:21
 AliTPCCreateDummyCDB.C:22
 AliTPCCreateDummyCDB.C:23
 AliTPCCreateDummyCDB.C:24
 AliTPCCreateDummyCDB.C:25
 AliTPCCreateDummyCDB.C:26
 AliTPCCreateDummyCDB.C:27
 AliTPCCreateDummyCDB.C:28
 AliTPCCreateDummyCDB.C:29
 AliTPCCreateDummyCDB.C:30
 AliTPCCreateDummyCDB.C:31
 AliTPCCreateDummyCDB.C:32
 AliTPCCreateDummyCDB.C:33
 AliTPCCreateDummyCDB.C:34
 AliTPCCreateDummyCDB.C:35
 AliTPCCreateDummyCDB.C:36
 AliTPCCreateDummyCDB.C:37
 AliTPCCreateDummyCDB.C:38
 AliTPCCreateDummyCDB.C:39
 AliTPCCreateDummyCDB.C:40
 AliTPCCreateDummyCDB.C:41
 AliTPCCreateDummyCDB.C:42
 AliTPCCreateDummyCDB.C:43
 AliTPCCreateDummyCDB.C:44
 AliTPCCreateDummyCDB.C:45
 AliTPCCreateDummyCDB.C:46
 AliTPCCreateDummyCDB.C:47
 AliTPCCreateDummyCDB.C:48
 AliTPCCreateDummyCDB.C:49
 AliTPCCreateDummyCDB.C:50
 AliTPCCreateDummyCDB.C:51
 AliTPCCreateDummyCDB.C:52
 AliTPCCreateDummyCDB.C:53
 AliTPCCreateDummyCDB.C:54
 AliTPCCreateDummyCDB.C:55
 AliTPCCreateDummyCDB.C:56
 AliTPCCreateDummyCDB.C:57
 AliTPCCreateDummyCDB.C:58
 AliTPCCreateDummyCDB.C:59
 AliTPCCreateDummyCDB.C:60
 AliTPCCreateDummyCDB.C:61
 AliTPCCreateDummyCDB.C:62
 AliTPCCreateDummyCDB.C:63
 AliTPCCreateDummyCDB.C:64
 AliTPCCreateDummyCDB.C:65
 AliTPCCreateDummyCDB.C:66
 AliTPCCreateDummyCDB.C:67
 AliTPCCreateDummyCDB.C:68
 AliTPCCreateDummyCDB.C:69
 AliTPCCreateDummyCDB.C:70
 AliTPCCreateDummyCDB.C:71
 AliTPCCreateDummyCDB.C:72
 AliTPCCreateDummyCDB.C:73
 AliTPCCreateDummyCDB.C:74
 AliTPCCreateDummyCDB.C:75
 AliTPCCreateDummyCDB.C:76
 AliTPCCreateDummyCDB.C:77
 AliTPCCreateDummyCDB.C:78
 AliTPCCreateDummyCDB.C:79
 AliTPCCreateDummyCDB.C:80
 AliTPCCreateDummyCDB.C:81
 AliTPCCreateDummyCDB.C:82
 AliTPCCreateDummyCDB.C:83
 AliTPCCreateDummyCDB.C:84
 AliTPCCreateDummyCDB.C:85
 AliTPCCreateDummyCDB.C:86
 AliTPCCreateDummyCDB.C:87
 AliTPCCreateDummyCDB.C:88
 AliTPCCreateDummyCDB.C:89
 AliTPCCreateDummyCDB.C:90
 AliTPCCreateDummyCDB.C:91
 AliTPCCreateDummyCDB.C:92
 AliTPCCreateDummyCDB.C:93
 AliTPCCreateDummyCDB.C:94
 AliTPCCreateDummyCDB.C:95
 AliTPCCreateDummyCDB.C:96
 AliTPCCreateDummyCDB.C:97
 AliTPCCreateDummyCDB.C:98
 AliTPCCreateDummyCDB.C:99
 AliTPCCreateDummyCDB.C:100
 AliTPCCreateDummyCDB.C:101
 AliTPCCreateDummyCDB.C:102
 AliTPCCreateDummyCDB.C:103
 AliTPCCreateDummyCDB.C:104
 AliTPCCreateDummyCDB.C:105
 AliTPCCreateDummyCDB.C:106
 AliTPCCreateDummyCDB.C:107
 AliTPCCreateDummyCDB.C:108
 AliTPCCreateDummyCDB.C:109
 AliTPCCreateDummyCDB.C:110
 AliTPCCreateDummyCDB.C:111
 AliTPCCreateDummyCDB.C:112
 AliTPCCreateDummyCDB.C:113
 AliTPCCreateDummyCDB.C:114
 AliTPCCreateDummyCDB.C:115
 AliTPCCreateDummyCDB.C:116
 AliTPCCreateDummyCDB.C:117
 AliTPCCreateDummyCDB.C:118
 AliTPCCreateDummyCDB.C:119
 AliTPCCreateDummyCDB.C:120
 AliTPCCreateDummyCDB.C:121
 AliTPCCreateDummyCDB.C:122
 AliTPCCreateDummyCDB.C:123
 AliTPCCreateDummyCDB.C:124
 AliTPCCreateDummyCDB.C:125
 AliTPCCreateDummyCDB.C:126
 AliTPCCreateDummyCDB.C:127
 AliTPCCreateDummyCDB.C:128
 AliTPCCreateDummyCDB.C:129
 AliTPCCreateDummyCDB.C:130
 AliTPCCreateDummyCDB.C:131
 AliTPCCreateDummyCDB.C:132
 AliTPCCreateDummyCDB.C:133
 AliTPCCreateDummyCDB.C:134
 AliTPCCreateDummyCDB.C:135
 AliTPCCreateDummyCDB.C:136
 AliTPCCreateDummyCDB.C:137
 AliTPCCreateDummyCDB.C:138
 AliTPCCreateDummyCDB.C:139
 AliTPCCreateDummyCDB.C:140
 AliTPCCreateDummyCDB.C:141
 AliTPCCreateDummyCDB.C:142
 AliTPCCreateDummyCDB.C:143
 AliTPCCreateDummyCDB.C:144
 AliTPCCreateDummyCDB.C:145
 AliTPCCreateDummyCDB.C:146
 AliTPCCreateDummyCDB.C:147
 AliTPCCreateDummyCDB.C:148
 AliTPCCreateDummyCDB.C:149
 AliTPCCreateDummyCDB.C:150
 AliTPCCreateDummyCDB.C:151
 AliTPCCreateDummyCDB.C:152
 AliTPCCreateDummyCDB.C:153
 AliTPCCreateDummyCDB.C:154
 AliTPCCreateDummyCDB.C:155
 AliTPCCreateDummyCDB.C:156
 AliTPCCreateDummyCDB.C:157
 AliTPCCreateDummyCDB.C:158
 AliTPCCreateDummyCDB.C:159
 AliTPCCreateDummyCDB.C:160
 AliTPCCreateDummyCDB.C:161
 AliTPCCreateDummyCDB.C:162
 AliTPCCreateDummyCDB.C:163
 AliTPCCreateDummyCDB.C:164
 AliTPCCreateDummyCDB.C:165
 AliTPCCreateDummyCDB.C:166
 AliTPCCreateDummyCDB.C:167
 AliTPCCreateDummyCDB.C:168
 AliTPCCreateDummyCDB.C:169
 AliTPCCreateDummyCDB.C:170
 AliTPCCreateDummyCDB.C:171
 AliTPCCreateDummyCDB.C:172
 AliTPCCreateDummyCDB.C:173
 AliTPCCreateDummyCDB.C:174
 AliTPCCreateDummyCDB.C:175
 AliTPCCreateDummyCDB.C:176
 AliTPCCreateDummyCDB.C:177
 AliTPCCreateDummyCDB.C:178
 AliTPCCreateDummyCDB.C:179
 AliTPCCreateDummyCDB.C:180
 AliTPCCreateDummyCDB.C:181
 AliTPCCreateDummyCDB.C:182
 AliTPCCreateDummyCDB.C:183
 AliTPCCreateDummyCDB.C:184
 AliTPCCreateDummyCDB.C:185
 AliTPCCreateDummyCDB.C:186
 AliTPCCreateDummyCDB.C:187
 AliTPCCreateDummyCDB.C:188
 AliTPCCreateDummyCDB.C:189
 AliTPCCreateDummyCDB.C:190
 AliTPCCreateDummyCDB.C:191
 AliTPCCreateDummyCDB.C:192
 AliTPCCreateDummyCDB.C:193
 AliTPCCreateDummyCDB.C:194
 AliTPCCreateDummyCDB.C:195
 AliTPCCreateDummyCDB.C:196
 AliTPCCreateDummyCDB.C:197
 AliTPCCreateDummyCDB.C:198
 AliTPCCreateDummyCDB.C:199
 AliTPCCreateDummyCDB.C:200
 AliTPCCreateDummyCDB.C:201
 AliTPCCreateDummyCDB.C:202
 AliTPCCreateDummyCDB.C:203
 AliTPCCreateDummyCDB.C:204
 AliTPCCreateDummyCDB.C:205
 AliTPCCreateDummyCDB.C:206
 AliTPCCreateDummyCDB.C:207
 AliTPCCreateDummyCDB.C:208
 AliTPCCreateDummyCDB.C:209
 AliTPCCreateDummyCDB.C:210
 AliTPCCreateDummyCDB.C:211
 AliTPCCreateDummyCDB.C:212
 AliTPCCreateDummyCDB.C:213
 AliTPCCreateDummyCDB.C:214
 AliTPCCreateDummyCDB.C:215
 AliTPCCreateDummyCDB.C:216
 AliTPCCreateDummyCDB.C:217
 AliTPCCreateDummyCDB.C:218
 AliTPCCreateDummyCDB.C:219
 AliTPCCreateDummyCDB.C:220
 AliTPCCreateDummyCDB.C:221
 AliTPCCreateDummyCDB.C:222
 AliTPCCreateDummyCDB.C:223
 AliTPCCreateDummyCDB.C:224
 AliTPCCreateDummyCDB.C:225