MpdFieldCreator.cxx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // -------------------------------------------------------------------------
  2. // MpdFieldCreator source file -----
  3. // Created 23/07/13 by P. Batyuk (MPD) <batyuk@jinr.ru> -----
  4. // from MpdFieldCreator (PNDROOT) -----
  5. // -------------------------------------------------------------------------
  6. /// Last modified: 24.07.2013, P.B.
  7. #include "MpdFieldCreator.h"
  8. #include "MpdFieldMap.h"
  9. #include "MpdConstField.h"
  10. #include "MpdMultiField.h"
  11. #include "MpdMultiFieldPar.h"
  12. #include "MpdConstPar.h"
  13. #include "MpdMapPar.h"
  14. #include "FairRunAna.h"
  15. #include "FairRuntimeDb.h"
  16. #include "TObjArray.h"
  17. #include <iostream>
  18. using std::cout;
  19. using std::endl;
  20. static MpdFieldCreator gMpdFieldCreator;
  21. //-------------------------------------------------------------------
  22. MpdFieldCreator::MpdFieldCreator()
  23. :FairFieldFactory()
  24. {
  25. fCreator=this;
  26. fSPar=0;
  27. fDPar=0;
  28. fTPar=0;
  29. fCPar=0;
  30. fMPar=0;
  31. fFieldPar=0;
  32. }
  33. //-------------------------------------------------------------------
  34. MpdFieldCreator::~MpdFieldCreator() { }
  35. //-------------------------------------------------------------------
  36. void MpdFieldCreator::SetParm()
  37. {
  38. cout << "MpdFieldCreator::SetParm()" <<endl;
  39. FairRunAna *Run = FairRunAna::Instance();
  40. FairRuntimeDb *RunDB = Run->GetRuntimeDb();
  41. fFieldPar = (MpdFieldPar*) RunDB->getContainer("MpdFieldPar");
  42. fCPar = (MpdConstPar *)RunDB->getContainer("MpdConstPar");
  43. fMPar = (MpdMultiFieldPar*)RunDB->getContainer("MpdMultiFieldPar");
  44. }
  45. //-------------------------------------------------------------------
  46. FairField* MpdFieldCreator::createFairField()
  47. {
  48. cout << "MpdFieldCreator::createFairField()" <<endl;
  49. FairField *fMagneticField=0;
  50. MpdMultiField *MField=0;
  51. Int_t Type=-1;
  52. Bool_t multi=kFALSE;
  53. MField = new MpdMultiField(fMPar);
  54. Type= fMPar->GetType();
  55. if (Type==-1) {delete MField; MField=0;}
  56. if(MField) {
  57. multi=kTRUE;
  58. TObjArray *fParArray=fMPar->GetParArray();
  59. TIterator *Iter=fParArray->MakeIterator();
  60. Iter->Reset();
  61. MpdMapPar* fPar = NULL;
  62. while( (fPar = (MpdMapPar*)Iter->Next() ) ) {
  63. fPar->Print();
  64. if (fPar->GetType()==0) {
  65. FairField *fField1 = new MpdConstField((MpdConstPar*)fPar);
  66. MField->AddField(fField1);
  67. }
  68. else if (fPar->GetType()==1) {
  69. FairField *fField2 = new MpdFieldMap((MpdFieldPar*)fPar);
  70. MField->AddField(fField2);
  71. }
  72. }
  73. delete Iter;
  74. }
  75. FairField *fField1 = new MpdConstField(fCPar);
  76. Type= fCPar->GetType();
  77. if (Type==-1) {delete fField1; fField1=0;}
  78. if(fField1)fMagneticField=fField1;
  79. FairField *fField2 = new MpdFieldMap(fFieldPar);
  80. Type= fFieldPar->GetType();
  81. if (Type==-1){delete fField2; fField2=0;}
  82. if(fField2)fMagneticField=fField2;
  83. if (multi) {
  84. MField->Init();
  85. return MField;
  86. }
  87. else{
  88. if(fMagneticField){
  89. fMagneticField->Init();
  90. }
  91. return fMagneticField;
  92. }
  93. }
  94. ClassImp(MpdFieldCreator)