2 // Manager (singleton) of corrections
4 #include "AliForwardCorrectionManager.h"
5 #include "AliFMDCorrDoubleHit.h"
6 #include "AliFMDCorrELossFit.h"
7 #include "AliFMDCorrVertexBias.h"
8 #include "AliFMDCorrMergingEfficiency.h"
9 #include "AliFMDCorrAcceptance.h"
10 #include "AliForwardUtil.h"
20 //____________________________________________________________________
21 AliForwardCorrectionManager* AliForwardCorrectionManager::fgInstance = 0;
22 const char* AliForwardCorrectionManager::fgkSecondaryMapSkel = "secondary";
23 const char* AliForwardCorrectionManager::fgkDoubleHitSkel = "doublehit";
24 const char* AliForwardCorrectionManager::fgkELossFitsSkel = "elossfits";
25 const char* AliForwardCorrectionManager::fgkVertexBiasSkel = "vertexbias";
26 const char* AliForwardCorrectionManager::fgkMergingEffSkel = "merging";
27 const char* AliForwardCorrectionManager::fgkAcceptanceSkel = "acceptance";
29 #define PREFIX "$(ALICE_ROOT)/PWG2/FORWARD/corrections/"
30 #define ELOSSFIT_DIR "ELossFits"
31 #define MERGING_DIR "MergingEfficiency"
32 #define SECONDARY_DIR "SecondaryMap"
33 #define DOUBLE_DIR "DoubleHit"
34 #define VERTEX_DIR "VertexBias"
35 #define ACCEPTANCE_DIR "Acceptance"
37 //____________________________________________________________________
38 AliForwardCorrectionManager& AliForwardCorrectionManager::Instance()
41 // Access to the singleton object
44 // Reference to the singleton object
46 if (!fgInstance) fgInstance= new AliForwardCorrectionManager;
50 //____________________________________________________________________
51 AliForwardCorrectionManager::AliForwardCorrectionManager()
57 fELossFitsPath(PREFIX ELOSSFIT_DIR),
58 fMergingEffPath(PREFIX MERGING_DIR),
59 fSecondaryMapPath(PREFIX SECONDARY_DIR),
60 fDoubleHitPath(PREFIX DOUBLE_DIR),
61 fVertexBiasPath(PREFIX VERTEX_DIR),
62 fAcceptancePath(PREFIX ACCEPTANCE_DIR),
67 fMergingEfficiency(0),
71 // Default constructor
74 //____________________________________________________________________
75 AliForwardCorrectionManager::AliForwardCorrectionManager(const AliForwardCorrectionManager& o)
81 fELossFitsPath(o.fELossFitsPath),
82 fMergingEffPath(o.fMergingEffPath),
83 fSecondaryMapPath(o.fSecondaryMapPath),
84 fDoubleHitPath(o.fDoubleHitPath),
85 fVertexBiasPath(o.fVertexBiasPath),
86 fAcceptancePath(o.fAcceptancePath),
87 fELossFit(o.fELossFit),
88 fSecondaryMap(o.fSecondaryMap),
89 fDoubleHit(o.fDoubleHit),
90 fVertexBias(o.fVertexBias),
91 fMergingEfficiency(o.fMergingEfficiency),
92 fAcceptance(o.fAcceptance)
99 // o Object to copy from
102 //____________________________________________________________________
103 AliForwardCorrectionManager&
104 AliForwardCorrectionManager::operator=(const AliForwardCorrectionManager& o)
107 // Assignment operator
110 // o Object to assign from
113 // Reference to this object
119 fELossFitsPath = o.fELossFitsPath;
120 fMergingEffPath = o.fMergingEffPath;
121 fSecondaryMapPath = o.fSecondaryMapPath;
122 fDoubleHitPath = o.fDoubleHitPath;
123 fVertexBiasPath = o.fVertexBiasPath;
124 fAcceptancePath = o.fAcceptancePath;
125 fELossFit = o.fELossFit;
126 fSecondaryMap = o.fSecondaryMap;
127 fDoubleHit = o.fDoubleHit;
128 fVertexBias = o.fVertexBias;
129 fMergingEfficiency= o.fMergingEfficiency;
130 fAcceptance = o.fAcceptance;
134 //____________________________________________________________________
136 AliForwardCorrectionManager::SetPrefix(const char* prefix)
140 * @param prefix Prefix to correction objects.
142 fELossFitsPath = Form("%s/%s", prefix, ELOSSFIT_DIR);
143 fMergingEffPath = Form("%s/%s", prefix, MERGING_DIR);
144 fSecondaryMapPath = Form("%s/%s", prefix, SECONDARY_DIR);
145 fDoubleHitPath = Form("%s/%s", prefix, DOUBLE_DIR);
146 fVertexBiasPath = Form("%s/%s", prefix, VERTEX_DIR);
147 fAcceptancePath = Form("%s/%s", prefix, ACCEPTANCE_DIR);
150 //____________________________________________________________________
152 AliForwardCorrectionManager::SetFileDir(ECorrection what, const char* dir)
155 * Set the file directory for a type
158 * @param dirname Directory name
161 if (what & kSecondaryMap) path = &fSecondaryMapPath;
162 else if (what & kDoubleHit) path = &fDoubleHitPath;
163 else if (what & kELossFits) path = &fELossFitsPath;
164 else if (what & kVertexBias) path = &fVertexBiasPath;
165 else if (what & kMergingEfficiency) path = &fMergingEffPath;
166 else if (what & kAcceptance) path = &fAcceptancePath;
168 AliWarning(Form("No such path defined for 0x%02x", what));
172 AliWarning(Form("Couldn't find string for path 0x%02x", what));
178 //____________________________________________________________________
180 AliForwardCorrectionManager::Init(const char* cms,
188 // Read in correction based on passed parameters
191 // collisionSystem Collision system string
192 // cmsNN Center of mass energy per nucleon pair [GeV]
193 // field Magnetic field [kG]
194 // mc Monte-carlo switch
195 // what What to read in
196 // force Force (re-)reading of specified things
201 UShort_t col = AliForwardUtil::ParseCollisionSystem(cms);
202 // AliInfo(Form("Initialising with cms='%s', sNN=%fGeV field=%fkG",
203 // cms, sNN, field));
205 AliForwardUtil::ParseCenterOfMassEnergy(col, sNN),
206 AliForwardUtil::ParseMagneticField(field),
210 //____________________________________________________________________
212 AliForwardCorrectionManager::Init(UShort_t cms,
220 // Read in corrections based on the parameters given
223 // collisionSystem Collision system
224 // cmsNN Center of mass energy per nuclean pair [GeV]
225 // field Magnetic field setting [kG]
226 // mc Monte-carlo switch
227 // what What to read in.
228 // force Force (re-)reading of specified things
233 if (force) fInit = kFALSE;
235 // Check that the initialisation and the passed parameters
236 // match - if not give an error but continue - this allows
237 // users to override particular settings.
239 AliInfo("We are already initialised - checking settings...");
242 AliWarning(Form("Initialised collision system %s (%d) and "
243 "passed same %s (%d) does not match",
244 AliForwardUtil::CollisionSystemString(fSys), fSys,
245 AliForwardUtil::CollisionSystemString(cms), cms));
248 if (TMath::Abs(fSNN - sNN) >= 10) {
249 AliWarning(Form("Initialised center of mass energy per nuclean "
250 "%s (%d) and passed same %s (%d) does not match",
251 AliForwardUtil::CenterOfMassEnergyString(fSNN), fSNN,
252 AliForwardUtil::CenterOfMassEnergyString(sNN), sNN));
255 if (fField != field) {
256 AliWarning(Form("Initialied L3 magnetic field %s (%d) and passed "
257 "same %s (%d) does not match",
258 AliForwardUtil::MagneticFieldString(fField), fField,
259 AliForwardUtil::MagneticFieldString(field), field));
263 AliWarning("Intialised parameters and these are not the same "
264 "- PROCEED WITH CAUTION!");
267 AliInfo("Initialized values consistent with data");
273 if (fSys == cms && TMath::Abs(fSNN - sNN) < 10 && fField == field) {
274 // We're already initialised for these settings - do nothing and return
278 // Set cached parameters
283 // AliInfo(Form("Initialising with cms=%d, sNN=%dGeV field=%dkG",
284 // cms, sNN, field));
285 // Read secondary map if requested
286 if (what & kSecondaryMap) {
287 if (!ReadSecondaryMap(cms, sNN, field)) {
288 AliWarning(Form("Failed to read in secondary map for "
289 "cms=%d, sNN=%dGeV, field=%dkG", cms, sNN, field));
293 // Read double hit if requested
294 if (what & kDoubleHit) {
295 if (!ReadDoubleHit(cms, sNN, field)) {
296 AliWarning(Form("Failed to read in double hit correction for "
297 "cms=%d, sNN=%dGeV, field=%dkG", cms, sNN, field));
301 // Read energy loss fits if requested
302 if (what & kELossFits) {
303 if (!ReadELossFits(cms, sNN, field, mc)) {
304 AliWarning(Form("Failed to read in energy loss fits for "
305 "cms=%d, sNN=%dGeV, field=%dkG, %s",
306 cms, sNN, field, mc ? "MC" : "real"));
310 // Read acceptance correction if requested
311 if (what & kAcceptance) {
312 if (!ReadAcceptance(cms, sNN, 0)) {
313 AliWarning(Form("Failed to read in acceptance for "
314 "cms=%d, sNN=%dGeV, field=%dkG", cms, sNN, 0));
318 // Read event selection efficiencies if requested
319 if (what & kVertexBias) {
320 if (!ReadVertexBias(cms, sNN, field)) {
321 AliWarning(Form("Failed to read in vertex bias correction for "
322 "cms=%d, sNN=%dGeV, field=%dkG", cms, sNN, field));
326 // Read merging efficiencies if requested
327 if (what & kMergingEfficiency) {
328 if (!ReadMergingEfficiency(cms, sNN, field)) {
329 AliWarning(Form("Failed to read in hit merging efficiency for "
330 "cms=%d, sNN=%dGeV, field=%dkG",
339 //____________________________________________________________________
341 AliForwardCorrectionManager::GetFileName(ECorrection what,
348 // Get the path to the specified object
351 // what Which stuff to get the path for
352 // sys Collision system
353 // sNN Center of mass energy [GeV]
354 // field Magnetic field in the L3 magnet [kG]
355 // mc Whether the correction objects should be valid for MC
358 // The full path or null
361 fname = GetObjectName(what);
362 fname.Append(Form("_%s_%04dGeV_%c%1dkG_%s.root",
363 AliForwardUtil::CollisionSystemString(sys),
364 sNN, (field < 0 ? 'm' : 'p'), TMath::Abs(field),
365 (mc ? "MC" : "real")));
368 //____________________________________________________________________
370 AliForwardCorrectionManager::GetFileName(ECorrection what) const
373 // Get the file name of the specified object
376 // what Which stuff to get the path for
379 // The full path or null
382 AliWarning("Corrections manager initialised, do a forced Init(...)");
385 return GetFileName(what, fSys, fSNN, fField, false);
388 //____________________________________________________________________
390 AliForwardCorrectionManager::GetFileDir(ECorrection what) const
393 // Get the path to the specified object
396 // what Which stuff to get the path for
399 // The full path or null
401 if (what & kSecondaryMap) return fSecondaryMapPath;
402 else if (what & kDoubleHit) return fDoubleHitPath;
403 else if (what & kELossFits) return fELossFitsPath;
404 else if (what & kVertexBias) return fVertexBiasPath;
405 else if (what & kMergingEfficiency) return fMergingEffPath;
406 else if (what & kAcceptance) return fAcceptancePath;
408 AliWarning(Form("Unknown correction: %d", what));
412 //____________________________________________________________________
414 AliForwardCorrectionManager::GetFilePath(ECorrection what,
421 // Get the path to the specified object
424 // what Which stuff to get the path for
425 // sys Collision system
426 // sNN Center of mass energy [GeV]
427 // field Magnetic field in the L3 magnet [kG]
428 // mc Whether the correction objects should be valid for MC
431 // The full path or null
434 const Char_t* dir = GetFileDir(what);
435 if (!dir) return path;
437 TString fname(GetFileName(what, sys, sNN, field, mc));
438 if (fname.IsNull()) return path;
440 path = gSystem->ConcatFileName(gSystem->ExpandPathName(dir), fname);
444 //____________________________________________________________________
446 AliForwardCorrectionManager::GetFilePath(ECorrection what) const
449 // Get the full path to the object. Note, the manager must be
450 // initialised for this to work
453 // what Which stuff to get the path for
456 // The full path or null
459 AliWarning("Corrections manager initialised, do a forced Init(...)");
462 return GetFilePath(what, fSys, fSNN, fField, false);
465 //____________________________________________________________________
467 AliForwardCorrectionManager::GetFile(ECorrection what,
473 Bool_t newfile) const
476 // Open the file that contains the correction object specified
479 // what Which stuff to get the path for
480 // sys Collision system
481 // sNN Center of mass energy [GeV]
482 // field Magnetic field in the L3 magnet [kG]
483 // mc Whether the correction objects should be valid for MC
484 // rw Whether to open the file in read/write
485 // newfile Wheter to make the file if it doesn't exist
488 // The file that contains the correction object or null
490 TString path = GetFilePath(what, sys, sNN, field, mc);
491 if (path.IsNull()) return 0;
494 if (newfile) opt="RECREATE";
496 if (gSystem->AccessPathName(path.Data(),
497 (rw ? kWritePermission : kReadPermission))) {
498 AliWarning(Form("file %s cannot be found or insufficient permissions",
502 opt=(rw ? "UPDATE" : "READ");
504 TFile* file = TFile::Open(path.Data(), opt.Data());
506 AliWarning(Form("file %s cannot be opened in mode %s",
507 path.Data(), opt.Data()));
512 //____________________________________________________________________
514 AliForwardCorrectionManager::GetFile(ECorrection what) const
517 // Get the file that contains the object specifed. Note, the manager
518 // must be initialised for this to work.
521 // what Which stuff to get the path for
524 // The file that contains the correction object or null
527 AliWarning("Corrections manager initialised, do a forced Init(...)");
530 return GetFile(what, fSys, fSNN, fField, false);
533 //____________________________________________________________________
535 AliForwardCorrectionManager::GetObjectName(ECorrection what) const
538 // Get the object name corresponding to correction type
544 // Object name or null
546 if (what & kSecondaryMap) return fgkSecondaryMapSkel;
547 else if (what & kDoubleHit) return fgkDoubleHitSkel;
548 else if (what & kELossFits) return fgkELossFitsSkel;
549 else if (what & kVertexBias) return fgkVertexBiasSkel;
550 else if (what & kMergingEfficiency) return fgkMergingEffSkel;
551 else if (what & kAcceptance) return fgkAcceptanceSkel;
555 //____________________________________________________________________
557 AliForwardCorrectionManager::CheckObject(TFile* file, ECorrection what) const
560 // Check if the specified objet exists in the file, and return it
563 // file File to query
564 // what Correction type
567 // Object found, or null
569 TObject* o = file->Get(GetObjectName(what));
571 AliWarning(Form("Object %s not found in %s",
572 GetObjectName(what), file->GetName()));
579 //____________________________________________________________________
581 AliForwardCorrectionManager::GetObject(ECorrection what,
588 // Get the path to the specified object
591 // what Which stuff to get the path for
592 // sys Collision system
593 // sNN Center of mass energy [GeV]
594 // field Magnetic field in the L3 magnet [kG]
595 // mc Whether the correction objects should be valid for MC
598 // The full path or null
600 TFile* file = GetFile(what, sys, sNN, field, mc, false, false);
603 return CheckObject(file, what);
605 //____________________________________________________________________
607 AliForwardCorrectionManager::GetObject(ECorrection what) const
610 // Get the object that contaisn the specified correction
613 // what Which object to get
616 // The object or null
619 AliWarning("Corrections manager initialised, do a forced Init(...)");
622 return GetObject(what, fSys, fSNN, fField, false);
626 //____________________________________________________________________
628 AliForwardCorrectionManager::ReadSecondaryMap(UShort_t sys, UShort_t sNN,
632 // Read in the secondary map
635 // sys Collision system
636 // sNN Center of mass energy [GeV]
637 // field Magnetic field in the L3 magnet [kG]
640 // True on success, false otherwise
643 AliWarning("Corrections manager initialised, do a forced Init(...)");
647 TObject* o = GetObject(kSecondaryMap, sys, sNN, field, false);
648 if (!o) return kFALSE;
650 fSecondaryMap = dynamic_cast<AliFMDCorrSecondaryMap*>(o);
651 if (!fSecondaryMap) {
652 AliWarning(Form("Object %s (%p) is not an AliFMDCorrSecondaryMap object, "
653 "but %s", fgkSecondaryMapSkel, o, o->ClassName()));
660 //____________________________________________________________________
662 AliForwardCorrectionManager::ReadDoubleHit(UShort_t sys, UShort_t sNN,
666 // Read in the double hit correction
669 // sys Collision system
670 // sNN Center of mass energy [GeV]
671 // field Magnetic field in the L3 magnet [kG]
674 // True on success, false otherwise
677 AliWarning("Corrections manager initialised, do a forced Init(...)");
681 TObject* o = GetObject(kDoubleHit, sys, sNN, field, false);
682 if (!o) return kFALSE;
684 fDoubleHit = dynamic_cast<AliFMDCorrDoubleHit*>(o);
686 AliWarning(Form("Object %s (%p) is not an AliFMDCorrDoubleHit object, "
687 "but %s", fgkDoubleHitSkel, o, o->ClassName()));
695 //____________________________________________________________________
697 AliForwardCorrectionManager::ReadELossFits(UShort_t sys, UShort_t sNN,
698 Short_t field, Bool_t mc)
701 // Read in the energy loss fits
704 // sys Collision system
705 // sNN Center of mass energy [GeV]
706 // field Magnetic field in the L3 magnet [kG]
707 // mc Whether the correction objects should be valid for MC
710 // True on success, false otherwise
713 AliWarning("Corrections manager initialised, do a forced Init(...)");
717 TObject* o = GetObject(kELossFits, sys, sNN, field, mc);
718 if (!o) return kFALSE;
720 fELossFit = dynamic_cast<AliFMDCorrELossFit*>(o);
722 AliWarning(Form("Object %s (%p) is not an AliFMDCorrELossFit object, "
723 "but %s", fgkELossFitsSkel, o, o->ClassName()));
731 //____________________________________________________________________
733 AliForwardCorrectionManager::ReadVertexBias(UShort_t sys,
738 // Read in the event selection efficiency
741 // sys Collision system
742 // sNN Center of mass energy [GeV]
743 // field Magnetic field in the L3 magnet [kG]
746 // True on success, false otherwise
749 AliWarning("Corrections manager initialised, do a forced Init(...)");
753 TObject* o = GetObject(kVertexBias, sys, sNN, field, false);
754 if (!o) return kFALSE;
756 fVertexBias = dynamic_cast<AliFMDCorrVertexBias*>(o);
758 AliWarning(Form("Object %s (%p) is not an AliFMDCorrVertexBias object, "
759 "but %s", fgkVertexBiasSkel, o, o->ClassName()));
767 //____________________________________________________________________
769 AliForwardCorrectionManager::ReadMergingEfficiency(UShort_t sys,
774 // Read in the merging efficiency
777 // sys Collision system
778 // sNN Center of mass energy [GeV]
779 // field Magnetic field in the L3 magnet [kG]
782 // True on success, false otherwise
785 AliWarning("Corrections manager initialised, do a forced Init(...)");
789 TObject* o = GetObject(kMergingEfficiency, sys, sNN, field, false);
790 if (!o) return kFALSE;
792 fMergingEfficiency = dynamic_cast<AliFMDCorrMergingEfficiency*>(o);
793 if (!fMergingEfficiency) {
794 AliWarning(Form("Object %s (%p) is not an AliFMDCorrMergingEfficiency "
795 "object, but %s", fgkMergingEffSkel, o, o->ClassName()));
803 //____________________________________________________________________
805 AliForwardCorrectionManager::ReadAcceptance(UShort_t sys,
810 // Read in the event selection efficiency
813 // sys Collision system
814 // sNN Center of mass energy [GeV]
815 // field Magnetic field in the L3 magnet [kG]
818 // True on success, false otherwise
821 AliWarning("Corrections manager initialised, do a forced Init(...)");
825 TObject* o = GetObject(kAcceptance, sys, sNN, field, false);
826 if (!o) return kFALSE;
828 fAcceptance = dynamic_cast<AliFMDCorrAcceptance*>(o);
830 AliWarning(Form("Object %s (%p) is not an AliFMDCorrAcceptance object, "
831 "but %s", fgkAcceptanceSkel, o, o->ClassName()));
838 //____________________________________________________________________
840 AliForwardCorrectionManager::Print(Option_t* option) const
845 char ind[gROOT->GetDirLevel()+1];
846 for (Int_t i = 0; i < gROOT->GetDirLevel(); i++) ind[i] = ' ';
847 ind[gROOT->GetDirLevel()] = '\0';
849 std::cout << ind << "AliForwardCorrectionManager:\n"
850 << ind << " Initialised: "
851 << (fInit ? "yes" : "no") << std::endl;
853 std::cout << ind << " Collision system: "
854 << AliForwardUtil::CollisionSystemString(fSys) << "\n"
855 << ind << " Sqrt(s_NN): "
856 << AliForwardUtil::CenterOfMassEnergyString(fSNN) << "\n"
857 << ind << " Magnetic field: "
858 << AliForwardUtil::MagneticFieldString(fField) << std::endl;
859 std::cout << ind << " Paths:\n"
860 << ind << " ELoss Fits: " << fELossFitsPath << "\n"
861 << ind << " Merging eff.: " << fMergingEffPath << "\n"
862 << ind << " Secondary maps: " << fSecondaryMapPath << "\n"
863 << ind << " 2-hit corr.: " << fSecondaryMapPath << "\n"
864 << ind << " Vertex bias: " << fVertexBiasPath << "\n"
865 << ind << " Acceptance: " << fAcceptancePath << std::endl;
868 if (!opt.Contains("R")) return;
870 gROOT->IncreaseDirLevel();
871 if (fELossFit) fELossFit->Print(option);
873 std::cout << ind << " Energy loss fits not initialised" << std::endl;
875 if (fSecondaryMap) fSecondaryMap->Print(option);
877 std::cout << ind << " Secondary particle correction not initialised"
880 if (fDoubleHit) fDoubleHit->Print(option);
882 std::cout << ind << " Double hit corr. not initialised" << std::endl;
884 if (fVertexBias) fVertexBias->Print(option);
886 std::cout << ind << " Vertex bias correction not initialised" << std::endl;
887 if (fMergingEfficiency) fMergingEfficiency->Print(option);
889 std::cout << ind << " Merging eff. not initialised" << std::endl;
891 if (fAcceptance) fAcceptance->Print(option);
893 std::cout << ind << " Acceptance corr. not initialised" << std::endl;
894 gROOT->DecreaseDirLevel();
897 //____________________________________________________________________
899 AliForwardCorrectionManager::Browse(TBrowser* b)
904 if (fELossFit) b->Add(fELossFit, "Energy loss fits");
905 if (fSecondaryMap) b->Add(fSecondaryMap, "Secondary particle corr");
906 if (fDoubleHit) b->Add(fDoubleHit, "Double hit corr");
907 if (fVertexBias) b->Add(fVertexBias, "Vertex bias corr");
908 if (fMergingEfficiency) b->Add(fMergingEfficiency, "Merging eff");
909 if (fAcceptance) b->Add(fAcceptance, "Acceptance corr");
912 //____________________________________________________________________
914 AliForwardCorrectionManager::WriteFile(ECorrection what,
923 // Write correction output to (a temporary) file
926 // What What to write
927 // sys Collision system (1: pp, 2: PbPb)
928 // sNN Center of mass energy per nucleon (GeV)
931 // obj Object to write
932 // full if true, write to full path, otherwise locally
938 ofName = GetFileName(what, sys, sNN, fld, mc);
940 ofName = GetFilePath(what, sys, sNN, fld, mc);
941 if (ofName.IsNull()) {
942 AliError(Form("Unknown object type %d", what));
945 TFile* output = TFile::Open(ofName, "RECREATE");
947 AliError(Form("Failed to open file %s", ofName.Data()));
951 TString oName(GetObjectName(what));
952 Int_t ret = obj->Write(oName);
954 AliError(Form("Failed to write %p to %s/%s (%d)",
955 obj, ofName.Data(), oName.Data(), ret));
959 ret = output->Write();
961 AliError(Form("Failed to write %s to disk (%d)", ofName.Data(), ret));
967 TString cName(obj->IsA()->GetName());
968 AliInfo(Form("Wrote %s object %s to %s",
969 cName.Data(), oName.Data(), ofName.Data()));
971 TString dName(GetFileDir(what));
972 AliInfo(Form("%s should be copied to %s"
973 "Do for example\n\n\t"
974 "aliroot $ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/"
975 "MoveCorrections.C\\(%d\\)\nor\n\t"
977 ofName.Data(),dName.Data(),
979 gSystem->ExpandPathName(dName.Data())));
985 //______________________________________________________________________________
986 void AliForwardCorrectionManager::Streamer(TBuffer &R__b)
989 // Stream an object of class AliForwardCorrectionManager.
991 if (R__b.IsReading()) {
992 R__b.ReadClassBuffer(AliForwardCorrectionManager::Class(),this);
994 AliWarning(Form("Singleton instance already set (%p) when reading "
995 "singleton object (%p). Read object will be new "
996 "singleton object", fgInstance, this));
999 R__b.WriteClassBuffer(AliForwardCorrectionManager::Class(),this);
1004 //______________________________________________________________________________
1005 void AliForwardCorrectionManager::Streamer(TBuffer &R__b)
1007 // Stream an object of class AliForwardCorrectionManager.
1010 if (R__b.IsReading()) {
1011 Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
1012 TObject::Streamer(R__b);
1017 fELossFitsPath.Streamer(R__b);
1018 fMergingEffPath.Streamer(R__b);
1019 fSecondaryMapPath.Streamer(R__b);
1020 fDoubleHitPath.Streamer(R__b);
1021 fVertexBiasPath.Streamer(R__b);
1022 fAcceptancePath.Streamer(R__b);
1024 R__b >> fSecondaryMap;
1026 R__b >> fVertexBias;
1027 R__b >> fMergingEfficiency;
1028 R__b >> fAcceptance;
1029 R__b.CheckByteCount(R__s, R__c, AliForwardCorrectionManager::IsA());
1031 R__c = R__b.WriteVersion(AliForwardCorrectionManager::IsA(), kTRUE);
1032 TObject::Streamer(R__b);
1037 fELossFitsPath.Streamer(R__b);
1038 fMergingEffPath.Streamer(R__b);
1039 fSecondaryMapPath.Streamer(R__b);
1040 fDoubleHitPath.Streamer(R__b);
1041 fVertexBiasPath.Streamer(R__b);
1042 fAcceptancePath.Streamer(R__b);
1044 R__b << fSecondaryMap;
1046 R__b << fVertexBias;
1047 R__b << fMergingEfficiency;
1048 R__b << fAcceptance;
1049 R__b.SetByteCount(R__c, kTRUE);
1054 //____________________________________________________________________