#ifndef __CINT__ # include "AliFMDParameters.h" # include "AliFMDCorrNoiseGain.h" # include "AliForwardCorrectionManager.h" # include "AliForwardUtil.h" # include "AliCDBManager.h" # include "AliCDBEntry.h" # include "AliCDBStorage.h" # include "AliGRPObject.h" # include "AliMagF.h" # include "AliLog.h" # include <TSystem.h> # include <TROOT.h> # include <TError.h> # include <TString.h> #endif /** * Do one one * * @param runNo Run number * @param which Which one to do */ void ExtractForRun(Int_t runNo) { // --- Figure out the year -------------------------------------- UShort_t year = 0; if (runNo <= 99999) year = 2009; else if (runNo <= 139667) year = 2010; else if (runNo <= 170718) year = 2011; else if (runNo <= 194306) year = 2012; else if (runNo <= 197709) year = 2013; if (year <= 0) { Error("", "Couldn't deduce the year from the run number"); return; } // --- Connect to OCDB --------------------------------------------- AliCDBManager* cdb = AliCDBManager::Instance(); cdb->SetRun(runNo); cdb->SetDefaultStorageFromRun(runNo); #if 0 // --- Get the general run parameters ------------------------------ // AliLog::SetModuleDebugLevel("STEER", 3); AliCDBId grpId("GRP/GRP/Data", runNo + 100, runNo - 100); AliCDBEntry* grpE = cdb->GetDefaultStorage()->GetEntry(grpId); if (!grpE) { Warning("ExtractForRun", "No GRP entry found for run %d", runNo); return; } AliGRPObject* grp = static_cast<AliGRPObject*>(grpE->GetObject()); if (!grp) { Warning("ExtractForRun", "No GRP object found for run %d", runNo); return; } Float_t beamE = grp->GetBeamEnergy(); TString beamT = grp->GetBeamType(); #if 0 // This isn't really needed as the acceptance map is indifferent to // the field settings. Float_t l3cur = grp->GetL3Current(AliGRPObject::kMean); Char_t l3pol = grp->GetL3Polarity(); Bool_t l3lhc = grp->IsPolarityConventionLHC(); Bool_t l3uni = grp->IsUniformBMap(); AliMagF* fldM = AliMagF::CreateFieldMap(TMath::Abs(l3cur) * (l3pol ? -1:1), 0, (l3lhc ? 0 : 1), l3uni, beamE, beamT.Data()); Float_t l3fld = fldM->SolenoidField(); #endif Printf("=== From GRP: Beam: E=%f T=%s", beamE, beamT.Data()); if (beamE > 14000) beamE = 450; if (beamT.IsNull()) beamT = "pp"; UShort_t sys = AliForwardUtil::ParseCollisionSystem(beamT); UShort_t sNN = AliForwardUtil::ParseCenterOfMassEnergy(sys, 2 * beamE); Short_t fld = +999; // AliForwardUtil::ParseMagneticField(l3fld); Printf("=== Run=%d, year=%d, sys=%d, sNN=%d, fld=%d", runNo, year, sys, sNN, fld); #endif UShort_t sys = +999; UShort_t sNN = +999; Short_t fld = +999; // --- Get our parameters ------------------------------------------ AliFMDParameters* param = AliFMDParameters::Instance(); param->Init(true, AliFMDParameters::kPulseGain|AliFMDParameters::kPedestal); // --- Get the object to store ------------------------------------- AliFMDCorrNoiseGain* ret = new AliFMDCorrNoiseGain(); Float_t konst = param->GetDACPerMIP(); // --- Loop over all strips ---------------------------------------- for (UShort_t d = 1; d <= 3; d++) { UShort_t nQ = (d == 1 ? 1 : 2); for (UShort_t q = 0; q < nQ; q++) { Char_t r = (q == 0 ? 'I' : 'O'); UShort_t nS = (q == 0 ? 20 : 40); UShort_t nT = (q == 0 ? 512 : 256); for (UShort_t s = 0; s < nS; s++) { for (UShort_t t = 0; t < nT; t++) { Float_t noise = param->GetPedestalWidth(d,r,s,t); Float_t gain = param->GetPulseGain(d,r,s,t); Float_t corr = 0; if (noise > .5 && gain > .5) corr = noise / (gain * konst); if (corr > 1 || corr < 0) { Warning("", "FMD%d%c[%2d,%3d] corr= %f (=%f/(%f*%f))", d, r, s, t, corr, noise, gain, konst); corr = 0; } ret->Set(d,r,s,t,corr); } } } } // --- Write to a file --------------------------------------------- Printf("=== Writing to disk"); AliForwardCorrectionManager& cm = AliForwardCorrectionManager::Instance(); if (!cm.Store(ret, runNo, sys, sNN, fld, false, false, "fmd_corrections.root", "OLDER")) { Error("", "Failed to store acceptance correction in local file"); return; } } void ExtractAll() { // We need to get a list of runs. We should make an entry for every // pedestal and gain run. // // for y in `seq 2009 2013` ; do \ // for c in PulseGain Pedestal ; do \ // alien_ls /alice/data/${y}/OCDB/FMD/Calib/${c}/ | sed -e 's/Run//' -e 's/_.*//' ; \ // done ; \ // done | sort -u -n | grep -v ^0 | sed 's/\([0-9]*\)/ \1,/' // Int_t runs[] = { // 58360, // 61383, // <-- Start of 2009 75201, 75238, 75311, 75330, 75383, 75384, 75630, 75631, 77901, 80649, 80650, 80738, 82055, 82301, 85947, 85948, 87560, 87561, 91794, 91795, 92436, 92441, 93271, 93273, 93587, 93588, 93595, 94793, 96747, 96945, 96947, 96949, 96956, 96962, 96963, 97226, 97228, 97593, 97996, 98780, 98782, 98974, 98980, 99033, 99084, 99085, 99414, 99726, 100075, 100273, 100594, 100595, 100868, 100967, 101808, 101809, 102034, 102036, 102043, 102238, 102240, 103639, 103641, 103984, 103989, 104108, 104109, 104167, 104169, 104526, 104529, 104901, 104904, 104914, 105111, 105112, // <-- Start of 2010 105827, 105834, 105963, 107718, 110372, 110373, 113268, 113331, 113650, 113651, 114594, 114596, 115126, 115127, 115136, 115160, 115171, 115244, 115334, 115355, 115360, 115477, 115480, 115528, 115530, 115538, 115545, 115651, 115660, 116294, 116335, 116438, 116439, 116440, 116613, 116614, 116655, 117255, 117257, 117258, 117395, 117396, 117397, 117398, 117399, 117400, 117401, 117402, 117403, 117404, 117405, 117406, 117407, 117408, 117409, 117411, 117413, 117415, 117416, 117417, 117418, 117420, 117421, 117422, 117423, 117424, 117425, 117426, 117427, 117428, 117429, 117431, 117432, 117433, 117434, 117435, 117437, 117438, 117439, 117441, 117442, 117443, 117444, 117445, 117446, 117447, 117448, 117450, 117452, 117453, 117458, 117459, 117461, 117464, 117471, 117476, 117478, 117483, 117492, 117495, 117496, 117498, 117512, 117524, 117561, 117571, 117588, 117606, 117612, 117616, 117624, 117630, 117648, 117650, 117664, 117677, 117678, 117680, 117681, 117682, 117684, 117687, 117688, 117689, 117690, 117693, 117695, 117698, 117699, 117700, 117701, 117702, 117703, 117704, 117706, 117707, 117708, 117709, 117712, 117714, 117717, 117719, 117720, 117722, 117723, 117724, 117725, 117726, 117728, 117730, 117731, 117733, 117735, 117736, 117737, 117738, 117739, 117741, 117742, 117744, 117745, 117746, 117747, 117763, 117772, 117776, 117779, 117784, 119187, 119200, 120542, 120543, 121526, 121527, 121528, 121532, 121550, 121554, 121557, 121621, 121638, 121651, 121656, 121662, 121667, 121677, 121686, 121691, 121697, 121698, 121700, 121702, 121704, 121706, 121708, 121710, 121712, 121713, 121714, 121715, 121717, 121719, 121722, 121724, 121726, 121728, 121730, 121732, 121734, 121736, 121738, 121740, 121742, 121743, 121963, 121965, 121968, 121970, 121980, 121982, 121983, 121985, 121986, 121987, 121988, 121989, 121990, 121991, 121992, 121993, 121994, 121995, 121996, 121997, 121998, 121999, 122000, 122001, 122002, 122003, 122004, 122005, 122006, 122007, 122008, 122009, 122010, 122011, 122012, 122013, 124437, 124438, 125892, 125894, 125896, 125897, 126043, 126046, 126939, 126940, 128138, 128140, 128511, 128512, 129793, 129796, 129804, 130290, 130291, 131336, 131337, 131383, 131386, 131387, 131389, 131392, 131396, 131397, 131398, 131399, 131400, 132637, 132638, 132789, 132799, 135478, 135479, 136733, 136738, 136740, 138243, 138244, 138935, // <-- Start of 2011 144429, 144751, 144837, 144856, 145167, 145169, 145170, 146647, 146650, 147281, 147285, 147289, 147299, 147301, 147307, 147318, 149252, 149256, 154053, 154054, 154057, 155422, 155424, 155430, 155933, 155934, 156030, 156032, 156037, 156038, 156201, 156202, 156204, 156207, 156217, 156222, 156778, 156780, 157800, 157801, 157802, 157804, 157805, 157808, 158993, 158994, 165623, 165636, 165637, 166817, 166819, 167219, 167221, 169438, 169443, 169446, 169448, 169449, 169450, 169451, 169484, 169486, // <-- Start of 2012 172968, 172970, 175768, 175769, 176615, 176616, 176617, 177999, 178000, 178562, 178571, 179962, 179963, 182380, 182381, 183249, 183253, 183594, 183596, 184904, 184911, 184912, 185266, 185267, 185269, 185270, 185873, 186408, 186471, 187021, 187022, 187023, 187259, 187263, 187803, 187804, 188300, 188301, 188851, 188856, 189256, 189257, 191769, 191770, // <-- Start of 2013 194507, 194522, 194523, 194526, 194589, 194590, 195027, 195030, // <-- End marker -1 }; Int_t* pRun = runs; Int_t skipped = 0; Int_t total = 0; Int_t last = 0; while (*pRun > 0) { Int_t next = *(pRun+1); Int_t dist = next - *pRun; total++; if (next > 0 && dist <= 20) { skipped++; pRun++; continue; } #if 0 if (last > 0) { dist = *pRun - last; Printf("%-6d %s%d,%d,",dist, url,last,*pRun); } #endif last = *pRun; ExtractForRun(last); pRun++; } Info("", "Skipped %d of %d", skipped, total); } // // EOF //